Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Ola OlssonMarkus BilleterUlf AssarssonChalmers University ofTechnology1CG 論文講読会 2013 / 5 / 20Ryo SuzukiHPG 2012
 類似するプロパティを持つ view sample をCluster にグループ化してシェーディング Tiled Shading より効率的に光源を割り当て、ライティングのコストを大幅に削減 Tiled Shading が苦手とする深度が...
 近年 Tiled Shading への注目が高まっている Tiled Deferred Shading は PC /PS3 /Xbox360 で実装されている 演算コストと引き換えに、Deferred Shadingの帯域幅のボトルネッ...
 Frosbite 2 Engine4http://www.slideshare.net/DICEStudio/spubased-deferred-shading-in-battlefield-3-for-playstation-3
 Tiled Shading ではスクリーン空間の矩形タイルでグループを作り、各タイルの最大・最小のdepth で錘台を定義して光源をカリング 互いに近い depth を持つ面のタイルは小さなBounding Volume で表現できる5+Z
 depth が不連続なタイルでは光源カリングの効率が低下6+Z
 より高次元のタイル = Cluster を導入 Cluster は最大サイズが固定されていて、ビューに依存したワーストケースが存在しない Deferred と Forward 両方で実装可能7
 Cluster を拡張して法線情報を付与し、Clusterごとに光源の背面カリングをすることも可能 光源割り当てを階層化し、大量の光源を堅牢にサポート リアルタイムで最大 100 万光源8
Deferred Shading 1988 年にハードウェアデザインとして発表される 1990 年に G-buffer を使ったより汎用的な手法が登場 ジオメトリとライティングの処理を分離し、大量の光源の管理を単純化 ハードウェア性能が...
Tiled Shading Deferred Shading をベースに、帯域幅のボトルネックに対処 帯域幅が狭いコンソール機での AAA タイトル開発における重要なアルゴリズムに GPU はメモリ帯域幅に比べて演算性能の向上が早いため、...
 どのように Cluster を作るか ある view sample がどの Cluster に属しているかを調べる方法11
 Resolution Matched Shadow Maps (RMSM) では、view sample がどの shadow page に属するかの判断が必要 スクリーン空間の coherency を利用して、近傍ピクセルの重複したリク...
 Compress-Sort-Decompress (CSD) では、フレームバッファを 1D 配列と見なし、ソートの前にランレングス圧縮で重複を削減 RMSM と CSD のどちらも、隣接した要素のcoherency に依存 合理的な仮...
 ページテーブルを使う Virtual Textures 周辺の技術 [May10],[HPLdW10] unique なシェーディングサンプル決定の手法[LD12] シーンの coherency に依存せず、重複リクエストを削減可能14
