Groom Assets, Alembic Schemas and Alternate DCC workflows

While studying an alternative solution to XGen, Yeti, Houdini, Ornatrix, C4D etc; I began to look at the Blender workflow for Groom Assets and found some good degrees of success exporting to alembic using the particle system’s results.

Blender

The issues with this workflow begin at the root, Blender. Both Blender and Maya handle exportation of Alembic files but Maya has scripting upon export to configure the alembic with the attributes requested by the Unreal engine documentation on grooming. A quick look at the script and it’s doing a little bit more under the hood with Maya which is understandable from a generic aspect. This will take some time to reverse engineer for other applications and figure out what is Maya specific and why it might be needed in other apps or not.

Couple this with the fact Epic’s main line of support for Grooming is centered around AutoDesk solutions, which is a bit counter intuitive for Solo/Indie developers and the complete opposite direction that Epic has been heading in general I find this disappointing, but I digress.

I am not opposed to the given industry standard but I would more than like to see the instantiation of Blender and other DCC applications for Grooming and given some attention by the industry, a great solution and natural progression for indie workflows and everyone in general.

ZBrush

I wanted to take the Blender workflow to the next level by using ZBrush to generate the Curves, then apply some manual grooming using ZBrush’s extensive setup. I exported the Curves from ZBrush but here is the next issue.

ZBrush only exports Curves as OBJ format, this is definitive and absolute, I have yet to see any information say otherwise and I even tried to simply export the Curves as Alembic using the polymesh export feature, the preview was set to show only the curves not the fibermesh and still exported mesh. Honestly I can not begin to imagine this is an issue ZBrush should manage to overcome and join the industry standard here, but also can’t help but think there are other workflows for this OBJ format, so off I went into Blender with this raw curve data.

I’d love to be able to open an alembic file’s raw data and somehow modify fields and append what is needed but I haven’t even begun to push into that vector yet, all I know is that Unreal handles a lot of stuff automagically if you lack these attributes they list as a requirement to your Alembic file and you should generally be okay without them for testing purposes.

So here we are back in Blender with some huge curve files for a lot of fur on an animal mesh. Blender, as anyone who uses it knows, does not like to handle very high volumes of geo data. At least not as much as ZBrush can handle as it’s been optimized for a specific viewport task and not geared for large environments etc.

The curves were fine, import was fast. But I couldn’t help but try to import the fibermesh and convert those to curves, and many other things I switched up while experimenting. But back to the point.

I export the curves from Blender as an Alembic and wallah, we have a groom asset.

I bring it into Unreal, the Groom Importer kicks up, I slap in some generic settings seen on the docs and in the countless videos I’ve been watching and everything seems fine.
But as soon as I double click the Groom Asset, the standalone groom asset editor is nothing like what I have seen others using.
I figure okay, well maybe Epic changed something… Nope. I drag the asset out into the level, or add it to a character BP and I see that there is another more glaring issue.
The hairs are generating, or maybe it’s the curves, I dunno but what generates is a giant mess of ultra long hair fibers (27k+ length param) that seem to entomb the mesh, thread around it and then revert to local transform 0,0,0. My hair curves are about as short as a men’s crew cut… maybe 3-6 inches at most in any DCC I import them to. (roughly 7.5cm long)

Some thoughts on this is that the OBJ format from ZBrush has lost some data or configured something in a manner non conducive to this workflow. Perhaps the root of the curve is undefined or worse, redefined for some reason.

I will update this later with more information and screenshots or breakdowns if anyone wishes but I was hoping someone with a bit more grit and experience under their belt could provide some insight or point out a way as to how to study any of the aspects I have listed above. I’ll keep at this but feel like I am easily outclassing myself here and should maybe wait for things to mature further along on all sides of the industry.