2008/08/01

Nullちゃんで、ライティングしてみた。

リアクション: 
Scene内に、ひとつもライティングが無い状態で、Nullのみでライティング。
やってみました。



Scene内には、オブジェクトは、SphereとNullとカメラのみです。
後は、Nullの位置を見るShaderを作ればOK。

というわけで、繋いで見ます。



普段は見慣れないノードがたくさん刺さってますね。
ワタクシも仕事では、一度も使った試しがありません。

やることは、サーフェイスの向きとライティングの向きの内積を出せば拡散反射になるということです。

まずは、二股に分かれている上の部分。

XSI_Model_Mapノードを使用して、オブジェクトのNormal情報をゲット。
XSI_Model_Mapノードは、0から1の範囲で、サーフェイスの表面の向きをRGB値として取得します。
上を向いている面なら、( 0.5, 1, 0.5 )を返します。
左を向いている面なら、( 0, 0.5, 0.5 )を返します。
このままだと、ベクトルの向きにはならないので、Vector_math_vectorノードを使って2倍して1引きます。
すると、範囲は-1から1の正しい向きの値が取得出来ます。
上なら、( 0, 1, 0 )
左なら、( -1, 0, 0 )です。

次に、下の部分。

Color2vectorノードのColor InputにNullのポジション情報をExpressionで繋ぎます。
このままだと、長さが1ではないベクトルが返ってくるので、Vector_math_vectorノードでNormalizeして1の長さにします。
これで、ライティングの向き情報が取得出来ました。

二つの情報が出揃ったので、Vector_math_scalarノードを使い、Dot Product(内積)を取得します。

このスカラー値こそが、世に名を轟かせているかの有名なLambertです。

特にこんなこと知らなくても、仕事出来ますし、意味ねーじゃんと思いますが
CGソフト作るってものすげー大変なんだなーって思いました。

いやいや、開発者には頭が上がりません。

0 件のコメント: