朱峰社區(qū)首頁 朱峰社區(qū)

搜索資源 注冊|登陸

等待

返回 展開菜單

克服VR眩暈之幀數:提升UE4內容實時渲染效率

MotionBuilder中文教程 觀看預覽

MotionBuilder中文教程

包含9節(jié)視頻教程
關注15.9萬

從零開始講解MotionBuilder的詳細教程,配合朱峰社區(qū)的模型詳細講解如何進行運動捕捉的動作裝配

關閉

克服VR眩暈之幀數:提升UE4內容實時渲染效率

     VR已經成為了當今最火熱的一個話題,帶上頭盔之后,從此進入一個奇妙的世界,在這里你不再是觀眾,你參與這個世界發(fā)生的每一件事件。整個世界從此與眾不同。在賽道上飛馳,在戰(zhàn)場上縱橫
     但是生理機制讓我們的大腦在身體并沒有移動,而視覺在不斷告訴我正在飛速前行的迷惑中產生了暈眩。如何解決因為VR而產生的眩暈,就成為每一位設計師需要面對的問題。

     引起VR眩暈有很多原因啦,比如設計上的,技術上的。渲染的幀數高低必定是其中一個最主要的原因之一。關于UE4里對VR內容的優(yōu)化方法和思路大部分是和傳統(tǒng)的3D游戲優(yōu)化是一致的,有部分是VR尤其相關的。接下來就以oculus為平臺和大家一起分享一下在UE4里常見內容的一些設置和優(yōu)化的思路和方法.


首先我們來看一個優(yōu)化過程的實例,先有個大概的了解。打開一個UE4下載的項目,particle cave, VR preview,帶上眼鏡就能體驗了,對,就這么簡單,雖然說這個并不是一個針對VR的項目。

這里做了一些簡單的設置
1、發(fā)現(xiàn)攝像機是以預設軌道在飛,而且明顯感覺幀率不高,哦,好暈。為了比較方便衡量接下來優(yōu)化,我做了一些攝像機的設置,讓攝像機開始游戲后固定在一個我認為幀數最低的畫面。
2、確保幀數沒有被限制住,關閉垂直同步,把最高幀數限制上限提高好了,再run一下,固定住了,轉轉頭可以,hmm。。真的挺卡的

再接個命令證實一下,最直接和GPU渲染效率有關的就是分辨率嘍
HMD SP 100    54FPS
幀數立馬提高不少,果然是GPU渲染瓶頸
 
降低渲染品質
Adjust scalability to medium  72FPS
成功了? 還沒有哦,這個太暴力了
這個肯定不是最優(yōu)的優(yōu)化結果了。因為肯定有些可以進一步做大量的優(yōu)化,有些和視覺相關比較大的調整可以提高質量。而非粗暴的都調低了,那接下來就得找原因了
 
打開GPUprofiling: (Ctrl+Shift+,)
看下最大的GPU開銷在哪里

  1. Base pass:              Deferred Decals
  2. Lighting:                ReflectionEnvironment:
  3. Translucency:        Postprocessing:

 
從最大開銷的幾個點入手
BASEPASS: 敲入幾個渲染選項命令行:
r.Earlyzpass 1:增加draw calls和一部分GPU的消耗,但大大降低base pass的消耗
關閉了一些不需要的PP效果
一套最優(yōu)POP設置組合:

  1. Postprocessing setting:
  2. Scene color;
  3. Fringe intensity                  0
  4. Grain intensity                   0
  5. Color grading intensity     0
  6. Bloom setting
  7. LPV                                     0
  8. Ambient occlusion            0
  9. DOF Method Gaussian, 其他參數 全部 0
  10. Motion blur all                  0
  11. AA FXAA
  12. SSR 0 MAX roughness      0.01
  13. Ambient cubemap            0

再VR preview,
嗯,還是75,當然了,DK2上頂格是75,再優(yōu)化看不出效果
13.39ms        75FPS
 
