Upscales a path traced image to the drawing buffer size with FSR. Pass one to "WebGPUPathTracer.setUpscaler".
The "Upscaler" class is passed in rather than imported so it does not become a dependency.
import { Upscaler } from '@pmndrs/upscaler';
pathTracer.setUpscaler( new FSRUpscaler( { Upscaler } ) );import { ACESFilmicToneMapping, Color, EquirectangularReflectionMapping } from 'three/webgpu';
import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js';
import { DRACOLoader } from 'three/addons/loaders/DRACOLoader.js';
import { HDRLoader } from 'three/addons/loaders/HDRLoader.js';
import { createFloor } from './floor.js';
import { Upscaler } from '@pmndrs/upscaler';
import { WebGPUPathTracer, FSRUpscaler } from 'three-gpu-pathtracer/webgpu';
// scene, camera and renderer are initialized here
const URL = 'https://raw.githubusercontent.com/gkjohnson/3d-demo-data/main/models/nasa-m2020/Perseverance.glb';
const ENV_URL = 'https://raw.githubusercontent.com/gkjohnson/3d-demo-data/main/hdri/chinese_garden_1k.hdr';
const { scene: model } = await new GLTFLoader()
.setDRACOLoader( new DRACOLoader() )
.loadAsync( URL );
const environment = await new HDRLoader().loadAsync( ENV_URL );
environment.mapping = EquirectangularReflectionMapping;
scene.environment = environment;
scene.background = new Color( 0xeeeeee );
renderer.toneMapping = ACESFilmicToneMapping;
model.position.z = - 0.32;
scene.add( model, createFloor() );
camera.position.set( - 3.2, 2.2, 4.6 );
controls.target.set( 0, 0.9, 0 );
controls.update();
const pathTracer = new WebGPUPathTracer( renderer );
// mobile GPUs are slower: fewer paths per frame keep frames fast, and fewer pixels converge sooner
if ( matchMedia( '(pointer: coarse)' ).matches ) {
pathTracer.frameBudget = 50000;
renderer.setPixelRatio( window.devicePixelRatio / 2 );
}
pathTracer.maxSamples = 32;
pathTracer.renderScale = 0.5;
pathTracer.setUpscaler( new FSRUpscaler( { Upscaler } ) );
pathTracer.setScene( scene, camera );
controls.addEventListener( 'change', () => pathTracer.updateCamera() );
window.addEventListener( 'resize', () => pathTracer.updateCamera() );
renderer.setAnimationLoop( () => pathTracer.renderSample() );On this page
Methods
new FSRUpscaler(
options: {
// The `Upscaler` class from `@pmndrs/upscaler`.
Upscaler: function,
sharpness?: number
}
)Every field below can also be assigned after construction.
init( renderer: WebGPURenderer ): voidupscale( source: Texture, camera: Camera ): TextureUpscales a texture to the renderer's drawing buffer size.