2018-11-12

nvidia optix denoiser

ここでは、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 の時点で、このダウンロードがうまくいかないので、以下の要領で行なう。

  1. Windows 7 の場合、ダウンロードはここから行なう。
  2. ダウンロードした tar.gz ファイルを解凍する。解凍先はどこでも良い。
    • .tar.gz の解凍が Windows のツールで出来ない場合は、7-ZipCygwin などを使う。
    • Cygwin で tar を展開した後は、各種 .dso, .lib を実行可能 (chmod +x など) にしておく。
  3. ~/houdini17.0 以下の houdini.env に、
    HOUDINI_NVIDIA_OPTIX_DSO_PATH = <解凍先>\optixlibs-5.1-windows-x86_64
    と一行追加する。

2. Houdini の起動と動作確認

  1. Houdini 17.0 を起動し、何かシーンファイルを開く。
  2. Houdini メインウィンドウ左側のツールバーから、Render Region ボタンをクリック、レンダリングしたい領域をバウンディングボックス選択。
  3. この時にビューポート真上に表示される Render Region のオプションで、Denoise ボタンが有効可能になるのであれば、OptiX が正しくロードされていることになる。
  4. Denoise ボタンを押すと、以下のようなレンダリングが

    ほぼ一瞬でこうなる(はず)。

    こうなれば、間違いなく OptiX Denoiser が正しくインストールされている。
    グラフィックカードが古い場合 (Kepler 以前)、以下のようなエラーが表示される。
次に実際の設定を見ていく。

3. OptiX Denoiser の設定

実際の設定を紹介する上で、前に使ったシーンにもう一度ご登場いただく。ただし、当時の PC は今起動不能。よって演算時間は同じには測れない。

  1. /out 内に Mantra ノードを一つ作成。
  2. Rendering > Sampling タブ以下の Ray Variance Antialiasing をオフにする。残りをすべてデフォルトのままでレンダリングすれば、このページの #2 の画像と同じになる。
    今回の PC では 11分53秒
  3. OptiX Denoier を有効にするには、Images > Output タブの Pixel Filter のフィルタ設定でプルダウンから、NVIDIA OptiX Denoiser を選択する。
      すると設定が、
      denoise optix -a basecolor
      に変わる。これは、basecolor (つまりは Albedo を元にしたパス) フィルタをどのようにかけているかを示している。つまり、ノイズが乗り辛い基準となるパスを指定するのであって、フィルタをかけたいパスを指定するわけではない。
  4. Render to Disk でレンダリングする。
      OptiX (GPUベースのデノイザ) を有効にしたレンダリングをするには、Render View でレンダリングするのではなく、Render To Disk を使う方が、処理速度が速くなる (特にラップトップGPU のように高性能とはいえない GPU の場合)。
    レンダリング結果はこれ。

    こちらは 11分33秒。よって OptixX 自体はレンダリングに殆ど負荷をかけていないといえる。むしろフィルタを GPU でやった方が速い。
  5. 2つの画像を横に並べるとこんな感じ。

    ピクセルサンプルの数は変わらないにもかかわらず、明るいところでも暗いところでも粒々感が消えている。前のように、ピクセルサンプルの数を増加させる必要も無い。
  6. 主観次第と言えなくもないが、こちらのページで、1フレーム1時間近くかかっていたレンダリング精度、#8や #9 とほぼ同じ精度が、10分ちょっと出来るといえる。

4. OptiX Denoiser の設定 その2: 一から作る場合