把品質調高成high   Scalability high,還是75,哈哈,沒問題!
現(xiàn)在算優(yōu)化完了吧? 其實還可以再優(yōu)化,這時候的優(yōu)化就是以盡量提升畫質但不降低幀數為目標。
 

看看哪些還可以優(yōu)化的?   當然有 !之前的Translucency花費好高
Viewmode: shade complexity 好紅, 一堆overdraw
Decal的花費也很高, Stat scenerendering, decals in view
環(huán)境反射的花費很高: 選中sphere reflection capture, 看一下總共有幾個,觀察他們影響范圍是否重疊嚴重
 
Vertex intensity: 好密啊。高密度的三角面幾乎看上去就像一個實體了, 一個三角面的大小在屏幕上的面積小于2*2個像素就會極大的增加開銷
還有Particle 。
現(xiàn)在基本上已經定位到可執(zhí)行層面的原因了,一些原因也已經通過可接受的渲染參數調整解決了;另外一些就必須要artist來優(yōu)化Assets本身了。
哪些工作最快,質量損失最小,能夠換其他更能提升品質的選項。
啟示他們并不需要這么多面,assets的優(yōu)化需要更多的時間。把scaleability有些選項提升到EPIC,當然他們并不是全部
 
 
一些引起DRAW CALL數量多的原因

  1. 同屏看到的Actor太多,如果材質復雜這個因素還會加成。 合并Actor,尤其是中遠處
  2. 材質ID太多(or Section; Mesh elements)。重用材質貼圖,盡量把同一材質物體合成為一個物體
  3. 每個actor上的feature太多。主要是增加投影的屬性,增加custom depth的屬性
  4. 太多燈光投影(這里投影的消費來自于需要計算哪些物體需要被投影)

MESH DRAW CALL往往是個大頭,MESH ID 的數量可以在STATISTICS統(tǒng)計可以很方便的查看,從經驗判斷哪些資源制作不合理
 
關于ACTOR設置feature會增加DRAW CALL數的是投影和custom depth,可以通過一些工具來檢查這些設置。使用property matrix來過濾,檢查,并修改
 
另外一個經常使用的查找原因的方法排除法
通過隱藏各種元素,尋找哪個是導致DRAW CALL數量的大頭
記得隱藏HUD,有的時候HUD也是個大頭之一
Showflag.slate         1
如果是GPU瓶頸,最快速的驗證方式就是改變分辨率,降低分辨率可以極大提高幀數。為了抵消畸變糾正而產生的圖像模糊,或者分辨率的丟失,在渲染的的buff里往往是實際屏幕尺寸的120-130%,這樣增加了圖像的銳利度,但降低了渲染的速度。
HMD SP全稱是HMD 的screen percentage, 這個參數就是來修改渲染buff的尺寸的,HMD SP 120是默認值,改成100看看。
如果像剛才例子看到的,幀數有大幅度的提高,那就是GPU負擔太大的問題了,如果分辨率的改變對于幀數影響不大,很有可能是因為面太多了。
 

對這些內容重點做檢查,看看有沒有超標的現(xiàn)象出現(xiàn)

  1. 分辨率
  2. HMD SP
  3. 投影貼圖
  4. 面數/點數(燈光的多少,陰影的設置,多少物體)
  5. LOD,關閉shadow,燈光屏幕面積
  6. 面數密度太高,高到一個三角面小于2*2的像素,這個往往發(fā)生在遠處物體
  7. 點處理,點太多
  8. 點動畫的shader太復雜
  9. tessellation太復雜
  10. 太多UV,太多SG
  11. 查看staticmesh editor里點和面數的差別是否大
  12. 點沒有合并等
  13. view cost(HZB occlusion culling)
  14. Precumputed visibility volume
  15. Scene cost GPU particle simulation
  16. 材質復雜度 
  17. quality switch,sin, pow, cos, divide, Noise很費
  18. 由于Texture 太多,太大 Texture caching反復的page in and out of 顯存
  19. 遮擋的culling計算
  20. Precumputed visibility volume
  21. 延遲燈光

