USD workflow status in blender

Hello!

I am currently working on a huge project with lots of scenes, characters, simulations and tons of AOVs, layers, and so on.

This project made me realize how hard it is to keep track of things while scenes becomes complex and I thought that there must be a better way to handle things.

And I started looking into USD, saw solutions like solaris in houdini and I wondered what’s the situation in blender?

I know USD importer and exporter is present and being improved costantly, but I am looking for a good pipeline to assemble complex scenes with more ease.

I stumbled upon the hydra storm plugin, which had introduced something like that, a node editor to assemble scenes using a mix of USDs and blender native scenes. However I cannot see any recent updates. The plugin comes with blender, but there’s no USD node editor and it feels like the project didn’t get many updates

So… does something like that exists in blender at the moment? Is it being worked on?

1 Like

Nope.

Eh… Technically, but it’s been rotting on the backburner for a longggg time

3 Likes

thanks for the answer, and it’s a pity. Working on such a big project made me realize how hard it is to manage things this way. Dunno, maybe it’s just me, but just a stupid example… You create a new collection in a blend file with several linked scenes and/or render layers and you have to go set the visibility of this new collection everywhere. Terrible.

Even without USD, it’d be great to have a node editor where you can assemble collections together, feed them to render settings, compositing node trees and the render output settings.

Imagine being able to use the same collection set with different render output settings, or different collection set sharing the same render settings. Being able to quickly change settings for multiple collection sets, or just quickly create a new one as an exception.

2 Likes

There’s no infrastructure with USD in Blender that comes anywhere remotely close to what Solaris in Houdini is. USD in Blender is not much more than a basic file importer.

There have been updates, but it still lags behind by quite a bit in its implementation. There’s a USD addon on Omniverse that has more options than the native Blender one.

Also, the way USD in Houdini/Solaris is implemented gives it immense power and flexibility, but it’s also a pipeline that requires a deep study to get the most out of it.

Maybe you could build/hack something together like that in blender, but I imagine you would have to incorporate external tools into the pipeline?

6 Likes

Nvidia stopped developing it. I wouldn’t rely on it unless you have dedicated developers for it.

3 Likes

yeah I have this big urge to create something like that, however it’s a bit of a longshot. I have no experience as a developer whatsoever and I suspect this kind of thing is not exactly the right project to start learning some coding :smiley: but who knows :smiley:

It would be cool to have such a tool in blender in general, even better if fully taking advantage of the USD workflow in order to make blender easier to use in tandem with other softwares for complex use cases.

1 Like

This might be worth looking into, but honestly, USD in Blender is currently a bit of a dead end if you are looking to replicate something like Solaris.

https://developer.blender.org/docs/features/core/overrides/library/usd_mapping/

3 Likes

yeah, I had the feeling that had also been dropped.

It’s frustrating to see there are so many things that have been started for blender, but often time dropped. I wonder if the fact that blender is largely used by freelancers/small studios, such things do not have enough interest in the community to make their development worthwile for these third party players

Blender would also need to fully support MaterialX if you were planning on using other tools like Houdini/Arnold/Maye/etc.

The ironic thing is that USD was supposed to be ‘one file format to rule them all’, but the reality is that it’s not really, and it can end up creating more problems than it solves VS a traditional pipeline. It is actually a very in-depth topic and can get very complex very fast when you dig into it.

There are studios who swear by it, but also admit that it was a huge amount of setup work and research up front to get it working, and with a steep learning curve. I can see why the pipeline is worth it for large studios, but honestly, if you are working solo then a solid trad pipeline would make more sense.

6 Likes

You can still use it, download their packaged version of Blender 4.2 which comes with the USD connector, but that is the last maintained version of that addon as far as I know.

Blender is designed as a self-contained DCC, which may introduce architectural limitations when working with external data in a live connection. The Alembic format is your best bet for exchanging mesh data.

2 Likes

Yeah I am sure that there are a lot of problems with it as well, or at least it’s not easy to implement.

Still, I feel that a better way of handling scene assembly in blender would be good, even without USD.

Not sure if my sentiment is shared… or maybe I am not very good at efficiently set up things in blender for complex scenes. :smiley:

3 Likes

Yes, I suppose containers was supposed to solve that, but it fell short.

One of the old Daniel Bystedt videos showed a pretty tidy container workflow he set up, but his scene wasn’t that complicated.

Maybe this one? Pretty old, but maybe worth a watch?

1 Like

Well it’s hard to answer without looking closely at your project.
I got the feeling that for now blender is still aimed at mid-sized projects and is very likely to fall apart in a kind of “AAA” pipeline.
That’s why stuff like you describe for managing complex scene assembly isn’t worked on.

