命令:stat unit
遊戲的實際單幀時間由這三者之一限制:Game(CPU 遊戲線程),Draw(CPU 渲染線程)或者 GPU(GPU)。 圖中我們可以看到 GPU是限制主因(三者最大的一個)。爲了取得更少的 單幀 時間,在這個情形下必須先優化 GPU 的負載。
視圖模式
視圖模式就是一系列的 Show Flag 的預設組合。編輯器界面中,和 Show Flag 單獨分開,也可以直接使用 ViewMode 的命令行來切換。 對於性能比較有用的是:Wireframe,LightComplexity,ShaderComplexity 和 Lit。(分別是線框模式,光照複雜度模式,Shader 複雜度模式 和 正常的光照模式)
幾個不同的視圖模式(按閱讀順序):光照模式,光照複雜度(越暗越好),線框模式,Shader 複雜度(綠色代表性能優良)
命令
StartFPSChart 和 StopFPSChart
然後用微軟的 Excel 打開結果文件 .csv (保存在 [ProjectFolder]\Saved\Cooked\Android_ES31\SubwayPatrol\Saved\Profiling\FPSChartStats 處)。 在這裏例子中,我們刪掉了頭四行,選擇全部,並插入了一個線狀圖的散列表。
命令行:StartFPSChart, StopFPSChart |
命令:stat Game
CPU 受限,需要找到引起此問題的遊戲代碼(如藍圖、光線投射、物理、AI、內存分配)
命令 | 描述 | |
---|---|---|
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 大羣組進行渲染。無法訪問分析工具或日誌文件、或需要測試遊戲的基礎性能時,此命令十分實用。 以下是運行遊戲中的實例: 此命令可進行如下配置: 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 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 功能)。