Source code for isaaclab.renderers.base_renderer
# Copyright (c) 2022-2026, The Isaac Lab Project Developers (https://github.com/isaac-sim/IsaacLab/blob/main/CONTRIBUTORS.md).
# All rights reserved.
#
# SPDX-License-Identifier: BSD-3-Clause
"""Abstract base class for renderer implementations."""
from __future__ import annotations
from abc import ABC, abstractmethod
from typing import TYPE_CHECKING, Any
if TYPE_CHECKING:
import torch
from isaaclab.sensors import SensorBase
[docs]
class BaseRenderer(ABC):
"""Abstract base class for renderer implementations."""
[docs]
@abstractmethod
def prepare_stage(self, stage: Any, num_envs: int) -> None:
"""Prepare the stage for rendering before create_render_data is called.
Some renderers need to export or preprocess the USD stage before
creating render data. This method is called after the renderer is
instantiated and before create_render_data.
Args:
stage: USD stage to prepare, or None if not applicable.
num_envs: Number of environments.
"""
pass
[docs]
@abstractmethod
def create_render_data(self, sensor: SensorBase) -> Any:
"""Create render data for the given sensor.
The returned object is opaque to the interface: callers pass it to other
renderer methods without inspecting its contents. Its structure is
implementation-specific (each renderer defines its own type).
Args:
sensor: The camera sensor to create render data for.
Returns:
Renderer-specific data object holding resources needed for rendering.
Passed to subsequent render calls.
"""
pass
[docs]
@abstractmethod
def set_outputs(self, render_data: Any, output_data: dict[str, torch.Tensor]) -> None:
"""Store reference to output buffers for writing during render.
Args:
render_data: The render data object from :meth:`create_render_data`.
output_data: Dictionary mapping output names (e.g. ``"rgb"``, ``"depth"``)
to pre-allocated tensors where rendered data will be written.
"""
pass
[docs]
@abstractmethod
def update_camera(
self, render_data: Any, positions: torch.Tensor, orientations: torch.Tensor, intrinsics: torch.Tensor
) -> None:
"""Update camera poses and intrinsics for the next render.
Args:
render_data: The render data object from :meth:`create_render_data`.
positions: Camera positions in world frame, shape ``(N, 3)``.
orientations: Camera orientations as quaternions (x, y, z, w), shape ``(N, 4)``.
intrinsics: Camera intrinsic matrices, shape ``(N, 3, 3)``.
"""
pass
[docs]
@abstractmethod
def render(self, render_data: Any) -> None:
"""Perform rendering and write to output buffers.
Args:
render_data: The render data object from :meth:`create_render_data`.
"""
pass
[docs]
@abstractmethod
def write_output(self, render_data: Any, output_name: str, output_data: torch.Tensor) -> None:
"""Write a specific output type to the given buffer.
Args:
render_data: The render data object from :meth:`create_render_data`.
output_name: Name of the output (e.g. ``"rgba"``, ``"depth"``).
output_data: Pre-allocated tensor to write the output into.
"""
pass
[docs]
@abstractmethod
def cleanup(self, render_data: Any) -> None:
"""Release renderer resources associated with the given render data.
Args:
render_data: The render data object to clean up, or ``None``.
"""
pass