Hi all,
I’m working on a USD-based renderer, and I’ve built a cloud asset system that progressively downloads different LODs for assets. The same asset reference in a scene resolves to different files on disk as higher-quality LODs finish downloading.
For example, a reference to “cloud://building_01” might initially resolve to a low-poly proxy that’s already cached locally. As the session continues, the system downloads medium and then high-res versions in the background. When a new LOD arrives on disk, I need the stage to re-resolve that asset path to the new file and, critically, I need Hydra to pick up the change and re-sync the affected prims so the renderer displays the updated geometry.
What I’ve tried:
-
ArNotice::ResolverChanged().Send() — This seems to invalidate the resolution cache, but it doesn’t trigger recomposition in a way that Hydra observes. The scene delegate doesn’t respond to resolver-level notices, so the render delegate never gets dirty prims to re-sync.
-
SdfLayer::Reload() on affected layers — Similar issue. Even when the stage recomposes, Hydra doesn’t always pick up the changes.
What actually works:
The only reliable method I’ve found is calling UsdUtilsModifyAssetPaths twice — effectively touching the asset path specs so that real SdfChangeList entries are generated. This propagates through the full change processing pipeline and Hydra correctly dirties and re-syncs the affected prims with the new LOD.
While this works, it feels heavy. For a progressive download system where assets may update frequently as LODs stream in, rewriting all asset paths just to generate change notices is more expensive than it should be.
My questions:
-
Is there a recommended way to signal that the file backing a resolved asset path has changed and have that propagate all the way through to Hydra?
-
Should ArNotice::ResolverChanged be expected to trigger Hydra updates? If not, is there a planned mechanism for this kind of dynamic re-resolution?
-
Is there a lighter-weight approach than UsdUtilsModifyAssetPaths to generate the necessary change notices for Hydra when only specific assets have changed?
This seems like it would be a common need for any cloud/streaming asset pipeline built on USD, so I’m curious if others have run into the same issue or found a cleaner solution.
Thanks!