【Watch記事検索】
最新ニュース
【11月30日】
【11月29日】
【11月28日】
【11月27日】
【11月26日】

西川善司の3Dゲームファンのための「PLAYSTATION Edge」講座
ソニー謹製プレイステーション 3専用フレームワークが登場!
同時に見えてきたPS3の“今の弱点”

SCEワールドワイドスタジオ・アメリカ、Mark Cerny氏
3月5~9日開催

会場:Moscone Convention Center

■ ソニー純正のゲームエンジン「PLAYSTATION Edge」

PLAYSTATION Edge
 ゲーム開発者達が口を揃えて「ソフト開発が難しい」というプレイステーション 3(PS3)。「メインCPUのPPE(Power Processor Element)が遅過ぎる。体感でPentium IIIの1GHz前後くらい。場合によってはPS2のEE(CPU)の方が速いと思うことすらある」、「SPE(Synergistic Processor Element)をどう活用していいのかわからない。結局、今回のプロジェクトではSPEをほとんど使わなかった」とか、筆者もいろいろと耳にするのだが、最近に来て「何をどうすれば速くなるのかわかってきた」とか「ちゃんと最適化したら数倍速くなって驚いた」ということも耳にするようになってきた。PS3の開発現場もだんだんとこなれてきているようだ。

 ソニー側では、ファーストパーティのゲームスタジオがPS3向けタイトルを開発した際に蓄積したノウハウをまとめてライブラリ化し、これを「PLAYSTATION Edge」として提供を開始する。

 GDC 2007では、このPLAYSTATION Edgeの内容を紹介するセッションが行なわれた。PLAYSTATION Edgeは、大まかに分類して以下の4つのサブシステムからなっている。

・Animation System
・Geometry Processing
・Compression
・GCM Replay

PLAYSTATION Edgeの特徴
 いわゆるゲームエンジンといっても差し支えはないが、ただ、Epic Gamesのような各種ツールやレベルエディタなどまでを含んだスイートタイプのものではなく、ソフトウェアの雛形というか、自作ソフトに組み込みやすいモジュールのような形態となっており、「フレームワーク」的な位置づけといっていいかもしれない。もちろんマルチプラットフォームに展開することは全く考えられていないため、PS3のハードウェアに特化した設計になっている。

 PLAYSTATION EdgeはPS3ライセンシーを結んだ開発スタジオに提供され、フレームワークということもあってフルソースコードが付属するのが特徴だ。特にSPU関連のモジュールはSPURS(SPU Runtime System)として提供される。SPURSの仕組みは本連載の「西川善司の3DゲームファンのためのPS3パフォーマンス考察講座」に詳しく解説しているが、SPEが自発的にデータを入出力して処理していくセルフマルチタスクを実現するもの。SPUに独立性の高い処理を自発的に行なわせ、高速に並列実行できる仕組み……と思ってもらうといいだろう。なお、コードはCや簡易ネイティブ言語(SPU Intrinsics)で書かれているという。


■ PLAYSTATION Edge:アニメーションシステム

PLAYSTATION Edge アニメーションシステム
 アニメーションシステムとは、手や足を動かしたり、様々なアクションポーズを取らせるために3Dキャラクタを変形させる処理のこと。一般的なアニメーションシステムの流れは下の図のようになっている。なお、このピラミッド図は下に行けば下に行くほど計算量が増えると言うことを意味している。

 ゲーム進行を司るゲームロジックが、キャラクタの新しい姿勢をこうしろと指示を出す(Game Logic)。これを元に、どの関節をどう曲げるか、どの関節とどの関節にどういう補間をすべきかという処理をまとめ上げる(Blending Tree Generation)。これを実際にどの頂点データにどういう頂点計算をさせればよいかという処理リストを作成する(Low Level Operation List Generation)。最後に実際にやるべき計算を実際に実行する(Low Level Operation Execution)。

 一般的なアニメーションシステムの実装や、最初のプレイステーション 3 SDKでは、最下段のLow Level Operation ExecutionのみをSPU(SPEはSynergistic Processor全体を、そしてSPUは本来はSPEの中に含まれる演算器のみを指すが、よくSPE=SPUと同義語として用いられるので、本稿もそれに従う。PPE=PPUも同様)で実行させる実装になっていた。

