本サイトでは、アフィリエイト広告およびGoogleアドセンスを利用しています。

DirectX Raytrace (DXR) の始め方

GDC で話題になっていた DirectX Raytracing (DXR) が触ってみることができるようになった模様です。

Microsoft が DirectX のサンプルプログラムを公開しているリポジトリで、先日の DXR のサンプルが追加されていました。
https://github.com/Microsoft/DirectX-Graphics-Samples

今回はこれを起動させるまでを説明します。

準備

まずはリポジトリからファイルをダウンロードするか、 git を使って clone して取得してきます。
以前にリポジトリを clone している人は、 pull で最新状態に更新しておきます。

この中の Samples/Desktop/D3D12Raytracing というフォルダの中がサンプルコードとなります。

VisualStudio 2017 と、最新の Windows SDK が必要になるので、Visual Studio インストーラーから Windows SDK 10.0.16299 を含むように設定します。

この後 D3D12Raytracing/src/D3D12Raytracing.sln を開いて、ビルドを行うのですが、ファイルが一部足りないと警告されるのでこの準備を整えておきます。

以下の URL より、 DirectX Raytracing Binaries Release V1.0 を取得します。

現時点でのファイル名は、 DirectXRaytracingBinariesV1.0.zip でした。これを展開して、 Samples/Desktop/D3D12Raytracing/tools/x64 の中にコピーを行います。

D3D12Raytracing/src/D3D12Raytracing.sln を開いて、ビルドを行います。色々と警告が表示されるかもしれませんが、全てのプロジェクトで正常終了すれば問題ないと思います。

続いて、実行の前に “設定” ⇒ “更新とセキュリティ” の中にある “開発者向け” を選択します。
そうして以下の画面のように、”開発者モード” に設定します。

これを設定せずに、サンプルプログラムを実行すると以下のようなエラーを見ることになります。

D3D12 ERROR: ID3D12Device::CreateInputLayout: Input Signature in bytecode could not be parsed.  Data may be corrupt or in an unrecognizable format. [ STATE_CREATION ERROR #63: CREATEINPUTLAYOUT_UNPARSEABLEINPUTSIGNATURE]
D3D12 ERROR: ID3D12Device::CreateVertexShader: Vertex Shader is corrupt or in an unrecognized format. [ STATE_CREATION ERROR #67: CREATEVERTEXSHADER_INVALIDSHADERBYTECODE]
0x00007FF8A6714008 で例外がスローされました (D3D12RaytracingMiniEngineSample.exe 内): Microsoft C++ の例外: _com_error (メモリの場所 0x000000DA03F9B2D8)。
D3D12 ERROR: ID3D12Device::CreateInputLayout: Input Signature in bytecode could not be parsed.  Data may be corrupt or in an unrecognizable format. [ STATE_CREATION ERROR #63: CREATEINPUTLAYOUT_UNPARSEABLEINPUTSIGNATURE]
D3D12 ERROR: ID3D12Device::CreateVertexShader: Vertex Shader is corrupt or in an unrecognized format. [ STATE_CREATION ERROR #67: CREATEVERTEXSHADER_INVALIDSHADERBYTECODE]
0x00007FF8A6714008 で例外がスローされました (D3D12RaytracingMiniEngineSample.exe 内): Microsoft C++ の例外: _com_error (メモリの場所 0x000000DA03F9B2D8)。
D3D12RaytracingMiniEngineSample.exe によってブレークポイントが発生しました。

実行

問題なくビルドが終われば、そのまま実行してみます。以下のような画面が表示されました。

環境情報

自分の環境は以下のようなものです。

  • Windows10 Pro FallCreatorsUpdate 適用済み
  • VisualStudio 2017 (v15.6.1)
  • Intel Core i7 3770T
  • Geforce 1060 Ti (ドライバ: 390.77)

自分の環境で、このサンプルは 1000 Fps ちょっと, Million Primary Ray/s は 980 付近でした。

続いて、 D3D12RaytracingHelloWorld のプロジェクトでは無く、 D3D12RaytracingMiniEngine のほうを実行してみます。
こちらのプロジェクトの方をスタートアッププロジェクトにして実行してみたところ、1280×720 の解像度で起動してきました。これなら 60FPS は出ているようです。

・・・植物のあたりでアルファ抜きがうまく出来ておらず、ポリゴンの形が見えますね。

まとめ

DXR には RS4 の環境が必要!と聞いていましたが、どうやら FCU の環境でも FallbackLayer の存在により実行させてみることが可能とも聞いたので試してみました。
現実的な速度でどのくらいで動くのだろうと興味がありましたが、思った以上には早く動いているようで驚きました。
DXR は DirectX を用いて ラスタライズ方式とレイトレース方式をうまく融合させて、1歩先に品質を上げてくれるのではなかろうか、と期待しています。

※ 開発者モード未設定時にエラーが出る件を追記しました。

DirectXプログラミング
すらりんをフォローする
すらりん日記
タイトルとURLをコピーしました