volume normal

ボリュームからノーマル情報の出力

スモークなどのボリュームからノーマルマップなどを抽出する場合の方法を以下に示す。

基本的にボリュームは殆どの場合 (半) 透明であり、ピクセル単位で法線方向を抽出しようとすれば、レイに交差する情報がすべて加算されてしまう。それを回避する用に設定するのが今回の目的。

必要な Houdini バージョン: 14.0.296 以降 (このビルドよりvm_volumenormalが追加)
使用したバージョン: 14.0.345 (Windows)、14.0.360 (Linux)
シーンファイルへのリンクは一番下にあり。

1. 元シーンの作成

ここで設定するファイルは zip ファイル(上記) の volume_normal_setup.hip。一から作る場合は次の通り:

  1. 球を作成、Radius Y を 0.1 にし、 Pyro FX シェルフから Billowy Smoke を実行。
  2. カメラを追加、View タブの Resolution を1024 x 1024 (または必要な解像度)にする。
  3. Distant Light を追加。

2. 法線情報出力設定 (その1: ボリューム オブジェクト)

  1. /obj/pyro_import を選択。
  2. ギア アイコンをクリック、メニューから Edit Rendering Parameters... を実行。Edit Parameter Interface パネルが開く。
    1. Filter の部分に volume と入力、表示されるパラメータの数を限定する。
    2. root -> Mantra -> Geometry -> Computer Normals for Volumes (vm_volumenormal) をハイライト選択。
    3. 中央の矢印をクリックし、選択したパラメータを現在ノードに追加。
    4. Accept を押して確定、パネルを閉じる。
  3. 追加したパラメータは、Render タブ以下の Geometry タブの一番下に追加されている。これをオンにしておく。

3. 法線情報出力設定 (その2: ROP)

  1. Render -> Create Render Node -> Mantra PBR を実行。
  2. Images タブ以下の Extra Image Planes タブに行き、一番下の Extra Image Planes を 0 から 1 に変更する。
    • なお、プリセットとしてすでに存在する Shading Normal (N) はフィルタのタイプ (後述) を変更できないので使わない。
  3. 追加したイメージプレーンに N (normal) を設定する。
    • この Sample Filter を Opacity Filtering から Closest Surface に変更。

      Closest Surface にすることで、カメラに一番近い部分の法線が評価される。
    • これでレンダリングした画像はこちら (48 フレーム目 N チャネル)。

おまけ. アイソサーフェスとしてレンダリング

もう一つの方法としては、ボリュームを直接ボリュームとしてレンダリングするのではなく、アイソサーフェスとしてレンダリングすること。

  1. そのためには /obj/pyro_import を選択。
  2. ギア アイコンをクリック、メニューから Edit Rendering Parameters... を実行。Edit Parameter Interface パネルが開く。
    1. Filter の部分に iso と入力、表示されるパラメータの数を限定する。
    2. root -> Mantra -> Sampling -> Volume Isosurface (vm_volumeiso) をハイライト選択。
    3. 中央の矢印をクリックし、選択したパラメータを現在ノードに追加。
    4. Accept を押して確定、パネルを閉じる。
  3. 追加したパラメータは、Render タブ以下の Sampling タブの一番下に追加されている。これをオンにして再度レンダリングを実行。
  4. これでレンダリングした画像はこちら (48 フレーム目)。

最後までの設定を行ったファイルは zip (下記)の中の volume_normal_final.hip 。

まとめ

  • ボリュームのノーマル情報を出すには
    1. オブジェクトに Computer Normals for Volumes (vm_volumenormal) の追加
    2. ROP に 'N' のイメージプレーンを追加した上に、Sample Filter を Closest Surface への変更
    が必要。
    • イメージプレーンはプリセットから追加するのではなく数値で追加した上でフィルタを変更する。
  • ボリュームをアイソサーフェスとしてレンダリングするには Volume Isosurface (vm_volumeiso) の追加が必要。
  • (上には書いていないが)、レンダリング時の変更内容次第では、Preview と Auto Update ではなく再レンダーが必要な場合がある。
  • 続きはこちら

シーンファイル:

2 件のコメント:

  1. Great info thanks for sharing :)

    返信削除
    返信
    1. glad this is still of help (after all this was written with H14).

      削除