轉自:http://www.unrealchina.net/portal.php?mod=view&aid=226
本文依據UE4官方文檔以及官方博客等總結而來,可能不全面,后面會陸續添加。內置工具的詳細說明請參考官方文檔。
游戲幀率很低,或者有卡頓的現象,可能會有很多原因,這時候不要亂猜,比如是不是人物太多了或者渲染的東西太多了,這樣猜意義是不大的,可能會浪費很多時間,但是總找不到點上,當然如果運氣好也可以找到瓶頸,這個時候我們可以借助相應的工具來查找性能瓶頸。此處我們僅以UE4來展開講解。
首先要確定瓶頸是在CPU還是GPU,為了找到是誰,以非debug版本啟動你的程序,並且在控制台上輸入stat unit 命令,如果是在android平台上可以同時按下四個手指,打開控制台,輸入stat unit,它會顯示如下圖所示:
Frame時間是產生一幀花的總時間,由於邏輯線程(Game)和渲染線程(Draw)在一幀結束的時候需要同步,一幀花的時間經常跟其中的一個線程花的時間 相近。GPU時間測量了顯卡渲染當前場景花的時間。由於 GPU時間是跟當前幀同步的,所以它跟一幀花的時間也基本差不多。
如果一幀花的時間跟邏輯線程的時間比較接近,那么瓶頸在邏輯線程,相反如果跟渲染線程的時間比較接近,那么瓶頸在渲染線程。如果兩個時間 都不接近,但跟GPU時間比較接近,那么瓶頸在顯卡上。
當然也可以使用一些第三方工具,比如intel vtume,、aqtime等,移動平台上可以使用Apple Instruments、NVIDIA Tegra System Profiler、ARM DS-5等 。
瓶頸在邏輯線程
可以通過性能分析來確定,通過~打開控制台里面輸入"stat startfile",讓它運行一會至少10s來獲取一個多幀的平均值。如果時長過長,那么生成的文件就會很大。通過stat stopfile來結束性能分析。一個后綴為ue4stats的文件會在工程的路徑下產生,如果是android的話會在你安裝的目錄下面生成 一個profile目錄。如果想要查看分析結果,必須把這個文件拷貝到pc上,可以使用adb pull {ue4stats 完整路徑} {pc 保存路徑}來拷貝文件到pc上。
這個時候你就可以使用UnrealFrontEnd(跟UE4Editor在同級目錄)來打開分析的結果,或者在UE4Edtior里面通過window-->Developper ToolsàSession Frontend,打開后切換到Profiler面板,通過load來打開ue4stats文件。
當打開后你就可以自己來查看耗費時間的地方了
如果要查看卡頓,可以在時間線上查看高峰的地方,通過選擇Maximum而不是Average,這樣它就會顯示一些峰值,如下圖所示。
GPU分析
如果是在PC平台上可以使用ProfileGPU命令或者使用快捷鍵Ctrl+Shift+,
也可以使用一些第三方工具來測試,pc平台上如 Intel GPA、Nvidia NSight visual Studio edition,移動平台比如高通的adreno profiler、NVIDIA Tegra Graphics Debugger、ImgTec PVRTune and PVRTrace、ARM Mali Graphics Debugger等,蘋果的XCode等均可以用來分析。
一些常用的命令
-
-
完整的stat命令參考https://docs.unrealengine.com/latest/CHN/Engine/Performance/StatCommands/index.html。
幾個對分析最有用的變量:
- 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 數據)。