我們將探索VR遊戲與傳統遊戲在性能要求方面的不同點

映維網 2018年05月16日)在處理能力和用戶體驗方面,虛擬現實系統主要分爲三種類型:高質,主流和入門。高質VR表示高端VR,並且包括市場上搭載高配置的產品,高性能PC或遊戲主機。支持高質VR的主要VR外設是HTC Vive,Oculus Rift和索尼PSVR。

主流VR的硬件性能可能不及高質VR,但仍然使用PC處理器進行VR運算。入門級VR則包含Gear VR和谷歌Cardboard等移動VR設備,以及把手機芯片作爲計算設備的VR眼鏡和一體機。

如何測試、分析HTC Vive、Oculus Rift的VR遊戲性能

本文描述了通過HTC Vive和Oculus Rift測試與分析VR遊戲的方法。與傳統PC遊戲相比,VR遊戲在設計,輸入模式和性能要求方面有所不同。本文不涉及遊戲玩法和輸入。相反,我們將探索VR遊戲與傳統遊戲在性能要求方面的不同點。

每秒處理的像素大小是衡量VR體驗的重要指標。目前HTC Vive和Oculus Rift CV1的屏幕分辨率是2160×1200,因此在進行實際渲染時,我們需要更多采樣來抵消由鏡頭畸變引起的分辨率損失。對於HTC Vive和Oculus Rift CV1,這一損失高達140%。VR處理的像素大小達到了驚人的4.57億每秒。

性能測試與分析是VR遊戲的重要組成部分。這些任務有助於實現所需的要求,並且確保充分利用所有的CPU和GPU處理能力。在測試之前,Oculus需要關閉異步空間扭曲(ASW),SteamVR則要關閉異步二次投影,這樣VR運行時補償干預將不會影響背後的性能分析。

如要禁用ASW,請在Oculus SDK中依次打開Program Files\Oculus\Support\oculus-diagnostics\OculusDebugTool.exe,然後運行OculusDebugTool.exe。

如何測試、分析HTC Vive、Oculus Rift的VR遊戲性能

圖1:異步空間扭曲配置

如要在SteamVR中禁用二次投影功能,請使用Settings/Performance(設置/性能)。

如何測試、分析HTC Vive、Oculus Rift的VR遊戲性能

圖2:SteamVR配置

1. 工具

軟件工具在測試與分析VR遊戲中扮演着重要角色。所涉及的主要工具包括Fraps,遊戲加加,Unreal的控制檯命令,Windows Assessment and Deployment Kit(ADK),SteamVR幀定時,以及英特爾的圖形性能分析器。

1.1 Fraps FPS(幀每秒)計數器

Fraps FPS(幀/秒)計數器是一種傳統的測試與幀時工具,開發者可以利用它來測試一段時間內的最大幀速率,最小幀速率和平均幀速率。最終結果可以輕鬆導入至Excel,並且生成相應的圖表。如下圖所示,我們可以看到幀速率在整個過程中的變化是否平滑。另外,Fraps可支持你方便地截取屏幕截圖,然後用於各種報告目的。

如何測試、分析HTC Vive、Oculus Rift的VR遊戲性能

如何測試、分析HTC Vive、Oculus Rift的VR遊戲性能

圖3:(頂部)隨時間變化的幀速率;(底部)最大幀速率,最小幀速率和平均幀速率。

圖3的底部說明了Fraps隨時間推移而產生的最大幀速率,最小幀速率和平均幀速率。

如數據顯示,這款VR遊戲中的幀率在大部分時間都很低,僅爲45FPS,不符合HTC的要求。對於這種性能表現,玩家會遭遇不適,甚至是暈動症(爲了防止用戶產生不適或暈動症,體驗要求達到90 FPS的穩定幀速率)。這時,我們可以使用Windows ADK中的GPUVIEW來確定問題是來自於GPU,還是說CPU。

1.2 遊戲加加

雖然Fraps是免費共享軟件,但它已經有很長時間沒有更新。遊戲加加是一款類似的基準工具。在運行該實用程序時,工具窗口會自動顯示在遊戲窗口的頂部,其信息包括FPS,CPU溫度,圖形佔用率,CPU,顯卡和內存使用情況等等。Fraps的另一個缺點是它不能用於測試DirectX 12遊戲,但你可以使用另一個工具PresentMon來採集FPS數據。

如何測試、分析HTC Vive、Oculus Rift的VR遊戲性能

圖4:遊戲加加的實時數據顯示界面

頂部的工具窗口提供對正在運行的遊戲及其性能的實時監控。但Fraps和遊戲加加都是爲傳統遊戲設計,只能在顯示器上顯示數據。

1.3 Unreal引擎工具

佩戴VR頭顯的玩家無法看到顯示器上的信息,如果想看到實時性能數據,我們有兩種選擇:

1.如果遊戲基於Unreal引擎,請使用stat fps控制檯命令。

2.使用SteamVR幀定時方法,這可以幫助你在頭顯和顯示器上看到實時性能數據。SteamVR幀時間設置請訪問Valve官網(點擊前往)

