embodichain.lab.sim

Contents

embodichain.lab.sim#

EmbodiChain’s simulation core.

Organized around the SimulationManager (the DexSim scene handle), the scene-object hierarchy, sensors, IK solvers, motion planners, the atomic-action layer, and shared configuration types.

Overview#

The sim package is EmbodiChain’s simulation core. It is organized around the SimulationManager (the DexSim scene handle), the scene-object hierarchy (lights, rigid/soft/cloth bodies, articulations, robots, gizmos, constraints), the sensor suite (cameras, stereo cameras, contact sensors), the motion package for solvers, planners, workspace, and trajectory augmentation, the atomic-action motion-primitive layer, and the shared configuration types and utilities that wire all of these together.

Submodules

sim_manager

profiler

Lightweight hierarchical profiler shared by simulation and environments.

cfg

Public simulation-configuration facade.

common

material

shapes

objects

Scene-object classes spawned into the SimulationManager.

robots

Generic dual-arm composition; concrete presets live in embodichain_robots.

sensors

Sensors attached to the simulation scene.

motion

Robot motion solving, planning, workspace analysis, and trajectory augmentation.

atomic_actions

Typed planning contracts and built-in atomic actions.

types

utility

Helper utilities for simulation state conversion, mesh/geometry handling, configuration transforms, keyboard interaction, and action/solver adaptation.

Simulation Manager#

Profiler#

class embodichain.lab.sim.Profiler[source]#

Bases: object

Hierarchical wall-time profiler.

Parameters:
  • cfg (Optional[ProfilerCfg]) – Profiler configuration. None disables profiling entirely.

  • device (device) – Device used for optional CUDA synchronization and NVTX ranges.

Note

One profiler tracks one synchronous call stack. Use it on the simulation thread that owns the associated simulation manager.

Methods:

__init__(cfg, device)

report()

Log a profiling report table and optionally dump JSON.

section(name, *[, is_root])

Record wall time for a named section.

Attributes:

enabled

Whether profiling is active.

__init__(cfg, device)[source]#
property enabled: bool#

Whether profiling is active.

report()[source]#

Log a profiling report table and optionally dump JSON.

Return type:

Dict[str, object]

Returns:

Report data, or an empty dictionary when profiling is disabled.

section(name, *, is_root=False)[source]#

Record wall time for a named section.

Parameters:
  • name (str) – Leaf section name. The full name is derived from the active section stack.

  • is_root (bool) – Whether this section starts a top-level profiling sample. A nested root is transparent and its children remain attached to the active outer hierarchy.

Return type:

Iterator[None]

class embodichain.lab.sim.ProfilerCfg[source]#

Bases: object

Configuration for hierarchical wall-time profiling.

Attributes:

color_output

Color terminal report rows by logical module.

enable_time

Enable per-section wall-time statistics (mean/min/max/std).

nvtx

Push NVTX ranges for sections so they appear in Nsight Systems.

output_path

Optional JSON path written by Profiler.report().

sync_cuda

Synchronize CUDA at section boundaries for accurate GPU wall time.

warmup_steps

Number of top-level root sections to discard before recording.

color_output: bool#

Color terminal report rows by logical module.

This only affects the logged table; JSON report data remains unchanged.

enable_time: bool#

Enable per-section wall-time statistics (mean/min/max/std).

nvtx: bool#

Push NVTX ranges for sections so they appear in Nsight Systems.

output_path: str | None#

Optional JSON path written by Profiler.report().

sync_cuda: bool#

Synchronize CUDA at section boundaries for accurate GPU wall time.

warmup_steps: int#

Number of top-level root sections to discard before recording.

Configuration#

Public simulation-configuration facade.

The implementation is split by domain while this package preserves the historical embodichain.lab.sim.cfg import surface.

Classes:

ArticulationCfg

Configuration for an articulation asset in the simulation.

ArticulationRootPropertiesCfg

Articulation-root properties shared by robot definitions.

ClothObjectCfg

alias of SurfaceDeformableObjectCfg

CollisionPropertiesCfg

Collision-shape properties with identical intent across both backends.

DLSSCfg

DLSS settings for the public dlss rendering path.

DefaultCollisionPropertiesCfg

Collision-solver properties consumed only by the Default backend.

DefaultPhysicsCfg

Configuration selector for the Default physics backend.

DefaultRigidBodyPropertiesCfg

Rigid-body properties consumed only by the Default backend.

DeformableObjectCfg

Common configuration contract for one deformable asset.

DenoisingCfg

Select denoising/reconstruction independently by rendering scope.

GPUMemoryCfg

GPU buffer capacities for the Default backend's GPU dynamics pipeline.

JointDrivePropertiesCfg

Portable joint-drive and joint-dynamics properties.

LightCfg

Configuration for a light asset in the simulation.

LinkPhysicsOverrideCfg

Partial physics overlay for a selected set of articulation links.

MarkerCfg

Configuration for visual markers in the simulation.

MassPropertiesCfg

Backend-neutral rigid-body mass properties.

MeshCfg

Configuration parameters for a triangle mesh shape.

MeshCollisionCfg

Collision-geometry construction for MeshCfg.

NRDCfg

Algorithm settings shared by targets that use the NRD path.

NewtonCollisionPipelineCfg

Newton collision-pipeline settings owned at scene scope.

NewtonCollisionPropertiesCfg

Newton-native contact-envelope and particle-contact properties.

NewtonJointDrivePropertiesCfg

Compatibility subtype for serialized Newton joint-drive configs.

NewtonPhysicsCfg

Configuration selector for the Newton physics backend.

NewtonRigidBodyMaterialCfg

Newton contact-material extensions.

ObjectBaseCfg

Base configuration for an asset in the simulation.

PhysicsBackendCfg

Backend-neutral simulation timing, device, and gravity configuration.

RenderCfg

RenderCfg(renderer: "Literal['auto', 'no-render', 'hybrid', 'fast-rt', 'rt']" = <factory>, spp: 'int' = <factory>, denoising: 'DenoisingCfg' = <factory>, dlss: 'DLSSCfg' = <factory>, nrd: 'NRDCfg' = <factory>, tone_mapping_enabled: 'bool' = <factory>, tone_mapping_exposure: 'float' = <factory>, min_bounces: 'int' = <factory>, max_bounces: 'int' = <factory>)

RigidBodyMaterialCfg

Common rigid-contact material intent.

RigidBodyPhysicsCfg

Grouped rigid-body physics configuration used by Spawn.

RigidConstraintCfg

Configuration for a fixed constraint between two RigidObjects.

RigidObjectCfg

Configuration for a rigid body asset in the simulation.

RigidObjectGroupCfg

Configuration for a rigid object group asset in the simulation.

RobotCfg

RobotCfg(uid: 'str | None' = <factory>, init_pos: 'tuple[float, float, float]' = <factory>, init_rot: 'tuple[float, float, float]' = <factory>, init_local_pose: 'np.ndarray | None' = <factory>, fpath: 'str' = <factory>, body_scale: 'tuple | list' = <factory>, compute_uv: 'bool' = <factory>, asset_physics_mode: 'AssetPhysicsMode' = <factory>, attrs: 'RigidBodyPhysicsCfg' = <factory>, link_attrs: 'dict[str, LinkPhysicsOverrideCfg] | None' = <factory>, root_props: 'ArticulationRootPropertiesCfg' = <factory>, joint_drive_props: 'JointDrivePropertiesCfg' = <factory>, init_qpos: 'torch.Tensor | np.ndarray | Sequence[float]' = <factory>, qpos_limits: 'torch.Tensor | np.ndarray | Sequence[Sequence[float]] | Dict[str, List[float]] | None' = <factory>, build_pk_chain: 'bool' = <factory>, control_parts: 'Dict[str, List[str]] | None' = <factory>, urdf_cfg: 'URDFCfg | None' = <factory>, solver_cfg: 'SolverCfg | Dict[str, SolverCfg] | None' = <factory>, workspace_cfg: 'Dict[str, RobotWorkspaceCfg] | None' = <factory>, sensors: 'list[SensorCfg]' = <factory>, enable_sensor: 'bool' = <factory>, *, source: 'UsdSourceCfg | None' = None)

RobotPresetCfg

Base class for replace-only robot configurations across physics backends.

RobotWorkspaceCfg

Runtime configuration for a control-part workspace cache.

ShapeCfg

ShapeCfg(shape_type: 'str' = <factory>, visual_material: 'VisualMaterialCfg | None' = <factory>)

SoftObjectCfg

alias of VolumeDeformableObjectCfg

SurfaceDeformableObjectCfg

Configuration for a Newton surface-deformable particle set.

SurfaceDeformablePhysicsCfg

Surface density, Newton surface elements, and optional mesh springs.

SurfaceElementPropertiesCfg

Newton surface triangle, bending, and aerodynamic properties.

URDFCfg

Standalone configuration class for URDF assembly.

UsdSourceCfg

Select a typed asset from a source USD stage.

VisualObjectCfg

Configure a render-only object, without a rigid body or colliders.

VolumeDeformableMeshingCfg

Newton tetrahedralization and render-volume binding parameters.

VolumeDeformableObjectCfg

Configuration for a Newton volume-deformable particle set.

VolumeDeformablePhysicsCfg

Volume density, elasticity, and optional Newton surface constraints.

WindowCameraPoseCfg

Configuration for printing the interactive viewer camera pose.

WindowRecordCfg

Configuration for interactive viewer window recording.

Functions:

get_data_path(data_path_in_config)

Get the absolute path of the data file.

link_attrs_from_dict(value)

Parse a link_attrs mapping from YAML/JSON-style dicts.

physics_backend_from_cfg(physics_cfg)

Infer the physics backend name from a physics configuration instance.

physics_cfg_for_backend(backend)

Return a default physics configuration instance for the given backend.

validate_physics_cfg(physics_cfg)

Validate that physics_cfg is a supported backend configuration.

class embodichain.lab.sim.cfg.ArticulationCfg[source]#

Bases: ObjectBaseCfg

Configuration for an articulation asset in the simulation.

This class extends the base asset configuration to include specific properties for articulations, such as joint drive properties, physical attributes.

Attributes:

asset_physics_mode

How source-authored articulation physics is handled.

attrs

Physical attributes for all links.

body_scale

Scale of the articulation in the simulation world frame.

build_pk_chain

Build a pytorch-kinematics chain for FK and Jacobian computation.

compute_uv

Whether to compute the UV mapping for the articulation link.

fpath

Path to the articulation asset file.

init_local_pose

4x4 transformation matrix of the root in local frame.

init_pos

Position of the root in simulation world frame.

init_qpos

Initial joint positions of the articulation.

init_rot

Euler angles (in degree) of the root in simulation world frame.

joint_drive_props

Optional joint-drive and joint-dynamics overrides.

link_attrs

Named per-link physics override groups keyed by regex on link names.

qpos_limits

Override joint position limits of the articulation.

root_props

Grouped articulation-root properties.

source

USD source asset; mutually exclusive with fpath.

uid

Methods:

from_dict(init_dict)

Initialize the configuration from a dictionary.

resolve_asset_physics_mode()

Return the effective file-backed physics policy.

asset_physics_mode: Literal['preserve', 'overlay']#

How source-authored articulation physics is handled.

"preserve" keeps link, joint-drive, and joint-limit properties from either USD or URDF. "overlay" applies only explicitly configured values after the source has been resolved.

Import policy such as root fixation and body scale remains controlled by root_props and body_scale.

attrs: RigidBodyPhysicsCfg#

Physical attributes for all links. We use default mass from the USD/URDF file if available. The mass and density in attrs will only be used if specified.

body_scale: tuple | list#

Scale of the articulation in the simulation world frame.

build_pk_chain: bool#

Build a pytorch-kinematics chain for FK and Jacobian computation.

USD assets use resolved simulation joint descriptors after preparation; URDF assets use their source kinematic tree. USD kinematics supports trees of fixed, revolute, and prismatic joints, including child-side joint frames. Set False to load other joint topologies for simulation without FK.

compute_uv: bool#

Whether to compute the UV mapping for the articulation link.

Currently, the uv mapping is computed for each link with projection uv mapping method.

fpath: str#

Path to the articulation asset file.

classmethod from_dict(init_dict)[source]#

Initialize the configuration from a dictionary.

Return type:

ArticulationCfg

init_local_pose: ndarray | None#

4x4 transformation matrix of the root in local frame. If specified, it will override init_pos and init_rot.

init_pos: tuple[float, float, float]#

Position of the root in simulation world frame. Defaults to (0.0, 0.0, 0.0).

init_qpos: Union[Tensor, ndarray, Sequence[float]]#

Initial joint positions of the articulation.

If None, the joint positions will be set to zero. If provided, it should be an array of shape (num_dofs,).

init_rot: tuple[float, float, float]#

Euler angles (in degree) of the root in simulation world frame. Defaults to (0.0, 0.0, 0.0).

joint_drive_props: JointDrivePropertiesCfg | None#

Optional joint-drive and joint-dynamics overrides.

None preserves source drive properties. Individual None fields in a provided config also preserve the corresponding source values.

Named per-link physics override groups keyed by regex on link names.

Each group applies LinkPhysicsOverrideCfg.attrs on top of attrs for matched links only. A link must not match more than one group.

qpos_limits: Union[Tensor, ndarray, Sequence[Sequence[float]], Dict[str, List[float]], None]#

Override joint position limits of the articulation.

If None, the joint position limits from the asset file (URDF/USD) are used. If provided as a tensor/array of shape (num_dofs, 2), it is applied in flattened source-resolved DOF order before the backend model is built. If provided as a dictionary, keys are joint names or regular expressions and values are [min, max] limits.

This field replaces the asset limits for the articulation and can be used to either tighten or expand the allowed range.

resolve_asset_physics_mode()[source]#

Return the effective file-backed physics policy.

Return type:

Literal['preserve', 'overlay']

root_props: ArticulationRootPropertiesCfg#

Grouped articulation-root properties.

Fixed-base and self-collision intent is portable. Root sleep and solver iterations are Default-only fields and are ignored by Newton. The portable fields default to a fixed base with self-collision disabled. Set either field to None to preserve an authored USD/backend value; URDF imports then use the established fixed-base, self-collision-off defaults.

source: UsdSourceCfg | None = None#

USD source asset; mutually exclusive with fpath.

uid: str | None#
class embodichain.lab.sim.cfg.ArticulationRootPropertiesCfg[source]#

Bases: object

Articulation-root properties shared by robot definitions.

fixed_base and self_collision_enabled are consumed by both backends. sleep_threshold and the solver-iteration fields are supported only by the Default backend and are ignored by Newton. By default, the articulation root is fixed and self-collision is disabled. Explicit None values preserve the source value or backend/import default.

Attributes:

fixed_base

Whether the articulation root is rigidly fixed to the world frame.

min_position_iters

Default-only minimum root position-solver iterations (1 to 255).

min_velocity_iters

Default-only minimum root velocity-solver iterations (0 to 255).

self_collision_enabled

Whether non-filtered link pairs in the articulation may self-collide.

sleep_threshold

Default-only articulation sleep threshold; Newton ignores this field.

Methods:

from_dict(init_dict)

Parse articulation-root properties without a backend subtype.

fixed_base: bool | None#

Whether the articulation root is rigidly fixed to the world frame.

Set to None to preserve the source value or backend/import default.

classmethod from_dict(init_dict)[source]#

Parse articulation-root properties without a backend subtype.

Return type:

ArticulationRootPropertiesCfg

min_position_iters: int | None#

Default-only minimum root position-solver iterations (1 to 255).

min_velocity_iters: int | None#

Default-only minimum root velocity-solver iterations (0 to 255).

self_collision_enabled: bool | None#

Whether non-filtered link pairs in the articulation may self-collide.

Newton may still apply source-authored or Spawn-owned filtering to adjacent parent-child bodies. Set to None to preserve the source value or backend/import default.

sleep_threshold: float | None#

Default-only articulation sleep threshold; Newton ignores this field.

embodichain.lab.sim.cfg.ClothObjectCfg#

alias of SurfaceDeformableObjectCfg

class embodichain.lab.sim.cfg.CollisionPropertiesCfg[source]#

Bases: object

Collision-shape properties with identical intent across both backends.

The framework default contact envelope is contact_offset=0.002 and rest_offset=0.0. The contact envelope is expressed once with Default-backend terminology and is compiled to Newton’s margin/gap representation at the Spawn boundary. Pass None explicitly for a sparse source-asset overlay. Mesh approximation and SDF cooking belong to MeshCollisionCfg.

Attributes:

collision_enabled

Whether the shape participates in rigid shape-shape collision.

contact_offset

Per-shape distance at which contact generation starts [m].

rest_offset

Per-shape target separation at rest [m].

collision_enabled: bool | None#

Whether the shape participates in rigid shape-shape collision.

