Creative Coding

MuTracer Puts an OpenPBR Path Tracer in the Browser

WebGPU first with a WebGL 2 fallback, a two-level BVH built across workers, and 4.6 million triangles denoised in about 12 seconds.

Browser-based path tracers are not new. Browser-based path tracers that implement OpenPBR 1.1 surfaces, build a two-level BVH across parallel workers, and run Intel Open Image Denoise on WebGPU are a different proposition.

MuTracer describes itself in one line: “WebGPU physically based path tracer for the web.” It is MIT-licensed, sits at 103 stars and 12 forks, and was created on 8 October 2026 — eleven days ago. It tagged v0.1.3 earlier today.

The numbers it publishes

The README does something most renderer projects avoid: it states a measured scene rather than claiming “real time”. Measured on an Apple M4 Max in Chrome with WebGPU, rendering the LEGO Technic Bugatti Chiron scene at 6 bounces:

MetricResult
Rendered triangles4.6 M (2.5 M unique, 341 geometries in 560 meshes)
Materials35
Download12.8 MB .glb
BVH build, 1 thread1.7 s built-in / 1.0 s TinyBVH WebAssembly
BVH build, 4 workers (default)0.50 s built-in / 0.28 s TinyBVH WebAssembly
1920 × 1080, 64 spp12.1 s path tracing, 12.4 s with OIDN denoising

Two things stand out. The worker-parallel BVH build is 3.4× faster than single-threaded on the built-in builder, and the TinyBVH WebAssembly path is faster again at 0.28 s — a quarter-second of preprocessing for a 4.6-million-triangle scene. And denoising costs 0.3 seconds on top of a 12.1-second render, which is close to free.

These are the project’s own figures on one machine, not independent benchmarks.

What the material model covers

OpenPBR 1.1 support is the headline, and the listed surface features are the ones that usually get dropped first in a web renderer:

  • metals
  • coat (clear-coat layering)
  • thin-film interference
  • dispersive transmission — wavelength-dependent refraction, so glass can actually split light
  • subsurface scattering
  • height-field displacement

Lighting covers rect, sphere, spot with IES profiles, directional, and HDR environment lights. IES profile support in particular signals an intended use beyond product shots: those are real luminaire photometric files, which matters if you are previsualising an installation or a stage.

Scale and sampling

The acceleration structure is a two-level BVH with parallel worker builds, designed for scenes in the millions of triangles. The practical consequence is stated directly: moving instances only refit the top-level structure, so animating objects does not force a full rebuild.

Sampling uses Sobol and blue-noise sequences. Denoising is either Intel Open Image Denoise on WebGPU or a joint non-local means filter that works on both WebGPU and WebGL 2.

That fallback matters. MuTracer is WebGPU-first but runs on WebGL 2, which means it degrades rather than refusing to load.

The Three.js route in

For most people the interesting part will be THREESync, which keeps a Three.js scene synchronised with MuTracer and handles materials, lights, instancing, skinning and morph targets.

Skinning and morph targets are the unusual inclusion. It means an existing animated Three.js scene — a rigged character, a blend-shape face — can be handed to a path tracer without re-authoring the asset, which is the step that normally kills the idea.

Output options include tone mapping, bloom, depth of field, shadow catchers and transparent backgrounds, which together describe the compositing workflow the project expects: render an object on transparency with a shadow catcher, place it over something else.

What to expect from a 0.x

The project is explicit that it is a 0.x library whose APIs may change between minor releases, and the pace bears that out — v0.1.0 through v0.1.3 inside eleven days, with commits today covering a glass shader ball sample, denoising weight fixes for shadow catchers, and a GPU-drain fix before scratch reuse.

Bundled third-party code and data carry MIT, Apache-2.0 and CC0 licences, listed in THIRD_PARTY_NOTICES.md. There is one open issue.

If you want to see it before cloning it, the project hosts a live viewer at mutracer.meimu-studio.com.

Sources