2012年12月5日水曜日

MAYA トリッキーなShadingSwitch の使い方




図のようなシチュエーションから、pSphereがpPlane1に落とす影は現状のままクッキリとしてていいが、pPlane1がpPlane2に落とす影だけは柔らかく調整したい!といったケース。
いや、めったにない特殊なケースだという事は分かってますが・・・、同僚から相談されちゃいましたので考えてみました。

ちなみにライトを2種類作ってライトリンクでうんぬん・・とか、パスを分けてうんぬん・・・という以外で!という条件つき。めんどくさがりめっ。


まず、おもむろに出してみたのはShadingSwitchノード



このノードは、複数のオブジェクトで同じマテリアルを共用し、かつそれぞれに違ったテクスチャを割り当てたり出来る優れものです。

このノードにpPlaneのシェイプをつないでアレコレしてから、outputをディレクショナルライトのLight Angleへとつないでみます。

結果からいうと





出来た!
逆ももちろん この通り!





ではコネクト方法。

アトリビュート内容は下図の通りす。
こいつの In Shape に pPlane 2枚を追加したいわけですが、pPlaneを選んでAddSurfaceを押してみてもいっこうに追加されません。
このボタンを使う方法もあるのですが時間がかかるので、今回はコネクションエディター or ノードエディターで直接つないじゃいます。


pPlane(シェイプ) の instObjGroup[0] → singleShadingSwitch  input[#].inShape

プレーン2枚ともつなぎます。
でたでた。



つぎに、ディレクショナルライトのLight Angleに代入したい数字をそれぞれのIn Single に入れたいわけですが、これも直接入力できません。。
かわりに単色のrampを2つ作ってそれぞれをコネクションエディターでつなぎます。

ramp#.outColorR → singleShadingSwitch.input[#].inSingle

あとはrampの色でボケ具合を調整できます。

下の画像では分かりませんが、ramp1 = 0  ranmp2 = 30 の色を持たせています。
ですので pPlane2 にのみ LightAngle 30 のやわらかい影が落ちます。




ちなみにデプスマップシャドーのフィルターにコネクトしても同じような結果が得られますが、mental ray では動作しませんでした。。。(レイトレシャドーは mental ray でも動作確認済みデス)