Proper way to force Hydra to update when resolved assets change on disk (progressive LOD downloading)?

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:

  1. 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?

  2. Should ArNotice::ResolverChanged be expected to trigger Hydra updates? If not, is there a planned mechanism for this kind of dynamic re-resolution?

  3. 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!

1 Like