GDC 2022 で NVIDIA から公開された KickstartRT のデモを手元で動かしてみました。特にハマりどころはありませんでしたが、記録として残しておきたいと思います。
KickstartRT とは
そもそも「KickstartRT とは何か」ですが、ドキュメントによると「レイトレーシング用のシェーダー・シェーダーリソースを設定することなく、ハードウェアのレイトレーシング機能を使用して、高品位な反射やGIを使ったレンダリングを実現することを目指した SDK 」とのことです。
https://github.com/NVIDIAGameWorks/KickstartRT
私も正確に多くのことを理解できていませんが、既にレンダリングされた G-Buffer から情報を取得するため、アプリケーションはレイトレーシング用にシェーダーを変更することは不要となるようです。また本 SDK がそれらの情報から、反射やGI情報を生成しアプリケーション側にその結果をテクスチャとして返すという役割を持っているようです。
この KickstartRT はレイトレーシング API を有する DirectX12 (D3D12), Vulkan へ対応していることは当然として、 DirectX11 (D3D11) への対応もされていることが1つの注目される点だと私は思います。
動かしてみる
この KickstartRT は SDK なので、これ単体で実行できるサンプルアプリケーションではありません。しかし KickstartRT SDK を使用したデモアプリケーションもまたソースコードが同時に公開されているので、こちらを利用して動かしてみます。ソースコードは GitHub に以下のリポジトリで公開されています。
https://github.com/NVIDIAGameWorks/KickstartRT_Demo
必要なものは Cmake、 Visual Studio 2019 以降、 Windows SDK、 Vulkan SDK などです。詳しくはリポジトリに付属したドキュメントを参照してください。私の環境では以下の状態でコードをビルドし、動作を確認できました。
- Windows10 21H2、 NVIDIA GeForce RTX 3060 Ti
- Visual Studio 2022 および Visual Studio 2019 がインストール済み
- Cmake
- 3.21.0 (Visual Studio 2022 と同時にインストールできたもの)
- ドキュメントでは 3.22.0 と記載があったので更新しておいたほうが良さそう
- Windows SDK
- 10.0.20348.0
- Visual Studio 2022 と同時にインストールできたもの
- Vulkan SDK
- 1.2.182 を使用. (ドキュメントでは 1.2.189 と記載あり。更新しておいた方がよさそう)
リポジトリの取得
先ほどのアドレスから git で clone してきます。git サブモジュールが使用されているので、Recursive オプション付きで、丸ごと取得してきます。
ビルドのためのソリューションを生成
ソリューションファイルを作成していきます。まず、clone したフォルダで、build フォルダを作成しておきます。その後、スタートメニューから “x64 Native Tools Command Prompt for VS2022” を起動して、コマンドプロンプトを開きます。
開いた後は、作成した build フォルダをカレントに設定しておきます。
そして、実行するコマンドは「cmake ..」です。
実行後、正常に終了すると bulid フォルダには vcxproj や sln ファイルが生成されます。
ビルドと実行
build フォルダに出来ている KickstartRT_Demo.sln ファイルを開きます。 以下の図では Visual Studio 2022 で開いている状態です。スタートアッププロジェクトとして KickstartRT_Demo プロジェクトが選ばれている状態です。
あとはいつも通りに、 メニューからソリューションのビルドを実行すれば、デモアプリケーションの生成が行われます。
正常に完了後は、 F5 もしくは メニューからデバッグの開始を選択してアプリケーションを起動します。起動するとリソースのロード分は待った後、以下のような画面が表示されます。ウィンドウタイトルに表示されている情報からは、 DirectX12 で動作しているようです。
その他、設定など
使用する API を切り替える
起動時の引数によって使用する API を切り替えるようになっていました。Visual Studio のプロジェクトプロパティを開いて、起動時のコマンド引数を設定することで変更可能です。
- DirectX11 : -dx11 もしくは -d3d11 を指定
- DirectX12 : -dx12 もしくは -d3d12 を指定
- Vulkan : -vk もしくは -vulkan を指定
DirectX11 を選択して起動してみたものが以下の通りです。細かい点では違うのかもしれませんが、一見同じように動いているようにみえました。
マテリアルを変える
マウスカーソルを当てて、右クリックすると対象オブジェクトのマテリアルを変更することができます。 Twitter でもんしょさんが床のマテリアル変更をしているのを見て同じように変更してみました。以下のように、床のマテリアルからテクスチャを外したり、ラフネスを 0 にして、鏡面反射な感じになりました。
まとめ
今回はプログラムをビルドして起動するところまでを紹介しました。実行したときの左側のパネルにはとても沢山の設定項目があり、色々と挙動の変化を確認することが簡単にできるようになっていました。
DirectX11 でも動作するという点が興味深いので、このあと引き続き KickstartRT SDK の動作の中身・仕組みを追いかけていきたいと思います。
コメント