ライティングワークフロー

ライティングワークフロー

PRManには、ライティングに対して細かい制御を行なうためのツールとメソッドがたくさん用意されています。

Separable Contribution(分離可能な寄与)

ライティングの寄与は、寄与させるローブ(分布領域)を基準に制限することができます。 その寄与は、glossycontribution(光沢寄与)、specularcontribution(スペキュラー寄与)、diffusecontribution(ディフューズ寄与) を使って、(カラー乗数として)光沢、ディフューズ、スペキュラーに対して別々に制御することができます。 これにより、他のスペキュラーマテリアルにはスペキュラー反射があるのに、別のマテリアルにはそのスペキュラー反射を持たないといったライトが可能になり、キャッチライトを追加することができます。 この制御は全体的に適用され、より細かい粒子レベルで微調整が必要であれば、ブロッカによって影響範囲を制御することができます。

左側の図は、すべての寄与、中央の図は、ディフューズだけの寄与、右側の図は、ディフューズを部分的に減衰させて、スペキュラー/光沢はそのままにしています。

full contribution diffuse only specular / glossy only

Blocker(ブロッカ), Gobo(ゴボ), Portal(ポータル)

Blocker(ブロッカ)は、ある領域内にライトの影響を制限します。この領域は、2つの指数とフォールオフ(blockershapeを使って指定)により超楕円として指定しています。 blockershapeを指定したポイントのx,yには2つの指数、zにはフォールオフを持ちます。

ブロッカは、blockerglossymultiplier,blockerdiffusemultiplier,blockerspecularmultiplierによって、ある領域内の光沢、スペキュラー、ディフューズの寄与を修正することができます。

ここでは、0のblockerdiffusemultiplierを持ったブロッカを使用しており、球形と丸みのある矩形形状を使用しています。 最終画像では、ブロッカを小さくして、そのフォールオフを大きくして、よりソフトな影響範囲を定義しています。

diffusemultiplier 0 for sphere diffusemultiplier 0 for rounded rectangle diffusemultiplier 0 for rounded rectangle with softer falloff

プラスのフォールオフ値は、影響範囲が超二次曲面の形状(ここでは丸みのある立方体)の内側を指定し、指定したフォールオフで0まで減衰します。 マイナスの値は、影響範囲がその形状の外側を指定し、そのフォールオフが超二次曲面内に適用されます。

以下の左側の球では、その周辺にディフューズに寄与するブロッカが設定されており、このブロッカは、(プラスのフォールオフを使用して)その形状内のディフューズ寄与をブロックしています。 右側の球では、マイナスのフォールオフを使用して、その意味を反転させています。

images/lighting/lightTypes_blockerInside0.jpg images/lighting/lightTypes_blockerInside1.jpg

ゴボは平面要素で、そこを通過するライトを調節します。 その空間は、goboパラメータに指定した行列で定義された空間でのXY平面で定義されます。 gobomapに指定するマップは、XY平面の-1、1空間で、ライトを乗法的に調整する場合に使用するマップを指定します。 その空間(gobo)とマップ(gobomap)の両方を指定しなければなりません。

images/lighting/lightTypes_gobo0.jpg

これは、部分的にゲル状になっている実際のライトの再現に使用されているゴボです。

特別なマップ名を認識させることができます。gobomap == ""は、-1,1の領域内のすべてのライトをブロックし、 gobomap == "!"は、-1,1の領域に入っていないライトすべてをブロックします。 名前が空白のマップ(gobomap == "")は、納屋のドアや石畳で役に立ちます:

images/lighting/lightTypes_gobo1.jpg

Shadowing(シャドウイング)

デフォルトのシャドウはブラックですが、shadowtintを使うことで微調整することができます。

images/lighting/lightTypes_shadowcol1.jpg images/lighting/lightTypes_shadowcol0.jpg

シャドウの不透明度/密度は、shadowdensityを使って変更することができます。

images/lighting/lightTypes_shadowcol1.jpg images/lighting/lightTypes_shadowdensity0.jpg

