天天看點

(153)平面反射

平面反射(Planar Reflections)

UE4 支援實時平面反射,它比螢幕空間反射(SSR)更加精确,但渲染開銷較高。渲染開銷較高的原因來自平面反射的工作原理。因為平面反射實際上将從反射方向再次對關卡進行渲染。

(153)平面反射

螢幕空間反射 VS 平面反射

在渲染方面,螢幕空間反射(SSR)比平面反射更為高效,但可靠性較差。下圖将 SSR 的缺陷和平面反射進行了對比。

(153)平面反射

Screen Space Reflections

(153)平面反射

Planar Reflections

  • 螢幕空間反射:左圖展示了螢幕空間反射的局限性。注意圖像邊緣出現了大量“洩露”。出現此現象的原因是 SSR 無法反射畫面外的物體。
  • 平面反射:右圖為相同的關卡,啟用的是平面反射。注意圖像中,甚至兩側均未出現“洩露”。原因是平面反射能夠反射畫面外的物體。

啟用平面反射

執行下列操作即可在項目中啟用并使用平面反射:

  1. 在主工具欄中前往 Edit > Project Settings,然後前往 Project Settings 菜單下的 Rendering > Optimizations 部分。
    (153)平面反射
  2. 點選 Support global clip plane for Planar Reflections 旁邊的勾選框,在彈出提示後重新開機 UE4 編輯器。
    (153)平面反射
    啟用平面反射後如未重新開機 UE4 編輯器,可能導緻平面反射無法使用。
  3. 重新開機 UE4 編輯器後,前往 Modes 面闆,從 Visual Effects 部分選擇一個 平面反射 Actor 并将其拖入關卡。
    (153)平面反射
  4. 将平面反射 Actor 放進關卡後,即可使用 G 鍵隐藏或取消隐藏 Actor。可使用 移動、旋轉 和 縮放 工具更佳地放置平面反射 Actor 并設定大小,滿足關卡需求。

    平面反射 Actor 被添加到關卡後,附近的反射材質将自動受到影響。放置在關卡中的靜态網格體的法線用于反射的失真,模拟波紋效果。

平面反射 Actor 屬性分解

平面反射 Actor 擁有多個屬性,調整後可對反射效果産生較大影響。下表包含這些屬性,以及它們對平面發射效果産生的改變。

(153)平面反射
設定名稱 描述
Normal Distortion Strength 控制平面反射失真時的法線強度。
Prefilter Roughness 初濾平面反射紋理使用的粗糙系數,用于隐藏低分辨率。數值越大,GPU 開銷越高。
Distance from Plane Fade Start 從反射平面到該距離的接收像素将開始淡出平面反射。
Distance from Plane Fade End 從反射平面到該距離的接收像素将完全淡出平面反射。
Angle from Plane Fade Start 反射平面和法線形成該角度的接收像素将開始淡出平面反射。
Angle from Plane Fade End 反射平面和法線形成該角度的接收像素将完全淡出平面反射。
Prefilter Roughness Distance 達到初濾粗糙系數的距離。
Screen Percentage 降低采樣百分比可用于減少平面反射渲染的 GPU 時間。
Extra FOV 渲染到反射紋理時所使用的附加視野。法線失真在反射紋理外産生讀資料時此項十分實用。數值越大,渲染線程和 GPU 開銷越大。因為更多物體和三角形需要被渲染到平面反射中。

平面反射局限性

雖然平面反射擁有真實的反射效果,但此功能也存在以下局限性。

  • 無法控制反射通道中啟用的渲染功能。
  • 反射通道中的動态陰影不正确。
  • 為保證達到目标幀率,需計算資源是否足以使用平面反射。
  • 隻支援恒定的粗糙系數,其在平面反射元件上(而非在材質上)進行指定。
  • 如可能,須盡量将世界場景中的平面反射 Actor 數量限制為 1 個,将其移動、旋轉、縮放,和世界場景搭配。也可使用多個平面反射 Actor,但需多加注意,因為平面反射 Actor 不執行任何距離剔除,隻進行視錐和遮蔽剔除。是以,如果畫面中同時存在兩個平面反射 Actor,項目的幀率将受到嚴重影響。
  • 渲染平面反射 Actor 的開銷直接來自目前關卡中渲染的内容。啟用此功能後,由三角形組成、繪制調用較大的場景将遭受嚴重的性能影響,因為這些開銷不會随螢幕百分比變化。

平面反射性能

在項目中啟用平面反射可實作相當精确的反射,但該功能會對項目性能産生直接影響。以下部分将說明在針對高端 PC 的項目和針對移動裝置的項目中啟用平面反射後的性能影響。

此處使用 UE4 launcher 中“風筝和無盡之劍草地”項目 4.12 版本展示平面反射的性能影響。

平面反射性能和風筝 Demo

由于風筝 Demo 地形地貌的大小和多變的高度,添加并縮放單個平面反射 Actor 包含整個關卡無法執行,可能導緻性能極差。需要政策性地對平面反射 Actor 進行放置和縮放,使其适應關卡中需要反射的區域。下圖中可以看到在風筝 Demo 中平面反射在水面上形成的視覺效果。

(153)平面反射

Planar Reflections Off

(153)平面反射

Planar Reflections On

平面反射對關卡的視覺效果提升十分大,但對性能的影響也極大。在下方左圖 平面反射關閉 中可以看到,整個關卡的渲染時間為 31 ms。在下方右圖 平面反射開啟 中可以看到,整個關卡的渲染時間為 29.19 ms。此外,平面反射的渲染時間為 23.07 ms。是以帶平面反射場景的整體渲染時間為 52 ms 左右。

(153)平面反射
(153)平面反射
平面反射關閉 平面反射開啟
點選檢視全圖 點選檢視全圖

平面反射消耗 31 ms 進行渲染的原因是風筝 Demo 中使用了全動态光影。使用靜态/預計算光影的關卡再次進行平面反射渲染時效率更高。

平面反射性能和無盡之劍地牢

基于無盡之劍精靈遺迹地圖的規模和布局,隻需要一個平面反射,将其縮放比對關卡中放置的水面靜态網格體即可。在下圖中可看到精靈遺迹地圖水面添加平面反射後的效果。

(153)平面反射

Planar Reflections Off

(153)平面反射

Planar Reflections On

添加平面反射後,水面效果更加逼真;較之于風筝 Demo,性能影響也較小。在下方左圖“平面反射關閉”中可看到,不帶平面反射場景的渲染時間約為 11 ms。在下方右圖“平面反射開啟”中可看到,平面反射的渲染時間約為 1.67 ms,關卡整體渲染時間約為 13 ms。

(153)平面反射
(153)平面反射
平面反射關閉 平面反射開啟
點選檢視全圖 點選檢視全圖

精靈遺迹地圖中的平面反射渲染時間為 1.67 ms,而風筝 Demo 中的渲染時間為 23.07 ms。造成此差異的原因是靜态網格體和材質的建構方式。精靈遺迹地圖及其内容針對移動裝置設計,每個資源使用的三角形和材質指令數量均有嚴格限制。是以在該地圖中啟用平面反射時開銷較低,因為這裡使用的資源複雜度和規模均低于風筝 Demo。

繼續閱讀