Skip to content

Commit

Permalink
Add toneMapping extended mode to Particles sample
Browse files Browse the repository at this point in the history
  • Loading branch information
beaufortfrancois committed Jul 11, 2024
1 parent 464b104 commit 94bef95
Show file tree
Hide file tree
Showing 4 changed files with 29 additions and 12 deletions.
8 changes: 4 additions & 4 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@
"@types/showdown": "^2.0.6",
"@types/stats.js": "^0.17.3",
"@typescript-eslint/eslint-plugin": "^7.13.0",
"@webgpu/types": "^0.1.42",
"@webgpu/types": "^0.1.44",
"chokidar": "^3.6.0",
"eslint": "^8.57.0",
"eslint-config-prettier": "^8.10.0",
Expand Down
27 changes: 20 additions & 7 deletions sample/particles/main.ts
Original file line number Diff line number Diff line change
Expand Up @@ -24,13 +24,16 @@ const context = canvas.getContext('webgpu') as GPUCanvasContext;
const devicePixelRatio = window.devicePixelRatio;
canvas.width = canvas.clientWidth * devicePixelRatio;
canvas.height = canvas.clientHeight * devicePixelRatio;
const presentationFormat = navigator.gpu.getPreferredCanvasFormat();

context.configure({
device,
format: presentationFormat,
alphaMode: 'premultiplied',
});
const presentationFormat = 'rgba16float';

function configureContext() {
context.configure({
device,
format: presentationFormat,
toneMapping: { mode: simulationParams.toneMappingMode },
alphaMode: 'premultiplied',
});
}

const particlesBuffer = device.createBuffer({
size: numParticles * particleInstanceByteSize,
Expand Down Expand Up @@ -315,10 +318,13 @@ let numMipLevels = 1;
const simulationParams = {
simulate: true,
deltaTime: 0.04,
toneMappingMode: 'standard',
brightnessFactor: 1.0,
};

const simulationUBOBufferSize =
1 * 4 + // deltaTime
1 * 4 + // brightnessFactor
3 * 4 + // padding
4 * 4 + // seed
0;
Expand All @@ -330,6 +336,11 @@ const simulationUBOBuffer = device.createBuffer({
const gui = new GUI();
gui.add(simulationParams, 'simulate');
gui.add(simulationParams, 'deltaTime');
const hdrFolder = gui.addFolder('HDR Settings');
hdrFolder
.add(simulationParams, 'toneMappingMode', ['standard', 'extended'])
.onChange(configureContext);
hdrFolder.add(simulationParams, 'brightnessFactor', 0, 4, 0.1);

const computePipeline = device.createComputePipeline({
layout: 'auto',
Expand Down Expand Up @@ -375,6 +386,7 @@ function frame() {
0,
new Float32Array([
simulationParams.simulate ? simulationParams.deltaTime : 0.0,
simulationParams.brightnessFactor,
0.0,
0.0,
0.0, // padding
Expand Down Expand Up @@ -436,4 +448,5 @@ function frame() {

requestAnimationFrame(frame);
}
configureContext();
requestAnimationFrame(frame);
4 changes: 4 additions & 0 deletions sample/particles/particle.wgsl
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,7 @@ fn fs_main(in : VertexOutput) -> @location(0) vec4f {
////////////////////////////////////////////////////////////////////////////////
struct SimulationParams {
deltaTime : f32,
brightnessFactor : f32,
seed : vec4f,
}

Expand Down Expand Up @@ -125,6 +126,9 @@ fn simulate(@builtin(global_invocation_id) global_invocation_id : vec3u) {
let uv = vec2f(coord) / vec2f(textureDimensions(texture));
particle.position = vec3f((uv - 0.5) * 3.0 * vec2f(1.0, -1.0), 0.0);
particle.color = textureLoad(texture, coord, 0);
particle.color.r *= sim_params.brightnessFactor;
particle.color.g *= sim_params.brightnessFactor;
particle.color.b *= sim_params.brightnessFactor;
particle.velocity.x = (rand() - 0.5) * 0.1;
particle.velocity.y = (rand() - 0.5) * 0.1;
particle.velocity.z = rand() * 0.3;
Expand Down

0 comments on commit 94bef95

Please sign in to comment.