當使用lighting function,IES,接受投影,區(qū)域光,復雜shading modes的時候會變得更貴
反射ssr有問題,關掉。 后期, AO,很費
 
知道哪里有問題了,接下來就可以著手行動了,但之前做個目標規(guī)劃還是可以事半功倍的。
最小化圖像質量妥協(xié),是一種有的放矢的妥協(xié)策略。比如高質量的陰影對于高品質的抗鋸齒而言對于最終項目實際的表達效果次要。減小陰影品質來換取高品質AA就是一種有的放矢的妥協(xié)策略。因此盡量大的減小不是非常關心的渲染品質部分,增加更可見的渲染品質部分。
從容易做起,從開關一些渲染選項,品質參數調整,到直接刪東西,優(yōu)化一個用到幾百次的物件,這些都是立竿見影的方式,這樣可以做允許的時間計劃內完成目標,如果有更多時間和預算可以對相對低性價比的。
目標75幀是必須的,不要說68,70,都不行,必須75,做實際體驗中有很大區(qū)別。
 
最常見的問題所在

  1. 測試環(huán)境不合適,燈光沒有build
  2. Actor或者材質ID太多
  3. 面太多,沒有任何的LOD設置
  4. 燈光使用沒有節(jié)制: 各種動態(tài)投影,燈光類型隨意
  5. 沒有合理的設置CULL的條件
  6. 透明太多
  7. Postprocess太高級了

這些原因又互相影響,一方面的增加也會增加另外方面的開銷
 

其他一些VR的特有行為

  1. VR 需要畸變色差糾正
  2. VR需要雙屏
  3. VR需要更大的渲染分辨率
  4. VR需要傳遞傳感器信息

比如對于oculus部分是在驅動層級做掉了,比如如何糾正畸變,如何雙屏,如何傳遞傳感器信息。
對于傳感器信息和視頻匹配的準確性,以及渲染的屏幕覆蓋率,在UE4里是可以根據需要來修改的,除了這些,其他就和以往的優(yōu)化思路一致了。
 

創(chuàng)建測試環(huán)境。找原因

  1. Testing in a stable enviroment
  2. run Standalone game
  3. use pause or slomo 0.001 to prevent random numbers
  4. Measuring few times
  5. 確保幀數不封頂
  6. s.Vsync 0
  7. s.MaxFPS
  8. 了解瓶頸
  9. GPU瓶頸
  10. profileGPU(ctol+shift+,)
  11. 分辨率
  12. HMD SP
  13. 投影貼圖
  14. 面數/點數(燈光的多少,陰影的設置,多少物體)
  15. LOD,關閉shadow,燈光屏幕面積
  16. 面數密度太高,高到一個三角面小于2*2的像素,這個往往發(fā)生在遠處物體
  17. 點處理,點太多
  18. 點動畫的shader太復雜
  19. tessellation太復雜
  20. 太多UV,太多SG
  21. 查看staticmesh editor里點和面數的差別是否大
  22. 點沒有合并等
  23. view cost(HZB occlusion culling)
  24. Precumputed visibility volume
  25. Scene cost GPU particle simulation
  26. 材質復雜度 
  27. quality switch,sin, pow, cos, divide, Noise很費
  28. 遮擋的culling計算
  29. Precumputed visibility volume
  30. 延遲燈光
  31. 當使用lighting function,IES,接受投影,區(qū)域光,復雜shading modes的時候會變得更貴
  32. 反射ssr有問題,關掉,后期AO,很費
  33. cup瓶頸,CUP GAME瓶頸
  34. stat game
  35. AI復雜度
  36. BP
  37. raycast
  38. 物理
  39. 內存分配
  40. CUP RENDER瓶頸
  41. stat scenerendering
  42. 材質ID太多
  43. 重用材質貼圖,盡量把同一材質物體合成為一個物體
  44. actor太多,如果材質復雜這個因素還會加成
  45. 合物體,尤其是中遠處
  46. 每個actor上的feature太多,比如增加投影的屬性,增加custom depth的屬性
  47. 太多燈光投影(這里投影的消費來自于需要計算哪些物體需要被投影)

