« Shader.jp記事更新 2018/1/23 | トップページ | FrameGraphを参考にしたオープンソース »

2018.01.28

Visibility BufferとCluster CullingとTriangle filteringを振り返る2018頭

GPU Zen 2の執筆者募集のタイミングで公開されたThe Forgeですが、最初に公開されたときよりVisibility Buffer(Examples_3)のサンプルが更新されたので動かしてみました。

vb

https://github.com/ConfettiFX/The-Forge

最初のビルドではAssimpまわりのライブラリの設定があったんですが、それはしなくてよくなりましたね(アセットはGitHubにはないのでWindowsならPRE_BUILD.batで取ります)。自分の環境(Win 10 + GeForce GTX 1080)ではDX12/Vulkan両方動きました。

今回の実装に関しては、GitHubのサンプルのDocumentに資料があります。

https://github.com/ConfettiFX/The-Forge/tree/master/Examples_3/Visibility_Buffer/Documentation

この実装は、もともとはWolfgang Engel氏がGDC Europe 2016で紹介した下記のリンクの話でしたが、上記の発表よりも手法のフォローが増えているように見えますので、今読むなあら上がいいんでしょうね。


https://www.gdcvault.com/play/1023792/4K-Rendering-Breakthrough-The-Filtered

この実装は、Visibility Bufferに目が行きますが、Cluster CullingとTriangle filteringなども実装されたものになっています。

・Visibility Buffer
Visibility Buffer自体は、2013年に提案されたものでしたね。

http://jcgt.org/published/0002/02/04/

すぐ、使おうという人が多くなかったのは、おそらく今と違ってまだ4Kへの対応の必要性が少なかったからかと思います。

G-bufferの帯域の問題というのは、1080pの時に比較してゲームの4K対応なって問題としてあげられることが増えてきました。

あとは、まだ実装例を見れていないですがメモリが遅いモバイルなどで通常のDeferred Renderingとどちらが良いかという議論はありそうですね。Metal 2やVulkanの世代では実装例が出るか気になるところですね(既存のゲームエンジンを使用せずにフルスクラッチでレンダリングのコードを書くようなタイトルがあれば...ですが)。

・Cluster CullingとTriangle filtering

Cluster CullingやTriangle filteringに関してSIGGRAPH 2015: Advances in Real-Time Rendering in GamesのGPU-Driven Rendering Pipelinesかと思います。

http://advances.realtimerendering.com/s2015/aaltonenhaar_siggraph2015_combined_final_footer_220dpi.pdf

これは、Assassin’s Creed Unityの大規模なパリの街の描画に使われた手法で、メッシュを64頂点のストリップを1 Clusterとして画面内での可視判定(こっちがCluster Culling)を行って、描画に積むメッシュのClusterを決定する(描画に使う三角形を抽出するのがTriangle filteringでしょう)というものですね。

こうした技術が使えるようになったのはOpenGL/DX12/VulkanなどのMulti DrawやExecute Indirectのような描画命令の発達が背景にあるわけですね。特にDeferred RenderingのG-buffer描き込みなどはシェーダのバリエーションがあまりないので相性がいいわけですね。

Cluster Cullingは、AMDはサンプルを公開していますし、Wolfgang Engel氏の発表などになるわけですね。

GeometryFX 1.2 – Cluster Culling
https://gpuopen.com/geometryfx-1-2-cluster-culling/

Cluster CullingとTriangle filteringに関しては、Visibility Bufferでない環境でも有効ですので、こちらだけ採用してみたいというのもありなんでしょうね。

なお、これらを一歩進めよう(マテリアル周りのことも考慮しつつ)としているのが、Eidos MontrealのDawn EngineのDeferred Plusでしょうね。これに関しては下記に記事がありますが、GPU Zenの1に記事がありますのでそちらを見るとよいかと思います。

DEFERRED+: NEXT-GEN CULLING AND RENDERING FOR DAWN ENGINE
https://eidosmontreal.com/en/news/deferred-next-gen-culling-and-rendering-for-dawn-engine

・まとめ

従来型のDeferred Renderingの問題である帯域の問題やマルチレイヤーマテリアルへの柔軟な対応(G-bufferにDiffuse AlbedoやMetalic, Roughnessなどのパラメータを1種類しか格納できない)などの改善に関しては、DX12/Vulkan/Metalの世代にあった描画パイプラインの提案は今年あたりから様々提案がされてきそうですね。

その出発として、このサンプルやこの記事で紹介している技術を学ぶのは良いんじゃないかと思います。

« Shader.jp記事更新 2018/1/23 | トップページ | FrameGraphを参考にしたオープンソース »

Programming」カテゴリの記事

画像付き」カテゴリの記事

Amazon」カテゴリの記事

コメント

コメントを書く

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

« Shader.jp記事更新 2018/1/23 | トップページ | FrameGraphを参考にしたオープンソース »