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 two rendering backends:
RTX renderer (
IsaacRtxRendererCfg/OVRTXRendererCfg) — NVIDIA’s Omniverse RTX rendering pipeline. Requires Isaac Sim. Best for photorealistic rendering, full camera sensor support (RGB, depth, semantic segmentation, etc.), and production quality outputs.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 |
Yes (+ |
Alternative RTX pipeline |
Newton Warp |
No (kit-less) |
Newton backend, fast training |
Architecture Overview#
The renderer system consists of:
BaseRenderer — Abstract base class defining the rendering lifecycle and interface
Renderer — Factory that instantiates the appropriate backend based on renderer configuration class
RendererCfg — Base configuration; each backend extends it with backend-specific options
Concrete 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 will instantiate the renderer backend
# 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 will instantiate the renderer backend
# or return an existing renderer with a matching config
renderer: BaseRenderer = sim_ctx.render_context.get_renderer(IsaacRtxRendererCfg())
For RTX renderer settings and presets (quality, balanced, performance), see Configuring RTX Rendering Settings.
Core concepts#
Use the RenderContext: Always instantiate 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. The backend is lazily loaded when the renderer is instantiated, and instantiation 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 and requires the
ovrtx package (hosted on
pypi.nvidia.com).
Install via the Isaac Lab CLI:
# Install isaaclab_ov (and its ovrtx dependency) alongside the core package
./isaaclab.sh -i ov
Or install manually with pip:
pip install --extra-index-url https://pypi.nvidia.com -e source/isaaclab_ov
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 Providers — how scene data flows from physics backends to renderers
Visualization — lightweight visualizer backends for interactive feedback