SlideShare une entreprise Scribd logo
1  sur  50
Télécharger pour lire hors ligne
Ola Olsson
Markus Billeter
Ulf Assarsson
Chalmers University ofTechnology
1
CG 論文講読会 2013 / 5 / 20
Ryo Suzuki
HPG 2012
 類似するプロパティを持つ view sample を
Cluster にグループ化してシェーディング
 Tiled Shading より効率的に光源を割り当て、ラ
イティングのコストを大幅に削減
 Tiled Shading が苦手とする深度が不連続で高周
波なシーンに強い
 従来手法より 2 - 3 桁大きい数の光源(最大
100万個)がリアルタイムで可能
2
 近年 Tiled Shading への注目が高まっている
 Tiled Deferred Shading は PC /PS3 /
Xbox360 で実装されている
 演算コストと引き換えに、Deferred Shading
の帯域幅のボトルネックを緩和する
 帯域幅に比べ、大きな演算性能を持つ最新のコ
ンソールやハイエンドの GPU にとって効率的
3
 Frosbite 2 Engine
4
http://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 を使ったより汎用的な手法
が登場
 ジオメトリとライティングの処理を分離し、大
量の光源の管理を単純化
 ハードウェア性能が向上し、ここ数年で主流に
9
Tiled Shading
 Deferred Shading をベースに、帯域幅のボトル
ネックに対処
 帯域幅が狭いコンソール機での AAA タイトル
開発における重要なアルゴリズムに
 GPU はメモリ帯域幅に比べて演算性能の向上が
早いため、将来世代の GPU にもうまくスケール
10
 どのように Cluster を作るか
 ある view sample がどの Cluster に属している
かを調べる方法
11
 Resolution Matched Shadow Maps (RMSM) では、
view sample がどの shadow page に属するかの
判断が必要
 スクリーン空間の coherency を利用して、近
傍ピクセルの重複したリクエストを削減
 残ったリクエストをソート・圧縮し、グローバ
ルで unique なリクエストを構築
12
 Compress-Sort-Decompress (CSD) では、フ
レームバッファを 1D 配列と見なし、ソートの
前にランレングス圧縮で重複を削減
 RMSM と CSD のどちらも、隣接した要素の
coherency に依存
 合理的な仮定だが coherency が低いシーンで
は、フレームバッファ全体のソートと変わらな
くなる
13
 ページテーブルを使う
 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 を割り当てる
 各ピクセルがどのクラスタに属するかを、座標(と必
要に応じて法線)から計算
 3. 同一の Cluster を探す
 unique な Cluster のリストを構築
16
 4. Cluster に光源を割り当てる
 どの光源が Cluster に影響しているかを効率的に探索
し、Cluster ごとに光源リストを作成
 5. サンプルのシェーディング
 サンプルが属する Cluster の光源リストを使って
シェーディング
17
 理想
 影響する光源が少ない、空間的に小さな Cluster
 効率のために Cluster 内にできるだけ多くのサンプル
 Cluster Key はできるだけ少ないビット数
18
 ワールド空間に一様なグリッドは?
 Cluster Key の計算が高速、すべての Cluster が同じ
サイズ
 しかし
 シーンに応じて適切なグリッドサイズを手作業で調整
する必要
 Cluster Key の表現に大きなビット数
 遠くの Cluster はスクリーン上では小さく、パフォー
マンスが低下
19
 Tiled Deferred Shading と同じスクリーン空間
のタイリングに、ビュー空間の z 軸に従った分
割を加える
 ワールド空間で見ると、視錘台を分割する小さ
な錘台の集まりができる
20
Z 軸の分割方法
 正規化されたデバイス座標を均等に分割?
・・非均一
 ビュー空間の座標を均等に分割?
・・遠くの Cluster が幅広く平ら
21
Z 軸の分割方法
 ビュー空間の z 座標を指数関数的に分割
 どの Cluster もなるべく立方体になるよう相似な分割
