OvPhysX Backend#
Warning
OvPhysX is highly experimental and is not recommended for general use yet. The public surface is changing rapidly while the backend is under active development. Expect feature coverage and test commands to change between Isaac Lab 3.0 beta releases.
Warning
Do not combine OvPhysX with the Kit visualizer. Commands such as
presets=ovphysx --visualizer kit are unsupported because OvPhysX
loads USD-dependent PhysX plugins from its own package, while Kit already
owns a separate USD/plugin stack in the same process. Use
--visualizer newton, --visualizer rerun, --visualizer viser,
or omit --visualizer for headless execution.
OvPhysX is a kit-less variant of the PhysX backend. It drives PhysX directly
(without the Omniverse Kit runtime) and reads scene-level solver parameters
from the USD PhysicsScene prim rather than from a Python config. The Python
config OvPhysxCfg only exposes the handful of
GPU buffer sizes that are not represented on the USD schema.
OvPhysX is selected through OvPhysxCfg:
from isaaclab.sim import SimulationCfg
from isaaclab_ovphysx.physics import OvPhysxCfg
sim_cfg = SimulationCfg(physics=OvPhysxCfg())
Why use OvPhysX?#
Kit-less execution. OvPhysX avoids Omniverse Kit, which makes it a useful experimental path for headless deployments and for backends that don’t need the Kit runtime stack.
USD-as-source-of-truth. Solver parameters are taken from the
PhysicsSceneUSD prim, so authoring tools that already manage USD scenes do not need a parallel Python config.
What works today#
The asset and sensor surface tracks PhysX, but only a subset is implemented and
validated at the time of writing. The following pieces are available on
release/3.0.0-beta2:
RigidObject — merged via PR #5426.
Articulation — merged via PR #5459.
RigidObjectCollection — merged via PR #5570.
Contact Sensor — merged via PR #5422.
SceneDataProvider — merged via PR #5589.
FrameView — merged via PR #5678.
Additional OvPhysX work remains in flight. IMU, Frame Transformer, Joint Wrench,
PVA, Ray Caster, and rendering support are not documented as supported here
until their implementations land on release/3.0.0-beta2 and pass the backend smoke
tests.
Installation#
The Isaac Lab source install includes the isaaclab_ovphysx package, but it
does not install the heavier ovphysx runtime wheel by default. After a
standard source install, install the optional OvPhysX runtime dependency from
the repository root:
./isaaclab.sh -i 'ov[ovphysx]'
You can also install all OV runtime wheels with:
./isaaclab.sh -i 'ov[all]'
The ov[ovphysx] selector installs source/isaaclab_ovphysx with its
[ovphysx] extra. If the wheel is missing, OvPhysX-specific tests skip with
ovphysx wheel not installed and user code raises an install hint when it
first imports the runtime-backed modules.
Testing the Installation#
First check that the Python package and runtime wheel import correctly:
./isaaclab.sh -p -c "import ovphysx.types; from isaaclab_ovphysx.physics import OvPhysxCfg; print('OvPhysX runtime OK')"
Then run a small backend smoke test:
./isaaclab.sh -p -m pytest source/isaaclab_ovphysx/test/assets/test_rigid_object.py::test_initialization -k cpu
To try a task that declares an OvPhysX physics preset, use the same preset CLI syntax as the other backends:
./isaaclab.sh -p scripts/environments/zero_agent.py --task Isaac-Cartpole-Direct-v0 --num_envs 128 --headless presets=ovphysx
This command starts a headless zero-action rollout; stop it with Ctrl+C
after the environment has started and stepped successfully.
Status and follow-up#
OvPhysX is still experimental, so the feature list above is intentionally conservative. Broader feature coverage and documentation parity are tracked in issue #5634.
For architectural context, see Multi-Backend Architecture.