UE4打印到HUD的Stat命令


Stat命令(chs  en)提供了游戲和引擎各個方面的實時統計信息,輸入不同參數會在屏幕HUD上顯示對應統計數據。

Debug、Development包才會啟用STATS宏,統計邏輯才會編譯進可執行二進制中,才能使用Stat命令相關的功能

若想讓Shipping和Test包也有Stat命令功能,可在UnrealEngine\Engine\Source\Runtime\Core\Public\Misc\Build.h中將FORCE_USE_STATS宏定義成1

/** Compile flag to force stats to be compiled */ #ifndef FORCE_USE_STATS #define FORCE_USE_STATS 1
#endif

開啟stats會帶來一定的性能損耗,幀率會下降6.6%,cpu平均占用高4.6%,內存會漲15MB,也會把FName表撐大一些 

 

統計相關的所有邏輯在:UnrealEngine\Engine\Source\Runtime\Core\Public\Stats\*.hUnrealEngine\Engine\Source\Runtime\Core\Private\Stats\*.cpp

Stat類別定義在:UnrealEngine\Engine\Source\Runtime\Core\Public\Stats\Stats2.h

Stat命令的HUD繪制邏輯在StatsRender2.cpp中,3種Title頭的渲染在以下函數中:

Counters   Average   Max  Min     // RenderCounterHeadings      進度條的百分比為:Average / t.TargetFrameTimeThreshold 

Memory Counters   UsedMax   Mem%   MemPool   Pool Capacity   // RenderMemoryHeadings     如:Stat memory用的是該Title頭

Cycle counters (flat) | Cycle counters (hierarchy)   CallCount    InclusiveAvg  InclusiveMax   [ExclusiveAvg   ExclusiveMax]    // RenderGroupedHeadings   進度條的百分比為:InclusiveAvg / t.TargetFrameTimeThreshold  

注:t.TargetFrameTimeThreshold的缺省值為33.9 ms

各統計項解釋:

Counters:當前統計項名稱
Average:最近60幀記錄中的平均值
Max:最近60幀記錄中的最大值
Min:最近60幀記錄中的最小值

Memory Counters:當前統計項名稱
UsedMax:最近60幀記錄中內存使用的最大值
Mem%:UsedMax在Pool Capacity中的占比

Cycle counters (flat):當前統計項名稱
Cycle counters (hierarchy) :當前統計項名稱(樹型結構)
CallCount :最近60幀記錄的平均調用次數
InclusiveAvg:最近60幀記錄的平均包含時間消耗
InclusiveMax:最近60幀記錄中的最大包含時間消耗
ExclusiveAvg:最近60幀記錄的平均獨占時間消耗
ExclusiveMax:最近60幀記錄中的最大獨占時間消耗

注:FStatParams結構體MaxHistoryFrames變量缺省為60,所以統計是60幀記錄

 

 

 

 

Stat的Engine命令執行在UEngine::HandleStatCommand函數中

 

DECLARE_STATS_GROUP(TEXT("AI"),STATGROUP_AI, STATCAT_Advanced);   // 會定義一個類型為FStatGroup_STATGROUP_AI的結構體   那么就可以在控制台下執行Stat AI命令

 

打開控制台輸入框方法

在PC上按 快捷鍵 ,手機上四指在屏幕上同時按下

 

Stat XXX   // 按平行結構展示統計項

Stat XXX+  // 按層次樹結構展示統計項 

 

一些統計項解釋

GT:Game Thread

RT:Render Thread 

AT:Any Thread

TTF:True Type(TTF)字體資源

OTF:Open Type(OTF) 字體資源

 

Stat None
關閉所有統計數據的顯示

對於Stat xxx命令,執行一次會開啟xxx,再執行一次會關閉xxx

 

Stat fps   // 顯示每秒幀數(FPS)計數器

顯示當前平均幀率和每幀平均繪制時長

 

平均幀率由全局變量float GAverageFPS來計算,GAverageFPS = 1000.f / GAverageMS   詳見:CalculateFPSTimings函數

當前幀平均繪制時長由全局變量float GAverageMS(GameThread執行時間和Waiting時間之和)來計算

 

上面的設置是針對游戲的,修改后配置會保存在DefaultEngine.ini的如下標簽中

[/Script/Engine.Engine]
bSmoothFrameRate=True
MinDesiredFrameRate=38.000000
SmoothedFrameRateRange=(LowerBound=(Type=Inclusive,Value=21.426044),UpperBound=(Type=Exclusive,Value=74.614174))

 

對於編輯的場景(EWorldType::Editor)或PIE游戲(EWorldType::PIE),會保存在DefaultEngine.ini的如下標簽中