On Newton this maps to ShapeConfig.has_shape_collision. None preserves the source/backend value.

contact_offset: float | None#

Per-shape distance at which contact generation starts [m].

The pair threshold is the sum of both shapes’ contact offsets. This value must be non-negative and no smaller than rest_offset. Default consumes it directly; Newton compiles it together with rest_offset to gap = contact_offset - rest_offset.

rest_offset: float | None#

Per-shape target separation at rest [m].

Pairwise rest separation is the sum of both shapes’ values. Positive values leave an air gap, zero targets touching surfaces, and negative values permit limited penetration. Default consumes it directly; Newton maps it to margin.

class embodichain.lab.sim.cfg.DLSSCfg[source]#

Bases: object

DLSS settings for the public dlss rendering path.

Pipeline selection belongs to DenoisingCfg. These controls apply when a target selects "dlss".

Attention

DLSS requires a Vulkan render device, a compatible NVIDIA GPU/driver, and a DexSim build with the NGX runtime. Initialization is deferred until rendering; configuration conversion alone cannot verify support. Each enabled offscreen camera needs its own temporal history and Vulkan exchange images, increasing GPU memory use.

Attributes:

dlss_quality

-1 auto (58%), 0 Ultra Performance (~33%), 1 Performance (50%), 2 Balanced (58%), 3 Quality (~67%), 4 Ultra Quality (77%), 5 DLAA (100%).

exposure_compensation

Positive, finite exposure multiplier used by the RR bridge.

render_height

Internal FastRT/OfflineRT window height; zero derives it from quality.

render_width

Internal FastRT/OfflineRT window width; zero derives it from quality.

target_height

DexSim compatibility field.

target_width

DexSim compatibility field.

tiled_enabled

Evaluate compatible multi-camera targets through one tiled DLSS atlas.

upsample_ratio

Optional window target/render ratio, at least 1.0.

Methods:

to_dexsim_cfg(window_width, window_height)

Convert settings without changing the window or camera output size.

dlss_quality: int#

-1 auto (58%), 0 Ultra Performance (~33%), 1 Performance (50%), 2 Balanced (58%), 3 Quality (~67%), 4 Ultra Quality (77%), 5 DLAA (100%).

Type:

Quality mode and derived internal scale

exposure_compensation: float#

Positive, finite exposure multiplier used by the RR bridge.

render_height: int#

Internal FastRT/OfflineRT window height; zero derives it from quality.

render_width: int#

Internal FastRT/OfflineRT window width; zero derives it from quality.

target_height: int#

DexSim compatibility field. Set the actual window or camera height instead.

target_width: int#

DexSim compatibility field. Set the actual window or camera width instead.

tiled_enabled: bool#

Evaluate compatible multi-camera targets through one tiled DLSS atlas.

to_dexsim_cfg(window_width, window_height)[source]#

Convert settings without changing the window or camera output size.

Parameters:
  • window_width (int) – Window width in pixels.

  • window_height (int) – Window height in pixels.

Return type:

DLSSConfig

Returns:

Populated dexsim.DLSSConfig instance ready to assign to world_config.dlss_config.

Raises:

ValueError – If the configuration contains invalid values.

upsample_ratio: float | None#

Optional window target/render ratio, at least 1.0. None leaves zero render dimensions for DexSim to derive from quality. When specified, computes each unset render dimension from the actual window size. Only FastRT/OfflineRT windows honor these overrides; hybrid and offscreen targets derive their internal resolution from quality.

class embodichain.lab.sim.cfg.DefaultCollisionPropertiesCfg[source]#

Bases: CollisionPropertiesCfg

Collision-solver properties consumed only by the Default backend.

contact_offset and rest_offset are portable fields defined by CollisionPropertiesCfg. This backend extension keeps them sparse so a backend-native source overlay does not accidentally replace an authored portable envelope.

Attributes:

collision_enabled

Whether the shape participates in rigid shape-shape collision.

contact_offset

Optional portable contact-generation distance [m].

disable_strong_friction

Whether to disable Default-backend strong-friction contact anchoring.

min_torsional_patch_radius

Minimum contact-patch radius used for torsional friction [m].

rest_offset

Optional portable target separation at rest [m].

torsional_patch_radius

Contact-patch radius used to approximate torsional friction [m].

collision_enabled: bool | None#

Whether the shape participates in rigid shape-shape collision.

On Newton this maps to ShapeConfig.has_shape_collision. None preserves the source/backend value.

contact_offset: float | None#

Optional portable contact-generation distance [m].

disable_strong_friction: bool | None#

Whether to disable Default-backend strong-friction contact anchoring.

min_torsional_patch_radius: float | None#

Minimum contact-patch radius used for torsional friction [m].

rest_offset: float | None#

Optional portable target separation at rest [m].

torsional_patch_radius: float | None#

Contact-patch radius used to approximate torsional friction [m].

class embodichain.lab.sim.cfg.DefaultPhysicsCfg[source]#

Bases: PhysicsBackendCfg

Configuration selector for the Default physics backend.

Attributes:

bounce_threshold

Relative normal-speed threshold below which contacts do not bounce [m/s].

cache_material

Reuse identical physics materials across objects and environment clones.

device

Compute device used to build and step the selected physics backend.

enable_ccd

Whether to enable scene-level continuous collision detection (CCD).

gpu_memory

Fixed-capacity GPU buffers used by Default-backend CUDA simulation.

gravity

World-frame gravity vector in meters per second squared.

length_tolerance

Representative scene length used by the Default backend's tolerance scale [m].

physics_dt

Duration of one physics step in seconds.

speed_tolerance

Representative scene speed used by the Default backend's tolerance scale [m/s].

Methods:

to_dexsim_args()

Convert to DexSim physics arguments.

bounce_threshold: float#

Relative normal-speed threshold below which contacts do not bounce [m/s].

cache_material: bool#

Reuse identical physics materials across objects and environment clones.

Enable this for large batches to avoid exhausting the native material table.

device: str | device#

Compute device used to build and step the selected physics backend.

Concrete backend configurations may redeclare this field when their native runtime has a different default. In particular, NewtonPhysicsCfg intentionally shadows this CPU default with "cuda:0". Callers can still provide an explicit device override.

enable_ccd: bool#

Whether to enable scene-level continuous collision detection (CCD).

A rigid body must also set DefaultRigidBodyPropertiesCfg.enable_ccd for CCD to be used on that body.

gpu_memory: GPUMemoryCfg#

Fixed-capacity GPU buffers used by Default-backend CUDA simulation.

gravity: Union[Sequence[float], ndarray]#

World-frame gravity vector in meters per second squared.

length_tolerance: float#

Representative scene length used by the Default backend’s tolerance scale [m].

Set this near the characteristic size of simulated objects. It is a scene scale, not an accuracy knob, and must be configured before world creation.

physics_dt: float#

Duration of one physics step in seconds.

Environment control steps may contain multiple physics steps. For Newton, this interval is further divided by NewtonPhysicsCfg.num_substeps.

speed_tolerance: float#

Representative scene speed used by the Default backend’s tolerance scale [m/s].

The backend derives several internal thresholds from this value and length_tolerance.

to_dexsim_args()[source]#

Convert to DexSim physics arguments.

Solver implementation details that are not exposed by DefaultPhysicsCfg retain their established defaults here.

Return type:

dict[str, Any]

class embodichain.lab.sim.cfg.DefaultRigidBodyPropertiesCfg[source]#

Bases: object

Rigid-body properties consumed only by the Default backend.

Every field defaults to None so a partial overlay preserves an authored USD/URDF value or the backend default.

Attributes:

angular_damping

Non-negative damping coefficient applied to angular velocity.

enable_ccd

Whether continuous collision detection is enabled for this body.

has_gravity

Whether world gravity accelerates this body (Default backend only).

linear_damping

Non-negative damping coefficient applied to linear velocity.

max_angular_velocity

Maximum rigid-body angular speed [rad/s].

max_depenetration_velocity

Maximum separation speed introduced to resolve penetration [m/s].

max_linear_velocity

Maximum rigid-body linear speed [m/s].

min_position_iters

Minimum number of position-solver iterations for this body (1 to 255).

min_velocity_iters

Minimum number of velocity-solver iterations for this body (0 to 255).

retain_acceleration

Whether accumulated acceleration is retained across simulation steps.

sleep_threshold

Mass-normalized kinetic-energy threshold below which the body may sleep.

angular_damping: float | None#

Non-negative damping coefficient applied to angular velocity.

enable_ccd: bool | None#

Whether continuous collision detection is enabled for this body.

Scene-level CCD must also be enabled through DefaultPhysicsCfg.enable_ccd.

has_gravity: bool | None#

Whether world gravity accelerates this body (Default backend only).

None preserves source/backend intent. Articulation attrs applies to all links; link_attrs can override individual links. File-backed assets require asset_physics_mode="overlay" to apply this property. Explicit gravity overrides are rejected by the Newton integration.

linear_damping: float | None#

Non-negative damping coefficient applied to linear velocity.

max_angular_velocity: float | None#

Maximum rigid-body angular speed [rad/s].

max_depenetration_velocity: float | None#

Maximum separation speed introduced to resolve penetration [m/s].

max_linear_velocity: float | None#

Maximum rigid-body linear speed [m/s].

min_position_iters: int | None#

Minimum number of position-solver iterations for this body (1 to 255).

min_velocity_iters: int | None#

Minimum number of velocity-solver iterations for this body (0 to 255).

retain_acceleration: bool | None#

Whether accumulated acceleration is retained across simulation steps.

sleep_threshold: float | None#

Mass-normalized kinetic-energy threshold below which the body may sleep.

class embodichain.lab.sim.cfg.DeformableObjectCfg[source]#

Bases: ObjectBaseCfg

Common configuration contract for one deformable asset.

Concrete volume and surface configurations author Newton particle-set properties. The discriminator is explicit so manager and visualization code do not need to infer topology from a mesh or material type.

Attributes:

deformable_type

Physical topology represented by the asset.

init_local_pose

4x4 transformation matrix of the root in local frame.

init_pos

Position of the root in simulation world frame.

init_rot

Euler angles (in degree) of the root in simulation world frame.

particle_flags

Newton particle flags, provided as one broadcast value or one value per node.

particle_radius

Newton particle radius; None uses the active solver default.

shape

Render and source-mesh configuration.

uid

validate_mesh

Whether Newton reports source-mesh quality validation warnings.

Methods:

from_dict(init_dict)

Parse nested deformable configs using the current schema.

deformable_type: Literal['volume', 'surface']#

Physical topology represented by the asset.

classmethod from_dict(init_dict)[source]#

Parse nested deformable configs using the current schema.

Parameters:

init_dict (Mapping[str, Any]) – Configuration fields from a dictionary or YAML loader.

Return type:

DeformableObjectCfg

Returns:

A typed configuration with the base asset pose conventions applied.

init_local_pose: ndarray | None#

4x4 transformation matrix of the root in local frame. If specified, it will override init_pos and init_rot.

init_pos: tuple[float, float, float]#

Position of the root in simulation world frame. Defaults to (0.0, 0.0, 0.0).

init_rot: tuple[float, float, float]#

Euler angles (in degree) of the root in simulation world frame. Defaults to (0.0, 0.0, 0.0).

particle_flags: Union[int, Sequence[int], ndarray, None]#

Newton particle flags, provided as one broadcast value or one value per node.

Clear the Newton ACTIVE bit for nodes that will be driven kinematically. Per-node arrays must follow the resolved simulation-particle order. For a surface deformable, an array-backed MeshCfg preserves this order. A volume deformable is voxelized into a separate tetrahedral simulation mesh, so its particle indices do not correspond to source-mesh vertex indices.

particle_radius: float | None#

Newton particle radius; None uses the active solver default.

shape: MeshCfg#

Render and source-mesh configuration.

uid: str | None#
validate_mesh: bool#

Whether Newton reports source-mesh quality validation warnings.

class embodichain.lab.sim.cfg.DenoisingCfg[source]#

Bases: object

Select denoising/reconstruction independently by rendering scope.

The public values describe complete image-processing paths. Native NRD method variants remain an implementation detail instead of becoming additional user-facing modes.

Attributes:

offscreen

Pipeline used by offscreen camera targets.

window

Pipeline used by the interactive window.

Methods:

to_dexsim_modes()

Convert window and offscreen selections to DexSim modes.

offscreen: Literal['off', 'optix', 'dlss', 'nrd']#

Pipeline used by offscreen camera targets.

to_dexsim_modes()[source]#

Convert window and offscreen selections to DexSim modes.

Return type:

tuple[RTRenderMode, RTRenderMode]

Returns:

Window and offscreen modes, in that order.

Raises:

ValueError – If mutable settings no longer contain valid modes.

window: Literal['off', 'optix', 'dlss', 'nrd']#

Pipeline used by the interactive window.

class embodichain.lab.sim.cfg.GPUMemoryCfg[source]#

Bases: object

GPU buffer capacities for the Default backend’s GPU dynamics pipeline.

Default-backend GPU buffers cannot all grow dynamically. Values that are too small may therefore produce overflow warnings, dropped contacts, or an invalid simulation. These settings are applied only when the Default backend runs on CUDA; they have no effect on Default CPU or Newton.

Attributes:

found_lost_aggregate_pairs_capacity

Capacity of found/lost pair records generated by aggregates.

found_lost_pairs_capacity

Capacity of broad-phase found/lost pair records.

heap_capacity

Initial capacity in bytes of the GPU and pinned-host memory heaps.

max_rigid_contact_count

Maximum number of rigid-contact records in the GPU contact stream.

max_rigid_patch_count

Maximum number of rigid-contact patches in the GPU patch stream.

temp_buffer_capacity

Temporary pinned-host buffer capacity in bytes.

total_aggregate_pairs_capacity

Capacity of all aggregate-pair records in the GPU pipeline.

found_lost_aggregate_pairs_capacity: int#

Capacity of found/lost pair records generated by aggregates.

found_lost_pairs_capacity: int#

Capacity of broad-phase found/lost pair records.

heap_capacity: int#

Initial capacity in bytes of the GPU and pinned-host memory heaps.

max_rigid_contact_count: int#

Maximum number of rigid-contact records in the GPU contact stream.

Increase this when the Default backend reports Contact buffer overflow detected.

max_rigid_patch_count: int#

Maximum number of rigid-contact patches in the GPU patch stream.

A patch groups nearby contact points that share a contact normal. Increase this when the Default backend reports Patch buffer overflow detected.

temp_buffer_capacity: int#

Temporary pinned-host buffer capacity in bytes.

Increase this when the Default backend reports a pinned-host linear allocator overflow.

total_aggregate_pairs_capacity: int#

Capacity of all aggregate-pair records in the GPU pipeline.

class embodichain.lab.sim.cfg.JointDrivePropertiesCfg[source]#

Bases: object

Portable joint-drive and joint-dynamics properties.

A scalar applies to every resolved joint. A dictionary maps exact joint names, full-match regular expressions, or robot control-part names to values; exact/regex rules override broader control-part rules. None preserves source/backend ownership of a field.

drive_type retains the Default drive response (force, acceleration, or disabled), while target_mode selects the commanded target components. Spawn resolves the two concepts before lowering them to the Default drive descriptor and Newton JointDofConfig.

Effort and velocity limits, friction, and armature share the same matching rules and descriptor compilation boundary as the actuator target and gains.

Newton stores all fields in the model, but individual solvers may ignore limits, friction, armature, or target modes; consult the Newton solver feature matrix.

Attributes:

armature

Artificial inertia added to the joint-space diagonal.

damping

Derivative velocity gain of the joint drive.

drive_type

Joint drive type to apply.

friction

Passive friction value applied along the joint degree of freedom.

max_effort

Maximum drive effort [N for prismatic, N*m for revolute joints].

max_velocity

Maximum joint speed [m/s for prismatic, rad/s for revolute joints].

stiffness

Proportional position gain of the joint drive.

target_mode

Portable actuator target mode, as a scalar or joint-rule mapping.

Methods:

from_dict(init_dict, *[, defaults])

Initialize the configuration from a dictionary.

armature: Union[Dict[str, float], float, None]#

Artificial inertia added to the joint-space diagonal.

Units depend on the joint model:

  • For prismatic (linear) joints, the unit is mass [kg].

  • For revolute (angular) joints, the unit is mass * scene_length^2 [kg-m^2].

Armature changes the physical model and should normally reflect actuator or gearbox inertia. Newton solver support varies.

damping: Union[Dict[str, float], float, None]#

Derivative velocity gain of the joint drive.

The unit depends on the joint model:

  • For linear joints, the unit is kg-m/s (N-s/m).

  • For angular joints, the unit is kg-m^2/s/rad (N-m-s/rad).

drive_type: Optional[Literal['force', 'acceleration', 'none']]#

Joint drive type to apply.

