Hey guys,
We’re working on a project that requires a lot of deforming/destruction geometry so instead of writing our own format or trying to animate everything with bones, we decided to build an Alembic Importer .
After a couple of weeks, I finally have (a very basic) version of the entire pipeline working: (export from Maya -> compiled abc format -> importer in UE4 -> UAbcComponent for rendering)
Here are the high-level things on the roadmap over the next couple of weeks.
Apply interpolation between frame samples. Right now it only animates the
Multithread decoding as well as use a ring buffer to draw into the alembic vertex/index buffer
Vertex compression. Right now each abc file stores 44 bytes per vertex.
Import more data properties that come from Maya and convert to UE4 formats (normals, uvs, orthonormal tangents, rhs to lhs coordinate transform). Right now, everything is off
Support rigid animation. Only deformable animation is supported at the moment.
Things that are not going to be added anytime in the foreseeable future:
Mac/Linux Support
Non-desktop targets
SM4 or lower
Thanks to the Epic guys (Daniel Wright, NickP, JamesG, & Lina Halper) for answering my deep dive questions about the engine animation/rendering RHI interfaces. Will compile all the insight into a longer blog post once I’m done.
And thanks to & for their samples - was helpful in figuring out how to register a and an importer.
We may have met, it was a super busy weekend. I’m attached to Marshmallow Laser Feast.
There’s a pretty wide range of stuff we’re looking to use it for. The most obvious being character performance captures (with dynamic muscle/fat simulations) baked down onto geo caches and then rendered in the engine in real-time, plus clothing and bigger more interesting physics simulations.
Yeah, we’re thinking the same thing down the road. Would you use it for a linear play through (e.g. in-game cinematics) or something that was more dynamically driven?
Well for work stuff, it’d be for linear stuff - but for my personal game project, I’d kill to have facial animation for characters in cutscenes and conversations etc.
Had a chance to jump back on the Alembic pipeline this week. Our current project doesn’t require deformable motion so I switched to adding rigid motion support.
10,2400 animated different meshes (even though they’re all cubes in the screenshot) rendered through 10 “draw calls”
All done through constant buffers + object indexing into VertexBuffer blobs.
5.2ms / 9.2 ms in VR. [190 / 108 fps]
Right now, this is just UE4 infrastructure to support all of this. It took about a day to implement it in my DirectX harness but took the rest of the day to figure out the UE4 shader/custom rendering plumbing.
Also, limit of 1024 objects per group. This limit comes from constant buffer resource limits.
If I get a chance, I’ll try to glob multiple cbuffers per draw call or use tbuffers/generic buffers. From the looks of it, general buffers only incur a slight overhead over constant buffers on my 780ti but I think the variance could be high across different GPUs/drivers.
Next up, update my alembic parser code to extract rigid motion into a separate file
this is awesome!
I just picked up houdini indie which can export alembic files, would this be able to read that or is it maya only?
I’d be happy to help test it out
Possibly but it’ll probably read the data wrong. Right now it assumes the abc file was exported by Maya so it uses Maya’s coordinate systems and default units for conversions to UE4.
What are you trying to export from Houdini into UE4?