Just wanted to add to this that using variants for LODs isn’t necessarily the best USD use case of variants because Variant selections can’t be animated over time and as such, if an objects moves closer or further away you can’t technically animate the LOD unless say you’d write a USD file per frame and render that instead.
This is great!
One thing I’m wondering about is setting/defining the purposes so the DCC viewport and the renderer can pick their LOD version of the model, since they all do this by default if the purpose is set. This way I can layout a very heavy scene in my viewport with ease while the renderer picks up the hi res models on render time. This is such a cool feature of USD.
it’s best to set the render/proxy purposes on a scope at the top and then place the shapes under these scopes instead of managing setting the purpose on every shape separately. In this example the viewport shows a low res cube but the renderer renders a hi res sphere (it also has variants with their own render/proxy purpose but that’s beside the point):
This was just set by using something like myRenderScope.GetPurposeAttr().Set(UsdGeom.Tokens.render) and similar for the proxy scope.
I’m not sure what would be the best way to publish/manage this in Ayon. Picking an option on publish to auto create a bounding box proxy, poly reduce operation with a percentage slider, pick a premade proxy version made by an artist in the scene or use the render model as the proxy purpose if it’s light already could be good options maybe.