フォト

Google AdSense

  • AdSense
無料ブログはココログ

« 2枚目のEye-Fi Pro X2 | トップページ | GPU Pro 3発送 »

2012.02.27

そろそろいい加減Tile-based Deferred Renderingの解説書きます

そろそろいい加減、Compute ShaderでのTile-based Deferred Renderingの解説を書きます。1月にやるって言ったままでしたが、今度こそやります。

とりあえず、今の時点でオススメなのがIntelのサンプル。このエントリでは、軽くどんな話かだけ書いておく。

Deferred Rendering for Current and Future Rendering Pipelines
http://software.intel.com/en-us/articles/deferred-rendering-for-current-and-future-rendering-pipelines/

このサンプルでは、1024個までのポイントライトを1フレームで処理するのですが、Compute Shaderの神髄みたいなのを味わえるいい感じの実装なのでオススメです。

Compute Shaderでやってることは簡単に言うと、

・16x16のタイルに分割して処理する
→1スレッドグループは16x16x1の256スレッドでやる
→16x16は、G-bufferの16x16ピクセルにあたる
・タイル内の深度値の最手前、最奥を求める・・・ピクセル単位の並列
→Atomicなminとmaxでgruopshared memoryに保存してスレッド同期
→次のFrustumのNearとFarに使う
・タイル単位でまずやることはカリング・・・ライト単位の並列
→16x16が担当する空間のFrustumを作成してポイントライト交差判定
→1024個のライトなら1スレッドあたり4個のライトのカリングをすればおk
・カリングを通過したライトだけ各ピクセルライティング処理をする・・・ピクセル単位並列

この実装がCompute Shaderを学ぶ上で素晴らしいと言われてるのは、

・最手前、最奥算出・・・ピクセル単位並列
・ライトのカリング・・・ライト単位の並列
・ピクセル単位のライティング・・・ピクセル単位のライティング

のように1つのCompute Shader処理で並列の単位の違う処理を上手に混在させてやってること。それから、スレッドグループ共有メモリの使用方法がいい感じで、スレッドグループ同期やAtomicの使い方を学ぶにはいい感じだと言うことですね。

そんなわけで、もうちょっとコードを取り上げながら解説をしたいところ。

« 2枚目のEye-Fi Pro X2 | トップページ | GPU Pro 3発送 »

Programming」カテゴリの記事

コメント

コメントを書く

コメントは記事投稿者が公開するまで表示されません。

(ウェブ上には掲載しません)

« 2枚目のEye-Fi Pro X2 | トップページ | GPU Pro 3発送 »