Unreal 入門-性能分析

命令:stat unit

stat_unit.png

遊戲的實際單幀時間由這三者之一限制:Game(CPU 遊戲線程),Draw(CPU 渲染線程)或者 GPU(GPU)。 圖中我們可以看到 GPU是限制主因(三者最大的一個)。爲了取得更少的 單幀 時間,在這個情形下必須先優化 GPU 的負載。


視圖模式

視圖模式就是一系列的 Show Flag 的預設組合。編輯器界面中,和 Show Flag 單獨分開,也可以直接使用 ViewMode 的命令行來切換。 對於性能比較有用的是:WireframeLightComplexityShaderComplexity 和 Lit。(分別是線框模式,光照複雜度模式,Shader 複雜度模式 和 正常的光照模式)

ViewModes.png

幾個不同的視圖模式(按閱讀順序):光照模式,光照複雜度(越暗越好),線框模式,Shader 複雜度(綠色代表性能優良)

命令 StartFPSChart 和 StopFPSChart


然後用微軟的 Excel 打開結果文件 .csv (保存在 [ProjectFolder]\Saved\Cooked\Android_ES31\SubwayPatrol\Saved\Profiling\FPSChartStats 處)。 在這裏例子中,我們刪掉了頭四行,選擇全部,並插入了一個線狀圖的散列表。


fpschart.png
命令行:StartFPSChart, StopFPSChart


命令:stat Game

CPU 受限,需要找到引起此問題的遊戲代碼(如藍圖、光線投射、物理、AI、內存分配)

blob.png


命令 spacer.png 描述
stat Anim 顯示蒙皮網格體每個標記所需的計算時間。
stat D3D11RHI / stat OpenGL Direct3D 11 或 OpenGL RHI。
stat DumpEvents [-ms=0.1] [-all] 發生事件調用時(如從藍圖調用,或調用 PhysX 任務函數),它們將被寫入日誌。
stat DumpFrame 接收指令後立即執行渲染的幀信息將被寫入日誌。
stat DumpHitches 基於 t.HitchThreshold 檢測到“故障”時,將其寫入日誌。
stat Engine 顯示總體渲染 stats,如幀長、以及被渲染的三角形數量。
stat Game 反饋諸多遊戲標記所消耗的時間。
stat Grouped 禁用 stat Slow。
stat Hitches 設置 t.HitchThreshold,定義故障的時間(以秒爲單位)。還將把所有故障轉存至 log/visual studio debug,如 [0327.87] LogEngine:Warning:HITCH @ 00m:01s:643ms,1643,72,2.
stat InitViews 顯示可視性剔除所花費的時間和效率。關於渲染線程性能,可視部分數量是最重要的個體 stat,它由 STAT INITVIEWS 下的可視靜態網格體元素支配,但可視動態原語也對其存在影響。
stat LightRendering 反饋燈光和陰影所需的渲染時間。
stat Memory 顯示虛幻引擎中諸多子系統的內存使用情況。
stat Particles 顯示粒子計算時間和 sprite 渲染時間。
stat SceneRendering 顯示總體渲染統計。可從此處着手尋找渲染過程中性能較慢的大體區域。
stat SceneUpdate 顯示更新世界場景的信息,包括添加、更新和移除燈光,以及在場景中添加和移除原語所花費的時間。
stat ShadowRendering 顯示陰影計算時間,與實際陰影渲染時間分開(已包含在 stat LightRendering 中)。
stat Slow [-ms=0.3] [-maxdepth=5]

此命令將顯示遊戲線程和渲染線程的統計。所有 stats 將作爲一個 stats 大羣組進行渲染。無法訪問分析工具或日誌文件、或需要測試遊戲的基礎性能時,此命令十分實用。

以下是運行遊戲中的實例:

statSlow1.png

此命令可進行如下配置:

stat slow [-ms=1.0] [-maxdepth=4]

默認只顯示大於 1.0 毫秒的 stat 項目,以及超過 4 個關卡未被套入的 stat 項目。

注意:降低毫秒或增加深度均可能對整體性能產生影響。

