Skip to content

NovaPhy

A C++20/Python 3D physics engine for embodied intelligence.

NovaPhy is designed for robotics, reinforcement learning, and sim-to-real transfer. It provides a unified simulation framework with multiple solver backends, all accessible through a clean Python API.

Key Features

  • Rigid Body Dynamics

    Sequential Impulse solver (PGS) with warm starting, Coulomb friction, and Baumgarte stabilization.

  • Articulated Bodies

    Featherstone algorithms — FK, RNEA inverse dynamics, CRBA mass matrix, Cholesky forward dynamics.

  • Fluid Simulation

    Position Based Fluids (PBF) with SPH kernels, spatial hash grid, and Akinci rigid-fluid coupling.

  • IPC Contact

    GPU-accelerated Incremental Potential Contact via libuipc with guaranteed penetration-free contact.

  • VBD / AVBD

    Vertex Block Descent with primal-dual contacts, joints, and springs (SIGGRAPH 2025).

  • Python API

    Full pybind11 bindings with Polyscope visualization. pip-installable via scikit-build-core.

Quick Example

import numpy as np
import novaphy

builder = novaphy.ModelBuilder()
builder.add_ground_plane(y=0.0)

body = novaphy.RigidBody.from_box(1.0, np.array([0.5, 0.5, 0.5]))
idx = builder.add_body(body, novaphy.Transform.from_translation(np.array([0, 5, 0])))
builder.add_shape(novaphy.CollisionShape.make_box(np.array([0.5, 0.5, 0.5]), idx))

world = novaphy.World(builder.build())
for _ in range(1000):
    world.step(1/120)

Solvers

All solvers are being aligned to a unified Newton-style contract:

Solver Description Status
SolverSemiImplicit Free-body PGS (Sequential Impulse) Stable
SolverFeatherstone Articulated body (FK → RNEA → CRBA → Cholesky) Stable
SolverXPBD XPBD maximal-coordinate constraints Stable
VBDWorld AVBD primal-dual (CPU / optional CUDA) Stable
IPCWorld IPC via libuipc (CUDA >= 12.4) Optional
PBFSolver Position Based Fluids + Akinci coupling Stable

Getting Started

Installation Quick Start