VR已經成爲了當今最火熱的一個話題,帶上頭盔以後,今後進入一個奇妙的世界,在這裏你再也不是觀衆,你參與這個世界發生的每一件事件。整個世界今後不同凡響。在賽道上飛馳,在戰場上縱橫。
可是生理機制讓咱們的大腦在身體並無移動,而視覺在不斷告訴我正在飛速前行的迷惑中產生了暈眩。如何解決由於VR而產生的眩暈,就成爲每一位設計師須要面對的問題。
引發VR眩暈有不少緣由,好比設計上的,技術上的。渲染的幀數高低一定是其中一個最主要的緣由之一。關於UE4裏對VR內容的優化方法和思路大部分是和傳統的3D遊戲優化是一致的,有部分是VR尤爲相關的。接下來就以Oculus爲平臺和你們一塊兒分享一下在UE4裏常見內容的一些設置和優化的思路和方法。
dom
首先咱們來看一個優化過程的實例,先有個大概的瞭解。打開一個UE4下載的項目,particle cave,VR preview,帶上眼鏡就能體驗了,對,就這麼簡單,雖說這個並非一個針對VR的項目。
這裏作了一些簡單的設置:
1. 發現攝像機是以預設軌道在飛,並且明顯感受幀率不高,哦,好暈。爲了比較方便衡量接下來優化,我作了一些攝像機的設置,讓攝像機開始遊戲後固定在一個我認爲幀數最低的畫面。
2. 確保幀數沒有被限制住,關閉垂直同步,把最高幀數限制上限提升好了,再run一下,固定住了,轉轉頭能夠,真的挺卡的。
ide
再接個命令證明一下,最直接和GPU渲染效率有關的就是分辨率。
HMD SP 100 54FPS
幀數立馬提升很多,果真是GPU渲染瓶頸!
工具
下降渲染品質
Adjust scalability to medium 72FPS
成功了? 尚未哦,這個太暴力了,這個確定不是最優的優化結果了。由於確定有些能夠進一步作大量的優化,有些和視覺相關比較大的調整能夠提升質量。而非粗暴的都調低了,那接下來就得找緣由了。
測試
打開GPUprofiling: (Ctrl+Shift+,)
看下最大的GPU開銷在哪裏:
Base pass: Deferred Decals
Lighting: ReflectionEnvironment:
Translucency: Postprocessing:
從最大開銷的幾個點入手:BASEPASS: 敲入幾個渲染選項命令行:r.Earlyzpass 1:增長draw calls和一部分GPU的消耗,但大大下降base pass的消耗;關閉了一些不須要的PP效果;一套最優POP設置組合:
優化
Postprocessing setting:動畫
Scene color;ui
Fringe intensity 0命令行
Grain intensity 0scala
Color grading intensity 0ssr
Bloom setting
LPV 0
Ambient occlusion 0
DOF Method Gaussian, 其餘參數 所有 0
Motion blur all 0
AA FXAA
SSR 0 MAX roughness 0.01
Ambient cubemap 0
再VR preview,嗯,仍是75,固然了,DK2上頂格是75,再優化看不出效果13.39ms 75FPS
把品質調高成high Scalability high,仍是75,哈哈,沒問題!如今算優化完了吧? 其實還能夠再優化,這時候的優化就是以儘可能提高畫質但不下降幀數爲目標。
看看哪些還能夠優化的?固然有!以前的Translucency花費好高。Viewmode: shade complexity 好紅, 一堆overdraw;Decal的花費也很高, Stat scenerendering, decals in view環境反射的花費很高: 選中sphere reflection capture, 看一下總共有幾個,觀察他們影響範圍是否重疊嚴重。
Vertex intensity: 好密啊。高密度的三角面幾乎看上去就像一個實體了, 一個三角面的大小在屏幕上的面積小於2*2個像素就會極大的增長開銷。
還有Particle 。如今基本上已經定位到可執行層面的緣由了,一些緣由也已經經過可接受的渲染參數調整解決了;另一些就必需要artist來優化Assets自己了。哪些工做最快,質量損失最小,可以換其餘更能提高品質的選項。
啓示他們並不須要這麼多面,assets的優化須要更多的時間。把scaleability有些選項提高到EPIC,固然他們並非所有。
一些引發DRAW CALL數量多的緣由:
同屏看到的Actor太多,若是材質複雜這個因素還會加成。 合併Actor,尤爲是中遠處;
材質ID太多(or Section; Mesh elements)。重用材質貼圖,儘可能把同一材質物體合成爲一個物體;
每一個actor上的feature太多。主要是增長投影的屬性,增長custom depth的屬性;
太多燈光投影(這裏投影的消費來自於須要計算哪些物體須要被投影);
MESH DRAW CALL每每是個大頭,MESH ID 的數量能夠在STATISTICS統計能夠很方便的查看,從經驗判斷哪些資源製做不合理。
關於ACTOR設置feature會增長DRAW CALL數的是投影和custom depth,能夠經過一些工具來檢查這些設置。使用property matrix來過濾,檢查,並修改。
另一個常用的查找緣由的方法排除法:
經過隱藏各類元素,尋找哪一個是致使DRAW CALL數量的大頭
記得隱藏HUD,有的時候HUD也是個大頭之一。
Showflag.slate 一、若是是GPU瓶頸,最快速的驗證方式就是改變分辨率,下降分辨率能夠極大提升幀數。爲了抵消畸變糾正而產生的圖像模糊,或者分辨率的丟失,在渲染的的buff裏每每是實際屏幕尺寸的120-130%,這樣增長了圖像的銳利度,但下降了渲染的速度。
HMD SP全稱是HMD 的screen percentage, 這個參數就是來修改渲染buff的尺寸的,HMD SP 120是默認值,改爲100看看。
若是像剛纔例子看到的,幀數有大幅度的提升,那就是GPU負擔太大的問題了,若是分辨率的改變對於幀數影響不大,頗有多是由於面太多了。
對這些內容重點作檢查,看看有沒有超標的現象出現:
當使用lighting function,IES,接受投影,區域光,複雜shading modes的時候會變得更貴。反射ssr有問題,關掉。 後期, AO,很費。
知道哪裏有問題了,接下來就能夠着手行動了,但以前作個目標規劃仍是能夠事半功倍的。最小化圖像質量妥協,是一種有的放矢的妥協策略。好比高質量的陰影對於高品質的抗鋸齒而言對於最終項目實際的表達效果次要。減少陰影品質來換取高品質AA就是一種有的放矢的妥協策略。所以儘可能大的減少不是很是關心的渲染品質部分,增長更可見的渲染品質部分。
從容易作起,從開關一些渲染選項,品質參數調整,到直接刪東西,優化一個用到幾百次的物件,這些都是立竿見影的方式,這樣能夠作容許的時間計劃內完成目標,若是有更多時間和預算能夠對相對低性價比的。目標75幀是必須的,不要說68,70,都不行,必須75,作實際體驗中有很大區別。
最多見的問題所在:
這些緣由又互相影響,一方面的增長也會增長另外方面的開銷:
其餘一些VR的特有行爲:
好比對於Oculus部分是在驅動層級作掉了,好比如何糾正畸變,如何雙屏,如何傳遞傳感器信息。對於傳感器信息和視頻匹配的準確性,以及渲染的屏幕覆蓋率,在UE4裏是能夠根據須要來修改的,除了這些,其餘就和以往的優化思路一致了。
建立測試環境,找緣由:
後期優化首選項:
最後選擇的參數須要應用到DEVICE PROFILES裏或者BP裏:
減少 shader的 instruction的數量;減小Texture sample的數量;把常用到同一個物體上的Pattern合在一張貼圖上;去掉對質量影響很小的貼圖,好比Specular,AO在實際狀況中平衡來使用quality switch,sin, pow, cos, divide, Noise,多向量的計算老是大於單向量的計算。
UE4裏因爲使用了延遲燈光,因此燈光的優化比前向渲染方便的多。最快速最有效的方法:使用靜態光源。若是使用的是動態光減少 Lighting cull,半徑,衰減,Z INTERSSECTION, cone大小角度。總之儘可能減小重疊。
投影的開銷最大每每不是來自於pixel shader,而是來自於被投影的mesh面數太多,還會被燈光數量,投影物體數量放大。關閉投影的燈光;減少範圍或張角;減面,加LOD r.Shadow.MaxResolution
一個做品的優化不是一朝一夕的事情,須要肯定目標配置:肯定最低配置,配置範圍小,這樣的優化才更有針對性,而且學會在開闊的視野在設計時須要巧妙的避免沒必要要的內容,學會如何制定Budget:質量優先驅動;快速原型製做;分析制定。 對內容製做者前期的培訓花費是值得的,完成這些工做以後,一個高品質的VR做品就會誕生。