IFD

2017/8/17: Houdini 16.0 用に内容更新。更新部分は太字

Houdini で作成したシーンをレンダリングする場合、Houdini のシーンファイルである .hip ファイルをそのままレンダリングするよりも連番の .ifd に書くと効率の良いレンダリングが可能になる。

例えば 240 フレームの Pyro のシミュレーションがあり、これを.hip のままレンダリングすると、基本的には、一台のコンピュータで 1フレーム目から 240フレーム目まで順番にシミュレーションとレンダリングを実行していくこととなるが、最初に連番の ifd として出力すれば、その時点で各フレームのシミュレーション結果が各ファイルに書き込まれ、レンダリングのみを複数のPCを使って並列的にレンダリングが可能。240台 PCがあれば、それぞれに1フレーム分を渡すことが可能。

IFD は、instantaneous frame description の略で、フレーム単位でのシーンの状況を記述し、レンダラーに渡すためのファイルフォーマット。

$ mantra test.ifd test.exr
とすれば、test.ifd のシーンの様子が test.exr という画像として出力される。

$ mantra -i test.ifd
または
$ mantra test.ifd ip
とすると、レンダリング結果が Mplay (画像ビューア) に直接出力される。

ここでは、IFDファイルの出力方法とそのサイズの最適化について紹介したい。

使用した Houdini のバージョン: Houdini 16.0.671 14.0.247

1. 元シーンファイルの作成

  1. Torus を作成。
  2. 作成したTorus を選択したまま、Pyro FX シェルフから Explosion をクリック。これにより、Pyro FX が Torus に追加された。再生ボタンを押せば Pyro の様子がわかる。
  3. Lights and Cameras シェルフから Camera ボタンを Ctrl キーを押しながらクリックしカメラを追加。
    Ctrlキーを押すことで、現在のビューを元にしたレンダリング用カメラが出来る。このカメラ名 (/obj/cam1) は次で作る Mantra レンダーノードのデフォルトのカメラ名となるので、重要かつそのままが良い。
  4. メインメニューの Render->Create Render Node->Mantra - PBR を実行。/out/mantra1 が出来る。IFD ファイルの出力はこのノードから行う。
    • Pyro などボリュームデータを扱う時は、Mantra ノードの Rendering > Sampling タブで、Ray Variance Antialiasing をオフにする。Pyro にボリュームライトを追加した場合、100フレーム目、1280x720解像度で4分かかったレンダリングが1分で終了。画質は見た目にはまったく変わらない。ヘッドライトしかない場合にはレンダリング速度はあまり変わらないが、それでも RVAAをオフにした方が速い。
    • Stochastic Sampling はオンのまま。
  5. シーンファイルの保存。
    シーンファイルを、例えば、pyro_test.hip 等としてあるディレクトリ内に保存。これによって環境変数 HIP の値が保存したディレクトリになる。この値は、$HIPとして参照可能で、これを元に他のファイルを出力先を指定可能で、どこかわかり易いディレクトリに保存するのが良い。

2. IFD の書き出し

  1. IFD を書き出すためには、/out/mantra1 の Driver タブの Disk File をオンにする。
    デフォルトでは、出力ファイル名は $HIP/mantra.ifd となっていて、現在のフレームを単一ファイルとして IFD に出力するための設定。
  2. 連番で出すには、例えば、
    $HIP/ifds/test.$F3.ifd
    などとする。
    こうすると、pyro_test.hip のあるディレクトリに ifds という名のサブディレクトリが作成され、その中にifd ファイルが三桁 ($F3)の連番で出力される。
  3. 一番上の Valid Frame Range を Render Frame Range にする。
    そうすると 最初のフレームと最後のフレームが240フレーム(またはシーンで設定された最初と最後のフレーム) となる。
  4. この状態で Render ボタンをクリックすれば、画像の代わりに IFD ファイルが出力される。
  5. Houdini 16 より、Save inline geometry、Shared temp storage, Local temp storage の3つのオプションが追加された。
    • Save inline geometry はデフォルトでオフ。オンにしない限り、IFD のシーンの概要記述部分とジオメトリ記述部分を別ファイルに分け、ジオメトリ部分は、Shared temp storage で指定されたディレクトリに別ファイルで書くようになった。
    • Save inline geometry オンにすれば今までどおり IFD の中にジオメトリ情報も記述され、IFD ファイルが非常に巨大になる(ことが多い)。
      • 回避策は以下の通りキャッシュで出力し、Packed Primitivesとして読み込み、Save inline geometry をオンにする。

3. Pyro をキャッシュ出力

Pyro シミュレーションをキャッシュとして出力する。

  1. /obj/pyro_import/import_pyrofields ノードに行く。
  2. Geometry File の値が、デフォルトでは、
    $HIP/geo/$HIPNAME.$OS.$F.bgeo.sc
    となっているが、
    $HIP/geo/$HIPNAME.$OS.$F3.bgeo.sc
    と$Fの後に3を追加して桁数をそろえるようにした方が良い。
  3. Export to File タブで Render ボタンをクリックしファイルを出力。

    この書き出しは IFD の書き出しに比べると一瞬で終わる。240フレームの geo ファイルは 2.5GBになる。
  4. 書き終わったら Load From Disk をオンにする。
    こうすることで、Houdini はシミュレーションする (import from DOP) のでなく、geo ファイルを読むだけになる。
  5. キャッシュを読み込んだ (#4の) 状態で、Save inline geometry をオフのまま (デフォルト) で IFD の書き出しをもう一度行うと、Shared temp storage の中にジオメトリがもう一セット作られる。これではキャッシュに書き出した意味がない。
  6. IFD がキャッシュファイルを参照するためするには、import_pyrofields の Load From File タブで、Load を "All Geometry" から "Packed Disk Primitive" に変更し、Mantra ノードで Save inline geometry をオンにする。

    Packed Disk Primitive に変更後、IFD を再度書き出すと IFD の中でキャッシュファイルが参照され Shared temp storage にはジオメトリが書かれなくなる。

まとめ

  • IFD の出力は mantra ノードから行う。
  • IFD がキャッシュファイルを参照するようにするには、キャッシュ読み込みの設定を Packed Disk Primitive にし、Save inline geometry をオンにする。
  • Save Binary Geometry をオフにすると、IFD は ASCIIで書き出される。
  • Mantra でSave inline geometry をすべてのオブジェクトに対して行うのではなく、個別に行いたい場合は、それぞれのオブジェクトノード (例: /obj/pyro_import) で、ギアアイコン-> Edit Render Parameters... で Edit Parameter Interface を開き、左下のフィルタで inline を検索、右矢印をクリックして、パラメータとして追加、Accept で閉じる。すると Driver タブに Save inline geometry (vm_inlinestorage) が追加される。
  • Shared temp storage や Local temp storage に出力されたジオメトリファイルを自動的に削除する方法はない。
  • IFD Workflow Basics by Chris Rydalch

0 件のコメント:

コメントを投稿