Stat slow 對低於 0.1 毫秒的內容進行過濾,以增強性能並避免混亂。以下是減少 -ms 和增加 -maxdepth 所獲得的結果:

stat slow -ms=0.3 -maxdepth=5

statSlow2.png

Stat slow 會佔用大量屏幕空間,再次使用 stat slow(或 stat Grouped)將移除所有可視 stats 羣組。此外,如啓用其他 stats 羣組,stat slow 也將被禁用。

stat Streaming 顯示流資源的諸多統計,如流紋理使用的內存量、或場景中流紋理的數量。
stat StreamingDetails 流的細節統計,將總體紋理流分解爲更細緻的羣組(光照圖、靜態紋理、動態紋理)。
stat Unit 整體幀長、遊戲線程時長、渲染線程時長、GPU 時長。
stat UnitGraph 查看帶統計單元數據的圖表,使用 stat Raw 查看未過濾的數據。


命令:ProfileGPU


附加說明:

幾個對分析最有用的變量:


控制檯變量 描述
r.SetRes 改變屏幕,或窗口的分辨率。
r.VSync 開啓/關閉垂直同步(可能依賴於是否原生全屏)。
r.ScreenPercentage 用於減小內部實際渲染分辨率,畫面會在重新放大。
r.AllowOcclusionQueries 用於禁用遮擋(可以讓場景運行的更慢)。
r.TiledDeferredShading 能夠關閉基於 Tile 的延遲光照技術(GPU粒子的光影則沒有退回方法)。
r.TiledDeferredShading.MinimumCount 能夠調整使用多少燈光應用在基於 Tile 的延遲光照技術(視覺上並沒有差異但性能會有不同)。
Pause 暫停遊戲或者 Matinee(分析時更加穩定,但禁用了 Update/Tick)。
Slomo 能夠對遊戲進行加速或者減速播放。
r.VisualizeOccludedPrimitives 顯示被裁剪掉的物件的外盒框。
StartFPSChart StopFPSChart 請看下文。
r.SeparateTranslucency 這是一個用於修復半透明情況下景深的問題的功能,如果不需要的時候可以把它關閉,並有其他影響(查閱 SceneColor)。
r.Tonemapper.GrainQuantization 用於關閉在 Tonemapper 中添加的噪點來避免 Color Banding,由於 8bit 量化和較小的質量改進在輸出爲 10:10:10 並不必須。
r.SceneColorFormat 能夠選用不同的 SceneColor 格式(默認是 64bit 的最佳質量,並支持屏幕空間子表面散射)。
FX.AllowGPUSorting 禁用粒子排序(在大量粒子的使用可以妥協使用)。
FX.FreezeParticleSimulation 禁止粒子的更新。
r.SSR.MaxRoughness 調整屏幕空間反射(SSR)粗造度的最大值,並覆蓋後處理中的該設置。請查閱 Show Flag VisualizeSSR。

命令行選項

有些功能可以在命令行中進行關閉,比如 UE4.exe -NoSound

幾個對分析比較有用的開關是:


命令行選項 描述
-NoSound 禁用聲音和音樂系統。

-NoTextureStreaming

關閉貼圖 steaming(對於隔離問題時很有幫助)。
-NoVerifyGC 否則需要預期在 Release 版本中每 30 秒會遇到的性能波動。
-NoVSync 能夠更快的渲染但會導致畫面撕裂,尤其是在高幀數下。
-Streaming 在使用 StartFPSChart/StopFPSChart 很有用,能夠從一個非 windows 設備上來獲取數據並用於進一步檢測(假設我們是實時的 cook 數據)。

編譯選項

請不要在 Debug 版本下進行性能的分析和測量。爲了方便起見,我們建議針對 Development 版本做性能分析。在 Shipping 下的性能實際上會因爲開發特性進一步的移除而更快。 測試當然最好是在 Shipping 中完成,但需要一些代碼功能被打開才行。(比如控制檯,比如 stat unit 功能)。


發佈了60 篇原創文章 · 獲贊 3 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章