アニメーションシステム 一般的な実装ではSPUに任せているのは最下段部分だけ PLAYSTATION Edgeでは一段上の層の処理までを行なわせる実装にした


 左下の図は実行結果のSPUとそのバスの負荷を表したグラフだが、SPUはLow Level Operation処理にフル稼働していることがわかる。一方で、Blending Tree関連の構文解析をしている間はSPU負荷は減るが、その間にDMAを稼働させて次のフェーズの処理に必要なデータを取り込んだり、処理を負ったデータを出力する工程を行なっていることがわかる。

 この他、PLAYSTATION Edgeアニメーションシステムでは、最大12レイヤーの複数アニメーションの合成処理、また異なる上半身と下半身、腕と脚などの部位単位のアニメーションを1体の3Dキャラクタに適用していくパーシャルアニメーション処理、またキャプチャーしたモーションデータを圧縮されたまま取り扱って、リアルタイムに展開して適用していくような仕組みも備えている。

 モーションデータの圧縮はオフラインツールで実現できるようになっており、モーションデータの冗長性をカットし、適当なフレーム単位のブロックに切り分けて管理する仕組みになっている。

SPUベースのアニメーションシステムの負荷遷移図 PLAYSTATION Edgeのアニメーションシステム PLAYSTATION Edgeにはアニメーションシステム用のオフラインツールも付属する。ソニーらしくColladaにも対応



■ PLAYSTATION Edge:ジオメトリーシステム

 PLAYSTATION Edge:ジオメトリーシステムは主に2つのモードが用意されている。プライマリーモードは専用オフラインツールで取り扱うジオメトリデータを最適化して利用するもの。後述するジオメトリシステムのパイプラインの全てを利用できるため、基本的にはこれを利用することが奨励される。

 セカンダリーモードは社外ツールで作成されたジオメトリデータを取り扱うもので生のジオメトリデータストリームを取り扱うことになるために、後述するジオメトリパイプラインの一部の機能しか利用できない。とはいえ、プロトタイプ作成時にはこちらを用いてみるといった使い方ができる。

 PLAYSTATION Edgeのパイプラインは以下(右下画像)のようになっている。

プライマリモードとセカンダリモード PLAYSTATION Edge:ジオメトリシステムのパイプライン


 最上段から順番に見ていくことにしよう。

 PLAYSTATION Edge:ジオメトリシステムで取り扱う頂点データ列はバス帯域節約やメモリ節約の意味合いから圧縮されており、実際の処理を行なう前段階として展開する必要がある。これを行なうのが最上段の「Vertex Decompress」だ。

圧縮された頂点データはリアルタイム展開される


 正接(Tangent)ベクトルや法線(Normal)ベクトルは24ビット単位ベクトルフォーマットで表現される。圧縮方法としては適当なブロック単位に誤差を最小限にして最適な符号化を施すDXT的な非可逆圧縮メソッドが用いられているようだ。また、テクスチャ座標は可変長の固定小数点の表現を採用している。

頂点以外のベクトルや属性データも圧縮されているものを取り扱う


PLAYSTATION EdgeのVertex Cache OptimizerとPS3 SDKのVertex Cache Optimizerとのパフォーマンス比較
 ところで、3Dモデルは、頂点処理の冗長性を排除するために、頂点情報とそれを指し示すインデックス情報で表して処理することが一般的だ。次の「Index Decompress」は、この頂点インデックスを展開するもの。

 なお、PLAYSTATION EdgeではPS3のGPUのRSXの頂点キャッシュが効きやすいように、進化型のVertex Cache Optimizer(VCO)を提供しているという。パフォーマンス的には従来のPS3 SDKのVCOと比較して約3%程度のパフォーマンス向上が得られているとしている。

 新VCOでは、頂点インデックスを、圧縮符号化が行ないやすいようにインデックス番号のリナンバリングまで行なっているとのことで、圧縮率は約85%。そして同一メモリ予算であれば6.5倍のポリゴンを入れ込むことができるようになったという。

 「Blend Shapes」は複数のモデルの形状を合成する処理。

頂点インデックスの最適化により高効率な頂点処理が可能になった 複数のモデル形状の合成を行なうBlend Shapes


SPUでのスキニングはPS3ではもはや必須?
 「Skinning」は折れ曲がりなどの変形によって頂点が変位される様を求めるもの。PLAYSTATION Edge:ジオメトリシステムでは4ボーンのスキニング(キャラクタに仕込んだ骨=ボーンを折り曲げて、外皮としてのポリゴンモデルを適切に変形させる処理)に対応している。

 このSPUを使ったスキニングは、RSXの頂点シェーダを使うよりも30%のパフォーマンス向上が見られたとしている。また、ピクセル処理などが簡略化され(ピクセル書き込みは深度値の書き込みのみ)、どちらかといえばジオメトリ処理主体のシャドウマップ生成などではRSXだけで行なったときに比べて70%のパフォーマンス向上があったという。

 「Triangle Culling」は、描画しなくても済みそうなポリゴンについて先にカリング(描画しなくてよいとして破棄する)処理を行なうもの。これは本来RSX側でやるべきものだが、SPU側で処理してしまった方が高速ということがわかったようだ。なお、実際にテストしてみるとRSXで処理するよりも10%~20%の高速化が記録されたとのこと。

 「Compression」はここまでの処理を終えてから、今度はRSXが処理する際に用いるデータ形式へと圧縮エンコードを行なう。これは丁度、圧縮展開と丁度逆の処理になる。

