今回はSamplerInfo(サンプラ情報)ノードを取り上げてみました。
Mayaの中では割とメジャーなノードの部類に入ると思うのですが、使い方が難しいとかよくわからないとかいう声も時々耳にします。
このSamplerInfoノードを一言で切って捨てると、「様々な情報を取得できるノード」でしょうか。
取得した情報をあの手この手でシェーディングに組み込み、求める質感などを作るのですが、
いろいろできるが故に、よく分からないということもあります。
もっとも、よく使うのは”Facing Ratio”くらいかな、とも思いますが。
なんて、偉そうなことを書いてますが、実は自分もすべてを理解しているわけではありません。
分からない所は”分かりません”と記載します。分かったときは更新したいと思います。
「Point WroldとPoint Obj」
Point World
ワールド空間での位置情報を取得できます。
Point Obj
オブジェクト空間での位置情報を取得できます
↑なんのこっちゃ。そもそも、ワールド空間とオブジェクト空間とは何ぞやというところから。
ワールド空間とはシーン全体の基準となる座標系で変わることはありません。グリッドの中心がワールド空間の原点になります。
オブジェクト座標系は、オブジェクトを中心とした座標系で原点はオブジェクトのピボット位置にあります。
(ローカル座標系と混同しがちですが、ローカル座標系は親ノードの原点を軸にした座標系なので別物です。このあたりソフトによっては呼び方が違うかもしれません)
このワールド座標とオブジェクト座標を取得できるのが、PointWorldとPointObjです。
サンプルとして、以下のようなシーンを作成してみました。
単位はcmです。
BGの如く配置されている四角は一辺が2cmの代物です。
真ん中の仏像の腰あたりがワールド座標の原点です。左右の仏像は真ん中のヤツのコピーです。
絵で確認できるように↓のようなマテリアルを割り当ててみました。
マテリアルはSurfaceShaderのoutColorにSamplerInfoノードのpointWorldをコネクトしたものです。
もう少し詳しく書くと、World座標のX座標を赤に、Y座標を緑に、Z座標を青にコネクトしたものです。
レンダリングするとこうなります↓
なんとなく、X軸に赤色、Y軸に緑色、Z軸に青色が対応しているのが分かるでしょうか?
座標値がそのまま、RGBの値として使われています。
黒くなっている部分は座標がマイナスの部分。
8bitの色値にはマイナス値はないので、0でクロップされて黒くなっています。
同様に、各座標で1以上の値も1にクロップされています。
0~1までの範囲は座標値がそのままグラデーションとして現れています。
これを使うことで、ワールド座標を色情報として取得できるようになります。
たとえば、Y座標のみコネクトし、あとのコネクトを外すとシーン内の高さ情報が色として取得できますね。
実際にシーンで使う際には、↑だとちょっと使えないので↓のように”SetRange”ノードを間に入れて、グラデーション幅をコントロールします。
ここではsamplerInfoノードのpointWorldをsetRangeノードのValueにコネクトし、Rangeを再設定した後、その結果をSurfaceShaderに出力しています。
初めの画像よりグラデーションが緩やかになったのが分かると思います。
↑の0~1までのグラデーション幅を-1~1までのグラデーションにしたものですね。
座標に関するものの場合、大体この形で出力することが多いのではと思います。
どの座標で出力するかの違いだけですね。
実際、pointWorldをカラーのグラデーションで出力することなどあまりないのですが、Nukeなどでコンポジットすると使い道があるのでは?(Nuke使ったことないですけど・・・)
samplerInfoノードのpointWorldのコネクションを、pontObjに変更してみるとどうなるでしょう?
こうなります↓
見やすいように背景にはLambertマテリアルを適応してあります。
(背景に色のグラデーションがあると、この場合目の錯覚がおこるので、このようにさせて貰いました)
仏像すべてが同じグラデーションなのが分かるかと思います。
先ほどのワールド座標ではなく、オブジェクト中心の座標で出力したので、このようにオブジェクトごとにグラデーションが作成されました。
これで、Point World 、Point Objについてなんとなくでも、分かった気になれていると、この後の理解も早いのではないでしょうか。
ちなみに、ここでは各座標の情報をRGBの色情報に変換していますが、これをそのまま数値として計算に使用する事も多いです。
長くなってしまいましたが、もう少しだけ進めたいと思います。
Point Camera と Normal Camera
PointCamera
カメラを中心とした座標系での位置情報を取得できます。
先の例では、ワールド座標と、オブジェクト座標でしたが、今度はカメラ座標ですね。
なんてことはない、カメラを中心に考えた座標系です。
これは実際に絵を見た方が分かりやすいのではないでしょうか。
下のレンダリング画像は、カメラ座標のX/Y/ZをRBGで出力したものです。
(なお、グラデーション幅はそれぞれSetRangeノードで調整したものです)
このうち、カメラ座標のXとYはあまり使うことはありませんが、Zだけはよく使います。
そうZ Depthを出力する場合につかうのが、この情報です。
以前、このブログでも取り上げたZ用マテリアルはこれを使って作られたものです。
Normal Camera
カメラからみた法線の向きを取得できます。
これは、これまでの座標系と違って単純に法線情報ですね。絵で見るとこんな感じ
注意したいのはCameraから見た法線情報ということ。カメラが変われば上の色は変わります。
さて、長くなってしまいましたが、ひとまず今回はここまでにしたいと思います。
続きはまた次回。
Mayaは2012の英語版を使用しています。
最新のバージョンとは異なる可能性がありますのであしからず。
コメント