UE4 性能優化方法(轉載)

首先建議先看這篇官方文檔,講解的很詳細。 
https://docs.unrealengine.com/latest/CHN/Engine/Performance/index.html

戲幀率很低,或者有卡頓的現象,可能會有很多原因,這時候不要亂猜,比如是不是人物太多了或者渲染的東西太多了,這樣猜意義是不大的,可能會浪費很多時間,但是總找不到點上,當然如果運氣好也可以找到瓶頸,這個時候我們可以藉助相應的工具來查找性能瓶頸。此處我們僅以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 unit 
這裏寫圖片描述

stat scenerendering

這裏寫圖片描述 
stat engine

這裏寫圖片描述

stat initviews 
stat game 
Stat Slow 
ViewMode ShaderComplexity 
Stat UnitGraph 
完整的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 數據)。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章