找到瓶頸的方法

  1. stat unit
  2. disable一些stuff,然后看效率上的區(qū)別
  3. 一些可調的show flag
  4. 開關屏幕反射
  5. 開關AO
  6. 開關AA
  7. 開關bloom
  8. 開關延遲燈光
  9. 開關燈光類型
  10. 開關動態(tài)陰影
  11. 開關GI
  12. 開關后期
  13. 開關環(huán)境反射
  14. 開關折射
  15. 開關貼畫
  16. 開關半透明
  17. 開關tessellation
  18. viemode
  19. ProfileGPU
  20. ProfileCPU
  21. stat game
  22. stat scenerendering
  23. Profiler
     


 
后期優(yōu)化首選項:

  1. Scene color fringe;
  2. ambient cubemap,
  3. image based lens flares;
  4. LPV off;  
  5. Grain intensity,
  6. DOF off,
  7. ssr off,
  8. or roughness 0.01;
  9. Motion blur off

最后選擇的參數需要應用到DEVICE PROFILES里或者BP里
 
減小 shader的 instruction的數量
減少Texture sample的數量:把經常使用到同一個物體上的Pattern合在一張貼圖上;去掉對質量影響很小的貼圖,比如Specular,AO在實際情況中平衡來使用
使用quality switch,sin, pow, cos, divide, Noise,多向量的計算總是大于單向量的計算
 
UE4里由于使用了延遲燈光,所以燈光的優(yōu)化比前向渲染方便的多。最快速最有效的方法:使用靜態(tài)光源。
如果使用的事動態(tài)光減小 Lighting cull,半徑,衰減,Z INTERSSECTION, cone大小角度。總之盡量減少重疊
 
投影的開銷最大往往不是來自于pixel shader,而是來自于被投影的mesh面數太多,還會被燈光數量,投影物體數量放大
關閉投影的燈光;減小范圍或張角;減面,加LOD
 r.Shadow.MaxResolution
 
創(chuàng)造性作假:

  1. 三角面:
  2. 遠處mattinpaiting
  3. 投影面片,畫在貼圖上

 
一個作品的優(yōu)化不是一朝一夕的事情,需要確定目標配置:確定最低配置,配置范圍小,這樣的優(yōu)化才更有針對性,并且學會在開闊的視野在設計時需要巧妙的避免不必要的內容,學會如何制定Budget:質量優(yōu)先驅動;快速原型制作;分析制定
對內容制作者前期的培訓花費是值得的,完成這些工作之后,一個高品質的VR作品就會誕生。


朱峰社區(qū)3dsmax2016模擬學習系統(tǒng) 朱峰社區(qū)3dsmax2016模擬學習系統(tǒng)

朱峰社區(qū)網頁版
朱峰社區(qū)網頁版(手機掃描-分享-添加到屏幕)


朱峰社區(qū)公眾號
朱峰社區(qū)微信公眾號(微信掃一掃-關注)

資源說明圖文教程無法下載,只能觀看圖片和文字。
版權規(guī)則本站圖文皆來自互聯(lián)網共享資源,如涉及到版權請查看版權規(guī)則。本平臺提供圖文僅可用于個人學習,如用于商業(yè)請購買正版。您必須遵守的版權規(guī)則

未知用戶

未知用戶

hsa900909

hsa900909

普通會員

原來是這個樣子的
sdfsdf -hsa900909

贊0

踩0

17年2月6日

2005-2024 朱峰社區(qū) 版權所有 遼ICP備2021001865號-1
2005-2024 ZhuFeng Community All Rights Reserved

VIP

朱峰社區(qū)微信公眾號

回頂部

1.復制文本發(fā)給您的QQ好友或群、微信等;好友點擊鏈接以后,轉發(fā)就成功了。 2.如朋友點擊您的鏈接,您需要需刷新一下才行;同一個好友僅能點擊一次。
購買VIP,觀看所有收費教程!