@tinypoly/gpu-renderer 0.1.0 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/ARCHITECTURE.md +31 -3
- package/README.md +13 -4
- package/dist/denoise.d.ts +10 -1
- package/dist/denoise.d.ts.map +1 -1
- package/dist/denoise.js +4 -0
- package/dist/denoise.js.map +1 -1
- package/dist/device.d.ts.map +1 -1
- package/dist/device.js +8 -0
- package/dist/device.js.map +1 -1
- package/dist/frameLayout.d.ts.map +1 -1
- package/dist/frameLayout.js +6 -1
- package/dist/frameLayout.js.map +1 -1
- package/dist/imageResolve.d.ts +2 -1
- package/dist/imageResolve.d.ts.map +1 -1
- package/dist/imageResolve.js +1 -0
- package/dist/imageResolve.js.map +1 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/lensPass.d.ts +4 -0
- package/dist/lensPass.d.ts.map +1 -1
- package/dist/lensPass.js +14 -1
- package/dist/lensPass.js.map +1 -1
- package/dist/lightTree.d.ts +10 -3
- package/dist/lightTree.d.ts.map +1 -1
- package/dist/lightTree.js +56 -17
- package/dist/lightTree.js.map +1 -1
- package/dist/lights.d.ts +20 -0
- package/dist/lights.d.ts.map +1 -1
- package/dist/lights.js +48 -1
- package/dist/lights.js.map +1 -1
- package/dist/oidnPass.d.ts +48 -0
- package/dist/oidnPass.d.ts.map +1 -0
- package/dist/oidnPass.js +255 -0
- package/dist/oidnPass.js.map +1 -0
- package/dist/pathTracePass.d.ts +2 -2
- package/dist/pathTracePass.d.ts.map +1 -1
- package/dist/pathTracePass.js +9 -9
- package/dist/pathTracePass.js.map +1 -1
- package/dist/presentPass.d.ts +2 -0
- package/dist/presentPass.d.ts.map +1 -1
- package/dist/presentPass.js +1 -0
- package/dist/presentPass.js.map +1 -1
- package/dist/renderer.d.ts +20 -0
- package/dist/renderer.d.ts.map +1 -1
- package/dist/renderer.js +138 -19
- package/dist/renderer.js.map +1 -1
- package/dist/sceneUpload.d.ts +5 -0
- package/dist/sceneUpload.d.ts.map +1 -1
- package/dist/sceneUpload.js +4 -0
- package/dist/sceneUpload.js.map +1 -1
- package/dist/settings.d.ts +29 -1
- package/dist/settings.d.ts.map +1 -1
- package/dist/settings.js +15 -6
- package/dist/settings.js.map +1 -1
- package/dist/wgsl/lens.wgsl.d.ts +1 -1
- package/dist/wgsl/lens.wgsl.d.ts.map +1 -1
- package/dist/wgsl/lens.wgsl.js +110 -17
- package/dist/wgsl/lens.wgsl.js.map +1 -1
- package/dist/wgsl/lights.wgsl.d.ts +1 -1
- package/dist/wgsl/lights.wgsl.d.ts.map +1 -1
- package/dist/wgsl/lights.wgsl.js +197 -33
- package/dist/wgsl/lights.wgsl.js.map +1 -1
- package/dist/wgsl/pathTrace.wgsl.d.ts +1 -1
- package/dist/wgsl/pathTrace.wgsl.d.ts.map +1 -1
- package/dist/wgsl/pathTrace.wgsl.js +173 -131
- package/dist/wgsl/pathTrace.wgsl.js.map +1 -1
- package/dist/wgsl/present.wgsl.d.ts +1 -1
- package/dist/wgsl/present.wgsl.d.ts.map +1 -1
- package/dist/wgsl/present.wgsl.js +11 -1
- package/dist/wgsl/present.wgsl.js.map +1 -1
- package/dist/wgsl/random.wgsl.d.ts +1 -1
- package/dist/wgsl/random.wgsl.d.ts.map +1 -1
- package/dist/wgsl/random.wgsl.js +28 -0
- package/dist/wgsl/random.wgsl.js.map +1 -1
- package/package.json +4 -2
- package/src/denoise.ts +15 -1
- package/src/device.ts +9 -0
- package/src/frameLayout.ts +6 -1
- package/src/imageResolve.ts +2 -0
- package/src/index.ts +2 -1
- package/src/lensPass.ts +17 -1
- package/src/lightTree.ts +67 -21
- package/src/lights.ts +65 -1
- package/src/oidnPass.ts +284 -0
- package/src/oidnWebgpu.d.ts +5 -0
- package/src/pathTracePass.ts +11 -9
- package/src/presentPass.ts +3 -0
- package/src/renderer.ts +161 -20
- package/src/sceneUpload.ts +9 -0
- package/src/settings.ts +40 -6
- package/src/wgsl/lens.wgsl.ts +110 -17
- package/src/wgsl/lights.wgsl.ts +197 -33
- package/src/wgsl/pathTrace.wgsl.ts +173 -131
- package/src/wgsl/present.wgsl.ts +11 -1
- package/src/wgsl/random.wgsl.ts +28 -0
- package/weights/LICENSE.txt +202 -0
- package/weights/rt_hdr_alb_nrm.tza +0 -0
package/dist/oidnPass.js
ADDED
|
@@ -0,0 +1,255 @@
|
|
|
1
|
+
import { initUNetFromURL } from "oidn-webgpu/dist/oidn.js";
|
|
2
|
+
import { createShaderModule } from "./shaderModule.js";
|
|
3
|
+
/**
|
|
4
|
+
* The weights the OIDN denoiser loads by default: the HDR ray tracing network that takes the albedo and the normal as
|
|
5
|
+
* well as the colour (RenderKit's oidn-weights, Apache-2.0), shipped with the package. A bundler that moves the package
|
|
6
|
+
* elsewhere, or an app that serves its own copy, passes `denoiser.oidnWeights` instead.
|
|
7
|
+
*/
|
|
8
|
+
export const DEFAULT_OIDN_WEIGHTS = new URL("../weights/rt_hdr_alb_nrm.tza", import.meta.url).href;
|
|
9
|
+
const WORKGROUP = 8;
|
|
10
|
+
const METER_GRID = [64, 36];
|
|
11
|
+
/**
|
|
12
|
+
* Reads the accumulation into the three images OIDN takes, and back.
|
|
13
|
+
*
|
|
14
|
+
* The network was trained on images whose average sits near middle grey, which its own CPU path reaches by an
|
|
15
|
+
* automatic exposure; on the device that scale is left to the caller. `meter` takes the mean of the logarithms of the
|
|
16
|
+
* image's luminance over a grid, as the lens pass's meter does, `prepare` writes the colour times the scale that brings
|
|
17
|
+
* it to middle grey, the albedo (diffuse and specular, so a mirror is not taken for black) and the normal, and `finish`
|
|
18
|
+
* divides the network's output by the same scale and mixes it with the traced image by the strength.
|
|
19
|
+
*/
|
|
20
|
+
export const OIDN_WGSL = /* wgsl */ `
|
|
21
|
+
struct Params {
|
|
22
|
+
size: vec2<u32>,
|
|
23
|
+
count: u32,
|
|
24
|
+
strength: f32,
|
|
25
|
+
};
|
|
26
|
+
|
|
27
|
+
@group(0) @binding(0) var<uniform> params: Params;
|
|
28
|
+
@group(0) @binding(1) var<storage, read> accumulation: array<vec4<f32>>;
|
|
29
|
+
@group(0) @binding(2) var<storage, read_write> color: array<vec4<f32>>;
|
|
30
|
+
@group(0) @binding(3) var<storage, read_write> albedo: array<vec4<f32>>;
|
|
31
|
+
@group(0) @binding(4) var<storage, read_write> normal: array<vec4<f32>>;
|
|
32
|
+
@group(0) @binding(5) var<storage, read_write> scale: array<f32>;
|
|
33
|
+
|
|
34
|
+
const MIDDLE_GREY: f32 = 0.18;
|
|
35
|
+
const GRID: vec2<u32> = vec2<u32>(${METER_GRID[0]}u, ${METER_GRID[1]}u);
|
|
36
|
+
|
|
37
|
+
var<workgroup> sums: array<vec2<f32>, 256>;
|
|
38
|
+
|
|
39
|
+
fn luminance(value: vec3<f32>) -> f32 {
|
|
40
|
+
return dot(value, vec3<f32>(0.2126, 0.7152, 0.0722));
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
fn mean(index: u32) -> vec3<f32> {
|
|
44
|
+
let stored = accumulation[index];
|
|
45
|
+
|
|
46
|
+
return select(vec3<f32>(0.0), stored.rgb / stored.w, stored.w > 0.0);
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
@compute @workgroup_size(256, 1, 1)
|
|
50
|
+
fn meter(@builtin(local_invocation_index) thread: u32) {
|
|
51
|
+
var sum = vec2<f32>(0.0);
|
|
52
|
+
|
|
53
|
+
for (var k = thread; k < GRID.x * GRID.y; k = k + 256u) {
|
|
54
|
+
let uv = (vec2<f32>(f32(k % GRID.x), f32(k / GRID.x)) + 0.5) / vec2<f32>(GRID);
|
|
55
|
+
let pixel = min(vec2<u32>(uv * vec2<f32>(params.size)), params.size - 1u);
|
|
56
|
+
let value = luminance(mean(pixel.y * params.size.x + pixel.x));
|
|
57
|
+
|
|
58
|
+
if (value > 0.0) {
|
|
59
|
+
sum = sum + vec2<f32>(log(value), 1.0);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
sums[thread] = sum;
|
|
64
|
+
workgroupBarrier();
|
|
65
|
+
|
|
66
|
+
for (var stride = 128u; stride > 0u; stride = stride / 2u) {
|
|
67
|
+
if (thread < stride) {
|
|
68
|
+
sums[thread] = sums[thread] + sums[thread + stride];
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
workgroupBarrier();
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
if (thread == 0u) {
|
|
75
|
+
let total = sums[0];
|
|
76
|
+
|
|
77
|
+
scale[0] = select(1.0, clamp(MIDDLE_GREY / exp(total.x / total.y), 1e-6, 1e6), total.y > 0.0);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
@compute @workgroup_size(${WORKGROUP}, ${WORKGROUP})
|
|
82
|
+
fn prepare(@builtin(global_invocation_id) id: vec3<u32>) {
|
|
83
|
+
if (id.x >= params.size.x || id.y >= params.size.y) {
|
|
84
|
+
return;
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
let index = id.y * params.size.x + id.x;
|
|
88
|
+
let samples = max(accumulation[index].w, 1.0);
|
|
89
|
+
let traced = mean(index) * scale[0];
|
|
90
|
+
let normalSum = accumulation[3u * params.count + index].xyz;
|
|
91
|
+
let size = length(normalSum);
|
|
92
|
+
let surface = size > 1e-6;
|
|
93
|
+
let reflectance = (accumulation[2u * params.count + index].rgb + accumulation[5u * params.count + index].rgb)
|
|
94
|
+
/ samples;
|
|
95
|
+
|
|
96
|
+
color[index] = vec4<f32>(max(traced, vec3<f32>(0.0)), 1.0);
|
|
97
|
+
// Where the camera sees no surface, the sky, the albedo is the colour itself, as OIDN asks of the background.
|
|
98
|
+
albedo[index] = vec4<f32>(select(clamp(traced, vec3<f32>(0.0), vec3<f32>(1.0)),
|
|
99
|
+
clamp(reflectance, vec3<f32>(0.0), vec3<f32>(1.0)), surface), 1.0);
|
|
100
|
+
normal[index] = vec4<f32>(select(vec3<f32>(0.0), normalSum / size, surface), 0.0);
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
// The network's output arrives in the colour binding; the albedo binding takes the result.
|
|
104
|
+
@compute @workgroup_size(${WORKGROUP}, ${WORKGROUP})
|
|
105
|
+
fn finish(@builtin(global_invocation_id) id: vec3<u32>) {
|
|
106
|
+
if (id.x >= params.size.x || id.y >= params.size.y) {
|
|
107
|
+
return;
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
let index = id.y * params.size.x + id.x;
|
|
111
|
+
let traced = mean(index);
|
|
112
|
+
let denoised = max(color[index].rgb, vec3<f32>(0.0)) / scale[0];
|
|
113
|
+
|
|
114
|
+
albedo[index] = vec4<f32>(mix(traced, denoised, clamp(params.strength, 0.0, 1.0)), 1.0);
|
|
115
|
+
}
|
|
116
|
+
`;
|
|
117
|
+
const networks = new WeakMap();
|
|
118
|
+
/** One network per device and weights file, kept for as long as the device lives: loading it compiles its kernels. */
|
|
119
|
+
function network(device, weights) {
|
|
120
|
+
let byUrl = networks.get(device);
|
|
121
|
+
if (!byUrl)
|
|
122
|
+
networks.set(device, byUrl = new Map());
|
|
123
|
+
let unet = byUrl.get(weights);
|
|
124
|
+
if (!unet) {
|
|
125
|
+
unet = initUNetFromURL(weights, { device }, { aux: true, hdr: true });
|
|
126
|
+
// A file that failed to load may load on a later attempt.
|
|
127
|
+
unet.catch(() => byUrl.delete(weights));
|
|
128
|
+
byUrl.set(weights, unet);
|
|
129
|
+
}
|
|
130
|
+
return unet;
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Open Image Denoise (Intel's neural denoiser, through oidn-webgpu): the image, its albedo and its normal through a
|
|
134
|
+
* U-Net trained on path traced images, entirely on the device. It keeps texture and fine detail that a hand-made
|
|
135
|
+
* filter blurs, at the cost of a fraction of a second for a large image.
|
|
136
|
+
*/
|
|
137
|
+
export class OidnPass {
|
|
138
|
+
device;
|
|
139
|
+
layout;
|
|
140
|
+
meter;
|
|
141
|
+
prepare;
|
|
142
|
+
finish;
|
|
143
|
+
params;
|
|
144
|
+
scale;
|
|
145
|
+
buffers = [];
|
|
146
|
+
width = 0;
|
|
147
|
+
height = 0;
|
|
148
|
+
/** The denoised radiance, one vec4 per pixel, once `run` has resolved. */
|
|
149
|
+
output = null;
|
|
150
|
+
constructor(device) {
|
|
151
|
+
this.device = device;
|
|
152
|
+
const module = createShaderModule(device, "oidn", OIDN_WGSL);
|
|
153
|
+
const visibility = GPUShaderStage.COMPUTE;
|
|
154
|
+
const storage = (type) => ({ binding: 0, visibility, buffer: { type } });
|
|
155
|
+
this.layout = device.createBindGroupLayout({
|
|
156
|
+
entries: [
|
|
157
|
+
{ binding: 0, visibility, buffer: { type: "uniform" } },
|
|
158
|
+
{ ...storage("read-only-storage"), binding: 1 },
|
|
159
|
+
{ ...storage("storage"), binding: 2 },
|
|
160
|
+
{ ...storage("storage"), binding: 3 },
|
|
161
|
+
{ ...storage("storage"), binding: 4 },
|
|
162
|
+
{ ...storage("storage"), binding: 5 },
|
|
163
|
+
],
|
|
164
|
+
});
|
|
165
|
+
const layout = device.createPipelineLayout({ bindGroupLayouts: [this.layout] });
|
|
166
|
+
const pipeline = (entryPoint) => device.createComputePipeline({ layout, compute: { module, entryPoint } });
|
|
167
|
+
this.meter = pipeline("meter");
|
|
168
|
+
this.prepare = pipeline("prepare");
|
|
169
|
+
this.finish = pipeline("finish");
|
|
170
|
+
this.params = device.createBuffer({ size: 16, usage: GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST });
|
|
171
|
+
this.scale = device.createBuffer({ size: 16, usage: GPUBufferUsage.STORAGE });
|
|
172
|
+
}
|
|
173
|
+
resize(width, height) {
|
|
174
|
+
if (width === this.width && height === this.height && this.buffers.length)
|
|
175
|
+
return;
|
|
176
|
+
for (const buffer of this.buffers)
|
|
177
|
+
buffer.destroy();
|
|
178
|
+
const size = Math.max(16, width * height * 16);
|
|
179
|
+
const usage = GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_SRC | GPUBufferUsage.COPY_DST;
|
|
180
|
+
// Colour, albedo and normal for the network, then the result.
|
|
181
|
+
this.buffers = Array.from({ length: 4 }, () => this.device.createBuffer({ size, usage }));
|
|
182
|
+
this.output = this.buffers[3];
|
|
183
|
+
this.width = width;
|
|
184
|
+
this.height = height;
|
|
185
|
+
}
|
|
186
|
+
group(accumulation, color, albedo, normal) {
|
|
187
|
+
return this.device.createBindGroup({
|
|
188
|
+
layout: this.layout,
|
|
189
|
+
entries: [
|
|
190
|
+
{ binding: 0, resource: { buffer: this.params } },
|
|
191
|
+
{ binding: 1, resource: { buffer: accumulation } },
|
|
192
|
+
{ binding: 2, resource: { buffer: color } },
|
|
193
|
+
{ binding: 3, resource: { buffer: albedo } },
|
|
194
|
+
{ binding: 4, resource: { buffer: normal } },
|
|
195
|
+
{ binding: 5, resource: { buffer: this.scale } },
|
|
196
|
+
],
|
|
197
|
+
});
|
|
198
|
+
}
|
|
199
|
+
dispatch(encoder, pipeline, group, x, y) {
|
|
200
|
+
const pass = encoder.beginComputePass({ label: "oidn" });
|
|
201
|
+
pass.setPipeline(pipeline);
|
|
202
|
+
pass.setBindGroup(0, group);
|
|
203
|
+
pass.dispatchWorkgroups(x, y);
|
|
204
|
+
pass.end();
|
|
205
|
+
}
|
|
206
|
+
/**
|
|
207
|
+
* Denoises what `accumulation` holds into `output`. The images are read from it as it stands on the queue when this
|
|
208
|
+
* is called; the promise resolves once the result has been written, and rejects when the network cannot load.
|
|
209
|
+
*/
|
|
210
|
+
async run(accumulation, width, height, strength, weights, signal) {
|
|
211
|
+
const unet = await network(this.device, weights);
|
|
212
|
+
if (signal?.cancelled)
|
|
213
|
+
return false;
|
|
214
|
+
this.resize(width, height);
|
|
215
|
+
const [color, albedo, normal, output] = this.buffers;
|
|
216
|
+
const values = new ArrayBuffer(16);
|
|
217
|
+
new Uint32Array(values).set([width, height, width * height]);
|
|
218
|
+
new Float32Array(values)[3] = strength;
|
|
219
|
+
this.device.queue.writeBuffer(this.params, 0, values);
|
|
220
|
+
const groups = [Math.ceil(width / WORKGROUP), Math.ceil(height / WORKGROUP)];
|
|
221
|
+
const inputs = this.group(accumulation, color, albedo, normal);
|
|
222
|
+
const encoder = this.device.createCommandEncoder({ label: "oidn prepare" });
|
|
223
|
+
this.dispatch(encoder, this.meter, inputs, 1, 1);
|
|
224
|
+
this.dispatch(encoder, this.prepare, inputs, ...groups);
|
|
225
|
+
this.device.queue.submit([encoder.finish()]);
|
|
226
|
+
const denoised = await new Promise((resolve, reject) => {
|
|
227
|
+
const abort = unet.tileExecute({
|
|
228
|
+
color: { data: color, width, height },
|
|
229
|
+
albedo: { data: albedo, width, height },
|
|
230
|
+
normal: { data: normal, width, height },
|
|
231
|
+
done: result => resolve(result.data),
|
|
232
|
+
error: reject,
|
|
233
|
+
progress: () => {
|
|
234
|
+
if (signal?.cancelled) {
|
|
235
|
+
abort();
|
|
236
|
+
resolve(null);
|
|
237
|
+
}
|
|
238
|
+
},
|
|
239
|
+
});
|
|
240
|
+
});
|
|
241
|
+
if (!denoised || signal?.cancelled)
|
|
242
|
+
return false;
|
|
243
|
+
const finishing = this.device.createCommandEncoder({ label: "oidn finish" });
|
|
244
|
+
this.dispatch(finishing, this.finish, this.group(accumulation, denoised, output, normal), ...groups);
|
|
245
|
+
this.device.queue.submit([finishing.finish()]);
|
|
246
|
+
return true;
|
|
247
|
+
}
|
|
248
|
+
destroy() {
|
|
249
|
+
for (const buffer of [...this.buffers, this.params, this.scale])
|
|
250
|
+
buffer.destroy();
|
|
251
|
+
this.buffers = [];
|
|
252
|
+
this.output = null;
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
//# sourceMappingURL=oidnPass.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"oidnPass.js","sourceRoot":"","sources":["../src/oidnPass.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAC3D,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAEvD;;;;GAIG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,IAAI,GAAG,CAAC,+BAA+B,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;AAEnG,MAAM,SAAS,GAAG,CAAC,CAAC;AACpB,MAAM,UAAU,GAAG,CAAC,EAAE,EAAE,EAAE,CAAU,CAAC;AAErC;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG,UAAU,CAAC;;;;;;;;;;;;;;;oCAeA,UAAU,CAAC,CAAC,CAAC,MAAM,UAAU,CAAC,CAAC,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2BA8CzC,SAAS,KAAK,SAAS;;;;;;;;;;;;;;;;;;;;;;;2BAuBvB,SAAS,KAAK,SAAS;;;;;;;;;;;;CAYjD,CAAC;AAEF,MAAM,QAAQ,GAAG,IAAI,OAAO,EAAyC,CAAC;AAEtE,sHAAsH;AACtH,SAAS,OAAO,CAAC,MAAiB,EAAE,OAAe;IACjD,IAAI,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAEjC,IAAI,CAAC,KAAK;QAAE,QAAQ,CAAC,GAAG,CAAC,MAAM,EAAE,KAAK,GAAG,IAAI,GAAG,EAAE,CAAC,CAAC;IAEpD,IAAI,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IAE9B,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,IAAI,GAAG,eAAe,CAAC,OAAO,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC;QACtE,0DAA0D;QAC1D,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;QACxC,KAAK,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IAC3B,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;GAIG;AACH,MAAM,OAAO,QAAQ;IAaU;IAZZ,MAAM,CAAqB;IAC3B,KAAK,CAAqB;IAC1B,OAAO,CAAqB;IAC5B,MAAM,CAAqB;IAC3B,MAAM,CAAY;IAClB,KAAK,CAAY;IAC1B,OAAO,GAAgB,EAAE,CAAC;IAC1B,KAAK,GAAG,CAAC,CAAC;IACV,MAAM,GAAG,CAAC,CAAC;IACnB,0EAA0E;IAC1E,MAAM,GAAqB,IAAI,CAAC;IAEhC,YAA6B,MAAiB;QAAjB,WAAM,GAAN,MAAM,CAAW;QAC5C,MAAM,MAAM,GAAG,kBAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC;QAC7D,MAAM,UAAU,GAAG,cAAc,CAAC,OAAO,CAAC;QAC1C,MAAM,OAAO,GAAG,CAAC,IAA0B,EAAE,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,UAAU,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;QAE/F,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,qBAAqB,CAAC;YACzC,OAAO,EAAE;gBACP,EAAE,OAAO,EAAE,CAAC,EAAE,UAAU,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE;gBACvD,EAAE,GAAG,OAAO,CAAC,mBAAmB,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE;gBAC/C,EAAE,GAAG,OAAO,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE;gBACrC,EAAE,GAAG,OAAO,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE;gBACrC,EAAE,GAAG,OAAO,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE;gBACrC,EAAE,GAAG,OAAO,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE;aACtC;SACF,CAAC,CAAC;QAEH,MAAM,MAAM,GAAG,MAAM,CAAC,oBAAoB,CAAC,EAAE,gBAAgB,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAChF,MAAM,QAAQ,GAAG,CAAC,UAAkB,EAAE,EAAE,CAAC,MAAM,CAAC,qBAAqB,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,EAAE,CAAC,CAAC;QAEnH,IAAI,CAAC,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC;QAC/B,IAAI,CAAC,OAAO,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC;QACnC,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC;QACjC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,YAAY,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,cAAc,CAAC,OAAO,GAAG,cAAc,CAAC,QAAQ,EAAE,CAAC,CAAC;QACzG,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,YAAY,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,cAAc,CAAC,OAAO,EAAE,CAAC,CAAC;IAChF,CAAC;IAEO,MAAM,CAAC,KAAa,EAAE,MAAc;QAC1C,IAAI,KAAK,KAAK,IAAI,CAAC,KAAK,IAAI,MAAM,KAAK,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM;YAAE,OAAO;QAElF,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,OAAO;YAAE,MAAM,CAAC,OAAO,EAAE,CAAC;QAEpD,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,KAAK,GAAG,MAAM,GAAG,EAAE,CAAC,CAAC;QAC/C,MAAM,KAAK,GAAG,cAAc,CAAC,OAAO,GAAG,cAAc,CAAC,QAAQ,GAAG,cAAc,CAAC,QAAQ,CAAC;QAEzF,8DAA8D;QAC9D,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;QAC1F,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QAC9B,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;IAEO,KAAK,CAAC,YAAuB,EAAE,KAAgB,EAAE,MAAiB,EAAE,MAAiB;QAC3F,OAAO,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC;YACjC,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,OAAO,EAAE;gBACP,EAAE,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,EAAE;gBACjD,EAAE,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,MAAM,EAAE,YAAY,EAAE,EAAE;gBAClD,EAAE,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE;gBAC3C,EAAE,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE;gBAC5C,EAAE,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE;gBAC5C,EAAE,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,KAAK,EAAE,EAAE;aACjD;SACF,CAAC,CAAC;IACL,CAAC;IAEO,QAAQ,CAAC,OAA0B,EAAE,QAA4B,EAAE,KAAmB,EAAE,CAAS,EACvG,CAAS;QACT,MAAM,IAAI,GAAG,OAAO,CAAC,gBAAgB,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;QAEzD,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;QAC3B,IAAI,CAAC,YAAY,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;QAC5B,IAAI,CAAC,kBAAkB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAC9B,IAAI,CAAC,GAAG,EAAE,CAAC;IACb,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,GAAG,CAAC,YAAuB,EAAE,KAAa,EAAE,MAAc,EAAE,QAAgB,EAAE,OAAe,EACjG,MAA+B;QAC/B,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAEjD,IAAI,MAAM,EAAE,SAAS;YAAE,OAAO,KAAK,CAAC;QAEpC,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QAE3B,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC;QACrD,MAAM,MAAM,GAAG,IAAI,WAAW,CAAC,EAAE,CAAC,CAAC;QAEnC,IAAI,WAAW,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC;QAC7D,IAAI,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC;QACvC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC;QAEtD,MAAM,MAAM,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,SAAS,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC,CAAU,CAAC;QACtF,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;QAC/D,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,oBAAoB,CAAC,EAAE,KAAK,EAAE,cAAc,EAAE,CAAC,CAAC;QAE5E,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QACjD,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC,CAAC;QACxD,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QAE7C,MAAM,QAAQ,GAAG,MAAM,IAAI,OAAO,CAAmB,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACvE,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC;gBAC7B,KAAK,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE;gBACrC,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE;gBACvC,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE;gBACvC,IAAI,EAAE,MAAM,CAAC,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC;gBACpC,KAAK,EAAE,MAAM;gBACb,QAAQ,EAAE,GAAG,EAAE;oBACb,IAAI,MAAM,EAAE,SAAS,EAAE,CAAC;wBACtB,KAAK,EAAE,CAAC;wBACR,OAAO,CAAC,IAAI,CAAC,CAAC;oBAChB,CAAC;gBACH,CAAC;aACF,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,IAAI,MAAM,EAAE,SAAS;YAAE,OAAO,KAAK,CAAC;QAEjD,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,oBAAoB,CAAC,EAAE,KAAK,EAAE,aAAa,EAAE,CAAC,CAAC;QAE7E,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,GAAG,MAAM,CAAC,CAAC;QACrG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QAE/C,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO;QACL,KAAK,MAAM,MAAM,IAAI,CAAC,GAAG,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC;YAAE,MAAM,CAAC,OAAO,EAAE,CAAC;QAElF,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC;QAClB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;IACrB,CAAC;CACF"}
|
package/dist/pathTracePass.d.ts
CHANGED
|
@@ -8,7 +8,7 @@ export type FrameUniforms = Record<keyof typeof FRAME_LAYOUT.offsets & string, n
|
|
|
8
8
|
* declarations. The scene's translated shaders sit between the texture code they call and the surface code that calls
|
|
9
9
|
* them.
|
|
10
10
|
*/
|
|
11
|
-
export declare function pathTraceSource(programs?: ShaderPrograms | null, subsurface?: boolean, volumes?: boolean, bevel?: boolean): string;
|
|
11
|
+
export declare function pathTraceSource(programs?: ShaderPrograms | null, subsurface?: boolean, volumes?: boolean, bevel?: boolean, portals?: boolean): string;
|
|
12
12
|
export declare class PathTracePass {
|
|
13
13
|
private readonly device;
|
|
14
14
|
private pipeline;
|
|
@@ -21,7 +21,7 @@ export declare class PathTracePass {
|
|
|
21
21
|
* Recompiles the kernel when the scene's shaders changed, or whether it has a material that scatters light inside;
|
|
22
22
|
* the same set keeps the pipeline it has.
|
|
23
23
|
*/
|
|
24
|
-
setPrograms(programs: ShaderPrograms | null, subsurface?: boolean, volumes?: boolean, bevel?: boolean): void;
|
|
24
|
+
setPrograms(programs: ShaderPrograms | null, subsurface?: boolean, volumes?: boolean, bevel?: boolean, portals?: boolean): void;
|
|
25
25
|
private build;
|
|
26
26
|
/** Rebinds after the scene or the accumulation buffer was replaced. */
|
|
27
27
|
setBindings(scene: SceneBuffers, accumulation: GPUBuffer): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pathTracePass.d.ts","sourceRoot":"","sources":["../src/pathTracePass.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAe,MAAM,kBAAkB,CAAC;AAE7D,OAAO,EAAgB,KAAK,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACvE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAcrD,+GAA+G;AAC/G,MAAM,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,OAAO,YAAY,CAAC,OAAO,GAAG,MAAM,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;AAErH;;;;GAIG;AACH,wBAAgB,eAAe,CAC7B,QAAQ,GAAE,cAAc,GAAG,IAAW,EAAE,UAAU,UAAO,EAAE,OAAO,UAAO,EAAE,KAAK,UAAO,GAAG,MAAM,
|
|
1
|
+
{"version":3,"file":"pathTracePass.d.ts","sourceRoot":"","sources":["../src/pathTracePass.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAe,MAAM,kBAAkB,CAAC;AAE7D,OAAO,EAAgB,KAAK,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACvE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAcrD,+GAA+G;AAC/G,MAAM,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,OAAO,YAAY,CAAC,OAAO,GAAG,MAAM,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;AAErH;;;;GAIG;AACH,wBAAgB,eAAe,CAC7B,QAAQ,GAAE,cAAc,GAAG,IAAW,EAAE,UAAU,UAAO,EAAE,OAAO,UAAO,EAAE,KAAK,UAAO,EACvF,OAAO,UAAO,GAAG,MAAM,CAMxB;AAMD,qBAAa,aAAa;IAOZ,OAAO,CAAC,QAAQ,CAAC,MAAM;IANnC,OAAO,CAAC,QAAQ,CAAqB;IACrC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAY;IACrC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAgC;IACvD,OAAO,CAAC,SAAS,CAA6B;IAC9C,OAAO,CAAC,UAAU,CAAoC;gBAEzB,MAAM,EAAE,SAAS;IAK9C;;;OAGG;IACH,WAAW,CAAC,QAAQ,EAAE,cAAc,GAAG,IAAI,EAAE,UAAU,UAAQ,EAAE,OAAO,UAAQ,EAAE,KAAK,UAAQ,EAC7F,OAAO,UAAQ;IAUjB,OAAO,CAAC,KAAK;IAQb,uEAAuE;IACvE,WAAW,CAAC,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,SAAS;IAiBxD,MAAM,CAAC,OAAO,EAAE,iBAAiB,EAAE,KAAK,EAAE,aAAa;CAexD"}
|
package/dist/pathTracePass.js
CHANGED
|
@@ -18,11 +18,11 @@ import { TEXTURE_WGSL } from "./wgsl/texture.wgsl.js";
|
|
|
18
18
|
* declarations. The scene's translated shaders sit between the texture code they call and the surface code that calls
|
|
19
19
|
* them.
|
|
20
20
|
*/
|
|
21
|
-
export function pathTraceSource(programs = null, subsurface = true, volumes = true, bevel = true) {
|
|
21
|
+
export function pathTraceSource(programs = null, subsurface = true, volumes = true, bevel = true, portals = true) {
|
|
22
22
|
// The random walk inside materials and the media inside volumes are compiled in only for a scene that has them: the
|
|
23
23
|
// kernel is bound by its size, and either would cost every other scene a few percent for code that never runs.
|
|
24
24
|
return `const SUBSURFACE_WALK: bool = ${subsurface};\nconst VOLUMES: bool = ${volumes};\nconst BEVEL: bool = ${bevel};\n`
|
|
25
|
-
+ COMMON_WGSL + RANDOM_WGSL + BVH_WGSL + SAMPLING_WGSL + TEXTURE_WGSL + SHADER_SUPPORT_WGSL
|
|
25
|
+
+ `const PORTALS: bool = ${portals};\n` + COMMON_WGSL + RANDOM_WGSL + BVH_WGSL + SAMPLING_WGSL + TEXTURE_WGSL + SHADER_SUPPORT_WGSL
|
|
26
26
|
+ programsWgsl(programs) + ENVIRONMENT_WGSL + SURFACE_WGSL + BSDF_WGSL + LIGHTS_WGSL + PATH_TRACE_WGSL;
|
|
27
27
|
}
|
|
28
28
|
const FRAME_BYTES = FRAME_WORDS * 4;
|
|
@@ -33,26 +33,26 @@ export class PathTracePass {
|
|
|
33
33
|
uniforms;
|
|
34
34
|
values = new ArrayBuffer(FRAME_BYTES);
|
|
35
35
|
bindGroup = null;
|
|
36
|
-
programKey = "|false|false|false";
|
|
36
|
+
programKey = "|false|false|false|false|false";
|
|
37
37
|
constructor(device) {
|
|
38
38
|
this.device = device;
|
|
39
|
-
this.pipeline = this.build(null, false, false, false);
|
|
39
|
+
this.pipeline = this.build(null, false, false, false, false);
|
|
40
40
|
this.uniforms = device.createBuffer({ size: FRAME_BYTES, usage: GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST });
|
|
41
41
|
}
|
|
42
42
|
/**
|
|
43
43
|
* Recompiles the kernel when the scene's shaders changed, or whether it has a material that scatters light inside;
|
|
44
44
|
* the same set keeps the pipeline it has.
|
|
45
45
|
*/
|
|
46
|
-
setPrograms(programs, subsurface = false, volumes = false, bevel = false) {
|
|
47
|
-
const key = `${programs?.key ?? ""}|${subsurface}|${volumes}|${bevel}`;
|
|
46
|
+
setPrograms(programs, subsurface = false, volumes = false, bevel = false, portals = false) {
|
|
47
|
+
const key = `${programs?.key ?? ""}|${subsurface}|${volumes}|${bevel}|${portals}`;
|
|
48
48
|
if (key === this.programKey)
|
|
49
49
|
return;
|
|
50
50
|
this.programKey = key;
|
|
51
|
-
this.pipeline = this.build(programs, subsurface, volumes, bevel);
|
|
51
|
+
this.pipeline = this.build(programs, subsurface, volumes, bevel, portals);
|
|
52
52
|
this.bindGroup = null;
|
|
53
53
|
}
|
|
54
|
-
build(programs, subsurface, volumes, bevel) {
|
|
55
|
-
const module = createShaderModule(this.device, "path trace", pathTraceSource(programs, subsurface, volumes, bevel));
|
|
54
|
+
build(programs, subsurface, volumes, bevel, portals) {
|
|
55
|
+
const module = createShaderModule(this.device, "path trace", pathTraceSource(programs, subsurface, volumes, bevel, portals));
|
|
56
56
|
return this.device.createComputePipeline({ layout: "auto", compute: { module, entryPoint: "main" } });
|
|
57
57
|
}
|
|
58
58
|
/** Rebinds after the scene or the accumulation buffer was replaced. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pathTracePass.js","sourceRoot":"","sources":["../src/pathTracePass.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,YAAY,EAAuB,MAAM,oBAAoB,CAAC;AAEvE,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAChD,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAC9D,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAC3D,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AACnE,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAKtD;;;;GAIG;AACH,MAAM,UAAU,eAAe,CAC7B,WAAkC,IAAI,EAAE,UAAU,GAAG,IAAI,EAAE,OAAO,GAAG,IAAI,EAAE,KAAK,GAAG,IAAI;
|
|
1
|
+
{"version":3,"file":"pathTracePass.js","sourceRoot":"","sources":["../src/pathTracePass.ts"],"names":[],"mappings":"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"}
|
package/dist/presentPass.d.ts
CHANGED
|
@@ -6,6 +6,8 @@ export interface PresentUniforms {
|
|
|
6
6
|
toneMapping: RenderToneMapping;
|
|
7
7
|
vignette: number;
|
|
8
8
|
grain: number;
|
|
9
|
+
/** AgX's look, from its base curve to Punchy. */
|
|
10
|
+
contrast: number;
|
|
9
11
|
frameIndex: number;
|
|
10
12
|
transparent: boolean;
|
|
11
13
|
/** The denoiser's output, which the colour is read from instead of the accumulation when given. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"presentPass.d.ts","sourceRoot":"","sources":["../src/presentPass.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAGvD,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,iBAAiB,CAAC;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,OAAO,CAAC;IACrB,mGAAmG;IACnG,QAAQ,CAAC,EAAE,SAAS,GAAG,IAAI,CAAC;CAC7B;AAOD,8GAA8G;AAC9G,qBAAa,WAAW;IAUV,OAAO,CAAC,QAAQ,CAAC,MAAM;IAAa,QAAQ,CAAC,MAAM,EAAE,gBAAgB;IATjF,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAoB;IAC7C,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAY;IACrC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAkC;IACzD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAiC;IACxD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAgC;IACzD,OAAO,CAAC,SAAS,CAA6B;IAC9C,OAAO,CAAC,YAAY,CAA0B;IAC9C,OAAO,CAAC,MAAM,CAA0B;gBAEX,MAAM,EAAE,SAAS,EAAW,MAAM,EAAE,gBAAgB;IAejF,eAAe,CAAC,YAAY,EAAE,SAAS;IAKvC,OAAO,CAAC,IAAI;IAmBZ,MAAM,CAAC,OAAO,EAAE,iBAAiB,EAAE,IAAI,EAAE,cAAc,EAAE,OAAO,EAAE,eAAe;
|
|
1
|
+
{"version":3,"file":"presentPass.d.ts","sourceRoot":"","sources":["../src/presentPass.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAGvD,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,iBAAiB,CAAC;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,iDAAiD;IACjD,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,OAAO,CAAC;IACrB,mGAAmG;IACnG,QAAQ,CAAC,EAAE,SAAS,GAAG,IAAI,CAAC;CAC7B;AAOD,8GAA8G;AAC9G,qBAAa,WAAW;IAUV,OAAO,CAAC,QAAQ,CAAC,MAAM;IAAa,QAAQ,CAAC,MAAM,EAAE,gBAAgB;IATjF,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAoB;IAC7C,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAY;IACrC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAkC;IACzD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAiC;IACxD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAgC;IACzD,OAAO,CAAC,SAAS,CAA6B;IAC9C,OAAO,CAAC,YAAY,CAA0B;IAC9C,OAAO,CAAC,MAAM,CAA0B;gBAEX,MAAM,EAAE,SAAS,EAAW,MAAM,EAAE,gBAAgB;IAejF,eAAe,CAAC,YAAY,EAAE,SAAS;IAKvC,OAAO,CAAC,IAAI;IAmBZ,MAAM,CAAC,OAAO,EAAE,iBAAiB,EAAE,IAAI,EAAE,cAAc,EAAE,OAAO,EAAE,eAAe;CA2BlF"}
|
package/dist/presentPass.js
CHANGED
|
@@ -64,6 +64,7 @@ export class PresentPass {
|
|
|
64
64
|
this.integers[6] = present.frameIndex;
|
|
65
65
|
this.integers[7] = present.transparent ? 1 : 0;
|
|
66
66
|
this.integers[8] = present.denoised ? 1 : 0;
|
|
67
|
+
this.floats[9] = present.contrast;
|
|
67
68
|
this.device.queue.writeBuffer(this.uniforms, 0, this.values);
|
|
68
69
|
const pass = encoder.beginRenderPass({
|
|
69
70
|
label: "present",
|
package/dist/presentPass.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"presentPass.js","sourceRoot":"","sources":["../src/presentPass.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAEvD,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"presentPass.js","sourceRoot":"","sources":["../src/presentPass.ts"],"names":[],"mappings":"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"}
|
package/dist/renderer.d.ts
CHANGED
|
@@ -71,6 +71,11 @@ export interface GpuRendererOptions {
|
|
|
71
71
|
}
|
|
72
72
|
/** `render()` rejects with this when a newer frame, `cancel()` or `dispose()` replaced the frame it started. */
|
|
73
73
|
export declare const isAbortError: (error: unknown) => boolean;
|
|
74
|
+
/**
|
|
75
|
+
* How long the canvas waits between denoised images: longer for a larger image or more passes, in proportion, so the
|
|
76
|
+
* filter takes the same share of the device from tracing whatever the size. The finished image is filtered regardless.
|
|
77
|
+
*/
|
|
78
|
+
export declare function denoiseInterval(width: number, height: number, passes: number): number;
|
|
74
79
|
/**
|
|
75
80
|
* Path traces a Three.js scene on the GPU, behind the same API as `CpuRenderer`. The setters record the inputs;
|
|
76
81
|
* `render()` opens a frame with whatever is current and accumulates samples until it reaches `settings.samples`.
|
|
@@ -106,7 +111,15 @@ export declare class GpuRenderer extends EventEmitter<GpuRendererEvents> {
|
|
|
106
111
|
private planar;
|
|
107
112
|
private resolve;
|
|
108
113
|
private denoisePass;
|
|
114
|
+
private oidnPass;
|
|
115
|
+
private denoiseOutput;
|
|
116
|
+
private oidnRun;
|
|
117
|
+
private oidnBusy;
|
|
118
|
+
private oidnFailed;
|
|
109
119
|
private lensPass;
|
|
120
|
+
private lensKey;
|
|
121
|
+
private lensAt;
|
|
122
|
+
private denoiseVersion;
|
|
110
123
|
private denoiserSettings;
|
|
111
124
|
private finished;
|
|
112
125
|
private denoised;
|
|
@@ -215,6 +228,13 @@ export declare class GpuRenderer extends EventEmitter<GpuRendererEvents> {
|
|
|
215
228
|
private encodeLens;
|
|
216
229
|
/** Denoises the accumulation as it stands, for the canvas and for the finished image. */
|
|
217
230
|
private encodeDenoise;
|
|
231
|
+
private usesOidn;
|
|
232
|
+
/**
|
|
233
|
+
* Denoises the accumulation as it stands with the chosen denoiser, and resolves once the output holds it. SVGF is
|
|
234
|
+
* submitted at once; OIDN runs after any run still in flight, and is dropped when a newer frame starts meanwhile.
|
|
235
|
+
*/
|
|
236
|
+
private denoiseNow;
|
|
237
|
+
private runOidn;
|
|
218
238
|
private frameUniforms;
|
|
219
239
|
/**
|
|
220
240
|
* Copies the accumulation buffer back and resolves it on the CPU, with the same exposure, tone mapping and sRGB
|
package/dist/renderer.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"renderer.d.ts","sourceRoot":"","sources":["../src/renderer.ts"],"names":[],"mappings":"AAEA,OAAO,EAAsC,KAAK,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAa5F,OAAO,EAIL,KAAK,iBAAiB,EACtB,KAAK,sBAAsB,EAC5B,MAAM,eAAe,CAAC;AAavB,OAAO,EAKL,KAAK,gBAAgB,EAEtB,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"renderer.d.ts","sourceRoot":"","sources":["../src/renderer.ts"],"names":[],"mappings":"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"}
|