« 2018年3月 | トップページ | 2018年5月 »

2018.04.26

いよいよDXRのドライバなど登場

Titan VのDXRドライバは396から、みたいな話がありましたが397がきたようですね。

FalcorもDXR対応していくみたいですね。

2018.04.17

シングルヘッダのglTFシリアライズ/デシリアライズライブラリ:fx-gltf

シングルヘッダのglTFシリアライズ/デシリアライズライブラリ:fx-gltfというのが公開になっています。

fx-gltf
https://github.com/jessey-git/fx-gltf

なお、依存するライブラリとしてシングルヘッダのjsonライブラリの下記が必要になります。

JSON for Modern C++
https://github.com/nlohmann/json

C++14/C++17といったモダンなC++のようです。同じくシングルヘッダのtinygltfとのパフォーマンス比較などは行われています。

せっかくなので、次回Shader.jpの方ではglTFのロードとPBRシェーダの描画の例を扱おうと思います。

2018.04.12

I3D 2018のPapersのリストが出そろったみたい

I3D 2018のPapersのリストが出そろったみたいね。

http://kesen.realtimerendering.com/i3d2018Papers.htm

まずは採択されたものをチェック。

2018.04.05

GDC 2018 Cluster Forward Rendering and Anti-Aliasing in 'Detroit: Become Human'

GDC 2018のDetroit: Become Humanのセッションスライドが来ていますね。

Cluster Forward Rendering and Anti-Aliasing in 'Detroit: Become Human'
http://www.gdcvault.com/play/1025420/Cluster-Forward-Rendering-and-Anti

PS4が始まったころにはDeferred Rendering採用タイトルが多かったですが、Quantic DreamはDeferredとForwardをタイトル制作の時期のトレンドに合わせて変えているようですねぇ。

今回は、やっぱりマルチレイヤーマテリアルへの対応のしやすさと、このタイトルが実現したいことを考えるとG-bufferが膨らむ...いうところがForward にした決め手のようですね。

Cluster Shadingが発明されて以来ライトの数が多く使えるか?という部分ではDeferredとForwardで差がなくなってきたように思えますね。そういう点では両方に対応できるということが重要なんでしょうねぇ。

2018.04.03

WinMLの始め方

WinMLに関しては実行できる環境がほかの機械学習系フレームワークより少ないとは思うのですが、次世代のHoloLensなどを考えると、使う部分はあるのかな~、という感じですね。

とは言え、グラフィックスAPIと連携しやすいと画像処理的なポストエフェクトを推論モデルから...ということはあるかもしれませんね。

DirectX Raytracing (DXR) の話 その1 APIの構造など

最近、DXRを触り始めていますが、少しずつメモとして中身について書いていこうと思います。

今回は、APIの構造などについてですね。

DXRのサンプルなどはGitHubにあるのですが、ドキュメントに関しては、DXRSDK_v0.09.01.zipをダウンロードするとその中に入ってます。

Getting Started with Raytracing
http://forums.directxtech.com/index.php?topic=5860.0

それからGDC 2018のスライドも良いと思います。

https://msdnshared.blob.core.windows.net/media/2018/03/GDC_DXR_deck.pdf

NVIDIAのIntroduction to NVIDIA RTX and DirectX Raytracingも導入にはわかりやすいと思います。

https://devblogs.nvidia.com/introduction-nvidia-rtx-directx-raytracing/

この記事では、DXRSDK_v0.09.01.zipに付属する4.5 Ray-geometry interaction diagramにある図を取り上げます。

Dxr

DXRはDirect3D12の上で動いてますので、Command Queue、Command Lists、Descriptor Heapなどについては考え方は同じです。あと、頂点バッファ、インデックスバッファも使いまわしが効きます。

レイを飛ばすのはCommand ListsのDispatchRays()をします。これによりレイトレーシングのためのシェーダが実行されますが、今回はこの話は置いておきます。あと、構造的に近い部分のあるOptiXの話もしません。

今回は、2つの話題Acceleration structureとshader tableの話題をします。

Acceleration structureの話

図の話に戻りますが、DXRではまずはAcceleration structureというものがあります。Accelerationは2つに分かれています。図でいうと上半分ですね。

・top level acceleration structure
・bottom level acceleration structure

top level acceleration structureは、instanceというものを持ちますが、これにはレイを飛ばしたあとのシェーダやbottom level acceleration structureや各種マトリックスなどが入っています。

bottom level acceleration structureはレイをうけるジオメトリを登録しておきます。ジオメトリには三角形メッシュやAABBなどの形状を選択することができます。bottom level acceleration structureには複数のジオメトリを登録しておくことができますので、あらかじめ頂点やインデックスバッファを連結などしておく必要はありません。

bottom level acceleration structureは、ゲームなどで言えばキャラクターや背景などのジオメトリなどが格納されるわけですね。

一方。top level acceleration structureはレイを飛ばす側の例えば、カメラからレンダリングしたいとかShadow Rayを飛ばしたいとかでは、instanceを複数作るわけですね。

なお、DXRのAPIではAcceleration structureはID3D12Resourceのようです。

Shader tableとshader recordの話

つづいて図の下半分の話をしますが、下半分はシェーダの話です。

DXRでは、実行したいシェーダやパラメータのセットをテーブルに登録します。これがshader tableですね。shader tableの1つ1つはshader recordと呼ばれます。

top level acceleration structureのinstanceでもつShaderIndexはテーブル内のインデックスということになります。

なお、shadertable内のindexの指定方法ですが、instance 1つにつき1 shader recordを実行する他に、開始インデックスを決めてそこから連続した shader recordを複数連続で実行する指定方法があります。

shader recordは、shader identifierを言うのを持ちますが、これは図ではhit groupという構造になります。

DXRでは、頂点シェーダからピクセルシェーダのようなGPUのパイプラインと違いhit groupに呼び出すシェーダを登録しておきます。

hit groupにはレイを飛ばした時にヒットしたときに実行されるシェーダやヒットしなかったときのシェーダなどのレイを飛ばしたあとに呼び出されるシェーダのセットを持ったものになります。

shader recordは、shader identifier以外にRoot ConstantやDescriptor Tableなどシェーダのリソースバインディングにかかわる情報を持ちます。Descriptor HeapはDirect3D12に引き続き使用されます。

DispatchRaysの単位でのリソースバインディングについてはshader recordが重要になるわけですね。

今回のまとめ

DXRのプログラムに入る前に、まずはこの構造を頭に入れてC++のコードを読むと良いんではないかと思います。あと、Direct3D12自体のAPIの知識は必須です。

次回はDXRのシェーダ部分について書きます。

2018.04.02

Triangle Visibility Buffer記事

最近のVisibility Buffer周りの発表やThe Forgeでコード公開してるWolfgang Engel氏がVisibility Bufferの新しい記事を公開しています。

Triangle Visibility Buffer
http://diaryofagraphicsprogrammer.blogspot.jp/2018/03/triangle-visibility-buffer.html

« 2018年3月 | トップページ | 2018年5月 »