markaren/threepp
A cross-platform C++20 3D library with Python bindings and the high-level API of three.js.
What it solves
threepp is a cross-platform C++20 3D library that brings the high-level, accessible API of three.js to the C++ ecosystem. It provides a unified scene graph for developers who need the flexibility of a web-style 3D API but require the performance and hardware access of C++, including advanced rendering backends and integrated physics and sensor simulation for robotics research.
How it works
The library uses a single scene graph that can be rendered via two distinct backends: a portable OpenGL renderer and a deferred Vulkan renderer. The Vulkan backend enables high-end features like ray-traced shadows, reflections, and global illumination. For simulation, it integrates PhysX for rigid body and articulation simulation, and NVIDIA Warp for soft/granular ground simulation. It also provides Python bindings, allowing users to create 3D scenes and run simulations in Python while maintaining C++ performance.
Who it’s for
It is primarily designed for researchers, students, and prototypers in robotics and AI, specifically those building digital twins, synthetic data generation for perception sensors (lidar, sonar, event cameras), and RL-trained agents in simulated environments.
Highlights
- three.js Parity: Implements a comprehensive port of the three.js API, including meshes, lights, cameras, and loaders (glTF, OBJ, STL, etc.).
- Advanced Rendering: A Vulkan backend featuring ray-tracing, DLSS/FSR 3.1 upscaling, and volumetric fog.
- Robotics Simulation: Integrated PhysX for robot articulations (URDF/xacro) and simulated sensors with ground-truth labels for synthetic data.
- Python Integration: Full Python bindings with a GPU-vectorized PPO stack for reinforcement learning.
- Hardware-in-the-Loop: Support for lock-step flight simulation with ArduPilot.
- Gaussian Splatting: Support for rendering
.plyand SOG scans with the ability to bake scans into surfaces for physics.
Related
- Project
- Project
- Project
- Project
- Project