ハードサーフェスにガラスのようなマテリアルを用意して、パス別のレンダリングを、Denoiser 有り・無しでレンダリングして、デノイザの効果をみる。

  1. 準備
    • ktaki_subdivobject.hda を ~/houdini17.0/otls 以下に配置する。
        このディレクトリが無い場合は作る。
  2. レンダリングオブジェクト作成
    1. SOP以下 (/obj) に Geometry ノード (geo1) を作成。
        H17 から File ノードができなくなった!
    2. geo1 内で TAB->Digital Assets ->SubDivObject を実行。
    3. 一つ上に上がり、Render タブで Render Polygons as Subdivision (Mantra) をオンにする。
  3. 背景オブジェクト作成
    1. Create シェルフの Box ツールを Ctrl キーを押しながらクリック。
        /obj/box_object1 が出来る。
    2. 出来た box_object1 の中に入り、box1 の Center Y を 0.5 とする。
    3. box1 の出力から Reverse ノードを作成、できた reverse1 に、表示およびレンダーフラグを設定。
    4. 一つ上に上がり、box_object1 の Uniform Scale を 10 などとする。
  4. カメラおよびライト作成
    1. ビューポートで自分の好みのビューにカメラの位置・角度を設定し、Lights and Cameras シェルフ (右側) の Camera ツールを Ctrl キーを押しながらクリック。
        /obj/cam1 というカメラが出来、これでレンダリング用カメラが固定される。
    2. cam1 の View タブで、Resolution をプルダウンから 1024 x 1024 に変更。
        画角変更後、cam1 を調整するには、cam1 選択し、ビューポート右側のツールバーの上から3番目のロックアイコンをオンにして、ビューを変更する。終わったら、ロックを解除するのを忘れない。
    3. ライトも同じ要領で作成する。ビューポートで自分の好みのビューを変更、同 Lights and Cameras シェルフの Spot Light ツールを Ctrl キーを押しながらクリック。
        /obj/spotlight1 というライトが出来る。出来たら、ビューポート右上で、表示カメラを cam1 に戻す。
  5. レンダリング設定
    1. Render View に行き、Render ボタンを押し、レンダリングを一度実行。
        これにより /out 以下に mantra_ipr というレンダリング設定ノードが一つ作成される。
    2. Material Palette から、Glass マテリアルを Render View 内の Subdiv オブジェクト上にドラッグ&ドロップ。
        これにより /mat 以下に glass というマテリアルが作成され、 /obj/geo1 の Render タブの Material に /mat/glass が設定される。
    3. mantra_ipr の Images タブ以下の Extra Image Planes タブに行き、
      1. Export Components を
        diffuse reflect coat refract volume sss
        から
        diffuse reflect refract
        に変更する (glass を使っている場合、coat, volume, sss は不要)。
      2. Direct Lighting (per-component) と Indirect Lighting (per-component) をオンにする。
      3. Extra Image Plane を 0 から 1 にし、VEX Variable に Base Color (basecolor) を設定。
      こうすることで、Render View で各パスのレンダリング結果が確認可能になる。
  6. 各パスは以下のようになる。
    • C パス
    • Indirect Reflect パス 影の部分にノイズが乗っているのがわかる
    • Indirect Refract パス 屈折部分にノイズが乗っているのがわかる
    • basecolor パス: OptiX がノイズを除去するために使用されているパス
  7. OptiX をオンにしてレンダリング (Images > Output タブの Pixel Filter のフィルタ設定でプルダウンから、NVIDIA OptiX Denoiser を選択) し、OptiX を使っていない状態と比較すると、それぞれの以下のようになる。
    • C パス
    • Indirect Reflect パス
    • Indirect Refract パス
    • C パス OptiX オン
こちらの例でも、サンプル数をあげて気の遠くなるほどレンダリング時間をかけなければノイズが消せなかったのが、数分で消えるようになる。

まとめ

  1. OptiX Denoiser を使うことで、従来よりはるかに低いサンプル設定で、高精度のレンダリング結果を得ることが出来る。上記の例では、1時間以上かかっていたレンダリング精度を10分強まで、約 1/6 に時間短縮にできた。
  2. Denoiser は、RenderView でレンダリングするより、直接ファイルに書き出す方が著しく計算時間が短くなる。
  3. レンダーパスを複数追加して、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 件のコメント:

コメントを投稿