Physics Backends#
Isaac Lab 3.0 supports multiple physics backends through a unified API. Each backend
exposes the same Articulation,
RigidObject, sensor and renderer surfaces, while differing
in solver characteristics, maturity, and feature coverage. See
Multi-Backend Architecture for how the dispatch and factory machinery work
under the hood.
This page summarizes what each backend supports today; the sub-pages document backend-specific configuration, installation, and limitations.
For backend-specific access to native engine data and views, see Direct Physics Engine API Access. That guide explains the different ownership and synchronization models rather than presenting a false common low-level API.
Choosing a Backend#
PhysX — the historical default. Production-ready, broad coverage of Isaac Lab features, and the reference for behavior parity. Selected via
PhysxCfg.Newton — GPU-accelerated, Warp-native, and differentiable. The Newton integration ships with the MuJoCo-Warp solver and beta support for the Kamino solver. Selected via
NewtonCfg.OvPhysX — a highly experimental kit-less PhysX backend that reads scene-level parameters from the USD
PhysicsSceneprim. Selected viaOvPhysxCfg. Not recommended for general use yet.
The active backend is selected at simulation construction time and applies to every asset, sensor, and renderer instantiated thereafter:
from isaaclab.sim import SimulationCfg
from isaaclab_physx.physics import PhysxCfg
from isaaclab_newton.physics import NewtonCfg, MJWarpSolverCfg
# PhysX (default)
sim_cfg = SimulationCfg(physics=PhysxCfg())
# Newton with MuJoCo-Warp
sim_cfg = SimulationCfg(physics=NewtonCfg(solver_cfg=MJWarpSolverCfg()))
Feature Support Matrix#
The matrix below is intentionally coarse-grained. For exhaustive per-asset and
per-task support, see each backend’s own limitations page.
Feature |
PhysX |
Newton |
OvPhysX |
|---|---|---|---|
Maturity |
Stable |
Beta |
Highly experimental |
Default solver |
TGS (rigid body) |
MuJoCo-Warp |
PhysX (TGS / PGS via USD) |
Alternative solvers |
PGS |
Kamino (beta), additional Newton solvers planned |
— |
Differentiable |
No |
Yes (via Warp) |
No |
Articulation API |
Yes |
Yes |
Yes |
Rigid Object API |
Yes |
Yes |
Yes |
Rigid Object Collection API |
Yes |
Yes |
Yes |
Deformable Object API |
Yes |
Yes (experimental VBD) |
Experimental (CUDA only) |
Cable Object API |
No |
VBD |
No |
Contact Sensor |
Yes |
Yes |
Yes |
IMU |
Yes |
Yes |
In-flight |
Frame Transformer / Ray Caster / PVA / Joint-Wrench Sensor |
Yes |
Yes |
In-flight |
Camera / Tiled Rendering |
Yes (RTX) |
Yes (Newton-Warp renderer) |
Not yet |
Requires Isaac Sim |
Yes |
Optional (only for the Omniverse visualizer) |
Yes |
Solver configuration source |
|
USD |
Selecting Backends per Task#
Tasks that support more than one backend define a Hydra preset on
SimulationCfg.physics. The example below shows the cartpole task config which
declares all three backends side by side:
from isaaclab.physics import PhysxAutoCfg
from isaaclab_newton.physics import MJWarpSolverCfg, NewtonCfg
from isaaclab_ov.physics import OvPhysxCfg
from isaaclab_physx.physics import PhysxCfg
@configclass
class CartpolePhysicsCfg(PresetCfg):
isaacsim_physx: PhysxCfg = PhysxCfg()
ovphysx: OvPhysxCfg = OvPhysxCfg()
physx: PhysxAutoCfg = PhysxAutoCfg(
isaacsim_physx=isaacsim_physx,
ovphysx=ovphysx,
)
default: PhysxCfg = isaacsim_physx
newton_mjwarp: NewtonCfg = NewtonCfg(solver_cfg=MJWarpSolverCfg())
With no selector, the task uses concrete Isaac Sim PhysX. Users can select a
backend with physics=<name>; physics=physx explicitly opts into automatic
selection between the configured PhysX-family implementations. See
Backend and Solver Presets for the full Hydra interaction.