ここでは、Houdini 17 の新機能の一つである NVIDIA OptiX Denoiser を使ったデノイザ機能を紹介する。
使用したビルド: Houdini 17.0.393
0. システム要件
- Houdini 17
- Kepler アーキテクチャ以降の NVIDIA グラフィックカード
- Windows または Linux (OptiX は Mac OS 未対応)
1. ダウンロードと設定
NVIDIA OptiX Denoiser のダウンロードは、Houdini 17 のメインメニューの Render -> Download NVIDIA OptiX Denoiser から行なう。このメニューを実行し、 Houdini を再起動すればおしまい。ただし、Windows 7 では、2018-11-10 の時点で、このダウンロードがうまくいかないので、以下の要領で行なう。
- Windows 7 の場合、ダウンロードはここから行なう。
- ダウンロードした tar.gz ファイルを解凍する。解凍先はどこでも良い。
- ~/houdini17.0 以下の houdini.env に、
HOUDINI_NVIDIA_OPTIX_DSO_PATH = <解凍先>\optixlibs-5.1-windows-x86_64
と一行追加する。
2. Houdini の起動と動作確認
- Houdini 17.0 を起動し、何かシーンファイルを開く。
- Houdini メインウィンドウ左側のツールバーから、Render Region ボタンをクリック、レンダリングしたい領域をバウンディングボックス選択。
- この時にビューポート真上に表示される Render Region のオプションで、Denoise ボタンが有効可能になるのであれば、OptiX が正しくロードされていることになる。
- Denoise ボタンを押すと、以下のようなレンダリングが
ほぼ一瞬でこうなる(はず)。
こうなれば、間違いなく OptiX Denoiser が正しくインストールされている。
グラフィックカードが古い場合 (Kepler 以前)、以下のようなエラーが表示される。
3. OptiX Denoiser の設定
実際の設定を紹介する上で、前に使ったシーンにもう一度ご登場いただく。ただし、当時の PC は今起動不能。よって演算時間は同じには測れない。
- /out 内に Mantra ノードを一つ作成。
- Rendering > Sampling タブ以下の Ray Variance Antialiasing をオフにする。残りをすべてデフォルトのままでレンダリングすれば、このページの #2 の画像と同じになる。
今回の PC では 11分53秒 - OptiX Denoier を有効にするには、Images > Output タブの Pixel Filter のフィルタ設定でプルダウンから、NVIDIA OptiX Denoiser を選択する。
- すると設定が、
denoise optix -a basecolor
に変わる。これは、basecolor (つまりは Albedo を元にしたパス) フィルタをどのようにかけているかを示している。つまり、ノイズが乗り辛い基準となるパスを指定するのであって、フィルタをかけたいパスを指定するわけではない。 - Render to Disk でレンダリングする。
-
OptiX (GPUベースのデノイザ) を有効にしたレンダリングをするには、Render View でレンダリングするのではなく、Render To Disk を使う方が、処理速度が速くなる (特にラップトップGPU のように高性能とはいえない GPU の場合)。
こちらは 11分33秒。よって OptixX 自体はレンダリングに殆ど負荷をかけていないといえる。むしろフィルタを GPU でやった方が速い。 - 2つの画像を横に並べるとこんな感じ。
ピクセルサンプルの数は変わらないにもかかわらず、明るいところでも暗いところでも粒々感が消えている。前のように、ピクセルサンプルの数を増加させる必要も無い。
主観次第と言えなくもないが、こちらのページで、1フレーム1時間近くかかっていたレンダリング精度、#8や #9 とほぼ同じ精度が、10分ちょっと出来るといえる。
4. OptiX Denoiser の設定 その2: 一から作る場合
ハードサーフェスにガラスのようなマテリアルを用意して、パス別のレンダリングを、Denoiser 有り・無しでレンダリングして、デノイザの効果をみる。
- 準備
- ktaki_subdivobject.hda を ~/houdini17.0/otls 以下に配置する。
- このディレクトリが無い場合は作る。
- ktaki_subdivobject.hda を ~/houdini17.0/otls 以下に配置する。
- レンダリングオブジェクト作成
- SOP以下 (/obj) に Geometry ノード (geo1) を作成。
- H17 から File ノードができなくなった!
- geo1 内で TAB->Digital Assets ->SubDivObject を実行。
- 一つ上に上がり、Render タブで Render Polygons as Subdivision (Mantra) をオンにする。
- SOP以下 (/obj) に Geometry ノード (geo1) を作成。
- 背景オブジェクト作成
- Create シェルフの Box ツールを Ctrl キーを押しながらクリック。
- /obj/box_object1 が出来る。
- 出来た box_object1 の中に入り、box1 の Center Y を 0.5 とする。
- box1 の出力から Reverse ノードを作成、できた reverse1 に、表示およびレンダーフラグを設定。
- 一つ上に上がり、box_object1 の Uniform Scale を 10 などとする。
- Create シェルフの Box ツールを Ctrl キーを押しながらクリック。
- カメラおよびライト作成
- ビューポートで自分の好みのビューにカメラの位置・角度を設定し、Lights and Cameras シェルフ (右側) の Camera ツールを Ctrl キーを押しながらクリック。
- /obj/cam1 というカメラが出来、これでレンダリング用カメラが固定される。
- cam1 の View タブで、Resolution をプルダウンから 1024 x 1024 に変更。
- 画角変更後、cam1 を調整するには、cam1 選択し、ビューポート右側のツールバーの上から3番目のロックアイコンをオンにして、ビューを変更する。終わったら、ロックを解除するのを忘れない。
- ライトも同じ要領で作成する。ビューポートで自分の好みのビューを変更、同 Lights and Cameras シェルフの Spot Light ツールを Ctrl キーを押しながらクリック。
- /obj/spotlight1 というライトが出来る。出来たら、ビューポート右上で、表示カメラを cam1 に戻す。
- ビューポートで自分の好みのビューにカメラの位置・角度を設定し、Lights and Cameras シェルフ (右側) の Camera ツールを Ctrl キーを押しながらクリック。
- レンダリング設定
- Render View に行き、Render ボタンを押し、レンダリングを一度実行。
- これにより /out 以下に mantra_ipr というレンダリング設定ノードが一つ作成される。
- Material Palette から、Glass マテリアルを Render View 内の Subdiv オブジェクト上にドラッグ&ドロップ。
- これにより /mat 以下に glass というマテリアルが作成され、 /obj/geo1 の Render タブの Material に /mat/glass が設定される。
- mantra_ipr の Images タブ以下の Extra Image Planes タブに行き、
- Export Components を
diffuse reflect coat refract volume sss
から
diffuse reflect refract
に変更する (glass を使っている場合、coat, volume, sss は不要)。 - Direct Lighting (per-component) と Indirect Lighting (per-component) をオンにする。
- Extra Image Plane を 0 から 1 にし、VEX Variable に Base Color (basecolor) を設定。
- Export Components を
- Render View に行き、Render ボタンを押し、レンダリングを一度実行。
- 各パスは以下のようになる。
- OptiX をオンにしてレンダリング (Images > Output タブの Pixel Filter のフィルタ設定でプルダウンから、NVIDIA OptiX Denoiser を選択) し、OptiX を使っていない状態と比較すると、それぞれの以下のようになる。
まとめ
- OptiX Denoiser を使うことで、従来よりはるかに低いサンプル設定で、高精度のレンダリング結果を得ることが出来る。上記の例では、1時間以上かかっていたレンダリング精度を10分強まで、約 1/6 に時間短縮にできた。
- Denoiser は、RenderView でレンダリングするより、直接ファイルに書き出す方が著しく計算時間が短くなる。
- レンダーパスを複数追加して、RenderView でOptiX オンでレンダリングすると、レンダリングがパスの数に応じて遅くなる。直接ファイルに書き出した時には影響が殆ど無い。
- テスト環境: Lenovo P50
- Houdini 17.0.393
- Windows 7
- 8 Core Intel Xeon @ 2.80GHz
- 64GB RAM
- NVIDA Quadro M2000M
- NVIDIA OptiX Denoiser に関して: 英語 | 日本語
- Smoke シーンファイル (#3) 御提供: 小松泰様
- シーンファイル: h17_denoiser.zip 53KB (#4 のみ)
- 参考リンク: No More Retake (Houdini17:NVIDIA OptiX denoiser)
- その2
0 件のコメント:
コメントを投稿