On this page |
概要 ¶
レンダラーは、カメラから光源までのライトパス(光経路)を追跡します。 ライトパス(光経路)とは、光がシーンに当たる度に発生した一連の“散乱イベント”のことです。例えば、カメラからのライトパス(C)、ボリュームに作用したライトパス(V)、ディフューズシェーディングサーフェスに作用したライトパス(D)、ライトに到着したライトパス(L)があります。
ライトパスエクスプレッション (LPE)は、散乱イベントに基づいた特定のライトパス(またはパスセット)を記述した、いわば 正規表現 です。 この正規表現を使用することで、出力に寄与させるパスの種類を“選択”することができます。これによって、コンポジット用に特定の出力部分のみを抽出することができるので、カスタムシェーダを記述したり、その部分を別パスでレンダリングするといったことが不要になります。
Mantraによるライトパスエクスプレッションの実装は、オープンシェーディング言語の仕様に基づいており、ほとんどの機能とインターフェースを共有しています。
詳細は、OSLのライトパスエクスプレッションのドキュメントを参照してください。 とはいえ、Mantraの実装での違いにも注意してください。
LPE言語 ¶
イベントタイプ ¶
以下の文字は、特定のタイプのイベント、 または 、散乱タイプやカスタムタグ(以下参照)に合致します。
マッチングから特定のタイプを排除したい場合は、<>
山括弧を使用します(以下のワイルドカードを参照)。
|
Camera |
|
Surface Reflection |
|
Surface Transmission |
|
Volume |
|
Light |
|
Emissive Object |
|
Background (Karmaでのみ対応しており、Mantraでは対応していません) |
散乱タイプ ¶
|
Diffuse Scatter |
|
Glossy Scatter |
ワイルドカード ¶
|
どのイベントにも 合致します。 |
|
直前イベント以降の 0個以上の イベントに合致します。例えば、
|
|
直前イベント以降の 1個以上の イベントに合致します。例えば、
|
カスタムタグ ¶
|
LPE Tag レンダープロパティでカスタムラベルを使えば、オブジェクトやライトに“タグ”を付けることができます。 ライトパスエクスプレッション内にタグを使用することで、そのタグのオブジェクトの作用を参照することができます。 例えば、壁に LPE Tag プロパティを追加し、そのテキストを G[GD]+'leftwall'L (
Tip 他にもProperties VOPを使用することで、マテリアル内にカスタムラベルを割り当てることもできます。 しかし、シェーディングしたオブジェクト自体にも LPE Tag プロパティがあれば、そのプロパティがマテリアルのプロパティを上書きします。 |
グループ化 ¶
|
山括弧内の すべて のイベントタイプに合致します。例えば、 |
|
大括弧内の どれか のイベントタイプに合致します。例えば、 |
|
頭にキャレット( |
完全表現したイベント ¶
<event_typescatter_type['tag'['bsdf_label']]>
C
を使ってカメラ作用に合致させたり、D
を使ってDiffuse散乱作用に合致させる時、このコードが実際の 完全表現したイベント の省略表記です。ここでは、イベントタイプ と オプションで散乱タイプ と オプションでタグを指定しています。
例えば、R
だけならサーフェスからのすべての反射(DiffuseまたはGlossy)に合致します。
D
だけなら(オブジェクト/サーフェスのタイプに関係なく)すべてのDiffuse散乱イベントに合致します。
<RD>
だけならサーフェスからのDiffuse反射に合致します。
つまり、CRL
は、どの反射タイプ(DiffuseまたはGlossy)も含む直接照明を表現します。
CGL
は、グロス成分(反射または屈折)を含む直接照明を表現します。
反射 と グロスの 両方 を含んだ直接照明に合致させたい場合は、C<RG>L
を使用します。
この完全表現したイベントには、任意でカスタムタグを含めることができます。
指定したタグは、作用させるオブジェクトに付けてください。
例えば、<C.'fill'>
は、fill
タグの付いたオブジェクトに対するカメラ光線の作用にのみ合致します。
<RD'wall'>
は、wall
タグの付いたオブジェクトに対するディフューズサーフェス反射のみに合致します。
BSDFラベルは、カスタムタグに追従するオプションの表現です。
このラベルを使用することで、BSDFから同じ範囲のイベントカテゴリ内にある寄与度をラベル別で分離させることができます。
BSDFラベルを省略表記で使用できないことに注意してください。例えば、C<...'coat'>L
は使用できますが、C'coat'L
は使用 できません 。
ライトパスエクスプレッションの使い方 ¶
To... | Do this |
---|---|
画像平面内のLPEに合致した寄与度を分離させる |
Note シャドウのないライティング寄与度は、エクスプレッションの頭に Note Light Path Expression AOVsは、Mantra ROP内の Export Components (vm_exportcomponents)にリストされているラベルのBSDFから直接照明寄与度のみを累積します。 事前定義されていないラベルを持ったカスタムBSDFsを使用している場合、このリストにそれらのラベルを追加してください。 |
サンプル ¶
ビューティー |
|
間接Diffuse |
|
'coat'というラベルのBSDFからの直接バウンスと間接バウンス |
|
'sss'というラベルのBSDFからの直接サブサーフェススキャタリング |
|
発光と可視エリアライト: |
|
“apple”というタグが付いたライト(s)からのすべての寄与度 |
|
シャドウのない直接diffuse |
|
OSLとの比較 ¶
OSLのライトパスエクスプレッションのドキュメントには、詳細な説明とサンプルがあります。
OSLの実装と比較すると、Mantraは以下の機能に対応していません:
-
B
(Background:背景)イベントタイプがありません。 -
S
(Singular:特異)またはs
(straight)の散乱タイプがありません。すべてのスペキュラー散乱タイプは、MantraではG
(Glossy)として定義されています。
さらに:
-
Mantraは、2つの異なる形式のカスタムラベルを使用します: ライトやオブジェクトに割り当て可能なLPE Tag、そして、BSDFラベル(OSLのクロージャラベルと等価)です。
制限事項 ¶
-
MantraのBeauty平面は、カメラ光線の発光(
Ce
)に対して完全不透明なフィルタリングを使用しますが、可視発光(例えば、lpe:CO
)を定義したライトパスエクスプレッションは、スクリーンドア(網戸)フィルタリングを使用するので、発光マテリアルが部分的に不透明であれば、ノイズ品質に違いが出てしまう可能性があります。 -
間接バウンス光線が部分的に不透明な発光マテリアルに当たっても、カスタムラベルを使って寄与度を分離させることができません(例えば、発光マテリアルを割り当てたオブジェクトに
foo
というLPEタグがあれば、lpe:CR<O.'foo'>
といったエクスプレッションの使用は、そのマテリアルが完全不透明な場合には良いですが、そのマテリアルが完全不透明でない場合には予期しない結果を招いてしまう可能性があります)。 -
“Translucent(半透明)”モデルに対するPBR Diffuse寄与度は、透過ではなくて、反射として分類されます。