Referencing and updating loaded Alembic (or any format)

Note
First off, I am not an experienced Blender user and I come from a Maya background. As such some of the terminology I might be using would be wrong for Blender, so I’m trying to explain my use case as I go. :wink: Also, I’m using Blender 2.8 beta.

Referencing, what am I looking for?

I’m trying to reproduce a setup like Maya’s referencing. Specifically allowing me to load a file format (in my case highest priority is Alembic but FBX/obj and others could be of interest too) and then update to another version of the file at a later stage, preserving my “local edits” on the content.

For example:

  1. Reference Alembic
  2. Position the content wherever I want. - possibly instance it.
  3. Assign some shaders
  4. Update the referenced Alembic to a new file (preserving local overrides/changes)

The idea of what I’d like to do is allow automatic assignments of “shaders” done by someone else (potentially updating them when the shader has done an updated version) and update the “pointcache” (alembic) when the animator did a new export version of his animation. Currently it’s unknown to me how to set up such a workflow in Blender.

Why am I looking for this?

As a Technical Director at Colorbleed I’m currently involved in integrating Blender into our open-source pipeline toolkit - (documentation). To do this right I must work towards a way that “works nicely” in Blender workflows as opposed to forcing Maya’s way of things. As such, if you have valuable information or links on Blender workflows for bigger productions that are about using shared content that is greatly appreciated. Here are some things of interest:

  • Linking a file from a rigger, and “linking and updating” that in animation when the rig has updates
  • Linking an Alembic and assigning overrides/shaders and potentially updating the loaded content when the animation is updated/revised.
  • Managing shaders/lighting scenes when animation/FX content is updated by someone else?

I’ve found these topics that discuss the same “idea” but don’t give me a definite answer on how to do it. It mentions things like linking and proxies - maybe of interest for others searching the same topic:

3 Likes

I was wondering whether the topic might be too complicated or asking too broad of a question? Is there any way I can direct my question more to allow the discussion to take of better?

Any pointers in the right direction would be welcome.

Hi Roy,

The Mesh Sequence Cache modifier might be a part of the solution you’re looking for, as you can reference an Alembic mesh on any object without messing with linked data and material.

Well, the question is this. When you say linking do you mean linking assets done in other apps and linking them a to a Blender scene or assets specifically done in Blender for Blender?

A Blender file can have many scenes and scenes can link/append from either all opened scenes or from other Blender files. This comes almost free. You can link any asset property really.

If you want to link assets done in other applications, your best bet is Alembic, .mdd and .pc.

Also this is going to depend on your final resting point for your assets. Are you rendering in Blender, Houdini or Maya?

Btw “linking” has a specific meaning in Blender, it is part of Blender so using to describe a proxy might not be the best way to express the need. “Link(ing)” is literally linking Blender data blocks between Blender scenes and files, but that is it. You do not get to have the same freedom for external assets.

1 Like

Hello!
We are also dealing with the implementation of Blender to our pipeline, I just found this topic and was wondeing if you found any solution to this? I tried the mesh sequence cache modifiers, which appears to be working in a correct way but I have not been able to succesfully update the alembic.

Hi @Donchuanltd,

We definitely made some progress with integrating Blender in our pipeline, a recent demo can be found here. It’s built for open-source pipeline Avalon that supports a variety of hosts and the Blender integration is still to be thoroughly tested but usable.

If you are still in the process of adopting a pipeline toolset I can definitely recommend Avalon. Feel free to hop onto that Gitter channel that has the demo video and I think there’ll be plenty of developers that are willing to aid you in getting it up and running for your production.

However, if you already have a pipeline and are just looking to figure similar things out it could be that the PR link could point you in the right direction. The Avalon pipeline works with a “studio configuration” which a version supporting Blender is also linked in the PR at the top, so definitely refer to that too if you need it.

Hope it helps. Whether it already fully resolves what this topic/issue describes I’m not sure yet… but we’ve definitely seen progress.

