常規
工具節點(續)
Set Range
Set Range節點將一段
範圍內的值,重新映射到另一段範圍內,然後輸出。
注意它和Clamp節點的區別,Clamp節點是專門針對顏色值的。
舉一個MAYA幫助中的小例子可以理解Set Range節點的作用。
建立一個nurbsSphere,然後指定一個Blinn材質。
生成一個Set Range節點。
我們下麵要做的是用nurbsSphere的X、Y、Z軸向的旋轉來
控製Blinn的ColorR、ColorG、ColorB。
換句話說,是將0——360這一範圍的值,重新映射到0——1這一範圍內。
打開Connection Editor,
將nurbsSphere的RotateX、RotateY、RotateZ、分別連接到Set Range節點的ValueX、ValueY、ValueZ上。
把Set Range.OutValue輸出到Blinn.Color上。然後設置Set Range節點的各項值如圖:
現在說明一下Set Range節點的各項參數:
Min和Max的值是我們所希望得到的,在這個例子裏是Min=0,Max=1;
而Old Min和Old Max代表原來範圍的值,在這裏是Old Min=0,Old Max=360。
Value可以理解為
輸入值的接口。
Set Range節點的
工作原理可以由如下公式來解釋:
OutValue = Min + (((Value-OldMin)/(OldMax-OldMin)) * (Max-Min))
現在,我們旋轉nurbsSphere,它的顏色就會根據旋轉的
方向和角度變化。
vectorProduct
vectorProduct節點允許一個矢量乘以另一個矢量或矩陣,它實際上就是一個
運算器。在
程序語言中經常用到這種運算。vectorProduct節點的主要部分的解釋如下:
Operation
No operation:將Input1的值不做處理,然後輸出;
Dot Product:這是缺省值。Input1和Input2做點乘運算。點乘運算的原理如以下公式:
假設有兩個矢量(a,b,c)和(d,e,f)
Dot Product = (a*d) + (b*e) + (c*f)
注意Dot Product的值是一個單一的值,這就意味著vectorProduct節點在輸出的時候,選擇OutputX、OutputY、OutputZ三個值中的任何一個都可以。
Cross Product:叉乘產生一個新的矢量,原理如下:
x = (b*f)-(c*e)
y = (c*d)-(a*f)
z = (a*e)-(b*d)
注意不要將它和Multiply Divide節點弄混了,Multiply Divide節點的原理是:
x = a*d, y=b*e, z=c*f
Vector Matrix Product:將Input1乘以矩陣生成一個新的矢量,公式如下:
Outvector = Input x Matrix
假設有一個Input矢量為(a,b,c)
和一個Input矩陣:
A B C D
E F G H
I J K L
M N O P
則:
x = (a*A) + (b*B) + (c*C)
y = (a*E) + (b*F) + (c*G)
z = (a*I) + (b*J) + (c*K)
Point Matrix Product的原理是:
Output = Input x Matrix
x = (a*A) + (b*B) + (c*C) + D
y = (a*E) + (b*F) + (c*G) + H
z = (a*I) + (b*J) + (c*K) + L
注意以上兩種算法都會忽略Input2。
Normalize Output:
缺省情況下是關閉的。當打開時,它生成的矢量值在-1到1的範圍之間。
在使用Point Matrix Product操作時,Normalize Output無效。
Matrix:
Matrix不出現在屬性麵板中,隻出現在Connection Editor中。
使用Matrix可以將場景中的對象從相機坐標空間轉換到世界坐標空間。
下麵用一些小例子來感受一下vectorProduct節點的作用:
Dot Product操作:
建立一個球體並指定Blinn材質。
創建一個directionalLight並將其Light Direction連接到vectorProduct節點的Input1;
建立一個SampleInfo節點並將其Normal Camera連接到vectorProduct節點的Input2;
vectorProduct節點的操作方式為Dot Product
將vectorProduct節點的Output值任意一個連接到Blinn.ColorR上。
結果如圖:
現在球體紅色的部分對應Blinn.ColorR的值就為Dot Product操作後產生的值,我這裏的ColorR=0.660。如果將vectorProduct節點的OutputX、OutputY、OutputZ分別連接到Blinn.ColorR、Blinn.ColorG、Blinn.ColorZ上。那麼由於OutputX、OutputY、OutputZ的值是相等的,都是0.660。所以Blinn.ColorR、Blinn.ColorG、Blinn.ColorZ都等於0.660。
Cross Product操作:
建立一個球體並指定Blinn材質;
建立一個SampleInfo節點;
建立一個Set Range節點。
將SampleInfo節點的Ray Direction連接到vectorProduct節點的Input1;
提取出物體表麵光線方向的信息。
將SampleInfo節點的Normal Camera連接到vectorProduct節點的Input2;
提取出物體表麵法線信息。
將vectorProduct節點的Output連接到Set Range節點的Value;
將Set Range節點的outValue連接到Blinn.Color。
設置操作方式為Cross Product
打開vectorProduct節點的Normalize Output,
這樣vectorProduct節點的Output值的範圍在-1到1之間。
因為顏色沒有負值,所有用Set Range節點來將vectorProduct節點的Output值限製在0——1之間。
Set Range節點的值按如下設置:
我們所要得到的是:
Min=0;Max=1
vectorProduct節點的Output值範圍是:
OldMin=-1,OldMax=1
渲染場景。
另:如果不是很清楚的話不要緊,先感覺一下這些操作所起的作用,慢慢做得多了,就理解了。有時間的話,我再做一些實用的例子,就象前麵的卡通材質一樣。