three-gpu-pathtracer
Path tracing project using three-mesh-bvh and WebGPU compute shaders to accelerate high quality, physically based rendering on the GPU.
Examples
Setup
Basic Primitive Geometry Example
Beauty Demos
Interior Scene w/ Equirect Rendering
Features
Test Scenes
Model Viewer Fidelity Scene Comparisons
Tools
Running examples locally
To run and modify the examples locally, make sure you have Node and NPM installed. Check the supported versions in the test configuration.
- To install dependencies, run
npm install - To start the demos run
npm start - Visit
http://localhost:5173/
Use
Basic Renderer
import * as THREE from 'three/webgpu';
import { WebGPUPathTracer } from 'three-gpu-pathtracer/webgpu';
// init scene, camera, controls, etc
renderer = new THREE.WebGPURenderer();
renderer.toneMapping = THREE.ACESFilmicToneMapping;
await renderer.init();
pathTracer = new WebGPUPathTracer( renderer );
pathTracer.setScene( scene, camera );
animate();
function animate() {
requestAnimationFrame( animate );
pathTracer.renderSample();
}
Blurred Environment Map
Using a pre blurred environment map can help improve frame convergence time at the cost of sharp environment reflections. If performance is a concern then multiple importance sampling can be disabled and a blurred environment map used.
import { BlurredEnvMapGenerator } from 'three-gpu-pathtracer/webgpu';
// ...
const envMap = await new HDRLoader().loadAsync( envMapUrl );
const generator = new BlurredEnvMapGenerator( renderer );
const blurredEnvMap = await generator.generate( envMap, 0.35 );
generator.dispose();
scene.environment = blurredEnvMap;
// render!
API
See the docs site for the WebGPU API documentation.
The same documentation is also available as markdown in API.md.
Gotchas
- The project requires WebGPU.
- SpotLights, DirectionalLights, and PointLights are only supported with MIS.
- Only MeshStandardMaterial and MeshPhysicalMaterial are supported.
- Emissive materials are supported but do not take advantage of MIS.
- "Upscaling" does not currently work with a transparent background.
Screenshots
Resources
Raytracing in One Weekend Book