@tinypoly/gpu-renderer 0.1.1 → 0.2.1
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 +11 -3
- 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 +4 -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/lights.d.ts +18 -0
- package/dist/lights.d.ts.map +1 -1
- package/dist/lights.js +45 -0
- 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 +16 -1
- package/dist/renderer.d.ts.map +1 -1
- package/dist/renderer.js +111 -15
- package/dist/renderer.js.map +1 -1
- package/dist/sceneUpload.d.ts +4 -0
- package/dist/sceneUpload.d.ts.map +1 -1
- package/dist/sceneUpload.js +3 -0
- package/dist/sceneUpload.js.map +1 -1
- package/dist/settings.d.ts +23 -1
- package/dist/settings.d.ts.map +1 -1
- package/dist/settings.js +13 -4
- 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 +108 -1
- 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 +147 -17
- 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 +123 -91
- 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/package.json +4 -2
- package/src/denoise.ts +15 -1
- package/src/device.ts +9 -0
- package/src/frameLayout.ts +4 -1
- package/src/imageResolve.ts +2 -0
- package/src/index.ts +2 -1
- package/src/lensPass.ts +17 -1
- package/src/lights.ts +60 -0
- 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 +133 -16
- package/src/sceneUpload.ts +7 -0
- package/src/settings.ts +32 -4
- package/src/wgsl/lens.wgsl.ts +108 -1
- package/src/wgsl/lights.wgsl.ts +147 -17
- package/src/wgsl/pathTrace.wgsl.ts +123 -91
- package/src/wgsl/present.wgsl.ts +11 -1
- package/weights/LICENSE.txt +202 -0
- package/weights/rt_hdr_alb_nrm.tza +0 -0
package/dist/lights.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { PackedGeometry } from "./geometry.js";
|
|
2
|
+
import { type TreeLight } from "./lightTree.js";
|
|
2
3
|
import type { SerializedLight } from "./upstream.js";
|
|
3
4
|
/**
|
|
4
5
|
* What the integrator can aim a shadow ray at. Emissive triangles and Three's analytic lights share one buffer and one
|
|
@@ -71,7 +72,24 @@ export interface PackedLights {
|
|
|
71
72
|
leavesAt: number;
|
|
72
73
|
/** Where the lights of the tree's leaves are listed in the texture buffer. */
|
|
73
74
|
listAt: number;
|
|
75
|
+
/**
|
|
76
|
+
* The windows the sky is also sampled through, from inside: the triangles of every thin transmissive material, in a
|
|
77
|
+
* tree of their own, as the lights have, so a point aims at the windows near it rather than at every one in the
|
|
78
|
+
* building alike. Where its nodes start, where its leaves' list starts, and how many windows there are.
|
|
79
|
+
*/
|
|
80
|
+
portalTreeAt: number;
|
|
81
|
+
portalListAt: number;
|
|
82
|
+
portalCount: number;
|
|
74
83
|
}
|
|
84
|
+
/**
|
|
85
|
+
* The triangles of thin glass, which is where daylight enters a room, as the tree sees them: their bounds, their area
|
|
86
|
+
* as power, so a window weighs by the solid angle it takes from a point, and no orientation, since a pane lets the sky
|
|
87
|
+
* through from either side.
|
|
88
|
+
*/
|
|
89
|
+
export declare function portalTriangles(geometry: PackedGeometry): {
|
|
90
|
+
triangles: number[];
|
|
91
|
+
lights: TreeLight[];
|
|
92
|
+
};
|
|
75
93
|
/**
|
|
76
94
|
* Everything the integrator may aim a shadow ray at, with the cumulative distribution that picks one. The weights mix
|
|
77
95
|
* two unit systems, the radiant power of a surface and the intensity of an analytic light, so the balance between the
|
package/dist/lights.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lights.d.ts","sourceRoot":"","sources":["../src/lights.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"lights.d.ts","sourceRoot":"","sources":["../src/lights.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AACpD,OAAO,EAAkB,KAAK,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAChE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAErD;;;;;;;GAOG;AACH,eAAO,MAAM,UAAU;IACrB,oDAAoD;;;;;IAKpD,oGAAoG;;IAEpG,4DAA4D;;CAEpD,CAAC;AAEX,wEAAwE;AACxE,eAAO,MAAM,WAAW,KAAK,CAAC;AAE9B,0FAA0F;AAC1F,eAAO,MAAM,kBAAkB,IAAI,CAAC;AACpC,iHAAiH;AACjH,eAAO,MAAM,aAAa,IAAI,CAAC;AAE/B,0EAA0E;AAC1E,MAAM,WAAW,gBAAgB;IAC/B,6DAA6D;IAC7D,QAAQ,CAAC,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACvC,4EAA4E;IAC5E,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,YAAY;IAC3B,2EAA2E;IAC3E,OAAO,EAAE,WAAW,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,gHAAgH;IAChH,SAAS,EAAE,MAAM,CAAC;IAClB;;;OAGG;IACH,OAAO,EAAE;QAAE,GAAG,EAAE,MAAM,EAAE,CAAC;QAAC,MAAM,EAAE,MAAM,EAAE,CAAC;QAAC,IAAI,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;IAC7D,iHAAiH;IACjH,eAAe,EAAE,MAAM,CAAC;IACxB;;;;OAIG;IACH,UAAU,EAAE,WAAW,CAAC;IACxB,2FAA2F;IAC3F,KAAK,EAAE,MAAM,CAAC;IACd,sGAAsG;IACtG,WAAW,EAAE,MAAM,CAAC;IACpB;;;OAGG;IACH,UAAU,EAAE,MAAM,CAAC;IACnB,kGAAkG;IAClG,SAAS,EAAE,MAAM,CAAC;IAClB,qHAAqH;IACrH,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,8EAA8E;IAC9E,MAAM,EAAE,MAAM,CAAC;IACf;;;;OAIG;IACH,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,cAAc,GAAG;IAAE,SAAS,EAAE,MAAM,EAAE,CAAC;IAAC,MAAM,EAAE,SAAS,EAAE,CAAA;CAAE,CA4BtG;AAmSD;;;;;GAKG;AACH,wBAAgB,UAAU,CACxB,QAAQ,EAAE,cAAc,EACxB,MAAM,GAAE,SAAS,eAAe,EAAO,EACvC,WAAW,CAAC,EAAE;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,EACtC,OAAO,GAAE,gBAAqB,GAAG,YAAY,CAiG9C"}
|
package/dist/lights.js
CHANGED
|
@@ -24,6 +24,36 @@ export const LIGHT_WORDS = 24;
|
|
|
24
24
|
export const LIGHT_CASTS_SHADOW = 1;
|
|
25
25
|
/** A spot light with a projected map; its triangle word says where the map's record is in the texture buffer. */
|
|
26
26
|
export const LIGHT_HAS_MAP = 2;
|
|
27
|
+
/**
|
|
28
|
+
* The triangles of thin glass, which is where daylight enters a room, as the tree sees them: their bounds, their area
|
|
29
|
+
* as power, so a window weighs by the solid angle it takes from a point, and no orientation, since a pane lets the sky
|
|
30
|
+
* through from either side.
|
|
31
|
+
*/
|
|
32
|
+
export function portalTriangles(geometry) {
|
|
33
|
+
const windows = geometry.materialProperties.map(p => p.transmission > 0 && p.thickness <= 0);
|
|
34
|
+
const triangles = [], lights = [];
|
|
35
|
+
for (let triangle = 0; triangle < geometry.triangleCount; triangle++) {
|
|
36
|
+
if (!windows[geometry.materials[triangle]])
|
|
37
|
+
continue;
|
|
38
|
+
const at = triangle * 9;
|
|
39
|
+
const area = doubleArea(geometry.positions, at) / 2;
|
|
40
|
+
if (!(area > 0))
|
|
41
|
+
continue;
|
|
42
|
+
const corner = (k) => [0, 1, 2].map(c => geometry.positions[at + k * 3 + c]);
|
|
43
|
+
const points = [corner(0), corner(1), corner(2)];
|
|
44
|
+
triangles.push(triangle);
|
|
45
|
+
lights.push({
|
|
46
|
+
low: [0, 1, 2].map(c => Math.min(points[0][c], points[1][c], points[2][c])),
|
|
47
|
+
high: [0, 1, 2].map(c => Math.max(points[0][c], points[1][c], points[2][c])),
|
|
48
|
+
power: area,
|
|
49
|
+
axis: [0, 1, 0],
|
|
50
|
+
thetaO: Math.PI,
|
|
51
|
+
thetaE: Math.PI / 2,
|
|
52
|
+
density: 1 / area,
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
return { triangles, lights };
|
|
56
|
+
}
|
|
27
57
|
const luminance = (color) => 0.2126 * color[0] + 0.7152 * color[1] + 0.0722 * color[2];
|
|
28
58
|
/** Twice the area of the triangle at `offset`. */
|
|
29
59
|
function doubleArea(positions, offset) {
|
|
@@ -309,7 +339,22 @@ export function packLights(geometry, lights = [], environment, options = {}) {
|
|
|
309
339
|
for (const leaf of tree.leafOf)
|
|
310
340
|
extra.push(leaf);
|
|
311
341
|
}
|
|
342
|
+
const portals = environment && environment.power > 0 ? portalTriangles(geometry) : { triangles: [], lights: [] };
|
|
343
|
+
let portalTreeAt = 0, portalListAt = 0;
|
|
344
|
+
if (portals.triangles.length) {
|
|
345
|
+
const tree = buildLightTree(portals.lights);
|
|
346
|
+
portalTreeAt = base + extra.length;
|
|
347
|
+
portalListAt = portalTreeAt + tree.listAt;
|
|
348
|
+
// The leaves list window numbers; the kernel wants the triangles they stand for.
|
|
349
|
+
for (let k = tree.listAt; k < tree.words.length; k += 4)
|
|
350
|
+
tree.words[k] = portals.triangles[tree.words[k]];
|
|
351
|
+
for (const word of tree.words)
|
|
352
|
+
extra.push(word);
|
|
353
|
+
}
|
|
312
354
|
return {
|
|
355
|
+
portalTreeAt,
|
|
356
|
+
portalListAt,
|
|
357
|
+
portalCount: portals.triangles.length,
|
|
313
358
|
localCount,
|
|
314
359
|
localPick: localCount > 0 ? floats[(localCount - 1) * LIGHT_WORDS + 1] : 0,
|
|
315
360
|
treeAt,
|
package/dist/lights.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lights.js","sourceRoot":"","sources":["../src/lights.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"lights.js","sourceRoot":"","sources":["../src/lights.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAkB,MAAM,gBAAgB,CAAC;AAGhE;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG;IACxB,oDAAoD;IACpD,IAAI,EAAE,CAAC;IACP,WAAW,EAAE,CAAC;IACd,KAAK,EAAE,CAAC;IACR,IAAI,EAAE,CAAC;IACP,oGAAoG;IACpG,IAAI,EAAE,CAAC;IACP,4DAA4D;IAC5D,WAAW,EAAE,CAAC;CACN,CAAC;AAEX,wEAAwE;AACxE,MAAM,CAAC,MAAM,WAAW,GAAG,EAAE,CAAC;AAE9B,0FAA0F;AAC1F,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC;AACpC,iHAAiH;AACjH,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,CAAC;AAuD/B;;;;GAIG;AACH,MAAM,UAAU,eAAe,CAAC,QAAwB;IACtD,MAAM,OAAO,GAAG,QAAQ,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,YAAY,GAAG,CAAC,IAAI,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,CAAC;IAC7F,MAAM,SAAS,GAAa,EAAE,EAAE,MAAM,GAAgB,EAAE,CAAC;IAEzD,KAAK,IAAI,QAAQ,GAAG,CAAC,EAAE,QAAQ,GAAG,QAAQ,CAAC,aAAa,EAAE,QAAQ,EAAE,EAAE,CAAC;QACrE,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;YAAE,SAAS;QAErD,MAAM,EAAE,GAAG,QAAQ,GAAG,CAAC,CAAC;QACxB,MAAM,IAAI,GAAG,UAAU,CAAC,QAAQ,CAAC,SAAS,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC;QAEpD,IAAI,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC;YAAE,SAAS;QAE1B,MAAM,MAAM,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACrF,MAAM,MAAM,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QAEjD,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACzB,MAAM,CAAC,IAAI,CAAC;YACV,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC3E,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC5E,KAAK,EAAE,IAAI;YACX,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;YACf,MAAM,EAAE,IAAI,CAAC,EAAE;YACf,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG,CAAC;YACnB,OAAO,EAAE,CAAC,GAAG,IAAI;SAClB,CAAC,CAAC;IACL,CAAC;IAED,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC;AAC/B,CAAC;AAED,MAAM,SAAS,GAAG,CAAC,KAAwB,EAAE,EAAE,CAAC,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;AAE1G,kDAAkD;AAClD,SAAS,UAAU,CAAC,SAAuB,EAAE,MAAc;IACzD,MAAM,EAAE,GAAG,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,SAAS,CAAC,MAAM,CAAC,EAAE,EAAE,GAAG,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IACzG,MAAM,EAAE,GAAG,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IACzD,MAAM,EAAE,GAAG,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,SAAS,CAAC,MAAM,CAAC,EAAE,EAAE,GAAG,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IACzG,MAAM,EAAE,GAAG,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAEzD,OAAO,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;AAC7E,CAAC;AAED,SAAS,SAAS,CAAC,MAAyB;IAC1C,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;IAE3D,OAAO,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AAC/F,CAAC;AAED,MAAM,KAAK,GAAG,CAAC,KAAwB,EAAE,MAAc,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC;AAYtH,SAAS,WAAW,CAAC,SAAuB;IAC1C,IAAI,CAAC,SAAS,CAAC,MAAM;QAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;IAE/D,MAAM,GAAG,GAAG,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;IAC3C,MAAM,IAAI,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC;IAE/C,KAAK,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,SAAS,CAAC,MAAM,EAAE,EAAE,IAAI,CAAC,EAAE,CAAC;QAChD,KAAK,IAAI,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC;YACpC,GAAG,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,SAAS,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC;YACtD,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,SAAS,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC;QAC1D,CAAC;IACH,CAAC;IAED,MAAM,MAAM,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IACnE,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IAElF,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AACrD,CAAC;AAED;;;GAGG;AACH,SAAS,KAAK,CAAC,QAA2B,EAAE,MAAc;IACxD,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAE5F,OAAO,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;AAClD,CAAC;AAaD,MAAM,OAAO,GAAG,CAAC,MAAkB,EAAE,EAAE,CAAC,CAAC;IACvC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3D,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;CAC7D,CAAC,CAAC;AAEH;;;GAGG;AACH,SAAS,iBAAiB,CAAC,QAAwB,EAAE,MAAc;IACjE,MAAM,UAAU,GAAgB,EAAE,CAAC;IAEnC,KAAK,IAAI,QAAQ,GAAG,CAAC,EAAE,QAAQ,GAAG,QAAQ,CAAC,aAAa,EAAE,QAAQ,EAAE,EAAE,CAAC;QACrE,MAAM,QAAQ,GAAG,QAAQ,CAAC,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;QAClD,MAAM,QAAQ,GAAG,QAAQ,CAAC,gBAAgB,CAAC;QAE3C,IAAI,QAAQ,GAAG,CAAC,IAAI,QAAQ,CAAC,MAAM;YAAE,SAAS;QAE9C,MAAM,IAAI,GAAG,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,GAAG,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC;QAC3F,MAAM,IAAI,GAAG,UAAU,CAAC,QAAQ,CAAC,SAAS,EAAE,QAAQ,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;QAE9D,IAAI,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC;YAAE,SAAS;QAEzC,MAAM,EAAE,GAAG,QAAQ,GAAG,CAAC,CAAC;QAExB,MAAM,QAAQ,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CACpC,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,GAAG,IAAI,CAAC,GAAG,QAAQ,CAAC,SAAS,CAAC,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,QAAQ,CAAC,SAAS,CAAC,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAE/G,MAAM,CAAC,GAAG,QAAQ,CAAC,SAAS,CAAC;QAC7B,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;QAC7E,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;QAE7E,UAAU,CAAC,IAAI,CAAC;YACd,IAAI,EAAE,UAAU,CAAC,IAAI;YACrB,gGAAgG;YAChG,MAAM,EAAE,IAAI,GAAG,IAAI,GAAG,KAAK,CAAC,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC;YAClD,OAAO,EAAE,CAAC,GAAG,IAAI;YACjB,gEAAgE;YAChE,IAAI,EAAE;gBACJ,GAAG,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;gBACzE,KAAK,EAAE,IAAI,GAAG,IAAI;gBAClB,IAAI,EAAE,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC9G,MAAM,EAAE,IAAI,CAAC,EAAE;gBACf,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG,CAAC;gBACnB,OAAO,EAAE,CAAC,GAAG,IAAI;aAClB;YACD,KAAK,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;gBACtB,KAAK,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,IAAI,CAAC;gBAC5B,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,QAAQ,CAAC;gBACzB,gFAAgF;gBAChF,KAAK,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,kBAAkB,CAAC;YACtC,CAAC;SACF,CAAC,CAAC;IACL,CAAC;IAED,OAAO,UAAU,CAAC;AACpB,CAAC;AAED;;;GAGG;AACH,SAAS,aAAa,CACpB,KAAsB,EAAE,MAAc,EAAE,OAAyB,EAAE,KAAe;IAClF,MAAM,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC;IAElC,IAAI,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IAElC,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;IAC5C,MAAM,OAAO,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC;IAEjC,IAAI,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IAEhC,8GAA8G;IAC9G,MAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAC/C,MAAM,OAAO,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,IAAI,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;IAEnE,+GAA+G;IAC/G,MAAM,IAAI,GAAG,SAAS,CAAC;QACrB,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;QACnC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;QACnC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;KAAC,CAAC,CAAC;IAExC,mHAAmH;IACnH,MAAM,KAAK,GAAG,KAAK,CAAC,UAAU,IAAI,KAAK,CAAC,IAAI,KAAK,eAAe,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,CAAC;IAE1F,MAAM,MAAM,GAAG,CAAC,KAAkB,EAAE,MAAoB,EAAE,EAAU,EAAE,IAAY,EAAE,EAAE;QACpF,KAAK,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC;QACjB,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC;QAC1B,MAAM,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC;QAChC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC;QACnC,MAAM,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC;QAC9B,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC;QAC1B,KAAK,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,KAAK,CAAC;IACzB,CAAC,CAAC;IAEF,IAAI,KAAK,CAAC,IAAI,KAAK,kBAAkB,EAAE,CAAC;QACtC,OAAO;YACL,IAAI,EAAE,UAAU,CAAC,WAAW;YAC5B,MAAM,EAAE,OAAO;YACf,KAAK,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,UAAU,CAAC,WAAW,CAAC;SAChF,CAAC;IACJ,CAAC;IAED,IAAI,KAAK,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;QAChC,OAAO;YACL,IAAI,EAAE,UAAU,CAAC,KAAK;YACtB,MAAM,EAAE,OAAO,GAAG,OAAO;YACzB,IAAI,EAAE,EAAE,GAAG,EAAE,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE;gBAC3G,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE;YACnC,KAAK,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,UAAU,CAAC,KAAK,CAAC;SAC1E,CAAC;IACJ,CAAC;IAED,IAAI,KAAK,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;QAC/B,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACpC,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QACnF,IAAI,MAAM,GAAG,CAAC,CAAC,CAAC;QAEhB,0FAA0F;QAC1F,IAAI,GAAG,KAAK,SAAS,IAAI,KAAK,CAAC,SAAS,EAAE,MAAM,KAAK,EAAE,EAAE,CAAC;YACxD,MAAM,GAAG,CAAC,OAAO,CAAC,SAAS,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC;YACjD,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,WAAW,CAAC,IAAI,YAAY,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;QAChF,CAAC;QAED,OAAO;YACL,IAAI,EAAE,UAAU,CAAC,IAAI;YACrB,qFAAqF;YACrF,MAAM,EAAE,OAAO,GAAG,OAAO,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC;YAC9E,yEAAyE;YACzE,IAAI,EAAE,EAAE,GAAG,EAAE,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;gBAChG,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE;YACjE,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE;gBACrB,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,UAAU,CAAC,IAAI,CAAC,CAAC;gBAC3C,MAAM,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,KAAK,CAAC;gBACxB,MAAM,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;gBAE/D,IAAI,MAAM,IAAI,CAAC,EAAE,CAAC;oBAChB,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC;oBACvB,KAAK,CAAC,EAAE,GAAG,EAAE,CAAC,IAAI,aAAa,CAAC;gBAClC,CAAC;YACH,CAAC;SACF,CAAC;IACJ,CAAC;IAED,IAAI,KAAK,CAAC,IAAI,KAAK,eAAe,EAAE,CAAC;QACnC,MAAM,MAAM,GAAG,KAAK,CAAC,WAAW,CAAC;QACjC,8FAA8F;QAC9F,MAAM,KAAK,GAAG,SAAS,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC3D,MAAM,EAAE,GAAG,SAAS,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACxD,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;QAEzD,MAAM,IAAI,GAAG,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,EAAE,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;QAE1E,MAAM,MAAM,GAAG,SAAS,CAAC;YACvB,KAAK,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;SAAC,CAAC,CAAC;QAElH,OAAO;YACL,IAAI,EAAE,UAAU,CAAC,IAAI;YACrB,MAAM,EAAE,OAAO,GAAG,IAAI,GAAG,QAAQ,IAAI,CAAC;YACtC,OAAO,EAAE,CAAC,GAAG,IAAI;YACjB,4FAA4F;YAC5F,IAAI,EAAE;gBACJ,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAC7D,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;gBAC3E,KAAK,EAAE,OAAO,GAAG,IAAI;gBACrB,IAAI,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;gBACvB,MAAM,EAAE,CAAC;gBACT,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG,CAAC;gBACnB,OAAO,EAAE,CAAC,GAAG,IAAI;aAClB;YACD,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE;gBACrB,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,UAAU,CAAC,IAAI,CAAC,CAAC;gBAC3C,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC;gBACnD,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC;YACnD,CAAC;SACF,CAAC;IACJ,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;GAKG;AACH,SAAS,YAAY,CAAC,MAAkC;IACtD,MAAM,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAC1C,IAAI,IAAI,GAAoB,IAAI,CAAC;IAEjC,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,IAAI,CAAC,CAAC,KAAK,CAAC,SAAS,GAAG,CAAC,CAAC;YAAE,SAAS;QAErC,4EAA4E;QAC5E,MAAM,QAAQ,GAAG,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC,EAAE,CAAC;QAE3C,IAAI,KAAK,CAAC,IAAI,KAAK,cAAc,EAAE,CAAC;YAClC,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,GAAG,CAAC,EAAE,OAAO,EAAE,EAAE,CAAC;gBAC7C,GAAG,CAAC,OAAO,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,QAAQ,CAAC;gBAChD,MAAM,CAAC,OAAO,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,QAAQ,CAAC;YACrD,CAAC;QACH,CAAC;QAED,IAAI,KAAK,CAAC,IAAI,KAAK,iBAAiB,EAAE,CAAC;YACrC,gHAAgH;YAChH,IAAI,KAAK,SAAS,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;YAEnC,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,GAAG,CAAC,EAAE,OAAO,EAAE,EAAE,CAAC;gBAC7C,GAAG,CAAC,OAAO,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,QAAQ,CAAC;gBAChD,MAAM,CAAC,OAAO,CAAC,IAAI,KAAK,CAAC,WAAW,CAAC,OAAO,CAAC,GAAG,QAAQ,CAAC;YAC3D,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;AAClD,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,UAAU,CACxB,QAAwB,EACxB,SAAqC,EAAE,EACvC,WAAsC,EACtC,UAA4B,EAAE;IAC9B,MAAM,MAAM,GAAG,WAAW,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;IAC/C,MAAM,KAAK,GAAG,iBAAiB,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAClD,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,MAAM,QAAQ,GAAG,MAAM;SACpB,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;SAC1D,MAAM,CAAC,CAAC,KAAK,EAAsB,EAAE,CAAC,KAAK,KAAK,IAAI,CAAC,CAAC;IAEzD,MAAM,WAAW,GAAgB,WAAW,IAAI,WAAW,CAAC,KAAK,GAAG,CAAC;QACnE,CAAC,CAAC,CAAC;gBACD,IAAI,EAAE,UAAU,CAAC,WAAW;gBAC5B,MAAM,EAAE,WAAW,CAAC,KAAK;gBACzB,KAAK,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;oBACtB,KAAK,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,WAAW,CAAC;oBACnC,gGAAgG;oBAChG,KAAK,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,kBAAkB,CAAC;gBACtC,CAAC;aACF,CAAC;QACF,CAAC,CAAC,EAAE,CAAC;IAEP,yGAAyG;IACzG,MAAM,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IAC3D,MAAM,OAAO,GAAG,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IAC9D,MAAM,UAAU,GAAG,CAAC,GAAG,KAAK,EAAE,GAAG,KAAK,EAAE,GAAG,OAAO,EAAE,GAAG,WAAW,CAAC,CAAC;IACpE,MAAM,UAAU,GAAG,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;IAC/C,MAAM,KAAK,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,SAAS,EAAE,EAAE,CAAC,GAAG,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IAC/E,MAAM,OAAO,GAAG,IAAI,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,UAAU,CAAC,MAAM,CAAC,GAAG,WAAW,GAAG,CAAC,CAAC,CAAC;IAClF,MAAM,KAAK,GAAG,IAAI,WAAW,CAAC,OAAO,CAAC,CAAC;IACvC,MAAM,MAAM,GAAG,IAAI,YAAY,CAAC,OAAO,CAAC,CAAC;IACzC,IAAI,UAAU,GAAG,CAAC,CAAC;IAEnB,UAAU,CAAC,OAAO,CAAC,CAAC,SAAS,EAAE,KAAK,EAAE,EAAE;QACtC,MAAM,EAAE,GAAG,KAAK,GAAG,WAAW,CAAC;QAC/B,MAAM,WAAW,GAAG,SAAS,CAAC,MAAM,GAAG,KAAK,CAAC;QAE7C,UAAU,IAAI,WAAW,CAAC;QAC1B,SAAS,CAAC,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC;QACnC,iFAAiF;QACjF,MAAM,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,KAAK,KAAK,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC;QAClE,MAAM,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,WAAW,GAAG,CAAC,SAAS,CAAC,OAAO,IAAI,CAAC,CAAC,CAAC;IAC1D,CAAC,CAAC,CAAC;IAEH,MAAM,eAAe,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAC/E,MAAM,IAAI,GAAG,OAAO,CAAC,SAAS,IAAI,CAAC,CAAC;IACpC,MAAM,KAAK,GAAG,IAAI,GAAG,KAAK,CAAC,MAAM,CAAC;IAElC,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,UAAU,CAAC,MAAM,EAAE,KAAK,EAAE;QAAE,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,WAAW,GAAG,CAAC,CAAC,CAAC,CAAC;IAEnG,MAAM,WAAW,GAAG,IAAI,GAAG,KAAK,CAAC,MAAM,CAAC;IAExC,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,KAAK,CAAC,MAAM,EAAE,KAAK,EAAE;QAAE,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,WAAW,GAAG,CAAC,CAAC,CAAC,CAAC;IAE9F,IAAI,MAAM,GAAG,CAAC,EAAE,QAAQ,GAAG,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC;IAEzC,IAAI,UAAU,GAAG,CAAC,EAAE,CAAC;QACnB,MAAM,IAAI,GAAG,cAAc,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC,SAAS,CAAC,IAAiB,CAAC,CAAC,CAAC;QAE3G,MAAM,GAAG,IAAI,GAAG,KAAK,CAAC,MAAM,CAAC;QAC7B,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;QAC9B,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK;YAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAChD,QAAQ,GAAG,IAAI,GAAG,KAAK,CAAC,MAAM,CAAC;QAC/B,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,MAAM;YAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACnD,CAAC;IAED,MAAM,OAAO,GAAG,WAAW,IAAI,WAAW,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;IACjH,IAAI,YAAY,GAAG,CAAC,EAAE,YAAY,GAAG,CAAC,CAAC;IAEvC,IAAI,OAAO,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC;QAC7B,MAAM,IAAI,GAAG,cAAc,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAE5C,YAAY,GAAG,IAAI,GAAG,KAAK,CAAC,MAAM,CAAC;QACnC,YAAY,GAAG,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC;QAE1C,iFAAiF;QACjF,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC;YAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QAC1G,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK;YAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAClD,CAAC;IAED,OAAO;QACL,YAAY;QACZ,YAAY;QACZ,WAAW,EAAE,OAAO,CAAC,SAAS,CAAC,MAAM;QACrC,UAAU;QACV,SAAS,EAAE,UAAU,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,UAAU,GAAG,CAAC,CAAC,GAAG,WAAW,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC1E,MAAM;QACN,QAAQ;QACR,MAAM;QACN,KAAK;QACL,WAAW;QACX,OAAO;QACP,KAAK,EAAE,UAAU,CAAC,MAAM;QACxB,SAAS,EAAE,KAAK,CAAC,MAAM;QACvB,OAAO,EAAE,YAAY,CAAC,MAAM,CAAC;QAC7B,eAAe;QACf,UAAU,EAAE,IAAI,WAAW,CAAC,KAAK,CAAC;KACnC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The weights the OIDN denoiser loads by default: the HDR ray tracing network that takes the albedo and the normal as
|
|
3
|
+
* well as the colour (RenderKit's oidn-weights, Apache-2.0), shipped with the package. A bundler that moves the package
|
|
4
|
+
* elsewhere, or an app that serves its own copy, passes `denoiser.oidnWeights` instead.
|
|
5
|
+
*/
|
|
6
|
+
export declare const DEFAULT_OIDN_WEIGHTS: string;
|
|
7
|
+
/**
|
|
8
|
+
* Reads the accumulation into the three images OIDN takes, and back.
|
|
9
|
+
*
|
|
10
|
+
* The network was trained on images whose average sits near middle grey, which its own CPU path reaches by an
|
|
11
|
+
* automatic exposure; on the device that scale is left to the caller. `meter` takes the mean of the logarithms of the
|
|
12
|
+
* image's luminance over a grid, as the lens pass's meter does, `prepare` writes the colour times the scale that brings
|
|
13
|
+
* it to middle grey, the albedo (diffuse and specular, so a mirror is not taken for black) and the normal, and `finish`
|
|
14
|
+
* divides the network's output by the same scale and mixes it with the traced image by the strength.
|
|
15
|
+
*/
|
|
16
|
+
export declare const OIDN_WGSL: string;
|
|
17
|
+
/**
|
|
18
|
+
* Open Image Denoise (Intel's neural denoiser, through oidn-webgpu): the image, its albedo and its normal through a
|
|
19
|
+
* U-Net trained on path traced images, entirely on the device. It keeps texture and fine detail that a hand-made
|
|
20
|
+
* filter blurs, at the cost of a fraction of a second for a large image.
|
|
21
|
+
*/
|
|
22
|
+
export declare class OidnPass {
|
|
23
|
+
private readonly device;
|
|
24
|
+
private readonly layout;
|
|
25
|
+
private readonly meter;
|
|
26
|
+
private readonly prepare;
|
|
27
|
+
private readonly finish;
|
|
28
|
+
private readonly params;
|
|
29
|
+
private readonly scale;
|
|
30
|
+
private buffers;
|
|
31
|
+
private width;
|
|
32
|
+
private height;
|
|
33
|
+
/** The denoised radiance, one vec4 per pixel, once `run` has resolved. */
|
|
34
|
+
output: GPUBuffer | null;
|
|
35
|
+
constructor(device: GPUDevice);
|
|
36
|
+
private resize;
|
|
37
|
+
private group;
|
|
38
|
+
private dispatch;
|
|
39
|
+
/**
|
|
40
|
+
* Denoises what `accumulation` holds into `output`. The images are read from it as it stands on the queue when this
|
|
41
|
+
* is called; the promise resolves once the result has been written, and rejects when the network cannot load.
|
|
42
|
+
*/
|
|
43
|
+
run(accumulation: GPUBuffer, width: number, height: number, strength: number, weights: string, signal?: {
|
|
44
|
+
cancelled: boolean;
|
|
45
|
+
}): Promise<boolean>;
|
|
46
|
+
destroy(): void;
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=oidnPass.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"oidnPass.d.ts","sourceRoot":"","sources":["../src/oidnPass.ts"],"names":[],"mappings":"AAIA;;;;GAIG;AACH,eAAO,MAAM,oBAAoB,QAAiE,CAAC;AAKnG;;;;;;;;GAQG;AACH,eAAO,MAAM,SAAS,QAgGrB,CAAC;AAsBF;;;;GAIG;AACH,qBAAa,QAAQ;IAaP,OAAO,CAAC,QAAQ,CAAC,MAAM;IAZnC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAqB;IAC5C,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAqB;IAC3C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAqB;IAC7C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAqB;IAC5C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAY;IACnC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAY;IAClC,OAAO,CAAC,OAAO,CAAmB;IAClC,OAAO,CAAC,KAAK,CAAK;IAClB,OAAO,CAAC,MAAM,CAAK;IACnB,0EAA0E;IAC1E,MAAM,EAAE,SAAS,GAAG,IAAI,CAAQ;gBAEH,MAAM,EAAE,SAAS;IA0B9C,OAAO,CAAC,MAAM;IAed,OAAO,CAAC,KAAK;IAcb,OAAO,CAAC,QAAQ;IAUhB;;;OAGG;IACG,GAAG,CAAC,YAAY,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EACjG,MAAM,CAAC,EAAE;QAAE,SAAS,EAAE,OAAO,CAAA;KAAE,GAAG,OAAO,CAAC,OAAO,CAAC;IAgDpD,OAAO;CAMR"}
|
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":"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"}
|
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",
|