threepp
threepp is an MIT licensed C++20 3D library that carries the three.js API and renders Gaussian splats on OpenGL and Vulkan.
Location
Size
Total raised
Hiring?
Platform
C++ library. Builds on Windows, Linux, macOS, MinGW and Emscripten. Python wheels on PyPI
GPU
An OpenGL 3.3 capable GPU for the portable backend. The Vulkan backend is ray query based and needs a GPU exposing the KHR ray tracing extensions, which rules out macOS because MoltenVK implements none of them
Pricing
Free and open source
License
MIT
Best for
Native C++ applications that need a three.js style scene graph with Gaussian splats
Updated
July 2026
threepp is a cross platform C++20 3D library that ports the high level API of three.js into native code under the MIT licence. Its scene graph, materials, cameras, controls and loaders track three.js around revision r129 with changes from later revisions in some areas, and its OpenGL 3.3 backend is a mechanical port of the WebGL renderer. A second backend is a deferred Vulkan renderer whose shading path is ray query based, tracing ambient occlusion, global illumination, reflections and shadows with no raster fallback, denoised and with temporal antialiasing.
Gaussian splat support is a first class scene object called SplatCloud and it renders on both backends. Two loaders read scans, the original INRIA .ply and PlayCanvas SOG, and the Vulkan path adds dynamic level of detail on top of a compute tile rasterizer. The OpenGL path draws the same cloud as an instanced mesh with a CPU side depth sort, which makes it the portable option and also the slower one.
The splat integration deliberately stops short of full participation in the traced scene. Nothing places a splat into an acceleration structure, so a cloud casts no shadows, contributes nothing to global illumination and is invisible to the ray traced sensors, and neither a SplatCloud nor a particle field is serialised into a scene document. Two opt in routes exist around that. Each cloud bakes a small density and radiance volume that the water, glass and glossy reflection legs march as a stand in for the cloud, primary view only, and splats::bakeSurface fuses the depth AOV into a triangle mesh that PhysX can collide against and that the simulated sensors can perceive behind a setSensorOnlySurfaces flag that is off by default.
The project states plainly that it exists for research, prototyping and education rather than as a production hardened engine, and that API and behavioural stability are not prioritised. The three.js port is the mature half and barely moves between releases. The simulation layer is where the work goes and where the breakage lives, and the Vulkan backend evolves fastest of all. Builds are tested on Windows, Linux, macOS, MinGW and with Emscripten, where the OpenGL path becomes the WebGL2 target.
Around the renderer sits that simulation layer. PhysX reduced coordinate articulations load straight from a URDF or a xacro file in one call, simulated LIDAR, depth, colour and event cameras read ground truth out of the Vulkan G buffer as float32 metric depth, instance ids, semantic classes, normals and motion, and a scene editor and a headless player save documents as ordinary three.js Object JSON so an authored scene runs with no editor present. Python bindings ship on PyPI as prebuilt wheels for CPython 3.10 through 3.14 on Windows x64 and manylinux x86_64, carrying the OpenGL renderer, the Vulkan deferred renderer with its AOVs, and CPU PhysX. macOS has no wheel and builds from source with OpenGL only.
Frequently Asked Questions
Does threepp render Gaussian splats?
threepp renders Gaussian splats through a SplatCloud object on both of its backends, reading INRIA .ply and PlayCanvas SOG scans, with a compute tile rasterizer and dynamic level of detail on the Vulkan path.
What licence is threepp under?
threepp is MIT licensed. It ports the API and shaders of three.js, which is also MIT, and bundles or fetches third party components indexed in the repository's THIRD_PARTY file, a few of which are not MIT.
Does threepp work on macOS?
threepp builds and runs on macOS with its OpenGL renderer. The Vulkan backend does not run there, because its shading path is ray query based and MoltenVK implements none of the KHR ray tracing extensions.
Can threepp splat clouds cast shadows or be seen by simulated sensors?
threepp splat clouds are a backdrop by default, absent from the acceleration structure and therefore invisible to shadows, global illumination and the ray traced sensors. splats::bakeSurface fuses the splat depth AOV into a triangle mesh that PhysX can collide with and that sensors can perceive behind an opt in flag.
Is threepp available from Python?
threepp installs from PyPI with pip install threepp, shipping prebuilt wheels for CPython 3.10 through 3.14 on Windows x64 and manylinux x86_64 that carry the OpenGL renderer, the Vulkan G buffer AOVs and CPU PhysX.
Alternatives
Recent Headlines
Olli Huttunen Releases Point Cloud Merger for Blender
luma.gl 9.4.0 Beta Adds a GPU Gaussian Splat Renderer
Xangle Adds Splat Scene Center Controls and Render Cancellation to Camera Server v26.08.20
AirVis Studio 1.0.4 Brings Local 3DGS Training to Windows
Arrival.Space Splat.js Trains Gaussian Splats in Browser
PointCloudSnapPro Adds Gaussian Splats to Maya 2026
Foundry Ships Nuke 17.1v1 With Dynamic Gaussian Splat and Relighting Support
NavVis Adds Gaussian Splats to IVION 12
LocalMesh Opens Its Beta, Turning One Photo Into a Gaussian Splat and a Textured Mesh on a Local GPU
Streamed Reality Generates Gaussian Splats Inside the Unity Editor


