網站性能檢測評分
注:本網站頁面html檢測工具掃描網站中存在的基本問題,僅供參考。
幀率
LG G3 上手:市面上屏占比最高的手機 互聯(lián)網視頻課程
看虛幻引擎技術大神分享燒腦干貨《克服VR眩暈之幀數(shù):提升UE4內容實時渲染效率》 效率視頻課程
在10月24日精彩落幕的2015創(chuàng)領發(fā)現(xiàn)VRDAY的活動中,主辦方創(chuàng)領發(fā)現(xiàn)(UCCVR)有幸邀請到了虛幻引擎的原廠技術大牛來現(xiàn)場與各位VR相關的制作人/開發(fā)者進行面對面的交流與分享。下面讓我們來仔細解讀一下該場分享的技術內容。 ?VR已經成為了當今最火熱的一個話題,帶上頭盔之后,從此進入一個奇妙的世界,在這里你不再是觀眾,你參與這個世界發(fā)生的每一件事件。整個世界從此與眾不同。在賽道上飛馳,在戰(zhàn)場上縱橫。 但是生理機制讓我們的大腦在身體并沒有移動,而視覺在不斷告訴我正在飛速前行的迷惑中產生了暈眩。如何解決因為VR而產生的眩暈,就成為每一位設計師需要面對的問題。 引起VR眩暈有很多原因,比如設計上的,技術上的。渲染的幀數(shù)高低必定是其中一個最主要的原因之一。關于UE4里對VR內容的優(yōu)化方法和思路大部分是和傳統(tǒng)的3D游戲優(yōu)化是一致的,有部分是VR尤其相關的。接下來就以Oculus為平臺和大家一起分享一下在UE4里常見內容的一些設置和優(yōu)化的思路和方法。 首先我們來看一個優(yōu)化過程的實例,先有個大概的了解。打開一個UE4下載的項目,particlecave,VRpreview,帶上眼鏡就能體驗了,對,就這么簡單,雖然說這個并不是一個針對VR的項目。 這里做了一些簡單的設置:?1.發(fā)現(xiàn)攝像機是以預設軌道在飛,而且明顯感覺幀率不高,哦,好暈。為了比較方便衡量接下來優(yōu)化,我做了一些攝像機的設置,讓攝像機開始游戲后固定在一個我認為幀數(shù)最低的畫面。 2.確保幀數(shù)沒有被限制住,關閉垂直同步,把最高幀數(shù)限制上限提高好了,再run一下,固定住了,轉轉頭可以,真的挺卡的。 再接個命令證實一下,最直接和GPU渲染效率有關的就是分辨率。 HMDSP10054FPS?幀數(shù)立馬提高不少,果然是GPU渲染瓶頸! 降低渲染品質?Adjustscalabilitytomedium72FPS?成功了?還沒有哦,這個太暴力了,這個肯定不是最優(yōu)的優(yōu)化結果了。因為肯定有些可以進一步做大量的優(yōu)化,有些和視覺相關比較大的調整可以提高質量。而非粗暴的都調低了,那接下來就得找原因了。 打開GPUprofiling:(Ctrl+Shift+,)?看下最大的GPU開銷在哪里: Basepass:DeferredDecals Lighting:ReflectionEnvironment: Translucency:Postprocessing: 從最大開銷的幾個點入手:?BASEPASS:敲入幾個渲染選項命令行:?r.Earlyzpass1:增加drawcalls和一部分GPU的消耗,但大大降低basepass的消耗?關閉了一些不需要的PP效果?一套最優(yōu)POP設置組合: Postprocessingsetting: Scenecolor; Fringeintensity0 Grainintensity0 Colorgradingintensity0 Bloomsetting LPV0 Ambientocclusion0 DOFMethodGaussian,其他參數(shù)全部0 Motionblurall0 AAFXAA SSR0MAXroughness0.01 Ambientcubemap0 再VRpreview,?嗯,還是75,當然了,DK2上頂格是75,再優(yōu)化看不出效果?13.39ms75FPS? 把品質調高成highScalabilityhigh,還是75,哈哈,沒問題!?現(xiàn)在算優(yōu)化完了吧?其實還可以再優(yōu)化,這時候的優(yōu)化就是以盡量提升畫質但不降低幀數(shù)為目標。? 看看哪些還可以優(yōu)化的?當然有!之前的Translucency花費好高。?Viewmode:shadecomplexity好紅,一堆overdraw?Decal的花費也很高,Statscenerendering,decalsinview?環(huán)境反射的花費很高:選中spherereflectioncapture,看一下總共有幾個,觀察他們影響范圍是否重疊嚴重。 ? Vertexintensity:好密啊。高密度的三角面幾乎看上去就像一個實體了,一個三角面的大小在屏幕上的面積小于2*2個像素就會極大的增加開銷。 還有Particle。?現(xiàn)在基本上已經定位到可執(zhí)行層面的原因了,一些原因也已經通過可接受的渲染參數(shù)調整解決了;另外一些就必須要artist來優(yōu)化Assets本身了。哪些工作最快,質量損失最小,能夠換其他更能提升品質的選項。 啟示他們并不需要這么多面,assets的優(yōu)化需要更多的時間。把scaleability有些選項提升到EPIC,當然他們并不是全部。 一些引起DRAWCALL數(shù)量多的原因: 同屏看到的Actor太多,如果材質復雜這個因素還會加成。合并Actor,尤其是中遠處 材質ID太多(orSection;Meshelements)。重用材質貼圖,盡量把同一材質物體合成為一個物體 每個actor上的feature太多。主要是增加投影的屬性,增加customdepth的屬性 太多燈光投影(這里投影的消費來自于需要計算哪些物體需要被投影) MESHDRAWCALL往往是個大頭,MESHID的數(shù)量可以在STATISTICS統(tǒng)計可以很方便的查看,從經驗判斷哪些資源制作不合理。 ??關于ACTOR設置feature會增加DRAWCALL數(shù)的是投影和customdepth,可以通過一些工具來檢查這些設置。使用propertymatrix來過濾,檢查,并修改。? ?另外一個經常使用的查找原因的方法排除法:?通過隱藏各種元素,尋找哪個是導致DRAWCALL數(shù)量的大頭?記得隱藏HUD,有的時候HUD也是個大頭之一。 Showflag.slate1?如果是GPU瓶頸,最快速的驗證方式就是改變分辨率,降低分辨率可以極大提高幀數(shù)。為了抵消畸變糾正而產生的圖像模糊,或者分辨率的丟失,在渲染的的buff里往往是實際屏幕尺寸的120-130%,這樣增加了圖像的銳利度,但降低了渲染的速度。 ?HMDSP全稱是HMD的screenpercentage,這個參數(shù)就是來修改渲染buff的尺寸的,HMDSP120是默認值,改成100看看。 ?如果像剛才例子看到的,幀數(shù)有大幅度的提高,那就是GPU負擔太大的問題了,如果分辨率的改變對于幀數(shù)影響不大,很有可能是因為面太多了。?? 對這些內容重點做檢查,看看有沒有超標的現(xiàn)象出現(xiàn): 分辨率 HMDSP 投影貼圖 面數(shù)/點數(shù)(燈光的多少,陰影的設置,多少物體) LOD,關閉shadow,燈光屏幕面積 面數(shù)密度太高,高到一個三角面小于2*2的像素,這個往往發(fā)生在遠處物體 點處理,點太多 點動畫的shader太復雜 tessellation太復雜 太多UV,太多SG 查看staticmesheditor里點和面數(shù)的差別是否大 點沒有合并等 viewcost(HZBocclusionculling) Precumputedvisibilityvolume ScenecostGPUparticlesimulation 材質復雜度 qualityswitch,sin,pow,cos,pide,Noise很費 由于Texture太多,太大Texturecaching反復的pageinandoutof顯存 遮擋的culling計算 Precumputedvisibilityvolume 延遲燈光 當使用lightingfunction,IES,接受投影,區(qū)域光,復雜shadingmodes的時候會變得更貴。?反射ssr有問題,關掉。后期,AO,很費。? ?知道哪里有問題了,接下來就可以著手行動了,但之前做個目標規(guī)劃還是可以事半功倍的。最小化圖像質量妥協(xié),是一種有的放矢的妥協(xié)策略。比如高質量的陰影對于高品質的抗鋸齒而言對于最終項目實際的表達效果次要。減小陰影品質來換取高品質AA就是一種有的放矢的妥協(xié)策略。因此盡量大的減小不是非常關心的渲染品質部分,增加更可見的渲染品質部分。 ?從容易做起,從開關一些渲染選項,品質參數(shù)調整,到直接刪東西,優(yōu)化一個用到幾百次的物件,這些都是立竿見影的方式,這樣可以做允許的時間計劃內完成目標,如果有更多時間和預算可以對相對低性價比的。目標75幀是必須的,不要說68,70,都不行,必須75,做實際體驗中有很大區(qū)別。? 最常見的問題所在: 測試環(huán)境不合適,燈光沒有build Actor或者材質ID太多 面太多,沒有任何的LOD設置 燈光使用沒有節(jié)制:各種動態(tài)投影,燈光類型隨意 沒有合理的設置CULL的條件 透明太多 Postprocess太高級了 這些原因又互相影響,一方面的增加也會增加另外方面的開銷:? 其他一些VR的特有行為: VR需要畸變色差糾正 VR需要雙屏 VR需要更大的渲染分辨率 VR需要傳遞傳感器信息 比如對于Oculus部分是在驅動層級做掉了,比如如何糾正畸變,如何雙屏,如何傳遞傳感器信息。對于傳感器信息和視頻匹配的準確性,以及渲染的屏幕覆蓋率,在UE4里是可以根據(jù)需要來修改的,除了這些,其他就和以往的優(yōu)化思路一致了。 創(chuàng)建測試環(huán)境,找原因: Testinginastableenviroment runStandalonegame usepauseorslomo0.001topreventrandomnumbers Measuringfewtimes 確保幀數(shù)不封頂 s.Vsync0 s.MaxFPS 了解瓶頸 GPU瓶頸 profileGPU(ctol+shift+,) 分辨率 HMDSP 投影貼圖 面數(shù)/點數(shù)(燈光的多少,陰影的設置,多少物體) LOD,關閉shadow,燈光屏幕面積 面數(shù)密度太高,高到一個三角面小于2*2的像素,這個往往發(fā)生在遠處物體 點處理,點太多 點動畫的shader太復雜 tessellation太復雜 太多UV,太多SG 查看staticmesheditor里點和面數(shù)的差別是否大 點沒有合并等 viewcost(HZBocclusionculling) Precumputedvisibilityvolume ScenecostGPUparticlesimulation 材質復雜度 qualityswitch,sin,pow,cos,pide,Noise很費 遮擋的culling計算 Precumputedvisibilityvolume 延遲燈光 當使用lightingfunction,IES,接受投影,區(qū)域光,復雜shadingmodes的時候會變得更貴 反射ssr有問題,關掉,后期AO,很費 cup瓶頸,CUPGAME瓶頸 statgame AI復雜度 BP raycast 物理 內存分配 CUPRENDER瓶頸 statscenerendering 材質ID太多 重用材質貼圖,盡量把同一材質物體合成為一個物體 actor太多,如果材質復雜這個因素還會加成 合物體,尤其是中遠處 每個actor上的feature太多,比如增加投影的屬性,增加customdepth的屬性 太多燈光投影(這里投影的消費來自于需要計算哪些物體需要被投影)? 找到瓶頸的方法: statunit disable一些stuff,然后看效率上的區(qū)別 一些可調的showflag 開關屏幕反射 開關AO 開關AA 開關bloom 開關延遲燈光 開關燈光類型 開關動態(tài)陰影 開關GI 開關后期 開關環(huán)境反射 開關折射 開關貼畫 開關半透明 開關tessellation viemode ProfileGPU ProfileCPU statgame statscenerendering Profiler? 后期優(yōu)化首選項: Scenecolorfringe; ambientcubemap, imagebasedlensflares; LPVoff; Grainintensity, DOFoff, ssroff, orroughness0.01; Motionbluroff 最后選擇的參數(shù)需要應用到DEVICEPROFILES里或者BP里:? ?減小shader的instruction的數(shù)量:?減少Texturesample的數(shù)量:把經常使用到同一個物體上的Pattern合在一張貼圖上;去掉對質量影響很小的貼圖,比如Specular,AO在實際情況中平衡來使用qualityswitch,sin,pow,cos,pide,Noise,多向量的計算總是大于單向量的計算。 ??UE4里由于使用了延遲燈光,所以燈光的優(yōu)化比前向渲染方便的多。最快速最有效的方法:使用靜態(tài)光源。如果使用的是動態(tài)光減小Lightingcull,半徑,衰減,ZINTERSSECTION,cone大小角度??傊M量減少重疊。? 投影的開銷最大往往不是來自于pixelshader,而是來自于被投影的mesh面數(shù)太多,還會被燈光數(shù)量,投影物體數(shù)量放大。?關閉投影的燈光;減小范圍或張角;減面,加LOD?r.Shadow.MaxResolution? 創(chuàng)造性作假: 三角面: 遠處mattinpaiting 投影面片,畫在貼圖上 一個作品的優(yōu)化不是一朝一夕的事情,需要確定目標配置:確定最低配置,配置范圍小,這樣的優(yōu)化才更有針對性,并且學會在開闊的視野在設計時需要巧妙的避免不必要的內容,學會如何制定Budget:質量優(yōu)先驅動;快速原型制作;分析制定。 對內容制作者前期的培訓花費是值得的,完成這些工作之后,一個高品質的VR作品就會誕生。 2015創(chuàng)領發(fā)現(xiàn)VR/AR行業(yè)大賽,舉辦的宗旨是為了更好的尋找和發(fā)現(xiàn)優(yōu)秀的VR/AR制作人/開發(fā)者,我們將圍繞著與開發(fā)相關的任何需求,打造國內最專業(yè)的VR/AR社區(qū)與孵化平臺。大家可以登錄www.uccreate.com官方網站進行提前報名,不限于Demo或者成品,大賽截止時間安排在于明年3月,感興趣的伙伴們可以抓緊啦!