天天看點

【UE4從零開始 080】投射陰影

陰影讓世界産生對比,使得世界中的物體感覺更加真實,并營造一種氛圍。靜态陰影無論怎麼渲染,實際上都幾乎沒有任何性能消耗,但是動态陰影是造成較大性能消耗的原因之一。

靜态光源

靜态光源投射完全靜态的陰影和光照,這意味着它們對動态對象不會産生 直接 影響(靜态光照由于烘焙到了間接光照緩存中,是以會有 一些 影響),比如下圖中的小銅人。

【UE4從零開始 080】投射陰影

左側的銅人站在一個靜态光源的光照中, 光源對該角色沒有任何影響(沒有光照也沒有陰影);而右側的角色位于一個固定光源的光照中。

定向光源級聯式陰影貼圖(全場景陰影)

Directional Stationary Lights(定向靜止光源) 是特殊的,它們支援采用 Cascaded Shadow Maps(聯級陰影貼圖) 的全景陰影,同時作為靜态陰影。這在具有很多帶動畫的植被的關卡是非常有用的;想在玩家周圍産生可以動的陰影,但是不想付出以讓很多陰影重疊來覆寫較大的視圖範圍這樣的代價。動态陰影會随着距離而漸變為靜态陰影,但這種變換通常是很難察覺到。要想設定這樣的處理,僅需把 DirectionalLightStationary 的 Dynamic Shadow Distance StationaryLight 修改為想讓漸變發生的範圍即可。

靜止光源陰影

動态物體(比如 StaticMeshComponent 或 SkeletalMeshComponent)必須要從距離場陰影貼圖中內建環境世界的靜态陰影。這是通過使用 每個對象 的陰影完成的。每個可移動的對象從固定光源建立兩個動态陰影:一個用于處理靜态環境世界投射到該對象上的陰影,一個處理該對象投射到環境世界中的陰影。通過使用這種設定,固定光源唯一的陰影消耗就來源于它所影響的動态對象。這意味着,根據所具有的動态對象的數量不同,該性能消耗可能很小,也可能很大。如果足夠多的動态對象,那麼使用可移動光源會更加高效。

在下面的場景中,幾個球體都是動态物體,它們即接收來自靜态世界的陰影,也會投射它們自己的陰影,這些陰影和距離場陰影合并計算。每個可移動元件的的陰影錐體也顯示在圖上。

【UE4從零開始 080】投射陰影
由可移動元件形成的 一個物體 的陰影被用于該物體的邊界框上,是以邊界框必須是精确的。對骨骼網格體而言,這意味着需要有對應的實體資源(Physic Asset),對粒子系統而言,固定的邊界框需要足夠大來包含所有的粒子才行。

動态陰影

可移動光源在任何物體上都投射完全動态的陰影(和光照)。它的光照資料不會烘焙到光照貼圖中,它可以自由地在任何物體上投射動态陰影。靜态網格體、骨骼網格體、粒子特效等,都将會從可移動光源投射或接收陰影。

通常來說,投射可移動動态陰影的光源是性能消耗最大的。

陰影預覽

在編輯一個 Stationary(靜止) 光源或者 Static(靜态) 光源時,光照資訊會變成未建構狀态,預覽陰影 能夠提供一個在光照建構後陰影的大緻樣子。

下圖中,編輯器顯示的陰影上帶有 “Preview” 文本的樣式,用來和已經存在的陰影表示差別。

【UE4從零開始 080】投射陰影

當在重新建構光照資訊前就在編輯器中運作遊戲的話,預覽的陰影會消失。因為這個預覽隻在編輯器中,而不會在 Play In Editor 時顯示。

【UE4從零開始 080】投射陰影

要從預覽陰影中生成最終的陰影效果,則需要在編輯器的主工具欄的 Build (建構) 選項中選擇 ** Build Lighting(建構光照)**。

【UE4從零開始 080】投射陰影

可以在視窗的 Show/Visualize(顯示/可視化) 菜單中取消勾選 Preview Shadows Indicator(預覽陰影顯示) 的選項來關閉此功能。

如果希望調整這個文本的光照函數材質,可以在這裡找到:Engine/EditorMaterials/PreviewShadowIndicator

所有陰影類型同時存在

當把所有陰影類型放在一起時,每種類型的陰影都會利用其優勢來彌補另一種類型陰影的劣勢,進而可以快速地渲染出令人印象深刻的栩栩如生的視覺效果。

【UE4從零開始 080】投射陰影

繼續閱讀