2010/08/08

Unreal Engine功能介紹: 動態計算陰影透明度

Unreal Engine 3現在新增動態計算陰影透明度(dynamically shadowed translucency),可以用在以下兩種狀況

1)透明度的照明,是在場景中具有dominant lights 投射在可以接收動態光影的環境上。簡單的說,角色的頭髮現在可以在環境裡面計算陰影。


上圖中,並沒有開啟這個功能。因此,頭髮的透明度計算不正確;而下圖是有開啟透明度的功能。


在材質裡面如果要開啟這個功能是
bTranslucencyReceiveDominantShadowsFromStatic. 而在燈光環境裡面也有這個設定,你可以把頭髮開啟陰影的選項,或是就採用動態陰影 bAllowDynamicShadowsOnTranslucency,這個屬性預設是關閉的,因此如果你想要看到效果請務必把這個選項開啟。

效能的問題
開啟這個效果,在Xbox 360裡面每個角色會損耗大約.2ms的計算時間,這個功能還會增加四個材質lookups,且會增加某些ALU instructions到頭髮的shader上面,大概也會花費少量的GPU計算時間,大約.02ms。因為其實角色佔畫面的面積其實很小的。

限制
這種陰影只會投射在靜態的環境上,頭髮無法接受其他角色的陰影,也不能處理自身陰影(self-shadowing)。

2)透明度可以繼承dominant shadows,投射在不透面的表面上,這表示透明度可以使用動態陰影,投射在半透明後面的不透明的pixel上面。這個功能的目的是要讓地面mesh的動態陰影,當採用半透明混合模式時(translucent blend mode)與深度偏差alpha(depth biased alpha),能夠隱藏幾何體的縫隙。

如果沒有上述功能,半透明的mesh放在地上就會看起來像這樣:

如果有把功能啟動,看起來會像這樣:


要把材質啟動陰影計算的參數是bTranslucencyInheritDominantShadowsFromOpaque。請注意啟動這個功能會降低效能,因此你只針對地面的mesh做設定,而不是把所有的半透明材質都把這個選項打開。

效能的考量
如果是在Xbox 360 ,會有持續的.27ms計算開銷,如果還有添加材質的話還會增加.1ms,如果半透明地面mesh暫了畫面很大一部分的話。

限制
這個功能只對場景中打的是dominant lights光源有效,所以採用modulated shadows會沒有效果。

這個功能目前在PC平台上只對dominant directional lights有效;但是在遊戲機平台上面對所有類型的dominant light都有效!

透明度會使用在其後面的不透明物件的動態陰影,你可以在以下的遊戲截圖看到階梯陰影效果,但是如果半透明mesh背後的不透明mesh之間沒有對位很好就會出現計算錯誤。


[相關文章]
40 個你不能錯過的UDK (Unreal Engine)網站

No comments: