ue4 改变枢轴位置_UE4渲染模块概述(四)---反射
在前一文中介紹了像素著色器與material,大概知道了UE4材質的生產管線:
Jerry:UE4渲染模塊概述(三)---Pixel Shader & Material Rendering?zhuanlan.zhihu.com在光滑的地面或墻面上需要渲染物體的反射信息,實時計算很難實現 ,本文介紹UE使用的三種反射系統,這三種反射系統各有利弊,往往會將之混合起來使用。
第一種:反射捕獲(Reflection Capture)
它會在指定位置計算前后左右上下六個方向的反射信息,形成一張靜態的立方體圖(Cubemap),這個過程是預計算的,所在實際跑起來的時候消耗很低,但也因為只是在特定位置計算的,所以當實際鏡頭與捕獲不同時,就會看到不合理的反射圖樣。
UE4使用球體反射捕獲對象(Sphere Reflection Capture Actor)來指定捕獲的位置,如下圖所示:
也有方形的版本(Box Reflection Capture Actor),如下圖所示,不過比較常用的還是放置球形捕獲Actor:
它本質上是捕獲一張360度的圖片,然后將圖片混合到模型上(如上圖所示的地圖和茶壺身上),但只在捕獲點是準確的,如果鏡頭移到別處,但混合的圖片沒有變化,就會出現下圖所示的穿幫問題:
可以看到地上混合的柱子倒影不再與真實柱子吻合。反射捕獲在很多游戲大作中都有使用,那為什么我們看不到這種詭異現象呢?這時因為同時還會混合其他反射處理方案(比如屏幕空間反射SSR),在某種程度上掩蓋了它的瑕疵。
Reflection Capture不精確,但它的預計算的優點對性能是非常友好的,通常我們build light的時候,就會去更新捕獲信息,也可以在Build這里單獨進行更新。
如果打包游戲或者應用,它會將捕獲紋理烘焙進游戲,這樣實際跑的時候,在一定范圍內(可在反射捕獲Actor上配置半徑)的任何像素,都會檢查附近是否有反射捕獲,如果有,它就向反射捕獲Actor查詢立方體貼圖cubemap,將cubemap與物體本身貼圖進行混合。
如果相近區域內有兩個反射捕獲Actor,如下圖黃箭頭標識:
那么重合的像素就會分別融合兩張cubemap,但要注意的是,大量重疊的捕獲范圍會帶來性能問題,因為要在同一個像素中計算多張cubemap融合的結果。
我們布置反射場景的基本思路,是放置一個大型的反射捕獲Actor來大致覆蓋整個空間,然后再把許多較小的反射捕獲Actor放置在反射程度高或者需要精確反射的表面附近,盡量保證影響半徑不重合,如下圖所示:
當然也沒有必要刻意去規避重合,只要重合數量不要超過8個都還是可以接受的。另外,可以通過設置貼圖精度來改變反射圖樣的銳利/模糊程度。
天空光照能為整個游戲世界提供低成本的備用反射捕獲,如下圖所示:
游戲世界中任何附近沒有球體或立文體反射捕獲Actor的對象都會轉而使用天空光照反射,這對于大型開放式戶外環境很理想,因為我們不希望在場景中到處放置反射捕獲Actor。
第二種:平面捕獲(Planar Reflection)
這種在實際中用的比較少,因為它僅局限于小范圍平面,也由于是實時計算,所以消耗要比反射捕獲大,但優勢是無論鏡頭如何移動,反射信息總是正確的,如下圖所示:
第三種:屏幕空間反射(SSR)
這是UE4唯一默認生效的反射系統,它是實時計算的,因而位置上總是精確的,但生成的反射圖樣比較模糊,不如反射捕獲渲染的清晰。性能消耗介于反射捕獲與平面反射之間,SSR效果如下圖所示(研究前要關閉捕獲Actor的渲染,只開啟SSR):
它的優點同時也是缺點在于:只計算屏幕空間的反射。因為計算范圍受限,所以性能可以保障,但同時也由于只能采集到屏幕空間內的數據,所以只能繪制視口可見幾何的反射,如下圖所示:
我們知道柱子很長,在屏幕上方還有一截,但因為SSR只取了屏幕空間內的信息,所以產生的反射信息里面就沒有屏幕以外的柱子了(紅圈內理應有柱子倒影,但實際沒有渲染)。
綜上,三種方法各有優缺點,實際使用中是將這三種系統混合在一起。三種方法的使用優先級依次為SSR,平面反射,反射捕獲。只有當硬件或者其他性能撐不住的時候,才會使用預計算的反射捕獲,否則還是提供精確度相對較高的SSR和平面反射。
平面反射盡量不要使用,如果硬件不支持就要關掉SSR或者調整SSR的生成質量來平衡性能,方法是在控制臺中鍵入r.SSR.Quality + 數字,默認質量是3,數字越大,SSR的渲染效果就越好,但相應性能就會越差。
可以在RenderDoc里面截幀分析反射信息,下圖所示是屏幕空間反射SSR的渲染:
下圖是SSR成像的結果:
每一個點都是投射的反射射線,因為射線密度不夠,形成了較多的噪點,為了掩飾,所以SSR生成的反射圖看上去是模糊的。
關于三種反射就介紹到這里,下一章介紹靜態光照,詳見:
Jerry:UE4渲染模塊概述(五)---靜態光照?zhuanlan.zhihu.com總結
以上是生活随笔為你收集整理的ue4 改变枢轴位置_UE4渲染模块概述(四)---反射的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python调用通达信公式_对照通达信一
- 下一篇: c++ 编译添加dll_VS2019编译