On the Default backend, "force" applies a force/torque drive, "acceleration" applies a mass-independent acceleration drive, and "none" disables the drive. Newton has no acceleration-drive equivalent. Unless target_mode is explicit, "force" and "acceleration" select "position_velocity" while "none" selects "none".

friction: Union[Dict[str, float], float, None]#

Passive friction value applied along the joint degree of freedom.

Interpretation and enforcement are backend/solver-dependent.

classmethod from_dict(init_dict, *, defaults=None)[source]#

Initialize the configuration from a dictionary.

Parameters:
  • init_dict (Dict[str, Any]) – Joint-drive properties to override.

  • defaults (JointDrivePropertiesCfg | None) – Optional base properties whose unspecified values are preserved. If omitted, the class defaults are used.

Return type:

JointDrivePropertiesCfg

Returns:

Parsed joint-drive properties.

max_effort: Union[Dict[str, float], float, None]#

Maximum drive effort [N for prismatic, N*m for revolute joints].

The value is authored for both backends, but the selected Newton solver may not enforce it.

max_velocity: Union[Dict[str, float], float, None]#

Maximum joint speed [m/s for prismatic, rad/s for revolute joints].

The value is authored for both backends, but support is solver-dependent in Newton.

stiffness: Union[Dict[str, float], float, None]#

Proportional position gain of the joint drive.

The unit depends on the joint model:

  • For linear joints, the unit is kg-m/s^2 (N/m).

  • For angular joints, the unit is kg-m^2/s^2/rad (N-m/rad).

target_mode: Union[Literal['none', 'position', 'velocity', 'position_velocity', 'effort'], Dict[str, Union[Literal['none', 'position', 'velocity', 'position_velocity', 'effort'], int]], int, None]#

Portable actuator target mode, as a scalar or joint-rule mapping.

Accepted names and integer values are "none"/0 (passive), "position"/1, "velocity"/2, "position_velocity"/3, and "effort"/4. Default emulates these modes through its drive mode and effective gains. Newton authors the corresponding JointTargetMode; solvers without native target-mode support use deterministic gain-based fallbacks where possible.

class embodichain.lab.sim.cfg.LightCfg[source]#

Bases: ObjectBaseCfg

Configuration for a light asset in the simulation.

Supports six light types matching the dexsim rendering backend:

  • "point": Per-environment omnidirectional point light with position and falloff radius. Created as a batched light (one per environment).

  • "sun": Global directional sun light (infinite distance). Created as a single scene-level instance. Uses direction only; position is ignored. Sun-specific fields (angular_radius, halo_size, halo_falloff) are reserved for future backend support.

  • "direction": Global pure directional light at infinite distance. Created as a single scene-level instance. Direction only; no position.

  • "spot": Per-environment spotlight with position, direction, and inner/outer cone angles. Created as a batched light.

  • "rect": Per-environment rectangular area light with position, direction, width, and height. Created as a batched light.

  • "mesh": Per-environment mesh-based emissive light. Requires a MeshObject via embodichain.lab.sim.objects.light.Light.set_mesh() (not tensor-batched). Created as a batched light.

Attention

The angular_radius, halo_size, and halo_falloff fields are reserved for future use. The dexsim Python bindings do not yet expose setters for these sun-specific properties.

Attributes:

angular_radius

Angular radius of the sun disc in degrees.

color

RGB color of the light source.

direction

Direction vector for directional, spot, rect, and mesh lights.

enable_shadow

Whether the light casts shadows.

halo_falloff

Halo falloff for sun light.

halo_size

Halo size for sun light.

init_local_pose

4x4 transformation matrix of the root in local frame.

init_pos

Position of the root in simulation world frame.

init_rot

Euler angles (in degree) of the root in simulation world frame.

intensity

Intensity of the light source in watts/m^2.

light_type

"point", "sun", "direction", "spot", "rect", "mesh".

mesh_path

Asset path for mesh-based emissive lights.

radius

Falloff radius for point lights.

rect_height

Height of the rectangular area light.

rect_width

Width of the rectangular area light.

spot_angle_inner

Inner cone angle of the spotlight in degrees.

spot_angle_outer

Outer cone angle of the spotlight in degrees.

uid

angular_radius: float#

Angular radius of the sun disc in degrees. Reserved for future use.

color: tuple[float, float, float]#

RGB color of the light source. Defaults to white (1.0, 1.0, 1.0).

direction: tuple[float, float, float]#

Direction vector for directional, spot, rect, and mesh lights. Defaults to (0.0, 0.0, -1.0) (pointing down along -Z).

enable_shadow: bool#

Whether the light casts shadows. Defaults to True.

halo_falloff: float#

Halo falloff for sun light. Reserved for future use.

halo_size: float#

Halo size for sun light. Reserved for future use.

init_local_pose: ndarray | None#

4x4 transformation matrix of the root in local frame. If specified, it will override init_pos and init_rot.

init_pos: tuple[float, float, float]#

Position of the root in simulation world frame. Defaults to (0.0, 0.0, 0.0).

init_rot: tuple[float, float, float]#

Euler angles (in degree) of the root in simulation world frame. Defaults to (0.0, 0.0, 0.0).

intensity: float#

Intensity of the light source in watts/m^2. Defaults to 30.0.

light_type: Literal['point', 'sun', 'direction', 'spot', 'rect', 'mesh']#

"point", "sun", "direction", "spot", "rect", "mesh".

Type:

Light type. Supported

mesh_path: str#

Asset path for mesh-based emissive lights. Only used when light_type="mesh". The actual mesh assignment is done via embodichain.lab.sim.objects.light.Light.set_mesh() which accepts a dexsim.models.MeshObject. This field stores the path for reference.

radius: float#

Falloff radius for point lights. Only used when light_type="point". Defaults to 10.0.

rect_height: float#

Height of the rectangular area light. Only used when light_type="rect". Defaults to 1.0.

rect_width: float#

Width of the rectangular area light. Only used when light_type="rect". Defaults to 1.0.

spot_angle_inner: float#

Inner cone angle of the spotlight in degrees. Only used when light_type="spot". Defaults to 30.0.

spot_angle_outer: float#

Outer cone angle of the spotlight in degrees. Only used when light_type="spot". Defaults to 45.0.

uid: str | None#
class embodichain.lab.sim.cfg.LinkPhysicsOverrideCfg[source]#

Bases: object

Partial physics overlay for a selected set of articulation links.

Regex/control-group resolution happens before Spawn updates exact source link names. A link may match only one override group.

Attributes:

attrs

Partial grouped overlay for the selected links.

link_names_expr

Regular expressions matched against complete source link names.

Methods:

from_dict(init_dict)

Initialize the configuration from a dictionary.

attrs: RigidBodyPhysicsCfg#

Partial grouped overlay for the selected links.

Configure source-inertia recomputation through RigidBodyPhysicsCfg.mass_props.

classmethod from_dict(init_dict)[source]#

Initialize the configuration from a dictionary.

Return type:

LinkPhysicsOverrideCfg

Regular expressions matched against complete source link names.

class embodichain.lab.sim.cfg.MarkerCfg[source]#

Bases: object

Configuration for visual markers in the simulation.

This class defines properties for creating visual markers such as coordinate frames, lines, and points that can be used for debugging, visualization, or reference purposes in the simulation environment.

Attributes:

arena_index

Index of the arena where the marker should be placed.

arrow_type

Type of arrow head for axis markers (e.g., CONE, ARROW, etc.).

axis_len

Length of each axis arm in meters.

axis_size

Thickness/size of the axis lines in meters.

axis_xpos

List of 4x4 transformation matrices defining the position and orientation of each axis marker.

corner_type

Type of corner/joint visualization for axis markers (e.g., SPHERE, CUBE, etc.).

line_color

RGBA color values for the marker lines.

marker_type

Type of marker to display.

name

Name of the marker for identification purposes.

arena_index: int#

Index of the arena where the marker should be placed. -1 means all arenas.

arrow_type: AxisArrowType#

Type of arrow head for axis markers (e.g., CONE, ARROW, etc.).

axis_len: float#

Length of each axis arm in meters.

axis_size: float#

Thickness/size of the axis lines in meters.

axis_xpos: Tensor | None#

List of 4x4 transformation matrices defining the position and orientation of each axis marker.

corner_type: AxisCornerType#

Type of corner/joint visualization for axis markers (e.g., SPHERE, CUBE, etc.).

line_color: List[float]#

RGBA color values for the marker lines. Values should be between 0.0 and 1.0.

marker_type: Literal['axis', 'line', 'point']#

Type of marker to display. Can be ‘axis’ (3D coordinate frame), ‘line’, or ‘point’. (only axis supported now)

name: str#

Name of the marker for identification purposes.

class embodichain.lab.sim.cfg.MassPropertiesCfg[source]#

Bases: object

Backend-neutral rigid-body mass properties.

None means that the source asset or selected backend keeps ownership of that value. For a non-static body, explicit inertia requires a positive mass. A source-backed body retains authored inertia unless recompute_inertia is enabled; procedural or recomputed bodies derive inertia from collision geometry and the effective mass or density. Static bodies omit all mass properties during Spawn compilation.

Attributes:

com_position

Center-of-mass position expressed in the rigid body's local frame [m].

com_quaternion

Orientation of the center-of-mass/inertia frame in xyzw order.

density

Uniform density used to derive mass properties from collision shapes [kg/m^3].

inertia

Inertia about the center of mass [kg*m^2].

mass

Rigid-body mass [kg].

recompute_inertia

Whether collision geometry should replace source-authored inertia.

com_position: Union[Sequence[float], ndarray, None]#

Center-of-mass position expressed in the rigid body’s local frame [m].

com_quaternion: Union[Sequence[float], ndarray, None]#

Orientation of the center-of-mass/inertia frame in xyzw order.

With three explicit principal moments, Spawn compiles R diag(I) R.T in body axes. With a full body-frame inertia matrix, the quaternion is ignored with a warning. Without explicit inertia it is rejected. A zero quaternion is invalid.

density: float | None#

Uniform density used to derive mass properties from collision shapes [kg/m^3].

The value must be positive and is ignored when mass is positive. For a source-backed body with valid authored inertia, set recompute_inertia to True when supplying density: deriving density-based properties necessarily replaces the source tensor.

inertia: Union[Sequence[float], ndarray, None]#

Inertia about the center of mass [kg*m^2].

Supply either three positive principal moments or a symmetric, positive-definite 3-by-3 tensor in the body frame. Explicit inertia is accepted only together with a positive mass. For one definition shared by both backends, either representation is supported. Principal moments plus com_quaternion are converted to a body-frame matrix before entering DexSim.

mass: float | None#

Rigid-body mass [kg].

A positive value takes precedence over density. Zero explicitly selects density-based derivation and therefore requires a positive density. Negative values are invalid.

recompute_inertia: bool | None#

Whether collision geometry should replace source-authored inertia.

True discards source inertia so the backend recomputes it from the collision geometry and effective mass or density. False preserves the source inertia. None inherits an outer rigid-body overlay and otherwise behaves like False. An invalid/all-zero source tensor is never preserved: when collision geometry exists, both backends use it as the common fallback. Explicit inertia cannot be combined with recomputation.

class embodichain.lab.sim.cfg.MeshCfg[source]#

Bases: ShapeCfg

Configuration parameters for a triangle mesh shape.

Attributes:

collision

Optional collision representation and cooking parameters.

compute_uv

Whether to compute UV coordinates for the shape.

fpath

File path to the shape mesh file.

load_option

Options for loading and processing the shape.

normals

Optional per-vertex normals with shape (N, 3).

project_direction

Direction to project the UV coordinates.

shape_type

Type of the shape.

triangles

Optional array-backed triangle indices with shape (M, 3).

uv_coords

Optional per-vertex texture coordinates with shape (N, 2).

vertices

Optional array-backed mesh vertices with shape (N, 3).

visual_material

Configuration parameters for the visual material of the shape.

collision: MeshCollisionCfg | None#

Optional collision representation and cooking parameters.

None uses a single convex hull. Mesh collision construction belongs to the geometry because it cannot be applied meaningfully to primitive shapes or to articulation links without a named source-shape overlay.

compute_uv: bool#

Whether to compute UV coordinates for the shape. Defaults to False.

If the shape already has UV coordinates, setting this to True will recompute and overwrite them.

fpath: str | None#

File path to the shape mesh file.

Provide either this path or both vertices and triangles.

load_option: LoadOption#

Options for loading and processing the shape.

normals: Union[Sequence[Sequence[float]], ndarray, None]#

Optional per-vertex normals with shape (N, 3).

project_direction: List[float]#

Direction to project the UV coordinates. Defaults to [1.0, 1.0, 1.0].

shape_type: str#

Type of the shape. Must be specified in subclasses.

triangles: Union[Sequence[Sequence[int]], ndarray, None]#

Optional array-backed triangle indices with shape (M, 3).

uv_coords: Union[Sequence[Sequence[float]], ndarray, None]#

Optional per-vertex texture coordinates with shape (N, 2).

vertices: Union[Sequence[Sequence[float]], ndarray, None]#

Optional array-backed mesh vertices with shape (N, 3).

Array-backed meshes preserve vertex order, which is useful when per-node deformable flags or kinematic trajectories refer to stable node indices.

visual_material: VisualMaterialCfg | None#

Configuration parameters for the visual material of the shape. Defaults to None.

class embodichain.lab.sim.cfg.MeshCollisionCfg[source]#

Bases: object

Collision-geometry construction for MeshCfg.

The approximation is explicit. Strategy-specific fields are rejected when they do not apply, so changing a numerical cooking value cannot silently select a different collision representation.

Attributes:

acd_method

Approximate-convex-decomposition implementation.

approximation

Collision representation built from the source triangle mesh.

is_hydroelastic

Whether Newton uses the generated SDF for hydroelastic contact.

max_convex_hull_num

Deprecated compatibility view of max_hulls.

max_hulls

Maximum hull count for convex_decomposition; must be at least two.

sdf_narrow_band_range

Inner and outer signed-distance limits of the Newton SDF band [m].

sdf_padding

Extra padding used while Newton builds the mesh SDF [m].

sdf_resolution

Maximum SDF grid resolution; valid only for the sdf strategy.

sdf_target_voxel_size

Target Newton sparse-SDF voxel size [m], alternative to resolution.

sdf_texture_format

Newton SDF voxel storage format.

Methods:

from_dict(init_dict)

Parse a mesh-collision mapping, including deprecated field names.

acd_method: Optional[Literal['visacd', 'coacd', 'vhacd']]#

Approximate-convex-decomposition implementation.

None selects visacd when compiling mesh collision geometry. VisACD requires a DexSim build with CUDA/OptiX support.

approximation: Literal['convex_hull', 'convex_decomposition', 'triangle_mesh', 'sdf']#

Collision representation built from the source triangle mesh.

classmethod from_dict(init_dict)[source]#

Parse a mesh-collision mapping, including deprecated field names.

Return type:

MeshCollisionCfg

is_hydroelastic: bool | None#

Whether Newton uses the generated SDF for hydroelastic contact.

property max_convex_hull_num: int#

Deprecated compatibility view of max_hulls.

max_hulls: int | None#

Maximum hull count for convex_decomposition; must be at least two.

sdf_narrow_band_range: tuple[float, float] | None#

Inner and outer signed-distance limits of the Newton SDF band [m].

sdf_padding: float | None#

Extra padding used while Newton builds the mesh SDF [m].

sdf_resolution: int | None#

Maximum SDF grid resolution; valid only for the sdf strategy.

sdf_target_voxel_size: float | None#

Target Newton sparse-SDF voxel size [m], alternative to resolution.

sdf_texture_format: Optional[Literal['uint16', 'float32', 'uint8']]#

Newton SDF voxel storage format.

class embodichain.lab.sim.cfg.NRDCfg[source]#

Bases: object

Algorithm settings shared by targets that use the NRD path.

Pipeline selection belongs to DenoisingCfg. This class only owns NRD tuning values and intentionally does not expose RELAX/REBLUR selection.

The fields are grouped by how directly they affect the current public nrd path (standalone NRD RELAX): history/disocclusion controls and the post-NRD TAA controls are active-path settings. Reblur-specific blur, stabilization, and anti-lag controls are retained for native parity but can be deferred from a smaller public configuration surface because the current EmbodiChain mode does not select NRD REBLUR. Validation is a debug feature, and SH/SG mode only has an effect on RELAX with FastRT or OfflineRT.

Attributes:

anti_firefly_enabled

Suppress isolated bright history samples; may darken sparse highlights.

antilag_luminance_sensitivity

REBLUR Anti-Lag luminance sensitivity; inactive for standalone RELAX.

antilag_luminance_sigma_scale

REBLUR Anti-Lag luminance sigma scale; inactive for standalone RELAX.

denoising_range

