Improving Alembic support in 2.79 and 2.8

Alembic logoBlender 2.78 saw basic Alembic support for both import and export. The initial patch was provided by DwarfLabs, and was then integrated into Blender by Kévin Dietrich. For the previous month, I (Sybren) have been working on bringing Alembic to the next level, and that work isn’t done yet. This means that things are going to change; for the better, of course, but it may also mean requiring a re-export of your Alembic files. In this blog post I want to sketch my plans, and collect feedback from you, our dear Alembic users.

Broad plans

The final goal of my work is to be able to take an animated character, like Hendrik IJzerbroot a.k.a. Agent 327, and export it to Alembic for further processing in either Blender or other software. Furthermore, we want to be able to take animated characters from other software and load them into Blender. This includes support for:

  1. Instanced geometry
  2. Dupli-groups and dupli-objects
  3. Hair and particle systems

Furthermore, we want to change the workflow so that it will be easier to re-export characters by coupling export settings and collections of exported objects, giving the artist more control over what is exported exactly, and automatically (re-)apply certain modifiers and materials upon import.

Part of this work can be done for Blender 2.79 already, while other parts will have to wait until Blender 2.8.

Ideas for Blender 2.79

Blender 2.79 should be a stable release. As such, I’ll only try and do bugfixes and non-invasive improvements here. For example, I’ve fixed some bugs with coordinate transformations (we use Z=up in Blender, but Y=up in Alembic files). As a result, once those fixes are in the master branch (and thus in Blender 2.79), files will export & import differently. If you exported your files from Blender, you may have to re-export them to have any benefit of those fixes.
My questions to you are:

  1. Is it okay for you if you have to re-export your Alembic files when switching to Blender 2.79?
  2. What does your pipeline look like? What software do you use to generate and import your Alembic files?

More detailed plans are available on my personal wiki page.

Ideas for Blender 2.8

Blender 2.8 will introduce the concept of collections, which we could use to determine which objects get exported to which Alembic file. Furthermore, these collections could contain information about which modifiers to bake into the mesh (“skip the final subdivision modifier”), or to toggle between render-enabled and viewport-enabled modifiers.

We also want to work on a tighter integration between Blender’s data model and Alembic (or other cache formats), to be able to stream data from Alembic into the scene, without requiring the complex setup of constraints and modifiers that the current importer sets up. Together with other Blender devs we’ll look into an improved in-memory caching system for Blender 2.8.

I’ve already been working on supporting instanced geometry (i.e. multiple objects using the same mesh data) and dupligroups (i.e. empties that duplicate a group). These changes are more likely to be included in Blender 2.8 than 2.79, since they really introduce new features and should be tested thoroughly before release.

My question to you: what are important features for your workflow?

Conclusion

Work on Alembic support in Blender is an ongoing process. What is really important at this moment, are your feedback and actual production-level Alembic files. We need both to be able to support actual film production scenarios. Of course we will treat all files as confidential, although we would also welcome some files we can use in public test cases & benchmarks.

Please leave your feedback here in a comment or mail me at [email protected]. To send files, send me a link or send them through a service like WeTransfer.

The Future of Overrides
This Summer’s Sculpt Mode Refactor
Geometry Nodes Workshop: October 2024
New Brush Thumbnails

