フォト

Google AdSense


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

2018.02.14

Unity 2018.1b6のライトで気になる新要素

Unity 2018.1b6のライトで気になる新要素(b5でもあったのですが、これを書いてる時点ではb6)があったのでメモです。今後、仕様などは変わるかもしれません。

Unity 2018.1のベータではスクリプタブルレンダーパイプラインが導入されるようで、デフォルトでその仕組みを利用して、3つのプリセットのプレビューが入っています。3つのプリセットに関して下記の記事が詳しいです。

Unity 2018 とグラフィックス
https://blogs.unity3d.com/jp/2018/01/18/2018-and-graphics/

今回は、高画質レンダーパイプライン(HDRP)のライトについての話題になります。

HDRPを起動すると下記ようなシーンが入っています。従来の描画の流れと違うことについては上の記事などにあるので、ライトを見てみます。

Hdrp001

HDRPでは、ライト周りもどうも変わってるようでIntensityのデフォルト値なんかも3.14159に変わってますね。これはライトの単位も物理的にしようという感じがしますね。

Hdrp002

で、今回の話ですが、よく見るとLightのShapeの個所にRectangleのいうのがありますね(下図の赤丸)。従来のライトではBake専用でAreaライトがありましたが、これはリアルタイムも行けるようで青丸で囲ったModeの個所でRealtimeとBakeが選択できます。ちなみに、ほかにLineライトなんかもあります。

Hdrp003_2

そういえば、SIGGRAPH 2016でUnityが下記のような論文を出していましたが、この辺の成果が無事に入ったということなんでしょうかね。

Real-Time Polygonal-Light Shading with Linearly Transformed Cosines
https://labs.unity.com/article/real-time-polygonal-light-shading-linearly-transformed-cosines

ゲームエンジンでリアルタイムのエリアライトが使えるようになるというのは正式リリースが楽しみな話が1つ増えましたね。

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.12

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テレビやディスプレイある人で、「実行ファイルだけ」については対応可能ではありますけどね。

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

2017.12.12

Windows 10 + Chrome でHDRのYoutubeを見る

最近、気づいたのですが、Windows 10でHDR対応しているアップデート当ててる状態で、Chromeのアドレスバーで"chrome://flags/"でHDRモードが起動できたんですね(下図)。

とりあえず、EnableにしたらYoutubeでHDR動画が見れるようになりました。


HDRの動画は下記のチャンネルとかいろいろとアップされてます
https://www.youtube.com/channel/UCve7_yAZHFNipzeAGBI5t9g

Hdr


2017.11.03

Microsoftの新しいHDRサンプルの話

※今回の記事は、sRGBまでのモニタで撮っていることとtJPEGにしているのでHDRディスプレイ上の輝度の違いはわかりません(100nitsより低い値を設定すればsRGBでもこのプロググラムの動作自体は見れますが)。

MicrosoftのXbox Oneも含めたサンプルに新しいHDRディスプレイ向けサンプルが追加されていました。

https://github.com/Microsoft/Xbox-ATG-Samples/tree/master/UWPSamples/Graphics

SimpleHDR_UWPとSimpleHDR_UWP12がありますが、これはDirect3D11かDirect3D12の違いです。

このサンプルはリニア空間でのレンダーターゲットの出力値がsRGBやST.2084上でどういう値かやディスプレイ上では何nitsになるかがわかるようになっています。

このサンプルでは、モードが二つあって、キーで切り替えができます。まずはデフォルトの画面が下記です。

Hdr001

この画面では、4つの白矩形がありますが、左から50nits、100nits(Paper White)、600nits、1,000nitsになっています。各矩形の上には、リニア空間での輝度、sRGBカーブ上の値(100nits越えると1.0にクランプ)、ST.2084上の値、nitsの数値も出ています。

下記の画像で赤丸で囲った一番右に関しては、ゲームパッドやキーボードでHDR Scene Valuesを変えることができます。

Hdr003

次にモードを切り替えるとST.2084のカーブが出てきます出てきます。モード切替は、この画面だとXbox OneコントローラーのAボタンですが、キーボードだと別なキーが割り当てられてます。

Hdr002

このモードではカーブ上の輝度で描画した矩形とPaper Whiteが並んで比較されます。下記の画像でいうと右上の赤で囲った部分ですね。この画面では、黄色で囲ったカーブ上の点も動かすことができます。

このカーブは、HDR10の規格の10,000nitsまで行けますが、テレビやディスプレイの輝度が出せないところはもちろん出ません。