Maximum world-space range considered by NRD's denoising passes.

diffuse_prepass_blur_radius

Diffuse prepass blur radius; larger values reduce noise and soften detail.

disocclusion_threshold

Base view-depth threshold used to reject invalid temporal history.

disocclusion_threshold_alternate

Alternate depth threshold for pixels selecting the mixed threshold.

disocclusion_threshold_mix_enabled

Use the per-pixel threshold-mix input for thin or transparent geometry.

history_confidence_enabled

Generate paired-history confidence from matched probe renders.

history_confidence_probe_stride

Full-resolution spacing of paired-history probe rays; native range is 1–8.

history_confidence_sensitivity

Sensitivity used when converting history gradients into confidence.

history_confidence_sigma_scale

Sigma scale used when converting history gradients into confidence.

history_fix_frame_num

Number of frames used to repair history after a disocclusion.

max_accumulated_frame_num

Maximum slow temporal history length for RELAX and REBLUR.

max_blur_radius

Maximum adaptive blur radius for REBLUR; inactive for standalone RELAX.

max_fast_accumulated_frame_num

Maximum fast temporal history length used while a pixel is changing.

max_indirect_bounces

Number of indirect continuation rays after the primary surface.

max_stabilized_frame_num

Maximum stabilized history for REBLUR; inactive for standalone RELAX.

min_blur_radius

Minimum adaptive blur radius for REBLUR; inactive for standalone RELAX.

sh_mode_enabled

Enable RELAX directional SH/SG signals on FastRT and OfflineRT paths.

specular_prepass_blur_radius

Specular prepass blur radius; mainly an advanced REBLUR tuning knob.

taa_depth_rejection_enabled

Reject post-NRD history when reprojected view depth does not match.

taa_min_current_weight

Minimum current-frame weight in the post-NRD temporal resolve.

taa_sigma_scale

Sigma scale used by the post-NRD temporal resolve.

taa_tone_mapping_enabled

Apply NRD's optional tone mapping before the final EmbodiChain output.

validation_enabled

Enable NRD validation diagnostics; intended for development builds.

Methods:

to_dexsim_cfg()

Convert the settings to DexSim's native NRD configuration.

anti_firefly_enabled: bool#

Suppress isolated bright history samples; may darken sparse highlights.

antilag_luminance_sensitivity: float#

REBLUR Anti-Lag luminance sensitivity; inactive for standalone RELAX.

antilag_luminance_sigma_scale: float#

REBLUR Anti-Lag luminance sigma scale; inactive for standalone RELAX.

denoising_range: float#

Maximum world-space range considered by NRD’s denoising passes.

diffuse_prepass_blur_radius: float#

Diffuse prepass blur radius; larger values reduce noise and soften detail.

disocclusion_threshold: float#

Base view-depth threshold used to reject invalid temporal history.

disocclusion_threshold_alternate: float#

Alternate depth threshold for pixels selecting the mixed threshold.

disocclusion_threshold_mix_enabled: bool#

Use the per-pixel threshold-mix input for thin or transparent geometry.

history_confidence_enabled: bool#

Generate paired-history confidence from matched probe renders.

history_confidence_probe_stride: int#

Full-resolution spacing of paired-history probe rays; native range is 1–8.

history_confidence_sensitivity: float#

Sensitivity used when converting history gradients into confidence.

history_confidence_sigma_scale: float#

Sigma scale used when converting history gradients into confidence.

history_fix_frame_num: int#

Number of frames used to repair history after a disocclusion.

max_accumulated_frame_num: int#

Maximum slow temporal history length for RELAX and REBLUR.

max_blur_radius: float#

Maximum adaptive blur radius for REBLUR; inactive for standalone RELAX.

max_fast_accumulated_frame_num: int#

Maximum fast temporal history length used while a pixel is changing.

max_indirect_bounces: int#

Number of indirect continuation rays after the primary surface.

Higher values increase lighting detail and ray cost; NRD’s real-time default is one continuation bounce.

max_stabilized_frame_num: int#

Maximum stabilized history for REBLUR; inactive for standalone RELAX.

min_blur_radius: float#

Minimum adaptive blur radius for REBLUR; inactive for standalone RELAX.

sh_mode_enabled: bool#

Enable RELAX directional SH/SG signals on FastRT and OfflineRT paths.

specular_prepass_blur_radius: float#

Specular prepass blur radius; mainly an advanced REBLUR tuning knob.

taa_depth_rejection_enabled: bool#

Reject post-NRD history when reprojected view depth does not match.

taa_min_current_weight: float#

Minimum current-frame weight in the post-NRD temporal resolve.

taa_sigma_scale: float#

Sigma scale used by the post-NRD temporal resolve.

taa_tone_mapping_enabled: bool#

Apply NRD’s optional tone mapping before the final EmbodiChain output.

to_dexsim_cfg()[source]#

Convert the settings to DexSim’s native NRD configuration.

Return type:

NRDConfig

Returns:

Populated dexsim.NRDConfig.

Raises:

ValueError – If mutable settings no longer contain valid values.

validation_enabled: bool#

Enable NRD validation diagnostics; intended for development builds.

class embodichain.lab.sim.cfg.NewtonCollisionPipelineCfg[source]#

Bases: object

Newton collision-pipeline settings owned at scene scope.

Construction values map to DexSim’s NewtonCollisionPipelineCfg. update_interval controls the DexSim-side scheduling of that external pipeline. Per-shape contact and SDF values belong to NewtonCollisionPropertiesCfg instead. The pipeline performs broad-phase pair selection, narrow-phase contact generation, and optional contact reduction for the complete scene.

See the Newton collision guide for the native pipeline semantics.

Attributes:

broad_phase

Built-in broad-phase mode or a prebuilt Newton broad-phase object.

max_triangle_pairs

Maximum triangle-pair candidates allocated by the narrow phase.

narrow_phase

Optional prebuilt Newton narrow-phase object for expert pipelines.

reduce_contacts

Whether to reduce dense mesh contacts to a representative subset.

rigid_contact_max

Maximum number of allocated rigid contacts.

sdf_hydroelastic_config

Optional Newton HydroelasticSDF.Config-compatible object.

shape_pairs_filtered

Optional precomputed pairs for "explicit" broad phase.

soft_contact_margin

Particle/soft contact detection distance [m].

soft_contact_max

Maximum number of allocated particle/soft contacts.

update_interval

External-pipeline updates within one EmbodiChain physics step.

broad_phase: Union[Literal['nxn', 'sap', 'explicit'], Any, None]#

Built-in broad-phase mode or a prebuilt Newton broad-phase object.

"explicit" tests precomputed pairs, "nxn" performs an all-pairs test, and "sap" uses sweep-and-prune. None keeps Newton’s default. A prebuilt object is an expert path and must be compatible with narrow_phase.

max_triangle_pairs: int#

Maximum triangle-pair candidates allocated by the narrow phase.

Increase this only when complex meshes or heightfields report triangle-pair overflow. EmbodiChain intentionally uses a larger default than upstream Newton for mesh-heavy robotics scenes.

narrow_phase: Any | None#

Optional prebuilt Newton narrow-phase object for expert pipelines.

reduce_contacts: bool#

Whether to reduce dense mesh contacts to a representative subset.

Reduction lowers contact count and usually improves performance and solver stability for mesh-heavy scenes.

rigid_contact_max: int | None#

Maximum number of allocated rigid contacts.

None uses the model-provided capacity when available and otherwise lets Newton estimate it from the scene’s shapes and candidate pairs.

sdf_hydroelastic_config: Any | None#

Optional Newton HydroelasticSDF.Config-compatible object.

None disables the hydroelastic pipeline. Individual participating procedural meshes must also opt in through is_hydroelastic.

shape_pairs_filtered: Any | None#

Optional precomputed pairs for "explicit" broad phase.

When provided, this must be a Warp array of shape-index pairs with dtype=wp.vec2i. None uses the model’s contact-pair list.

soft_contact_margin: float#

Particle/soft contact detection distance [m].

soft_contact_max: int | None#

Maximum number of allocated particle/soft contacts.

None lets Newton derive the capacity from shape and particle counts.

update_interval: int | None#

External-pipeline updates within one EmbodiChain physics step.

The default 1 updates before every solver substep. An integer k >= 1 updates at substeps 0, k, 2k, ...; None updates once at the first solver substep of each physics step.

class embodichain.lab.sim.cfg.NewtonCollisionPropertiesCfg[source]#

Bases: CollisionPropertiesCfg

Newton-native contact-envelope and particle-contact properties.

Mesh construction belongs to MeshCfg.collision; filtering, visual, and semantic-site policies are deliberately not part of rigid-body physics. Its portable fields remain sparse so a Newton-native source overlay can modify only the requested native properties.

See Newton Shape Configuration.

Attributes:

collision_enabled

Whether the shape participates in rigid shape-shape collision.

condim

1, 3, 4, or 6.

contact_offset

Optional portable contact-generation distance [m].

gap

Additional contact-detection distance outside margin [m].

has_particle_collision

Whether Newton particles collide with this shape.

margin

Outward collision-surface offset [m].

priority

MuJoCo contact-parameter priority; None preserves the source value.

rest_offset

Optional portable target separation at rest [m].

collision_enabled: bool | None#

Whether the shape participates in rigid shape-shape collision.

On Newton this maps to ShapeConfig.has_shape_collision. None preserves the source/backend value.

condim: int | None#

1, 3, 4, or 6.

None preserves the source/backend value (normally 3). Use 4 on gripping surfaces to include torsional friction, or 6 when rolling friction is also required. Author before scene preparation so MuJoCo can allocate the corresponding constraint storage.

Type:

MuJoCo contact dimension

contact_offset: float | None#

Optional portable contact-generation distance [m].

gap: float | None#

Additional contact-detection distance outside margin [m].

Gaps from both shapes are added. Broad phase expands each shape by margin + gap; increasing the gap detects approaching contact earlier.

has_particle_collision: bool | None#

Whether Newton particles collide with this shape.

None preserves the source/backend value. This controls deformable contact participation; scene-level collision isolation remains scene-owned.

margin: float | None#

Outward collision-surface offset [m].

Margins from both shapes are added. They determine where contact is placed and also affect inertia/SDF handling for hollow shapes.

priority: int | None#

MuJoCo contact-parameter priority; None preserves the source value.

rest_offset: float | None#

Optional portable target separation at rest [m].

class embodichain.lab.sim.cfg.NewtonJointDrivePropertiesCfg[source]#

Bases: JointDrivePropertiesCfg

Compatibility subtype for serialized Newton joint-drive configs.

target_mode is now portable and lives on JointDrivePropertiesCfg. The subtype remains so existing backend="newton" dictionaries and round trips retain their type; new robot definitions should use the common class.

Attributes:

armature

Artificial inertia added to the joint-space diagonal.

damping

Derivative velocity gain of the joint drive.

drive_type

Joint drive type to apply.

friction

Passive friction value applied along the joint degree of freedom.

max_effort

Maximum drive effort [N for prismatic, N*m for revolute joints].

max_velocity

Maximum joint speed [m/s for prismatic, rad/s for revolute joints].

stiffness

Proportional position gain of the joint drive.

target_mode

Portable actuator target mode, as a scalar or joint-rule mapping.

armature: Union[Dict[str, float], float, None]#

Artificial inertia added to the joint-space diagonal.

Units depend on the joint model:

  • For prismatic (linear) joints, the unit is mass [kg].

  • For revolute (angular) joints, the unit is mass * scene_length^2 [kg-m^2].

Armature changes the physical model and should normally reflect actuator or gearbox inertia. Newton solver support varies.

damping: Union[Dict[str, float], float, None]#

Derivative velocity gain of the joint drive.

The unit depends on the joint model:

  • For linear joints, the unit is kg-m/s (N-s/m).

  • For angular joints, the unit is kg-m^2/s/rad (N-m-s/rad).

drive_type: Optional[Literal['force', 'acceleration', 'none']]#

Joint drive type to apply.

On the Default backend, "force" applies a force/torque drive, "acceleration" applies a mass-independent acceleration drive, and "none" disables the drive. Newton has no acceleration-drive equivalent. Unless target_mode is explicit, "force" and "acceleration" select "position_velocity" while "none" selects "none".

friction: Union[Dict[str, float], float, None]#

Passive friction value applied along the joint degree of freedom.

Interpretation and enforcement are backend/solver-dependent.

max_effort: Union[Dict[str, float], float, None]#

Maximum drive effort [N for prismatic, N*m for revolute joints].

The value is authored for both backends, but the selected Newton solver may not enforce it.

max_velocity: Union[Dict[str, float], float, None]#

Maximum joint speed [m/s for prismatic, rad/s for revolute joints].

The value is authored for both backends, but support is solver-dependent in Newton.

stiffness: Union[Dict[str, float], float, None]#

Proportional position gain of the joint drive.

The unit depends on the joint model:

  • For linear joints, the unit is kg-m/s^2 (N/m).

  • For angular joints, the unit is kg-m^2/s^2/rad (N-m/rad).

target_mode: Union[Literal['none', 'position', 'velocity', 'position_velocity', 'effort'], Dict[str, Union[Literal['none', 'position', 'velocity', 'position_velocity', 'effort'], int]], int, None]#

Portable actuator target mode, as a scalar or joint-rule mapping.

Accepted names and integer values are "none"/0 (passive), "position"/1, "velocity"/2, "position_velocity"/3, and "effort"/4. Default emulates these modes through its drive mode and effective gains. Newton authors the corresponding JointTargetMode; solvers without native target-mode support use deterministic gain-based fallbacks where possible.

class embodichain.lab.sim.cfg.NewtonPhysicsCfg[source]#

Bases: PhysicsBackendCfg

Configuration selector for the Newton physics backend.

DexSim wraps and extends Newton for EmbodiChain. The selected solver and collision pipeline are scene-wide. Shape, contact, material, and joint values are configured separately on object and articulation configs and compiled into DexSim Spawn descriptors.

Attributes:

collision_cfg

Optional external collision-pipeline configuration.

debug_mode

Whether to enable additional Newton runtime diagnostics.

device

Warp device used to build and step Newton, for example "cuda:0".

gravity

World-frame gravity vector in meters per second squared.

num_substeps

Number of Newton solver substeps per EmbodiChain physics step.

physics_dt

Duration of one physics step in seconds.

requires_grad

Whether to finalize the Newton model with differentiable state enabled.

solver_cfg

Optional Newton solver configuration.

suppress_warp_kernel_logs

Whether to hide Warp startup and kernel compile/load messages.

sync_to_renderer

Newton-to-render publication policy.

use_cuda_graph

Whether to capture Newton stepping in a CUDA graph when supported.

Methods:

to_dexsim_cfg(gpu_id)

Convert this config to dexsim.engine.newton_physics.NewtonCfg.

collision_cfg: NewtonCollisionPipelineCfg | Mapping[str, Any] | None#

Optional external collision-pipeline configuration.

The default preserves external contact generation for ordinary rigid-body scenes. Set to None to avoid constructing or executing the external pipeline, for example when particle solvers use rigid shapes solely as one-way SDF boundaries.

debug_mode: bool#

Whether to enable additional Newton runtime diagnostics.

device: str | torch.device#

Warp device used to build and step Newton, for example "cuda:0".

This redeclaration intentionally takes precedence over PhysicsBackendCfg.device, so NewtonPhysicsCfg() always starts on CUDA unless the caller explicitly supplies another device.

gravity: Sequence[float] | np.ndarray#

World-frame gravity vector in meters per second squared.

num_substeps: int#

Number of Newton solver substeps per EmbodiChain physics step.

The effective solver interval is physics_dt / num_substeps.

physics_dt: float#

Duration of one physics step in seconds.

Environment control steps may contain multiple physics steps. For Newton, this interval is further divided by NewtonPhysicsCfg.num_substeps.

requires_grad: bool#

Whether to finalize the Newton model with differentiable state enabled.

EmbodiChain currently requires the Semi-implicit solver for this mode and disables CUDA graph capture when gradients are enabled.

solver_cfg: Mapping[str, Any] | NewtonSolverCfg | None#

Optional Newton solver configuration.

A mapping is converted to the matching DexSim Newton solver config. Include solver_type or class_type to select the solver, then add any parameters accepted by that DexSim solver config. If omitted, EmbodiChain preserves DexSim’s scene-aware AutoSolverCfg default. A DexSim build exporting AutoSolverCfg is required; no concrete-solver fallback is used.

suppress_warp_kernel_logs: bool#

Whether to hide Warp startup and kernel compile/load messages.

Genuine Newton/Warp warnings and errors are not suppressed.

sync_to_renderer: bool | None#

Newton-to-render publication policy.

None and False let SimulationManager publish on demand for windows, cameras, recording and browser visualization. True also requests publication on steps without a visual consumer. The manager batches consumers within each render frame. Direct DexSim World.update callers retain the underlying automatic policy: window-aware for None, always for True, and disabled for False.