45 comments
  1. vivoslot terus berupaya memberikan hiburan online yang paling profesional, menarik, dan memuaskan bagi para member setia, dengan layanan terbaik, menawarkan permainan terbaik, dan staf yang sangat profesional di lingkungan yang aman dan nyaman. http://51.79.184.83/

  2. My question is around alembic import in Blender. If i have an animated character in Alembic format. and imported into Blender. When I render frame 1, I assume cycles renderer will construct the bvh for the character geometry at frame 1; for frame 2, would cycles renderer be able to use BVH update instead of rebuild using the geometry data for frame 2? Does the cycles renderer have the concept of dynamic geometry whose vertices are moving each frame but the topology is not changing? This would be really helpful for animation.

    Thanks

  3. Yeah. Currently particle system exported by Blender doesn’t have age/life attributes of particles, as well as real particle number, when i read particle system from blender in houdini, If particle N1 dies, another particle becomes particle N1, taht way you can’t address them

  4. Awesome work so far.

    I think this was brought up above somewhere above but, +1 for getting custom attributes / data on the geometry to import into blender. currently exporting ABC from houdini I can only get Cd to come through as a vertex color in blender. We need to be able to access any data written to ABC in OSL.

    This is a crucial part of being able to use blender as a lighting / lookdev / render tool in a pipeline.

    This would also solve tacking material assignments when updating or modifying the abc cache, as I could just ask the shader to assign based on some index data on the geometry itself.

  5. What about creases – please put full openSubD support into the pipeline

  6. Hi there,
    Firstly, I’d like to thank you for developing this.
    Secondly, the most obvious thing for me would be the exporting of a particle system.
    Making something like a confetti burst is quick and easy in Blender but you cannot export the animated particles when an object is used as the particle object.

    Someone mentioned VDB support earlier…..
    I work with quite a few 3D freelancers that use Houdini and they all want to see vdb support in Blender. Not sure if this is at all possible.

  7. Last time I tried to make a beach waves fluid simulation with high quality settings however when came the time to export into abc I couldn’t export my full animation (400 frames) in one file, blender were crashing as soon as I was pressing “export”

    However when I chose to export in smaller sections it works (10 frames)
    So I think it would be nice if we could chose to export an abc sequence like realflow or to make the code export frame 1 by 1 and then stitch them in one file.

  8. I think having the control over orientation is important, I worked in Houdini with X up and now all the alembic files come to Blender fliped cause it assumes that I worked with Y up in the other Package, also loading abc sequences from Houdini isn’t going that smooth for me, still testing the workflows, would love to integrate Blender into my pipeline and Alembic is a crucial part of that.

  9. If a fully fledged and production ready alembic toolset is contained within Blender I can see a lot of studio’s re-visiting and testing this out. Each time I come back to Blender to see where .abc handling is I’m encouraged to see such roadmaps but have to fall back to Houdini and Maya to carry on with my work.

    • That’s great. Please define what “a fully fledged and production ready alembic toolset” consists of, so that we can make it!

  10. Are there plans to support Alembic Core’s layering system?
    I know this may not be useful for everyone but If you want to build a multi department pipeline it could be a very powerfull production tool (especially if you’re taking on a film project). Put simply it lets to build a composite stream of alembic data using multiple alembic caches.

    eg. model.abc + uv_data.abc + animation.abc + fur.abc = final_cache.abc

    Another very important part of the system was Material X which they used to apply the shaders to he procedural at render time. The system also talked directly to the maya viewport and piped in an open-gl preview of the cache, so the caches was never truely inside maya and made everything very light to work with.

    Worth a look as you develop Alembic more.

    Cheers

    • I forgot to mention, This is based on Rodeo FX’s production pipeline which they showed off at siggraph.

    • We have no concrete plans to add support for this at this moment. Right now this is mostly because we’re not planning on using such a pipeline ourselves at the Blender Institute. It’s an interesting approach, though, so we’re definitely open to patches implementing this!

  11. I’m not very experienced with ABC but I would love the ability to export/import cameras following curves or curves in general (bezier or point)

  12. Hello Sybren,

    A couple of months ago I attempted to make use of blender as part of our animation pipeline, but unfortunately I failed due to the way the alembic integration behaved.
    I will explain what I was trying to do in the hope that this will be useful to you, and that I hope in future I will be able to get it working.

    We are mainly using Maya, but we also use Nuke and 3dsMax. We publish cameras and geo as abc’s, and our layout publishes are json files containing a list of assets and there transform.

    in this way we can rebuild the same scenes in maya, nuke, and 3ds max.

    my plan for blender was to have a script that would build a layout and then render it. this would then be an automated process that would run whenever there was a new camera/layout/animation cache.

    while it is possible to import abc files via a script, there was no way that I could find to wait for this process to finish and then do something else.

    so if i have a script that imports a scene and then renders it, i find that the render process happens before the abc is actually imported. I also cannot assign a shader to what I have imported from the abc – since it is not actually in the scene yet.

    Another small annoyance is knowing what has just been imported. I started writing code to check everything that is in the scene, then do the import and compare the difference to find out what I have actually imported.

    an ideal function would complete only when the import is finished, and return a list of the new nodes that have been created in the scene.

    Regards

    • That sounds like a useful workflow indeed.

      As I wrote in the article: we’re still looking for actual production files. We can treat them confidentially. It’s really important to have such files, rather than constructed simple examples, to thoroughly build & test new features.

  13. Hey Sybren!.. please talk more about the PBR viewport.. this is something Im really excited to see in Blender and would be cool to follow on updates on it :D

  14. A small thing that still helps with frustration is a more accurate display of the progress bar when exporting ablembics. I often experience that the progress bar runs to 100% very fast, but that blender is still exporting the abc-file afterwards and is frozen for a couple of minutes.

    In my case I’m exporting 7 objects (pretty hi res) that is instanced to +4000 objects

  15. If it is possible to include objects custom properties in the alembic it would be fantastic.

    This would make it possible to track assets (for example by using a integer ID as a property) when assembling the scene in houdini for example.

    The scenario would be

    1. asset lookdev in houdini (or other application)

    2.asset layout of multiple assets in blender

    3.export blender layout to alembic

    4.import alembic layout to houdini and connect shading from lookdev asset to the corresponding assets in the alembic layout that is imported to houdini

    • Daniel, do you have documentation for me about how Houdini (and others) store custom properties in Alembic files? Example files would help too.

  16. Hi, I spoke about extra attr of .abc in this ticket https://developer.blender.org/T50725
    For lot of big studios, abc and its extra attr is the skeleton of the pipeline, I am technical director and i really want to integrate blender in our pipeline as main software, but without this abc extra attr it’s not possible… only 3ds max don’t manage that, so please become better than 3dsmax :p
    Thanks for all !

    • I agree this is really important for bigger pipeline work.

      • If it’s important to you, please help us actually implement this by providing production files that show off the features you’re looking for. We can treat those files confidentially, no worries there.

    • Colin, please join the discussion at our tracker. I’ve asked for example files that show what you want to have, but you haven’t replied yet with actual files.

  17. How about being able to export fluids simulations from blender using alembic? I haven’t tested that. Is it possible right now?

  18. My workflow requires exporting cloth simulations to Unity 5. Is there any development planned for simulations?

    • There is, but it’ll be at a lower priority than animated character meshes. However, we already use cloth simulation in the Agent 327 Barbershop short, so it’s definitely on our radar.

      • Not sure I get why any geometry is not exportable via Alembic in Blender. (Sorry don’t know Blender well enough yet.) I would assume that any selected geometry in the scene (regardless of where it comes from) should be exportable. Linked, grouped, simmed, baked, dynamically driven, etc, etc… does it matter where the geometry comes from?

        Sorry if I am missing something here.

  19. Great news! I am researching a workflow using Blender to animate characters and render them in Unreal. It has been a problem not to be able to export linked/grouped mashes. Long time to export is also a problem.

    Re-export will not be a problem.

  20. this is probably not part of the project, but for my wrokflow as a freelance artist compatibility with other apps its really important, i was able to import alembics send to me from max but i wasn’t able to sent them back because i couldn’t send animated empties(try to bake some on boxes but it was no good).
    Other serious problem i had presented when i modified a model that was sent again from max, and when i wanted to send it back i discover that the mesh went right but with no uVS and the vertex numbers or indices changed, so i wasn’t able neither to take the uvs in an fbx model and transfer the uvs from there, so alembic would be a really practical solution but again wasn’t usable.

    The propose here its great, having this kind of pipeline will sure improve stand alone productions, would be great to know if companies like the foundry, maxon ¿autodesk? will provide native compatibility support for blender alembic files, that would be actually awesome.

  21. A couple of thoughts:

    Support for more than just geometry would really help. Cameras, lights, transforms, meta_data, etc will all help in adopting a more deeper pipeline integration.

    Reading/writing should be simple and scriptable. I like what I am hearing about the collections as a lot of the baking might have to happen on the farm and not done interactively by the animator. Being able to script the collections to export in batch and then reassemble inside the lighting shot with material information would be great.

    The idea is that you have a pipeline that supports animators updating anim scene files, exporting the abc files and a lighter importing them with texture information (material.json???) to be able to light the scene without any connection back to the animation blender file.

    Something like this:
    Rig.blend –> AnimScene.blend –> (Asset.abc + MarterialInfo.json) –> LightScene.blend –> Images.####.exr

    Camera export followed by lighting export is really important. Camera is the big one where you want to export the camera along with the geometry (separate files) to be able to reassemble in the lighting shot.

    Materials and how to have an Asset.blend export the Geometry Collections along with the material connection information so that you just load into your lighting scene the geometry.abc along with some level of material information is key.

    • Corban (Corban G?). You’re basically talking about USD ;) Which does a bit more than alembic in this pipeline regard.

      Brian

      • # yeah corban g

        I am not looking for USD exactly. (While I do want USD support in Blender, that is a different topic. :-)

        Sorry I am not suggesting that this project support Surface information. I would expect that to happen at the pipeline level. (Something we would do here at Nimble.)

        What we are hoping for here at Nimble is for Blender to support the key definitions of geometric data types for Curves, Nurbs patches, Face sets, and Cameras. If we have geometry and set/group information then we can build the surfacing pipeline on our side. We just need to make sure that we can setup the same structure in the lighting application (blender, katana, maya,etc) as we had when animating in Blender and exporting the geometry (via alembic) and surfacing information (via Nimble pipeline).

        It’s really just supporting the standards that is currently setup by the the Alembic OpenSource community. Camera support is important to take camera information in and out of Blender. Transform information is used for exporting data beyond just geometry. Blend data is used for… well whatever the pipeline needs.

        Hope that clears things up a bit.

    • A defined workflow for shader re-assignment would definately be good. Having worked with Alembics for the last few years in production I’ve seen a number of solutions

      *Shader hookup file (say your json)
      When the objects are loaded into the scene their materials are loaded and assigned using a lookup table. This is really nice but can break if the information your using to do the hookups is modified (say someone renames a mesh).

      *Dummy Rig.
      A dummy heirarchy is present in the scene before import of alembic. this has the latest shaders on it. when the alembic meshs load they’re replace the dummy model and keep its shaders. Sometimes people dont replace the meshs they simply bind then shaded mesh to the alembic and hide it.

      And yeah Metadata is absolutely essential. all channel data should be embed-able, along with any arbitrary stuff you want to attach like UUIDs, or tags.

      • replying to myself here. but MaterialX solves this problem really nicely, especially with ShaderX.

  22. Something that would be really noces is the ability to easily loop and offset animation data of alembic files, this is useful when you want to populate a scene with characters that have the same animation, at this point is quite cumbersome even more when there are multiple meshes involved in one character

    • Yeah being able to offset would really help. check out Maya and Houdini as they handle offsets really well. The alembic node should be able to change the start/end time along with time offset and speed. (Also cycling.)

      • The free version of Houdini doesn’t support Alembic, and I haven’t checked Maya yet. So if you want me to check them out, please donate a license to the Blender Institute.

    • This is definitely something we have in mind, since that’s also what we did (with another cache format) for Caminandes Llamigos to get the crowd of penguins.

  23. Sounds nice. Maybe its possible to import lights from different tools too. Right now the lights import from houdini dosent work.Also important is a vdb volume importer via alembic.

    • Importing the transformations of the lights shouldn’t be a problem. I’d have to investigate into other lamp properties to see what’s actually stored in Alembic, though. Do you have an example file for me with lights exported from Houdini, together with the Houdini file?

In order to prevent spam, comments are closed 7 days after the post is published.
Feel free to continue the conversation on the forums.