Groom hair on metahuman crowd high-res actors & matching ISKM hair color/materials

We are researching the new MetaHuman Crowd pipeline in UE 5.8 for our game. Our goal is to use cheap MetaHuman NPCs for villages/player settlements, while preserving high fidelity when characters are close or in dialogue.

We would like to use groom asset strand hair on the high-res actor representation. The default crowd pipeline seems to use skeletal/card/mesh hair for the generated crowd actors, and strand groom hair is not supported out of the box for high-res crowd actors as far as we can tell.

Questions:

  1. Are there plans for Epic to officially support groom asset strand hair on MetaHuman Crowd high-res actors?
  2. What is the recommended approach today if we want high-res actors to use strand grooms while keeping ISKM/card hair for lower-distance crowd representation?
  3. With our current approach described in “Steps to Reproduce”, the geometry swap works, but hair color/material appearance differs significantly between ISKM and high-res actor. The ISKM hair appears darker, while the high-res groom/card hair appears brighter/lighter, even if forcing LOD2 which is the same mesh as in the ISKM. Is there anything we can do additionally, to bridge that gap?

[Image Removed] [Image Removed]

Video of how it looks with strands enabled (LOD1/0):

https://www.loom.com/share/e3e7ae3b80f94588a9f4d534a497751e

From inspection, it looks like the ISKM hair uses the crowd instanced material path, for example MI_Hair_Cards_Instanced, with Use PerInstanceCustomData = 1. The high-res actor/card path uses actor material instances, for example MI_Hair_Cards_Actor, with Use PerInstanceCustomData = 0. Our runtime UGroomComponent then uses groom asset materials/MIDs and copies parameters from the actor card material, but this does not fully match the ISKM material path or the per-instance custom data.

What is the correct way to make the high-res actor/groom hair match the ISKM hair color and shading? Should we copy the ISKM custom data into actor/groom material parameters, use the generated actor card material as the groom card material parent, or is there an intended pipeline hook for transferring these values?

We are happy to share a repository of our approach if it helps, just let me know.

Best regards,

Matthias

[Attachment Removed]

Steps to Reproduce

How we set it up:

  1. In Unreal Engine 5.8, create or open a MetaHuman Crowd collection using the new MetaHuman Crowd pipeline.
  2. Generate crowd instances using the standard instanced/Nanite crowd representation.
  3. Configure the close-range/high-res actor representation to spawn an actor based on BP_MassHighRes.
  4. Add runtime UGroomComponent strand groom support to the high-res actor, using the selected MetaHuman collection groom/binding data.
  5. Force the high-res groom LOD to a card LOD, for example groom LOD 2, to compare against the ISKM/card hair representation.
  6. In PIE, move close enough for the crowd character to switch from ISKM/instanced representation to the high-res actor.
  7. Compare the hair color/shading before and after the representation switch.
    [Attachment Removed]

Hi Matthias,

Here are some answers to your questions:

> Are there plans for Epic to officially support groom asset strand hair on MetaHuman Crowd high-res actors?

In short, no. We deliberately chose to make the high res actors use skeletal meshes to avoid the performance overhead of groom components, and to make sure the shading looked as similar as possible to the ISKM characters.

Your idea to use strands is a reasonable extension of the Crowd pipeline though, and it should be possible, although it may be difficult to get the shading to look similar in all lighting conditions. If you can afford to have more high res actors in your scene, that will certainly help, as the transition point will be further from the camera.

> What is the recommended approach today if we want high-res actors to use strand grooms while keeping ISKM/card hair for lower-distance crowd representation?

Your approach is good. To do it properly, you would want to copy the crowd collection pipeline class and the groom item pipeline class, and modify them to pass the actual groom asset through the build data to the final assembly output struct. You’ll need to experiment with adjusting the materials to make them closer in appearance -- this is no easy task, so I recommend starting here, as the results will affect your whole approach.

> With our current approach described in “Steps to Reproduce”, the geometry swap works, but hair color/material appearance differs significantly between ISKM and high-res actor. The ISKM hair appears darker, while the high-res groom/card hair appears brighter/lighter, even if forcing LOD2 which is the same mesh as in the ISKM. Is there anything we can do additionally, to bridge that gap?

I recommend right-clicking on the Collection and using the Unpack option to extract the generated assets into their own folder (called Unpacked by default). This will allow you to find the hair card skeletal mesh and its materials, and then you can compare it side by side with the groom and its materials to make sure the material parameters are all the same. I believe the cards use a different shading model, or at least some specialised material nodes, when run through the groom system, so if the material parameters are the same, the difference is most likely in the groom shading itself. You would have to dig into the groom shading to understand the differences and work out how to replicate the same look on a skeletal mesh.

My Unreal Fest talk on MetaHuman Crowds has just been released, so although I didn’t cover exactly what you’re trying to do, I did cover unpacking collections and some other tips, so you may find more useful context in the talk: YouTube

I hope this helps!

[Attachment Removed]

Hello Henry,

Thank you for the reassurance and the hint to the unpacking workflow, that will definitely help with debugging!

I already watched your talk and gained a lot of insights from it, as well. This is a really exciting topic, I hope crowds will make their way into our game soon.

Best regards,

Matthias

[Attachment Removed]