デフォルトのレイトレースシャドウは、すべての他のオブジェクトをシャドウキャスター(影を落とすオブジェクト)として見ます。 トレースサブセットを使用することにより、あるオブジェクトが影を落とさないようにすることができます。 これには、影を落とすことができるオブジェクトをオブジェクトメンバーシップグループとして指定したり、影を落とすべきでないオブジェクトグループのリストとして指定することができます。

The subsetパラメータは、影を落とすオブジェクトをリストし、excludesubsetは影を落としたくないオブジェクトをリストします。

ここでは、右側のボールは、"noshadow"グループメンバーシップになっています。2番目の画像では、exludesubsetが"noshadow"に設定されています。

images/lighting/lightTypes_shadowsubset0.jpg images/lighting/lightTypes_shadowsubset1.jpg

AOV

ライトは、__groupという名前に割り当てることができます。 これを使えば、Light Pathエクスプレッションによって、そのグループから起因した光沢、スペキュラー、ディフューズのAOVを抽出することができます。

Arbitrary Geometry

images/lighting/lightTypes_arbitrarygeo.jpg

ライトをカメラに可視化させることができます - その場合、指定したBxdfは、シーン内のすべてのライトからライトを集めます(指定がない限りは、そのライト自体を含みます - 以下参照)。 emissionbiasアトリビュートを使えば、ライトの放射とサーフェス間に小さいオフセットを与えることができるので、ノイズの削減に役に立ちます。

Light Linking

特定のオブジェクトに関係するライトは、2つの方法で制御することができます:

  • Illuminate
  • lighting subsetアトリビュートとlighting excludesubsetアトリビュート

Illuminateは、その従来の意味と同様に機能し、特定のオブジェクトに対して指定ライトを無効にすることができます。

少し相違点がいくつかあります。従来では、ライトは"オブジェクトを照明する"時にonですが、現在のアトリビュートのスコープが終了すると、そのライトの有効性は"popped(無効)"になります。 ジオメトリックエリアライトでは、これをしません。 デフォルトではグローバルにオンです - つまり、たとえライトの前にオブジェクトを宣言していても、ライトはシーン内のすべてのオブジェクトを照らします。 その代わりにIlluminate 0がトラックされます - アトリビュートのスコープが終了すると、これを"無効"つまり"popped"にします。

ここでは3つのライトがあり、2番目の画像では、中央の球がUses Illuminateの設定になっており、緑のライトが球に寄与しないようになっています。

images/lighting/lightTypes_illuminate0.jpg images/lighting/lightTypes_illuminate1.jpg

尚、地面に対して照明を指定していないので、その地面はすべての3つのライトで照明されたままになっています。

さらに、新しいアトリビュートが2つあります:

  • アトリビュート"lighting" "string subset" "subsetspecifier"
  • アトリビュート"lighting" "string excludesubset" "subsetspecifier"

ライトは、通常のメンバーシップグループ(アトリビュート"grouping" "string membership" "specifier")を使ってグループ化することができます。 ライトは、そのような複数のグループのメンバーにすることができます。このグループを使えば、トレースサブセットを制御することができます。 ライトの完全なセットは、アトリビュート"lighting" "string subset" "subsetspecifier"の仕組みを使ってリクエストすることができます。 これを設定すれば、リクエストしたグループに合致したライトのみが考慮されます。 反対に、アトリビュート"lighting""string excludesubset" "subsetspecifier"は、指定したオブジェクトに対して(サブセットに合致したとしても)ライトのセットを無効にすることができます。

アトリビュートベースの手法により、多数の個別のライトを一度に制御できるようになり、この手法は、多数のライトのある環境ライティングに、よりふさわしいといえるでしょう。 ライト毎の明確な制御は、キーライトに向いています。

上記の例で、ライトに"red", "green" "blue"のグループがあると想像してみてください。 Illuminateと同じ効果は、greenexcludesubsetとして使用するか、または"red,blue"をsubsetとして使用することで実現することができます。