We are working on optimizing MetaHuman rendering. In scenes with multiple MetaHuman NPCs, draw times skyrocket near characters with groom assets. This is especially problematic on lower-end hardware, so we are trying to reduce that overhead.
While investigating, we found that rigid bindings EGroomBindingType::Rigid carry a surprisingly high overhead compared to having no bindings at all — nearly as expensive as skinned bindings, despite performing no deformation.Our test scene contains 50 MetaHumans sharing a single groom asset with “Use Cards” enabled (no strands). We measured three configurations using the built-in FPS chart command and Unreal Insights, with a full system reboot between each measurement:
Avg. RenderThread frametime
- Skinned bindings (default)~10.42 ms
- Rigid bindings~8.50 ms
- No bindings (groom attached via AttachComponentToComponent)~5.44 ms
Rigid bindings save only ~2 ms over skinned bindings, but still cost ~3 ms more than no bindings at all. Given that rigid bindings do not deform anything, we would expect the cost to be close to the no-bindings case.
Our questions are:
- Where is the ~3 ms overhead coming from with rigid bindings? Since rigid bindings do not deform anything, why is the cost not comparable to simply attaching the groom component without a binding?
- Is AttachComponentToComponent without any binding asset the recommended approach for cards-only grooms that just need to follow the head? It performs significantly better, but it feels like a workaround rather than an intended workflow.
- Are there plans to optimize the rigid binding path, or to introduce a mode for groom components that avoids per-frame binding evaluation when no deformation is needed?
[Attachment Removed]