to_dexsim_cfg(gpu_id)[source]#

Convert this config to dexsim.engine.newton_physics.NewtonCfg.

Return type:

NewtonCfg

use_cuda_graph: bool#

Whether to capture Newton stepping in a CUDA graph when supported.

This is ignored for gradient mode and is unavailable on a CPU device.

class embodichain.lab.sim.cfg.NewtonRigidBodyMaterialCfg[source]#

Bases: RigidBodyMaterialCfg

Newton contact-material extensions.

Solver support differs by field. Semi-implicit and Featherstone consume ke, kd, kf, ka, mu, and kh; MuJoCo Warp consumes ke, kd, mu, kh, and the torsional/rolling coefficients; XPBD consumes mu, restitution, and torsional/rolling friction. DexSim warns when an explicitly changed contact field is ignored by the selected solver.

Attributes:

dynamic_friction

Sliding friction coefficient.

ka

Contact adhesion distance [m].

kd

Normal contact damping coefficient.

ke

Elastic contact stiffness coefficient.

kf

Tangential/friction damping coefficient.

kh

Hydroelastic contact stiffness used when hydroelastic contact is enabled.

restitution

Coefficient of restitution, where zero is inelastic and one is elastic.

rolling_friction

Dimensionless rolling friction coefficient resisting rolling motion.

static_friction

Static friction coefficient used before tangential slip begins.

torsional_friction

Dimensionless torsional friction coefficient resisting spin.

dynamic_friction: float | None#

Sliding friction coefficient.

The Default backend uses it as dynamic friction; Newton uses it as its single Coulomb friction coefficient mu.

ka: float | None#

Contact adhesion distance [m].

kd: float | None#

Normal contact damping coefficient.

ke: float | None#

Elastic contact stiffness coefficient.

kf: float | None#

Tangential/friction damping coefficient.

kh: float | None#

Hydroelastic contact stiffness used when hydroelastic contact is enabled.

restitution: float | None#

Coefficient of restitution, where zero is inelastic and one is elastic.

The active backend/solver may further restrict or ignore restitution.

rolling_friction: float | None#

Dimensionless rolling friction coefficient resisting rolling motion.

Newton and MuJoCo-Warp use this as mu_rolling. It is retained in the shared schema for solvers and contact dimensions that support rolling resistance.

static_friction: float | None#

Static friction coefficient used before tangential slip begins.

This is currently consumed only by the Default backend.

torsional_friction: float | None#

Dimensionless torsional friction coefficient resisting spin.

Newton and MuJoCo-Warp use this as mu_torsional. The active solver may ignore it.

class embodichain.lab.sim.cfg.ObjectBaseCfg[source]#

Bases: object

Base configuration for an asset in the simulation.

This class defines the basic properties of an asset, such as its type, initial state, and collision group. It is used as a base class for specific asset configurations.

Methods:

from_dict(init_dict)

Initialize the configuration from a dictionary.

Attributes:

init_local_pose

4x4 transformation matrix of the root in local frame.

init_pos

Position of the root in simulation world frame.

init_rot

Euler angles (in degree) of the root in simulation world frame.

uid

classmethod from_dict(init_dict)[source]#

Initialize the configuration from a dictionary.

Return type:

ObjectBaseCfg

init_local_pose: ndarray | None#

4x4 transformation matrix of the root in local frame. If specified, it will override init_pos and init_rot.

init_pos: tuple[float, float, float]#

Position of the root in simulation world frame. Defaults to (0.0, 0.0, 0.0).

init_rot: tuple[float, float, float]#

Euler angles (in degree) of the root in simulation world frame. Defaults to (0.0, 0.0, 0.0).

uid: str | None#
class embodichain.lab.sim.cfg.PhysicsBackendCfg[source]#

Bases: object

Backend-neutral simulation timing, device, and gravity configuration.

Concrete backend configs inherit this class. The config type selects the backend; no independent backend string can disagree with it.

Attributes:

device

Compute device used to build and step the selected physics backend.

gravity

World-frame gravity vector in meters per second squared.

physics_dt

Duration of one physics step in seconds.

device: str | device#

Compute device used to build and step the selected physics backend.

Concrete backend configurations may redeclare this field when their native runtime has a different default. In particular, NewtonPhysicsCfg intentionally shadows this CPU default with "cuda:0". Callers can still provide an explicit device override.

gravity: Union[Sequence[float], ndarray]#

World-frame gravity vector in meters per second squared.

physics_dt: float#

Duration of one physics step in seconds.

Environment control steps may contain multiple physics steps. For Newton, this interval is further divided by NewtonPhysicsCfg.num_substeps.

class embodichain.lab.sim.cfg.RenderCfg[source]#

Bases: object

RenderCfg(renderer: “Literal[‘auto’, ‘no-render’, ‘hybrid’, ‘fast-rt’, ‘rt’]” = <factory>, spp: ‘int’ = <factory>, denoising: ‘DenoisingCfg’ = <factory>, dlss: ‘DLSSCfg’ = <factory>, nrd: ‘NRDCfg’ = <factory>, tone_mapping_enabled: ‘bool’ = <factory>, tone_mapping_exposure: ‘float’ = <factory>, min_bounces: ‘int’ = <factory>, max_bounces: ‘int’ = <factory>)

Methods:

apply_to_dexsim_config(world_config)

Apply rendering settings to a DexSim world configuration.

to_dexsim_flags()

Convert the renderer name to DexSim's renderer enum.

Attributes:

denoising

Window and offscreen denoising/reconstruction pipeline selection.

dlss

DLSS settings used when a target selects dlss.

max_bounces

Maximum traced path depth, counting the primary segment.

min_bounces

Path depth at which Russian Roulette termination may begin.

nrd

NRD settings shared by targets using standalone NRD.

renderer

Renderer backend to use for the simulation.

spp

Samples per pixel for ray tracing rendering.

tone_mapping_enabled

Whether to map HDR RGB output with the modified Reinhard curve.

tone_mapping_exposure

Fixed linear exposure multiplier applied before tone mapping.

apply_to_dexsim_config(world_config)[source]#

Apply rendering settings to a DexSim world configuration.

Parameters:

world_config (WorldConfig) – DexSim world configuration to update in place.

Raises:

ValueError – If rendering settings contain invalid values, including bounce limits changed after construction.

Return type:

None

denoising: DenoisingCfg#

Window and offscreen denoising/reconstruction pipeline selection.

dlss: DLSSCfg#

DLSS settings used when a target selects dlss.

max_bounces: int#

Maximum traced path depth, counting the primary segment.

This bounds ordinary ray-tracing paths and NRD transparent continuations. NRD’s indirect-lighting budget is controlled separately by NRDCfg.max_indirect_bounces.

min_bounces: int#

Path depth at which Russian Roulette termination may begin.

Rays can still terminate earlier on a miss or absorption. The primary segment has depth zero; this value does not guarantee a minimum path length.

nrd: NRDCfg#

NRD settings shared by targets using standalone NRD.

renderer: Literal['auto', 'no-render', 'hybrid', 'fast-rt', 'rt']#

Renderer backend to use for the simulation.

Note: - ‘no-render’ selects DexSim’s NoRender backend and requires headless mode.

Native camera sensors require ‘hybrid’, ‘fast-rt’, or ‘rt’.

  • ‘auto’ lets task environments select ‘no-render’ before World creation when

    they have no enabled cameras, recording cameras, window, Viser or explicit rendering demand. Custom camera/visual code must explicitly select a native renderer or reserve rendering through its environment’s demand hook. The run-task launcher uses ‘fast-rt’ for native auto rendering on every platform; other entry points retain GPU-based selection. Explicit renderer selections and global defaults retain precedence.

  • GPU-based auto selection: RTX-series cards use

    ‘hybrid’, while datacenter cards (A100/A800, H100/H800/H200/H20) use ‘fast-rt’. If no CUDA device is available or the GPU is unknown, it falls back to ‘hybrid’.

  • ‘hybrid’ uses ray tracing for shadows and reflections while keeping rasterization for primary rendering,

    providing a balance between performance and visual quality.

  • ‘fast-rt’ is a fully ray-traced renderer for maximum visual fidelity, but may have higher computational cost.

  • ‘rt’ is an offline ray-traced renderer for maximum visual fidelity, suitable for high-quality rendering tasks.

spp: int#

Samples per pixel for ray tracing rendering. This parameter is only valid when renderer is ‘hybrid’, ‘fast-rt’ or ‘rt’.

to_dexsim_flags()[source]#

Convert the renderer name to DexSim’s renderer enum.

Return type:

Renderer

tone_mapping_enabled: bool#

Whether to map HDR RGB output with the modified Reinhard curve.

tone_mapping_exposure: float#

Fixed linear exposure multiplier applied before tone mapping.

class embodichain.lab.sim.cfg.RigidBodyMaterialCfg[source]#

Bases: object

Common rigid-contact material intent.

All fields use sparse-overlay semantics: None preserves the source or backend default. The Default backend consumes all three values. Newton has one Coulomb friction coefficient, so it maps dynamic_friction to ShapeConfig.mu and currently has no separate static-friction input; restitution is consumed only by Newton solvers that support it.

Attributes:

dynamic_friction

Sliding friction coefficient.

restitution

Coefficient of restitution, where zero is inelastic and one is elastic.

static_friction

Static friction coefficient used before tangential slip begins.

dynamic_friction: float | None#

Sliding friction coefficient.

The Default backend uses it as dynamic friction; Newton uses it as its single Coulomb friction coefficient mu.

restitution: float | None#

Coefficient of restitution, where zero is inelastic and one is elastic.

The active backend/solver may further restrict or ignore restitution.

static_friction: float | None#

Static friction coefficient used before tangential slip begins.

This is currently consumed only by the Default backend.

class embodichain.lab.sim.cfg.RigidBodyPhysicsCfg[source]#

Bases: object

Grouped rigid-body physics configuration used by Spawn.

Every nested field defaults to None. With asset_physics_mode="overlay", Spawn therefore changes only explicitly configured values and preserves all other USD/URDF or backend defaults. For a newly authored procedural rigid shape, an absent collision_props block receives CollisionPropertiesCfg’s common contact envelope. Each physical concept has exactly one slot. Dict/YAML input selects a backend subclass with a local discriminator, while a unique native field may infer that subclass. Mesh collision construction belongs to MeshCfg, not this body-physics schema.

Attributes:

collision_props

Portable collision envelope plus one optional backend-specific subtype.

enable_collision

Compatibility view used by legacy object initialization.

mass_props

Backend-neutral mass, inertia, COM, and recomputation overrides.

material_props

Portable contact material values plus optional backend-native coefficients.

rigid_props

Optional Default-native body properties.

Methods:

from_dexsim_physical_attr(attr)

Capture native Default attributes in the grouped configuration.

from_dict(init_dict)

Parse grouped physics properties from a YAML/JSON-style mapping.

to_dexsim_physical_attr(*[, base])

Translate configured Default-compatible values to PhysicalAttr.

collision_props: CollisionPropertiesCfg | None#

Portable collision envelope plus one optional backend-specific subtype.

property enable_collision: bool#

Compatibility view used by legacy object initialization.

classmethod from_dexsim_physical_attr(attr)[source]#

Capture native Default attributes in the grouped configuration.

Return type:

RigidBodyPhysicsCfg

classmethod from_dict(init_dict)[source]#

Parse grouped physics properties from a YAML/JSON-style mapping.

Return type:

RigidBodyPhysicsCfg

mass_props: MassPropertiesCfg | None#

Backend-neutral mass, inertia, COM, and recomputation overrides.

material_props: RigidBodyMaterialCfg | None#

Portable contact material values plus optional backend-native coefficients.

rigid_props: DefaultRigidBodyPropertiesCfg | None#

Optional Default-native body properties.

Newton currently exposes no body-level property group beyond common mass properties, so there is no empty Newton marker config.

to_dexsim_physical_attr(*, base=None)[source]#

Translate configured Default-compatible values to PhysicalAttr.

Parameters:

base (PhysicalAttr | None) – Optional native attributes to overlay. This is used by the retained raw Default articulation path for sparse per-link updates.

Return type:

PhysicalAttr

Returns:

A DexSim physical-attribute object using its defaults for every unconfigured grouped field.

class embodichain.lab.sim.cfg.RigidConstraintCfg[source]#

Bases: object

Configuration for a fixed constraint between two RigidObjects.

The constraint binds rigid_object_a’s entity[i] to rigid_object_b’s entity[i] within arena[i] (one constraint per arena).

Parameters:
  • name (str) – Base constraint name. Per-arena names are derived as f"{name}" (single env) or f"{name}_{i}" (multi env).

  • rigid_object_a_uid (str) – UID of the first RigidObject (must exist in the sim).

  • rigid_object_b_uid (str) – UID of the second RigidObject (must exist in the sim).

  • local_frame_a (ndarray | None) – 4x4 joint frame in object A’s local coordinates. None -> identity (object A’s origin). Accepts a single (4, 4) matrix (shared by all envs) or an (N, 4, 4) array (one frame per env). Defaults to None.

  • local_frame_b (ndarray | None) – 4x4 joint frame in object B’s local coordinates. None -> the frame is computed per env as inv(pose_B) @ pose_A from the objects’ current poses, so the constraint welds the objects at their current relative pose (rather than pulling their origins together). An explicit (4, 4) or (N, 4, 4) value is used verbatim. Defaults to None.

  • constraint_type (Literal['fixed']) – Reserved for future typed constraints (prismatic, revolute, spherical, d6). Only "fixed" is supported in v1.

Attention

Both objects must be RigidObject instances and must share the same number of arenas.

Attributes:

constraint_type

Constraint type.

local_frame_a

Local joint frame on object A.

local_frame_b

Local joint frame on object B.

name

Base name of the constraint (per-arena names are derived from this).

rigid_object_a_uid

UID of the first RigidObject.

rigid_object_b_uid

UID of the second RigidObject.

constraint_type: Literal['fixed']#

Constraint type. Only "fixed" is supported in v1.

local_frame_a: ndarray | None#

Local joint frame on object A. None -> identity (object A’s origin).

local_frame_b: ndarray | None#

Local joint frame on object B. None -> inv(pose_B) @ pose_A per env (weld at the objects’ current relative pose).

name: str#

Base name of the constraint (per-arena names are derived from this).

rigid_object_a_uid: str#

UID of the first RigidObject.

rigid_object_b_uid: str#

UID of the second RigidObject.

class embodichain.lab.sim.cfg.RigidObjectCfg[source]#

Bases: ObjectBaseCfg

Configuration for a rigid body asset in the simulation.

This class extends the base asset configuration to include specific properties for rigid bodies, such as physical attributes and collision group.

Attributes:

asset_physics_mode

How a file-backed asset's physical properties are handled.

attrs

Rigid-body physics.

body_scale

Scale of the rigid body in the simulation world frame.

body_type

init_local_pose

4x4 transformation matrix of the root in local frame.

init_pos

Position of the root in simulation world frame.

init_rot

Euler angles (in degree) of the root in simulation world frame.

shape

Shape configuration for the rigid body.

source

USD source asset; mutually exclusive with shape.

uid

Methods:

from_dict(init_dict)

Parse a rigid object and normalize legacy mesh collision ownership.

resolve_asset_physics_mode()

Return the effective file-backed physics policy.

to_dexsim_body_type()

Convert the body type to dexsim ActorType.

asset_physics_mode: AssetPhysicsMode#

How a file-backed asset’s physical properties are handled.

"preserve" keeps the USD-authored physics. "overlay" applies configured properties on top of the parsed asset. Procedural shapes always use config.

attrs: RigidBodyPhysicsCfg#

Rigid-body physics.

RigidBodyPhysicsCfg groups portable and backend-native intent.

body_scale: tuple | list#

Scale of the rigid body in the simulation world frame.

body_type: Literal['dynamic', 'kinematic', 'static']#
classmethod from_dict(init_dict)[source]#

Parse a rigid object and normalize legacy mesh collision ownership.

Return type:

RigidObjectCfg

init_local_pose: np.ndarray | None#

4x4 transformation matrix of the root in local frame. If specified, it will override init_pos and init_rot.

init_pos: tuple[float, float, float]#

Position of the root in simulation world frame. Defaults to (0.0, 0.0, 0.0).

init_rot: tuple[float, float, float]#

Euler angles (in degree) of the root in simulation world frame. Defaults to (0.0, 0.0, 0.0).

resolve_asset_physics_mode()[source]#

Return the effective file-backed physics policy.

Return type:

Literal['preserve', 'overlay']

shape: ShapeCfg | None#

Shape configuration for the rigid body.

source: UsdSourceCfg | None = None#

USD source asset; mutually exclusive with shape.

to_dexsim_body_type()[source]#

