Source code for isaaclab_newton.physics.vbd_manager
# Copyright (c) 2022-2026, The Isaac Lab Project Developers (https://github.com/isaac-sim/IsaacLab/blob/main/CONTRIBUTORS.md).
# All rights reserved.
#
# SPDX-License-Identifier: BSD-3-Clause
"""VBD Newton manager."""
from __future__ import annotations
from newton import Model, ModelBuilder
from newton.solvers import SolverVBD
from .newton_manager import NewtonManager
from .vbd_manager_cfg import VBDSolverCfg
[docs]
class NewtonVBDManager(NewtonManager):
"""Newton manager specialization for the VBD solver."""
@classmethod
def _prepare_builder_for_finalize(cls, builder: ModelBuilder) -> None:
"""Color the completed builder before allocating the model."""
builder.color(balance_colors=False)
@classmethod
def _create_solver(cls, model: Model, solver_cfg: VBDSolverCfg) -> SolverVBD:
"""Construct the configured VBD solver."""
return SolverVBD(model, **cls._filter_solver_kwargs(SolverVBD, solver_cfg))
@classmethod
def _build_solver(cls, model: Model, solver_cfg: VBDSolverCfg) -> None:
"""Construct VBD and configure its base-manager state."""
NewtonManager._solver = cls._create_solver(model, solver_cfg)
NewtonManager._use_single_state = False
NewtonManager._needs_collision_pipeline = True
NewtonManager._supports_rigid_body_force_input = not solver_cfg.integrate_with_external_rigid_solver
@classmethod
def _simulate_physics_only(cls) -> None:
"""Rebuild the VBD particle BVH before stepping physics."""
if cls.backend.model.particle_count > 0 and hasattr(cls._solver, "rebuild_bvh"):
cls._solver.rebuild_bvh(cls.backend.state_0)
super()._simulate_physics_only()