カリング処理までをSPUにやらせてしまう RSX向けに再構成して出力する



■ PLAYSTATION Edge:ジオメトリシステムの動作

ダブルバッファではなくJIT実装なPLAYSTATION Edge:ジオメトリシステム
 Mark Cerny氏はPLAYSTATION Edgeのジオメトリシステムの動作の仕組みについても言及した。基本的にPLAYSTATION Edgeのジオメトリシステムは、RSXへの頂点関係の前処理を行なうプリプロセッサの役割を果たしているが、こうしたプリプロセッサの実装は、通常は遅延を低減、隠蔽するために、RSXがその時点でレンダリングしているフレームの1つ先のフレームのものを処理させる場合がほとんどだ。つまり、RSXがフレームnのレンダリングをしている場合ならばプリプロセッサにはフレームn+1の処理をさせるような実装だ。

 こうした実装を行なうには、便宜上2つの処理バッファを用意してフレームごとに利用するバッファを切り換えるダブルバッファ実装にする場合が多い。ところが、PLAYSTATION Edgeジオメトリシステムでは、“Just in Time”(JIT)実装、すなわち、そのフレームに用いるジオメトリ処理をその場で行なう実装形態になっている。これはSPUのローカルストアが256KBというあまり余裕のない構造だからというのが一番の理由だが、非常に厳密なパフォーマンスチューニングの末、JIT実装でも問題がないと判断できたため……というのも大きな理由だとのこと。

RSXの描画コマンドをPPUとSPUで“レンダリングする”というイメージ
 実際の処理の手順はややトリッキーだ。

 まず、PPUが、SPURSジョブを生成して、SPUで動作するジオメトリプリプロセッサ(SPUジオメトリプリプロセッサ)を起動する。PPUはRSX向けの描画コマンドを生成するが、この際、あとからSPUジオメトリプリプロセッサが吐き出すジオメトリコマンドをはめ込めるようにブランクを空けておく。SPUで処理されたジオメトリデータはこのブランクに埋め込まれて完全な描画コマンドリストになり、これがRSXに送られる。

 なお、このPLAYSTATION Edge:ジオメトリシステムは複数のSPUで並列動作させることができる。PS3には稼働可能なSPUが7基あるが、うち6基はがアプリ側で利用できるので、理論上は6基をSPUジオメトリプリプロセッサに割り当てられることになる。

 SUPURS実装されたジオメトリ・プリプロセッサは以下のようなコードになっていて、実際ソースリストも提供される。なので、任意の自作パイプラインも挿入可能になっているのが特徴だ。例えば、下の図(中央)のようなサインカーブで頂点を揺らす自作の頂点シェーダプログラムを書いたとする。続いて、このようにこの自作頂点シェーダプログラムを挟み込めばちゃんとSPURSで実行されるカスタマイズされた特殊なジオメトリプリプロセッサ(SPU製頂点シェーダ)を動かすことができるのだ。

ジオメトリシステムのメイン 自前のSPU頂点シェーダプログラムをこう書いたとして…… シンプルにそのシェーダを挟み込むだけでカスタマイズされたジオメトリシステムの構築が可能


ジオメトリシステムはこのようなSPU Intrinsic命令語で書かれている
 さて、このSPUで動作するPLAYSTATION Edge:ジオメトリシステムは、実は「SPU Intrinsics」という簡易言語とC言語を組み合わせてプログラミングされている。

 ちなみに、SPE Intrinsicsというのは、SPEのネイティブな命令語(アセンブリ命令語)にC言語っぽい見せ方をした簡易プログラミング言語のこと。変数名などはC言語のものが使えるのでちょっとだけリッチなアセンブリ言語という感じのものだ。C言語のプログラムに透過的に組み合わせて、いわば外部関数的に使うことができる。

 これは、非常に強力で、よく使うルーチンをマクロの形で登録しておき、これを実際のプログラムに適宜挿入していくと、コンパイラがマクロを展開してさらにSPUのアーキテクチャに最適化したスケジューリングも行なってくれる。これにより、SPU向けCコンパイラの吐き出すコードよりも最大で20倍は高速化されたという。

