@ifc-lite/renderer 1.30.0 → 1.32.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/dist/aabb-edges.d.ts +6 -0
- package/dist/aabb-edges.d.ts.map +1 -0
- package/dist/aabb-edges.js +34 -0
- package/dist/aabb-edges.js.map +1 -0
- package/dist/camera-fit-policy.d.ts +6 -0
- package/dist/camera-fit-policy.d.ts.map +1 -1
- package/dist/camera-fit-policy.js +21 -1
- package/dist/camera-fit-policy.js.map +1 -1
- package/dist/deviation/deviation-pipeline.d.ts +15 -1
- package/dist/deviation/deviation-pipeline.d.ts.map +1 -1
- package/dist/deviation/deviation-pipeline.js +33 -16
- package/dist/deviation/deviation-pipeline.js.map +1 -1
- package/dist/deviation/deviation-shader.wgsl.d.ts +1 -1
- package/dist/deviation/deviation-shader.wgsl.d.ts.map +1 -1
- package/dist/deviation/deviation-shader.wgsl.js +11 -2
- package/dist/deviation/deviation-shader.wgsl.js.map +1 -1
- package/dist/index.d.ts +32 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +68 -1
- package/dist/index.js.map +1 -1
- package/dist/picking-manager.d.ts.map +1 -1
- package/dist/picking-manager.js +9 -7
- package/dist/picking-manager.js.map +1 -1
- package/dist/pointcloud/point-cloud-node.d.ts +13 -2
- package/dist/pointcloud/point-cloud-node.d.ts.map +1 -1
- package/dist/pointcloud/point-cloud-node.js +50 -20
- package/dist/pointcloud/point-cloud-node.js.map +1 -1
- package/dist/section-2d-overlay.d.ts +23 -0
- package/dist/section-2d-overlay.d.ts.map +1 -1
- package/dist/section-2d-overlay.js +97 -9
- package/dist/section-2d-overlay.js.map +1 -1
- package/dist/shaders/main.wgsl.d.ts +1 -1
- package/dist/shaders/main.wgsl.d.ts.map +1 -1
- package/dist/shaders/main.wgsl.js +14 -1
- package/dist/shaders/main.wgsl.js.map +1 -1
- package/dist/types.d.ts +6 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +2 -2
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Build a flat line-list (`[x,y,z, …]`, 12 edges = 24 vertices) for the 12 edges
|
|
3
|
+
* of a world-space AABB. Used to draw the clash-overlap wireframe box (#1277).
|
|
4
|
+
*/
|
|
5
|
+
export declare function aabbEdgeLineList(min: readonly [number, number, number], max: readonly [number, number, number]): Float32Array;
|
|
6
|
+
//# sourceMappingURL=aabb-edges.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"aabb-edges.d.ts","sourceRoot":"","sources":["../src/aabb-edges.ts"],"names":[],"mappings":"AAIA;;;GAGG;AACH,wBAAgB,gBAAgB,CAC9B,GAAG,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EACtC,GAAG,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,GACrC,YAAY,CAqBd"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
2
|
+
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
3
|
+
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
|
|
4
|
+
/**
|
|
5
|
+
* Build a flat line-list (`[x,y,z, …]`, 12 edges = 24 vertices) for the 12 edges
|
|
6
|
+
* of a world-space AABB. Used to draw the clash-overlap wireframe box (#1277).
|
|
7
|
+
*/
|
|
8
|
+
export function aabbEdgeLineList(min, max) {
|
|
9
|
+
const [x0, y0, z0] = min;
|
|
10
|
+
const [x1, y1, z1] = max;
|
|
11
|
+
// 8 corners
|
|
12
|
+
const c = [
|
|
13
|
+
[x0, y0, z0], [x1, y0, z0], [x1, y1, z0], [x0, y1, z0], // z0 face
|
|
14
|
+
[x0, y0, z1], [x1, y0, z1], [x1, y1, z1], [x0, y1, z1], // z1 face
|
|
15
|
+
];
|
|
16
|
+
// 12 edges as corner-index pairs
|
|
17
|
+
const edges = [
|
|
18
|
+
[0, 1], [1, 2], [2, 3], [3, 0], // z0 ring
|
|
19
|
+
[4, 5], [5, 6], [6, 7], [7, 4], // z1 ring
|
|
20
|
+
[0, 4], [1, 5], [2, 6], [3, 7], // verticals
|
|
21
|
+
];
|
|
22
|
+
const out = new Float32Array(edges.length * 2 * 3);
|
|
23
|
+
let o = 0;
|
|
24
|
+
for (const [a, b] of edges) {
|
|
25
|
+
out[o++] = c[a][0];
|
|
26
|
+
out[o++] = c[a][1];
|
|
27
|
+
out[o++] = c[a][2];
|
|
28
|
+
out[o++] = c[b][0];
|
|
29
|
+
out[o++] = c[b][1];
|
|
30
|
+
out[o++] = c[b][2];
|
|
31
|
+
}
|
|
32
|
+
return out;
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=aabb-edges.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"aabb-edges.js","sourceRoot":"","sources":["../src/aabb-edges.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AAE/D;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAC9B,GAAsC,EACtC,GAAsC;IAEtC,MAAM,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC;IACzB,MAAM,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC;IACzB,YAAY;IACZ,MAAM,CAAC,GAAG;QACR,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,UAAU;QAClE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,UAAU;KACnE,CAAC;IACF,iCAAiC;IACjC,MAAM,KAAK,GAAG;QACZ,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,UAAU;QAC1C,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,UAAU;QAC1C,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,YAAY;KAC7C,CAAC;IACF,MAAM,GAAG,GAAG,IAAI,YAAY,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;IACnD,IAAI,CAAC,GAAG,CAAC,CAAC;IACV,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,KAAK,EAAE,CAAC;QAC3B,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC3D,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7D,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC"}
|
|
@@ -50,6 +50,12 @@ export interface PickFitPolicyOptions {
|
|
|
50
50
|
* at the default; exposed for tests that pin the threshold behaviour.
|
|
51
51
|
*/
|
|
52
52
|
linearAspectThreshold?: number;
|
|
53
|
+
/**
|
|
54
|
+
* Override the minimum longest-axis extent (world units) at/above which the
|
|
55
|
+
* linear policy is allowed to apply. Production should leave this at the
|
|
56
|
+
* default; exposed for tests that pin the size-floor behaviour.
|
|
57
|
+
*/
|
|
58
|
+
linearMinLongest?: number;
|
|
53
59
|
}
|
|
54
60
|
/**
|
|
55
61
|
* Compute the fit pose for a scene's bounding box. Pure function — no
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"camera-fit-policy.d.ts","sourceRoot":"","sources":["../src/camera-fit-policy.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"camera-fit-policy.d.ts","sourceRoot":"","sources":["../src/camera-fit-policy.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AAoC3C,MAAM,WAAW,OAAO;IACtB,GAAG,EAAE,IAAI,CAAC;IACV,GAAG,EAAE,IAAI,CAAC;CACX;AAED,MAAM,MAAM,aAAa,GAAG,SAAS,GAAG,QAAQ,CAAC;AAEjD,MAAM,WAAW,SAAS;IACxB,qEAAqE;IACrE,IAAI,EAAE,aAAa,CAAC;IACpB,2EAA2E;IAC3E,MAAM,EAAE,MAAM,CAAC;IACf,oCAAoC;IACpC,MAAM,EAAE,IAAI,CAAC;IACb,mCAAmC;IACnC,QAAQ,EAAE,IAAI,CAAC;IACf,kEAAkE;IAClE,EAAE,EAAE,IAAI,CAAC;IACT,sEAAsE;IACtE,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,oBAAoB;IACnC,yCAAyC;IACzC,IAAI,EAAE,MAAM,CAAC;IACb,oEAAoE;IACpE,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB;;;OAGG;IACH,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B;;;;OAIG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED;;;;;;;;;GASG;AACH,wBAAgB,aAAa,CAC3B,MAAM,EAAE,OAAO,EACf,OAAO,EAAE,oBAAoB,GAC5B,SAAS,CA8FX"}
|
|
@@ -3,6 +3,20 @@
|
|
|
3
3
|
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
|
|
4
4
|
/** Aspect ratio above which a model is treated as linear infrastructure. */
|
|
5
5
|
const LINEAR_ASPECT_THRESHOLD = 50;
|
|
6
|
+
/**
|
|
7
|
+
* Minimum longest-axis extent (world units, i.e. metres) for the linear
|
|
8
|
+
* policy to apply. The linear "look down the longest axis from inside the
|
|
9
|
+
* bbox" pose only makes sense for genuine infrastructure (railway / road
|
|
10
|
+
* alignments are hundreds of metres). A small but high-aspect element — a
|
|
11
|
+
* single 4.86 m reinforcing bar is aspect ~130:1 — would otherwise get the
|
|
12
|
+
* linear pose, which places the camera *inside* its bounding box looking
|
|
13
|
+
* end-on, so the bar projects to a sub-pixel smear and reads as "nothing
|
|
14
|
+
* rendered" (issue #1350). Below this floor the compact SE-isometric pose
|
|
15
|
+
* frames the whole element and keeps it visible. Picked so the longest
|
|
16
|
+
* building elements (rebar, steel members, long beams ≲ tens of metres)
|
|
17
|
+
* stay compact while alignments (≥ hundreds of metres) stay linear.
|
|
18
|
+
*/
|
|
19
|
+
const LINEAR_MIN_LONGEST = 100;
|
|
6
20
|
/**
|
|
7
21
|
* Target on-screen projection for the smallest non-degenerate dim, in
|
|
8
22
|
* pixels. The linear-policy distance is chosen so the shortest meaningful
|
|
@@ -39,7 +53,13 @@ export function pickFitPolicy(bounds, options) {
|
|
|
39
53
|
const shortest = Math.min(sizeX, sizeY, sizeZ);
|
|
40
54
|
const aspect = longest / Math.max(shortest, longest * 1e-6);
|
|
41
55
|
const threshold = options.linearAspectThreshold ?? LINEAR_ASPECT_THRESHOLD;
|
|
42
|
-
|
|
56
|
+
const minLongest = options.linearMinLongest ?? LINEAR_MIN_LONGEST;
|
|
57
|
+
// Compact unless the bbox is BOTH high-aspect AND large enough to be real
|
|
58
|
+
// infrastructure. The size floor stops a small high-aspect element (a
|
|
59
|
+
// single rebar / steel member) from getting the "look down the axis from
|
|
60
|
+
// inside the bbox" linear pose, which renders it end-on and invisible
|
|
61
|
+
// (issue #1350).
|
|
62
|
+
if (aspect <= threshold || longest < minLongest) {
|
|
43
63
|
// Compact: reproduce the legacy SE isometric pose 1:1 so building
|
|
44
64
|
// models frame exactly as before.
|
|
45
65
|
const distance = longest * 2.0;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"camera-fit-policy.js","sourceRoot":"","sources":["../src/camera-fit-policy.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AA2B/D,4EAA4E;AAC5E,MAAM,uBAAuB,GAAG,EAAE,CAAC;AAEnC;;;;;;;GAOG;AACH,MAAM,qBAAqB,GAAG,EAAE,CAAC;AAEjC,uEAAuE;AACvE,MAAM,mBAAmB,GAAG,CAAC,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;AAEjD,6EAA6E;AAC7E,MAAM,yBAAyB,GAAG,GAAG,CAAC;
|
|
1
|
+
{"version":3,"file":"camera-fit-policy.js","sourceRoot":"","sources":["../src/camera-fit-policy.ts"],"names":[],"mappings":"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"}
|
|
@@ -21,7 +21,15 @@ export declare class DeviationPipeline {
|
|
|
21
21
|
private bvhTriangleCount;
|
|
22
22
|
private bvhNodeCount;
|
|
23
23
|
private bvhBounds;
|
|
24
|
-
|
|
24
|
+
/**
|
|
25
|
+
* One uniform buffer per `dispatch()` call within a compute batch. They
|
|
26
|
+
* MUST be distinct: every chunk's dispatch is recorded into one encoder and
|
|
27
|
+
* submitted once, but `queue.writeBuffer` runs on the queue BEFORE that
|
|
28
|
+
* single submit — so a single shared buffer would hold only the LAST
|
|
29
|
+
* chunk's params when every pass executes. Freed by `releaseTransientParams`
|
|
30
|
+
* after `onSubmittedWorkDone()`.
|
|
31
|
+
*/
|
|
32
|
+
private transientParamsBuffers;
|
|
25
33
|
constructor(device: GPUDevice);
|
|
26
34
|
/**
|
|
27
35
|
* Upload the per-triangle BVH to the GPU. Replaces any previous
|
|
@@ -44,6 +52,12 @@ export declare class DeviationPipeline {
|
|
|
44
52
|
*/
|
|
45
53
|
dispatch(encoder: GPUCommandEncoder, input: DeviationDispatchInput): boolean;
|
|
46
54
|
private disposeBvh;
|
|
55
|
+
/**
|
|
56
|
+
* Destroy the per-dispatch uniform buffers from the last compute batch.
|
|
57
|
+
* Call after `queue.onSubmittedWorkDone()` so the GPU is finished reading
|
|
58
|
+
* them. Safe to call repeatedly.
|
|
59
|
+
*/
|
|
60
|
+
releaseTransientParams(): void;
|
|
47
61
|
destroy(): void;
|
|
48
62
|
}
|
|
49
63
|
//# sourceMappingURL=deviation-pipeline.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deviation-pipeline.d.ts","sourceRoot":"","sources":["../../src/deviation/deviation-pipeline.ts"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAc3D,MAAM,WAAW,sBAAsB;IACrC;;;sCAGkC;IAClC,eAAe,EAAE,SAAS,CAAC;IAC3B,6DAA6D;IAC7D,gBAAgB,EAAE,SAAS,CAAC;IAC5B,mCAAmC;IACnC,UAAU,EAAE,MAAM,CAAC;IACnB,6DAA6D;IAC7D,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,MAAM,CAAY;IAC1B,OAAO,CAAC,QAAQ,CAAqB;IACrC,OAAO,CAAC,eAAe,CAAqB;IAC5C,OAAO,CAAC,cAAc,CAA0B;IAChD,OAAO,CAAC,eAAe,CAA0B;IACjD,OAAO,CAAC,gBAAgB,CAAK;IAC7B,OAAO,CAAC,YAAY,CAAK;IACzB,OAAO,CAAC,SAAS,CAA4C;IAC7D,OAAO,CAAC,
|
|
1
|
+
{"version":3,"file":"deviation-pipeline.d.ts","sourceRoot":"","sources":["../../src/deviation/deviation-pipeline.ts"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAc3D,MAAM,WAAW,sBAAsB;IACrC;;;sCAGkC;IAClC,eAAe,EAAE,SAAS,CAAC;IAC3B,6DAA6D;IAC7D,gBAAgB,EAAE,SAAS,CAAC;IAC5B,mCAAmC;IACnC,UAAU,EAAE,MAAM,CAAC;IACnB,6DAA6D;IAC7D,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,MAAM,CAAY;IAC1B,OAAO,CAAC,QAAQ,CAAqB;IACrC,OAAO,CAAC,eAAe,CAAqB;IAC5C,OAAO,CAAC,cAAc,CAA0B;IAChD,OAAO,CAAC,eAAe,CAA0B;IACjD,OAAO,CAAC,gBAAgB,CAAK;IAC7B,OAAO,CAAC,YAAY,CAAK;IACzB,OAAO,CAAC,SAAS,CAA4C;IAC7D;;;;;;;OAOG;IACH,OAAO,CAAC,sBAAsB,CAAmB;gBAErC,MAAM,EAAE,SAAS;IAqB7B;;;;OAIG;IACH,SAAS,CAAC,GAAG,EAAE,iBAAiB,GAAG,IAAI;IAuCvC,MAAM,IAAI,OAAO;IAIjB,WAAW,IAAI;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,iBAAiB,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAA;KAAE;IAQvG;;;;;;OAMG;IACH,QAAQ,CAAC,OAAO,EAAE,iBAAiB,EAAE,KAAK,EAAE,sBAAsB,GAAG,OAAO;IAmD5E,OAAO,CAAC,UAAU;IAOlB;;;;OAIG;IACH,sBAAsB,IAAI,IAAI;IAK9B,OAAO,IAAI,IAAI;CAIhB"}
|
|
@@ -33,7 +33,15 @@ export class DeviationPipeline {
|
|
|
33
33
|
bvhTriangleCount = 0;
|
|
34
34
|
bvhNodeCount = 0;
|
|
35
35
|
bvhBounds = null;
|
|
36
|
-
|
|
36
|
+
/**
|
|
37
|
+
* One uniform buffer per `dispatch()` call within a compute batch. They
|
|
38
|
+
* MUST be distinct: every chunk's dispatch is recorded into one encoder and
|
|
39
|
+
* submitted once, but `queue.writeBuffer` runs on the queue BEFORE that
|
|
40
|
+
* single submit — so a single shared buffer would hold only the LAST
|
|
41
|
+
* chunk's params when every pass executes. Freed by `releaseTransientParams`
|
|
42
|
+
* after `onSubmittedWorkDone()`.
|
|
43
|
+
*/
|
|
44
|
+
transientParamsBuffers = [];
|
|
37
45
|
constructor(device) {
|
|
38
46
|
this.device = device;
|
|
39
47
|
this.bindGroupLayout = device.createBindGroupLayout({
|
|
@@ -114,19 +122,19 @@ export class DeviationPipeline {
|
|
|
114
122
|
return false;
|
|
115
123
|
if (input.pointCount === 0)
|
|
116
124
|
return true;
|
|
117
|
-
//
|
|
118
|
-
//
|
|
119
|
-
//
|
|
120
|
-
//
|
|
121
|
-
//
|
|
122
|
-
//
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
}
|
|
129
|
-
|
|
125
|
+
// A FRESH uniform buffer per chunk. `queue.writeBuffer` is ordered on the
|
|
126
|
+
// queue ahead of the single `submit` that runs every chunk's compute pass,
|
|
127
|
+
// so reusing one cached buffer left every pass reading the LAST chunk's
|
|
128
|
+
// `pointCount` — the shorter final chunk — and every full chunk then
|
|
129
|
+
// early-returned its tail (`pi >= params.pointCount`), leaving those
|
|
130
|
+
// points' deviation at its zero init → rendered at the ramp centre
|
|
131
|
+
// (white) regardless of their true distance. Distinct buffers keep each
|
|
132
|
+
// pass's params intact; they're freed in `releaseTransientParams()`.
|
|
133
|
+
const paramsBuffer = this.device.createBuffer({
|
|
134
|
+
size: PARAMS_UNIFORM_BYTES,
|
|
135
|
+
usage: GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST,
|
|
136
|
+
});
|
|
137
|
+
this.transientParamsBuffers.push(paramsBuffer);
|
|
130
138
|
const params = new Uint32Array(PARAMS_UNIFORM_BYTES / 4);
|
|
131
139
|
const paramsF = new Float32Array(params.buffer);
|
|
132
140
|
params[0] = input.pointCount;
|
|
@@ -164,10 +172,19 @@ export class DeviationPipeline {
|
|
|
164
172
|
this.bvhNodesBuffer = null;
|
|
165
173
|
this.trianglesBuffer = null;
|
|
166
174
|
}
|
|
175
|
+
/**
|
|
176
|
+
* Destroy the per-dispatch uniform buffers from the last compute batch.
|
|
177
|
+
* Call after `queue.onSubmittedWorkDone()` so the GPU is finished reading
|
|
178
|
+
* them. Safe to call repeatedly.
|
|
179
|
+
*/
|
|
180
|
+
releaseTransientParams() {
|
|
181
|
+
for (const b of this.transientParamsBuffers)
|
|
182
|
+
b.destroy();
|
|
183
|
+
this.transientParamsBuffers = [];
|
|
184
|
+
}
|
|
167
185
|
destroy() {
|
|
168
186
|
this.disposeBvh();
|
|
169
|
-
this.
|
|
170
|
-
this.paramsBuffer = null;
|
|
187
|
+
this.releaseTransientParams();
|
|
171
188
|
}
|
|
172
189
|
}
|
|
173
190
|
//# sourceMappingURL=deviation-pipeline.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deviation-pipeline.js","sourceRoot":"","sources":["../../src/deviation/deviation-pipeline.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AAE/D;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AAEnE,OAAO,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAC;AAErE,sEAAsE;AACtE,MAAM,cAAc,GAAG,EAAE,CAAC;AAC1B,8DAA8D;AAC9D,MAAM,cAAc,GAAG,EAAE,CAAC;AAC1B;;;;GAIG;AACH,MAAM,oBAAoB,GAAG,EAAE,CAAC;AAgBhC,MAAM,OAAO,iBAAiB;IACpB,MAAM,CAAY;IAClB,QAAQ,CAAqB;IAC7B,eAAe,CAAqB;IACpC,cAAc,GAAqB,IAAI,CAAC;IACxC,eAAe,GAAqB,IAAI,CAAC;IACzC,gBAAgB,GAAG,CAAC,CAAC;IACrB,YAAY,GAAG,CAAC,CAAC;IACjB,SAAS,GAAuC,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"deviation-pipeline.js","sourceRoot":"","sources":["../../src/deviation/deviation-pipeline.ts"],"names":[],"mappings":"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"}
|
|
@@ -19,5 +19,5 @@
|
|
|
19
19
|
* Workgroup size 64 (one wavefront / warp on most desktop GPUs).
|
|
20
20
|
* Each invocation processes one point.
|
|
21
21
|
*/
|
|
22
|
-
export declare const deviationShaderSource = "\nstruct BvhNode {\n aabbMinX: f32, aabbMinY: f32, aabbMinZ: f32,\n // High bit: leaf flag. Low 31 bits: leaf=triStart, internal=leftChildIdx.\n leafOrLeft: u32,\n aabbMaxX: f32, aabbMaxY: f32, aabbMaxZ: f32,\n // Leaf=triCount, internal=rightChildIdx.\n countOrRight: u32,\n}\n\nstruct DeviationParams {\n pointCount: u32,\n pointStrideF32: u32, // floats between successive points in positions buffer\n positionOffsetF32: u32, // float offset of vec3 position within a point\n // Optional clip range \u2014 when nonzero, signs above + below are kept\n // but values past \u00B1maxRange are clamped (saves shader work for\n // points far outside the model).\n maxRange: f32,\n // Reserved padding to keep the struct 16-byte aligned for std140.\n _pad0: u32, _pad1: u32, _pad2: u32, _pad3: u32,\n}\n\n@group(0) @binding(0) var<storage, read> bvhNodes: array<BvhNode>;\n@group(0) @binding(1) var<storage, read> triangles: array<f32>;\n@group(0) @binding(2) var<storage, read> positions: array<f32>;\n@group(0) @binding(3) var<storage, read_write> deviations: array<f32>;\n@group(0) @binding(4) var<uniform> params: DeviationParams;\n\nconst LEAF_FLAG: u32 = 0x80000000u;\nconst STACK_SIZE: u32 = 64u;\n\n// Squared distance from point p to AABB [aabbMin, aabbMax].\n// Returns 0 if p is inside the box.\nfn distSqPointAabb(\n px: f32, py: f32, pz: f32,\n ax: f32, ay: f32, az: f32,\n bx: f32, by: f32, bz: f32,\n) -> f32 {\n let dx = max(max(ax - px, 0.0), px - bx);\n let dy = max(max(ay - py, 0.0), py - by);\n let dz = max(max(az - pz, 0.0), pz - bz);\n return dx * dx + dy * dy + dz * dz;\n}\n\nstruct ClosestResult {\n point: vec3<f32>,\n distSq: f32,\n}\n\n// Ericson, Real-Time Collision Detection \u00A75.1.5: closest point on\n// a triangle to an arbitrary point in space. Branches over the\n// Voronoi regions of the triangle (3 verts, 3 edges, interior).\nfn closestPointOnTriangle(p: vec3<f32>, a: vec3<f32>, b: vec3<f32>, c: vec3<f32>) -> ClosestResult {\n let ab = b - a;\n let ac = c - a;\n let ap = p - a;\n let d1 = dot(ab, ap);\n let d2 = dot(ac, ap);\n if (d1 <= 0.0 && d2 <= 0.0) {\n let diff = p - a;\n return ClosestResult(a, dot(diff, diff));\n }\n let bp = p - b;\n let d3 = dot(ab, bp);\n let d4 = dot(ac, bp);\n if (d3 >= 0.0 && d4 <= d3) {\n let diff = p - b;\n return ClosestResult(b, dot(diff, diff));\n }\n let vc = d1 * d4 - d3 * d2;\n if (vc <= 0.0 && d1 >= 0.0 && d3 <= 0.0) {\n let v = d1 / (d1 - d3);\n let q = a + v * ab;\n let diff = p - q;\n return ClosestResult(q, dot(diff, diff));\n }\n let cp = p - c;\n let d5 = dot(ab, cp);\n let d6 = dot(ac, cp);\n if (d6 >= 0.0 && d5 <= d6) {\n let diff = p - c;\n return ClosestResult(c, dot(diff, diff));\n }\n let vb = d5 * d2 - d1 * d6;\n if (vb <= 0.0 && d2 >= 0.0 && d6 <= 0.0) {\n let w = d2 / (d2 - d6);\n let q = a + w * ac;\n let diff = p - q;\n return ClosestResult(q, dot(diff, diff));\n }\n let va = d3 * d6 - d5 * d4;\n if (va <= 0.0 && (d4 - d3) >= 0.0 && (d5 - d6) >= 0.0) {\n let w = (d4 - d3) / ((d4 - d3) + (d5 - d6));\n let q = b + w * (c - b);\n let diff = p - q;\n return ClosestResult(q, dot(diff, diff));\n }\n // Inside the face: barycentric (v, w).\n let denom = 1.0 / (va + vb + vc);\n let v = vb * denom;\n let w = vc * denom;\n let q = a + ab * v + ac * w;\n let diff = p - q;\n return ClosestResult(q, dot(diff, diff));\n}\n\n@compute @workgroup_size(64)\nfn cs_main(@builtin(global_invocation_id) gid: vec3<u32>) {\n let pi = gid.x;\n if (pi >= params.pointCount) {\n return;\n }\n let posOff = pi * params.pointStrideF32 + params.positionOffsetF32;\n let p = vec3<f32>(positions[posOff], positions[posOff + 1u], positions[posOff + 2u]);\n\n // Best squared distance across all triangles. Stored squared so\n // we can prune AABBs without taking sqrt every step.\n var bestDistSq: f32 = 1.0e30;\n var bestPoint: vec3<f32> = vec3<f32>(0.0);\n var bestNormal: vec3<f32> = vec3<f32>(0.0, 1.0, 0.0);\n\n // Stack-based BVH descent. Workgroup-uniform stack would let\n // siblings cooperate; for v1 a per-thread stack in private memory\n // is simpler and fast enough.\n var stack: array<u32, STACK_SIZE>;\n var sp: u32 = 0u;\n stack[sp] = 0u;\n sp = sp + 1u;\n\n loop {\n if (sp == 0u) { break; }\n sp = sp - 1u;\n let nodeIdx = stack[sp];\n let node = bvhNodes[nodeIdx];\n\n let aabbDistSq = distSqPointAabb(\n p.x, p.y, p.z,\n node.aabbMinX, node.aabbMinY, node.aabbMinZ,\n node.aabbMaxX, node.aabbMaxY, node.aabbMaxZ,\n );\n if (aabbDistSq >= bestDistSq) {\n continue;\n }\n\n let leafFlag = node.leafOrLeft & LEAF_FLAG;\n if (leafFlag != 0u) {\n let triStart = node.leafOrLeft & (~LEAF_FLAG);\n let triCount = node.countOrRight;\n var i: u32 = 0u;\n loop {\n if (i >= triCount) { break; }\n let triOff = (triStart + i) * 12u;\n let v0 = vec3<f32>(triangles[triOff], triangles[triOff + 1u], triangles[triOff + 2u]);\n let v1 = vec3<f32>(triangles[triOff + 3u], triangles[triOff + 4u], triangles[triOff + 5u]);\n let v2 = vec3<f32>(triangles[triOff + 6u], triangles[triOff + 7u], triangles[triOff + 8u]);\n let n = vec3<f32>(triangles[triOff + 9u], triangles[triOff + 10u], triangles[triOff + 11u]);\n let res = closestPointOnTriangle(p, v0, v1, v2);\n if (res.distSq < bestDistSq) {\n bestDistSq = res.distSq;\n bestPoint = res.point;\n bestNormal = n;\n }\n i = i + 1u;\n }\n } else {\n // Internal node: push both children. Sibling that's closer to\n // p first (top of stack) so we hit the tighter bound earlier.\n let leftIdx = node.leafOrLeft;\n let rightIdx = node.countOrRight;\n let lNode = bvhNodes[leftIdx];\n let rNode = bvhNodes[rightIdx];\n let lDist = distSqPointAabb(\n p.x, p.y, p.z,\n lNode.aabbMinX, lNode.aabbMinY, lNode.aabbMinZ,\n lNode.aabbMaxX, lNode.aabbMaxY, lNode.aabbMaxZ,\n );\n let rDist = distSqPointAabb(\n p.x, p.y, p.z,\n rNode.aabbMinX, rNode.aabbMinY, rNode.aabbMinZ,\n rNode.aabbMaxX, rNode.aabbMaxY, rNode.aabbMaxZ,\n );\n // Push the farther child first \u2192 closer popped first.\n if (sp + 2u <= STACK_SIZE) {\n if (lDist < rDist) {\n stack[sp] = rightIdx; sp = sp + 1u;\n stack[sp] = leftIdx; sp = sp + 1u;\n } else {\n stack[sp] = leftIdx; sp = sp + 1u;\n stack[sp] = rightIdx; sp = sp + 1u;\n }\n }\n }\n }\n\n // Signed distance: project (p - closestPoint) onto the closest\n // triangle's normal. Positive
|
|
22
|
+
export declare const deviationShaderSource = "\nstruct BvhNode {\n aabbMinX: f32, aabbMinY: f32, aabbMinZ: f32,\n // High bit: leaf flag. Low 31 bits: leaf=triStart, internal=leftChildIdx.\n leafOrLeft: u32,\n aabbMaxX: f32, aabbMaxY: f32, aabbMaxZ: f32,\n // Leaf=triCount, internal=rightChildIdx.\n countOrRight: u32,\n}\n\nstruct DeviationParams {\n pointCount: u32,\n pointStrideF32: u32, // floats between successive points in positions buffer\n positionOffsetF32: u32, // float offset of vec3 position within a point\n // Optional clip range \u2014 when nonzero, signs above + below are kept\n // but values past \u00B1maxRange are clamped (saves shader work for\n // points far outside the model).\n maxRange: f32,\n // Reserved padding to keep the struct 16-byte aligned for std140.\n _pad0: u32, _pad1: u32, _pad2: u32, _pad3: u32,\n}\n\n@group(0) @binding(0) var<storage, read> bvhNodes: array<BvhNode>;\n@group(0) @binding(1) var<storage, read> triangles: array<f32>;\n@group(0) @binding(2) var<storage, read> positions: array<f32>;\n@group(0) @binding(3) var<storage, read_write> deviations: array<f32>;\n@group(0) @binding(4) var<uniform> params: DeviationParams;\n\nconst LEAF_FLAG: u32 = 0x80000000u;\nconst STACK_SIZE: u32 = 64u;\n\n// Squared distance from point p to AABB [aabbMin, aabbMax].\n// Returns 0 if p is inside the box.\nfn distSqPointAabb(\n px: f32, py: f32, pz: f32,\n ax: f32, ay: f32, az: f32,\n bx: f32, by: f32, bz: f32,\n) -> f32 {\n let dx = max(max(ax - px, 0.0), px - bx);\n let dy = max(max(ay - py, 0.0), py - by);\n let dz = max(max(az - pz, 0.0), pz - bz);\n return dx * dx + dy * dy + dz * dz;\n}\n\nstruct ClosestResult {\n point: vec3<f32>,\n distSq: f32,\n}\n\n// Ericson, Real-Time Collision Detection \u00A75.1.5: closest point on\n// a triangle to an arbitrary point in space. Branches over the\n// Voronoi regions of the triangle (3 verts, 3 edges, interior).\nfn closestPointOnTriangle(p: vec3<f32>, a: vec3<f32>, b: vec3<f32>, c: vec3<f32>) -> ClosestResult {\n let ab = b - a;\n let ac = c - a;\n let ap = p - a;\n let d1 = dot(ab, ap);\n let d2 = dot(ac, ap);\n if (d1 <= 0.0 && d2 <= 0.0) {\n let diff = p - a;\n return ClosestResult(a, dot(diff, diff));\n }\n let bp = p - b;\n let d3 = dot(ab, bp);\n let d4 = dot(ac, bp);\n if (d3 >= 0.0 && d4 <= d3) {\n let diff = p - b;\n return ClosestResult(b, dot(diff, diff));\n }\n let vc = d1 * d4 - d3 * d2;\n if (vc <= 0.0 && d1 >= 0.0 && d3 <= 0.0) {\n let v = d1 / (d1 - d3);\n let q = a + v * ab;\n let diff = p - q;\n return ClosestResult(q, dot(diff, diff));\n }\n let cp = p - c;\n let d5 = dot(ab, cp);\n let d6 = dot(ac, cp);\n if (d6 >= 0.0 && d5 <= d6) {\n let diff = p - c;\n return ClosestResult(c, dot(diff, diff));\n }\n let vb = d5 * d2 - d1 * d6;\n if (vb <= 0.0 && d2 >= 0.0 && d6 <= 0.0) {\n let w = d2 / (d2 - d6);\n let q = a + w * ac;\n let diff = p - q;\n return ClosestResult(q, dot(diff, diff));\n }\n let va = d3 * d6 - d5 * d4;\n if (va <= 0.0 && (d4 - d3) >= 0.0 && (d5 - d6) >= 0.0) {\n let w = (d4 - d3) / ((d4 - d3) + (d5 - d6));\n let q = b + w * (c - b);\n let diff = p - q;\n return ClosestResult(q, dot(diff, diff));\n }\n // Inside the face: barycentric (v, w).\n let denom = 1.0 / (va + vb + vc);\n let v = vb * denom;\n let w = vc * denom;\n let q = a + ab * v + ac * w;\n let diff = p - q;\n return ClosestResult(q, dot(diff, diff));\n}\n\n@compute @workgroup_size(64)\nfn cs_main(@builtin(global_invocation_id) gid: vec3<u32>) {\n let pi = gid.x;\n if (pi >= params.pointCount) {\n return;\n }\n let posOff = pi * params.pointStrideF32 + params.positionOffsetF32;\n let p = vec3<f32>(positions[posOff], positions[posOff + 1u], positions[posOff + 2u]);\n\n // Best squared distance across all triangles. Stored squared so\n // we can prune AABBs without taking sqrt every step.\n var bestDistSq: f32 = 1.0e30;\n var bestPoint: vec3<f32> = vec3<f32>(0.0);\n var bestNormal: vec3<f32> = vec3<f32>(0.0, 1.0, 0.0);\n\n // Stack-based BVH descent. Workgroup-uniform stack would let\n // siblings cooperate; for v1 a per-thread stack in private memory\n // is simpler and fast enough.\n var stack: array<u32, STACK_SIZE>;\n var sp: u32 = 0u;\n stack[sp] = 0u;\n sp = sp + 1u;\n\n loop {\n if (sp == 0u) { break; }\n sp = sp - 1u;\n let nodeIdx = stack[sp];\n let node = bvhNodes[nodeIdx];\n\n let aabbDistSq = distSqPointAabb(\n p.x, p.y, p.z,\n node.aabbMinX, node.aabbMinY, node.aabbMinZ,\n node.aabbMaxX, node.aabbMaxY, node.aabbMaxZ,\n );\n if (aabbDistSq >= bestDistSq) {\n continue;\n }\n\n let leafFlag = node.leafOrLeft & LEAF_FLAG;\n if (leafFlag != 0u) {\n let triStart = node.leafOrLeft & (~LEAF_FLAG);\n let triCount = node.countOrRight;\n var i: u32 = 0u;\n loop {\n if (i >= triCount) { break; }\n let triOff = (triStart + i) * 12u;\n let v0 = vec3<f32>(triangles[triOff], triangles[triOff + 1u], triangles[triOff + 2u]);\n let v1 = vec3<f32>(triangles[triOff + 3u], triangles[triOff + 4u], triangles[triOff + 5u]);\n let v2 = vec3<f32>(triangles[triOff + 6u], triangles[triOff + 7u], triangles[triOff + 8u]);\n let n = vec3<f32>(triangles[triOff + 9u], triangles[triOff + 10u], triangles[triOff + 11u]);\n let res = closestPointOnTriangle(p, v0, v1, v2);\n if (res.distSq < bestDistSq) {\n bestDistSq = res.distSq;\n bestPoint = res.point;\n bestNormal = n;\n }\n i = i + 1u;\n }\n } else {\n // Internal node: push both children. Sibling that's closer to\n // p first (top of stack) so we hit the tighter bound earlier.\n let leftIdx = node.leafOrLeft;\n let rightIdx = node.countOrRight;\n let lNode = bvhNodes[leftIdx];\n let rNode = bvhNodes[rightIdx];\n let lDist = distSqPointAabb(\n p.x, p.y, p.z,\n lNode.aabbMinX, lNode.aabbMinY, lNode.aabbMinZ,\n lNode.aabbMaxX, lNode.aabbMaxY, lNode.aabbMaxZ,\n );\n let rDist = distSqPointAabb(\n p.x, p.y, p.z,\n rNode.aabbMinX, rNode.aabbMinY, rNode.aabbMinZ,\n rNode.aabbMaxX, rNode.aabbMaxY, rNode.aabbMaxZ,\n );\n // Push the farther child first \u2192 closer popped first.\n if (sp + 2u <= STACK_SIZE) {\n if (lDist < rDist) {\n stack[sp] = rightIdx; sp = sp + 1u;\n stack[sp] = leftIdx; sp = sp + 1u;\n } else {\n stack[sp] = leftIdx; sp = sp + 1u;\n stack[sp] = rightIdx; sp = sp + 1u;\n }\n }\n }\n }\n\n // Signed distance: project (p - closestPoint) onto the closest\n // triangle's normal. Positive means p is on the outward side.\n //\n // sign() returns 0 when (p - closestPoint) is perpendicular to the\n // normal -- i.e. the point is COPLANAR with the triangle but its closest\n // feature is an edge/vertex (a point beside a wall, an open door swung\n // into a wall's plane, a floor point laterally past the nearest floor\n // tri). That multiplied a genuinely large dist by 0 and painted far\n // points at the ramp centre (white). Treat the in-plane case as the\n // outward side so the magnitude still flags them.\n let toPoint = p - bestPoint;\n let dist = sqrt(bestDistSq);\n let nd = dot(toPoint, bestNormal);\n let s = select(-1.0, 1.0, nd >= 0.0);\n var signed: f32 = s * dist;\n\n // Optional clip: keeps the histogram + ramp focused on near-surface\n // points. Past \u00B1maxRange the value pegs at the edge.\n if (params.maxRange > 0.0) {\n let mr = params.maxRange;\n if (signed > mr) { signed = mr; }\n if (signed < -mr) { signed = -mr; }\n }\n\n deviations[pi] = signed;\n}\n";
|
|
23
23
|
//# sourceMappingURL=deviation-shader.wgsl.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deviation-shader.wgsl.d.ts","sourceRoot":"","sources":["../../src/deviation/deviation-shader.wgsl.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,eAAO,MAAM,qBAAqB,
|
|
1
|
+
{"version":3,"file":"deviation-shader.wgsl.d.ts","sourceRoot":"","sources":["../../src/deviation/deviation-shader.wgsl.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,eAAO,MAAM,qBAAqB,smPA4NjC,CAAC"}
|
|
@@ -217,10 +217,19 @@ fn cs_main(@builtin(global_invocation_id) gid: vec3<u32>) {
|
|
|
217
217
|
}
|
|
218
218
|
|
|
219
219
|
// Signed distance: project (p - closestPoint) onto the closest
|
|
220
|
-
// triangle's normal. Positive
|
|
220
|
+
// triangle's normal. Positive means p is on the outward side.
|
|
221
|
+
//
|
|
222
|
+
// sign() returns 0 when (p - closestPoint) is perpendicular to the
|
|
223
|
+
// normal -- i.e. the point is COPLANAR with the triangle but its closest
|
|
224
|
+
// feature is an edge/vertex (a point beside a wall, an open door swung
|
|
225
|
+
// into a wall's plane, a floor point laterally past the nearest floor
|
|
226
|
+
// tri). That multiplied a genuinely large dist by 0 and painted far
|
|
227
|
+
// points at the ramp centre (white). Treat the in-plane case as the
|
|
228
|
+
// outward side so the magnitude still flags them.
|
|
221
229
|
let toPoint = p - bestPoint;
|
|
222
230
|
let dist = sqrt(bestDistSq);
|
|
223
|
-
let
|
|
231
|
+
let nd = dot(toPoint, bestNormal);
|
|
232
|
+
let s = select(-1.0, 1.0, nd >= 0.0);
|
|
224
233
|
var signed: f32 = s * dist;
|
|
225
234
|
|
|
226
235
|
// Optional clip: keeps the histogram + ramp focused on near-surface
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deviation-shader.wgsl.js","sourceRoot":"","sources":["../../src/deviation/deviation-shader.wgsl.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AAE/D;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,MAAM,CAAC,MAAM,qBAAqB,GAAG,UAAU,CAAC
|
|
1
|
+
{"version":3,"file":"deviation-shader.wgsl.js","sourceRoot":"","sources":["../../src/deviation/deviation-shader.wgsl.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AAE/D;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,MAAM,CAAC,MAAM,qBAAqB,GAAG,UAAU,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA4N/C,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -61,6 +61,7 @@ export declare class Renderer {
|
|
|
61
61
|
private canvas;
|
|
62
62
|
private sectionPlaneRenderer;
|
|
63
63
|
private section2DOverlayRenderer;
|
|
64
|
+
private overlayLineColor;
|
|
64
65
|
private symbolicFillPipeline;
|
|
65
66
|
private symbolicTextPipeline;
|
|
66
67
|
private postProcessor;
|
|
@@ -69,6 +70,9 @@ export declare class Renderer {
|
|
|
69
70
|
private skyPass;
|
|
70
71
|
private edlOptions;
|
|
71
72
|
private pointCloudRenderer;
|
|
73
|
+
/** Set true at the end of `init()`; gates `whenReady()`. */
|
|
74
|
+
private ready;
|
|
75
|
+
private readyWaiters;
|
|
72
76
|
private deviationPipeline;
|
|
73
77
|
/**
|
|
74
78
|
* Cache of which mesh-set the BVH was built from. We rebuild on
|
|
@@ -99,6 +103,16 @@ export declare class Renderer {
|
|
|
99
103
|
* Initialize renderer
|
|
100
104
|
*/
|
|
101
105
|
init(): Promise<void>;
|
|
106
|
+
/**
|
|
107
|
+
* Resolves once `init()` has finished and the GPU device + point-cloud
|
|
108
|
+
* renderer are usable. Callers that may run before init completes — e.g.
|
|
109
|
+
* dropping a point cloud immediately after the viewport mounts, before
|
|
110
|
+
* the async WebGPU init resolves — should `await renderer.whenReady()`
|
|
111
|
+
* before `beginPointCloudStream`, which otherwise throws
|
|
112
|
+
* "Renderer not initialized".
|
|
113
|
+
*/
|
|
114
|
+
whenReady(): Promise<void>;
|
|
115
|
+
private markReady;
|
|
102
116
|
/**
|
|
103
117
|
* Replace all loaded point clouds with `assets`.
|
|
104
118
|
*
|
|
@@ -406,6 +420,13 @@ export declare class Renderer {
|
|
|
406
420
|
* Clear the 2D section overlay
|
|
407
421
|
*/
|
|
408
422
|
clearSection2DOverlay(): void;
|
|
423
|
+
/**
|
|
424
|
+
* Set the colour of the overlay lines (annotation / alignment / grid) and the
|
|
425
|
+
* section-cut outline (RGBA, 0..1). Defaults to opaque black; theme it to keep
|
|
426
|
+
* lines legible on a dark canvas. The matching label colour is per-text via
|
|
427
|
+
* `SymbolicTextInput.color` on `uploadAnnotationTexts3D`.
|
|
428
|
+
*/
|
|
429
|
+
setOverlayLineColor(color: readonly [number, number, number, number]): void;
|
|
409
430
|
/**
|
|
410
431
|
* Upload pre-lifted 3D line-list vertices for the standalone annotation
|
|
411
432
|
* overlay. Each segment is `[x1, y1, z1, x2, y2, z2]` in world space.
|
|
@@ -448,6 +469,17 @@ export declare class Renderer {
|
|
|
448
469
|
uploadGridLines3D(vertices: Float32Array): void;
|
|
449
470
|
/** Clear the structural-grid overlay. */
|
|
450
471
|
clearGridLines3D(): void;
|
|
472
|
+
/**
|
|
473
|
+
* Show (or clear) the clash-overlap box: the wireframe AABB of a focused
|
|
474
|
+
* clash, drawn in `color` so the overlap region reads as a distinct third
|
|
475
|
+
* colour next to the two glowing clash elements (#1277). Pass `null` to
|
|
476
|
+
* clear. `min`/`max` are world-space corners (clash works in world frame).
|
|
477
|
+
*/
|
|
478
|
+
setClashOverlapBox(box: {
|
|
479
|
+
min: [number, number, number];
|
|
480
|
+
max: [number, number, number];
|
|
481
|
+
color: [number, number, number, number];
|
|
482
|
+
} | null): void;
|
|
451
483
|
/**
|
|
452
484
|
* Upload filled IfcAnnotation regions for the symbolic overlay
|
|
453
485
|
* (issue #653). Pass an empty array to clear.
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,YAAY,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,YAAY,EAAE,SAAS,EAAE,aAAa,EAAE,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AACtG,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EAAE,wBAAwB,EAAE,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -13,6 +13,7 @@ export { Picker } from './picker.js';
|
|
|
13
13
|
export { MathUtils } from './math.js';
|
|
14
14
|
export { SectionPlaneRenderer } from './section-plane.js';
|
|
15
15
|
export { Section2DOverlayRenderer } from './section-2d-overlay.js';
|
|
16
|
+
import { aabbEdgeLineList } from './aabb-edges.js';
|
|
16
17
|
// IfcAnnotation overlay pipelines (3D world-space). Self-contained — caller
|
|
17
18
|
// passes a GPUDevice + presentation format and invokes `.render(pass, viewProj)`
|
|
18
19
|
// from inside an RGBA-blended pass. See packages/renderer/src/symbolic-overlay-pipelines.ts.
|
|
@@ -94,6 +95,9 @@ export class Renderer {
|
|
|
94
95
|
canvas;
|
|
95
96
|
sectionPlaneRenderer = null;
|
|
96
97
|
section2DOverlayRenderer = null;
|
|
98
|
+
// Overlay/section-cut line colour, kept on the Renderer so it survives a
|
|
99
|
+
// pre-init call and a section2DOverlayRenderer re-creation (re-applied below).
|
|
100
|
+
overlayLineColor = [0, 0, 0, 1];
|
|
97
101
|
// IfcAnnotation overlay pipelines (issue #653). Created on `init()` once
|
|
98
102
|
// the device exists; nulled until then.
|
|
99
103
|
symbolicFillPipeline = null;
|
|
@@ -111,6 +115,9 @@ export class Renderer {
|
|
|
111
115
|
highQuality: true,
|
|
112
116
|
};
|
|
113
117
|
pointCloudRenderer = null;
|
|
118
|
+
/** Set true at the end of `init()`; gates `whenReady()`. */
|
|
119
|
+
ready = false;
|
|
120
|
+
readyWaiters = [];
|
|
114
121
|
deviationPipeline = null;
|
|
115
122
|
/**
|
|
116
123
|
* Cache of which mesh-set the BVH was built from. We rebuild on
|
|
@@ -187,6 +194,8 @@ export class Renderer {
|
|
|
187
194
|
this.picker = new Picker(this.device, width, height);
|
|
188
195
|
this.sectionPlaneRenderer = new SectionPlaneRenderer(this.device.getDevice(), this.device.getFormat(), this.pipeline.getSampleCount());
|
|
189
196
|
this.section2DOverlayRenderer = new Section2DOverlayRenderer(this.device.getDevice(), this.device.getFormat(), this.pipeline.getSampleCount());
|
|
197
|
+
// Re-apply any colour set before this (re)creation so it isn't lost.
|
|
198
|
+
this.section2DOverlayRenderer.setOverlayLineColor(this.overlayLineColor);
|
|
190
199
|
// IfcAnnotation overlay pipelines (issue #653). Share the device +
|
|
191
200
|
// presentation format AND the MSAA sample count + objectId attachment
|
|
192
201
|
// shape with the rest of the renderer so they composite into the same
|
|
@@ -234,6 +243,27 @@ export class Renderer {
|
|
|
234
243
|
},
|
|
235
244
|
};
|
|
236
245
|
});
|
|
246
|
+
this.markReady();
|
|
247
|
+
}
|
|
248
|
+
/**
|
|
249
|
+
* Resolves once `init()` has finished and the GPU device + point-cloud
|
|
250
|
+
* renderer are usable. Callers that may run before init completes — e.g.
|
|
251
|
+
* dropping a point cloud immediately after the viewport mounts, before
|
|
252
|
+
* the async WebGPU init resolves — should `await renderer.whenReady()`
|
|
253
|
+
* before `beginPointCloudStream`, which otherwise throws
|
|
254
|
+
* "Renderer not initialized".
|
|
255
|
+
*/
|
|
256
|
+
whenReady() {
|
|
257
|
+
if (this.ready)
|
|
258
|
+
return Promise.resolve();
|
|
259
|
+
return new Promise((resolve) => { this.readyWaiters.push(resolve); });
|
|
260
|
+
}
|
|
261
|
+
markReady() {
|
|
262
|
+
this.ready = true;
|
|
263
|
+
const waiters = this.readyWaiters;
|
|
264
|
+
this.readyWaiters = [];
|
|
265
|
+
for (const w of waiters)
|
|
266
|
+
w();
|
|
237
267
|
}
|
|
238
268
|
/**
|
|
239
269
|
* Replace all loaded point clouds with `assets`.
|
|
@@ -447,6 +477,8 @@ export class Renderer {
|
|
|
447
477
|
// Otherwise the caller's "compute done" callback fires before
|
|
448
478
|
// the deviation buffers are actually populated.
|
|
449
479
|
await this.device.getDevice().queue.onSubmittedWorkDone();
|
|
480
|
+
// The GPU is done reading each chunk's params uniform — free them.
|
|
481
|
+
this.deviationPipeline.releaseTransientParams();
|
|
450
482
|
this.requestRender();
|
|
451
483
|
// Suggest a default half-range = max(0.01m, max-extent / 1000).
|
|
452
484
|
// Tighter than the maxRange clip; gives the user a reasonable
|
|
@@ -1759,7 +1791,8 @@ export class Renderer {
|
|
|
1759
1791
|
const overrideBatches = this.scene.getOverrideBatches();
|
|
1760
1792
|
if (overrideBatches.length > 0) {
|
|
1761
1793
|
pass.setPipeline(this.pipeline.getOverlayPipeline());
|
|
1762
|
-
|
|
1794
|
+
// bit 1 = overlay; bit 5 (32) = emphasize (pop) — see shader.
|
|
1795
|
+
tplFlags[0] = options.emphasizeOverrides ? (2 | 32) : 2;
|
|
1763
1796
|
for (const batch of overrideBatches) {
|
|
1764
1797
|
renderBatch(batch);
|
|
1765
1798
|
}
|
|
@@ -2074,6 +2107,9 @@ export class Renderer {
|
|
|
2074
2107
|
if (this.section2DOverlayRenderer?.hasGridLines3D()) {
|
|
2075
2108
|
this.section2DOverlayRenderer.drawGridLines3D(pass, viewProj);
|
|
2076
2109
|
}
|
|
2110
|
+
if (this.section2DOverlayRenderer?.hasClashBoxLines3D()) {
|
|
2111
|
+
this.section2DOverlayRenderer.drawClashBoxLines3D(pass, viewProj);
|
|
2112
|
+
}
|
|
2077
2113
|
if (this.symbolicTextPipeline?.hasGeometry()) {
|
|
2078
2114
|
// Pass viewport pixel dimensions so the shader can scale glyphs
|
|
2079
2115
|
// to a constant on-screen size (BIMvision-style annotations)
|
|
@@ -2356,6 +2392,19 @@ export class Renderer {
|
|
|
2356
2392
|
this.section2DOverlayRenderer.clearGeometry();
|
|
2357
2393
|
}
|
|
2358
2394
|
}
|
|
2395
|
+
/**
|
|
2396
|
+
* Set the colour of the overlay lines (annotation / alignment / grid) and the
|
|
2397
|
+
* section-cut outline (RGBA, 0..1). Defaults to opaque black; theme it to keep
|
|
2398
|
+
* lines legible on a dark canvas. The matching label colour is per-text via
|
|
2399
|
+
* `SymbolicTextInput.color` on `uploadAnnotationTexts3D`.
|
|
2400
|
+
*/
|
|
2401
|
+
setOverlayLineColor(color) {
|
|
2402
|
+
// Persist on the Renderer so a pre-init call (and any later overlay
|
|
2403
|
+
// re-creation) keeps the colour — init() re-applies this.overlayLineColor.
|
|
2404
|
+
this.overlayLineColor = color;
|
|
2405
|
+
this.section2DOverlayRenderer?.setOverlayLineColor(color);
|
|
2406
|
+
this.requestRender();
|
|
2407
|
+
}
|
|
2359
2408
|
/**
|
|
2360
2409
|
* Upload pre-lifted 3D line-list vertices for the standalone annotation
|
|
2361
2410
|
* overlay. Each segment is `[x1, y1, z1, x2, y2, z2]` in world space.
|
|
@@ -2487,6 +2536,24 @@ export class Renderer {
|
|
|
2487
2536
|
this.requestRender();
|
|
2488
2537
|
}
|
|
2489
2538
|
}
|
|
2539
|
+
/**
|
|
2540
|
+
* Show (or clear) the clash-overlap box: the wireframe AABB of a focused
|
|
2541
|
+
* clash, drawn in `color` so the overlap region reads as a distinct third
|
|
2542
|
+
* colour next to the two glowing clash elements (#1277). Pass `null` to
|
|
2543
|
+
* clear. `min`/`max` are world-space corners (clash works in world frame).
|
|
2544
|
+
*/
|
|
2545
|
+
setClashOverlapBox(box) {
|
|
2546
|
+
if (!this.section2DOverlayRenderer)
|
|
2547
|
+
return;
|
|
2548
|
+
if (!box) {
|
|
2549
|
+
this.section2DOverlayRenderer.clearClashBoxLines3D();
|
|
2550
|
+
this.requestRender();
|
|
2551
|
+
return;
|
|
2552
|
+
}
|
|
2553
|
+
this.section2DOverlayRenderer.setClashBoxLineColor(box.color);
|
|
2554
|
+
this.section2DOverlayRenderer.uploadClashBoxLines3D(aabbEdgeLineList(box.min, box.max));
|
|
2555
|
+
this.requestRender();
|
|
2556
|
+
}
|
|
2490
2557
|
/**
|
|
2491
2558
|
* Upload filled IfcAnnotation regions for the symbolic overlay
|
|
2492
2559
|
* (issue #653). Pass an empty array to clear.
|