meshy-dev/ThreeRT
Media & DesignA hardware ray-traced real-time path tracer wrapped in a three.js-style scene API for building rendered games and scenes.
What it is
ThreeRT is a real-time path tracer built on Rust and wgpu, exposed through a scene API modeled on three.js. Instead of shadow maps, light probes or baked lightmaps, every light in the scene is traced on the GPU's ray-tracing hardware, with a software BVH fallback where hardware ray queries are unavailable (L42-L49). The goal is that a scene file written against three.js conventions can run inside the ThreeRT runtime and also as plain three.js in a browser.
The repository contains the engine itself, scene and gameplay packages, and a catalog of reference scenes and playable games. The renderer/ directory holds the Rust + wgpu path tracer, denoiser, post-processing and an embedded QuickJS runtime; packages/ holds @threert/scene, @threert/gameplay and @threert/voxel (L163-L176).
The target audience is graphics and game developers who want physically based lighting and real-time frame rates without building a renderer from scratch, and who are comfortable with TypeScript scene code and a Rust build.
Getting started
The documented entry points differ for playing versus building from source:
Play and create games. Download the macOS (14+, Apple silicon) or iOS/iPadOS 17+ client from the download page, open an example from the app library or from threert.app, then create a project with the CLI bundled in the Mac app:
threert create my-game
cd my-game
threert dev
threert dev bundles on save, serves clients on the local network and prints a QR code for a phone. The same address in a browser renders the game as three.js. The full walk-through lives in the docs .
Use the packages directly. Install the npm packages for types, tests or a custom build pipeline:
npm install @threert/scene @threert/gameplay
A minimal scene imports Scene, PerspectiveCamera, Mesh, lights and SkyAtmosphere from @threert/scene, builds the scene in an exported build() function and returns { scene, camera }. Light values are physical: the example uses a 90,000 lux directional sun, and emissive surfaces act as light sources (L50-L82). The complete example is scenes/sun-room.ts.
Build the engine from source. You need Rust, Node 24 and Bun (L130-L150):
npm install && bun scripts/setup.ts
node tools/build-scenes.ts
bun renderer/build.ts
Then run a game in a window or render a scene to an image:
renderer/target/release/threert-render play out/bundles/light-room.js
renderer/target/release/threert-render render out/bundles/cornell-box.js -o out/cornell.png --spp 32
In the viewport, drag to orbit, right-drag to pan, use WASD/QE to fly, R to reset and P to snapshot (L134-L142).
Constraints
- Platforms. The distributed clients are macOS 14+ on Apple silicon and iOS 17+. The clients are free but closed source; the engine and packages in the repository are MIT licensed (L195-L208).
- Assets are not in the repository.
bun scripts/setup.tspopulates a shared asset store and fetches anything missing. Third-party scenes and city data keep their own licenses, documented indocs/ASSETS.md. - Build requirements. Building from source needs Rust, Node 24 and Bun. Hardware ray queries are used where the GPU supports Metal or Vulkan; elsewhere the renderer falls back to a software BVH (L130-L150).
- Not affiliated with three.js. ThreeRT reuses the style of the three.js API but is an independent project (L195-L208).
HotRepo's take
The project appeared on HotRepo's new-project list on 2026-11-13, with 113 stars and 13 stars gained in roughly an hour and a half of observed growth. That is a small early sample: it shows an initial burst of attention, not a sustained trend. The more substantive observation is the engineering scope: a Rust + wgpu path tracer with denoising, a QuickJS runtime, gameplay and voxel packages, and a reference catalog including Bistro, Beeple's Zero-Day and PLATEAU Tokyo data make this much more than a demo repository. The README also reports a comparison against three.js, including a Bistro frame cost of 15.5 ms (60 fps) at ΔE 3.4 versus three.js WebGPU at 34.7 ms and ΔE 10.1 against an offline reference (L83-L99); these are the authors' measurements and should be read with the method in docs/COMPARE.md.
Written by AI from the project's README, updated . The project's own docs are the source of truth.