はじめに
NVIDIA が公開した Falcor Real-Time Rendering Framework で遊んでみました。Denoising 1spp Path Tracing, Foveated Rendering など、技術研究プロジェクトで使われたフレームワークです。DirectX12 / Vulkan に対して薄い抽象化レイヤを提供しています。オープンソースで、実験的な機能をさくさくとRAD 実装するのに使えると思い、触ってみました。今回は、フレームワークのビルドとサンプルを起動するまでの、導入メモです。
図 HDR のテスト
特徴
- 物理ベースのシェーディングシステム
- DirectX12 と Vulkan の薄い抽象化レイヤ
- 現代的グラフィクス技術のモジュール化されたライブラリ
- OpenVR を使ったステレオレンダリング
- カメラ、光源、メッシュのパスアニメーション
- ビデオキャプチャ
- FBX, OBJ などを含む一般的な3D アセットファイルフォーマット対応
- シーンエディタで各種オブジェクトのオーサリング可能
Ray Tracing など、CUDA を使う機能は、そのままでは使えないかもしれません。
Radeon Ray か、Embree か、OpenCL に置き換える、というライフワークが生まれますw
今回の動作環境
Visual Studio 2015, Windows 10 SDK 10.0.15063.0 です。Microsoft New Surface Pro Core-i7, 16GB RAM, Iris Plus です。
step 1. GitHub から ソースコード入手
https://github.com/NVIDIAGameWorks/Falcorstep 2. Falcor とサンプルのビルド
2.1. README を参照します。
Visual Studio 2015, Windows 10 SDK 10.0.14393.795こちらの環境は、10.0.15063.0 です。
各自の環境に合わせて、プロジェクトのSDK 設定を変更してください。
2.2. Falcor.lib ビルドに必要な外部ライブラリをダウンロードします。
update_dependencies.bat を実行します。Assimp など。
2.3. Falcor.sln を Visual Studio 2015 で開きます。
Falcor プロジェクトを選択して、右クリックメニューを表示して、プロジェクトのみをビルドで、ビルドします。(ビルド時間を最小限にして、Falcor ライブラリについてのエラーや警告だけに集中するためです。)ビルドで、Warning (うぉーにんぐ)C4819 が出力されて、ビルドエラーになる場合は、警告C4819 を無効に設定します。
https://msdn.microsoft.com/ja-jp/library/ms173715.aspx
step 3. サンプル ModelViewer の起動
Visual Studio で、スタートアッププロジェクトを、ModelViewer に設定します。ModelViewer プロジェクトのみをビルドします。
起動します。
ImGui で作られたメニューから、LoadModel ボタンが見つかると思います。
サンプルのモデルを読み込みます。場所は、
Falcor > Media
で、teapot.obj を選択します。
Falcor は、モデルデータの読み書きにAssimp を使っているので、obj や FBX に対応しています。
Window サイズを変更する
4K ディスプレイなどで、Window 設定を変更したい場合があります。ModelViewer.cpp, line 392 付近に下記ウインドウサイズを指定します。
int WINAPI WinMain(_In_ HINSTANCE hInstance, _In_opt_ HINSTANCE hPrevInstance, _In_ LPSTR lpCmdLine, _In_ int nShowCmd)
{
ModelViewer modelViewer;
SampleConfig config;
// ウインドウサイズ指定
config.windowDesc.width = 1920;
config.windowDesc.height = 1080;
config.windowDesc.title = "Falcor Model Viewer";
config.windowDesc.resizableWindow = true;
modelViewer.run(config);
}
step 4. その他のサンプル
Normal map Filtering, Hashed Alpha など技術的なサンプルも含まれているところが、他のOSS フレームワークとは異なる特徴です。おわりに
RAD で、試験的な機能を作れるフレームワークがあると、何かと便利です。
いくつか、paper の手法を組み込んだりして、遊んでみようかと思います。
コメント
コメントを投稿