伊酷科技技術合伙人朱稼萌,前段時間分享了他們在Unreal Engine VR移動端進行優(yōu)化的經(jīng)驗,從多個角度剖析影響VR游戲畫面優(yōu)化的原因。
以下為演講實錄:
大家下午好,我是來自伊酷科技的主講朱稼萌。
今天主要是給大家講一下關于Unreal移動端優(yōu)化。因為我們公司之前做的游戲基本上都是PC VR游戲,所以在把這些游戲移植到移動端的時候碰到很多問題。今天主要是針對這些問題,把我們的解決方案跟大家分享一下。
為了讓邏輯更清楚一點,我們先把可以優(yōu)化的部分解剖一下。在VR游戲中影響優(yōu)化的畫面因素主要有三個方面:
第一個是元素相關:相當于模型的材質(zhì)本身
第二個是渲染相關:主要是指除了元素模型之外的其他模型,包括燈光、特效、陰影、后期、體積物和反射
第三個幀率相關:需要將幀率穩(wěn)定在一個比較高的階段
下面講一講VR游戲在PC端與移動端有何不同?
首先因為在移動端中如果需要打光的話,需要禁用HDR、體積物,使用OpenGL ES3.1,所以大部分后期的項處于不可用的狀態(tài):燈光只能使用靜態(tài)燈光,特效的使用也需要非??酥?。所以今天的內(nèi)容主要針對如何使用簡單的操作把上述失去的東西彌補回來。
這個場景是我們目前正在做的一個體育類拳擊VR游戲場景為例。
這是一張在PC中的效果展示圖:
然后下面(右邊)這張是去掉HDR效果,使用ES3.1渲染通道的效果圖:
通過畫面的對比可以看出進入移動端之后:
既然這些效果在進入移動端之后消失,那么我們需要想辦法通過別的途徑把它加回去。有兩種辦法,一種做法,是修改圖層的渲染通道,這種方法相對麻煩,我們通常使用另一種相對簡單的做法。
視覺效果優(yōu)化-場景
首先講一下Unreal的渲染途徑。
Unreal的靜態(tài)燈光渲染之后會把場景模型的陰影存放在WholeScene的LightMap,其中有HQ和LQ兩種,LQ里面就是我們移動端會用到的LightMap和AO,我們可以將它解析出來,或者通過第三方的三維軟件像MAX、Maya之類的拿出來,然后將這些效果加強到材質(zhì)中的漫反射和自發(fā)光里,下圖有具體的效果圖:
還可以導入一個LightColor參數(shù),方便后期整體調(diào)節(jié)色彩范圍,這是為了彌補失去后期之后沒有辦法整體調(diào)整場景顏色。
下圖為視圖演示:
然后是角色的皮膚,如何在移動端讓角色皮膚顯得更真實一點。
視覺效果優(yōu)化-角色
下圖為正常情況下,光線照射到物體上的反射路徑:
正常情況下,部分光線會直接反射掉,光線是在物體上有一部分是直接反射掉,那還有另一部分光線會進入到物體內(nèi)部進行一些計算,然后最后反射到空氣中。一般,我們把這種反射稱為次表面反射。
我們來看一下在移動端使用不開光的一個效果。
可以看到在移動端即使在使用動態(tài)燈光下:
這種方法使用比較廣泛,但在VR游戲中用處更大,它不僅可以讓皮膚的過渡更合理更飽滿,而且可以模擬動態(tài)燈光實時的照射,而不需要真正使用動態(tài)燈光。
正常情況的燈光模擬是通過芯片進行模擬,這里只是通過統(tǒng)計簡單的預積分的原理,簡單地把光線在正常情況下的顏色、亮度體現(xiàn)在這張圖上。這里相關的信息是光線的入射角度、模型曲率,所以我們只要控制這兩個變量,就能得到那個點實際的顏色。
這里通過導入一個材質(zhì)參數(shù),從外部傳入一個我們自己做的模擬燈光的組件,然后再增加一個曲率的參數(shù),然后找到這張圖上的點。相當于是自己做的一個模擬燈光的組件,轉(zhuǎn)到剛才那個參數(shù)。
下圖是在一個球體上實際的效果,暫時沒有將曲率的效果體現(xiàn)在上面,只是一個簡單光照控制的效果。
下面這張是增加了曲率統(tǒng)計之后的效果,雖然沒有動態(tài)燈光照射,但通過預積分的處理方式,讓人皮膚應該有的光澤過渡和透澈的效果都有體現(xiàn)。用這個方式可以達到一定預期效果,又避免動態(tài)燈光損耗掉一些性能。
視覺效果優(yōu)化-陰影
Unreal中動態(tài)物體的陰影效果一般使用調(diào)制陰影,級聯(lián)陰影和膠囊體陰影三種,其中調(diào)制陰影,級聯(lián)陰影必須使用動態(tài)燈光才能調(diào)制,膠囊體陰影雖然能夠使用靜態(tài)燈光,但對ES3.1效果不是太好,因此準備自行做一個簡單陰影系統(tǒng),通過材質(zhì)實行。最后實現(xiàn)的效果如下圖:
通過球形遮罩,暴露一個擬角色位置的參數(shù),通過球形遮罩實時計算它應該出現(xiàn)的位置和大小,相當于做一個組件,或在需要投影的角色身上做一個參數(shù),然后在擴充函數(shù)過程中把位置參數(shù)傳給剛才的函數(shù),最后就能得到這樣的效果。
視覺效果優(yōu)化-反射
進入ES3.1之后,反射效果不是很理想,因此想通過簡單的方法實現(xiàn)反射,但目前暫時沒有找到特別合適的方法。
目前采用的方法就是不使用反射,但如果必須使用反射的話,在角色下面放一個重復的角色,然后在你需要反射的地板上增加一個繪制功能,直接去繪制他的透明度。
雖然正常的反射,通過打開動態(tài)燈光可以得到一定的增強,但我們這邊沒有選擇打開動態(tài)燈光,主要是因為開了動態(tài)燈光之后,會讓場景處于一個非常不穩(wěn)定的狀態(tài),損失很多性能。我們測試之后發(fā)現(xiàn),可能這種光對性能的損失更小一點,因為我們發(fā)現(xiàn)移動端對模型面數(shù)的承受力比想象中要稍高一點,而且下面的模型可以將LOD盡量降低一點。
這個方式我們一般推薦在場景比較大的時候使用,比如一整個房間地板做反射。在模型制作的時候把房間做鏡像,在美術方面把下面部分做簡化,美術在哪邊就在哪邊進行涂抹。
方法雖然取巧,但實踐效果還不錯。
視覺效果優(yōu)化-動態(tài)燈光
盡量不要使用動態(tài)燈光,雖然動態(tài)燈光可以直觀提升陰影和反射,但存在很大的不穩(wěn)定性,因為永遠不知道玩家什么時候會進行操作,生成一些粒子,或者動態(tài)燈光與其他燈光產(chǎn)生影響。但如果是比如單一的游戲,或者能確定玩家去做什么操作時,可以嘗試使用。
視覺效果優(yōu)化-粒子特效
在制作的過程當中,發(fā)現(xiàn)特效粒子占用了很多游戲硬件的性能,該注意的地方為以下幾點:
媒體
如果是短暫重復利用的視覺效果可以優(yōu)先使用粒子,但如果是常期一直占用畫面,只是起到一個場景氣氛作用的話,可以試著使用一些視頻特效,只需要把特效分為黑、白蒙版跟正常特效,在材質(zhì)中做一個切割,把它變成一個透明的材質(zhì)??傮w來說,它對場景的性能消耗會小一點,此外,它受取消HDR和ES3.1用戶端渲染的影響很小。
霧效
除非情況特殊,否則盡量不要使用粒子去模仿霧效,如果需要,可以先建一個藍圖類,然后在藍圖類中去做兩個錯位之間的移動,去檢測本身和角色之間的距離,去調(diào)整它的透明度,或者控制他的生命周期。
景深
在VR游戲中用的比較少,一般在遠景的時候,如果需要用到景深,把遠景變成貼圖,在不同距離間做一定的模糊處理即可
幀數(shù)優(yōu)化-分析
幀數(shù)的優(yōu)化,主要在以下四點。Stat unit,F(xiàn)rame 每幀所花費的時間;Game CPU游戲邏輯線程,這個主要和程序相關;Draw CPU渲染線程,是CPU去采取產(chǎn)品中需要渲染的東西他所花的時間;GPU CPU渲染線程,代表實際渲染所花的時長,可以通過在游戲中打出指令,看到底是哪塊需要做調(diào)整。
幀數(shù)優(yōu)化-DrawCall
幀數(shù)優(yōu)化-DrawCall的影響因素主要在四個方面:首先是模型數(shù)量,模型數(shù)量太多,會導致性能下降,如果是在較大的場景中,合并需要考慮到物品剔除是否方便;第二個是材質(zhì)數(shù)量,需要確定一個模型中的不同材質(zhì)會出現(xiàn)多種狀況;第三是Actor中的Component數(shù)量,我們測出來對Drawcall第二部分有一定影響;第四個是SceneCaptureActor的調(diào)用,場景采集一般用于做鏡子之類的東西,最好不要調(diào)動,萬一需要調(diào)用,要注意控制生命周期,降低它接觸的大小。
幀數(shù)優(yōu)化-Game
在幀數(shù)優(yōu)化-Game的優(yōu)化上,要盡量少調(diào)用敏感程序,比如:Forloop, GetallActorsOfClass, SpawnActor, Tick,會對Game的速度產(chǎn)生影響;在使用資源讀表調(diào)用的時候沒有設置為軟引用。
幀數(shù)優(yōu)化-GPU
最后一點是關于幀數(shù)優(yōu)化-GPU ,要考慮著色器的復雜程度。著色器和使用材質(zhì)有關系,建議使用不透明的材質(zhì),優(yōu)先級高于帶蒙版的材質(zhì)高于使用透明度的材質(zhì);還要考慮模型的面數(shù),以及燈光的調(diào)用,盡量使用動態(tài)燈光,不要使用靜態(tài)燈光。
基本上就是以上內(nèi)容,謝謝。
投稿/爆料:tougao@youxituoluo.com
稿件/商務合作: 六六(微信 13138755620)
加入行業(yè)交流群:六六(微信 13138755620)
元宇宙數(shù)字產(chǎn)業(yè)服務平臺
下載「陀螺科技」APP,獲取前沿深度元宇宙訊息