1 Like

@BigRoy agh this is quite funny :smiley: I actually saw this video yesterday, when Milan Kolar showed it to me at the office, I just noticed you are both in the getAvalonlobby. It looks awesome how you put it together.

The one thing I am trying to come up with is referencing an alembic file and being able to update it, so data transfer between other applications is possible. It makes a lot of sense to use Blender collections to publish assets but that works perfectly as long as you are in Blender environment.

I did what Noss mentioned above and imported an alembic file using the Mesh sequence cache modifier, which references an alembic file and keeps a live path pointing to the external file. But I have not been able to change the path and point to a different file for it to update, it usually unlinks, but maybe it is the right direction. If I come with anything I will let you know :smiley:

That is quite the coincidence! Looking forward to seeing what you end up with - let’s tackle this beast! :blush:

Any luck figuring this out?
I am trying to get it work as well, but changing the Alembic source will result in a 0,0,0 scaled mesh with no animation. I have tried multiple ways to get data in, but swapping it out to another sequence never works for some reason…

cheers!

Still just dipping my toes in Blender, but maybe scene linking would be the way to go with Alembics?

Current support for Alembic in Blender is to import, but with Blender scene and override system, you could import into a dedicated alembic scene and then link into the main scene.

Well well well. :slight_smile: Almost like a reunion happening in here @Toke_Stuart_Jepsen @BigRoy

I was also in search of an answer to this question, for Alembic specifically. Except I’ve gotten past the initial hurdle of updating Alembic and might actually be able to help!

In the case of the alembic having the same geometry, as is normally the case when e.g. only the animation has changed, you can quite conveniently do this from here:

It’s a little hidden away, but in that panel you can scroll down (despite there not being a scrollbar to let you know about it) until you find the currently loaded Alembics. Within which, you can find the absolute path it’s referencing. Turns out, this is live. You can update that. And when you do, presto! The animation is updated. Modifiers and materials are all preserved. Been using this successfully for a dozen or so shots now and it appears quite stable.

What’s lacking is also the reason I’m here. It doesn’t add anything from the new alembic. Which can be a bummer, if you set everything up but then included a camera in the next alembic. Or maybe you forgot UVs and added those later. You can still update it, but the new content just isn’t coming along for the ride.

So that would be my contination question to this thread. I’d like for new content to magically appear alongside the updated content, so that I can assign set those up as well. The workaround is to simply export a new alembic for new content.

1 Like

Did you try the scene linking?

Think you can have multiple scenes in the same blender file, so the import Alembic could replace a scene completely.

I haven’t no, did that work out for you? I’ll be able to take that for a spin in the coming days. Any warts I should be aware of?

Scene linking does not appear to be the solution, as (1) you need to create an override for changes and (2) materials cannot be overridden. Appears this is getting support in 2.9?

Reference

And even when it is added, I was expecting linking to be the equivalent of Maya references, where the file is linked and anything inside of it is included. But it appears you link specific elements of a scene, like an individual object? I can choose to import a “Collection” which does bring everything in, but then none of the actual members of that collection is visible or editable?

Did you try scene linking? :smile:

Hi! actually linking collections in Blender does feel like the closest thing to referencing in Maya. But is ‘Blender-only’. If you want to keep working with alembics, due to software flexibility, maybe you could have the pipeline automatically create a Blender file, bring the alembic and put it in a collection with the correct naming.

You can then reference this file into Blender and if another version comes up, you can update the reference version. Right out of the bat, whatever you link comes in like a bundle, so you are indeed not able to see whats inside nor override anything, which in some cases is actually useful, because its super easy for the artist to use in setdressing.

If you do need to override anything, you can turn on library override and access the whole collection. Then you are able to do per-object overrides. I use this all the time for characters, this way I can access the rig and keep all the references, so when I make changes in the master file, all my animations update. Also if you want to do per-shot optimizations this can be useful too.