« 2017年12月 | トップページ | 2018年2月 »

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の世代にあった描画パイプラインの提案は今年あたりから様々提案がされてきそうですね。

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

2018.01.23

Shader.jp記事更新 2018/1/23

記事を2件追加しました。

Visibility Bufferの実装例があるのは良いですね。

2018.01.18

大阪で講演してきます


3月に大阪で開催のGAME CREATORS CONFERENCE '18で話をしてきます。

http://www.gc-conf.com

HDRの話ではあるのですが、製品タイトルのHDR出力という話は内村さんの話がありますので、むしろアセット作ったり、確認したりというのをPC環境にどう作るか?などの方向ですね。

HDRディスプレイに対応するDCCツールはまだ少ないので数ヶ月から年単位で環境が整うまで自作するところとかもありますね。

最近公開しましたHDR 上でのOpenEXRのビューワーなど当日に話題にするとは思います(まだまだ、ソースを直したり機能を入れておきます)。

HDR10ディスプレイ向けOpenEXRビューワーの仮公開
http://masafumi.cocolog-nifty.com/masafumis_diary/2018/01/hdr10openexr-bd.html

開発現場にHDRディスプレイを入れたら自分たちでも出来る…という話にしたいですね。

2018.01.16

GDC 2018 FrostbiteのGIのセッション

GDC 2018でFrostbiteのGIのセッションやるみたいですね。

Precomputed Global Illumination in Frostbite
http://schedule.gdconf.com/session/precomputed-global-illumination-in-span-classhighlightfrostbitespan/854097

Frostbite というとEnlighten使用してたイメージですが、ついに自作したようですね。static GIのためのソリューションのようで、セッションでは

・パストレーシング
・SHのライトマップ
・ライトマップの効果的なパッキングアルゴリズム

とのことのようですね。

2018.01.12

HDRディスプレイ向けHDRテクスチャ素材の確認について

現状、HDRディスプレイ向けにHDRテクスチャの確認はPhotoshopやSubstanceでも各種ゲームエンジンもビルドするとレンダリング結果をHDR10見れるものもありますが、エディタの上で見れるものがないのよね。

なので、まだまだ数か月は自前で見る手段がいるんですよね。

HDR10ディスプレイ向けOpenEXRビューワーの仮公開

ソースコードの整理などやらないといけないことはあるのですが、一旦、公開します。

https://github.com/shaderjp/HDROpenEXRViewer
※Windows 10はPrintScreenするとsRGBにされるので、色域落ちてます。
※公開時点でGitHubが落ちたみたいなので復旧したら見てください。

一応、binフォルダにビルド済みの実行ファイルはありますので、とりあえず、プログラマじゃなくて使いたい方はそっちを起動してください。

サンプル画像は3つつけてますが、それは下記を見てください。

http://masafumi.cocolog-nifty.com/masafumis_diary/2018/01/hdr10openexrhdr.html

このツールを題材にした話については、とあるイベントで話をする予定です。その時までにバージョン1.0にしたいところですね。

口頭発表をするようなイベント会場はおそらくHDRプロジェクタやテレビがあるような環境ではないと思いますので、サンプルを公開するから自分の環境で見てください...という感じでの公開です。

あと、Visual Studio 2017入れてないWin 10+Fall Creators Updateの方の環境で実行ファイルが起動しないなどあれば。

Screenshot

2018.01.07

HDR10でOpenEXR表示のサンプルのHDR写真の素材撮影

休みに外房に釣りに行ったのですが、その合間に次にShader.jpのネタとして公開する予定のHDR10でOpenEXR表示のサンプルの素材を撮ってきました(釣りはボウズでしたが、こちらは少し収穫がありました)。

カメラは足場の悪い釣りの合間に撮れるように、軽量なもので三脚なくても何とかなりそうなやつということで、今回はリコーGR(APS-Cです。RAWは12bit)です。とりあえず、露出変えて3枚のブラケット撮影をしてきました。

自宅のBen-QのSW271でサンプル用に作成したOpenEXRの3枚をsRGBとHDR10のST.2084で表示したものを順にiPhone Xで撮影したものを上げていきます。sRGBのモニタでは正確ではないのですが、サンプルの傾向とか雰囲気はわかるとは思います。

OpenEXRの写真はすべてsRGBに収まらない範囲が入っているので、sRGBの方は白飛びが出ている部分があります。

Example 1

HDR display test
sRGB

HDR display test
ST.2084

この写真については青空と雲がわかりやすく差が出ています。

Example 2

HDR display test
sRGB

HDR Photo test
ST.2084

2つ目のサンプルも日中ですね。空に関しては先ほどと同じで違いが出てますね。

それから右手前の漁船の船体や右側の崖(?)の岩肌などはsRGBは色が飛んでますね。

Example 3

HDR  display test
ST.2084


HDR  display test
ST.2084

最後は趣向を変えて、日中でなく夕方の時間帯なのですが、空と雲は少しさがわかりますが、明確なのは照明ですね。それから照明が水面に落とす反射も大きく違いがわかります。

おわりに

とりあえず、HDRで差が出る素材の作り方に関しては、少しずつ練習している最中で、わりと現実の明るさ(nits)などに関しての対応はいい加減です。

最終的に、これをHDR10向けのレンダリングのためのIBL素材の撮影まで、個人的にいきたいところですね。

このサンプルについては早く出したいのですが、MicrosoftのHDRサンプルに機能を立て増した分、ソースがまだ人に見せられる感じではないので、早く公開したいところですね。

Windows 10 + Fall Creators UpdateでHDRテレビやディスプレイある人で、「実行ファイルだけ」については対応可能ではありますけどね。

あと、この辺の話は近いうちに講演する機会がありそうで、それに関しては告知がありましたらまたお知らせしたいところですね。

2018.01.06

"HLSLからSPIR-Vバイナリを生成する"手法についての記事

Shader.jpの方に新年最初の記事として"HLSLからSPIR-Vバイナリを生成する"手法についての記事を書きました。


HLSLからSPIR-Vバイナリを生成する
http://www.shader.jp/?page_id=2176

Shader.jp News
http://www.shader.jp/?p=2200


記事中にあるShadercやDirectX Shader Compiler対応などはGoogleが頑張ってるわけですが、GoogleってChromeやChromium、WebGLなどがあってすべてのOSがOpenGLやOpenGLで実行してないことがあってOSごとに最適なAPIにポートしているのでシェーダやAPIの変換に関しては結構積極的なのがこの辺のプロジェクトへの関与なんでしょうね。

古くはその辺ANGLEなどがそうですね。

現在だとその辺の話は下記のプロジェクトNXT がわかりやすいですね。

nxt-standalone
https://github.com/google/nxt-standalone

こうした取り組みのためにはDirect3DもVulkanもシェーダがIL化してくるとありがたそうですね。

2018.01.01

Shader.jpの次のネタの仕込み

とりあえず、HDRディスプレイ環境でOpenEXRの表示部分はできました。

一応、EVの調整ぐらいはスライダーで変更できる程度の感じですね。あとはソースとか整理していかないと。




今年もよろしくお願いします 2018

個人的には喪中ということも新年のご挨拶は失礼させていただきますが、今年もよろしくお願いします。

Shader.jp向けの新年最初のサンプルの記事は、休みのうちに更新したいところですね。

« 2017年12月 | トップページ | 2018年2月 »