Setup: UE 5.8. MetaHuman Character → Assemble → Blueprint actor. A custom hair groom was authored by an artist in Blender and exported as Alembic. It imports fine (42,634 curves, Root UV and Width attributes present). Hair cards generated with the Hair Card Generator. Groom bound to the character’s face mesh.
Problem: The hair renders correctly in the editor and in PIE. In Standalone (-game, uncooked, same assets) and in a packaged Development build it is completely invisible. There are no errors or warnings in the log — it simply isn’t drawn.
The part that makes this strange: the same character’s other grooms — beard, mustache, eyebrows, all MetaHuman-provided — render perfectly in Standalone and in the packaged build, in the same frame. If I swap my groom for a MetaHuman one on the same groom component, it renders immediately with no other changes. So the groom system itself works fine in a build; only this one imported asset is invisible.
What I have already verified or tried:
r.HairStrands.Dump 1in the packaged build shows the cards data present and GPU-resident (~7.3 MB) — the data is cooked and loaded, it just isn’t drawnshowflag.LODColoration 1in Standalone shows the character at LOD 0 (white), so it is not an LOD or screen-size problemr.HairStrands.Cards= 1,r.SkinCache.CompileShaders= 1, HairStrands plugin mounted (confirmed in the build log)- Tried
r.HairStrands.Strands0 and 1,r.HairStrands.UseCardsInsteadOfStrands 1,r.HairStrands.SwapType 3 - Tried RBF Interpolation on and off, Forced LOD via the LODSync component,
Use Cardson the groom component - Cards descriptors now exist for every LOD index of the groom (LOD 0–5), each with a mesh and a material assigned
- Groom binding rebuilt after the cards were added
- Materials are assigned on the groom’s material slots
Two differences I can see versus the grooms that do work:
- The working ones have cards as
<Groom>_CardsMesh_Group0_LOD0..4; mine has Hair Card Generator output as<Groom>_LOD0/<Groom>_LOD0plus_TS0.._TS3texture sets - Assemble generates an
MI_WI_<name>_Cardsmaterial instance for the working grooms, but never generates one for mine
Question: what does a groom with generated hair cards require in order to render outside the editor? It works everywhere WITH_EDITOR is true and nowhere it isn’t, with no error reported. I also noticed that UGroomComponent::IsHairMaterialCompatible returns Valid immediately when the geometry type is not Strands, so no material validation warning is ever emitted for cards — which would explain the total silence in the logs.
Any pointer would be appreciated. Happy to provide logs, the groom asset settings, or a repro.
(First pic is from standalone, second in PIE)

