Skeletal mesh collision drops large fps

If there were no collision with skeletal mesh , I would get 90+FPS.


However, if Skeletal mesh collision is enabled, the FPS is only 50+


This is the physics asset

The result of Insights

It looks like the culprits are UpdateOverlaps and TickGrass. I didn’t use Landscape Grass Type in Landscape, I tried to disable it but no luck, I even searched Unreal source code, in Landscape.cpp bGrassUpdateEnabled is always True and cannot be changed. I don’t have any clue about UpdateOverlaps.
Thanks for any reply!

Hi, I’ve no idea how to read unreal insights, but for the landscape grass update you can change grass.TickInterval in the console and set it to something larger than 1 (by default updates every tick, if you would set it to e.g. 10 it would only update every 10th tick).

For UpdateOverlaps, I think that is just collision, so you can’t really increase that (you could try to reduce the number of physics bodies in your skeleton).

Generally speaking, collision and tick grass are on the CPU (you could use ‘stat game’), so they should not affect your GPU time (but your results show it does, so there is something strange, maybe try the performance in standalone instead of editor?). Also collision for a single mesh should not take 10ms. So there is likely something else going on there.

Thanks for your reply. I have a R9 7900X and a RX 7900XT, I don’t think the FPS drops so much with less than 20 capsule collisions, I believe it’s something else, and i didn’t do any extra things for the skeletal mesh

(post deleted by author)

Maybe to try and pin it down, first make sure that all the sub meshes (Feet Part, Hands Part, …) do not have any physics asset set (I don’t know how the engine handles this, but if all of them have those 20 capsules as well and simulating then that might explain the drop). Then try to remove the physics asset in the main mesh as well and check performance (whether its again as high as without collision on the mesh).

Thanks for your suggestion. I’ll try it tomorrow(I’m pretty sure none of the children meshes have collisions enabled). If there is no improvement I will modify the engine source code to confirm the cause of the problem.

When I set the physical assets of the skeletal mesh to None, the FPS returned to normal.
To understand why, I modified the engine source codes (adding code to calculate how long codes execution took), The problem turns out to be the “if (Leaf.OverlapFast(QueryBounds, Visitor) == false)” line inside the QueryImp function in AABBTree.h, where takes 0.3 ms in QueryImp. That means 10 collisions will take 3 ms, and 20 collisions will take 6 ms.
I can’t go any further at this point and hope someone can give any tips

I finally found the cause of the problem. One of my houses had too many collisions and it’s very close to the player, which would have made collision detection much more expensive, so it took 0.3ms.
And now, I removed all collisions and got 110+ FPS

1 Like