1.在用maya默認渲染器渲染投影的時候,我們可以設置兩種陰影類型,分別是 Depth Map Shadow 和Raytrace Shadow, Raytrace Shadow 是基於真實的光學物理運算得到的,但是計算速度很慢,Depth Map Shadow雖然渲染速度很快,但是不能很好的表現體積光源投射的陰影,比如一盞麵光燈的陰影。我們觀察這樣的陰影有其獨特的特性,即從物體和地麵的接觸點開始陰影的是由實到虛變化的,如下圖所示,我們可以看出兩種陰影的明顯區別。這個教學介紹一種可以用Depth Map Shadow方式來模擬真實陰影變化的方法。
2.打開場景,或者我們參考上圖製作一個相似的場景。分別在三個關鍵位置創建三個locator, 如圖命名為 lightlocator 、startshadow和endshadow,分別代表燈光的空間位置,陰影的開始位置和陰影的結束位置。
3.將三個locator 用鼠標中鍵從 outliner 窗口拖至 Hypershade 窗口中,同時創建倆個distanceBetween 節點,如圖鏈接,以計算射燈和兩個locator的距離值。
4.繼續創建 plusMinusAverage 和 multiplyDivide 兩個節點,利用plusMinusAverage求上圖中 1 和2 的差值。而multiplyDivide 節點則輸出數值提供給下一步的計算,連接方法如下圖所示,plusMinusAverage 的計算方式選擇為 Subtract減法計算。 這樣我們可以計算出兩個距離差值。multiplyDivide節點是為後麵的計算作準備。
5.下麵我們創建一個lightInfo 節點,鏈接方式如圖所示,通過這個節點的sampleDistance屬性我們可以得到主燈到被作用的物體的采樣距離,如圖所示,這個值是一個隨著物體位置上采樣點不同而變化的值,同時再鏈接一個plusMinusAverage 節點,為後麵的計算做準備。
6.把這兩部分節點群鏈接如圖所示。multiplyDivide 節點設置為Divide除法計算。這樣我們可以把lightlocator 到 endshadow和到 startshadow 的距離差值與通過sampleDistance 得到的燈光采樣距離進行計算,由於sampleDistance 是一個變量,所以這個比值也是一個變化的數值。
7.創建兩個remp 節點,通過上麵得到的數值來控製燈光投影的屬性,鏈接方法如下,我們創建的clamp節點的作用是截取了一段數據,這段數據的範圍被設置成0到1,以此來控製ramp節點的 vCoord 屬性 。
8.創建兩個remp 節點,通過上麵得到的數值來控製燈光投影的屬性,鏈接方法如下,我們創建的clamp節點的作用是截取了一段數據,這段數據的範圍被設置成0到1,以此來控製ramp節點的 vCoord 屬性 。
9. 如圖調整ramp 的顏色分布來控製燈光的陰影深度分布和陰影的
此練習的基本原理是:用主燈和地麵投影範圍起始結束點的距離差值與用lightInfo
采樣得到的數值之間的比例關係,來控製陰影的分布。模擬出了類似Raytrace Shadow
的效果,雖然節點有點複雜,但是渲染速度飛快阿。
以上內容是根據maya官方教程翻譯編寫的,感謝maya的工程師!