[/Script/UnrealEd.EditorEngine]
bSmoothFrameRate=True SmoothedFrameRateRange=(LowerBound=(Type="ERangeBoundTypes::Inclusive",Value=8),UpperBound=(Type="ERangeBoundTypes::Inclusive",Value=110))

關掉Smooth Frame Rate,能獲得精確的測量值,不然它會強行限幀到Min{SmoothedFrameRateRange}~Max{SmoothedFrameRateRange},導致瞬間峰值過濾掉。

 

Stat UNIT

  

                                       Android                                                                                                  Standalone(Windows)

 

邏輯詳見:UnrealEngine\Engine\Source\Runtime\Engine\Private\UnrealClient.cppFStatUnitData::DrawStat函數 

Frame:一幀游所花費的總時間。由於Game線程和Draw線程在完成一幀之前保持同步。Frame = MAX{Game, Draw, GPU}

Game:GameThread線程一幀耗費的時間(去掉了GameThread的Waiting那部分時間)。如果幀時接近Game線程中顯示的時間,則游戲的性能很可能會受到Game線程的阻礙(負面影響)。

Draw:RenderThread線程一幀耗費的時間(去掉了RenderThread的Waiting那部分時間)。如果幀時接近Draw線程中顯示的時間,則游戲的性能很可能會受到渲染線程的阻礙

RHIT:RHIThread線程一幀耗費的時間(當使用獨立的RHIThread才顯示該項;去掉了RHIThread的Waiting那部分時間)。通常,RHI線程時間會被同步到幀上,因此它很可能與幀時相同。

注:以上都執行了A = 0.9 * A +0.1 * Cur算法,進行了平滑

Mem:VMRSS,Resident Set Size 實際使用物理內存(包含共享庫占用的內存)

Draws:DrawCall數   數值來自於int32 GNumDrawCallsRHI變量

Prims:圖元個數   數值來自於int32 GNumPrimitivesDrawnRHI變量

GPU:GPU渲染一幀時間。GPU時間用來衡量顯卡渲染場景需要多長時間。由於GPU時間會被同步到幀上,它很可能與幀時相同。

DynRes:動態分辨率。如果支持(並啟用),DynRes 將顯示主要屏幕百分比和次要屏幕百分比。

 

Android平台不顯示GPU統計項,可通過如下方式來開啟:

① 注釋掉SupportsDisjointTimeQueries函數

② 在UnrealEngine\Engine\Config\BaseDeviceProfiles.ini中開啟r.DisjointTimerQueries

[Android DeviceProfile]
DeviceType=Android
+CVars=r.DisjointTimerQueries=1

 

Stat UnitMax

     

                                       Android                                                                                                  Standalone(Windows) 

每一行最后數值為最近200次采樣中的最大值 

Mem行第一個值為VmRSS(進程當前使用的物理內存的大小);第二個值為VmHWM(進程所使用的物理內存的峰值)

VMem行第一個值為VmSize(進程當前使用的虛擬內存的大小);第二個值為VmPeak(進程所使用的虛擬內存的峰值)

 

Stat UnitTime /  Stat UnitGraph

Android:在Stat Unit基礎上,添加了左上角實時繪制出Frame、Game、Draw、RHIT曲線的功能

Standalone(Windows):在Stat Unit基礎上,添加了左下角實時繪制出Frame、Game、Draw、GPU曲線的功能

 

Stat Raw   // 未過濾數據的Stat UnitGraph

 

 

Stat Detailed   // 功能等價於Stat fps  + Stat UnitMax  +  Stat UnitTime /  Stat UnitGraph

                                                                                                      Android

                                                                                          Standalone(Windows)

 

Stat AI    // 顯示感知系統和整體AI的性能信息

 

Stat Al_EQS   // 顯示環境查詢系統(EQS)的性能、調試和內存統計數據
Stat AICrowd  // 顯示群集管理器的性能和步驟信息


Stat Anim   // 顯示每次tick蒙皮網格體需要多長時間進行計算

注1:默認一個Group最多顯示的行數為25,可通過執行控制台變量stats.MaxPerGroup xx來指定新的最大行數為xx

注2:為了能查看顯示不下的內容,自定義開發了stat scroll控制台命令

stat scroll 1 // 向下滾動1行
stat scroll -1 // 向上滾動1行
stat scroll 999 // 滾動到底部
stat scroll -999 // 滾動到頂部
stat scroll restore //恢復初始

Stat Anim+ -ms=0.001  // 按層次樹形式展示