1. シーンを G-Buffer にレンダリング2. Cluster を割り当てる3. 同一の Cluster を探す4. Cluster に光源を割り当てる5. サンプルのシェーディング15
 1. シーンを G-Buffer にレンダリング 従来の Deferred Shading や Tiled Deferred Shadingと同じ 2. Cluster を割り当てる 各ピクセルがどのクラスタに属するかを、座標(と必要...
 4. Cluster に光源を割り当てる どの光源が Cluster に影響しているかを効率的に探索し、Cluster ごとに光源リストを作成 5. サンプルのシェーディング サンプルが属する Cluster の光源リストを使ってシェ...
 理想 影響する光源が少ない、空間的に小さな Cluster 効率のために Cluster 内にできるだけ多くのサンプル Cluster Key はできるだけ少ないビット数18
 ワールド空間に一様なグリッドは? Cluster Key の計算が高速、すべての Cluster が同じサイズ しかし シーンに応じて適切なグリッドサイズを手作業で調整する必要 Cluster Key の表現に大きなビット数 遠く...
 Tiled Deferred Shading と同じスクリーン空間のタイリングに、ビュー空間の z 軸に従った分割を加える ワールド空間で見ると、視錘台を分割する小さな錘台の集まりができる20
Z 軸の分割方法 正規化されたデバイス座標を均等に分割?・・非均一 ビュー空間の座標を均等に分割?・・遠くの Cluster が幅広く平ら21
Z 軸の分割方法 ビュー空間の z 座標を指数関数的に分割 どの Cluster もなるべく立方体になるよう相似な分割22
23Sy : スクリーンの Y 方向の分割数2θ : FOV
 スクリーン空間の座標 (xss,yss) , ビュー空間のdepth (zvs) , タイルサイズ(tx,ty) , (2) 式を使って Cluster Key となるタプル (i,j,k) を計算 (i,j) = (xss/tx, ys...
 2 つのオプション1. ソート2. ページテーブル25
(オプション 1) ソート 各タイルでローカルにソート 並列処理で圧縮して unique なクラスタを抽出、グローバルに unique な Cluster のリストを構築 各ピクセルに、Cluster のインデックスを保存26
(オプション 2) ページテーブル Virtual Texture の手法を利用 仮想マッピングを使い、Cluster Key が必要とするストレージに物理メモリの割り当てを行う 詳細な実装は [LSK*06]27
 ソート、ページテーブルどちらの手法でも、Cluster Key から 3D Bound (と法線情報があれば Normal Cone) を定義できる 実際の view sample の位置や法線はより小さなbound を持つため、さらに縮...
 各 Cluster に影響を与える光源のリストを作成 従来の Tiled Deferrd Shading では全般的に総当たりの実装 本手法では、大量の光源と Cluster 数の動的変化を堅牢にサポートするためにツリーを使った階層的な...
 探索木のリーフノードはソートされたデータから直接取得 32 個の連続したノードを AABB でグループ化し 、1 つ上のレベルのノードを構築、単一のルートノードが残るまで繰り返す 深さ優先でトラバース、各レベルで Cluster と子ノ...
 Cluster に法線情報を持たせていたら、光源の背面カリングができる ω>π/2+α+δ のときカリング31cone(青) : Normal Coneα : Cluster から導出、または保存されているcone(破線) : Clust...
 ソートの手法では、各ピクセルに保存したunique な Cluster のインデックスを利用 ページテーブルの手法では、Cluster のインデックスを Cluster Key の保存に使われる物理メモリの位置に保存するので、Cluste...
 OpenGL と CUDA でいくつかの種類を実装 Clustered Deferred[NkX][En][Eb][Pt]▪ Nk[X] : X×X 分割した立方体の面を使った法線情報を付加 / En : explicit なnormal...
 Cluster Key (i,j) : スクリーン空間でのタイル位置のオフセット タイルサイズが 32x32 なら、最大 8192x8192 のレンダーターゲットに対応 k : depth のインデックス normal : 法線(オ...
 Cluster Key (10 – 16bit) に、タイル内でのサンプル位置を示す meta データ (32x32 タイルでは 10bit)を付加し、 タイル内でローカルにソート グローバルで unique な Cluster Key ...
 3D Bound と Normal Cone は Cluster Key から再構築可能 必要に応じて、より縮小した AABB や normalcone を保存する Explicit Bounds Explicit Normal Co...
 2-pass アプローチ 並列 Prefix Sum を使って物理メモリを割り当て、Cluster Key を保存 シングルパスでの物理メモリの割り当てだと遅かった。将来のハードウェアでは高速化の余地37
 光源の探索木を毎フレーム構築 Thurst[HB10] による効率的なソートを使用 ツリー構築で CUDA warp (32 スレッド) を実行 出力ノードが 32 個なのでトラバースでも CUDAwarp が役立つ 最大深さが 5...
 シーン 1 : Necropolis 点光源を発射する大砲を設置 最大 2500 光源 シーンの端から端へカメラ移動 シーン 2 : Sponza 木のセットを設置 1 万のランダムな光源39
 シーン 1 : Necropolis の各フレームのライティング計算回数40
 シーン 1 : Necropolis の各フレームのレンダリング時間41
 シーン 2 : Sponza のライティング計算回数 Tiled Shading はおよそ 90M 回になるのでグラフから除外42
 シーン 2 : Sponza のレンダリング時間の内訳 Deferred (97.1ms), Tiled Forward (23.6ms) はグラフから除外43
 シーン 2 : Sponza の光源数とレンダリング時間44
 Cluster や Tile に光源を割り当てる時間45
 Clustered Shading は位置と任意で法線を使い、類似した view sample を Cluster にグループ化、Cluster に影響する光源のみ計算を行う Tiled Shading に比べ Cluster は小さく、...
 ビューの状態変化に対する堅牢性が得られる Clustered Deferred / Clustered Forward どちらもリアルタイムで 100 万光源が可能 クラスタリングのコストは小さく、光源が少ないシーンでも従来手法に匹敵す...
 Cluster 内のすべてのサンプルが特定の光源からおよそ等しく影響を受けているかをヒューリスティックに判断し、ライティングのコストを削減 簡単なテストでは、わずかな計算コストで最大20 % ライティング計算を削減 微細なアーティファク...
 より複雑なシェーディングとの組み合わせ Clustered Shading は Tiled Shading に比べてシェーディングコストが小さいので、シェーダの複雑さの増加に強い49
50
Upcoming SlideShare
Loading in …5
×

CG 論文講読会 2013/5/20 "Clustered deferred and forward shading"

8,665 views

Published on

http://www.cse.chalmers.se/~olaolss/main_frame.php?contents=publication&id=clustered_shading を読みました。

  • Be the first to comment

CG 論文講読会 2013/5/20 "Clustered deferred and forward shading"

  1. 1. Ola OlssonMarkus BilleterUlf AssarssonChalmers University ofTechnology1CG 論文講読会 2013 / 5 / 20Ryo SuzukiHPG 2012
  2. 2.  類似するプロパティを持つ view sample をCluster にグループ化してシェーディング Tiled Shading より効率的に光源を割り当て、ライティングのコストを大幅に削減 Tiled Shading が苦手とする深度が不連続で高周波なシーンに強い 従来手法より 2 - 3 桁大きい数の光源(最大100万個)がリアルタイムで可能2
  3. 3.  近年 Tiled Shading への注目が高まっている Tiled Deferred Shading は PC /PS3 /Xbox360 で実装されている 演算コストと引き換えに、Deferred Shadingの帯域幅のボトルネックを緩和する 帯域幅に比べ、大きな演算性能を持つ最新のコンソールやハイエンドの GPU にとって効率的3
  4. 4.  Frosbite 2 Engine4http://www.slideshare.net/DICEStudio/spubased-deferred-shading-in-battlefield-3-for-playstation-3
  5. 5.  Tiled Shading ではスクリーン空間の矩形タイルでグループを作り、各タイルの最大・最小のdepth で錘台を定義して光源をカリング 互いに近い depth を持つ面のタイルは小さなBounding Volume で表現できる5+Z
  6. 6.  depth が不連続なタイルでは光源カリングの効率が低下6+Z
  7. 7.  より高次元のタイル = Cluster を導入 Cluster は最大サイズが固定されていて、ビューに依存したワーストケースが存在しない Deferred と Forward 両方で実装可能7
  8. 8.  Cluster を拡張して法線情報を付与し、Clusterごとに光源の背面カリングをすることも可能 光源割り当てを階層化し、大量の光源を堅牢にサポート リアルタイムで最大 100 万光源8
  9. 9. Deferred Shading 1988 年にハードウェアデザインとして発表される 1990 年に G-buffer を使ったより汎用的な手法が登場 ジオメトリとライティングの処理を分離し、大量の光源の管理を単純化 ハードウェア性能が向上し、ここ数年で主流に9
  10. 10. Tiled Shading Deferred Shading をベースに、帯域幅のボトルネックに対処 帯域幅が狭いコンソール機での AAA タイトル開発における重要なアルゴリズムに GPU はメモリ帯域幅に比べて演算性能の向上が早いため、将来世代の GPU にもうまくスケール10
  11. 11.  どのように Cluster を作るか ある view sample がどの Cluster に属しているかを調べる方法11
  12. 12.  Resolution Matched Shadow Maps (RMSM) では、view sample がどの shadow page に属するかの判断が必要 スクリーン空間の coherency を利用して、近傍ピクセルの重複したリクエストを削減 残ったリクエストをソート・圧縮し、グローバルで unique なリクエストを構築12
  13. 13.  Compress-Sort-Decompress (CSD) では、フレームバッファを 1D 配列と見なし、ソートの前にランレングス圧縮で重複を削減 RMSM と CSD のどちらも、隣接した要素のcoherency に依存 合理的な仮定だが coherency が低いシーンでは、フレームバッファ全体のソートと変わらなくなる13
  14. 14.  ページテーブルを使う Virtual Textures 周辺の技術 [May10],[HPLdW10] unique なシェーディングサンプル決定の手法[LD12] シーンの coherency に依存せず、重複リクエストを削減可能14
  15. 15. 1. シーンを G-Buffer にレンダリング2. Cluster を割り当てる3. 同一の Cluster を探す4. Cluster に光源を割り当てる5. サンプルのシェーディング15
  16. 16.  1. シーンを G-Buffer にレンダリング 従来の Deferred Shading や Tiled Deferred Shadingと同じ 2. Cluster を割り当てる 各ピクセルがどのクラスタに属するかを、座標(と必要に応じて法線)から計算 3. 同一の Cluster を探す unique な Cluster のリストを構築16
  17. 17.  4. Cluster に光源を割り当てる どの光源が Cluster に影響しているかを効率的に探索し、Cluster ごとに光源リストを作成 5. サンプルのシェーディング サンプルが属する Cluster の光源リストを使ってシェーディング17
  18. 18.  理想 影響する光源が少ない、空間的に小さな Cluster 効率のために Cluster 内にできるだけ多くのサンプル Cluster Key はできるだけ少ないビット数18
  19. 19.  ワールド空間に一様なグリッドは? Cluster Key の計算が高速、すべての Cluster が同じサイズ しかし シーンに応じて適切なグリッドサイズを手作業で調整する必要 Cluster Key の表現に大きなビット数 遠くの Cluster はスクリーン上では小さく、パフォーマンスが低下19
  20. 20.  Tiled Deferred Shading と同じスクリーン空間のタイリングに、ビュー空間の z 軸に従った分割を加える ワールド空間で見ると、視錘台を分割する小さな錘台の集まりができる20
  21. 21. Z 軸の分割方法 正規化されたデバイス座標を均等に分割?・・非均一 ビュー空間の座標を均等に分割?・・遠くの Cluster が幅広く平ら21
  22. 22. Z 軸の分割方法 ビュー空間の z 座標を指数関数的に分割 どの Cluster もなるべく立方体になるよう相似な分割22
  23. 23. 23Sy : スクリーンの Y 方向の分割数2θ : FOV
  24. 24.  スクリーン空間の座標 (xss,yss) , ビュー空間のdepth (zvs) , タイルサイズ(tx,ty) , (2) 式を使って Cluster Key となるタプル (i,j,k) を計算 (i,j) = (xss/tx, yss/ty) 必要に応じて、量子化した法線を追加24
  25. 25.  2 つのオプション1. ソート2. ページテーブル25
  26. 26. (オプション 1) ソート 各タイルでローカルにソート 並列処理で圧縮して unique なクラスタを抽出、グローバルに unique な Cluster のリストを構築 各ピクセルに、Cluster のインデックスを保存26
  27. 27. (オプション 2) ページテーブル Virtual Texture の手法を利用 仮想マッピングを使い、Cluster Key が必要とするストレージに物理メモリの割り当てを行う 詳細な実装は [LSK*06]27
  28. 28.  ソート、ページテーブルどちらの手法でも、Cluster Key から 3D Bound (と法線情報があれば Normal Cone) を定義できる 実際の view sample の位置や法線はより小さなbound を持つため、さらに縮小した explicit な3D Bound や Normal Cone を計算してもよい ただし、ページテーブルではアトミックな演算が多く、実装しなかった28
  29. 29.  各 Cluster に影響を与える光源のリストを作成 従来の Tiled Deferrd Shading では全般的に総当たりの実装 本手法では、大量の光源と Cluster 数の動的変化を堅牢にサポートするためにツリーを使った階層的なアプローチ 中心座標をもとに光源を z 軸に従ってソートして Bounding Volume Hierarchy (BVH) を構築29http://www.vis.uni-stuttgart.de/~frisch/h/diss.htm
  30. 30.  探索木のリーフノードはソートされたデータから直接取得 32 個の連続したノードを AABB でグループ化し 、1 つ上のレベルのノードを構築、単一のルートノードが残るまで繰り返す 深さ優先でトラバース、各レベルで Cluster と子ノードの bounding テスト リーフノードにおいて光源の bounding sphereとテスト30
  31. 31.  Cluster に法線情報を持たせていたら、光源の背面カリングができる ω>π/2+α+δ のときカリング31cone(青) : Normal Coneα : Cluster から導出、または保存されているcone(破線) : Cluster を包含する円錐cone(赤) : cone(破線) と幾何学的に等しいδ : cone(破線) から導出
  32. 32.  ソートの手法では、各ピクセルに保存したunique な Cluster のインデックスを利用 ページテーブルの手法では、Cluster のインデックスを Cluster Key の保存に使われる物理メモリの位置に保存するので、Cluster Key から Cluster のインデックスを得ることができる32
  33. 33.  OpenGL と CUDA でいくつかの種類を実装 Clustered Deferred[NkX][En][Eb][Pt]▪ Nk[X] : X×X 分割した立方体の面を使った法線情報を付加 / En : explicit なnormal cone を使う / Eb : explicit な 3D AABB bound を使う / Pt : ページテーブルを使う Clustered Forward Deferred▪ ステンシルバッファによる最適化を実装、各サンプルへの光源割り当てが正確になっている Tiled Deferred Tiled Deferred En▪ normal cone を各タイルで計算 Tiled Forward33
  34. 34.  Cluster Key (i,j) : スクリーン空間でのタイル位置のオフセット タイルサイズが 32x32 なら、最大 8192x8192 のレンダーターゲットに対応 k : depth のインデックス normal : 法線(オプション) 6bit なら各面 3x3 に分割した立方体をサポート348 bits 8 bits 10 bits (6 bits)i j k normal
  35. 35.  Cluster Key (10 – 16bit) に、タイル内でのサンプル位置を示す meta データ (32x32 タイルでは 10bit)を付加し、 タイル内でローカルにソート グローバルで unique な Cluster Key の総数を求め、各Cluster に unique ID [0 .. numClusters) をセット unique ID を Cluster メンバーの各ピクセルに書き込む358 bits 8 bits 10 bits (6 bits) 10 bitsi j k normal meta
  36. 36.  3D Bound と Normal Cone は Cluster Key から再構築可能 必要に応じて、より縮小した AABB や normalcone を保存する Explicit Bounds Explicit Normal Cone より高効率なカリングが可能に36
  37. 37.  2-pass アプローチ 並列 Prefix Sum を使って物理メモリを割り当て、Cluster Key を保存 シングルパスでの物理メモリの割り当てだと遅かった。将来のハードウェアでは高速化の余地37
  38. 38.  光源の探索木を毎フレーム構築 Thurst[HB10] による効率的なソートを使用 ツリー構築で CUDA warp (32 スレッド) を実行 出力ノードが 32 個なのでトラバースでも CUDAwarp が役立つ 最大深さが 5 レベルなら、再帰が発生する CUDAの実装を回避できる 5 レベルでは最大 3300 万の光源をサポート38
  39. 39.  シーン 1 : Necropolis 点光源を発射する大砲を設置 最大 2500 光源 シーンの端から端へカメラ移動 シーン 2 : Sponza 木のセットを設置 1 万のランダムな光源39
  40. 40.  シーン 1 : Necropolis の各フレームのライティング計算回数40
  41. 41.  シーン 1 : Necropolis の各フレームのレンダリング時間41
  42. 42.  シーン 2 : Sponza のライティング計算回数 Tiled Shading はおよそ 90M 回になるのでグラフから除外42
  43. 43.  シーン 2 : Sponza のレンダリング時間の内訳 Deferred (97.1ms), Tiled Forward (23.6ms) はグラフから除外43
  44. 44.  シーン 2 : Sponza の光源数とレンダリング時間44
  45. 45.  Cluster や Tile に光源を割り当てる時間45
  46. 46.  Clustered Shading は位置と任意で法線を使い、類似した view sample を Cluster にグループ化、Cluster に影響する光源のみ計算を行う Tiled Shading に比べ Cluster は小さく、光源の影響は少なくなる Cluster の法線情報を光源の背面カリングに使用可能46
  47. 47.  ビューの状態変化に対する堅牢性が得られる Clustered Deferred / Clustered Forward どちらもリアルタイムで 100 万光源が可能 クラスタリングのコストは小さく、光源が少ないシーンでも従来手法に匹敵するパフォーマンス47
  48. 48.  Cluster 内のすべてのサンプルが特定の光源からおよそ等しく影響を受けているかをヒューリスティックに判断し、ライティングのコストを削減 簡単なテストでは、わずかな計算コストで最大20 % ライティング計算を削減 微細なアーティファクト、より高品質な近似を スペキュラのために、Cluster に平均輝度の情報を付与?48
  49. 49.  より複雑なシェーディングとの組み合わせ Clustered Shading は Tiled Shading に比べてシェーディングコストが小さいので、シェーダの複雑さの増加に強い49
  50. 50. 50

×