|
8月末に開催されたCEDEC2005の「Microsoft Game Developers day」においてXbox 360ハードウェア情報の詳細が公開された。この中で、Xbox 360開発機で動作する、ゲームライクなリアルタイム・インタラクティブ・デモが公開され、そのデモの技術的背景などの詳細が語られた。 このセッションは「NDA(秘密保持契約)ベース」ということであったが、今回、マイクロソフトおよび株式会社イニスの両方から特別に記事化の許可を頂けたのでここにレポートすることにした。
■ ゲームライクなリアルタイム・インタラクティブ・デモ「妖精が棲む森」とは?
ゲームライクなデモということだが、このデモはXbox 360上で動作するゲームエンジンの基本を制作し、その上で動作する形態を取っている。GPUメーカーが新GPUのたびに公開する自己完結した一過性のメガデモではない。 実際の株式会社イニスがXbox 360のゲーム開発に利用できるエンジンとして制作が進められてきたとのことで、このエンジンには「nFactor2」という名称が付けられている(イニスにはnFactor1エンジンもある)。このnFactor2は、Xbox 360のハードウェアとしての特徴となっているマルチプロセッサCPUとプログラマブルシェーダ3.0仕様GPUを効果的に活用するようなエンジン・アーキテクチャとなっている。 なお、このエンジンは「Unreal Engine」のような他社ライセンスや販売を前提としたエンジンではなく、あくまで社内向けに開発されたエンジンとのこと。このデモでは、実際にワールド内を歩き回ることができる上、ワールド内の様々なオブジェクトに相互干渉でき、非常にゲームライクな作りになっており、完成度が高い。開発期間についてはお茶を濁しつつも矢野氏は「数カ月間」という言い回しを使っていた。
Xbox 360のゲームはどうなるのか、を推し量るものとしては最上のサンプルなので、目に付くテクニカルなフィーチャーを順番にじっくり見ていくことにしよう。 ■ HDRレンダリング~Xbox 360特有のα2ビット、RGB10ビット浮動小数点実数のフォーマットを使用
いわゆる1,677万色のバッファはαRGBがそれぞれ8ビット整数である32ビットバッファになっており、これはHDRという言葉に対してLDR(Low Dynamic Range)バッファと呼ばれる。HDRレンダリングではその高いダイナミックレンジ確保のために浮動小数点バッファ=HDRバッファを活用する。PCの世界のHDRバッファといえば、αRGBがそれぞれ32ビット浮動小数点(FP32)の128ビットFPバッファや、それぞれ16ビット浮動小数点(FP16)の64ビットFPバッファを使うことが多いが、省メモリが大前提の家庭用ゲーム機Xbox 360では、特別なモードが用意されているのだ。 それはα2ビット、RGBが10ビット浮動小数点(FP10)のPCにはない特別なHDRバッファだ。ちなみにFP10の内訳は指数3ビット仮数7ビットの“7e3”となっており、Xbox 360のGPUでは、この32ビットFPバッファならば、加算ブレンディングではペナルティ無しでフル速度で実行できる。まさにハイダイナミックレンジ性とリアルタイム性が適度にバランスされた非常にゲーム向きなフォーマットだといえよう。このデモでは、レンダーターゲットのバッファとしてこのバッファを使い、環境マップなどのテクスチャについても同様のHDRフォーマットを採用しているとのことだ。 さて、HDRレンダリングでは、その定義通り、ハイダイナミックレンジにレンダリングしたとしても、そのままディスプレイに表示することはできない。それはディスプレイが最大1,677万色カラーの表示能力しか持たないためだ。1,677万色カラー以上の表現域でレンダリングされるHDRレンダリングではディスプレイに表示するための後処理(ポストプロセス)が必要になる。 人間の視覚のダイナミックレンジは120~140dBあると言われているが、色として正しく感知できる幅はこれよりもずっと狭く、正しく色が知覚できるように眼球の中の瞳孔を絞ったり開いたりして適正な光量を網膜に導いている。HDRレンダリング結果を1,677万色ディスプレイに表示するというのはハイダイナミックレンジな現実世界を人間が瞳の絞りを調整して網膜に適正光量を導くのとほぼ同義になるわけだ。
この処理を行なうのがHDRレンダリングとペアになって行なわれることの多いトーンマッピング(Tone Mapping)と呼ばれるポスト処理だ。このデモでもトーンマッピングがHDRレンダリングされた結果の平均輝度に応じて動的に行なわれており、暗いところから明るいところへ、あるいは逆に明るいところから暗いところへ行ったときにスムーズに適正な輝度になって表示される。人間が明暗の違うところを行き来すると目が慣れるまで眩しすぎたり、見えにくかったりする経験をするが、あれがこのデモでも再現されているのだ。
また、適正輝度に調整され、そのシーンの適正輝度に対し相対的に強く輝いて見える箇所には、光があふれ出して見えるブルームやグレアといった効果を画像処理的に付加している。現実世界でも強い光を見ると光と遮蔽物の前後関係を無視して光が溢れだして見えたり、星形の輝きが見えたりするが、ああいった現象をこのデモでは再現しているのだ。
■ 法線マッピング~ハイトマップ付きで視差マッピングまでをサポート
「私どもイニスでは、かつてガンダム・パイロット・アカデミーをGeForce3 Ti 500ベースのPCハードで制作したことがあります。あの時も法線マッピングは使っていたんですが、あの時はパフォーマンス的な制約で、法線マップを適用できるオブジェクト数が限定的でした。今回のXbox 360で動作するデモでは登場するほぼ全てのオブジェクトに対して(法線マップを)適用していますが、パフォーマンスの落ち込みはありません。」(矢野氏) 凹凸やシワなどのミクロスケール部分のディテールは最近にわかにブームとなっているソフト「Zbrush」を使用して制作しているとのこと。 なお、このデモでは、法線マップのαチャネル部分には凹凸の物量を記録しており(これをハイトマップという)、このデータを利用した法線マッピングの進化形である「視差マッピング(Parallax Mapping)」をも実装している。
視差マッピングとは、視線ベクトルとの位置関係とハイトマップからの高さデータを元に、法線マップから取り出す法線ベクトルをずらすことで、擬似的な視差を強調する効果を実現するテクニックだ。結果としては凹凸が強調され、視線の動きに呼応したリアルな凹凸感が得られるようになる。
■ ライトスペース・パースペクティヴ・シャドウマップ(Light-Space Perspective Shadow Maps)~3DMark05の影生成技法のさらなる進化形
このデモでは、「スプリンターセル」(UbiSoft)での採用で著名になった「シャドウマッピング(デプスシャドウ)技法」と同系列の「ライトスペース・パースペクティヴ・シャドウマップ(Light-Space Perspective Shadow Maps、以下LSPSM)」技法を実装している。 LSPSMは、ウィーン工科大学のMichael Wimmer氏他が、2004年に「Eurographics Symposium on Rendering」に論文発表した技術で、パフォーマンスとクオリティがバランスされたゲーム向きなシャドウマッピング技法として注目を集めている。 「PSM:Perspective Shadow Maps」というキーワードを聞いてピンと来た人もいるかもしれない。PSMはあの業界標準3Dベンチマークソフト「3DMark05」に採用された影生成技法だからだ。LSPSMは名前の通り、PSMの改良形なのだ。 シャドウマッピング技法では、まず、光源から見たシーンの深度情報(奥行き情報)をテクスチャなどにレンダリングし「シャドウマップ」と呼ばれるその光源の遮蔽構造分布を生成することから始める。最終的なシーンのレンダリング時には、各ピクセル描画時に、そのピクセルが光源から遮蔽されているかどうかを、生成したシャドウマップを参照しながら描画していく。
この技法では複雑な遮蔽構造に配慮できるために、相互投射影もセルフシャドウにも配慮した影生成が行なえる利点がある。しかし、その影のクオリティが、遮蔽構造を記録しておくシャドウマップのサイズに強く依存してしまう弱点がある。例えば500m×500m四方が見えているようなシーンのシャドウマップを512×512ドット(テクセル)で生成した場合、なんと約1m×約1mの領域の遮蔽構造が1テクセルに集約されてしまうことになり、非常に大ざっぱな影生成になってしまう。
ところが、PSMにも欠点が残されていた。それは、シャドウマップの解像度が不十分だと、遠景の影が広範囲に描かれるシーンで、ひどいジャギー(エイリアシング)を起こしてしまうのだ。PSMではシャドウマップの生成の際に視点から見た透視投影を行なうわけだが、改良版のLSPSMでは、これに加え、最終レンダリングする視界がシャドウマップ領域を最大利用できるように光源座標系で最適化しつつ、シャドウマップを生成する。
これによりシャドウマップの歪み方がPSMよりも大部緩やかになり、近景と遠景のシャドウマップの情報解像度の変化がなだらかになる。つまりは、近景と遠景の影の品質がより平均化されて、PSMで問題となった投射距離が長くなる影のジャギーがかなり低減されるようになるのだ。このデモでもアップになる妖精のセルフシャドウから遠景の建物の影までが非常に高品位に均一化されたものになっており、不自然さはほとんどない。
■ プログラマブルシェーダとパフォーマンス
このデモは、開発当初はアセンブラ言語でシェーダを書いていたのだが、これをマイクロソフトのシェーダ高級言語「HLSL」にて書き直してコンパイルしたところ、アセンブラコーディングしたシェーダよりもだいぶパフォーマンスが上がったという。また、シェーダ設計に効果的に貢献してくれたのは、プログラマブルピクセルシェーダ3.0になって初めてサポートされる、動的条件分岐だったそうだ。 このデモの影生成にはLSPSMが活用されているのは前述した通りだが、影の輪郭が非常に柔らかでリアリスティックになっている。動的条件分岐は、この半影(Penumbra)生成に一役買っているのだ。 この半影生成を行なうには、影の輪郭付近でより多くのシャドウマップ参照を行なってフィルタリングする処理が必要になるが、全てのピクセルに対して一様にこの処理をしていたのではとてつもなく遅くなってしまう。そこで、このデモでは、影を生成するシェーダにて、これから描画するピクセルが影の輪郭付近か否かどうかを判断して、輪郭付近の場合のみ多くのシャドウマップ参照を行なってやわらかい影生成を行なっている。 矢野氏によれば「この条件分岐の有り無しではパフォーマンスで2倍は違った。」とのことだ。 このほか、このデモでは、シーンのレンダリングには2xのアンチエイリアス処理を適用しているが、これによるパフォーマンス面でのペナルティはないという。これは、Xbox 360-GPUに接続されたeDRAMの速度とeDRAMに内包されたピクセルプロセッサの恩恵によるものだ。 このeDRAMは、レンダリング専用バッファとして接続されているものでXbox 360-GPUとは32GB/secのバスで接続されている。内包されるピクセルプロセッサはGPU本体とは分離された形でレンダリング最終工程時のZ処理、α処理、ステンシル処理、MSAA処理などを行なう仕組みとなっている。マイクロソフトの技術者によればアンチエイリアス処理は10MB容量のeDRAMをオーバーしない限りは4xまでのアンチエイリアス処理はフルスピードで実行できると説明している。
今回、イニスから頂いたスクリーンショットを見てもらうとわかるが、これまでの家庭用ゲーム機のグラフィックスとは違い、全くジャギーらしいジャギーがないのがおわかり頂けるだろう。
■ 物理エンジンはマルチプロセッサ対応のNovodeXを使用 このデモでは無数の椰子の実のような果実がピンボールのような感じで木の棒をボーリングのように倒すシーンや、この椰子の実を放り投げて建物を破壊するシーンなどが公開された。 こうした衝突や破壊といったアクションは、物理エンジンによる挙動計算に基づいたものであるわけだが、このデモでは最近名前をよく聞くようになったAGEIAの「NovodeX」ライブラリを使用している。
NovodeX採用の理由として筆頭に挙げられたのは「NovodeXがマルチプロセッサ前提のライブラリでありXbox 360のマルチコアCPUアーキテクチャに効果的に機能できるため」ということであった。 「非常に導入が楽でした。入れて1カ月くらいで動かせるようになりましたから」(矢野氏) 妖精の髪型のHari物理はイニスの独自開発実装で、CPUとGPUの両方で物理シミュレーションを行なっているという。髪型については硬度が指定でき、髪の毛が立ったり、風に簡単になびかないような調整も物理パラメータの設定如何でリアルタイムに変更できるとのこと。
■ 「妖精の棲む森」レンダリングパイプラインの解説
シーン平均のポリゴン数は15万ポリゴン程度。頂点シェーダを回すことになるパスは最初の5パスくらいで、結局GPU自体は毎フレーム75万(15万×5パス)ポリゴンくらいを処理するくらいの概算になる。結局のところ、今世代でも描画負荷の大半はピクセルシェーダに集中することになるようだ。
影生成のタネとなるシャドウマップを、前述したLSPSMアルゴリズムに従い、シーンを光源を視点にしてレンダリングして生成する。
レンダーターゲットとするバッファはXbox 360-GPUがサポートする浮動小数点のデプスバッファ(Zバッファ)で、24ビット精度(FP24、D3DFMT_D24FS8)を持つ。浮動小数点次元で深度情報をレンダリングできるので、これまでの整数デプスバッファのようにバイアスなどを気にせず、高精度に深度情報の比較が行なえる。 シーンのレンダリングに取りかかる前に、先に視点からのデプスバッファ(Zバッファ)レンダリングのみを行なう。 通常の3Dグラフィックスのレンダリングでは、ピクセルの描画をしつつデプスバッファを更新し、次回の同じ場所のピクセル描画があったときに反復描画が起きないようにしていく。ところが、描画するオブジェクトの前後関係がしっかりソートされていないと、意外にも同一XY座標のピクセルが反復描画されてしまうことが多いのだ。 Xbox 360を含むプログラマブルシェーダ世代のグラフィックスでは、1ピクセルに対して複数の長いシェーダが走ることになり、1ピクセルに掛かるシェーダコストはとてつもなく大きい。1ピクセルの反復描画を極力避けたいという思いがあるのだ。 そこで、このデモでは先にそのシーンの正しい深度情報をデプスバッファを完成させてしまい、1ピクセルには適切なシェーダが1回だけ走るようなお膳立てをしてやっているのだ。こうした先にデプスバッファをレンダリングして後から通常のレンダリングを行なう手法を特に「Deferred Rendering」(意訳:遅延されたレンダリング)と呼ぶ。 なお、以降のパスでも、ここで生成したデプスバッファの内容は再利用するので、全てのレンダリングパスが終了するまで、eDRAMには残り続けることになる。Xbox 360-GPUでは、レンダーターゲットへの色+デプスの書き出しは1サイクル8ピクセルだが、色更新無し+デプス値のみの書き出しについては倍速の1サイクル当たり16ピクセルのパフォーマンスがある。つまり、非常にDeferred Renderingに適したGPU設計であるということができるのだ。
●パス4:シャドウカラーのレンダリング パス1~2で生成したシャドウマップを元に、実際の影を描画していくパス。 一般的にはこうした影描画のプロセスは、通常カラーのレンダリングパスと同時に行なうのが普通で、実際、当初はパス5のカラーのレンダリングに含まれていた処理だったという。ところが、パフォーマンスが思ったように上がらず、悩んだ末にその影レンダリングパスを分離したところ、パフォーマンスが劇的に向上することとなった。 矢野氏は「このデモの特徴的なパスである」と解説したが、もしかするとXbox 360のグラフィックスエンジンのパフォーマンス最適化の行程における重要なノウハウ、なのかもしれない。 矢野氏の推測では、テクスチャ・キャッシュの効率を影レンダリングパスが阻害していた可能性を指摘していたが、筆者もその可能性はきわめて高いと思っている。このデモの影レンダリングでは、影の輪郭付近で半影処理を適用しているが、これが5x5のガウスフィルタ(Gaussian Filter:映像をぼかす際に一般的に使われる)によって実行される。1ピクセルあたりシャドウマップ(テクスチャ)の参照を25点も行なうので、カラーのレンダリングの際に使用するテクスチャキャッシュの局所性を破壊していた可能性があるのだ。 Xbox 360-GPUはトランジスタ数がシェーダ規模の割には少なく、このダイエットはキャッシュ容量の削減で賄われたという推測がある(その代わりレジスタ領域はマルチスレッド対応化のためにトランジスタ数が多く割かれている)。比較的潤沢なキャッシュを載せたNVIDIA系とは違う、Xbox 360-GPU独特な最適化が必要になる局面は意外に多いのかも知れない。
●パス5:カラー、ライティング 実際のメインレンダリングとも言えるパスで、様々なマテリアル表現に従ったライティング/シェーダ処理を行ない、テクスチャの指定があればこれを適用し、色を付けていく。また、このパスで、パス4でレンダリングされたシーンの影が描かれたフレームと合成される。 このパスで実装しているライティング効果は拡散反射(Diffuse)、法線マッピング、環境マッピング、光沢(Gloss)マッピングなど。なお、シーンに存在する全ての光源に対応する光源処理はこのパスで一元実行される。
HDRレンダリングしたHDRフレームを舐めていき、その平均輝度を算出するパス。パス数は多いがピクセルシェーダのみによるフレームバッファ処理だけなのでGPU負荷はそれほどでもないという。 ●パス12~19:ブルームとグレア HDRレンダリングにおける定番のエフェクトであるブルーム(Bloom)効果やグレア(Glare)効果を付加するパス。 ちなみに、ブルーム効果とは高輝度部分がジオメトリの前後関係を無視してまで、じわっと柔らかくあふれ出してくる効果で、グレアとは高輝度部分が放射状に煌めくようにあふれ出してくる効果。
パス6~11で求めた平均輝度と比較して高輝度な部分を低解像度なバッファにブラーをかけたり、放射状に引き延ばしたりして、これを最終レンダリング結果にブレンドしている。
●パス20:トーンマッピング パス6~11で求めた平均輝度値を元に適正な輝度バランスにてHDRフレームを1,677万色範囲のLDRフレームに変換するパス。こうした処理系をトーンマッピング(Tone Mapping)という。 暗いところから明るいところへ、あるいはその逆の状況などで目が徐々に慣れてくるような瞳孔シミュレーション効果(動的な露出補正効果)の処理もここで行なわれており、前の状態から算出された適正な輝度へゆっくりと推移するような振る舞いをする。
主人公キャラクタの周辺はくっきりと見えるが、画面の奥に行くに従ってピンボケのように見える効果、被写界深度(DOF:Depth of Field)のシミュレーションを行なうパス。 これまでにDOF効果実現には様々な実装手法が考え出されているが、このデモで使われているこの手法は、最近の3Dゲームではよく用いられるシーンの深度情報を用いるタイプだ。
具体的には、パス20によってトーンマッピングパスを経た最終レンダリング映像に対し、視点からある距離以上の奥にある映像を、奥に行けば行くほどブラー量を大きくしてぼやけさせているという流れになる。なお、最終的に、このパスを経た映像が画面に表示される。
■ 最後に~Xbox 360のゲームはマルチスレッド設計が基本となるか? この他、このデモで、Xbox 360らしい設計といえば、マルチスレッド前提のソフトウェア設計がなされているという点だ。このデモでは実験段階バージョンでハードウェアスレッドを5つ、今回の公開バージョンでは4つを走らせているという。 Xbox 360のCPUでは、3基のPowerPC970互換コアが搭載されており、それぞれが2個ずつのハードウェアマルチスレッドに対応しているので、まだ1個余っている計算になる。内訳としては下記の通りになっているという。
・スレッド0:メイン・ゲームループ プレゼンを行なった矢野氏によれば、特に物理シミュレーションライブラリの「NovodeX」のデモ・エンジンへの組み込みが容易だったと感想を述べており、1週間ほどで全貌が把握でき、1カ月もしないうちに試験動作できる段階に持ち込めたという。もともとマルチスレッド・設計であるNovodeXはXbox 360-CPUとの相性もいいようだ。 それほど、ノウハウが蓄積されていない中での試行錯誤の中での開発だったようだが、それでも、マルチスレッド化によるパフォーマンスは上々だったという。このデモのこうした設計情報は他のXbox 360のゲーム開発にとってもベンチマーク的存在になることだろう。 なお、このデモを動作させた「nFactor2」エンジンは、これからも完成度を高めていき、将来的にはイニス自身、あるいは関連ゲームスタジオによる実際のゲーム開発プロジェクトで活用されることがほのめかされた。今から、どんなゲームが出てくるのか楽しみだ。 copyright 2004, iNiS corporation. all rights reserved.
□イニスのホームページ (2005年9月29日) [Reported by トライゼット西川善司]
また、弊誌に掲載された写真、文章の転載、使用に関しましては一切お断わりいたします ウォッチ編集部内GAME Watch担当game-watch@impress.co.jp Copyright (c)2005 Impress Corporation, an Impress Group company. All rights reserved. |
|