SPU向けCコンパイラの吐き出すコードよりも最大で20倍は高速化された マクロを組み合わせてルーチンを構成すればコンパイラが命令語の最適化もやってくれる あるテストケースの1トライアングルあたりの命令実行サイクル数


1SPUあたり60fpsで毎フレーム80万ポリゴンの処理が可能
 PLAYSTATION Edge:ジオメトリシステムのパフォーマンスは、SCE側の実験では1SPUあたり、毎秒60フレームレートで、毎フレーム80万ポリゴンの処理をこなしているとのこと。なお、これは60%がカリングされた(描画処理から捨てられた)ことを含んだ場合の性能値だが、まあ、実際の多くのゲームでもカリングレートはそういうものだから、このパフォーマンスは現実的に見てもかなり優秀だ。


■ PLAYSTATION Edgeシステムのデモを公開

【PLAYSTATION Edgeのデモムービー】
PSEdge.zip [ZIP圧縮済み:44.6MB]

上の画像をクリックするとダウンロードが始まります。WMV形式のムービーで、ZIP形式で圧縮してあります
 この後、実際にPLAYSTATION Edgeのアニメーションシステムとジオメトリシステムのデモをプレイステーション 3の実機を用いて披露した。

 デモシーンのアートセットはE3 2006で公開されたロンドン・ピカデリーサーカスのデモシーンを流用したもの。レンダリングエンジンはPLAYSTATION Edgeを組み込んでデモとして仕上げたもの……ということになる。シーンはアンチエイリアシング付きで1,280×720ドットでレンダリングしており、PLAYSTATION Edge側のアニメーション処理、各種ジオメトリ処理、早期カリングを適用している。すなわち、頂点シェーダ的な処理は全てRSXではなくSPUで代行しているというわけだ。

 影生成はシャドウマップ技法(デプスシャドウ)を使用。セルフシャドウまでがしっかり出ているのがわかる。シャドウマップ技法の場合は光源から見たシーンの深度情報をレンダリングするが、テクスチャの貼り付けや特殊なピクセルシェーダプログラムを稼働させないので割合的に言えばピクセルシェーダ負荷よりもジオメトリ負荷の方が高くなる。よって、こうした影生成付きシーンでもPLAYSTATION Edgeは効果的にパフォーマンス向上に効いてきていると推察される。

 デモではアニメーションも披露。4体のキャラクタに異なるタイミングで歩行アニメーションを適用しているのがわかる。このデモではこのキャラクタに20個のアニメーションセットを用意していて、PLAYSTATION Edge:アニメーションシステムの仕様により、うち、任意の最大12個のアニメーションを任意の割合でブレンドできる。デモでは走るアニメーションと銃を構える2つのアニメーションを合成し、銃を走りながら構えるアニメーションを生成している様が見られる。

 デモ終盤では768体の人体キャラクタと50台の車のモデルを表示して、1フレームあたり140万ポリゴンのシーンを60fpsでレンダリングしていく様を見せている。768体の人体キャラクタにはランダムなタイミングでランダムな別々のアニメーションを適用している様が実際に見て取れる。

PLAYSTATION Edgeのデモ



■ PS3タイトル開発の最終兵器となるか~GCM Replay

 この他、RSXのデバッグツール「GCM Replay」についての紹介も行なわれた。これはPS3のRSXで一体何が行なわれていて、どこにボトルネックが発生しているかを測定するツールだ。同種のツールにマイクロソフトはXbox 360/Windows用にPIX、NVIDIAは自社GPUにNVPerfHUDといったデバッグツールをリリースしているが、GCM Replayはまさにソニー製PS3向けPIXX/NVPerfHUDという位置づけのものだ。

 かなり専門的なツールになるので、本稿での詳しい紹介は省略するが、レンダリング途中のレンダーターゲットの内容やテクスチャの内容が確認できたり、頂点シェーダやピクセルシェーダの各シェーダプログラムのトレース、レジスタ内容の確認などができるほか、プロファイリング機能を活用して、レンダリングフェーズのどこにボトルネックが発生しているかまでの解析が行なえる。

 これまで石器時代に近い(?)、手探り状態だったRSXのデバッギングとパフォーマンス解析が、一気に近代的に進化させられたという感じで、現在進行中のPS3向けタイトルのプロジェクトも、パフォーマンスゲインがグっと向上できる可能性が出てきたといえる。

GCM Replay