Stat AsyncLoad   // 顯示異步加載的性能統計數據      注:默認不開啟,需手動開啟


Stat AsyncLoadGameThread

 

Stat AsyncIO

 

Stat Audio   // 音頻統計數據,如聲波實例或緩沖區性能

 

Stat AudioStreaming

Stat AudioThreadCommands

Stat Canvas  // 畫布統計數據,顯示畫布用戶界面項(例如圖塊、邊框和文本)的性能信息

 

Stat Chaos

 

Stat Character

 

Stat Collision   // 顯示碰撞的性能、調試和內存信息

 

Stat CollisionTags


Stat ColorList

 

Stat CommandListMarkers   // 顯示命令列表及命令性能信息

 


Stat Component   // 顯示組件列表及組件性能信息

 

Stat Compression  // 顯示壓縮統計數據

 

Stat CrunchMemory

 

Stat CPULoad // 顯示CPU利用率


Stat CPUStalls  // 顯示有關CPU停轉的信息


Stat D3D11RHI // 顯示Direct3D 11 RHI統計數據


Stat DDC   // 顯示派生數據緩存(DDC)統計數據


Stat Engine   // 顯示一般渲染狀態,例如幀時間,以及正在渲染的三角形數量的計數器

 

Stat Foliage

 

Stat Game // 提供有關各個游戲Tick需要多長時間的反饋

Stat Game+ -ms=0.001  // 按層次樹展示

 

Stat GameplayTags   // 顯示游戲進程標簽信息


Stat GC   // 顯示垃圾回收統計數據


Stat GeometryCache   // 顯示幾何體緩存系統的性能和內存統計數據

 

Stat GPU // 顯示幀的GPU統計數據   注:android平台上沒有輸出


Stat GPUParticles   // 顯示GPU粒子的性能信息

 

Stat GPUSkinCache

 

Stat IMEWindows  // 顯示Windows文本輸入法系統的信息

 

Stat InitViews  // 顯示有關可見性剔除花費了多長時間以及效果如何的信息。可見分段計數是渲染線程性能方面最重要的一個統計量,它由STAT INITVIEWS下的可見靜態網格體元素控制;不過,可見動態原語也有影響

 

Stat InitViews+ -ms=0.001  // 按層次樹形式展示


Stat KismetCompiler   // 顯示Kismet編譯器信息

 

Stat KismetReinstancer  // 顯示Kismet Reinstancer信息


Stat Landscape


Stat LEVELS // 顯示level streaming信息

關卡顏色代碼說明

綠色:關卡已加載並可見。
紅色:關卡已卸載。
橙色:關卡正在變成可見的過程中。
黃色:關卡已加載,但不可見。
藍色:關卡已卸載,但仍駐留在內存中,當發生垃圾回收時將清除它。
紫色:關卡是預加載的。

 

Stat LightRendering   // 提供有關渲染光照和陰影需要多長時間的反饋


Stat LinkerCount   // 顯示linker計數器


Stat LinkerLoad   // 顯示linker加載信息

 

Stat LLM   // 顯示低級內存追蹤器(LLM)計數器

 

Stat LLMFULL   // 顯示整個LLM計數器組

 

Stat LLMOverhead   // 顯示LLM開銷計數器


Stat LLMPlatform   // 顯示LLM平台計數器


Stat LoadTime   // 顯示加載時間性能信息

 

Stat LoadTimeVerbose


Stat MapBuildData    // 顯示地圖的編譯數據

 

Stat MathVerbose   // 顯示數學運算的性能信息


Stat Media


Stat Memory // 顯示有關虛幻引擎中各個子系統使用多少內存的統計數據

 

Session FrontendProfiler里面Group Name為Memory的統計細項如下:

 

統計項類型:

為hierarchy類別,可以嵌套子節點,包含CallCount、InclusiveTime、ExclusiveTime等字段

為int或float數字類型

為Memory類型

 

Stat MemoryAllocator

 

Stat MemoryPlatform   // 顯示內存平台信息

 


Stat MemoryStaticMesh  // 顯示有關靜態網格體的內存統計數據

 


Stat NamedEvents // 為外部分析器啟用指定事件

 

Stat Navigation   // 顯示導航系統的性能和內存信息


Stat NET   // 顯示網絡系統統計數據


Stat Niagara


Stat NiagaraOverview

 

Stat object   // 顯示對象內存和性能信息


Stat ObjectVerbose   // 默認是關閉的   需手動開啟


Stat Online   // 顯示在線系統計數器

 

Stat Packet

 

Stat PakFile   // 顯示Pakfile系統統計數據

 

Stat ParallelCommandListMarkers  // 顯示並行命令列表及並行命令性能信息


