Add Asset summery back to the new ProfileGPU (5.6+)

Hi all.

It would be awesome if the new 5.6+ ProfileGPU had an AssetSummary like the old one.

In UE5.3, I could use the following console commands to get a useful summery of draw calls per mesh, which included instancing information.

Log LogRHI Verbose

r.ProfileGPU.PrintAssetSummary 1

r.ShowMaterialDrawEvents 1

ProfileGPU

In 5.6, when using the new ProfileGPU (ie RHI_NEW_GPU_PROFILER == 1) this summery and cvar are gone.

MeshList , TriangleCount , DrawCallCount

Islands_1_Hospital 3 instances , 21174 , 1

Tree_3_ConiferLarge 4 instances , 14572 , 2

Amb_BirdFlyingFlock_VFX 3 instances , 13920 , 1

StreetLamp_1 5 instances , 13170, 1

Objective_S0_Skelmesh , 12964 , 6

Tree_2_ArborvitaeLeaves 5 instances , 12635, 1

Foliage_8_BushA 11 instances , 11902 , 2

Pistol_S0_Skelmesh , 11502 , 6

StreetLamp_0 2 instances , 11056 , 1

WindowFrame_11_TowerB 48 instances , 10272 , 1

This summery was performed in Engine\Source\Runtime\RHI\Private\GPUProfiler.cpp

void PrintSummary()

Thanks for your consideration!

Hi Morton,

Thanks for reaching out. I have contacted our main dev, who wrote the new GPU profiler, but they are out of the office this week. Once I hear back from them, I’ll let you know if we can accommodate your request.

Cheers,

Tim

Hi Morton,

So I just got done chatting with the dev who had refactored the GPU Profiler. They told me this logic was intentionally removed because it relied on guessing the material/mesh name from the formatted scope string, which is unreliable and prone to error. It might be possible to add something similar again. Still, since it makes less sense when using Nanite, we don’t know the actual triangle count or other relevant stats on the CPU, so it likely won’t be very beneficial for you. Would you like to use this feature for a project with non-Nanite geometry assets?

Cool, currently in the process of writing my own.

Since our specific project does not use GPUScene, let alone Nanite (No auto-instancing/Draw call bucketing), we have extra debug available to us.

MeshDrawCommand.DebugData.PrimitiveSceneProxyIfNotUsingStateBuckets->GetOwnerName().ToString()
MeshDrawCommand.DebugData.PrimitiveSceneProxyIfNotUsingStateBuckets->GetLevelName().ToString()

Will let you know how this goes.

Idea is to collect draw calls per actor + debug efficiency of HISM culling and internal instance HISM culling.

Ok, in your case, you might be able to get the needed information and estimate the draw calls required for your HISMs. If you want to share your findings later in this thread, we can try to review the changes and provide some feedback