1. 程式人生 > >UE4效能優化(轉載)

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 unit
這裡寫圖片描述

stat scenerendering

這裡寫圖片描述
stat engine

這裡寫圖片描述

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

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 資料)。

轉載連結