2018-12-23

houdini lpe

ここでは Houdini 17 に搭載された Light Pass Expression (LPE) について説明する。LPE は、OSL Light Pass Expressions を元にした正規表現による AOV 設定の一種で、これを使うことでより柔軟なレンダーパスをの作成が可能になる。

この記事は、Houdini Apprentice Advent Calendar 2018 の 12/22 の記事になりました :)

使用したビルド: Houdini 17.0.430

1. シーン構成

このシーンは、前景と背景のオブジェクト二つ、ライト3つとカメラで構成されている。

  • 前景: Pig head (testgeometry_pighead_object1)
      Houdini 付属のテストオブジェクト。fg とタグしてある。
  • 背景: cornellbox1
      立方体の正面を取り除いて法線を反転した HDA。入力で
      0: Cornellbox、
      1: 白黒タイルテクスチャ、
      2: Cornell Box+床カラーテクスチャ
      と切り替えることが可能。
      向かって左側が greenwall, 右側が redwall, 中央部分(天井と床含む) に centerwall とタグされている。
  • ライト1: key: 赤みがかった Directional Light。key とタグ
  • ライト2: fill: 緑がかった Directional Light。fill とタグ
  • ライト3: envlight: 青味がかった環境ライト。envl とタグ(lが付いていることに注意)
  • カメラ: レンダリング用カメラ
  • Mantra ROP: /out 以下にあるレンダリング設定ノード

2. LPE 設定

  1. エクスプレッションの設定
      LPE のエクスプレッションは Mantra ノードの Images > Extra Image Planes タブ以下で Extra Image Plane を追加、VEX Variable に記述することで可能。

      横の▽でプリセットの選択も出来る。
  2. タグの設定
    • 各オブジェクトに対するタグは LPE Tag で設定する。

      オブジェクトへのタグは各オブジェクトの Rendering > Shading タブ以下にあり、ライトのタグは Light タブ以下で設定できる。

3. LPE 実践

LPE に関する詳細は、Houdini のドキュメント、または OSL Light Pass Expressions を見たり、プリセットを一つずつやってみるのが良い。ここでは、いくつかの例を紹介する。
ここでは、時間の都合上、Pixel Sample は 1x1、Optix デノイザを使って、Render View でレンダリングした。
なお、VEX Variable に LPE を入力して様々なテストを行う場合には、Channel name に何か固定名 (例: test) を与えておくと、同じパス名が使われるので、RenderView で比較が易しくなる。

上記のようにChannel Name に test と与えると、Render View のパス名の部分(左端をクリックして表示) で、エクスプレッションを変更したとしても、常に test として表示される。

  • lpe:C'fg'.*

    fg のみ、ライト成分全部
  • lpe:C'fg'['key'] // よくありがちな間違い

    fg のみ、key ライト Diffuse のみ。反射成分が無い。
  • lpe:C'fg'.*['key']

    fg のみ、key ライト成分全部
  • lpe:C'fg'.*['fill']

    fg のみ、fill ライト成分全部
  • lpe:C'fg'.*['envl']

    fg のみ、環境ライト成分全部
testgeometry_pighead_object1 の中に入り、testgeometry_pighead1 の Add Shader をオフすにすると、すでにアサインされている /mat/gold のシェーダ設定が有効になる。この状態でレンダリングすると、Beauty パスは以下のようになる。
  • lpe:C'fg'G.*<L.'envl'>

    fg への環境ライトからの Glossy 成分
  • lpe:C'fg'G.*

    fg への全ライトからの Glossy 成分

LPE に関して

LPE に関する詳細を書き出すと、ここまで書いた時間の3倍以上の時間が必要になると思うが、LPE は、基本的には、レンダリング時の光線の軌跡を カメラ > ボリューム(オブジェクト) > サーフェス(オブジェクト) > ライト の順に辿って行くための正規表現。プリセットでは以下が用意されている。

LPEExpression
Beautylpe:C.*
Direct Diffuselpe:C<RD>L
Indirect Diffuselpe:C<RD>.+L
Direct Glossy Reflectionlpe:C<RG>L
Indirect Glossy Relfectionlpe:C<RG>.+L
Glossy Transmissionlpe:C<TG>.*
Visible Lightslpe:CL
Direct Emissionlpe:CO
Indirect Emissionlpe:C.+O
Direct Volumelpe:CVL
Indirect Volumelpe:CV.+L
BSDF labled 'coat'lpe:C<...'coat'>.*
BSDF labled 'sss'lpe:C<...'sss'>.*

シーンファイル

0 件のコメント:

コメントを投稿