Like for now cycles don’t have a texture cache yet, so even if you manage to assemble a complex scene with many assets and stuff it’s not even sure to render it properly at least with a similar memory footprint than other renderer.

I think also something dragging down is performance on heavy scenes, even if this is getting better through the years.

Lastly, the fact that stuff like physics are pretty outdated is also a sign that it’s not time for blender to manage complex scenes. Since blender is supposed to be autonomous, even if maybe in your case you’re using multiple software…
And I’m sure it’s possible to draw a long list of small stuff like that, and I’m sure many of those are more or less worked on…

Basically managing “AAA” scene is likely where blender is going eventually but not there yet because of many small stuff to improve.

On the other hand, not sure it’s the right solution, but maybe this is the closest thing to what you’re describing : https://www.gafferhq.org/

Anyway, sometime the more elaborated workflow isn’t necessarily the best… Maybe there is a way to make things a bit simpler to organize. Solve a few things with some custom python scripts… While keeping an old school organisation…
To put it differently, sometimes it’s better to embrace the “blender way” of doing things rather than trying to imitate more elaborated workflows…

6 Likes

I just quit on linking the assets… More troubles than advantages.
For Clash On Little Pond I’ve been doing the following:

  • A scene is started just with blocks to preview the space and final result;
  • Assets keep in their own folders until final approval. Once they are approved I append them to the scene.
  • They are then instanced everywhere using empties and the other instancing tricks available, like geometry nodes, particles, etc
  • In the case an asset needs some fix, it’s done in the scene assembly file.

The big inconvenient is that one needs to be really sure that the asset is final :slight_smile: which for our case is easy as I’m the one deciding that …and if I regret my decision I’ll be the one fixing it.

But yeah… totally quit on Linking, both for us and for Boombit.
HO! Materials we need to keep them linked, because some assets share the same textures.

5 Likes

really interesting video, there are good ideas there. Probably I use too much the linked scenes, while I should just take advantage of separated scenes with linked assets. I guess that would solve a lot of the visibility problems between scenes.

1 Like

mine is not too much a problem of performance, at least, I haven’t hit that limit yet (although better performance is always welcome, and I know it is a problem in certain situations). Mine is more a pipeline problems, of ease of managing lots of layers/scenes/AOVs when the changes starts coming in fast. It’s easy to get lost.

I’ve heard of gaffer, and yes, looks like that’s the right concept. However I wonder if blender is ready for such interoparbility given the very WIP status of the USD workflow. Plus I need to be realistic: these solutions require a good amount of techincal knowledge, coding and so on. I can always try to learn that, but at the moment that kind of knowledge is definitely not within my strengths

However I’ll check it out, thanks!

1 Like

well if something like gaffer is what you had in mind, I don’t think there is something like that in blender, at least something battlefield tested enough on big projects…
I’m not sure I’d go that route too, it’s interesting if you have time to set that up and build a pipeline around it, and therefore you know you’ll have similar projects so you can capitalize on building the pipeline and make it grow on further projects.

Sorry if that is going to be very generic but it’s hard to really advise you without looking at your project and how it’s organised.
Rather than adding a layer of complexity like gaffer in order to make things works better, it’s generally possible to go the other way around and make things simpler therefore more manageable !

Many tools in blender are good, but hard to use on big scale without a layer of scripts/automation. When you’re sure you have the right organisation then things can be made even simpler by writing such simple tools. These scripts can be as simple as adding an AOV to every material with name starting with “car_”. ChatGPT can be helpful to write those, there is also a lot of stuff online here and in blenderstackexange.
Or even better, you might consider hiring someone to help you with that.

But probably the first thing is make sure the pipeline is solid and well thought. What helped me in general is to write everything down, like doing some kind of a documentation for the pipeline. This helps me to figure out every ins and out, evaluate different options by writing pros and cons, stuff like that.
This also helps to define what kind of tools I’ll need, what stuff I need to test…

Anyway, good luck with all that , I’m sure things will work out eventually !

1 Like

I agree, probably at this stage it’s more important to refine my pipeline rather than adding overkill tools that are really thought for big teams and huge productions.

I think there’s a lot of room for improvement, the Bysted video for example gave me a couple of ideas and I’ll try to build on that.

My current project, with all its challenges is still coming along nicely. It’s probably the first time I approach something this big basically solo, and I guess now I need to capitalize on this experience and review my pipeline accordingly.

Probably it won’t be possible to change much at this stage for this project, but I’ll see what I can do, and I’ll definitely try to be more prepared for the next project of this kind.

If anyone feel like sharing tips and ideas about this topic, I guess we can keep this thread going as long as there’s interest. Imo it is an incredibily important topic and yet incredibily little covered.

At the moment, being so fully engaged in this project I don’t have a lot of free time, but I’ll try to brainstorm a few ideas here, so who will want can also share thieir thoughts, ideas and so on.

1 Like

Ok cool !

Yeah it could be super interesting to keep discussing and laying out ideas !
It could be even more interesting to gather idea across the specifics of a project, even if it’s purely theoretical / made up.

How much shots there is to render, how much time / people do you have ?
What shots looks like, what is the client likely to asks, does it involves multiples software and so on… I think this is the kind of things you need to have in mind to start laying out a good organisation.

The way I work is aimed at doing a lot of content in a short amount of time therefore it’s taking advantage of eevee. Since render is cheap and we can push the lighting in the viewport, I don’t use renderlayers and if something needs to be changed I re-render everything.
I also do basic compositing and grading, but it’s done mostly on the whole image using cryptomatte if I need to isolate something.

This makes managing scenes pretty simple however it’s really tied to the projects I do, maybe in your case it’s not an option for various reasons !

1 Like

project is 13 scenes, for about 30000k frames rendered at 6k.

Camera is static. There are about 13 characters, usually 2-3 each scene, a few scenes with 4-5-6, 2 scenes with all 13 at once.

Sceneries are often animated: grass/vegetation moving, river flowing with objects, and then a lot of particle simulations. Each animal has its own particle simulation, then there are various effects, especially particles effect, some crumbling and then a few fluid/smoke simulations.

THe 3d team is composed by 2 animators, and 2 newly added generalists that are helping me out. THen there’s me. I built all the scenes, assembled, lit, prepared for rendering. I also worked on all the particles effect and simulations. Finally I am putting everything together in after effects.

The 3d work happens 99% in blender, with heavy use of geo nodes, but I used houdini and ember gen and liquigen here and there for some of the simulations and fracturing.

We already finished the first phase (which is not even described here, it’s a completely different set of scenes, but using the same characters :D) and we’re now well into phase 02. Basically all the scenes are already done and animated and rendered, apart from the last 2. Now it’s about a lot of refining and finishing many of the effects, which for the first round were often done in the simplest way just to put out a first version.

We use OpenEXR DWAB 32bit (ZIP for the Cryptomatte pass). Cycles is used for rendering

For each scene I usually have to output the following:
ENVIRO

  • beauty pass
  • couple of compositing custom AOVs
  • Indirect lighting from the characters (they’re often emitting light)
  • A shadow pass for the non emitting characters

CHARACTERS

  • Beauty pass
  • Couple of compositing custom AOVs
  • Lineart pass
  • Particles Pass
  • Some character have some additional stuff such as fur or other things

Then other particles effect or sims are also outputted separately.

First off, I have to say that I am a bit mad at myself, because I remembered that I already (before opening this topic) remembered that I had to change a bit my approach of using linked scenes, because it generates a lot more headaches than it solves. But the last year has been a bit mentally intense, so I guess there was no space for this thought.

So with that in mind, I already think that my current workflow can be improved.

Basically every time I need to have a different frame range or some important render settings or a different world lighting, I create a new linked copy of the scene. I always did this to keep things in sync, but I now realize that it is much better to just create a new, independent scene and just link what I need from the main scene with all the assets. This way it is much harder to leave some collection on or off by mistake.

Another challenge I am having, and I am not sure how to improve is this: let’s take the example of the environment.

I need a beauty pass with no lights from the characters, then an indirect light from the characters and then a shadow pass from some of the characters.
The way I do this now is to have 3 render scenes. The downside however is that I am basically tripleing render times. Some of these sceneries are quite heavy and loading the BVH takes a while. Is there a way to extract all these info in one single pass?

Maybe light groups for the indirect light pass? However I am not sure how to do for the shadow pass, since I am using the shadowcatcher option. The other problem is that for both IL and shadow pass, I need to eliminate the world lighting, which I am not sure it’s possible within the same scene.

Obviously the indirect lighting pass should be on “clay” environment material and no other lights. Same goes for the shadow pass. Just the shadows from the characters and just from one selected light.

Wow… that quite the WOT :smiley: I guess for now it’s enough.

EDIT: this seems to be quite therapeutic :smiley: While I am still not sure if I can have a different world lighting within the same render scene, I just found out that I can exclude the world lighting in a render layer within the same scene, which is good for my purpose here… so one challenge less :smiley: Still, ideally I would like to have the beauty, IL and shadow pass coming out from the same render layer

1 Like