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を追加することができます。

images/rfmlpe.png

RenderMan for Katana

RfKでは、LPEはPrmanOutputChannelDefineで指定します。 Built-in LPE名のリストに関しては、Built-in LPEsテーブルを参照してください。

images/rfklpe.png

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

images/outputs/lpeBeauty.png

Beauty

images/outputs/lpeDiffuse.png

Diffuse: lpe:diffuse

images/outputs/lpeSpecular.png

Specular: lpe:specular

images/outputs/lpeRefract.png

Refraction: lpe:refraction

images/outputs/lpeCaustics.png

Caustics: lpe:CD[S]+<L.>

images/outputs/lpeIndSpecular.png

Indirect Specular: lpe:indirectspecular

Bigman 3DのTom Painter氏による豚のモデル


Custom LPE

RenderMan for Maya

カスタムLPEはRenderMan ControlsのAdd Channels/Outputsで追加することができます:

images/rfmcustomlpe.png

RenderMan for Katana

カスタムLPEはPrmanOutputChannelDefineのAdd Sourceで指定します:

images/rfkcustomlpe.png

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は、それぞれDSに対して合算した複数のディフューズまたはスペキュラーのローブを持つことがあります。しかし、状況によっては、特定のローブを別々に出力したいことがあります。

例えば、いくつかの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がありません)。