圖5顯示了SteamVR幀定時數據。

如何測試、分析HTC Vive、Oculus Rift的VR遊戲性能

圖5:頭顯顯示器中的丟失幀。

如圖5所示,當遊戲場景幀出現丟幀時,頭顯將顯示一個“Missed Frames(丟幀)”框。紅條密度越高,出現丟幀的頻率越高。

如何測試、分析HTC Vive、Oculus Rift的VR遊戲性能

圖6:PC上運行的CPU和GPU。

圖6顯示了更詳細的數據。在數據讀出方面,藍色表示GPU渲染時間,而茶色則代表了GPU空閒時間。

如圖6所示,某些幀的GPU渲染時間超過了11.11毫秒,這將錯過Vsync(垂直同步)的時間並導致丟幀。這些幀無法達到90 FPS。藉助這個SteamVR幀定時工具,我們可以知道更多關於GPU Bound(限制)的信息,但它無法確定CPU渲染線程是否沒有及時傳遞渲染命令,從而導致GPU冒泡(bubble)或者GPU渲染時間過長。

1.4 Unity Engine的控制檯命令工具

如果遊戲是通過UE4引擎開發,而且屬於開發版本(非發行版本),我們就可以使用Unity的控制檯命令工具來瀏覽遊戲的實時性能數據。

你可以按下“〜鍵(鍵盤左上角)”來顯示命令行窗口。以下是一些常用的控制檯命令:

Stat FPS:顯示每幀的FPS和幀時間。這個命令很容易在VR中使用,因爲幀速率顯示在VR頭顯上,測試人員可以方便地觀察遊戲的實時性能。

Stat Unit:顯示遊戲中每幀的總時間,遊戲邏輯線程消耗的時間,遊戲渲染線程時間消耗,以及GPU時間消耗。一般來說,如果一個幀的時間消耗接近於邏輯線程的時間消耗,瓶頸限制位於邏輯線程;但如果一個幀的時間消耗接近渲染線程時間,則瓶頸限制在於渲染線程。如果兩個時間都接近GPU時間,瓶頸限制就與顯卡有關。

如何測試、分析HTC Vive、Oculus Rift的VR遊戲性能

圖7:Stat Unit命令的截圖。

Stat SceneRendering:顯示遊戲渲染線程中的各種參數值(參見圖8)。

如何測試、分析HTC Vive、Oculus Rift的VR遊戲性能

圖8:Stat SceneRendering命令的截圖。

Stat Game:遊戲邏輯線程上運行的參數值實時視圖,如人工智能和內存分配等等(參見圖9)。

如何測試、分析HTC Vive、Oculus Rift的VR遊戲性能

圖9:Stat Game命令的截圖。

Stat GPU:實時顯示每幀中的GPU主渲染內容的時間參數(參見圖10)。

如何測試、分析HTC Vive、Oculus Rift的VR遊戲性能

圖10:Stat GPU命令截圖

Stat InitViews:顯示剔除需要的時間和效率數據(參見圖11)。

如何測試、分析HTC Vive、Oculus Rift的VR遊戲性能

圖11:Stat InitViews命令的截圖。

Stat LightRendering:顯示照明和着色所需的渲染時間(參見圖12)。

如何測試、分析HTC Vive、Oculus Rift的VR遊戲性能

圖12:Stat LightRendering命令的截圖。

其他命令(如Stat A和Stat)可以從Unreal官方網頁中引用:

  1. https://docs.unrealengine.com/udk/Three/ConsoleCommands.html

  2. https://docs.unrealengine.com/latest/INT/Engine/Performance/StatCommands/

1.5 GPUVIEW工具

我們可以使用Windows ADK中的GPUVIEW和Windows性能分析器(WPA)來執行進一步的分析。

在上述命令中,Stat Unit初步說明了幀是GPU Bound還是CPU Bound。有時結果不夠準確,例如當CPU的一個線程造成一個GPU幀中間冒泡(bubble)。如果發生這種情況,在Stat Unit命令中看到的GPU渲染時間實際上屬於實時渲染時間和冒泡時間的擴展。在這種情況下,我們需要GPUVIEW和WPA進行分析。

如圖13所示,每個幀中間都有一個2毫秒的冒泡,因此GPU不能正常工作。最初的幀渲染時間小於11毫秒,但隨着冒泡的渲染時間超過90 FPS所需的11.1毫秒,這導致下一幀丟失Vsync時間。結果則是出現了幀丟失。

如何測試、分析HTC Vive、Oculus Rift的VR遊戲性能

圖13:GPUVIEW界面:每幀中間出現了一個2毫秒的冒泡

這時,我們可以使用WPA打開相同的Merged.etl文件,並通過時間線找到冒泡的時間窗口,從而確定CPU的哪個線程更繁重,以及此時該線程正在運行的內容(參見圖14) 。

如何測試、分析HTC Vive、Oculus Rift的VR遊戲性能