22
23
Sy : スクリーンの Y 方向の分割数
2θ : FOV
 スクリーン空間の座標 (xss,yss) , ビュー空間の
depth (zvs) , タイルサイズ(tx,ty) , (2) 式を使っ
て Cluster Key となるタプル (i,j,k) を計算
 (i,j) = (xss/tx, yss/ty)
 必要に応じて、量子化した法線を追加
24
 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 を持つため、さらに縮小した explicit な
3D Bound や Normal Cone を計算してもよい
 ただし、ページテーブルではアトミックな演算
が多く、実装しなかった
28
 各 Cluster に影響を与える光源のリストを作成
 従来の Tiled Deferrd Shading では全般的に総当
たりの実装
 本手法では、大量の光源と Cluster 数の動的変
化を堅牢にサポートするためにツリーを使った
階層的なアプローチ
 中心座標をもとに光源を z 軸に従ってソートし
て Bounding Volume Hierarchy (BVH) を構築
29
http://www.vis.uni-stuttgart.de/~frisch/h/diss.htm
 探索木のリーフノードはソートされたデータか
ら直接取得
 32 個の連続したノードを AABB でグループ化
し 、1 つ上のレベルのノードを構築、単一の
ルートノードが残るまで繰り返す
 深さ優先でトラバース、各レベルで Cluster と
子ノードの bounding テスト
 リーフノードにおいて光源の bounding sphere
とテスト
30
 Cluster に法線情報を持たせていたら、光源の
背面カリングができる
 ω>π/2+α+δ のときカリング
31
cone(青) : Normal Cone
α : Cluster から導出、または保存されている
cone(破線) : Cluster を包含する円錐
cone(赤) : cone(破線) と幾何学的に等しい
δ : cone(破線) から導出
 ソートの手法では、各ピクセルに保存した
unique な Cluster のインデックスを利用
 ページテーブルの手法では、Cluster のイン
デックスを Cluster Key の保存に使われる物理
メモリの位置に保存するので、Cluster Key か
ら Cluster のインデックスを得ることができる
32
 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 Forward
33
 Cluster Key
 (i,j) : スクリーン空間でのタイル位置のオフセット
 タイルサイズが 32x32 なら、最大 8192x8192 のレンダーターゲットに対応
 k : depth のインデックス
 normal : 法線(オプション) 6bit なら
各面 3x3 に分割した立方体をサポート
34
8 bits 8 bits 10 bits (6 bits)
i j k normal
 Cluster Key (10 – 16bit) に、タイル内でのサンプル位
置を示す meta データ (32x32 タイルでは 10bit)を付
加し、 タイル内でローカルにソート
 グローバルで unique な Cluster Key の総数を求め、各
Cluster に unique ID [0 .. numClusters) をセット
 unique ID を Cluster メンバーの各ピクセルに書き込む
35
8 bits 8 bits 10 bits (6 bits) 10 bits
i j k normal meta
 3D Bound と Normal Cone は Cluster Key から
再構築可能
 必要に応じて、より縮小した AABB や normal
cone を保存する
 Explicit Bounds
 Explicit Normal Cone
 より高効率なカリングが可能に
36
 2-pass アプローチ
 並列 Prefix Sum を使って物理メモリを割り当
て、Cluster Key を保存
 シングルパスでの物理メモリの割り当てだと遅
かった。将来のハードウェアでは高速化の余地
37
 光源の探索木を毎フレーム構築
 Thurst[HB10] による効率的なソートを使用
 ツリー構築で CUDA warp (32 スレッド) を実行
 出力ノードが 32 個なのでトラバースでも CUDA
warp が役立つ
 最大深さが 5 レベルなら、再帰が発生する CUDA
の実装を回避できる
 5 レベルでは最大 3300 万の光源をサポート
38
 シーン 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 は小さく、光源の
影響は少なくなる
 Cluster の法線情報を光源の背面カリングに使
