菜鳥(niǎo)在線(xiàn)分享Unity5中優(yōu)化VR 應用的12個(gè)技巧(轉載)

3年前 (2021-07-04)閱讀455回復0
拼版印刷印刷
拼版印刷印刷
  • 管理員
  • 發(fā)消息
  • 注冊排名763
  • 經(jīng)驗值95
  • 級別管理員
  • 主題19
  • 回復0
樓主
印刷廠(chǎng)直印加工●彩頁(yè)1000張只需要69元●名片5元每盒-更多產(chǎn)品印刷報價(jià)?聯(lián)系電話(huà):138-1621-1622(微信同號)

  VR應用比非VR應用需要更強的計算,性能優(yōu)化是一個(gè)很重要的任務(wù)。若目標平臺是像GearVR這樣的手機設備,優(yōu)化就更重要了。

  以下是一些應該試著(zhù)了解的性能指標:

  每只眼睛50次繪制調用。Unity5更精確地將其稱(chēng)為SetPass Calls。

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

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

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

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

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

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

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

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

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

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

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

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

  異步加載在玩家即將進(jìn)入下個(gè)房間之前,加載下一個(gè)關(guān)卡。不要使用Application.LoadLevel()同步加載,因為加載時(shí)會(huì )導致游戲掛起。由于頭盔的跟蹤是實(shí)時(shí)的,這會(huì )導致眩暈,對玩家來(lái)說(shuō)體驗太糟糕。

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

  光照烘焙關(guān)掉實(shí)時(shí)陰影!接受動(dòng)態(tài)陰影的對象不會(huì )被批處理,這會(huì )導致嚴重的繪制調用。

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

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

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

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

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

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

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

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

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

0
0
收藏0
回帖

菜鳥(niǎo)在線(xiàn)分享Unity5中優(yōu)化VR 應用的12個(gè)技巧(轉載) 期待您的回復!

取消
載入表情清單……
載入顏色清單……
插入網(wǎng)絡(luò )圖片

取消確定

圖片上傳中
編輯器信息
提示信息