Light Pathエクスプレッション
Light Path Expressions
概要
RISでは、Built-in AOVsに加えて、 LPE(Open Shading LanguageのLight Path Expression)には、 ディスプレイチャンネルへ出力する光輸送経路を指定します。 つまり、LPEを使用したカスタムAOVを出力するのに、シェーダやプラグインを修正する必要がないということです。
そのセットアップは、AOVチャンネル名の代わりにLight Path Expressionを使用すること以外はAOVと同じです。 また、長いLPEエクスプレッション(例 lpe:CD<L.>)だけでなくショートネーム(例 lpe:diffuse)も使用することができます。
さらに、ライトのグループやlpegroupで設定したジオメトリによって、出力をグループ化することができます。
使い方
LPEは、アーティストには馴染みのないトークンで構成されています。このため、私達はショートネームでBuilt-in LPEのリストを用意し、アーティストには馴染みのないエクスプレッションを隠しています。
RenderMan for Maya
RfMでは、RenderMan ControlsのAdd Channels/Outputs内のBuilt-in LPEリストからLPE名を右クリックすることで、簡単にLPEを追加することができます。
RenderMan for Katana
RfKでは、LPEはPrmanOutputChannelDefineで指定します。 Built-in LPE名のリストに関しては、Built-in LPEsテーブルを参照してください。
RIB
DisplayChannelに関しては、ショートネーム(例 lpe:diffuse)またはエクスプレッション(例 lpe:CD<L.>)のどちらかを使用することができます。
DisplayChannel "color lpe:diffuse"
または
DisplayChannel "color lpe:CD<L.>"
Built-in LPEs
名前 | エクスプレッション |
---|---|
lpe:diffuse | lpe:CD<L.> |
lpe:specular | lpe:CS<L.> |
lpe:emission | lpe:CO |
lpe:indirectdiffuse | lpe:(C<RD>[DS]+<L.>)|(C<RD>[DS]*O) |
lpe:indirectspecular | lpe:(C<RS>[DS]+<L.>)|(C<RS>[DS]*O) |
lpe:subsurface | lpe:(C<TD>[DS]+<L.>)|(C<TD>[DS]*O) |
lpe:refraction | lpe:(C<T[S]>[DS]+<L.>)|(C<T[S]>[DS]*O) |
lpe:shadowcollector | lpe:shadows;C[<.D'collector'><.S'collector'>]<L.> |
lpe:reflectioncollector | lpe:C<RS'collector'>([DS]+<L.>)|([DS]*O) |
lpe:shadowcollectorは、lpegroup<risLPEs.html#lpegroup>を持つオブジェクトのシャドウを集めるコレクターです。
lpe:reflectionは、lpegroup<risLPEs.html#lpegroup>を持つオブジェクトの反射を集めるコレクターです。
これらのエクスプレッションは、どれも完全に要素が被っていません。 つまり、どの個々のライトのパスも、それらのエクスプレッションのどれかに必ず合致します。 その結果、それらのエクスプレッション9個すべてをレンダリングしてから、まとめて合成すると、ビューティー画像と同じ画像が生成されます。
コースティクスはBuilt-inリストに含まれていません。それはlpe:indirectdiffuseと被っているからです。 しかし、lpe:CD[S]+<L.>エクスプレッションを使うことでコースティクスを選択することができます。
LPE Outputs
Bigman 3DのTom Painter氏による豚のモデル
Custom LPE
RenderMan for Maya
カスタムLPEはRenderMan ControlsのAdd Channels/Outputsで追加することができます:
RenderMan for Katana
カスタムLPEはPrmanOutputChannelDefineのAdd Sourceで指定します:
LPE Macro
カスタムLPEが他のショットで役立つのであれば、rendermn.iniファイルにマクロを作成することで、あなた独自のLPEを追加することができます。 カスタムLPEは、Mayaを再起動した後にRenderMan for Maya LPEリストに表示されます。
For example:
/prman/lpe/macro/myDiffuse CD<L.>
Lの代わりにライトグループと互換性のある<L.>を使用することが重要であることを覚えておいてください。 そうしないとレンダラーは警告を出力します。
-
Note
lpe:接頭辞は、ファイルが解読された時に、マクロの名前に自動的に追加されます。
LPE Groups
LPEグループのlpegroupでは、LPEチャンネルに使用したいオブジェクトを指定することができます。
RenderMan for Maya
RfMでは、オブジェクトを選択してlpegroup RenderManアトリビュートを追加することでlpegroupを追加します。
RenderMan for Katana
RfKでは、PrmanObjectSettingsのattributes/identifier/lpegroupによってlpegroupを追加します。
RIB
Attribute "identifier" "string lpegroup" ["ground"] DisplayChannel "varying color plane2Shadow" "string source" ["color lpe:shadows;C<.[DS]'ground'><L.>"]
事前定義されたlpegroup
shadowcollectorまたはreflectioncollectorなどのBuilt-in LPEに関しては、"collector"と呼ばれる事前定義されたlpegroupを想定します。 そのため、シャドウや反射を集めたいオブジェクトに対しては、私達は、単にそのlpegroupの名前を"collector"にすることができます。 Specifying lpe:shadowcollectorを指定すると、それらのオブジェクトのシャドウを集めます。
Light Groups
デフォルトでは、LPEはシーンのすべてのライトに対する反応を取得します。 LPEを単一ライトまたはライトのセットによる寄与に制限するには、 各ライト上の__groupパラメータをグループと同じ名前に設定することで、各ライトをそのグループに割り当てます。 そして、LPEの内側にシングルクォートで名前を配置します。 例えば、fillという名前のライトのグループに対するディフューズの反応を取得するには、エクスプレッションとしてlpe:CD<L.'fill'>を使用します。
短いLPEの名前の場合、ライトのグループ名の前に'_'を付けて、末尾に配置します。長いエクスプレッションの場合、LPEの内側にシングルクォートでライトのグループの名前を配置します。
例えば、"key"という名前のライトのグループの場合:
LPEのショートネームを使用:
DisplayChannel "varying color lpe:diffuse_key"
LPEエクスプレッションを使用:
DisplayChannel "varying color lpe:CD<L.'key'>"
Per-Lobe LPEs:ローブ(分布領域)毎のLPE
Bxdfは、それぞれDとSに対して合算した複数のディフューズまたはスペキュラーのローブを持つことがあります。しかし、状況によっては、特定のローブを別々に出力したいことがあります。
例えば、いくつかのPxrLMマテリアルには、Clearcoatローブがあります。 通常では、これはSトークンで合算されます。 このローブをS2トークンへ送ると、LPEでS2を使用できるようになります。 最大4つのディフューズローブと8つのスペキュラーローブがLPEで使用することができます。 デフォルトでは、S1にはすべてのスペキュラーローブが含まれるため、ローブ毎のLPEにはS2のようなより高いトークンを使用してください。
Option "lpe" "string specular2" ["Clearcoat"] DisplayChannel "color lpe:CS2<L.>"
これにより、ややパフォーマンスに影響が出ますが、ローブを個別に確認するには望ましいことがあります。
LPE接頭辞
- unoccluded - 遮蔽されていない結果を返します。
- noclamp - クランプされていない結果を返します。
- nothruput - thruput(thruputとは、rayhitオブジェクトの累積アルベドのことです)を適用しません。
- shadows - 集められたシャドウを返します。
- holdout - LPE出力をビューティーチャンネルへ導くholdout LPE。
- overwrite - 累積結果を出力せず、上書きします。これを使用したサンプルとしては、蓄積結果が不要な箇所でのアルベド出力があります。
- noinfinitecheck - 無限チェックを行ないません。
LPEトークン
- C カメラ
- D ディフューズ
- S すべてのスペキュラー * S1 specular1 * S2 specular2 * ...
- D すべてのディフューズ * D1 diffuse1 * D2 diffuse2 * ...
- R 反射
- O 発光オブジェクト
- L ジオメトリックエリアライト
- T 透過(屈折/サブサーフェス)
- <>は<ScatteringType ScatteringEvent lpegroup>を指定します。
- Scattering types: L (ライト), T (透過), R (反射), O (発光オブジェクト)
- Scattering events: D (ディフューズ), S (スペキュラー)。
- lpegroup: これはオプションです。指定すると、そのLPEのみが、そのlpegroupに適用されます。
- () はグループ化用。
- [] は正規表現用。 []* は0以上を意味します。 []+ は1以上を意味します。
ユーザー定義のシグナル
- トークンUは、ユーザー定義のシグナルを指定します。Bxdfは、RixBXLobeWeightsクラスにより、ユーザー定義のシグナルを出力することができます。U1からU8までのトークンがあります。デフォルトでは、すべてのユーザー定義のシグナルはU1に設定されています。
- 複数のユーザー定義のシグナルがある場合、各シグナルを、rendermn.iniでの設定により、異なるトークンUに向けるようにしてください。これを行なわないと、同じトークンUに割り当てられたすべてのユーザー定義のシグナルが、お互いに上書きされます。
- U2は、インストールしたrendermn.iniでのアルベド出力に設定されます。
/prman/lpe/user2 Albedo
サンプル
- <L.>は、すべてのスキャッタリングイベントを使ったLight scattering typeを意味します。 light group AOVsに関しては、<L.>がL.の代わりに必要です。
- lpe:CD<L.> は、light scattering typeに対するディフューズスキャッタリングイベントを使ったカメラを意味します。
- lpe:COは、発光オブジェクトを使ったカメラを意味します(発光はライトを必要としないので、Lがありません)。