Solvers#

Solvers are the core physics computation engines in Genesis. Each solver implements a specific physics simulation method optimized for different types of materials and phenomena.

Available Solvers#

Solver

Method

Use Cases

RigidSolver

Rigid body dynamics

Robots, articulated bodies, rigid objects

MPMSolver

Material Point Method

Deformables, granular, viscous materials

FEMSolver

Finite Element Method

Elastic/plastic deformable solids

PBDSolver

Position Based Dynamics

Cloth, soft bodies, particles

SPHSolver

Smoothed Particle Hydrodynamics

Fluids, liquids

SFSolver

String/Fiber dynamics

Ropes, cables, hair

ToolSolver

Kinematic constraints

Tools, end-effectors

Solver Base Class#

All solvers inherit from the Solver base class which defines the interface:

class Solver:
    def build(self):
        """Initialize solver resources."""
        pass

    def reset(self, envs_idx=None):
        """Reset solver state."""
        pass

    def step(self):
        """Advance physics by one substep."""
        pass

Solver Components#

Multi-Solver Simulation#

Genesis supports combining multiple solvers in a single scene:

import genesis as gs

gs.init()
scene = gs.Scene()

# Rigid robot
robot = scene.add_entity(gs.morphs.URDF(file="robot.urdf"))

# Soft object (MPM)
soft = scene.add_entity(
    gs.morphs.Box(pos=(0.5, 0, 0.5)),
    material=gs.materials.MPM.Elastic(),
)

# Cloth (PBD)
cloth = scene.add_entity(
    gs.morphs.Mesh(file="cloth.obj"),
    material=gs.materials.PBD.Cloth(),
)

scene.build()

# All solvers step together
for i in range(1000):
    scene.step()

GPU Acceleration#

All solvers leverage GPU acceleration through Taichi:

  • Parallel computation across particles/elements

  • Efficient memory management

  • Batched simulation for multiple environments

See Also#