Convert the body type to dexsim ActorType.

Return type:

ActorType

uid: str | None#
class embodichain.lab.sim.cfg.RigidObjectGroupCfg[source]#

Bases: object

Configuration for a rigid object group asset in the simulation.

Rigid object groups can be initialized from multiple rigid object configurations specified in a folder. If folder_path is specified, user should provide a RigidObjectCfg in rigid_objects as a template configuration for all objects in the group.

For example: ```python rigid_object_group: RigidObjectGroupCfg(

folder_path=”path/to/folder”, max_num=5, rigid_objects={

“template_obj”: RigidObjectCfg(
shape=MeshCfg(

fpath=””, # fpath will be ignored when folder_path is specified

), body_type=”dynamic”,

)

}

)

Attributes:

body_type

Body type for all rigid objects in the group.

ext

File extension for the rigid object assets.

folder_path

Path to the folder containing the rigid object assets.

max_num

Maximum number of rigid objects to initialize from the folder.

rigid_objects

Configuration for the rigid objects in the group.

uid

Methods:

from_dict(init_dict)

Initialize the configuration from a dictionary.

body_type: Literal['dynamic', 'kinematic']#

Body type for all rigid objects in the group.

ext: str#

File extension for the rigid object assets.

This is only used when folder_path is specified.

folder_path: str | None#

Path to the folder containing the rigid object assets.

This is used to initialize multiple rigid object configurations from a folder.

classmethod from_dict(init_dict)[source]#

Initialize the configuration from a dictionary.

Return type:

RigidObjectGroupCfg

max_num: int#

Maximum number of rigid objects to initialize from the folder.

This is only used when folder_path is specified.

rigid_objects: Dict[str, RigidObjectCfg]#

Configuration for the rigid objects in the group.

uid: str | None#
class embodichain.lab.sim.cfg.RobotCfg[source]#

Bases: ArticulationCfg

RobotCfg(uid: ‘str | None’ = <factory>, init_pos: ‘tuple[float, float, float]’ = <factory>, init_rot: ‘tuple[float, float, float]’ = <factory>, init_local_pose: ‘np.ndarray | None’ = <factory>, fpath: ‘str’ = <factory>, body_scale: ‘tuple | list’ = <factory>, compute_uv: ‘bool’ = <factory>, asset_physics_mode: ‘AssetPhysicsMode’ = <factory>, attrs: ‘RigidBodyPhysicsCfg’ = <factory>, link_attrs: ‘dict[str, LinkPhysicsOverrideCfg] | None’ = <factory>, root_props: ‘ArticulationRootPropertiesCfg’ = <factory>, joint_drive_props: ‘JointDrivePropertiesCfg’ = <factory>, init_qpos: ‘torch.Tensor | np.ndarray | Sequence[float]’ = <factory>, qpos_limits: ‘torch.Tensor | np.ndarray | Sequence[Sequence[float]] | Dict[str, List[float]] | None’ = <factory>, build_pk_chain: ‘bool’ = <factory>, control_parts: ‘Dict[str, List[str]] | None’ = <factory>, urdf_cfg: ‘URDFCfg | None’ = <factory>, solver_cfg: ‘SolverCfg | Dict[str, SolverCfg] | None’ = <factory>, workspace_cfg: ‘Dict[str, RobotWorkspaceCfg] | None’ = <factory>, sensors: ‘list[SensorCfg]’ = <factory>, enable_sensor: ‘bool’ = <factory>, *, source: ‘UsdSourceCfg | None’ = None)

Classes:

SolverCfg

Configuration for the kinematic solver used in the robot simulation.

Attributes:

asset_physics_mode

Apply configured robot physics on top of source-authored values.

attrs

Physical attributes for all links.

body_scale

Scale of the articulation in the simulation world frame.

build_pk_chain

Build a pytorch-kinematics chain for FK and Jacobian computation.

compute_uv

Whether to compute the UV mapping for the articulation link.

control_parts

Control parts is the mapping from part name to joint names.

enable_sensor

Initialize mounted sensors when adding the robot.

fpath

Path to the articulation asset file.

init_local_pose

4x4 transformation matrix of the root in local frame.

init_pos

Position of the root in simulation world frame.

init_qpos

Initial joint positions of the articulation.

init_rot

Euler angles (in degree) of the root in simulation world frame.

joint_drive_props

Joint drive, limit, friction, and armature properties.

link_attrs

Named per-link physics override groups keyed by regex on link names.

qpos_limits

Override joint position limits of the articulation.

root_props

Grouped articulation-root properties.

sensors

Mounted camera configurations with robot-local parent link names.

solver_cfg

Solver is used to compute forward and inverse kinematics for the robot.

source

USD source asset; mutually exclusive with fpath.

uid

urdf_cfg

URDF assembly configuration which allows for assembling a robot from multiple URDF components.

workspace_cfg

Runtime workspace cache configuration keyed by control-part name.

Methods:

build_pk_serial_chain([device])

Build the serial chain from the URDF file.

from_dict(init_dict)

Initialize the configuration from a dictionary.

save_to_file(filepath)

Save config to a local file as JSON.

to_string()

Return config as a JSON string.

class SolverCfg#

Bases: object

Configuration for the kinematic solver used in the robot simulation.

Attributes:

class_type

The class type of the solver to be used.

end_link_name

The name of the end-effector link for the solver.

ik_nearest_weight

Weights for the inverse kinematics nearest calculation.

joint_names

List of joint names for the solver.

root_link_name

The name of the root/base link for the solver.

tcp

The tool center point (TCP) position as a 4x4 homogeneous matrix.

urdf_path

The file path to the URDF model of the robot.

user_qpos_limits

User defined Joint position limits [2, DOF] for the solver.

Methods:

from_dict(init_dict)

Initialize the concrete solver configuration from a dictionary.

init_solver(device, **kwargs)

class_type: str#

The class type of the solver to be used.

The name of the end-effector link for the solver.

This defines the target link for forward/inverse kinematics calculations. Must match a link name in the URDF file.

classmethod from_dict(init_dict)#

Initialize the concrete solver configuration from a dictionary.

The concrete config receives all recognized dataclass init fields in its constructor so initialization and __post_init__ observe the final inputs exactly once. Legacy unannotated config attributes are applied afterward. Unknown fields preserve the historical behavior: they are ignored with a warning.

Return type:

SolverCfg

ik_nearest_weight: Optional[List[float]]#

Weights for the inverse kinematics nearest calculation.

The weights influence how the solver prioritizes closeness to the seed position when multiple solutions are available.

abstract init_solver(device, **kwargs)#
Return type:

BaseSolver

joint_names: list[str] | None#

List of joint names for the solver.

If None, all joints in the URDF will be used. If specified, only these named joints will be included in the kinematic chain.

The name of the root/base link for the solver.

This defines the starting point of the kinematic chain. Must match a link name in the URDF file.

tcp: Tensor | ndarray#

The tool center point (TCP) position as a 4x4 homogeneous matrix.

This represents the position and orientation of the tool in the robot’s end-effector frame. It must be a finite SE(3) rigid transform; affine transforms are not supported.

urdf_path: str | None#

The file path to the URDF model of the robot.

user_qpos_limits: Optional[List[float]]#

User defined Joint position limits [2, DOF] for the solver. If not provided (None), this value will replace by joint limits defined in urdf when solver init from robot. If provided, the solver will use the intersection of user defined limits and urdf limits as the final joint limits.

asset_physics_mode: AssetPhysicsMode#

Apply configured robot physics on top of source-authored values.

attrs: RigidBodyPhysicsCfg#

Physical attributes for all links. We use default mass from the USD/URDF file if available. The mass and density in attrs will only be used if specified.

body_scale: tuple | list#

Scale of the articulation in the simulation world frame.

build_pk_chain: bool#

Build a pytorch-kinematics chain for FK and Jacobian computation.

USD assets use resolved simulation joint descriptors after preparation; URDF assets use their source kinematic tree. USD kinematics supports trees of fixed, revolute, and prismatic joints, including child-side joint frames. Set False to load other joint topologies for simulation without FK.

build_pk_serial_chain(device=device(type='cpu'), **kwargs)[source]#

Build the serial chain from the URDF file.

Note

This method is usually used in imitation dataset saving (compute eef pose from qpos using FK) and model training (provide a differentiable FK layer or loss computation).

Parameters:
  • device (torch.device) – The device to which the chain will be moved. Defaults to CPU.

  • **kwargs – Additional arguments for building the serial chain.

Returns:

The serial chain of the robot for specified control part.

Return type:

Dict[str, pk.SerialChain]

compute_uv: bool#

Whether to compute the UV mapping for the articulation link.

Currently, the uv mapping is computed for each link with projection uv mapping method.

control_parts: Dict[str, List[str]] | None#

Control parts is the mapping from part name to joint names.

For example, {‘left_arm’: [‘joint1’, ‘joint2’], ‘right_arm’: [‘joint3’, ‘joint4’]} If no control part is specified, the robot will use all joints as a single control part.

Official defaults use arm / eef for single-arm robots and left_arm, right_arm, left_eef, right_eef for dual-arm robots. These are naming conventions only: caller-defined part names are preserved without reserved names, automatic aliases, or inferred capabilities.

Note

  • if control_parts is specified, solver_cfg must be a dict with part names as

    keys corresponding to the control parts name.

  • The joint names in the control parts support regular expressions, e.g., ‘joint[1-6]’.

    After initialization of robot, the names will be expanded to a list of full joint names.

  • Robot is a derived class of Articulation, with control parts support. So the joint_drive_props

    in ArticulationCfg can use control part as key to specify the corresponding joint drive properties, which will be overridden if these joint names are already specified.

enable_sensor: bool#

Initialize mounted sensors when adding the robot. Gym overrides this with its environment-wide acquisition switch, which defaults to True.

fpath: str#

Path to the articulation asset file.

classmethod from_dict(init_dict)[source]#

Initialize the configuration from a dictionary.

Return type:

RobotCfg

init_local_pose: np.ndarray | None#

4x4 transformation matrix of the root in local frame. If specified, it will override init_pos and init_rot.

init_pos: tuple[float, float, float]#

Position of the root in simulation world frame. Defaults to (0.0, 0.0, 0.0).

init_qpos: torch.Tensor | np.ndarray | Sequence[float]#

Initial joint positions of the articulation.

If None, the joint positions will be set to zero. If provided, it should be an array of shape (num_dofs,).

init_rot: tuple[float, float, float]#

Euler angles (in degree) of the root in simulation world frame. Defaults to (0.0, 0.0, 0.0).

joint_drive_props: JointDrivePropertiesCfg#

Joint drive, limit, friction, and armature properties.

Named per-link physics override groups keyed by regex on link names.

Each group applies LinkPhysicsOverrideCfg.attrs on top of attrs for matched links only. A link must not match more than one group.

qpos_limits: torch.Tensor | np.ndarray | Sequence[Sequence[float]] | Dict[str, List[float]] | None#

Override joint position limits of the articulation.

If None, the joint position limits from the asset file (URDF/USD) are used. If provided as a tensor/array of shape (num_dofs, 2), it is applied in flattened source-resolved DOF order before the backend model is built. If provided as a dictionary, keys are joint names or regular expressions and values are [min, max] limits.

This field replaces the asset limits for the articulation and can be used to either tighten or expand the allowed range.

root_props: ArticulationRootPropertiesCfg#

Grouped articulation-root properties.

Fixed-base and self-collision intent is portable. Root sleep and solver iterations are Default-only fields and are ignored by Newton. The portable fields default to a fixed base with self-collision disabled. Set either field to None to preserve an authored USD/backend value; URDF imports then use the established fixed-base, self-collision-off defaults.

save_to_file(filepath)[source]#

Save config to a local file as JSON.

sensors: list[SensorCfg]#

Mounted camera configurations with robot-local parent link names.

An explicit list replaces the robot’s default suite; an empty list clears it. Sensor UIDs must be unique in the simulation. Runtime parent binding uses a copy, preserving these local calibration declarations.

solver_cfg: SolverCfg | Dict[str, SolverCfg] | None#

Solver is used to compute forward and inverse kinematics for the robot.

source: UsdSourceCfg | None = None#

USD source asset; mutually exclusive with fpath.

to_string()[source]#

Return config as a JSON string.

uid: str | None#
urdf_cfg: URDFCfg | None#

URDF assembly configuration which allows for assembling a robot from multiple URDF components.

workspace_cfg: Dict[str, RobotWorkspaceCfg] | None#

Runtime workspace cache configuration keyed by control-part name.

class embodichain.lab.sim.cfg.RobotPresetCfg[source]#

Bases: object

Base class for replace-only robot configurations across physics backends.

Subclasses declare complete RobotCfg alternatives as fields. A default field is required; optional fields use Newton backend or solver profile names such as newton, newton_mujoco_warp, or newton_mjwarp. The active PhysicsBackendCfg selects one complete alternative at SimulationManager.add_robot(); alternatives are never field-merged.

Portable robot properties should remain on one ordinary RobotCfg. Use this wrapper only when an asset, actuator model, or native physics value genuinely requires a different complete robot definition.

Example:

@configclass
class MyRobotPresetCfg(RobotPresetCfg):
    default: RobotCfg = MyRobotCfg()
    newton_mujoco_warp: RobotCfg = MyNewtonRobotCfg()

Methods:

resolve(physics_cfg, *[, newton_solver_type])

Return an isolated complete robot config for the active backend.

resolve(physics_cfg, *, newton_solver_type=None)[source]#

Return an isolated complete robot config for the active backend.

Parameters:
  • physics_cfg (PhysicsBackendCfg) – The scene’s backend-selecting physics configuration.

  • newton_solver_type (str | None) – Resolved Newton solver name when it is already available from the runtime. If omitted, it is inferred from physics_cfg.

Return type:

RobotCfg

Returns:

A deep copy of the highest-priority complete robot alternative.

Raises:
  • TypeError – If a preset name is unsupported, default is undeclared, or a selected alternative is not a RobotCfg.

  • ValueError – If no declared alternative can satisfy the backend.

class embodichain.lab.sim.cfg.RobotWorkspaceCfg[source]#

Bases: object

Runtime configuration for a control-part workspace cache.

Attributes:

cache_path

Path to a workspace cache entry directory or results.npz file.

min_score

Optional minimum cached reachability score accepted for sampling.

strategy

Default runtime sampling strategy.

voxel_size

Cartesian voxel edge length in meters for voxel-uniform sampling.

cache_path: str#

Path to a workspace cache entry directory or results.npz file.

min_score: float | None#

Optional minimum cached reachability score accepted for sampling.

strategy: Literal['point_uniform', 'voxel_uniform']#

Default runtime sampling strategy.

voxel_size: float#

Cartesian voxel edge length in meters for voxel-uniform sampling.

class embodichain.lab.sim.cfg.ShapeCfg[source]#

Bases: object

ShapeCfg(shape_type: ‘str’ = <factory>, visual_material: ‘VisualMaterialCfg | None’ = <factory>)

Methods:

from_dict(init_dict)

Initialize the configuration from a dictionary.

Attributes:

shape_type

Type of the shape.

visual_material

Configuration parameters for the visual material of the shape.

classmethod from_dict(init_dict)[source]#

Initialize the configuration from a dictionary.

Return type:

ShapeCfg

shape_type: str#

Type of the shape. Must be specified in subclasses.

visual_material: VisualMaterialCfg | None#

Configuration parameters for the visual material of the shape. Defaults to None.

embodichain.lab.sim.cfg.SoftObjectCfg#

alias of VolumeDeformableObjectCfg

class embodichain.lab.sim.cfg.SurfaceDeformableObjectCfg[source]#

Bases: DeformableObjectCfg

Configuration for a Newton surface-deformable particle set.

Attributes:

attrs

Newton surface-deformable physical attributes.

deformable_type

Physical topology represented by the asset.

init_local_pose

4x4 transformation matrix of the root in local frame.

init_pos

Position of the root in simulation world frame.

init_rot

Euler angles (in degree) of the root in simulation world frame.

particle_flags

Newton particle flags, provided as one broadcast value or one value per node.

particle_radius

Newton particle radius; None uses the active solver default.

shape

Render and source-mesh configuration.

uid

validate_mesh

Whether Newton reports source-mesh quality validation warnings.

visual_binding_mode

Binding used to drive visual_shape from simulation particles.

visual_shape

Optional render mesh driven by the simulation surface.

attrs: SurfaceDeformablePhysicsCfg#

Newton surface-deformable physical attributes.

deformable_type: Literal['surface']#

Physical topology represented by the asset.

init_local_pose: ndarray | None#

4x4 transformation matrix of the root in local frame. If specified, it will override init_pos and init_rot.

init_pos: tuple[float, float, float]#

Position of the root in simulation world frame. Defaults to (0.0, 0.0, 0.0).

init_rot: tuple[float, float, float]#

Euler angles (in degree) of the root in simulation world frame. Defaults to (0.0, 0.0, 0.0).

particle_flags: Union[int, Sequence[int], ndarray, None]#

Newton particle flags, provided as one broadcast value or one value per node.

Clear the Newton ACTIVE bit for nodes that will be driven kinematically. Per-node arrays must follow the resolved simulation-particle order. For a surface deformable, an array-backed MeshCfg preserves this order. A volume deformable is voxelized into a separate tetrahedral simulation mesh, so its particle indices do not correspond to source-mesh vertex indices.

particle_radius: float | None#

Newton particle radius; None uses the active solver default.

shape: MeshCfg#

Render and source-mesh configuration.

uid: str | None#
validate_mesh: bool#

Whether Newton reports source-mesh quality validation warnings.

visual_binding_mode: Literal['auto', 'nearest_vertex']#

Binding used to drive visual_shape from simulation particles.

"auto" uses DexSim’s surface embedding. "nearest_vertex" is useful when the render mesh duplicates simulation vertices along texture seams.

visual_shape: MeshCfg | None#

Optional render mesh driven by the simulation surface.

When omitted, shape supplies both simulation topology and rendering. Use a separately indexed mesh here when the visual asset needs authored UVs, seam vertices, or other detail that should not change the simulation mesh.

class embodichain.lab.sim.cfg.SurfaceDeformablePhysicsCfg[source]#

Bases: object

Surface density, Newton surface elements, and optional mesh springs.

Attributes:

add_springs

Whether Newton creates explicit mesh-edge springs.

density

Surface density [kg/m²].

spring_kd

Spring damping; None uses the Newton default.

spring_ke

Spring stiffness; None uses the Newton default.

surface_props

Triangle, bending, and aerodynamic overrides; None uses Newton defaults.

add_springs: bool#

Whether Newton creates explicit mesh-edge springs.

density: float#

Surface density [kg/m²].

spring_kd: float | None#

Spring damping; None uses the Newton default.

spring_ke: float | None#

Spring stiffness; None uses the Newton default.

surface_props: SurfaceElementPropertiesCfg#

Triangle, bending, and aerodynamic overrides; None uses Newton defaults.

class embodichain.lab.sim.cfg.SurfaceElementPropertiesCfg[source]#

Bases: object

Newton surface triangle, bending, and aerodynamic properties.

None preserves Newton’s cloth defaults; volume objects resolve it to zero, matching their disabled-by-default surface forces.

Attributes:

edge_kd

Bending-edge damping.

edge_ke

Bending-edge stiffness.

tri_drag

Aerodynamic drag coefficient.

tri_ka

Triangle area stiffness.

tri_kd

Triangle damping.

tri_ke

Triangle elastic stiffness.

tri_lift

Aerodynamic lift coefficient.

edge_kd: float | None#

Bending-edge damping.

edge_ke: float | None#

Bending-edge stiffness.

tri_drag: float | None#

Aerodynamic drag coefficient.

tri_ka: float | None#

Triangle area stiffness.

tri_kd: float | None#

Triangle damping.

tri_ke: float | None#

Triangle elastic stiffness.

tri_lift: float | None#

Aerodynamic lift coefficient.

class embodichain.lab.sim.cfg.URDFCfg[source]#

Bases: object

Standalone configuration class for URDF assembly.

Methods:

add_component(component_type, urdf_path[, ...])

Add a robot component to the assembly configuration.

add_sensor(sensor_name, **sensor_config)

Add a sensor to the robot configuration.

assemble_urdf()

Assemble URDF files for the robot based on the configuration.

from_dict(init_dict)

set_urdf(urdf_path)

Directly specify a single URDF file for the robot, compatible with the single-URDF robot case.

Attributes:

base_link_name

Name of the base link in the assembled robot.

component_prefix

Component name prefixes used during URDF assembly.

components

Dictionary of robot components to be assembled.

fname

Name used for output file and directory.

fpath

Full output file path for the assembled URDF.

fpath_prefix

Output directory prefix for the assembled URDF file.

name_case

Case normalization policy applied to joint/link names during URDF assembly.

sensors

Dictionary of sensors to be attached to the robot.

use_signature_check

Whether to use signature check when merging URDFs.

add_component(component_type, urdf_path, transform=None, **params)[source]#

Add a robot component to the assembly configuration.

Parameters:
  • component_type (str) – The type/name of the component. Should be one of SUPPORTED_COMPONENTS (e.g., ‘chassis’, ‘torso’, ‘head’, ‘left_arm’, ‘right_hand’, ‘arm’, ‘hand’, etc.).

  • urdf_path (str) – Path to the component’s URDF file.

  • transform (np.ndarray | None) – 4x4 transformation matrix for the component in the robot frame (default: None).

  • **params – Additional keyword parameters for the component (e.g., color, material, etc.).

Returns:

Returns self to allow method chaining.

Return type:

URDFCfg

add_sensor(sensor_name, **sensor_config)[source]#

Add a sensor to the robot configuration.

Parameters:
  • sensor_name (str) – The name of the sensor.

  • **sensor_config – Additional configuration parameters for the sensor.

Returns:

Returns self to allow method chaining.

Return type:

URDFCfg

assemble_urdf()[source]#

Assemble URDF files for the robot based on the configuration.

Returns:

The path to the resulting (possibly merged) URDF file.

Return type:

str

Name of the base link in the assembled robot.

component_prefix: List[tuple[str, str | None]]#

Component name prefixes used during URDF assembly.

Preferred form is a list of (component_name, prefix) tuples. For convenience, a mapping {component_name: prefix} is also accepted when constructing URDFCfg and will be normalized internally.

components: Dict[str, Dict[str, Union[str, Dict, ndarray]]]#

Dictionary of robot components to be assembled.

fname: str | None#

Name used for output file and directory. If not specified, auto-generated from component names.

fpath: str | None#

Full output file path for the assembled URDF. If specified, overrides fname and fpath_prefix.

fpath_prefix: str#

Output directory prefix for the assembled URDF file.

classmethod from_dict(init_dict)[source]#
Return type:

URDFCfg

name_case: dict[str, str]#

Case normalization policy applied to joint/link names during URDF assembly.

Supported values per key are "upper", "lower" or "original" (legacy alias "none"). The default preserves source URDF casing.

sensors: Dict[str, Dict[str, str | ndarray]]#

Dictionary of sensors to be attached to the robot.

set_urdf(urdf_path)[source]#

Directly specify a single URDF file for the robot, compatible with the single-URDF robot case.

Parameters:

urdf_path (str) – Path to the robot’s URDF file.

Returns:

Returns self to allow method chaining.

Return type:

URDFCfg

use_signature_check: bool#

Whether to use signature check when merging URDFs.

class embodichain.lab.sim.cfg.UsdSourceCfg[source]#

Bases: object

Select a typed asset from a source USD stage.

Supply this as source on a visual-object, rigid-object or articulation configuration. Runtime identity and placement belong to the containing configuration. This source does not bind an already imported scene entity.

Attributes:

file_path

Source USD, USDA, USDC or USDZ file.

source_prim_path

Exact absolute prim path in the source stage.

Methods:

from_dict(data)

Decode a source mapping, rejecting unknown source options.

file_path: str#

Source USD, USDA, USDC or USDZ file.

classmethod from_dict(data)[source]#

Decode a source mapping, rejecting unknown source options.

Parameters:

data (Mapping[str, object]) – Source file and optional exact source prim selector.

Return type:

UsdSourceCfg

Returns:

Source configuration; call validate() after assembly.

source_prim_path: str | None#

Exact absolute prim path in the source stage.

Omit only when the source contains a single candidate of the requested asset type. This is not a destination path, regex or parent/link binding.

class embodichain.lab.sim.cfg.VisualObjectCfg[source]#

Bases: ObjectBaseCfg

Configure a render-only object, without a rigid body or colliders.

Like RigidObjectCfg, MeshCfg.fpath supplies ordinary mesh files such as OBJ, STL, GLB and glTF. source=UsdSourceCfg(...) optionally selects one mesh object from a source USD scene. Explicit visual-object creation uses only its appearance; USD physics is omitted. Whole-scene import instead preserves each entity’s authored physical type.

Attributes:

body_scale

Scale applied to the visual geometry, independently of its root pose.

init_local_pose

4x4 transformation matrix of the root in local frame.

init_pos

Position of the root in simulation world frame.

init_rot

Euler angles (in degree) of the root in simulation world frame.

shape

Mesh, cube or sphere supplying the object's appearance.

source

USD source asset; mutually exclusive with shape.

uid

visible

Initial visibility restored by reset.

body_scale: tuple[float, float, float]#

Scale applied to the visual geometry, independently of its root pose.

init_local_pose: ndarray | None#

4x4 transformation matrix of the root in local frame. If specified, it will override init_pos and init_rot.

init_pos: tuple[float, float, float]#

Position of the root in simulation world frame. Defaults to (0.0, 0.0, 0.0).

init_rot: tuple[float, float, float]#

Euler angles (in degree) of the root in simulation world frame. Defaults to (0.0, 0.0, 0.0).

shape: ShapeCfg | None#

Mesh, cube or sphere supplying the object’s appearance.

source: UsdSourceCfg | None = None#

USD source asset; mutually exclusive with shape.

uid: str | None#
visible: bool#

Initial visibility restored by reset.

class embodichain.lab.sim.cfg.VolumeDeformableMeshingCfg[source]#

Bases: object

Newton tetrahedralization and render-volume binding parameters.

Attributes:

embedding_impl

DexSim implementation used to bind render vertices to tetrahedra.

simulation_mesh_resolution

Voxel resolution used to build the tetrahedral simulation mesh.

triangle_remesh_resolution

Resolution used to remesh the source surface before tetrahedralization.

triangle_simplify_target

Target face count for the proxy surface; zero disables simplification.

voxel_num_relaxation_iters

Number of tetrahedral-mesh relaxation iterations.

voxel_rel_min_tet_volume

Minimum tetrahedron volume relative to the voxel volume.

voxel_surface_dist_ratio

Maximum surface distance expressed as a voxel-size ratio.

embedding_impl: str#

DexSim implementation used to bind render vertices to tetrahedra.

simulation_mesh_resolution: int#

Voxel resolution used to build the tetrahedral simulation mesh.

triangle_remesh_resolution: int#

Resolution used to remesh the source surface before tetrahedralization.

triangle_simplify_target: int#

Target face count for the proxy surface; zero disables simplification.

voxel_num_relaxation_iters: int#

Number of tetrahedral-mesh relaxation iterations.

voxel_rel_min_tet_volume: float#

Minimum tetrahedron volume relative to the voxel volume.

voxel_surface_dist_ratio: float#

Maximum surface distance expressed as a voxel-size ratio.

class embodichain.lab.sim.cfg.VolumeDeformableObjectCfg[source]#

Bases: DeformableObjectCfg

Configuration for a Newton volume-deformable particle set.

Attributes:

attrs

Newton volume-deformable physical attributes.

deformable_type

Physical topology represented by the asset.

init_local_pose

4x4 transformation matrix of the root in local frame.

init_pos

Position of the root in simulation world frame.

init_rot

Euler angles (in degree) of the root in simulation world frame.

meshing

Tetrahedral simulation-mesh voxelization attributes.

particle_flags

Newton particle flags, provided as one broadcast value or one value per node.

particle_radius

Newton particle radius; None uses the active solver default.

shape

Render and source-mesh configuration.

uid

validate_mesh

Whether Newton reports source-mesh quality validation warnings.

attrs: VolumeDeformablePhysicsCfg#

Newton volume-deformable physical attributes.

deformable_type: Literal['volume']#

Physical topology represented by the asset.

init_local_pose: ndarray | None#

4x4 transformation matrix of the root in local frame. If specified, it will override init_pos and init_rot.

init_pos: tuple[float, float, float]#

Position of the root in simulation world frame. Defaults to (0.0, 0.0, 0.0).

init_rot: tuple[float, float, float]#

Euler angles (in degree) of the root in simulation world frame. Defaults to (0.0, 0.0, 0.0).

meshing: VolumeDeformableMeshingCfg#

Tetrahedral simulation-mesh voxelization attributes.

particle_flags: Union[int, Sequence[int], ndarray, None]#

Newton particle flags, provided as one broadcast value or one value per node.

Clear the Newton ACTIVE bit for nodes that will be driven kinematically. Per-node arrays must follow the resolved simulation-particle order. For a surface deformable, an array-backed MeshCfg preserves this order. A volume deformable is voxelized into a separate tetrahedral simulation mesh, so its particle indices do not correspond to source-mesh vertex indices.

particle_radius: float | None#

Newton particle radius; None uses the active solver default.

shape: MeshCfg#

Render and source-mesh configuration.

uid: str | None#
validate_mesh: bool#

Whether Newton reports source-mesh quality validation warnings.

class embodichain.lab.sim.cfg.VolumeDeformablePhysicsCfg[source]#

Bases: object

Volume density, elasticity, and optional Newton surface constraints.

Attributes:

add_surface_edges

Whether Newton creates surface bending-edge constraints.

density

Volume density [kg/m³].

elasticity_damping

Volumetric damping coefficient forwarded as Newton k_damp.

poissons

Poisson's ratio; values approaching 0.5 resist volume change.

surface_props

Optional surface forces; all coefficients default to zero.

youngs

Young's modulus [Pa]; higher values make the volume stiffer.

add_surface_edges: bool#

Whether Newton creates surface bending-edge constraints.

density: float#

Volume density [kg/m³].

elasticity_damping: float#

Volumetric damping coefficient forwarded as Newton k_damp.

poissons: float#

Poisson’s ratio; values approaching 0.5 resist volume change.

surface_props: SurfaceElementPropertiesCfg#

Optional surface forces; all coefficients default to zero.

youngs: float#

Young’s modulus [Pa]; higher values make the volume stiffer.

class embodichain.lab.sim.cfg.WindowCameraPoseCfg[source]#

Bases: object

Configuration for printing the interactive viewer camera pose.

Attributes:

convert_to_look_at

Whether the hotkey prints a set_look_at call instead of a matrix.

enable_hotkey

Whether to register the p hotkey when the window opens.

convert_to_look_at: bool#

Whether the hotkey prints a set_look_at call instead of a matrix.

enable_hotkey: bool#

Whether to register the p hotkey when the window opens.

class embodichain.lab.sim.cfg.WindowRecordCfg[source]#

Bases: object

Configuration for interactive viewer window recording.

Attributes:

enable_hotkey

Whether to register the r hotkey for viewer recording when the window opens.

fps

Frames per second for viewer recording.

max_memory

Maximum buffered recording memory in MB before auto-stopping capture.

save_path

Optional output path for viewer recordings.

video_prefix

Video file prefix used when no explicit save path is provided.

enable_hotkey: bool#

Whether to register the r hotkey for viewer recording when the window opens.

fps: int#

Frames per second for viewer recording.

max_memory: int#

Maximum buffered recording memory in MB before auto-stopping capture.

save_path: str | None#

Optional output path for viewer recordings. If None, use the default outputs directory.

video_prefix: str#

Video file prefix used when no explicit save path is provided.

embodichain.lab.sim.cfg.get_data_path(data_path_in_config)[source]#

Get the absolute path of the data file.

Resolution order:
  1. If data_path_in_config is an absolute path, return it directly.

  2. If a matching file/directory exists under EMBODICHAIN_DEFAULT_DATA_ROOT (which can be overridden via the EMBODICHAIN_DATA_ROOT environment variable), return that path.

  3. Otherwise, resolve via the registered data-class download mechanism.

Parameters:

data_path_in_config (str) – The dataset name, optionally followed by a subpath in the format "dataset_name/subpath".

Returns:

The absolute path of the data file.

Return type:

str

Parse a link_attrs mapping from YAML/JSON-style dicts.

Return type:

dict[str, LinkPhysicsOverrideCfg]

embodichain.lab.sim.cfg.physics_backend_from_cfg(physics_cfg)[source]#

Infer the physics backend name from a physics configuration instance.

Return type:

Literal['default', 'newton']

embodichain.lab.sim.cfg.physics_cfg_for_backend(backend)[source]#

Return a default physics configuration instance for the given backend.

Return type:

DefaultPhysicsCfg | NewtonPhysicsCfg

embodichain.lab.sim.cfg.validate_physics_cfg(physics_cfg)[source]#

Validate that physics_cfg is a supported backend configuration.

Return type:

None

Common Components#

Materials#

Shapes#

Objects#

Sensors#

Robot Configurations#

Robot Motion#

Atomic Actions#

Scene Services#

Shared Types#

Utility#

Ray-Tracing Denoising and Reconstruction#

Select independent window and offscreen image-processing paths through SimulationManagerCfg.render_cfg.denoising. The public dlss path maps to DLSS Ray Reconstruction and nrd maps to standalone NRD RELAX. DLSS and NRD tuning remain in their dedicated nested configs; output resolution stays owned by the window or camera configuration.

embodichain.lab.sim.DenoisingMode(*args, **kwargs)#

alias of Literal[‘off’, ‘optix’, ‘dlss’, ‘nrd’]

class embodichain.lab.sim.DenoisingCfg[source]#

Select denoising/reconstruction independently by rendering scope.

The public values describe complete image-processing paths. Native NRD method variants remain an implementation detail instead of becoming additional user-facing modes.

Methods:

__init__([window, offscreen])

copy(**kwargs)

Return a new object replacing specified fields with new values.

replace(**kwargs)

Return a new object replacing specified fields with new values.

to_dexsim_modes()

Convert window and offscreen selections to DexSim modes.

to_dict()

Convert an object into dictionary recursively.

validate([prefix])

Check the validity of configclass object.

Attributes:

offscreen

Pipeline used by offscreen camera targets.

window

Pipeline used by the interactive window.

__init__(window=<factory>, offscreen=<factory>)#
copy(**kwargs)#

Return a new object replacing specified fields with new values.

This is especially useful for frozen classes. Example usage:

@configclass(frozen=True)
class C:
    x: int
    y: int

c = C(1, 2)
c1 = c.replace(x=3)
assert c1.x == 3 and c1.y == 2
Parameters:
  • obj (object) – The object to replace.

  • **kwargs – The fields to replace and their new values.

Return type:

object

Returns:

The new object.

offscreen: Literal['off', 'optix', 'dlss', 'nrd']#

Pipeline used by offscreen camera targets.

replace(**kwargs)#

Return a new object replacing specified fields with new values.

This is especially useful for frozen classes. Example usage:

@configclass(frozen=True)
class C:
    x: int
    y: int

c = C(1, 2)
c1 = c.replace(x=3)
assert c1.x == 3 and c1.y == 2
Parameters:
  • obj (object) – The object to replace.

  • **kwargs – The fields to replace and their new values.

Return type:

object

Returns:

The new object.

to_dexsim_modes()[source]#

Convert window and offscreen selections to DexSim modes.

Return type:

tuple[RTRenderMode, RTRenderMode]

Returns:

Window and offscreen modes, in that order.

Raises:

ValueError – If mutable settings no longer contain valid modes.

to_dict()#

Convert an object into dictionary recursively.

Note

Ignores all names starting with “__” (i.e. built-in methods).

Parameters:

obj (object) – An instance of a class to convert.

Raises:

ValueError – When input argument is not an object.

Return type:

dict[str, Any]

Returns:

Converted dictionary mapping.

validate(prefix='')#

Check the validity of configclass object.

This function checks if the object is a valid configclass object. A valid configclass object contains no MISSING entries.

Parameters:
  • obj (object) – The object to check.

  • prefix (str) – The prefix to add to the missing fields. Defaults to ‘’.

Return type:

list[str]

Returns:

A list of missing fields.

Raises:

TypeError – When the object is not a valid configuration object.

window: Literal['off', 'optix', 'dlss', 'nrd']#

Pipeline used by the interactive window.

class embodichain.lab.sim.DLSSCfg[source]#

DLSS settings for the public dlss rendering path.

Pipeline selection belongs to DenoisingCfg. These controls apply when a target selects "dlss".

Attention

DLSS requires a Vulkan render device, a compatible NVIDIA GPU/driver, and a DexSim build with the NGX runtime. Initialization is deferred until rendering; configuration conversion alone cannot verify support. Each enabled offscreen camera needs its own temporal history and Vulkan exchange images, increasing GPU memory use.

Methods:

__init__([dlss_quality, upsample_ratio, ...])

copy(**kwargs)

Return a new object replacing specified fields with new values.

replace(**kwargs)

Return a new object replacing specified fields with new values.

to_dexsim_cfg(window_width, window_height)

Convert settings without changing the window or camera output size.

to_dict()

Convert an object into dictionary recursively.

validate([prefix])

Check the validity of configclass object.

Attributes:

dlss_quality

-1 auto (58%), 0 Ultra Performance (~33%), 1 Performance (50%), 2 Balanced (58%), 3 Quality (~67%), 4 Ultra Quality (77%), 5 DLAA (100%).

exposure_compensation

Positive, finite exposure multiplier used by the RR bridge.

render_height

Internal FastRT/OfflineRT window height; zero derives it from quality.

render_width

Internal FastRT/OfflineRT window width; zero derives it from quality.

target_height

DexSim compatibility field.

target_width

DexSim compatibility field.

tiled_enabled

Evaluate compatible multi-camera targets through one tiled DLSS atlas.

upsample_ratio

Optional window target/render ratio, at least 1.0.

__init__(dlss_quality=<factory>, upsample_ratio=<factory>, render_width=<factory>, render_height=<factory>, target_width=<factory>, target_height=<factory>, tiled_enabled=<factory>, exposure_compensation=<factory>)#
copy(**kwargs)#

Return a new object replacing specified fields with new values.

This is especially useful for frozen classes. Example usage:

@configclass(frozen=True)
class C:
    x: int
    y: int

c = C(1, 2)
c1 = c.replace(x=3)
assert c1.x == 3 and c1.y == 2
Parameters:
  • obj (object) – The object to replace.

  • **kwargs – The fields to replace and their new values.

Return type:

object

Returns:

The new object.

dlss_quality: int#

-1 auto (58%), 0 Ultra Performance (~33%), 1 Performance (50%), 2 Balanced (58%), 3 Quality (~67%), 4 Ultra Quality (77%), 5 DLAA (100%).

Type:

Quality mode and derived internal scale

exposure_compensation: float#

Positive, finite exposure multiplier used by the RR bridge.

render_height: int#

Internal FastRT/OfflineRT window height; zero derives it from quality.

render_width: int#

Internal FastRT/OfflineRT window width; zero derives it from quality.

replace(**kwargs)#

Return a new object replacing specified fields with new values.

This is especially useful for frozen classes. Example usage:

@configclass(frozen=True)
class C:
    x: int
    y: int

c = C(1, 2)
c1 = c.replace(x=3)
assert c1.x == 3 and c1.y == 2
Parameters:
  • obj (object) – The object to replace.

  • **kwargs – The fields to replace and their new values.

Return type:

object

Returns:

The new object.

target_height: int#

DexSim compatibility field. Set the actual window or camera height instead.

target_width: int#

DexSim compatibility field. Set the actual window or camera width instead.

tiled_enabled: bool#

Evaluate compatible multi-camera targets through one tiled DLSS atlas.

to_dexsim_cfg(window_width, window_height)[source]#

Convert settings without changing the window or camera output size.

Parameters:
  • window_width (int) – Window width in pixels.

  • window_height (int) – Window height in pixels.

Return type:

DLSSConfig

Returns:

Populated dexsim.DLSSConfig instance ready to assign to world_config.dlss_config.

Raises:

ValueError – If the configuration contains invalid values.

to_dict()#

Convert an object into dictionary recursively.

Note

Ignores all names starting with “__” (i.e. built-in methods).

Parameters:

obj (object) – An instance of a class to convert.

Raises:

ValueError – When input argument is not an object.

Return type:

dict[str, Any]

Returns:

Converted dictionary mapping.

upsample_ratio: float | None#

Optional window target/render ratio, at least 1.0. None leaves zero render dimensions for DexSim to derive from quality. When specified, computes each unset render dimension from the actual window size. Only FastRT/OfflineRT windows honor these overrides; hybrid and offscreen targets derive their internal resolution from quality.

validate(prefix='')#

Check the validity of configclass object.

This function checks if the object is a valid configclass object. A valid configclass object contains no MISSING entries.

Parameters:
  • obj (object) – The object to check.

  • prefix (str) – The prefix to add to the missing fields. Defaults to ‘’.

Return type:

list[str]

Returns:

A list of missing fields.

Raises:

TypeError – When the object is not a valid configuration object.

class embodichain.lab.sim.NRDCfg[source]#

Algorithm settings shared by targets that use the NRD path.

Pipeline selection belongs to DenoisingCfg. This class only owns NRD tuning values and intentionally does not expose RELAX/REBLUR selection.

The fields are grouped by how directly they affect the current public nrd path (standalone NRD RELAX): history/disocclusion controls and the post-NRD TAA controls are active-path settings. Reblur-specific blur, stabilization, and anti-lag controls are retained for native parity but can be deferred from a smaller public configuration surface because the current EmbodiChain mode does not select NRD REBLUR. Validation is a debug feature, and SH/SG mode only has an effect on RELAX with FastRT or OfflineRT.

Methods:

__init__([max_indirect_bounces, ...])

copy(**kwargs)

Return a new object replacing specified fields with new values.

replace(**kwargs)

Return a new object replacing specified fields with new values.

to_dexsim_cfg()

Convert the settings to DexSim's native NRD configuration.

to_dict()

Convert an object into dictionary recursively.

validate([prefix])

Check the validity of configclass object.

Attributes:

anti_firefly_enabled

Suppress isolated bright history samples; may darken sparse highlights.

antilag_luminance_sensitivity

REBLUR Anti-Lag luminance sensitivity; inactive for standalone RELAX.

antilag_luminance_sigma_scale

REBLUR Anti-Lag luminance sigma scale; inactive for standalone RELAX.

denoising_range

Maximum world-space range considered by NRD's denoising passes.

diffuse_prepass_blur_radius

Diffuse prepass blur radius; larger values reduce noise and soften detail.

disocclusion_threshold

Base view-depth threshold used to reject invalid temporal history.

disocclusion_threshold_alternate

Alternate depth threshold for pixels selecting the mixed threshold.

disocclusion_threshold_mix_enabled

Use the per-pixel threshold-mix input for thin or transparent geometry.

history_confidence_enabled

Generate paired-history confidence from matched probe renders.

history_confidence_probe_stride

Full-resolution spacing of paired-history probe rays; native range is 1–8.

history_confidence_sensitivity

Sensitivity used when converting history gradients into confidence.

history_confidence_sigma_scale

Sigma scale used when converting history gradients into confidence.

history_fix_frame_num

Number of frames used to repair history after a disocclusion.

max_accumulated_frame_num

Maximum slow temporal history length for RELAX and REBLUR.

max_blur_radius

Maximum adaptive blur radius for REBLUR; inactive for standalone RELAX.

max_fast_accumulated_frame_num

Maximum fast temporal history length used while a pixel is changing.

max_indirect_bounces

Number of indirect continuation rays after the primary surface.

max_stabilized_frame_num

Maximum stabilized history for REBLUR; inactive for standalone RELAX.

min_blur_radius

Minimum adaptive blur radius for REBLUR; inactive for standalone RELAX.

sh_mode_enabled

Enable RELAX directional SH/SG signals on FastRT and OfflineRT paths.

specular_prepass_blur_radius

Specular prepass blur radius; mainly an advanced REBLUR tuning knob.

taa_depth_rejection_enabled

Reject post-NRD history when reprojected view depth does not match.

taa_min_current_weight

Minimum current-frame weight in the post-NRD temporal resolve.

taa_sigma_scale

Sigma scale used by the post-NRD temporal resolve.

taa_tone_mapping_enabled

Apply NRD's optional tone mapping before the final EmbodiChain output.

validation_enabled

Enable NRD validation diagnostics; intended for development builds.

__init__(max_indirect_bounces=<factory>, denoising_range=<factory>, disocclusion_threshold=<factory>, disocclusion_threshold_alternate=<factory>, disocclusion_threshold_mix_enabled=<factory>, history_confidence_enabled=<factory>, history_confidence_probe_stride=<factory>, history_confidence_sigma_scale=<factory>, history_confidence_sensitivity=<factory>, max_accumulated_frame_num=<factory>, max_fast_accumulated_frame_num=<factory>, history_fix_frame_num=<factory>, diffuse_prepass_blur_radius=<factory>, specular_prepass_blur_radius=<factory>, anti_firefly_enabled=<factory>, sh_mode_enabled=<factory>, validation_enabled=<factory>, max_stabilized_frame_num=<factory>, min_blur_radius=<factory>, max_blur_radius=<factory>, antilag_luminance_sigma_scale=<factory>, antilag_luminance_sensitivity=<factory>, taa_min_current_weight=<factory>, taa_sigma_scale=<factory>, taa_depth_rejection_enabled=<factory>, taa_tone_mapping_enabled=<factory>)#
anti_firefly_enabled: bool#

Suppress isolated bright history samples; may darken sparse highlights.

antilag_luminance_sensitivity: float#

REBLUR Anti-Lag luminance sensitivity; inactive for standalone RELAX.

antilag_luminance_sigma_scale: float#

REBLUR Anti-Lag luminance sigma scale; inactive for standalone RELAX.

copy(**kwargs)#

Return a new object replacing specified fields with new values.

This is especially useful for frozen classes. Example usage:

@configclass(frozen=True)
class C:
    x: int
    y: int

c = C(1, 2)
c1 = c.replace(x=3)
assert c1.x == 3 and c1.y == 2
Parameters:
  • obj (object) – The object to replace.

  • **kwargs – The fields to replace and their new values.

Return type:

object

Returns:

The new object.

denoising_range: float#

Maximum world-space range considered by NRD’s denoising passes.

diffuse_prepass_blur_radius: float#

Diffuse prepass blur radius; larger values reduce noise and soften detail.

disocclusion_threshold: float#

Base view-depth threshold used to reject invalid temporal history.

disocclusion_threshold_alternate: float#

Alternate depth threshold for pixels selecting the mixed threshold.

disocclusion_threshold_mix_enabled: bool#

Use the per-pixel threshold-mix input for thin or transparent geometry.

history_confidence_enabled: bool#

Generate paired-history confidence from matched probe renders.

history_confidence_probe_stride: int#

Full-resolution spacing of paired-history probe rays; native range is 1–8.

history_confidence_sensitivity: float#

Sensitivity used when converting history gradients into confidence.

history_confidence_sigma_scale: float#

Sigma scale used when converting history gradients into confidence.

history_fix_frame_num: int#

Number of frames used to repair history after a disocclusion.

max_accumulated_frame_num: int#

Maximum slow temporal history length for RELAX and REBLUR.

max_blur_radius: float#

Maximum adaptive blur radius for REBLUR; inactive for standalone RELAX.

max_fast_accumulated_frame_num: int#

Maximum fast temporal history length used while a pixel is changing.

max_indirect_bounces: int#

Number of indirect continuation rays after the primary surface.

Higher values increase lighting detail and ray cost; NRD’s real-time default is one continuation bounce.

max_stabilized_frame_num: int#

Maximum stabilized history for REBLUR; inactive for standalone RELAX.

min_blur_radius: float#

Minimum adaptive blur radius for REBLUR; inactive for standalone RELAX.

replace(**kwargs)#

Return a new object replacing specified fields with new values.

This is especially useful for frozen classes. Example usage:

@configclass(frozen=True)
class C:
    x: int
    y: int

c = C(1, 2)
c1 = c.replace(x=3)
assert c1.x == 3 and c1.y == 2
Parameters:
  • obj (object) – The object to replace.

  • **kwargs – The fields to replace and their new values.

Return type:

object

Returns:

The new object.

sh_mode_enabled: bool#

Enable RELAX directional SH/SG signals on FastRT and OfflineRT paths.

specular_prepass_blur_radius: float#

Specular prepass blur radius; mainly an advanced REBLUR tuning knob.

taa_depth_rejection_enabled: bool#

Reject post-NRD history when reprojected view depth does not match.

taa_min_current_weight: float#

Minimum current-frame weight in the post-NRD temporal resolve.

taa_sigma_scale: float#

Sigma scale used by the post-NRD temporal resolve.

taa_tone_mapping_enabled: bool#

Apply NRD’s optional tone mapping before the final EmbodiChain output.

to_dexsim_cfg()[source]#

Convert the settings to DexSim’s native NRD configuration.

Return type:

NRDConfig

Returns:

Populated dexsim.NRDConfig.

Raises:

ValueError – If mutable settings no longer contain valid values.

to_dict()#

Convert an object into dictionary recursively.

Note

Ignores all names starting with “__” (i.e. built-in methods).

Parameters:

obj (object) – An instance of a class to convert.

Raises:

ValueError – When input argument is not an object.

Return type:

dict[str, Any]

Returns:

Converted dictionary mapping.

validate(prefix='')#

Check the validity of configclass object.

This function checks if the object is a valid configclass object. A valid configclass object contains no MISSING entries.

Parameters:
  • obj (object) – The object to check.

  • prefix (str) – The prefix to add to the missing fields. Defaults to ‘’.

Return type:

list[str]

Returns:

A list of missing fields.

Raises:

TypeError – When the object is not a valid configuration object.

validation_enabled: bool#

Enable NRD validation diagnostics; intended for development builds.