2011年3月3日木曜日

DICE 3Dエンジン Enlighten

http://publications.dice.se/publications.asp?show_category=yes&which_category=Rendering

  • あらかじめ表示用の多ポリゴンのシーンと、対応した超低ポリゴンのシーンを作り込んでおき、そのシーンに対応したライトマップ生成と、あらかじめ設定しておいた複数の調査点(Lightprobes)における間接光量(環境光量)をGPUとは非同期にCPUで求めます。 Lightprobesは低解像度の3Dテクスチャに展開し、Deferred Renderingで、この3Dテクスチャをサンプルしてライティングを実行する…というシンプルな実装です。ポイントはLightprobesを3Dテクスチャに展開してしまい、大局照明的な環境光ライティングをDeferred Renderingに統合してしまっているところです。 PCないしはPS3では有効なテクニックとなるかも知れません。

CPUで粗いジオメトリのシーンに対してのライトマップ生成とLightprobesにおける関節光量を計算(左)
通常のシーンレンダリング結果(右)


ライトマップをシーンジオメトリへ適用した結果(左)
Lightprobesにおける関節光量をシーン内のオブシェクトのライティングに反映(右)


http://d.hatena.ne.jp/yakiimo02/20110305



- EnlightenはReal-Time Global IlluminationのMiddleware。入力のDirect Lightingを元に2次反射バウンス光のIndirect Lightingを計算してくれる。

- PS3版のランタイムコードはSPUを活用。SPUのコードがCUDA実装のベースとなったそうです。

- ランタイムは速度重視。単純なメッシュに対してライティングを行い、結果を実メッシュに投影したり、変化のない場合はCache情報を再利用する(Temporal Coherence)などを行って高速化している。ストリームではそのような話はなかったですが、Siggraph 2010スライドではRadiosityの2次反射Bounceを複数フレームまたいで蓄積していると書かれています。

- 最初はGPU実装だったけど、現世代のゲームはGPUに余裕がある事が少ないので、現在はGPU処理の裏でCPU/SPUにIndirect Lighting処理の計算させている。

- Enlightenは完全動的ではなく、Lightingの複雑な演算部分をツールで前処理計算させて、ツール側で実機で高速に処理ができる構造体に落とし込んでいる。

- 完全動的ではないので背景が破壊されたりする場合は少し工夫が必要になる。セッション中のデモでは天井が破壊され、室内のIndirect Lightingが背景の変化に順応する様子がデモンストレーションされていました。

- 日本の会社を含めた15社が現在Enlightenを使用して開発を行っている。Eve OnlineBattlefield 3などが初期使用タイトルとなる。

- 動的オブジェクトGIの影響を受けるだけで、GIには影響を与えない。


後半はEnlightenのCUDAを使用した高速化の話でした。

- ツールによるプリプロセスとランタイムの両方がCUDAに対応している。

- プリプロセスのレイトレ処理は自前のGPGPUレイトレではなくOptiXを使用している。

- 最初はIntel TBBを使用したマルチスレッドCPU実装だった。

- CPUの場合は1M ray/sec per CPU Core(8コアで 8M ray/sec)がGeforce GTX 470、1個で20M ray/secに高速化された。

- CUDAレイトレ実装の処理時間の50%がCPU-GPU間の転送処理らしく、その部分がネックになっている。

- CUDAの使用でレイトレ処理が約5倍高速化され、Geometry Preprocessing処理全体が2倍程度、高速化された。

- CUDAランタイムだと通常のランタイムより複雑なライティング処理が可能。NVIDIAセッションなので、そのような話題はなかったですが、CUDAでできるのならDirectComputeでも同様にランタイムの高速化ができるような気がします。

- ランタイム部分の説明ではDirectXCUDAの切り替えはモード変換を伴うので、遅いから注意が必要だという話もありました。


0 件のコメント:

コメントを投稿