Skip to content

Commit 43ca258

Browse files
Document limitations of the env_0-scoped USD export
Adds a Limitations section to _export_env0_only_stage covering the three assumptions the workaround makes: * Homogeneous envs -- per-env USD-authored physics overrides (mass, friction, collision filters under env_<i!=0>) are dropped from the file handed to physx.add_usd. Sensors and visualizers still see them in the live stage, so a divergence is possible. Per-env state has to be written via the runtime APIs instead. * Global path convention -- physics-relevant prims must live outside /World/envs (or under env_0) to survive the export. * Static topology -- envs added/removed after warmup require a re-warmup with a re-exported stage.
1 parent 3929056 commit 43ca258

1 file changed

Lines changed: 20 additions & 0 deletions

File tree

source/isaaclab_ovphysx/isaaclab_ovphysx/physics/ovphysx_manager.py

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -390,6 +390,26 @@ def _export_env0_only_stage(sim_stage: Any, target_file: str) -> None:
390390
avoids mutating the live stage (which other consumers -- sensors,
391391
visualizers -- still see in its full N-env form).
392392
393+
Limitations:
394+
* **Homogeneous-env assumption.** Every env is treated as an
395+
identical copy of env_0 from the physics runtime's point of view.
396+
Anything authored *only* under ``/World/envs/env_<i>`` for
397+
``i != 0`` (per-env mass overrides, per-env friction, per-env
398+
collision filters, etc.) is dropped from the file handed to
399+
``physx.add_usd`` and therefore not seen by PhysX. Sensors and
400+
visualizers still see those overrides in USD (the live stage is
401+
unmodified), so a divergence is possible. Per-env physics state
402+
must instead be written via the runtime APIs
403+
(``RigidObject.write_root_state_to_sim_index``, etc.).
404+
* **Global path convention.** Any physics-relevant prim that lives
405+
under ``/World/envs/env_<i!=0>/`` (e.g. an asset-specific
406+
``PhysicsScene``, a per-env material) gets stripped. Globals must
407+
live outside ``/World/envs`` (or under ``/World/envs/env_0``) to
408+
survive the export.
409+
* **Static topology.** Envs added or removed at runtime after
410+
warmup are not supported by ``physx.clone()`` lineage and would
411+
require a re-warmup with a re-exported stage.
412+
393413
Args:
394414
sim_stage: Live USD stage held by ``SimulationContext``.
395415
target_file: Output ``.usda`` file path. Overwritten if it exists.

0 commit comments

Comments
 (0)