Renderers#
Isaac Lab uses a pluggable renderer architecture to support different rendering backends for camera sensors.
The BaseRenderer abstract base class defines the interface that all renderer
implementations must follow.
Isaac Lab supports three rendering backends:
Isaac RTX renderer (
IsaacRtxRendererCfg) — NVIDIA’s Omniverse RTX rendering pipeline running inside Isaac Sim. Requires Isaac Sim. Best for photorealistic rendering, full camera sensor support (RGB, depth, semantic segmentation, etc.), and production quality outputs.OVRTX renderer (
OVRTXRendererCfg) — A standalone RTX path-tracing renderer provided by theisaaclab_ovextension. Delivers RTX-quality rendering.Newton Warp renderer (
NewtonWarpRendererCfg) — A lightweight GPU-accelerated renderer built on NVIDIA Warp. Works with the Newton physics backend and does not require Isaac Sim (kit-less mode). Ideal for training workflows where full RTX fidelity is not needed.
Choosing a renderer backend#
Backend |
Requires Isaac Sim? |
Best For |
|---|---|---|
Isaac RTX |
Yes |
Full sensor fidelity, RTX photorealism, PhysX backend |
OVRTX |
No (kit-less; needs
|
RTX-quality rendering without requiring Isaac Sim |
Newton Warp |
No (kit-less) |
Newton backend, fast training |
Note
Visualization markers are not yet supported by Newton-based renderer backends, including the Newton Warp renderer. Use an RTX-based renderer, such as the Isaac RTX renderer or OVRTX renderer, when marker visualization is needed.
Note
Temporal information for camera-based RL. Unlike RTX modes with temporal anti-aliasing (DLSS, DLAA, TAA), the Newton Warp renderer does not inject prior-frame information into the current image. Camera-control tasks that depend on velocity-like visual cues should add explicit temporal observations (e.g. task-local frame stacking) rather than relying on renderer-specific artifacts.
Per-environment Isaac RTX scene partitioning#
The Isaac RTX renderer enables per-environment scene partitioning by default. It assigns
matching scene-partition tokens to each /World/envs/env_<index> hierarchy and its
camera so tiled views render only that environment’s geometry.
Configure the behavior through IsaacRtxRendererCfg:
from isaaclab_physx.renderers import IsaacRtxRendererCfg
renderer_cfg = IsaacRtxRendererCfg(enable_scene_partitioning=False)
Scene partitioning and the all-environment spectator view are separate controls.
AppLauncher enables spectator support before RTX startup only
when the Kit viewport is enabled or Kit visualization, recording, livestreaming, or XR
is requested. Regular headless training and camera-sensor runs keep it disabled so
tiled cameras are not exposed to the spectator mode’s world-space layout constraints.
global_settings.show_all_partitions_by_default maps to that same process-global RTX
setting; it is not a separate feature. Its default value of None preserves the
launch-time choice made by AppLauncher. An explicit value overrides
that setting when the Isaac RTX renderer is constructed. When enabled, environments must
remain spatially separated because overlapping partition bounds can make content leak into
another environment or disappear. When disabled, the Kit viewport displays only the
selected environment.
This setting does not affect OVRTX, which always partitions multi-environment scenes.
Prims outside the environment hierarchies remain in the shared background partition.
Environment-owned PointInstancer markers can carry one matching scene-partition
token per instance; markers without that ownership information remain shared.
Warning
Kit RTX sizes each partition from the bounding boxes of the prims it contains and never
refreshes the bounding box of an animated UsdGeom.BasisCurves prim, so cables can be
culled once they deform beyond their initial extent. See
Animated curves disappear under Isaac RTX scene partitioning for the workaround.
Architecture Overview#
The renderer system consists of:
BaseRenderer — Abstract base class defining the rendering lifecycle and interface
RendererCfg — Base configuration; each backend extends it with backend-specific options and declares its implementation in
class_typeConcrete implementations — Backend-specific renderers in extension packages
RenderContext — A management class for instantiating and accessing renderer instances using a RendererCfg. After instantiation, a config can then be used to acquire the instance of the renderer as needed.
import isaaclab.sim as sim_utils
from isaaclab.renderers import BaseRenderer
from isaaclab_newton.renderers import NewtonWarpRendererCfg
# Create a Newton Warp renderer (no Isaac Sim required)
sim_ctx = sim_utils.SimulationContext.instance()
# RenderContext.get_renderer constructs cfg.class_type(cfg)
# or return an existing renderer with a matching config
renderer: BaseRenderer = sim_ctx.render_context.get_renderer(NewtonWarpRendererCfg())
assert isinstance(renderer, BaseRenderer)
For the RTX renderer (requires Isaac Sim):
import isaaclab.sim as sim_utils
from isaaclab.renderers import BaseRenderer
from isaaclab_physx.renderers import IsaacRtxRendererCfg
# Create an RTX renderer
sim_ctx = sim_utils.SimulationContext.instance()
# RenderContext.get_renderer constructs cfg.class_type(cfg)
# or return an existing renderer with a matching config
renderer: BaseRenderer = sim_ctx.render_context.get_renderer(IsaacRtxRendererCfg())
For RTX renderer settings, see Configuring RTX Rendering Settings.
Core concepts#
Use the RenderContext: Always acquire renderers via the RenderContext with a renderer-specific config class (e.g.
sim_ctx.render_context.get_renderer(IsaacRtxRendererCfg())). Do not import or instantiate concrete backend classes (e.g.IsaacRtxRenderer,OVRTXRenderer) directly—their names and package locations are implementation details and may change without notice.Lightweight config imports: Importing a renderer configuration class does not pull in backend-specific dependencies.
class_typeis resolved lazily when the renderer is constructed, and construction may fail if the backend is not installed.import isaaclab.sim as sim_utils from isaaclab.renderers import BaseRenderer # Lightweight: does not import OVRTX backend dependencies from isaaclab_ov.renderers import OVRTXRendererCfg # Lazily loads ovrtx when instantiated; may fail if isaaclab_ov / ovrtx is not installed sim_ctx = sim_utils.SimulationContext.instance() renderer: BaseRenderer = sim_ctx.render_context.get_renderer(OVRTXRendererCfg())
Installing the OVRTX renderer#
The OVRTX renderer is provided by the isaaclab_ov extension. The extension’s
source package ships with the core install, but the renderer’s ovrtx runtime
wheel (the ovrtx package, published
on public PyPI) is not installed by default. You must request it
explicitly — OVRTX does not require Isaac Sim.
Install via the Isaac Lab CLI using the ov[ovrtx] token:
# Install the ovrtx runtime wheel on top of an existing install
./isaaclab.sh -i ov[ovrtx]
Note
The bare ov token does not install any runtime wheel (the source
packages are already part of the core install). Use ov[ovrtx] (or ov[all])
to pull in the ovrtx dependency.
Or install the public ovrtx package directly from PyPI:
pip install "ovrtx==0.4.1.364340"
Opaque render data: The render data object returned by
create_render_data()is passed to subsequent renderer methods. It should be completely opaque to the caller: inspecting or modifying it via get/set attributes is an anti-pattern and breaks the API contract.
Note
The BaseRenderer class is under active development and may change without notice.
See Also#
Scene Data Provider — how scene data flows from physics backends to renderers
Visualization — lightweight visualizer backends for interactive feedback