《Ninja Legends》分享:如何為快節奏VR動作遊戲的交互優化性能

映維網 2019年10月25日)日前,VR動作遊戲《Ninja Legends》的開發商Coinflip Studios通過博文介紹瞭如何為快節奏的交互優化性能。下面是映維網的具體整理:

《Ninja Legends》分享:如何為快節奏VR動作遊戲的交互優化性能


我們遊戲最令人滿意的一個地方是將敵人砍開一半的時間點。當出現這個情況的時候,敵人角色會沿著劍刃移動所創建的平面動態分成兩半。CPU和GPU實時拆分敵方忍者可能需要非常昂貴的成本。儘管這對於大多數現代遊戲PC而言通常都不是問題,但要Oculus Quest的移動芯片組平穩運行則複雜得多。在本文中,我們將介紹在為支持設備保持平穩幀率而在CPU端使用的技術。

我們的解決方案把目光放在三個方面:

  1. 確保網格劃分算法具有足夠的CPU週期以平穩運行。
  2. 管理切割產生的大量視覺效果。
  3. 保持切割後的性能穩定。

1. 後臺線程

拆分敵方角色網格是一項非常簡單的操作,現計算出哪個邊緣位於刀刃的哪一側,然後生成具有正確邊緣的新網格。這包含大量簡單的數學運算,因此非常容易將其卸載到後臺工作線程。通過將所述計算放在後臺線程,我們減少了主CPU線程的負擔。

使用後臺線程的一個缺點是,你不能再保證操作能夠在一幀內完成。多線程編程的異步性質意味著你可能需要花費兩幀或以上才能在後臺完成工作並將數據返回主線程。需要記住的另一件事情是,並不是所有的工作都可以在後臺線程完成。會影響3D場景本身的操作必須由主線程執行。

2. CPU調頻

Oculus Quest OS允許設備動態地提高和降低CPU和GPU的性能。我們將重點放在CPU方面,但GPU存在類似的行為。通過儘可能調低CPU的頻率,頭顯可以節省電能並防止過熱。設備將自動檢測遊戲當前的CPU是否資源緊張,並適當地提高CPU級別。將決定權留給設備的問題是,增加CPU級別的決定需要耗費數幀。

在CPU調高頻率之前所需的決策時間表示遊戲存在潛在的幀率下降。由於我們知道切割會對CPU造成壓力,所以每當我們檢測到玩家要切割敵人時,我們手動提高CPU的速度。我們最大化CPU級別半秒鐘,然後允許默認行為接管並自然降低CPU級別。

在Unity Oculus SDK中,這個控件通過OVRManager.cpuLevel公開。

《Ninja Legends》分享:如何為快節奏VR動作遊戲的交互優化性能


3. 用於視覺效果的對象池(Object Pooling)

當玩家執行切割時,這瞬間會觸發大量的視覺效果。多種效果共同作用,為玩家創造了令人滿意的反饋時刻。問題是,立即實例化大量的效果是成本十分高昂的操作。我們發現每個效果的實例化時間超過1毫秒。對於72 fps(每幀13毫秒),這大約相當於該幀CPU時間的10%。在《Ninja Legends》中,我們通過應用對象池來緩解問題:在場景中維護一組常用的效果,所述效果已經實例化,但一直隱藏到需要時為止。

4. 跨幀視覺效果激活

即使應用對象池,重新激活同一幀中的多個對象會產生一定的成本。我們的解決方案是將進行跨幀視覺效果激活。我們構建了一個系統,排隊低優先級的激活,並每幀分配一個激活。1幀啟用5種效果可能會超出預算,但將同一種效果順延用於5幀所產生的影響則要小得多。請記住,以72 fps播放5幀大約需要70毫秒,玩家依然會立即看到它。

5. 減少物理交互

遊戲的物理模擬由CPU運行,所以降低模擬的複雜性可為我們提供更多的性能空間。一旦切割敵方忍者,我們只允許物理碰撞器與地面交互。身體部位 vs 身體部位,身體部位 vs 其他敵人,以及身體部位 vs 玩家武器之間的交互不再需要,而且如果保持激活狀態,這實際會引起更多不必要的視覺噪點。這使得我們可以在切割後保持平穩的幀速率。這十分重要,因為玩家可能會陷入激烈的戰鬥狀態,存在多個敵人,並且四面八方地觸覺視覺效果。

下面是我們的Unity Phusics碰撞矩陣。切割的敵人分配到Chopped圖層,而後者與Environment圖層沒有任何衝突。

《Ninja Legends》分享:如何為快節奏VR動作遊戲的交互優化性能


6. 結論

利用所述的技術,我們為Oculus Quest開發了一種終極的忍者體驗。儘管這經歷了多次的技術與設計迭代,但玩家的積極反饋令這一切都是值得的。

原文鏈接:https://yivian.com/news/67899.html


分享到:


相關文章: