嫌われないように生きてるってバレたら嫌われちゃうよ?
過去にも未来にも苦しむ必要はない。
過去はもう存在しないし、未来はまだ存在していないのだから。
/* 頂点情報の格納場所と書式を指定する */
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, sizeof (GLfloat) * 5, 0);
glVertexAttribPointer(1, 2, GL_FLOAT, GL_FALSE, sizeof (GLfloat) * 5, (GLfloat *)0 + 3); ...
圧縮テクスチャ PVCRT
http://webos-goodies.jp/archives/using_compressed_textures_in_iphone.htmlOpenGL ES チュートリアル
CPUで粗いジオメトリのシーンに対してのライトマップ生成と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 Online、Battlefield 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でも同様にランタイムの高速化ができるような気がします。
- ランタイム部分の説明ではDirectXとCUDAの切り替えはモード変換を伴うので、遅いから注意が必要だという話もありました。