Unity5中VR應(yīng)用性能優(yōu)化的12技巧

來源:游資網(wǎng) 更新日期:2016-03-27 作者:佚名

    VR應(yīng)用比非VR應(yīng)用需要更強(qiáng)的計(jì)算,性能優(yōu)化是一個(gè)很重要的任務(wù)。若目標(biāo)平臺(tái)是像GearVR這樣的手機(jī)設(shè)備,優(yōu)化就更重要了。

    以下是一些應(yīng)該試著了解的性能指標(biāo):

    每只眼睛50次繪制調(diào)用。unity5更精確地將其稱為SetPass Calls。

    場(chǎng)景中頂點(diǎn)數(shù)少于50K~100K 且面數(shù)少于50~100K 。

    下面是一些簡(jiǎn)單的技巧,用于滿足上述要求:

    靜態(tài)批處理

    場(chǎng)景中可能存在大量的靜態(tài)幾何體,例如墻體,椅子,燈光和從不移動(dòng)的網(wǎng)格。在編輯器中將它們標(biāo)記為靜態(tài)對(duì)象。為烘焙光照貼圖,請(qǐng)確保將其標(biāo)記為靜態(tài)貼圖。不要讓每個(gè)對(duì)象都會(huì)導(dǎo)致一次繪制調(diào)用,而是把對(duì)象標(biāo)記為可被組合成一個(gè)網(wǎng)格的靜態(tài)對(duì)象。

    靜態(tài)批處理有個(gè)關(guān)鍵要求:所有對(duì)象必須使用相同的材質(zhì)。若靜態(tài)墻帶有木頭材質(zhì),靜態(tài)椅子帶有鐵材質(zhì),所有墻會(huì)被批量處理為一次繪制調(diào)用,椅子作為單獨(dú)網(wǎng)格進(jìn)行另外的繪制調(diào)用。

    紋理集

    如之前所說,每個(gè)材質(zhì)引發(fā)一次繪制調(diào)用。直覺可能是木門和鐵椅子需要使用不同的材質(zhì),由于它們的紋理不同。然而,若使用相同的著色器,就可以用紋理集為它們創(chuàng)建共用的材質(zhì)。紋理集就是一個(gè)包含所有小紋理的大紋理。我們可以使用一個(gè)材質(zhì)加載一個(gè)紋理,而非使用多個(gè)材質(zhì)加載多次。每個(gè)對(duì)象可以對(duì)應(yīng)到紋理集中不同坐標(biāo)的一個(gè)紋理。

    你可以的繪制管線中手動(dòng)生成紋理集,但是Juan Sebastian的Pro Draw Call Optimizer工具非常有用。它可以生成紋理集,并且在替換新對(duì)象時(shí)不會(huì)搞混資源。

    動(dòng)態(tài)批處理

    非靜態(tài)對(duì)象可以動(dòng)態(tài)批處理為一個(gè)單獨(dú)的繪制調(diào)用。我曾注意到該過程大量占用CPU且每幀都在計(jì)算,但這是一個(gè)很好的優(yōu)化。這只對(duì)使用相同材質(zhì)且頂點(diǎn)數(shù)少于900的對(duì)象有效。使用紋理集為所有的動(dòng)態(tài)對(duì)象創(chuàng)建一個(gè)材質(zhì),就可以進(jìn)行簡(jiǎn)單的動(dòng)態(tài)批處理啦。

    LODs(多細(xì)節(jié)層次)

    LOD組是改善性能的簡(jiǎn)便方法。使用有多個(gè)LOD的資源,并用低分辨率的幾何體渲染離相機(jī)遠(yuǎn)的對(duì)象。Unity可以自動(dòng)隨著相機(jī)臨近在各個(gè)LOD間轉(zhuǎn)換。

    填充率,過度繪制及裁剪

    這是個(gè)值得關(guān)注的話題。減少過度繪制,最遠(yuǎn)的對(duì)象最先繪制,隨后上面依次繪制更近的對(duì)象。這個(gè)在平均分辨率為1080P的PC顯示器上沒什么問題,但對(duì)于有極高分辨率的VR和手機(jī)設(shè)備來說問題就比較嚴(yán)重。大量的過度繪制組成了大量像素從而影響填充率。紋理填充率是限制GPU性能的關(guān)鍵。

    一些解決方案提供了遮擋剔除和視錐體剔除。視錐體剔除是指不渲染位于相機(jī)視錐體外的對(duì)象。不渲染看不到的對(duì)象!遮擋剔除是剔除被其它對(duì)象擋住的對(duì)象。比如,門后的房間可以被整體剔除。默認(rèn)情況下,遮擋剔除是針對(duì)整個(gè)場(chǎng)景的,如果關(guān)卡設(shè)計(jì)得當(dāng)甚至可以讓你剔除游戲中的整個(gè)關(guān)卡。

    LOD組當(dāng)然也可以裁剪離場(chǎng)景很遠(yuǎn)的對(duì)象,進(jìn)一步使填充率最小化。

    關(guān)卡設(shè)計(jì)

    若游戲涉及到玩家從一個(gè)房間移到另一個(gè)房間,簡(jiǎn)單的解決方法是一個(gè)關(guān)卡包含整個(gè)游戲。缺點(diǎn)在于內(nèi)存的消耗。盡管每個(gè)房間中的各對(duì)象和材質(zhì)都不可見,但其仍會(huì)被加載到內(nèi)存中。將每個(gè)房間放置于單獨(dú)的關(guān)卡中,在代碼中智能的異步加載關(guān)卡可以改善性能。

    異步加載

    在玩家即將進(jìn)入下個(gè)房間之前,加載下一個(gè)關(guān)卡。不要使用Application.LoadLevel()同步加載,因?yàn)榧虞d時(shí)會(huì)導(dǎo)致游戲掛起。由于頭盔的跟蹤是實(shí)時(shí)的,這會(huì)導(dǎo)致眩暈,對(duì)玩家來說體驗(yàn)太糟糕。

    使用Application.LoadLevelAsync()來加載關(guān)卡。你可以在Oculus Mobile SDK BlockSplosion例子的StartupSample.cs中找到使用方法。

    光照烘焙

    關(guān)掉實(shí)時(shí)陰影!接受動(dòng)態(tài)陰影的對(duì)象不會(huì)被批處理,這會(huì)導(dǎo)致嚴(yán)重的繪制調(diào)用。

    在PC機(jī)上,使用單個(gè)實(shí)時(shí)方向光就可以實(shí)現(xiàn)很好的動(dòng)態(tài)陰影效果。對(duì)于大多數(shù)現(xiàn)代的PC都可以提供逼真的逐像素陰影。然而在移動(dòng)平臺(tái),你需要烘焙光照而不是實(shí)時(shí)陰影,以高分辨率烘焙光照結(jié)合軟硬陰影實(shí)現(xiàn)類似的效果。

    陰影

    尤其是為了高性能的手機(jī)體驗(yàn),對(duì)于3D對(duì)象的陰影處理要使用傳統(tǒng)技巧。可以通過在對(duì)象下放置一個(gè)簡(jiǎn)單的帶有模糊陰影紋理的2D四邊形模擬半真實(shí)的陰影。

    VR Jam tip: Don’t try to use shadow buffers. Pre-light environments and use old-school blurry shadow blobs under characters.

    John Carmack (@ID_AA_Carmack) April 26, 2015

    VR小提示:不要嘗試使用陰影緩沖。預(yù)處理光照環(huán)境并在角色下方使用老套的模糊陰影紋理處理方法。

    例如,你Hold不住像《GTA V》中這種在高性能PC機(jī)上使用的實(shí)時(shí)動(dòng)態(tài)陰影。

    用如下方法代替:這是一張2002年《GTA Vice City》的游戲截圖,你可以在Playstation 2上使用陰影斑點(diǎn)來提供陰影效果的幻覺。

    Light Probes(光照探針)

    當(dāng)使用烘培光照時(shí),靜態(tài)對(duì)象效果不錯(cuò)但動(dòng)態(tài)對(duì)象還有不妥。對(duì)于動(dòng)態(tài)對(duì)象可以使用光照探針來模擬簡(jiǎn)單的動(dòng)態(tài)光照。

    光照探針是烘焙好的立方貼圖,存儲(chǔ)了場(chǎng)景中多個(gè)點(diǎn)直接、間接甚至自發(fā)光的信息。當(dāng)動(dòng)態(tài)對(duì)象移動(dòng)時(shí),它在光照探測(cè)器附近進(jìn)行插值獲取近似某個(gè)點(diǎn)的光照。這是一種在動(dòng)態(tài)對(duì)象上模擬實(shí)時(shí)光照的簡(jiǎn)便辦法,而不用成本高昂的實(shí)時(shí)光照。

    Unity的文檔解釋了光照探針要如何放置。

    避免使用透明和多個(gè)材質(zhì)的對(duì)象

    類似玻璃這種使用透明著色器的對(duì)象很消耗性能。使墻壁看起來更逼真的常見做法是,用一個(gè)帶有灰塵或銹斑紋理的透明材質(zhì),加上另一個(gè)單獨(dú)的基本漫射材質(zhì)。多材質(zhì)的alpha混合是很消耗性能的,每個(gè)材質(zhì)都會(huì)增加一次繪制調(diào)用!但是請(qǐng)注意:多個(gè)紋理并沒有問題,使用多個(gè)材質(zhì)才耗費(fèi)性能。使用一個(gè)材質(zhì)結(jié)合著色器來實(shí)現(xiàn)多紋理的alpha混合,而非使用多個(gè)單獨(dú)材質(zhì)。

    蒙皮網(wǎng)格渲染器

    蒙皮網(wǎng)格渲染器常用于角色身上,它帶有動(dòng)畫關(guān)節(jié),可以使用物理(布娃娃)變或自定義動(dòng)畫(走,跳等)來實(shí)現(xiàn)逼真的網(wǎng)格變形。

    壞消息是:蒙皮網(wǎng)格渲染器不支持批處理。對(duì)于每只眼睛,場(chǎng)景中各角色都會(huì)進(jìn)行多次繪制調(diào)用。目前還沒什么解決方案。

 標(biāo)簽:VR軟件 應(yīng)用技巧
廣告聯(lián)系:010-82755684 | 010-82755685 手機(jī)版:m.pjtime.com官方微博:weibo.com/pjtime官方微信:pjtime
Copyright (C) 2007 by PjTime.com,投影時(shí)代網(wǎng) 版權(quán)所有 關(guān)于投影時(shí)代 | 聯(lián)系我們 | 歡迎來稿 | 網(wǎng)站地圖
返回首頁(yè) 網(wǎng)友評(píng)論 返回頂部 建議反饋
快速評(píng)論
驗(yàn)證碼: 看不清?點(diǎn)一下
發(fā)表評(píng)論