在Unity 3D中,經常需要用到光照陰影,即Directional Light的Shadow,Shadow分為Hard Shadow和Soft Shadow。區別是Soft Shadow的陰影邊緣比較平滑,接近真實,但是性能消耗大於Hard Shadow。
Lightmapping有3種選擇:實時光照陰影(RealTimeOnly)、場景烘焙陰影(BakedOnly)、以及上面兩者結合的陰影(Auto)。
RealTimeOnly:所有場景物體的光照都實時計算,實時光照對性能消耗比較大;
BakedOnly:只顯示被烘焙過的場景的光照效果(如果有地方沒有被烘焙過,則不會顯示光照效果):場景烘焙是可以選擇一些靜態物體進行烘焙,這里的靜態物體是指在游戲過程中不會動的物體(需要在對象的Inspector面板中勾上static),因此可以在游戲運行前就先把光照效果做好,生成光照貼圖,然后游戲運行的時候直接把光照貼圖顯示出來就可以了,不用實時計算光照效果,用空間(貼圖的存儲空間)換取了時間(實時光照的計算時間)。
Auto:這種就是上述兩者的結合,如果選擇這個模式,那么被烘焙過的部分就用光照貼圖直接顯示,沒有被烘焙過的地方就實時計算。
但是在使用Shadow的過程中,可能會遇到一個問題:本來以前顯示的好好的,陰影突然不顯示了。在Shadow里面選擇了顯示陰影,仍然沒有效果,陰影選擇Hard Shadow和Soft Shadow都不行,選擇RealTime only、Bake only、Auto也都不行,這是什么原因呢?
有下面三種情況可能導致這種現象的發生,如果遇到這種問題可以試試。
情況一:距離太遠了,看不到陰影,把攝像機鏡頭放近試試,這種情況一般會在選擇實時光照(RealTimeOnly)時發生。如果還不行,那么看看第二種情況。
情況二:打開EditàProject SettingsàQuality,在Inspect面板中查看,如下圖。在Levels中綠色的是發布時候會選擇的模式,當前選擇的是Good,可以再Unity中實時查看這個Levels下的顯示情況,在Good Levels下,Unity自定義了一下Good情況下的顯示效果,在圖的下方:Rendering、Shadows、Other,如果選擇了Fast,Shadows默認是不顯示陰影的。因此遇到陰影不顯示的情況,可以檢查一下這個地方。不過這種情況一般也是會在實時陰影時出現。
情況三:由PC平台轉到了Android平台。這種情況,使用實時陰影或者烘焙可能都會出現在Android平台上無法顯示陰影的問題。解決方法就是,在從PC平台轉到Android平台的時候,在Player Settings中將Use Direct3D 11后面的勾去掉(如下圖),然后再Switch到Android平台,這時陰影效果就會有了。
OK,目前就遇到這么三種情況,如果還有其他情況,還請在留言中寫出來,共同分享。