Hdr004

今回のサンプルは、DirectX-Graphics-SamplesのHDRサンプルと比較して、ディスプレイによってどこまでの輝度が出るか確認しやすいものになっています。
DirectX-Graphics-SamplesのHDRサンプル
https://github.com/Microsoft/DirectX-Graphics-Samples/tree/master/Samples/Desktop/D3D12HDR

今回のサンプルでは、手持ちのHDRディスプレイでどこまで出せるかというあたりがわかりやすいのがいいですね。ただし、高い輝度で描画するピクセルがたくさんあると全体の輝度が下がる(熱対策などで)ようなものがあるので、通常、HDRテレビやディスプレイはすべてピクセルで性能の最大輝度は出せないことが大半です。輝度を測定できるような装置での計測などもできるとよいですね。

なお、EIZOのColorEdge PROMINENCEなどはそういう輝度落ちがないのですが、新車買える価格ですね。

http://www.eizo.co.jp/products/ce/cg3145/index.html

2017.10.17

Fall Creators UpdateのタスクマネージャーのGPUパフォーマンスモニタ

そういえば、Fall Creators UpdateのタスクマネージャーでGPUパフォーマンスモニタを見ることができるようになったので、動かしてみました。

Gpuss002

Direct3D12のマルチエンジン対応なので、Graphics Queue、Copy Queue、Compute Queueごとに表示ができますし、VRAMもGPUローカルと共有ビデオメモリでわかりますね。

負荷を見る項目ですが、下記のように表示の切り替えができるので、ビデオエンコーダ/デコーダの負荷などもわかるので動画編集ソフトのレンダリングとかでも負荷見れそうですね。

あと、VRというのもあります。


Gpuss003

参考までに上のパフォーマンスモニタは下記のMiniEngineのモデルビューワーでSSAOをAsync Compute(コードを少し変えると動作します)で動かしている例ですね。少し、Compute_1が動いてるのがそれですね。

Gpuss001

2017.10.10

VS 2017 15.4リリースでDirectX Shader Compilerの更新

VS 2017 15.4がリリースされました。

Visual Studio 2017 version 15.4 Release Notes
https://www.visualstudio.com/en-us/news/releasenotes/vs2017-relnotes

今回の更新で、Windows 10 Fall Creators Update SDK.である10.0.16299.0がVSのインストーラから入れられるようになっています。今回は、以前までと違ってFall Creators Updateを当ててない環境でもSDKの取得はできました(ただし、ターゲットSDKに指定してビルド後実行はできませんでした)。

見た感じ、DXGIはCreators Updateの時のDXGI 1.6のままのようですね。ほかのD3D12の更新はちょっとわかりませんが、LLVMベースになったシェーダコンパイラのdxc.exeに関してはどうも更新されているようですね。

Creators Update付属のものと Fall Creators Updateで-help見たら引数が結構変わってますね。特に赤線をひいたコマンドライン引数-HVに関しては2017というバージョンがあります。

Dxc001
Creators Update 10.0.15063.0

Dxc002
Fall Creators Update 10.0.16299.0

DXILにはCreators Updateの時にリリースされた、DXIL 1.0と現在の1.1(SM 6.1)がありますが、以下の2つが増えてる要素のようですね。

・Barycentrics
・ViewID

https://blogs.msdn.microsoft.com/marcelolr/2017/05/03/last-week-on-directx-shader-compiler-2017-05-02/


2017.09.14

GPD Pocketでゲームするためにゲームパッド購入

GPD PocketはGPD Winと違って本体にゲームパッドの機能がないので、ゲームパッドどうしようかと探してみたけど、BluetoothでXInput互換のゲームパッドがあったので購入しました。

このサイズなら一緒に持ち運んでも問題なさそうですね。

2017.09.13

HDR時代のテクスチャ

前の記事のスライドの22ページ目見てたらHDRでのイメージアセットで何を使うかいいかという話がありますね。

Texture

とりあえず、ランタイムではBC6Hを使えばよさそうですね。ただし、αチャンネルないのが注意ですね。

それから、PC上でのオーサリングのフォーマットはJPEG XRを勧められてますね。浮動小数点フォーマット、αチャンネル、ロスレス対応でSDRでもsRGBでうまく機能するみたいですね。

そのほかに、OpenEXRやJPEG w/ICC profileなどがあがってますね。この二つだとツールの対応でOpenEXRでしょうかね。

とりあえず、JPEG XRについてはちょっと調べないと。

より以前の記事一覧