I have USD files that contain BasisCurves, however when I try to import the USD file I get nothing. No particular error message is provided. I have tried both with and without using the Interchange Framework importer.
I referenced this page
https://dev.epicgames.com/community/learning/knowledge\-base/jB8v/unreal\-engine\-usd\-ue\-format\-support
The germane bits are this:
- Alembic Grooms that follow the Alembic groom specification
- Groom assets (static and baked animation) are imported from USD BasisCurves with the custom GroomAPI schema
- Groom Caches (baked animation) and Groom tracks on LevelSequences
- GroomBindingAPI schema allows to set up a groom on a character. This will generate a groom to bind to a skeletal mesh or geometry cache allowing the groom to animate with the mesh
- Usage: Right-click option on the USD Stage editor to apply dedicated schema to prim to be imported as a Groom
Limitation: Not all attributes are handled in some scenarios (native USD supports only vertex positions)
Limitation: Editor only since groom building is not supported at runtime
So my question is, what is this GroomAPI schema that is being referred to? I could not find any Pixar documentation on that. Does the USD actually have to be referencing an alembic? Can you show me a USD file that *would* import correctly so that I can compare mine in case this is a problem on my side? Is there anything else I can be doing here that I may not be?
[Attachment Removed]
Ok, I guess the directions were there in the very post I made I just wasn’t putting two-and-two together about having to usd the USD Stage Editor (I had only ever used the Import into Level functionality). Once I added the GroomAPI to the USD it worked. In fact, it works once the schema is applied regardless of whether you use the USD Stage Editor. I can use the “Import Into Level” or a normal Asset import task via python to bring a groom in assuming the schema was already applied in the USD file.
Just this line added to the prim seems to make it work.
- prepend apiSchemas = [“GroomAPI”]
So I guess my question now is…why is this step needed? Why did we need a custom schema that a pipeline outside UE presumably cannot add? Can we not just import all BasisCurves as grooms?
[Attachment Removed]
Hi Christopher,
Many apologies for the super late reply. The intent with the GroomAPI schema is so that we don’t pull in non-hair related basis curves prims. The typical pattern we’ve gone for is to use schemas to opt-in, rather than figure out mechanisms to opt-out. Also there’s often a bunch of groom_* attributes that get authored on the curves prim, and so applying the GroomAPI schema is a reasonably clean way of signaling to the importer that it should look for those attributes.
You’re right though that the GroomAPI schema is meaningless to other consumers. At the same time it doesn’t really cost anything to have around.
Thanks,
Antony
[Attachment Removed]