Stat PARTICLES   // 顯示粒子系統性能信息

 

Stat ParticleMem


Stat Physics // 顯示物理性能統計數據


Stat PhysXTasks   // 顯示PhysX任務信息


Stat PhysXVehicleManager   // 顯示PhysX載具管理器的統計數據


Stat PlayerController   // 顯示玩家控制器性能信息


Stat PSCWorIdMan
Stat Quick   // 快速顯示總體性能數據組

 

 

Stat RDG

 

Stat RenderTargetPool   // 顯示渲染目標池的內存和性能統計數據


Stat RenderThreadCommands   // 列出渲染線程命令及性能信息,找出耗時較高的Comand


Stat RHI   // 顯示RHI內存和性能統計數據


Stat RHICMDLIST   // 顯示RHI命令列表及性能統計數據

 

 

Stat SceneMemory   // 顯示場景內存計數器


Stat SceneRendering   // 顯示一般渲染統計數據。這是一個很好的起點,可以發現渲染過程中性能低下的一般方面

 

 

Stat SceneUpdate   // 顯示有關更新場景的信息,包括添加、更新和刪除光源以及添加和刪除場景中的原語所花費的時間


Stat SCRIPT   // 顯示腳本統計數據
Stat ShaderCompiling   // 顯示着色器編譯信息

 

 

 

Stat PipelineStateCache


Stat Shaders   // 顯示着色器壓縮統計數據


Stat ShadowRendering   // 顯示陰影計算花費多長時間,該時間不同於 stat LightRendering 中包括的實際陰影渲染時間

 

 


Stat ShadowRenderingVerbose

 

Stat Slate   // 顯示Slate性能統計數據

 

Stat SlateVerbose   // 默認不開啟,需手動開啟

 

Stat SlateMemory   // 顯示Slate內存計數器


Stat SoundCues // 顯示活動的Sound Cue


Stat SoundMixes // 顯示活動的SoundMix


Stat SoundModulators // Shows modulator debug info as provided by active audio modulation plugin


Stat SoundModulatorsHelp // Shows modulator debug help provided by active audio modulation plugin
Stat SoundReverb // Shows active SoundReverb


Stat Sounds // <sort=class l distance l name l prioritytime l volume l waves> <-debug> shows all active sounds. Displays value sorted by when sort is set  // 顯示活動的SoundCue和SoundWave


Stat SoundWaves // 顯示活動的SoundWave

 

Stat splitscreen   // 顯示分屏信息

Stat StatSystem   // 顯示統計系統的性能和內存信息

 

Stat Streaming // 顯示流送資源的基本統計數據,例如使用了多少內存流送紋理,或者場景中有多少流送紋理。


Stat StreamingDetails // 有關流送的更詳細的統計信息,例如將一般紋理流分解為更具體的組(光照貼圖、靜態紋理和動態紋理)


Stat StreamingDetailsVerbose

 

Stat StreamingOverview   // 顯示流送資源的統計數據概述


Stat Summary

 

Stat TargetPlatform   // 顯示目標平台信息


Stat TaskGraphTasks  // 顯示TaskGraph任務的性能數據

 

Stat Text   // 顯示文本的性能統計數據


Stat TextureGroup   // 顯示紋理組內存計數器

 

Stat TexturePool


Stat Threading   // 顯示線程處理信息


Stat ThreadPoolAsyncTasks   // 顯示ThreadPool Async任務計數器


Stat Threads   // 顯示線程信息

 

Stat Tickables    // 顯示Tickable的性能統計數據

 

Stat TickGroups   // 顯示Tick組的性能統計數據

 

Stat Timecode

 

Stat UI    // 顯示UI性能信息

 

Stat UObjectHash   // 顯示散列的UObject信息   默認不打開,需手動開啟


Stat uobjects   // 顯示游戲中UObject的性能統計數據

 

Stat Version

 

Stat VirtualTextureMemory

 

Stat VTP

 

Stat AndroidCPU

CPU共有3個Group:

Group 0:有4個核心   Max frequency Ave:2841600.00

Group 1:有3個核心   Max frequency Ave:2419200.00

Group 2:有1個核心   Max frequency Ave:1804800.00 

 

Stat OpenGLRHI

 

Stat MetalRHI

 

Stat VulkanMemoryRaw

 

Stat VulkanMemory

 

Stat VulkanPSO

 

Stat VulkanRHI

 

Stat D3D12RayTracing

 

Stat D3D12RHI

 

Stat D3D12Memory

 

Stat D3D12PipelineState


Stat D3D12DescriptorHeap

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM