Quick notes, will expand later...
- Could have a russian doll chain of usd files; eg chair_geo_v01.usd in chair.usd in set.usd in layout.usd modified by anim.usd in shot.usd. If chair.usd is opened, and the reference is swapped from chair_geo_v01.usd to chair_geo_v02.usd, everything inherits that change the next time they're opened.
- This is done almost instantaneously, effortlessly, its a good way to propegate changes downstream, they just happen; lighters don't have to pull stuff and manually update, its just instantly available.
- Because all it does is swap a single text line in a usd file, its very easy to script from python, or for a system like shotgun or ftrack to automate this when artists checkin work.
- The above works, but its still essentially static; you have a chain of static files pointing to each other.
- If you use python or a asset manager to update paths, thats relying on things outside of USD to change stuff, but there's another way
- Paths to things in USD all go through the Asset Resolver; its job is to look at paths, and work out what to do
- For everything shown so far thats easy, look at the path, do nothing to it, just say 'yes, this is a path on disk, load it'.
- You can write your own asset resolver, so that you can put any kind of text in for a path, and the asset resolver will convert it to a meaningful path on disk
- Eg the asset path might be more like a google query: "asset=chair;version=latest". The asset resolver might talk directly to shotgun, determine the path to the latest published chair, and load it
- It could be very simple, eg "c:/assets/geo/chair/chair_geo_vL.usd", and the asset resolver would recognise the 'L' as special, get a list of all the versions in that folder, and just return the latest
- This could be a combo of environment variables and shot context stuff, eg "asset=chair;department=$DEPT;version=approved", so that if you're a lighter it gets the latest renderable model, but if you're fx it just pulls the collision ready version.
- Again the standard reminder, yes you can do all this with python in a dcc with shotgun, but with USD this could all be happening at the file level; your app might not even have python or shotgun support, it doesn't matter, USD does the heavy lifting.
- Now the bad news; Asset Resolvers are hard to write (they need to support huge sets with thousands of assets, asset resolvers need to be incredibly fast, multithreaded, written in C++), so not many public ones exist (its mainly big studios making their own). The limited scene in May 2021:
- UTS ALA made one called Turret, that gives the query style functionality to communicate with Shotgun, but its mainly focused on linux, and of course, requires Shotgun
- Rodeo had a simple text based search replace one, but its not been touched for about a year, and doesn't work with latest USD
- A resolver for S3 storage is in a similar place
- A quick search turned up no binaries anywhere for any windows compatible asset resolvers
- Dev has stalled because a v2 of the AR spec has been announced, is nearly ready for release, it feels like everyone is waiting for that.