■ まとめ~PS3、ヤツは一戦ごとに進化している!! しかし、現実も見えてきた?

PLAYSTATION Edgeはβ板が3月よりリリースされる
 今回のGDC 2007でも、PS3プロジェクトに参加している開発者が一貫して筆者に囁いてくるのがRSXへの不満だ。特に頂点シェーダに対する不満が多く、口を揃えて「GPUのRSXが遅い。とくに頂点性能がXbox 360と比較すると辛すぎる」という。

 Xbox 360でうまくいっていたポリゴン予算をPS3に持ってくると、頂点性能が足りなくてうまくいかず、ポリゴン数削減に迫られるというのだ。RSXの頂点シェーダの性能がそこまで低いというのは少々意外だが、「SPUを頂点処理に使う」ということに気が付いた開発者は、逆に口を揃えて「RSXの頂点シェーダは要らないですね」とまで言ってくる。どうやら、PS3の開発シーンでは、RSXの頂点シェーダを活用しないのがトレンドとなってきているらしい。

 GDCで会った、とある開発者は「PS3からEE(Emotion Engine:PS2のCPU。互換性維持のためにPS3にも搭載されていたが、欧州版を皮切りに、アメリカ、日本版でも将来的にカットされるロードマップが示された)がなくなりますけど、RSXの頂点シェーダもなくなってもいいかな、なんて(笑)」と冗談を言っていた。

 極論を言えば盲腸化しつつあるRSXの頂点シェーダが、なぜそこまで遅いのかは、はっきりしてもらわないと困るのだが、ボトルネックの原因が明確となり、最大パフォーマンスが得られるメソッドが発見され、しかも、そのノウハウがPS3プラットフォーム参加者全員に提供されることとなった、というのは価値あることだとは思う。

 ただ、本来、PS3のCELLプロセッサの6基(7基)のSPUは「AIや物理シミュレーションといったグラフィックス以外のゲームの本質的なリアリティ向上のために活用すべき」というメッセージが込められていたはずで、それが「高速な頂点シェーダとして使うべし」というメッセージに置き換えられたのだとすると、SPUの未来性に夢を感じていた3Dゲームファンからすると少々残念なことだといえるかもしれない。まあ、6基全てのSPUが頂点シェーダに活用されることはないにしても、だ。

 また、SPUのプログラミングそのものについても、ソニー自体がもがき苦しんでいるのが伝わってくる。本来はSPUは高級言語でプログラミングできることがウリだったはずなのだが、ソニー自身が「Cコンパイラの出力コードは信用ならないのでSPUプログラミングはIntrinsicsネイティブ命令を使いましょう」と奨励し、「Intrinsicsだとコンパイラの20倍高速です」と自ら言いきってしまっているのが、まさにその象徴だ。SPUコンパイラにはソニー製とIBM製があり、Playstation SDKにはソニー製のものが使われているらしいが、IBM製のものが、どの程度のものなのか気になるところだ。

 Xbox 360は1年先に発売された関係で、“先を走っている”というアドバンテージがあり、さらに「マイクロソフトはソフトメーカーである」というバックグラウンドもあるのでノウハウの蓄積度、そして開発環境の善し悪しで比較すれば、確かにPS3は劣勢であることは否めない。しかしPS3陣営には、優秀なファーストパーティが日本を含め、世界中にあり、プラットフォームパワーという意味において、Xbox 360に負けている点はないだろう。

 まさに、今回のPLAYSTATION Edgeはファーストパーティの知識の結集という感じであり、このノウハウが活かされて今年末に登場する「2世代目のPS3タイトル」は今から楽しみにしていたい。

□Game Developers Conference(英語)のホームページ
http://www.gdconf.com/
□Game Developers Conference(日本語)のホームページ
http://japan.gdconf.com/
□ソニー・コンピュータエンタテインメントのホームページ
http://www.scei.co.jp/
□PlayStationのホームページ
http://www.jp.playstation.com/
□関連情報
3Dゲームファンのためのグラフィックス講座 リンク集
http://game.watch.impress.co.jp/docs/backno/rensai/3dg.htm
【3月8日】Game Developers Conference 2007 記事リンク集
http://game.watch.impress.co.jp/docs/20070308/gdclink.htm

(2007年3月15日)

[Reported by トライゼット西川善司]



Q&A、ゲームの攻略などに関する質問はお受けしておりません
また、弊誌に掲載された写真、文章の転載、使用に関しましては一切お断わりいたします

ウォッチ編集部内GAME Watch担当game-watch@impress.co.jp

Copyright (c)2007 Impress Watch Corporation, an Impress Group company. All rights reserved.