圖14:Windows性能分析器界面

如果GPUVIEW中GPU幀的渲染時間超過11.11毫秒,則可以確定爲GPU Bound,然後我們可以使用英特爾GPA來分析管道中的哪部分出現了過載情況。

1.6 英特爾GPA

英特爾GPA是一款功能強大的免費圖形性能分析工具(點擊前往)。英特爾GPA包含以下獨立工具:

  1. 系統分析器:實時顯示遊戲性能指標。

  2. 圖形幀分析器:幀分析器。

  3. 平臺分析器:查找CPU和GPU工作負載。

  4. 圖形跟蹤分析器:捕獲其他分析器分析的詳細事件跟蹤。

英特爾GPA圖形幀分析器可以與GPUVIEW結合使用。我們可以查看遊戲中的繪製調用,渲染目標,紋理貼圖和特定幀的着色器等等。通過簡化着色器,你可以設計一個實驗來測試渲染中的哪個部分會影響性能,從而幫助確定需要優化的關鍵部分(參見圖15)。

如何測試、分析HTC Vive、Oculus Rift的VR遊戲性能

圖15:圖形幀分析器的界面。

2. 案例分析

我們用一個例子來說明如何測試和分析VR遊戲。

在測試之前,你可以使用dxdiag命令查看系統配置:

如何測試、分析HTC Vive、Oculus Rift的VR遊戲性能

首先,我們先運行一段時間Fraps測試,並且繪製幀率變化。如圖16所示,在測試的前半部分中有部分場景可以達到90 FPS,但在後半部分裏,幀速率在45左右波動,不符合要求標準。所以我們需要進一步分析。

如何測試、分析HTC Vive、Oculus Rift的VR遊戲性能

圖17:FPS變化

利用Stat FPS命令查找較低幀速率的場景。如果你認爲遊戲變化太快而無法獲取數據,則可以使用控制檯命令PAUSE暫停遊戲,然後再輕鬆地打開所需的工具。結合Stat Unit命令的參數,CPU渲染線程和GPU都可能出現瓶頸(參見圖17)。

如何測試、分析HTC Vive、Oculus Rift的VR遊戲性能

圖18:stat unit命令的截圖。

我們需要使用GPUVIEW和WPA進行同步分析。

如何測試、分析HTC Vive、Oculus Rift的VR遊戲性能

圖19:GPU渲染時間

我們從GPUVIEW中看到的第一件事情是,一幀的渲染時間爲13.69毫秒,高於11.11毫秒,所以性能不太可能達到90FPS(參見圖19)。

接下來,我們看到CPU上只有音頻線程運行了大約10毫秒時間(見圖20)。其他線程基本上爲空間,這意味着音頻線程沒有充分利用CPU資源,這樣我們就有機會將CPU用於特殊效果,例如更多的AI,物理,材質或粒子效果。

如何測試、分析HTC Vive、Oculus Rift的VR遊戲性能

圖20:CPU空間時間

WPA同樣如此,其中游戲和渲染線程基本上爲空閒。

如何測試、分析HTC Vive、Oculus Rift的VR遊戲性能

圖21:Windows性能分析器上顯示的CPU運行線程

藉助英特爾GPA,你可以看到繪製調用少於1000個,而這是一個合理的數字。

如何測試、分析HTC Vive、Oculus Rift的VR遊戲性能

圖22:所有的繪製調用

選擇所有的Target進行實驗,其中我們可以粗略看到幀花費的時間。

如何測試、分析HTC Vive、Oculus Rift的VR遊戲性能

2×2 Textures實驗在真實場景中使用了簡單紋理。實驗表明,簡單紋理沒有顯著的性能改進,因此可以忽略紋理優化。

1×1 Scissor Rectangle實驗則在渲染管道中移除了像素處理階段。從這個實驗中可以看到,性能表現已經有了顯著的提升。

Simple Pixel Shader實驗取代了簡化像素着色器中的原始着色器,並且我們可以看到性能出現了大幅提升。

從上面的實驗我們可以看到,GPU渲染管道中的像素處理任務相當繁重。另一個查看一幀中哪個操作佔據最多時間的方法是,在UE4的命令行輸入中使用ToggleDrawEvents。

如何測試、分析HTC Vive、Oculus Rift的VR遊戲性能

圖24:英特爾GPA分析器顯示了每個繪製調用的執行函數

以下是幾個關於耗時模塊的表格。這些信息可以幫助你專注於高時間比率的模塊,並且進行選擇性的優化。

如何測試、分析HTC Vive、Oculus Rift的VR遊戲性能

3. 總結

如果硬件尚未完全能夠實現沉浸式VR體驗所需的高性能,我們可以通過優化來體驗高質量的遊戲。在遊戲優化期間尋找瓶頸需要利用本文所描述的各種工具和方法。通過各種實驗和參數調整來確定遊戲的CPU或GPU性能瓶頸,本文同時提供了一定的見解,可以幫助改善遊戲體驗。

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

相關文章