Find your next open-source project

Search by name, purpose, or keyword — or paste a GitHub repository URL

meshy-dev/ThreeRT

Media & Design

A hardware ray-traced real-time path tracer wrapped in a three.js-style scene API for building rendered games and scenes.

250
16
TypeScript
MIT
4 days old

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.ts populates a shared asset store and fetches anything missing. Third-party scenes and city data keep their own licenses, documented in docs/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.

You might also like

  1. mrdoob/three.jsGeneral-purpose 3D rendering library for browser-based graphics, from product viewers to generative art, without a game engine.JavaScript116,873
  2. Leonxlnx/athenaionA procedurally generated ancient Greek 3D world in three.js, useful as a reference for code-only scene building and offline rendering.JavaScript296