這個文件包括一個椅子模型和一個用於削弱深度陰影貼圖效果的材質網絡,在聚光燈上名為dmapSoftShadow。
在 Hypershade 窗口的頂部,到燈光條,圖表叫做dmapSoftShadow聚光燈網絡。With LMB, select the light called dmapSoftShadow. 擊鼠標左鍵,選擇名為dmapSoftShadow.的燈光,Click on the Show Upstream Connections button
點擊Show Upstream Connections顯示上遊連接按鈕,For more space in Hypershade, turn off the top section using the Show Bottom Tabs Only button。要在Hypershade窗口裏得到更多的空間,用Show Bottom Tabs Only按鈕關閉頂部的部分。在這個著色方式網絡裏的思想是從陰影的最近點到陰影的最遠點去柔化和淡化陰影。這個效果通過使用三個定位器完成的,一個燈光信息節點,和一些數學節點去驅動兩個RAMP紋理去修改陰影的 Filter Size 過濾器尺寸和 Color顏色屬性。
一個定位器是一個在世界坐標空間裏標記的一個位置。它看起來象在每個主要的軸向上(X,Y,Z軸)的線的延伸的一個小的指時針。第一個定位器是定位在與聚光燈同樣的位置。它實際上是聚光燈的點約束。其它兩個定位器是定位在地麵上在落下陰影的開始和結束的大約位置。注意:那些地麵上的定位器的位置能稍後時被調整去配合陰影衰減的散開。
這三個定位器是連接到Distance Between節點上。那些節點計算點聚光燈的定位器和地麵上每個定位器之間的距離。
[page]
輸出被通過從每個Distance Between 節點叫做Distance。這是在3D空間裏兩點間的實際距離。用在3D裏用這個特別的節點(Distance Between)是比用幾個功能節點去尋找距離要容易。Distance Between節點執行下麵的計算:(x1,y1,z1)和 (x2,y2,z2)是第一個定位器和第二個定位器各自的位置。注意:創建一個Distance Between節點,你需要用MEL命令:createNode distanceBetween; 節點不會出現在Hypershade窗裏。打開Hypershade或Outliner並用中鍵拖拽新節點在Hypershade工作區去加入到你的網絡裏。
下一步,那兩個距離(在聚光燈和地麵上的每個定位器間的距離)是傳遞給一個plusMinusAverage功能節點。在這個節點上操作設置為減操作。通過第二個距離(燈到結束陰影點)減去第一個距離(燈到開始陰影點),你得到定位器間從光源處有多遠距離。 注意:另一個節點間的距離也能被plusMinusAverage節點所替代。
從燈光處到在地麵上的定位器間多遠的距離,能被用於決定兩個漸變紋理節點,如何影響深度貼圖陰影的Filter Size和 Shadow Color的外觀。接下來的步驟包括必需的計算,來得到數值去驅動那些RAMP節點。
[page]
同樣的方法減操作是用於去尋找光源到在地麵的開始陰影處和結束陰影處定位器之間的距離,另一個plusMinusAverage節點是用於尋找從燈光到開始陰影定位器的Sample Distance。因為方便,這個差異值叫做sample point difference采樣點差異。
在這點上,在上一步發現的差異值能用於修改陰影,因為你現在有一個方法去知道每個著色點是從光源相對於從光源到開始陰影定位器的有多遠的距離。
換句話說,如果距離是很短,那麼被著色點是靠近開始陰影定位器。如果差異是大的,那麼被著色點是離開始陰影定位器很遠。
然而,這個采樣點的不同值能是任何值從非常小到非常大的數字。如此一個無限製範圍的數字將不會工作的很好當通過一個工作在0-1數值範圍的RAMP節點。要解決這個,一個小的數學計算是必需的,它將十進位的數值轉換成為0-1的數值。
回到第五部分,total difference 是指在光源到開始陰影點的多遠距離和光源到結束陰影點的多遠距離之間的差異值。
使用一個Multiply Divide節點,這個概念是獲得采樣點差異值並算出表現的總計差異值為多少。這和尋找一個百分比相象。
最簡單的做這個的方法是用總計的差異值去除采樣點的差異值。結果將在0-1之間的十進製的數值,因為任何被采樣點都是在兩個地麵的定位器之間。換句話說,當一個點是在地麵上的兩個定位器的中間時,將它的采樣點差值除以總差值將得到數值0.5。注意:這個轉換數值到0-1之間的過程叫做規格式數值。
注意:任何被著色點是靠近光源比靠近開始陰影定位器要近一些或遠離光源比遠離結束陰影定位器要遠一些,將返回的數值在0-1範圍之外。這是好的,因為任何0-1範圍之外數值將在著色網絡裏的下一個叫做CLAMP節點所校正。因為這個原因,在地麵上定位器的位置不用嚴格地在陰影的開始和結束範圍裏。事實上,你能移動它們更近或更遠來分別地幫助你調整陰影的視覺效果。
CLAMP節點將正確地,你會直觀地期待,它取得輸入點的值並被限製它們在一個特別的輸出範圍裏。在這個例子裏,從Multiply Divide節點的輸出值將通過CLAMP節點,傳遞給RAMP節點的vCoordinate屬性。
在CLAMP節點裏的Min和Max屬性分別設置為0和1。這意為任何從Multiply Divide節點過來的值將在0-1之間,它在連接到RAMP節點時保持不變;當到RAMP節點時任何負數將被改為0,任何超過1的數將被改為1。
注意:在CLAMP節點裏隻在X通道是被使用,因為從Multiply Divide節點傳過來的的距離數值是一個單一的數值。在CLAMP的其它通道是可以使用的,萬一傳過來是三個數值如RGB顏色數值。
在這個著色網絡裏,RAMP節點產生一個象查找表格,那裏的輸入數值在渲染時將和RAMP節點裏的某些vCoordinate屬性相符合。0是RAMP的底部而1是RAMP的頂部。
通過簡單地調整RAMP位置項和數值,你幾乎無限製地控製你將傳遞給下一個節點最終的數值。在這個例子裏,數值傳遞給聚光燈節點的 Filter Size和Shadow Color屬性。
注意:如果輸入值沒有被夾住,任何超出0-1範圍的數值將開始重複坐標數值,當RAMP紋理是重複的或包圍的。這能創建意外的結果如顯示在這兒的條帶。因為這個原因,當使用RAMP紋理貼圖時,被推薦工作在0-1之間的範圍裏的數值。
[page]
如圖。
那兒在兩個單獨的RAMP節點被用來控製DMAP的Filter Size和 Shadow Color最終數值。
Filter Size影響深度陰影貼圖的模糊度和柔和度,是通過blurInterpolationRamp節點來控製的。RAMP有兩個顏色條。那些顏色條的顏色值是在底部設置為2和在頂部設置為32。
這意為最小的Filter Size數值將是2,並且用於接近startShadow定位器的被著色點。Filter Size數值將是32將被用於接近endShadow 定位器的被著色點。(32是MAYA能使用的Filter Size的最大值)。這是為什麼創建一個柔和的削弱的深度陰影貼圖的外觀。
在這比較的圖像使用Filter Size值為1 的陰影外觀和使用RAMP節點的定製的削弱外觀。
注意:要看到RAMP的顏色項的值,選擇一個並在被選擇顏色的樣本上點擊,在RAMP屬性編輯窗裏。你將看到VALUE屬性在顏色拾取器裏能設置成你需要的顏色。
要提高最終的效果,另一個RAMP節點用於輕微地修改Shadow Color陰影顏色屬性。在RAMP節點上兩個顏色項是設置為0.5和-0.5。-0.5將變暗陰影去接近startShadow開始陰影定位器。在RAMP的頂部的0.5項創建一個微亮和更加透明的陰影,靠近在地麵上的endShadow結束陰影定位器。
削弱的深度陰影材質網絡證明了一個相對簡單的材質網絡能節省極大量的渲染時間,在多個位置,通過它可消除必需的光線追蹤陰影。