2018.11.19

ShaderConductor 0.2.0とバイナリ提供

ShaderConductor 0.2.0からビルドしたWindowsバイナリ提供が行われるようなったみたいです。

Version 0.2.0
https://github.com/Microsoft/ShaderConductor/releases

実行ファイル以外に、DLLでの運用もできるのでツールに組み込むとかアリな感じもします。

Sc

実際に上記のPowerShellが実行してみた感じですが、現状見た感じプリプロセッサの対応がなさそうに思います。

バージョンの話では、このバージョンからすべてのシェーダステージの変換がGLSL、ESSL、MSL対応になったようです。ソースから利用する方はmacOSやLinuxもOKみたいですね。

ShaderConductorについて、以前書いた記事は下記です。

ShaderConductor : Microsoftのオープンソースシェーダ言語変換ツール
http://www.shader.jp/?p=2383

2018.09.06

SIGGRAPH 2018のEpic Gamesのリアルタイムレイトレーシングのセッション

SIGGRAPH 2018のNVIDIAのReal-Time Ray Tracingコースの中にUnreal EngineのEPIC Gamesのセッションがありました。このセッションはスライド単体はまだ見つけてないのですが、動画が公開されています。


WEDNESDAY 8/15のReal-Time Ray Tracing
https://www.nvidia.com/en-us/events/siggraph/schedule/?session-type=course

セッション動画は下記です。The Technology Behind The Speed of Lightになります。

The Technology Behind The Speed of Light
http://on-demand.gputechconf.com/siggraph/2018/video/sig1813-6-francois-antoine-epic-car-demo.html

このセッション前半はポルシェとのコラボレーションによるUE4上でのリアルレイトレーシングの話ですね。こちらはゲーム分野というよりは自動車メーカーのビジュアライゼーションという感じですね。非ゲーム分野でUE4使っているようなところでは参考になることと期待感が高まりますね。

後半の17:30ぐらいからは、内容が変わってEpic Real Time Ray TracingというセッションでこちらはGDCで公開したスターウォーズのレイトレーシングのデモの技術的な話なのですが24;20あたり(下図)を見ているとGDCの時からSIGGRAPHにかけてレイトレーシングでやれることを増やしたようですね。

Ue4rt

SIGGRAPHでのリアルタイムレイトレの話はEA SEEDのPICA PICAの話が多いのではありますが、このセッションも実際にエンジンに統合した事例として良いセッションでした。


2018.09.02

DirectX Raytracingの正式リリースはいつ?

gamescom 2018でDirectX Raytracing (DXR)対応タイトルの話が出てきましたが、現在のDXRはまだPreview版で使用するにはD3D12EnableExperimentalFeatures という関数を呼び出して使用します。

D3D12EnableExperimentalFeatures
https://docs.microsoft.com/en-us/windows/desktop/api/d3d12/nf-d3d12-d3d12enableexperimentalfeatures

この関数は、Remarksに書かれているようにWindows 10をDeveloper Modeにしないと失敗します...ということで一般のユーザー向けの機能ではないわけですね。

Because the set of experimental features will change over time, and because these features may not be stable, they are intended for development and experimentation only. This is enforced by requiring Developer Mode to be active before any experimental features can be enabled.

ではいつ一般のユーザー環境でも動作するかというと今年のSIGGRAPH 2018のコースIntroduction to DirectX RayTracingのセッションに記述があります。

http://intro-to-dxr.cwyman.org/

具体的にはIntroduction to the DirectX Raytracing APIの中にあります。

http://intro-to-dxr.cwyman.org/presentations/IntroDXR_RaytracingAPI.pdf

その中の30枚目のスライドでRS5と書かれています。とりあえず、RS5...最近発表されたWindows 10 October 2018 Updateで正式リリースということになりそうですね。なるほど年末のタイトルが間に合うということはそういうことなんですね。おそらくInsider PreviewとSDKを使用しているとD3D12EnableExperimentalFeatures 呼ばなくてもいけるんでしょうね。

Dxrrs5


2018.08.29

Surface GoでDXR

とりあえず開発環境構築の過程でDXRのサンプル起動。

8.67 Mega Rays /sで10fpsって感じです。

2018.08.28

Surface Go購入

Surface Goを購入しました。

ここ1年、旅に持っていくコンピュータとしてはずっとGPD Pocketを持ち歩いておりました。GPD Pocketはとにかく軽くて小さいのでカバンの選択肢広くて便利です。

ただ、キーボードや画面サイズはやはり小さいのでプログラミングには向かない部分あるんですよね。

CPUパワーなどは実は不満なくて、そこだけ不満でした。そんなわけでGPD Pocket 2には行かずSurface Goです。

とりあえず、持ち出してコード書く時はSurface Go、そういうことしない場合はGPD Pocketと使い分けにしようと思います(純粋な旅行など)。

2018.06.16

α7III持ってようやく

最近l購入したα7III持ってようやくがっつり写真を撮りに。

レンズはまだあんまりSonyのがないのでマウントアダプターでAF-S NIKKOR 24-120mm f/4G ED VRとか
AF-S NIKKOR 58mm f/1.4G(後半の紫陽花だけ)あたりのニコンレンズで。

品切れが多いけど、SEL24105Gあたりがほしい。

Chiba Zoological Park 千葉市動物公園

2018.06.10

α7III購入

長いことフルサイズはNikon Dfを使っていたのですが、そろそろ買い替えの周期かなと言うことでα7IIIを購入。

ちょっと4K HDR撮れるカメラ欲しかったのですよね。

ただ、レンズに関してはNikonで揃えたものを活かしたいとは思ってまして、AF対応のマウントアダプタを購入でAF-S NIKKOR 58mm f/1.4Gをつけてみました。カメラ側が対応機種じゃなかったので心配でしたが大丈夫でした。

2018.04.03

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

越中島の桜 2018

結構咲いてきたので、RX1Rでの撮影です。

越中島の桜 2018

2018.03.21

DirectX Raytracingサンプル実行

DirectX Raytracingサンプルを実行してみました。

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

サンプルには、シンプルな三角形を描画するものとMiniEngineのサンプルをベースにSponzaを描画するものがありました。Sponzaでは、Releaseビルドで、実行しているGPUはGeForce GTX 1080ですが、21ms 41Hzと表示があるとおり30 fpsは出てますが、60は出てません。


Dyyjgdavmaahvok

Miniray001

すでにPixが対応しているので入れてみました。

PIX 1803.16-raytracing – DirectX Raytracing support
https://blogs.msdn.microsoft.com/pix/2018/03/19/pix-1803-16-raytracing-directx-raytracing-support/

下記画像のようにキャプチャが無事にできました...と思ったんですが、APIイベントリストを見てるとDirect3D12のコマンドのままなので何がおかしいですね....と思ったら準備が1つ足らなかったようです。

Pix001

Pix002

足らない準備に関しては、Getting Started読みましょう。

https://blogs.msdn.microsoft.com/pix/directx-raytracing/

Manually copy the DirectX Raytracing binaries (d3d12.dll, d3d12SDKLayers.dll and DXGIDebug.dll) into your PIX installation directory
◦ PIX is typically installed here: C:\Program Files\Microsoft PIX\[build number]

なるほどDLL手動コピーでしたか。気を取り直して、再キャプチャ...してみたんですが、DirectX Raytracingのイベントに切り替わらないですね、ちょっと調査ですね。

より以前の記事一覧