カプコンのGraphic Engine

 http://www.watch.impress.co.jp/game/docs/20070131/3dlp.htm
 色々とためになる話も。
 気になった点


 さて、Xbox 360 CPUは3.2GHzのPowerPC 970互換コアの3基構成だが、このCPUのパフォーマンスは
 あまり高くないという声もあるようなのだが、実際のところどうだったのだろうか。

 石田氏:「我々の経験からすると1コアのパフォーマンスは大体同クロックのPentium 4の2/3くらいですかね。
 各コアのSMT(後述)をフルに活用して6スレッド分をフルに稼働させることができると、
 大体その4倍くらいのパフォーマンスが出ますよ。PCでいうとデュアルコアPentium 4 Extreme Edition 840(3.2GHz)の
 SMT有効時の4スレッドくらいのパフォーマンスは出せますね。ゲームエンジンを並列化実装しないとかなりきついですが、
 並列化実装したときのパフォーマンスは今のハイエンドPCと比較しても遜色ないと思います」

 840XE相当とな。Windows環境で言えば微妙な感じですが、組み込み環境で考えれば相当なもんですね。
 (840XEは130W相当品だから、それが70〜90W程度で収まるならまぁ優秀な部類でしょう。)

 さて、Xbox 360アーキテクチャで弱点としてよく指摘されるのはメモリコントローラだ。
 ただでさえレイテンシの大きいGDDR3 SDRAMをメインメモリとし、しかもそのメモリコントローラが
 GPU側にあるため、CPUからのメモリアクセスのレイテンシはかなり大きい。この点はパフォーマンスに響かないのだろうか。

 石田氏:「確かにレイテンシは小さくはないんですけど、そのためのSMTなんです。
 つまりメモリアクセスをSMTによるハードウェアマルチスレッディングで隠蔽するようなイメージですね」

 そのまんまP4/HT理論ですね。ただ6スレッドも有れば効果的でしょう。
 P4/2スレッドだとストール期間が割とありますからねぇ。

 石田氏:「これが非常に効果が大きくて、例えばPentium 4のHTオン時のマルチスレッド・パフォーマンスって
 よくてHTオフ時の大体1.2〜1.3倍くらいじゃないですか。Xbox 360 CPUだとSMT活用したマルチスレッド時の
 パフォーマンスってコアあたり1.5倍くらいは出るんですよ」
 ・・・ふぇ。そんなにNorthBridge経由は効率が悪いのか・・?それともパイプラインが深すぎなのが問題?

 難しいとされてきたゲームプログラムのマルチスレッド化を、ここまで積極的に推し進めてこられた技術力には感服する。
 あい。素直にスゲーっス。

 爆炎、雪煙、閃光などのエフェクトは半透明のパーティクル(スプライト)から成っており、フィルレート喰い
 の主たる原因はこうした半透明パーティクルの重ね描きにある。もともと半透明パーティクルはぼやっとしたものだし、
 それが重ね描きされるということはそれ自体に解像感は求められておらず、大胆に言ってしまえば
 「それっぽく仕上がっていればOK」なのだ。縮小バッファ技法とは、半透明パーティクルの重ね描きを
 低解像度次元でドカドカと行ない、それを最終的に、ちゃんとした出力解像度のフレームにα合成するというものだ。
 GoW/UE3も同様だけど、「ハイエンドGPUと比べれば貧弱なRSX/Xenos」でアレだけの爆炎などの処理を行える
 理屈が良く分かってなかった。正しい理論だと思う。正確な表現だけが求められる訳では無いのがゲームだから。
 勿論、低解像度ならではの問題も有るのだが、

 Xbox 360 GPUにはビデオメモリバス消費低減の意味合いで内蔵された10MBのEDRAM(Embedded DRAM)の機能により、
 4点サンプルのマルチサンプルアンチエイリアス処理(4x MSAA)までをパフォーマンス低下なしに実現できる。
 MSAAの詳細概念については誌面の都合もありここでは割愛するが、簡単に解説すると、例えば“4”x MSAAの場合を
 想定するならば、アンチエイリアス処理に用いるピクセルカラーは手抜きの1色としてしまうが、深度情報への配慮と
 アンチエイリアス処理はちゃんと“4”ピクセル分の解像度(=“4”サブピクセル)で行なう。
 魔法のEDRAM(良い意味で)。