Efficent way of Entire Scene Domain Randomization during RL

I am interested in domain randomizing the scene. Say one scene is in kitchen, and the other scene is in front of desk.

During the randomization, how to efficiently change the scene in isaac sim?

I have few sketch, and I’d like experts opinion on what maybe feasible

  1. delete, and respawn the scene and wrap assets in scene with RigidBody or Articulation.

  2. create a usd that has variants of all scenes, and register all of them with either RigidBody or Articulation. During randomization, call setVariant api and switch to correct RigidBody to load the correct scene.

  3. create a scene template, one for each scene. These template are static. When RL training initializes, clone the scene templates randomly to all envs. During the randomization remove these cloned scene but not the template, and randomly re-clone them to all envs

  4. spawn all scene randomly to all envs, but each env will stick to its own scene permanently during training.

My Opinion:
1 is not preferred since this will be super slow.
2 and 3 sounds doable but I am not very sure how exactly
variant, RigidBody/Articulation View, or cloner is optimized/designed for.
4. sounds good and easy to implement, but maybe a bit unflexible(as it is not really doing randomization)

Thank you for providing your valuable thoughts, and I am also happy to hear any other possible solution