Groom transparency/masking (hats/clothing/etc.)

Hello,

TL;DR - Has anyone found a way to mask/offset/remove certain hair strands within a groom asset? Do we really have to create unique grooms for every possible combination of groom + clothing?

We’ve been using the groom system for some time now, and the one issue that persists for us in all of our workflows (for both linear and interactive content) is the fact that groom materials cannot influence the visibility of the hair.

Naturally the most common use case here is to account for hats or other head gear. Creating unique grooms (and their respective binding assets) for every possible hat, hood or helmet really is out of the question for any game with significant character customisation or NPC variety.

We’ve considered building a custom asset that holds all possible variations of a groom to get around this, but it’s still the manual work involved for every possible clothing item that makes this impossible.

Not to mention situations where you might want to remove a limb and the body peach fuzz remains. (This is easier to bypass by creating a fuzz groom for each limb, but I’m still concerned about the performance overhead of that method…)

It’s really frustrating, because there are a number of ways we could handle this quite simply:

  • Sphere or other shape mask in the material which can be controlled in blueprints automatically as needed for each headgear item.

  • Using the surface uv sampling that grooms already provide to determine which hairs to render and which hairs to not render based on their scalp/uv root location

  • Custom depth methods, using a separate mesh to hide any hair within/under it.

Unfortunately, none of these methods seem to work because groom materials cannot be masked or translucent in any meaningful way.

On top of that, there is no way to apply WPO to groom curve vertices, so it’s not possible to use those same methods above to (for example) offset the curves inwards by some amount towards the root to “hide” the hairs inside the character mesh, or scale them to infinity and make them vanish.

It seems there is just no way at all to control either the alpha or vertex position of grooms and that’s really quite limiting for real-time and linear content uses.

Any support here would be very welcome!