西川善司の3Dゲームファンのためのグラフィックス講座【GDC特別編】
NGP開発者に無償提供されるPhyre Engineとは?
Phyre Engineの機能から窺い知るNGPのパフォーマンス
■ PC、Xbox 360へのポーティングも想定したSCE製エンジン「Phyre Engine」とはなにか?
Sony Computer Entertainment Europe(SCEE)が提供しているユニークなゲームエンジンに「Phyre Engine」(ファイヤーエンジン)というものがある。
Phyre Engineは一般的な商用エンジンではなく、プレイステーション 3ライセンシーに対して無償でフルソース提供されるモジュールタイプ/ライブラリ形態のエンジンとなっており、一般への知名度はそれほど高くはない。ただ、アートデータ作成/処理のパイプラインまでが整備され、サンプルゲームはアートセット付きのフルソース/フルデータセットで提供され、詳細なドキュメントも付属する至りつくせりの構成となっている。
Phyre Engine3のテクニカルデモより |
GDC2008当時の本連載のPhyre Engineを紹介した回では、PS3向けのゲームエンジンでありながら、Xbox 360やWindows PCへの移植までを考えた開発が行なえるという特徴機能について紹介したことがあるので基本的な情報についてはそちらの記事を参照して欲しい。
さて、今回のGDC20111では、「The Next Generation of Phyre Engine」というセッションの中で、Phyre Engineがバージョン3へバージョンアップすることが報告された。 今回のバージョンアップは従来の2.xからの3.0へのメジャーバージョンアップとなるわけなのだが、ホットトピックはなんといっても「NGPへの対応」ということになる。
GDC展示会場内のソニーブースでもNGPは注目の的だった |
■ NGPへのエンジン移植作業は「楽だった」
Matt Swoboda氏(Sony Computer Entertainment Europe R&D,Principal Engineer) |
Swoboda氏は、セッションの中で、Phyre Engine(PE)をNGPに対応させるまでのプロセスを語った。
もともとPEは、PS3、そしてXbox 360とPCまでをターゲットにしたクロスプラットフォーム開発を想定した開発されたエンジンだが、PS3、Xbox 360、PCという3プラットフォームが比較的高性能であったこともあって、ハイエンドプラットフォームが想定された基本設計となっていた。
NGPの基本スペック情報 | PE3のNGP対応化にあたっての注意点 |
PS3版からよりはPC版からの移植が楽だった |
今回、新対応するNGPは、現行のいかなるスマートフォンやタブレット端末と比較しても高性能ではあるが、PS3、Xbox 360、PCとは性能面で遠く及ばないことがわかっていたため、エンジンのアーキテクチャにスケーラビリティを持たせることが心がけられたという。
しかし、その基本エンジン部分のNGPへの移植の初期フェーズはそれほど難しくはなかったとSwoboda氏は振り返る。
移植元となったのはPCバージョンだったそうで、これはNGPのCPUが対称型マルチコアでPC向けのCPUの構造に近いからだ。
基本的なエンジン部分の移植作業やコンパイルテストはわずか1日で完了したといい、1番苦労したとされるレンダリングエンジン部も、わずか2週間で移植作業が完了してしまう。
PS3では、性能が得られにくいPS3のGPU、RSXの頂点シェーダ部分のアクセラレーションにSPE(Synergistic Processor Element)を活用するための工夫が必要で、PS3向けのレンダリングエンジンは、SPE→RSXのデータフローをいかに無駄なく設計できるかが非常に大変なのだが、NGPのレンダリングエンジンの設計は、GPU単体の活用に関して頭を悩ませれば良かったため、PS3の時と比べれば楽だったようだ。Swoboda氏は「新ハードへのエンジンの対応作業でここまで楽だったことは珍しい」と振り返っている。
■ PE3におけるNGP向けレンダリングエンジンの特徴
PEのエンジン根幹部のCPU向けプログラムコードの大部分はPCバージョンからそのまま持ってくることができたようだ。
「NGPのCPUであるARMは、スカラ処理、分岐だらけのコードもまずまずの速さで実行してくれた」(Swoboda氏)
CPUコードはマルチスレッド対応化が必須 | GPUコードはチューニングをしっかりしないとパフォーマンスが出ない |
ただし、マルチスレッディング実装は不可欠であり、シーン探索、アニメーション処理、可視不可視判定、隠面排除などはCPUベースのコアだが、マルチスレッドベースで実装されている。
GPU周り、レンダリングエンジンについては、基本的にはPS3、PC向けのシェーダーをそのまま移植する形で実装している。シェーダーのコンパイルはランタイム時ではなく全てオフラインで行なわれる。シェーダーは特定表現のために用意された特定用途のシェーダープログラムを出力するのではなく、あらゆる処理に対応した万能型シェーダープログラム(Uber Shader)を、コンパイルした段階で必要な処理系だけを出力するシェーダー生成パイプラインになっている。これは単一ではない多プラットフォーム対応型のエンジンにおけるシェーダー生成パイプラインとしては最近はよく見る流行のデザインだ。
レンダリングエンジンは基本的には2パスの順方向レンダリング(Forward Rendering)設計で構成される。最初のパスで材質表現、ライティングなどの全てのシェーダーを動作させ、後段パスではカスケードシャドウマップに対応した影生成を行なうようになっている。
さて、ここで、「NGPのGPUコアはTBDRでレンダリングされるはずなのに、レンダラーが順方向とはこれいかに?」というような疑問を持って少々混乱してしまう人がいるかもしれない。
ややこしいのだが、NGPのGPU側のレンダリングメソッドがTBDRなだけであって、ゲームエンジンとしてのレンダラーの設計とはまた別な話なのだ。では、逆に、「TBDRベースのNGPのGPUで、Deferred RenderingやLight Pre-pass Renderingは可能なのか?」という疑問を持たれる人もいることだろう。
答えはYESだ。
PE3では、現状は順方向レンダリングのレンダラーを実装したが、NGPのGPUは、PS3で実装可能なレンダリング技法は特に問題なく実装が可能なのだ(GPU内部でTBDRでレンダリングされる)。
現時点では順方向レンダリングパイプラインのレンダラーを実装 | 次期リリースバージョンではDeferred Redneringベースのレンダラーも実装 |
NGPのGPU向けのDeferred Renderingでは、MRT(マルチ・レンダー・ターゲット)で中間情報をG-Bufferに生成するフェーズをコンパクトにとどめるのがコツだそうで、現在は次期バージョンに向けて、このNGPのGPU向けDeferred Renderingの実装を行なっているという。
また、Light Pre-Pass Renderingも実装は可能だが、Swoboda氏は「あまりオススメはしない」と述べていた。
というのも、Deferred Renderingの亜流とも言えるLight Pre-Pass Renderingは、確かに材質シェーディングのバリエーションを増やせるというメリットはあるが、ジオメトリのレンダリングを2回行なう必要があり、NGPのGPUで行なうには少々負荷が高すぎるからだ。
■ 移植そのものは簡単だったが、ハイパフォーマンスを得るにはNGPのハードウェア特性に配慮したチューニングが必要
このように、レンダリングエンジン部も、シェーダー部分のほとんどがPC版(あるいはPS3版)からの移植で済んでしまったということで苦労は少なかったようなのだが、それでも、(PCとPS3と比較すれば)ピーク性能がそれほど高くないNGPのGPUパフォーマンスに配慮したチューニングは必要だったとしている。
シェーダーを動かすとあまり速くはないNGPのGPUだが、ジオメトリ量(≒3Dモデルのポリゴン数)に関してはPS3に近いものを取り扱えるポテンシャルがあると言うことがわかったという。ただ、何でもかんでもそのまま持ってこられるかというとそうでもないようだ。
NGPのGPUは、あまり優秀なカリング(描画不要なポリゴン等を破棄する処理系)ロジックを持っておらず、GPU側の頂点パイプラインに注ぎ込まれた頂点データはほとんど全てメモリアクセスに化けることになる。NGPのGPUは、メモリアクセスがあまり優秀ではなく(と言うか、元々メモリアクセスをしないように工夫されている)、メモリアクセスが集中するとパフォーマンスが極端に低下しやすいのだ。
PS3のRSXも頂点シェーダの性能が低く、PS3開発者の間では「最も使いたくない部位」の1つに数えられているが、CELLプロセッサに対する研究が行き届いてきた昨今では、このRSX側の頂点シェーダを極力活用せず、CELLプロセッサのSPEで実装した、超が付くほど優秀な頂点パイプラインで代行するのがトレンドだ。
特に、SCEが提供するライブラリの1つ、PS Edgeに含まれるカリングエンジン、アニメーションシステム、スキニングエンジンはRSXのポテンシャル以上のジオメトリ(頂点)処理性能を発揮すると言われる。
PS3のこのパフォーマンスを当たり前のように考えて、PS3クラスのジオメトリをNGPに持って行ってしまうと、パフォーマンスは想像以上に低下してしまう。
NGPのPE3では、前述したように、CPUによって実装されたアニメーションシステムや初期カリングシステムのような頂点パイプライン支援エンジンがあるので、ある程度はパフォーマンスのスープアップが期待できるのかもしれないが、Swoboda氏は「場合によっては事前にPS3クラスの3Dモデルに対して加工を施し、ボーン(スケルトン)やスキニング箇所の削減が必要かもしれない」とも警告する。なお、PE3では、スキニングの処理はGPU側に丸投げしている。
TBDRの都合に配慮した最適化を行なわなければならない |
画面サイズが小さいNGPでは、その画面サイズに配慮したLODの適用の仕方ができる |
PE3は4月にPS3/NGPライセンシーに対して無償で提供が開始される。現行PSPはすでにPE2.7が対応済み |
また、GPUアーキテクチャの違いから、頂点ストリームは用途や必要に応じて細かく分けて処理する必要があるとも説明されている。
例えば通常の表示用オブジェクトの頂点ストリームと、影生成用の頂点ストリームは、それぞれのレンダリングフェーズの時にだけGPUコアに流さないと最大パフォーマンスが得られない。
そして、Swoboda氏は、NGPのGPUというよりは、NGPの画面サイズに特化した最適化方針も提言した。
それは「NGPはポータブル機で画面が小さいため、LOD(Level of Deatil)はアグレッシブに切り替えても問題がない」という経験的なテクニックだ。
NGPは、テレビに接続してプレイするのではなく、5インチの画面でプレイすることが前提であり、数十インチのテレビと比較すればだいぶ画面が小さくなるので、よほどキャラクターが大写しにならない限りは高解像度の3Dモデルでなくても問題がない。逆に、視点から少し離れた位置に移動してしまえばかなり小さく見えることになるので低解像度3Dモデルでも品質に問題がない……というわけだ。こうした、視点からの距離に応じた品質の切り替えは、3Dモデルのポリゴン数の切り替えに限らず、テクスチャ解像度やシェーダーの適用数(シェーダーの複雑度)にも応用できる。
このセッションは表向きは、PE3の紹介とPE3のNGPへの対応がメインテーマであったが、裏テーマには、かなり具体的なNGP向けタイトル開発のための最適化テクニックが隠れていたように思える。
移植作業はPS3からよりはPCからのほうが楽そうだと言うのは、開発がしやすいという裏返しでもある。
また、移植はしやすいものの、NGP特有のクセを理解して最適化をしなければならないというのもよく伝わってきたように思う。これは、別にNGPだから……ということではなく、新しいハードでは当たり前のことだ。
□Game Developers Conference(GDC)のホームページ(英語)
http://www.gdconf.com/
(2011年 3月 7日)