用可能
46
 ビューの状態変化に対する堅牢性が得られる
 Clustered Deferred / Clustered Forward どち
らもリアルタイムで 100 万光源が可能
 クラスタリングのコストは小さく、光源が少な
いシーンでも従来手法に匹敵するパフォーマン
ス
47
 Cluster 内のすべてのサンプルが特定の光源か
らおよそ等しく影響を受けているかをヒューリ
スティックに判断し、ライティングのコストを
削減
 簡単なテストでは、わずかな計算コストで最大
20 % ライティング計算を削減
 微細なアーティファクト、より高品質な近似を
 スペキュラのために、Cluster に平均輝度の情
報を付与?
48
 より複雑なシェーディングとの組み合わせ
 Clustered Shading は Tiled Shading に比べて
シェーディングコストが小さいので、シェーダ
の複雑さの増加に強い
49
50

Contenu connexe

Tendances

シリコンスタジオの最新テクノロジーデモ技術解説
シリコンスタジオの最新テクノロジーデモ技術解説シリコンスタジオの最新テクノロジーデモ技術解説
シリコンスタジオの最新テクノロジーデモ技術解説Silicon Studio Corporation
 
CEDEC 2020 - 高品質かつ低負荷な3Dライブを実現するシェーダー開発 ~『ラブライブ!スクールアイドルフェスティバル ALL STARS』(スク...
CEDEC 2020 - 高品質かつ低負荷な3Dライブを実現するシェーダー開発 ~『ラブライブ!スクールアイドルフェスティバル ALL STARS』(スク...CEDEC 2020 - 高品質かつ低負荷な3Dライブを実現するシェーダー開発 ~『ラブライブ!スクールアイドルフェスティバル ALL STARS』(スク...
CEDEC 2020 - 高品質かつ低負荷な3Dライブを実現するシェーダー開発 ~『ラブライブ!スクールアイドルフェスティバル ALL STARS』(スク...KLab Inc. / Tech
 
【Unity道場 3月 ~ライティングとVFX Graph~】Unityのライティング機能のおさらい
【Unity道場 3月 ~ライティングとVFX Graph~】Unityのライティング機能のおさらい【Unity道場 3月 ~ライティングとVFX Graph~】Unityのライティング機能のおさらい
【Unity道場 3月 ~ライティングとVFX Graph~】Unityのライティング機能のおさらいUnity Technologies Japan K.K.
 
【Unity道場】新しいPrefabワークフロー入門
【Unity道場】新しいPrefabワークフロー入門【Unity道場】新しいPrefabワークフロー入門
【Unity道場】新しいPrefabワークフロー入門Unity Technologies Japan K.K.
 
ピクサー USD 入門 新たなコンテンツパイプラインを構築する
ピクサー USD 入門 新たなコンテンツパイプラインを構築するピクサー USD 入門 新たなコンテンツパイプラインを構築する
ピクサー USD 入門 新たなコンテンツパイプラインを構築するTakahito Tejima
 
【Unite Tokyo 2019】〈七つの大罪〉をゲームで!高品質グラフィックを具現化するための技法と開発最適化のご紹介
【Unite Tokyo 2019】〈七つの大罪〉をゲームで!高品質グラフィックを具現化するための技法と開発最適化のご紹介【Unite Tokyo 2019】〈七つの大罪〉をゲームで!高品質グラフィックを具現化するための技法と開発最適化のご紹介
【Unite Tokyo 2019】〈七つの大罪〉をゲームで!高品質グラフィックを具現化するための技法と開発最適化のご紹介UnityTechnologiesJapan002
 
UE4のライティング解体新書~効果的なNPRのためにライティングの仕組みを理解しよう~
UE4のライティング解体新書~効果的なNPRのためにライティングの仕組みを理解しよう~UE4のライティング解体新書~効果的なNPRのためにライティングの仕組みを理解しよう~
UE4のライティング解体新書~効果的なNPRのためにライティングの仕組みを理解しよう~エピック・ゲームズ・ジャパン Epic Games Japan
 
UE4×Switchで60FPSの(ネットワーク)対戦アクションをなんとかして作る! | UNREAL FEST EXTREME 2020 WINTER
UE4×Switchで60FPSの(ネットワーク)対戦アクションをなんとかして作る!  | UNREAL FEST EXTREME 2020 WINTERUE4×Switchで60FPSの(ネットワーク)対戦アクションをなんとかして作る!  | UNREAL FEST EXTREME 2020 WINTER
UE4×Switchで60FPSの(ネットワーク)対戦アクションをなんとかして作る! | UNREAL FEST EXTREME 2020 WINTERエピック・ゲームズ・ジャパン Epic Games Japan
 
【CEDEC2018】一歩先のUnityでのパフォーマンス/メモリ計測、デバッグ術
【CEDEC2018】一歩先のUnityでのパフォーマンス/メモリ計測、デバッグ術【CEDEC2018】一歩先のUnityでのパフォーマンス/メモリ計測、デバッグ術
【CEDEC2018】一歩先のUnityでのパフォーマンス/メモリ計測、デバッグ術Unity Technologies Japan K.K.
 
シェーダだけで世界を創る!three.jsによるレイマーチング
シェーダだけで世界を創る!three.jsによるレイマーチングシェーダだけで世界を創る!three.jsによるレイマーチング
シェーダだけで世界を創る!three.jsによるレイマーチングSho Hosoda
 
Unity道場 14 Shader Forge 102 ~ShaderForgeをつかって学ぶシェーダー入門~ カスタムライティング/トゥーンシェーダー編
Unity道場 14 Shader Forge 102 ~ShaderForgeをつかって学ぶシェーダー入門~ カスタムライティング/トゥーンシェーダー編Unity道場 14 Shader Forge 102 ~ShaderForgeをつかって学ぶシェーダー入門~ カスタムライティング/トゥーンシェーダー編
Unity道場 14 Shader Forge 102 ~ShaderForgeをつかって学ぶシェーダー入門~ カスタムライティング/トゥーンシェーダー編小林 信行
 
ガルガンチュア on Oculus Quest - 72FPSへの挑戦 -
ガルガンチュア on Oculus Quest - 72FPSへの挑戦 -ガルガンチュア on Oculus Quest - 72FPSへの挑戦 -
ガルガンチュア on Oculus Quest - 72FPSへの挑戦 -Takehito Gondo
 
CEDEC 2016 Metal と Vulkan を用いた水彩画レンダリング技法の紹介
CEDEC 2016 Metal と Vulkan を用いた水彩画レンダリング技法の紹介CEDEC 2016 Metal と Vulkan を用いた水彩画レンダリング技法の紹介
CEDEC 2016 Metal と Vulkan を用いた水彩画レンダリング技法の紹介Drecom Co., Ltd.
 
UE4のレイトレで出来ること/出来ないこと
UE4のレイトレで出来ること/出来ないことUE4のレイトレで出来ること/出来ないこと
UE4のレイトレで出来ること/出来ないことSatoshi Kodaira
 

Tendances (20)

60fpsアクションを実現する秘訣を伝授 解析編
60fpsアクションを実現する秘訣を伝授 解析編60fpsアクションを実現する秘訣を伝授 解析編
60fpsアクションを実現する秘訣を伝授 解析編
 
シリコンスタジオの最新テクノロジーデモ技術解説
シリコンスタジオの最新テクノロジーデモ技術解説シリコンスタジオの最新テクノロジーデモ技術解説
シリコンスタジオの最新テクノロジーデモ技術解説
 
CEDEC 2020 - 高品質かつ低負荷な3Dライブを実現するシェーダー開発 ~『ラブライブ!スクールアイドルフェスティバル ALL STARS』(スク...
CEDEC 2020 - 高品質かつ低負荷な3Dライブを実現するシェーダー開発 ~『ラブライブ!スクールアイドルフェスティバル ALL STARS』(スク...CEDEC 2020 - 高品質かつ低負荷な3Dライブを実現するシェーダー開発 ~『ラブライブ!スクールアイドルフェスティバル ALL STARS』(スク...
CEDEC 2020 - 高品質かつ低負荷な3Dライブを実現するシェーダー開発 ~『ラブライブ!スクールアイドルフェスティバル ALL STARS』(スク...
 
【Unity道場 3月 ~ライティングとVFX Graph~】Unityのライティング機能のおさらい
【Unity道場 3月 ~ライティングとVFX Graph~】Unityのライティング機能のおさらい【Unity道場 3月 ~ライティングとVFX Graph~】Unityのライティング機能のおさらい
【Unity道場 3月 ~ライティングとVFX Graph~】Unityのライティング機能のおさらい
 
Mask Material only in Early Z-passの効果と仕組み
Mask Material only in Early Z-passの効果と仕組みMask Material only in Early Z-passの効果と仕組み
Mask Material only in Early Z-passの効果と仕組み
 
【Unity道場】新しいPrefabワークフロー入門
【Unity道場】新しいPrefabワークフロー入門【Unity道場】新しいPrefabワークフロー入門
【Unity道場】新しいPrefabワークフロー入門
 
ピクサー USD 入門 新たなコンテンツパイプラインを構築する
ピクサー USD 入門 新たなコンテンツパイプラインを構築するピクサー USD 入門 新たなコンテンツパイプラインを構築する
ピクサー USD 入門 新たなコンテンツパイプラインを構築する
 
【Unite Tokyo 2019】〈七つの大罪〉をゲームで!高品質グラフィックを具現化するための技法と開発最適化のご紹介
【Unite Tokyo 2019】〈七つの大罪〉をゲームで!高品質グラフィックを具現化するための技法と開発最適化のご紹介【Unite Tokyo 2019】〈七つの大罪〉をゲームで!高品質グラフィックを具現化するための技法と開発最適化のご紹介
【Unite Tokyo 2019】〈七つの大罪〉をゲームで!高品質グラフィックを具現化するための技法と開発最適化のご紹介
 
UE4のライティング解体新書~効果的なNPRのためにライティングの仕組みを理解しよう~
UE4のライティング解体新書~効果的なNPRのためにライティングの仕組みを理解しよう~UE4のライティング解体新書~効果的なNPRのためにライティングの仕組みを理解しよう~
UE4のライティング解体新書~効果的なNPRのためにライティングの仕組みを理解しよう~
 
UE4×Switchで60FPSの(ネットワーク)対戦アクションをなんとかして作る! | UNREAL FEST EXTREME 2020 WINTER
UE4×Switchで60FPSの(ネットワーク)対戦アクションをなんとかして作る!  | UNREAL FEST EXTREME 2020 WINTERUE4×Switchで60FPSの(ネットワーク)対戦アクションをなんとかして作る!  | UNREAL FEST EXTREME 2020 WINTER
UE4×Switchで60FPSの(ネットワーク)対戦アクションをなんとかして作る! | UNREAL FEST EXTREME 2020 WINTER
 
UE4のシーケンサーをもっともっと使いこなそう!最新情報・Tipsをご紹介!
UE4のシーケンサーをもっともっと使いこなそう!最新情報・Tipsをご紹介!UE4のシーケンサーをもっともっと使いこなそう!最新情報・Tipsをご紹介!
UE4のシーケンサーをもっともっと使いこなそう!最新情報・Tipsをご紹介!
 
【CEDEC2018】一歩先のUnityでのパフォーマンス/メモリ計測、デバッグ術
【CEDEC2018】一歩先のUnityでのパフォーマンス/メモリ計測、デバッグ術【CEDEC2018】一歩先のUnityでのパフォーマンス/メモリ計測、デバッグ術
【CEDEC2018】一歩先のUnityでのパフォーマンス/メモリ計測、デバッグ術
 
UE4をレンダラとした趣味的スピード背景ルックデブ(UE4 Environment Art Dive)
UE4をレンダラとした趣味的スピード背景ルックデブ(UE4 Environment Art Dive)UE4をレンダラとした趣味的スピード背景ルックデブ(UE4 Environment Art Dive)
UE4をレンダラとした趣味的スピード背景ルックデブ(UE4 Environment Art Dive)
 
シェーダだけで世界を創る!three.jsによるレイマーチング
シェーダだけで世界を創る!three.jsによるレイマーチングシェーダだけで世界を創る!three.jsによるレイマーチング
シェーダだけで世界を創る!three.jsによるレイマーチング
 
Unity道場 14 Shader Forge 102 ~ShaderForgeをつかって学ぶシェーダー入門~ カスタムライティング/トゥーンシェーダー編
Unity道場 14 Shader Forge 102 ~ShaderForgeをつかって学ぶシェーダー入門~ カスタムライティング/トゥーンシェーダー編Unity道場 14 Shader Forge 102 ~ShaderForgeをつかって学ぶシェーダー入門~ カスタムライティング/トゥーンシェーダー編
Unity道場 14 Shader Forge 102 ~ShaderForgeをつかって学ぶシェーダー入門~ カスタムライティング/トゥーンシェーダー編
 
ガルガンチュア on Oculus Quest - 72FPSへの挑戦 -
ガルガンチュア on Oculus Quest - 72FPSへの挑戦 -ガルガンチュア on Oculus Quest - 72FPSへの挑戦 -
ガルガンチュア on Oculus Quest - 72FPSへの挑戦 -
 
UE4におけるLoadingとGCのProfilingと最適化手法
UE4におけるLoadingとGCのProfilingと最適化手法UE4におけるLoadingとGCのProfilingと最適化手法
UE4におけるLoadingとGCのProfilingと最適化手法
 
CEDEC 2016 Metal と Vulkan を用いた水彩画レンダリング技法の紹介
CEDEC 2016 Metal と Vulkan を用いた水彩画レンダリング技法の紹介CEDEC 2016 Metal と Vulkan を用いた水彩画レンダリング技法の紹介
CEDEC 2016 Metal と Vulkan を用いた水彩画レンダリング技法の紹介
 
CEDEC2016: Unreal Engine 4 のレンダリングフロー総おさらい
CEDEC2016: Unreal Engine 4 のレンダリングフロー総おさらいCEDEC2016: Unreal Engine 4 のレンダリングフロー総おさらい
CEDEC2016: Unreal Engine 4 のレンダリングフロー総おさらい
 
UE4のレイトレで出来ること/出来ないこと
UE4のレイトレで出来ること/出来ないことUE4のレイトレで出来ること/出来ないこと
UE4のレイトレで出来ること/出来ないこと
 

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

輪読発表資料: Efficient Virtual Shadow Maps for Many Lights
輪読発表資料: Efficient Virtual Shadow Maps for Many Lights輪読発表資料: Efficient Virtual Shadow Maps for Many Lights
輪読発表資料: Efficient Virtual Shadow Maps for Many Lightsomochi64
 
Hopper アーキテクチャで、変わること、変わらないこと
Hopper アーキテクチャで、変わること、変わらないことHopper アーキテクチャで、変わること、変わらないこと
Hopper アーキテクチャで、変わること、変わらないことNVIDIA Japan
 
2値ディープニューラルネットワークと組込み機器への応用: 開発中のツール紹介
2値ディープニューラルネットワークと組込み機器への応用: 開発中のツール紹介2値ディープニューラルネットワークと組込み機器への応用: 開発中のツール紹介
2値ディープニューラルネットワークと組込み機器への応用: 開発中のツール紹介Hiroki Nakahara
 
研究動向から考えるx86/x64最適化手法
研究動向から考えるx86/x64最適化手法研究動向から考えるx86/x64最適化手法
研究動向から考えるx86/x64最適化手法Takeshi Yamamuro
 
0から理解するニューラルネットアーキテクチャサーチ(NAS)
0から理解するニューラルネットアーキテクチャサーチ(NAS)0から理解するニューラルネットアーキテクチャサーチ(NAS)
0から理解するニューラルネットアーキテクチャサーチ(NAS)MasanoriSuganuma
 
研究内容 カタログマイニング
研究内容 カタログマイニング研究内容 カタログマイニング
研究内容 カタログマイニングShogo Tabata
 
When NAS Meets Robustness: In Search of Robust Architectures against Adversar...
When NAS Meets Robustness:In Search of Robust Architectures againstAdversar...When NAS Meets Robustness:In Search of Robust Architectures againstAdversar...
When NAS Meets Robustness: In Search of Robust Architectures against Adversar...MasanoriSuganuma
 
When NAS Meets Robustness: In Search of Robust Architectures against Adversar...
When NAS Meets Robustness:In Search of Robust Architectures againstAdversar...When NAS Meets Robustness:In Search of Robust Architectures againstAdversar...
When NAS Meets Robustness: In Search of Robust Architectures against Adversar...MasanoriSuganuma
 
Ibisml2011 06-20
Ibisml2011 06-20Ibisml2011 06-20
Ibisml2011 06-20Yasuo Tabei
 

Similaire à CG 論文講読会 2013/5/20 "Clustered deferred and forward shading" (12)

輪読発表資料: Efficient Virtual Shadow Maps for Many Lights
輪読発表資料: Efficient Virtual Shadow Maps for Many Lights輪読発表資料: Efficient Virtual Shadow Maps for Many Lights
輪読発表資料: Efficient Virtual Shadow Maps for Many Lights
 
Hopper アーキテクチャで、変わること、変わらないこと
Hopper アーキテクチャで、変わること、変わらないことHopper アーキテクチャで、変わること、変わらないこと
Hopper アーキテクチャで、変わること、変わらないこと
 
2値ディープニューラルネットワークと組込み機器への応用: 開発中のツール紹介
2値ディープニューラルネットワークと組込み機器への応用: 開発中のツール紹介2値ディープニューラルネットワークと組込み機器への応用: 開発中のツール紹介
2値ディープニューラルネットワークと組込み機器への応用: 開発中のツール紹介
 
Halide for Memory
Halide for MemoryHalide for Memory
Halide for Memory
 
研究動向から考えるx86/x64最適化手法
研究動向から考えるx86/x64最適化手法研究動向から考えるx86/x64最適化手法
研究動向から考えるx86/x64最適化手法
 
FPGAX2019
FPGAX2019FPGAX2019
FPGAX2019
 
0から理解するニューラルネットアーキテクチャサーチ(NAS)
0から理解するニューラルネットアーキテクチャサーチ(NAS)0から理解するニューラルネットアーキテクチャサーチ(NAS)
0から理解するニューラルネットアーキテクチャサーチ(NAS)
 
研究内容 カタログマイニング
研究内容 カタログマイニング研究内容 カタログマイニング
研究内容 カタログマイニング
 
When NAS Meets Robustness: In Search of Robust Architectures against Adversar...
When NAS Meets Robustness:In Search of Robust Architectures againstAdversar...When NAS Meets Robustness:In Search of Robust Architectures againstAdversar...
When NAS Meets Robustness: In Search of Robust Architectures against Adversar...
 
When NAS Meets Robustness: In Search of Robust Architectures against Adversar...
When NAS Meets Robustness:In Search of Robust Architectures againstAdversar...When NAS Meets Robustness:In Search of Robust Architectures againstAdversar...
When NAS Meets Robustness: In Search of Robust Architectures against Adversar...
 
Ibisml2011 06-20
Ibisml2011 06-20Ibisml2011 06-20
Ibisml2011 06-20
 
More modern gpu
More modern gpuMore modern gpu
More modern gpu
 

Plus de Ryo Suzuki

Siv3Dで楽しむゲームとメディアアート開発
Siv3Dで楽しむゲームとメディアアート開発Siv3Dで楽しむゲームとメディアアート開発
Siv3Dで楽しむゲームとメディアアート開発Ryo Suzuki
 
ゲーム開発者のための C++11/C++14
ゲーム開発者のための C++11/C++14ゲーム開発者のための C++11/C++14
ゲーム開発者のための C++11/C++14Ryo Suzuki
 
Processingによるプログラミング入門 第6回
Processingによるプログラミング入門 第6回Processingによるプログラミング入門 第6回
Processingによるプログラミング入門 第6回Ryo Suzuki
 
Processingによるプログラミング入門 第5回
Processingによるプログラミング入門 第5回Processingによるプログラミング入門 第5回
Processingによるプログラミング入門 第5回Ryo Suzuki
 
Processingによるプログラミング入門 第4回
Processingによるプログラミング入門 第4回Processingによるプログラミング入門 第4回
Processingによるプログラミング入門 第4回Ryo Suzuki
 
Processingによるプログラミング入門 第3回
Processingによるプログラミング入門 第3回Processingによるプログラミング入門 第3回
Processingによるプログラミング入門 第3回Ryo Suzuki
 
Processingによるプログラミング入門 第2回
Processingによるプログラミング入門 第2回Processingによるプログラミング入門 第2回
Processingによるプログラミング入門 第2回Ryo Suzuki
 
Processing によるプログラミング入門 第1回
Processing によるプログラミング入門 第1回Processing によるプログラミング入門 第1回
Processing によるプログラミング入門 第1回Ryo Suzuki
 
CG 論文講読会 2013/2/12 "A reconstruction filter for plausible motion blur"
CG 論文講読会 2013/2/12 "A reconstruction filter for plausible motion blur"CG 論文講読会 2013/2/12 "A reconstruction filter for plausible motion blur"
CG 論文講読会 2013/2/12 "A reconstruction filter for plausible motion blur"Ryo Suzuki
 

Plus de Ryo Suzuki (10)

Siv3Dで楽しむゲームとメディアアート開発
Siv3Dで楽しむゲームとメディアアート開発Siv3Dで楽しむゲームとメディアアート開発
Siv3Dで楽しむゲームとメディアアート開発
 
ゲーム開発者のための C++11/C++14
ゲーム開発者のための C++11/C++14ゲーム開発者のための C++11/C++14
ゲーム開発者のための C++11/C++14
 
Processingによるプログラミング入門 第6回
Processingによるプログラミング入門 第6回Processingによるプログラミング入門 第6回
Processingによるプログラミング入門 第6回
 
Processingによるプログラミング入門 第5回
Processingによるプログラミング入門 第5回Processingによるプログラミング入門 第5回
Processingによるプログラミング入門 第5回
 
Processingによるプログラミング入門 第4回
Processingによるプログラミング入門 第4回Processingによるプログラミング入門 第4回
Processingによるプログラミング入門 第4回
 
Processingによるプログラミング入門 第3回
Processingによるプログラミング入門 第3回Processingによるプログラミング入門 第3回
Processingによるプログラミング入門 第3回
 
Processingによるプログラミング入門 第2回
Processingによるプログラミング入門 第2回Processingによるプログラミング入門 第2回
Processingによるプログラミング入門 第2回
 
Processing によるプログラミング入門 第1回
Processing によるプログラミング入門 第1回Processing によるプログラミング入門 第1回
Processing によるプログラミング入門 第1回
 
Kinect 入門
Kinect 入門Kinect 入門
Kinect 入門
 
CG 論文講読会 2013/2/12 "A reconstruction filter for plausible motion blur"
CG 論文講読会 2013/2/12 "A reconstruction filter for plausible motion blur"CG 論文講読会 2013/2/12 "A reconstruction filter for plausible motion blur"
CG 論文講読会 2013/2/12 "A reconstruction filter for plausible motion blur"
 

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

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