@ifc-lite/renderer 1.49.1 → 1.50.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.
Files changed (82) hide show
  1. package/dist/camera.d.ts +24 -0
  2. package/dist/camera.d.ts.map +1 -1
  3. package/dist/camera.js +72 -1
  4. package/dist/camera.js.map +1 -1
  5. package/dist/device.d.ts +11 -0
  6. package/dist/device.d.ts.map +1 -1
  7. package/dist/device.js +71 -5
  8. package/dist/device.js.map +1 -1
  9. package/dist/frame-timing-cpu.d.ts +31 -0
  10. package/dist/frame-timing-cpu.d.ts.map +1 -0
  11. package/dist/frame-timing-cpu.js +25 -0
  12. package/dist/frame-timing-cpu.js.map +1 -0
  13. package/dist/frame-timing-gpu.d.ts +144 -0
  14. package/dist/frame-timing-gpu.d.ts.map +1 -0
  15. package/dist/frame-timing-gpu.js +176 -0
  16. package/dist/frame-timing-gpu.js.map +1 -0
  17. package/dist/frame-timing-stats.d.ts +100 -0
  18. package/dist/frame-timing-stats.d.ts.map +1 -0
  19. package/dist/frame-timing-stats.js +116 -0
  20. package/dist/frame-timing-stats.js.map +1 -0
  21. package/dist/frame-timing.d.ts +102 -0
  22. package/dist/frame-timing.d.ts.map +1 -0
  23. package/dist/frame-timing.js +112 -0
  24. package/dist/frame-timing.js.map +1 -0
  25. package/dist/index.d.ts +35 -0
  26. package/dist/index.d.ts.map +1 -1
  27. package/dist/index.js +229 -0
  28. package/dist/index.js.map +1 -1
  29. package/dist/lod-simplify.d.ts +0 -9
  30. package/dist/lod-simplify.d.ts.map +1 -1
  31. package/dist/lod-simplify.js +45 -7
  32. package/dist/lod-simplify.js.map +1 -1
  33. package/dist/pipeline.d.ts +16 -0
  34. package/dist/pipeline.d.ts.map +1 -1
  35. package/dist/pipeline.js +89 -3
  36. package/dist/pipeline.js.map +1 -1
  37. package/dist/pointcloud/point-cloud-spatial-index.d.ts +81 -9
  38. package/dist/pointcloud/point-cloud-spatial-index.d.ts.map +1 -1
  39. package/dist/pointcloud/point-cloud-spatial-index.js +140 -29
  40. package/dist/pointcloud/point-cloud-spatial-index.js.map +1 -1
  41. package/dist/raycast-engine.d.ts.map +1 -1
  42. package/dist/raycast-engine.js +10 -3
  43. package/dist/raycast-engine.js.map +1 -1
  44. package/dist/scene.d.ts.map +1 -1
  45. package/dist/scene.js +42 -5
  46. package/dist/scene.js.map +1 -1
  47. package/dist/section-2d-overlay.d.ts.map +1 -1
  48. package/dist/section-2d-overlay.js +6 -3
  49. package/dist/section-2d-overlay.js.map +1 -1
  50. package/dist/section-plane.d.ts +11 -0
  51. package/dist/section-plane.d.ts.map +1 -1
  52. package/dist/section-plane.js.map +1 -1
  53. package/dist/shaders/main.wgsl.d.ts +1 -1
  54. package/dist/shaders/main.wgsl.d.ts.map +1 -1
  55. package/dist/shaders/main.wgsl.js +87 -4
  56. package/dist/shaders/main.wgsl.js.map +1 -1
  57. package/dist/shaders/shadow.wgsl.d.ts +31 -0
  58. package/dist/shaders/shadow.wgsl.d.ts.map +1 -0
  59. package/dist/shaders/shadow.wgsl.js +141 -0
  60. package/dist/shaders/shadow.wgsl.js.map +1 -0
  61. package/dist/shadow-light-matrix.d.ts +106 -0
  62. package/dist/shadow-light-matrix.d.ts.map +1 -0
  63. package/dist/shadow-light-matrix.js +185 -0
  64. package/dist/shadow-light-matrix.js.map +1 -0
  65. package/dist/shadow-occluders.d.ts +106 -0
  66. package/dist/shadow-occluders.d.ts.map +1 -0
  67. package/dist/shadow-occluders.js +156 -0
  68. package/dist/shadow-occluders.js.map +1 -0
  69. package/dist/shadow-pass.d.ts +132 -0
  70. package/dist/shadow-pass.d.ts.map +1 -0
  71. package/dist/shadow-pass.js +342 -0
  72. package/dist/shadow-pass.js.map +1 -0
  73. package/dist/snap-detector.d.ts +10 -0
  74. package/dist/snap-detector.d.ts.map +1 -1
  75. package/dist/snap-detector.js.map +1 -1
  76. package/dist/symbolic-overlay-pipelines.d.ts +35 -0
  77. package/dist/symbolic-overlay-pipelines.d.ts.map +1 -1
  78. package/dist/symbolic-overlay-pipelines.js +31 -15
  79. package/dist/symbolic-overlay-pipelines.js.map +1 -1
  80. package/dist/types.d.ts +40 -0
  81. package/dist/types.d.ts.map +1 -1
  82. package/package.json +3 -3
package/dist/pipeline.js CHANGED
@@ -5,6 +5,12 @@ import { mainShaderSource } from './shaders/main.wgsl.js';
5
5
  import { texturedShaderSource } from './shaders/textured.wgsl.js';
6
6
  import { packClipBox } from './clip-box.js';
7
7
  import { ENVIRONMENT_UNIFORM_SIZE, packEnvironmentUniforms, resolveEnvironment, } from './environment.js';
8
+ /**
9
+ * Bytes of the sun shadow uniform (#2670): lightViewProj mat4 (64) + two vec4
10
+ * param rows (32). Row 1 = (texelSize, enabled, normalBias, pcfRadius); row 2 =
11
+ * (depthBias, _, _, _). Kept in lockstep with the WGSL `Shadow` struct.
12
+ */
13
+ const SHADOW_UNIFORM_SIZE = 96;
8
14
  export class RenderPipeline {
9
15
  device;
10
16
  webgpuDevice;
@@ -50,6 +56,17 @@ export class RenderPipeline {
50
56
  environmentBindGroup;
51
57
  environmentBindGroupLayout;
52
58
  environmentScratch = new Float32Array(ENVIRONMENT_UNIFORM_SIZE / 4);
59
+ // Sun shadow map (#2670, Phase 2b): the depth map lives in ShadowPass; the
60
+ // environment bind group (group 1) carries a view of it at binding 1, a
61
+ // comparison sampler at binding 2, and the light matrix + params at binding
62
+ // 3 — so EVERY main-family pipeline (all already bind group 1) can sample
63
+ // shadows with no pipeline-layout change. A 1×1 dummy depth texture is
64
+ // bound while shadows are off (the uniform's `enabled` flag gates sampling).
65
+ shadowSampler;
66
+ shadowUniformBuffer;
67
+ dummyShadowTexture;
68
+ dummyShadowView;
69
+ currentShadowView;
53
70
  currentWidth;
54
71
  currentHeight;
55
72
  constructor(device, width = 1, height = 1) {
@@ -110,6 +127,8 @@ export class RenderPipeline {
110
127
  });
111
128
  // Lighting environment at group(1) — written once per frame from
112
129
  // RenderOptions.environment, initialized to the legacy default look.
130
+ // Bindings 1..3 carry the sun shadow map (#2670): depth texture,
131
+ // comparison sampler, and the light matrix + params uniform.
113
132
  this.environmentBindGroupLayout = this.device.createBindGroupLayout({
114
133
  label: 'environment-bgl',
115
134
  entries: [
@@ -118,6 +137,21 @@ export class RenderPipeline {
118
137
  visibility: GPUShaderStage.FRAGMENT,
119
138
  buffer: { type: 'uniform' },
120
139
  },
140
+ {
141
+ binding: 1,
142
+ visibility: GPUShaderStage.FRAGMENT,
143
+ texture: { sampleType: 'depth' },
144
+ },
145
+ {
146
+ binding: 2,
147
+ visibility: GPUShaderStage.FRAGMENT,
148
+ sampler: { type: 'comparison' },
149
+ },
150
+ {
151
+ binding: 3,
152
+ visibility: GPUShaderStage.FRAGMENT,
153
+ buffer: { type: 'uniform' },
154
+ },
121
155
  ],
122
156
  });
123
157
  this.environmentBuffer = this.device.createBuffer({
@@ -125,10 +159,30 @@ export class RenderPipeline {
125
159
  size: ENVIRONMENT_UNIFORM_SIZE,
126
160
  usage: GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST,
127
161
  });
128
- this.environmentBindGroup = this.device.createBindGroup({
129
- layout: this.environmentBindGroupLayout,
130
- entries: [{ binding: 0, resource: { buffer: this.environmentBuffer } }],
162
+ // Shadow-sampling resources. The comparison direction mirrors the
163
+ // reverse-Z depth pass (a receiver is lit when its depth is ≥ the stored
164
+ // closest-occluder depth). The dummy 1×1 depth texture is bound whenever
165
+ // no shadow map is active.
166
+ this.shadowSampler = this.device.createSampler({
167
+ label: 'shadow-cmp-sampler',
168
+ compare: 'greater-equal',
169
+ magFilter: 'linear',
170
+ minFilter: 'linear',
171
+ });
172
+ this.shadowUniformBuffer = this.device.createBuffer({
173
+ label: 'shadow-uniforms',
174
+ size: SHADOW_UNIFORM_SIZE,
175
+ usage: GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST,
131
176
  });
177
+ this.dummyShadowTexture = this.device.createTexture({
178
+ label: 'shadow-dummy-depth',
179
+ size: { width: 1, height: 1 },
180
+ format: 'depth32float',
181
+ usage: GPUTextureUsage.RENDER_ATTACHMENT | GPUTextureUsage.TEXTURE_BINDING,
182
+ });
183
+ this.dummyShadowView = this.dummyShadowTexture.createView();
184
+ this.currentShadowView = this.dummyShadowView;
185
+ this.environmentBindGroup = this.buildEnvironmentBindGroup();
132
186
  this.updateEnvironment();
133
187
  // Create shader module with PBR lighting, section plane clipping, and selection outline
134
188
  const shaderModule = this.device.createShaderModule({
@@ -593,6 +647,36 @@ export class RenderPipeline {
593
647
  getEnvironmentBindGroup() {
594
648
  return this.environmentBindGroup;
595
649
  }
650
+ /** (Re)build the group(1) bind group over the current shadow depth view. */
651
+ buildEnvironmentBindGroup() {
652
+ return this.device.createBindGroup({
653
+ label: 'environment-bg',
654
+ layout: this.environmentBindGroupLayout,
655
+ entries: [
656
+ { binding: 0, resource: { buffer: this.environmentBuffer } },
657
+ { binding: 1, resource: this.currentShadowView },
658
+ { binding: 2, resource: this.shadowSampler },
659
+ { binding: 3, resource: { buffer: this.shadowUniformBuffer } },
660
+ ],
661
+ });
662
+ }
663
+ /**
664
+ * Point the environment bind group at the active shadow depth map (#2670).
665
+ * Pass `null` to fall back to the 1×1 dummy (shadows off). Rebuilds the bind
666
+ * group only when the view actually changes, so a steady enabled/disabled
667
+ * state costs nothing per frame.
668
+ */
669
+ setShadowDepthView(view) {
670
+ const next = view ?? this.dummyShadowView;
671
+ if (next === this.currentShadowView)
672
+ return;
673
+ this.currentShadowView = next;
674
+ this.environmentBindGroup = this.buildEnvironmentBindGroup();
675
+ }
676
+ /** Write the sun shadow uniform (light matrix + params). 96 bytes. */
677
+ updateShadowUniform(data) {
678
+ this.device.queue.writeBuffer(this.shadowUniformBuffer, 0, data);
679
+ }
596
680
  /**
597
681
  * Check if resize is needed
598
682
  */
@@ -770,6 +854,8 @@ export class RenderPipeline {
770
854
  this.multisampleTextureView = null;
771
855
  this.uniformBuffer.destroy();
772
856
  this.environmentBuffer.destroy();
857
+ this.shadowUniformBuffer.destroy();
858
+ this.dummyShadowTexture.destroy();
773
859
  }
774
860
  }
775
861
  //# sourceMappingURL=pipeline.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"pipeline.js","sourceRoot":"","sources":["../src/pipeline.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"pipeline.js","sourceRoot":"","sources":["../src/pipeline.ts"],"names":[],"mappings":"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"}
@@ -26,8 +26,12 @@
26
26
  * points rather than an approximation. The grid itself adds roughly
27
27
  * 8 bytes/point (one array slot per point, across however many cells)
28
28
  * plus a small constant per occupied cell — a few MB per million
29
- * points at typical scan density. See `DEFAULT_MAX_INDEXED_POINTS` for
30
- * the safety valve on extreme (tens-of-millions-of-points) clouds.
29
+ * points at typical scan density. The safety valve on extreme
30
+ * (tens-of-millions-of-points) clouds has two independent limbs:
31
+ * `DEFAULT_MAX_INDEXED_POINTS` bounds retained position memory (it
32
+ * binds on dense scans), and `DEFAULT_MAX_INDEXED_CELLS` bounds the
33
+ * `cells` Map itself below V8's 2^24-entry ceiling (it binds on sparse
34
+ * clouds, where occupied cells track the point count nearly 1:1).
31
35
  *
32
36
  * Query: `queryRay` walks cells in ray-marching (Amanatides & Woo DDA)
33
37
  * order, so cost is O(cells touched along the ray), not O(points) —
@@ -50,8 +54,46 @@ export declare const DEFAULT_POINTCLOUD_INDEX_CELL_SIZE = 0.5;
50
54
  * so this only bites on genuinely extreme clouds — at ~20 bytes/point
51
55
  * of CPU overhead (12 bytes retained positions + ~8 bytes grid), 30M
52
56
  * points is already ~600 MB of additional retained memory.
57
+ *
58
+ * This limb bounds RETAINED POSITION MEMORY. It does NOT bound the size
59
+ * of the `cells` Map — see `DEFAULT_MAX_INDEXED_CELLS`, which binds
60
+ * first on sparse clouds.
53
61
  */
54
62
  export declare const DEFAULT_MAX_INDEXED_POINTS = 30000000;
63
+ /**
64
+ * V8's hard ceiling on `Map`/`Set` entry count: exactly 2^24 entries,
65
+ * after which `set()` throws `RangeError: Map maximum size exceeded`.
66
+ * This is an engine limit, not a memory limit — it fires with gigabytes
67
+ * of heap still free, and it is not catchable anywhere useful (it would
68
+ * abort a streaming chunk insert mid-cloud).
69
+ */
70
+ export declare const V8_MAP_MAX_ENTRIES: number;
71
+ /**
72
+ * Hard cap on how many OCCUPIED CELLS the grid will create — the second
73
+ * limb of the memory safety valve, and the one that actually protects
74
+ * the `cells` Map.
75
+ *
76
+ * `DEFAULT_MAX_INDEXED_POINTS` alone does not bound the Map, because
77
+ * `insertRange` creates at most one new cell per indexed point and, on a
78
+ * SPARSE cloud, very nearly one per point: airborne LiDAR at 1-20
79
+ * points/m^2, or a coarse site scan, puts on the order of one point in
80
+ * each 0.5 m cell (`DEFAULT_POINTCLOUD_INDEX_CELL_SIZE`), so occupied
81
+ * cells track the point count almost 1:1. The worst case is therefore
82
+ * `cells === points`, and a 30M-point cap sits ABOVE `V8_MAP_MAX_ENTRIES`
83
+ * — the Map throws at 16,777,216 cells, i.e. the valve could never bind
84
+ * on exactly the clouds it was written for. Dense terrestrial scans put
85
+ * thousands of points in a cell and never come close, which is why the
86
+ * gap survived.
87
+ *
88
+ * The two limbs bound different resources and neither implies the other:
89
+ * a sparse cloud exhausts cells long before points; a dense one exhausts
90
+ * points with a tiny grid. Both are enforced.
91
+ *
92
+ * Chosen 1M cells below the engine limit: high enough that it binds only
93
+ * where V8 would otherwise have thrown (no cloud that indexes fully today
94
+ * loses coverage), with headroom so the grid never races the ceiling.
95
+ */
96
+ export declare const DEFAULT_MAX_INDEXED_CELLS: number;
55
97
  /**
56
98
  * Cap on the per-visited-cell neighborhood dilation radius, in cells
57
99
  * (issue #1860 review finding 1). `toleranceAt(t)` GROWS with depth
@@ -84,9 +126,12 @@ export interface PointCloudRayHit {
84
126
  export declare class PointCloudSpatialIndex {
85
127
  private readonly cellSize;
86
128
  private readonly maxIndexedPoints;
129
+ private readonly maxIndexedCells;
87
130
  private readonly cells;
88
131
  private chunks;
89
132
  private total;
133
+ /** Set once a point needed a cell the grid had no room left to create. */
134
+ private cellsExhausted;
90
135
  private minX;
91
136
  private minY;
92
137
  private minZ;
@@ -107,22 +152,49 @@ export declare class PointCloudSpatialIndex {
107
152
  private hasCellOrigin;
108
153
  /** Pack ABSOLUTE cell coordinates into one exact-integer key. */
109
154
  private packKey;
110
- constructor(cellSize?: number, maxIndexedPoints?: number);
155
+ constructor(cellSize?: number, maxIndexedPoints?: number, maxIndexedCells?: number);
111
156
  /** Total number of points currently indexed (may be less than the
112
157
  * asset's true point count once `maxIndexedPoints` is hit). */
113
158
  get pointCount(): number;
114
- /** True once further inserts are silently dropped (memory safety valve). */
159
+ /** Number of occupied grid cells the `cells` Map's entry count. */
160
+ get cellCount(): number;
161
+ /**
162
+ * The effective occupied-cell budget after clamping — always strictly
163
+ * below `V8_MAP_MAX_ENTRIES`, whatever the caller asked for.
164
+ */
165
+ get cellCapacity(): number;
166
+ /**
167
+ * Which limb of the safety valve closed the index, or `null` while it
168
+ * is still accepting points. `'cells'` means the grid ran out of room
169
+ * for new occupied cells (sparse cloud); `'points'` means the retained
170
+ * position budget ran out (dense cloud). Callers can surface this to
171
+ * explain why the measure tool stops snapping past a certain point.
172
+ */
173
+ get capReason(): 'points' | 'cells' | null;
174
+ /** True once further inserts are dropped (memory safety valve). */
115
175
  get isCapped(): boolean;
176
+ /**
177
+ * Report the valve binding. Called at the tail of `insertRange`, which
178
+ * returns early once `isCapped`, so this fires exactly once per index
179
+ * (not once per streamed chunk). Truncating the index silently
180
+ * would make degraded picking indistinguishable from "the measure tool
181
+ * is broken", so the outcome is always announced with the numbers and
182
+ * the reason.
183
+ */
184
+ private reportCapIfBound;
116
185
  /**
117
186
  * Insert the first `count` xyz triples of `positions` (renderer/world
118
187
  * space — the same frame `queryRay` expects). Keeps `positions` (and
119
188
  * `classifications`, when given) BY REFERENCE; the caller must not
120
- * mutate them afterwards. A no-op past `maxIndexedPoints` (see class
189
+ * mutate them afterwards. A no-op once either cap has bound (see class
121
190
  * docs) — points beyond the cap render normally but are not indexed
122
- * for picking. When a chunk CROSSES the cap, only the accepted prefix
123
- * is retained (copied) so the cap genuinely bounds retained memory —
124
- * keeping the whole source array by reference would retain e.g. a
125
- * 100M-point one-shot chunk's full 1.2 GB for a 30M-point cap.
191
+ * for picking. When a chunk CROSSES either cap, only the accepted
192
+ * prefix is retained (copied) so the cap genuinely bounds retained
193
+ * memory — keeping the whole source array by reference would retain
194
+ * e.g. a 100M-point one-shot chunk's full 1.2 GB for a 30M-point cap.
195
+ *
196
+ * Two caps apply (see `DEFAULT_MAX_INDEXED_POINTS` and
197
+ * `DEFAULT_MAX_INDEXED_CELLS`): whichever binds first closes the index.
126
198
  */
127
199
  insertRange(positions: Float32Array, count: number, classifications?: Uint8Array | null): void;
128
200
  /** World-space bounds of every indexed point, or null when empty. */
@@ -1 +1 @@
1
- {"version":3,"file":"point-cloud-spatial-index.d.ts","sourceRoot":"","sources":["../../src/pointcloud/point-cloud-spatial-index.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AAE5C;;;;;GAKG;AACH,eAAO,MAAM,kCAAkC,MAAM,CAAC;AAEtD;;;;;;;;;GASG;AACH,eAAO,MAAM,0BAA0B,WAAa,CAAC;AAErD;;;;;;;;;;;;;;;;GAgBG;AACH,eAAO,MAAM,yBAAyB,IAAI,CAAC;AA4E3C,MAAM,WAAW,gBAAgB;IAC/B,iDAAiD;IACjD,QAAQ,EAAE,IAAI,CAAC;IACf,sEAAsE;IACtE,QAAQ,EAAE,MAAM,CAAC;CAClB;AAiCD;;;;GAIG;AACH,qBAAa,sBAAsB;IACjC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAS;IAC1C,OAAO,CAAC,QAAQ,CAAC,KAAK,CAA+B;IACrD,OAAO,CAAC,MAAM,CAAsB;IACpC,OAAO,CAAC,KAAK,CAAK;IAElB,OAAO,CAAC,IAAI,CAAY;IACxB,OAAO,CAAC,IAAI,CAAY;IACxB,OAAO,CAAC,IAAI,CAAY;IACxB,OAAO,CAAC,IAAI,CAAa;IACzB,OAAO,CAAC,IAAI,CAAa;IACzB,OAAO,CAAC,IAAI,CAAa;IAEzB;;;;;;;OAOG;IACH,OAAO,CAAC,WAAW,CAAK;IACxB,OAAO,CAAC,WAAW,CAAK;IACxB,OAAO,CAAC,WAAW,CAAK;IACxB,OAAO,CAAC,aAAa,CAAS;IAE9B,iEAAiE;IACjE,OAAO,CAAC,OAAO;gBAQb,QAAQ,GAAE,MAA2C,EACrD,gBAAgB,GAAE,MAAmC;IASvD;oEACgE;IAChE,IAAI,UAAU,IAAI,MAAM,CAEvB;IAED,4EAA4E;IAC5E,IAAI,QAAQ,IAAI,OAAO,CAEtB;IAED;;;;;;;;;;OAUG;IACH,WAAW,CAAC,SAAS,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,EAAE,eAAe,CAAC,EAAE,UAAU,GAAG,IAAI,GAAG,IAAI;IAyC9F,qEAAqE;IACrE,SAAS,IAAI;QAAE,GAAG,EAAE,IAAI,CAAC;QAAC,GAAG,EAAE,IAAI,CAAA;KAAE,GAAG,IAAI;IAQ5C,8DAA8D;IAC9D,OAAO,CAAC,QAAQ;IAmBhB,OAAO,CAAC,SAAS;IA0BjB;;;;;;;;;;;;;;;;;;;;OAoBG;IACH,OAAO,CAAC,oBAAoB;IA+D5B;;;;;;;;;;;;;;;;;;;;OAoBG;IACH,QAAQ,CACN,MAAM,EAAE,IAAI,EACZ,GAAG,EAAE,IAAI,EACT,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM;IAClC;0EACsE;IACtE,SAAS,CAAC,EAAE,WAAW,GAAG,IAAI,GAC7B,gBAAgB,GAAG,IAAI;IAmJ1B;;gEAE4D;IAC5D,OAAO,IAAI,IAAI;CAShB"}
1
+ {"version":3,"file":"point-cloud-spatial-index.d.ts","sourceRoot":"","sources":["../../src/pointcloud/point-cloud-spatial-index.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AAE5C;;;;;GAKG;AACH,eAAO,MAAM,kCAAkC,MAAM,CAAC;AAEtD;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,0BAA0B,WAAa,CAAC;AAErD;;;;;;GAMG;AACH,eAAO,MAAM,kBAAkB,QAAU,CAAC;AAE1C;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,eAAO,MAAM,yBAAyB,QAAiC,CAAC;AAExE;;;;;;;;;;;;;;;;GAgBG;AACH,eAAO,MAAM,yBAAyB,IAAI,CAAC;AA4E3C,MAAM,WAAW,gBAAgB;IAC/B,iDAAiD;IACjD,QAAQ,EAAE,IAAI,CAAC;IACf,sEAAsE;IACtE,QAAQ,EAAE,MAAM,CAAC;CAClB;AAiCD;;;;GAIG;AACH,qBAAa,sBAAsB;IACjC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAS;IAC1C,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAS;IACzC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAA+B;IACrD,OAAO,CAAC,MAAM,CAAsB;IACpC,OAAO,CAAC,KAAK,CAAK;IAClB,0EAA0E;IAC1E,OAAO,CAAC,cAAc,CAAS;IAE/B,OAAO,CAAC,IAAI,CAAY;IACxB,OAAO,CAAC,IAAI,CAAY;IACxB,OAAO,CAAC,IAAI,CAAY;IACxB,OAAO,CAAC,IAAI,CAAa;IACzB,OAAO,CAAC,IAAI,CAAa;IACzB,OAAO,CAAC,IAAI,CAAa;IAEzB;;;;;;;OAOG;IACH,OAAO,CAAC,WAAW,CAAK;IACxB,OAAO,CAAC,WAAW,CAAK;IACxB,OAAO,CAAC,WAAW,CAAK;IACxB,OAAO,CAAC,aAAa,CAAS;IAE9B,iEAAiE;IACjE,OAAO,CAAC,OAAO;gBAQb,QAAQ,GAAE,MAA2C,EACrD,gBAAgB,GAAE,MAAmC,EACrD,eAAe,GAAE,MAAkC;IAgBrD;oEACgE;IAChE,IAAI,UAAU,IAAI,MAAM,CAEvB;IAED,qEAAqE;IACrE,IAAI,SAAS,IAAI,MAAM,CAEtB;IAED;;;OAGG;IACH,IAAI,YAAY,IAAI,MAAM,CAEzB;IAED;;;;;;OAMG;IACH,IAAI,SAAS,IAAI,QAAQ,GAAG,OAAO,GAAG,IAAI,CAGzC;IAED,mEAAmE;IACnE,IAAI,QAAQ,IAAI,OAAO,CAEtB;IAED;;;;;;;OAOG;IACH,OAAO,CAAC,gBAAgB;IAUxB;;;;;;;;;;;;;OAaG;IACH,WAAW,CAAC,SAAS,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,EAAE,eAAe,CAAC,EAAE,UAAU,GAAG,IAAI,GAAG,IAAI;IA8D9F,qEAAqE;IACrE,SAAS,IAAI;QAAE,GAAG,EAAE,IAAI,CAAC;QAAC,GAAG,EAAE,IAAI,CAAA;KAAE,GAAG,IAAI;IAQ5C,8DAA8D;IAC9D,OAAO,CAAC,QAAQ;IAmBhB,OAAO,CAAC,SAAS;IA0BjB;;;;;;;;;;;;;;;;;;;;OAoBG;IACH,OAAO,CAAC,oBAAoB;IA+D5B;;;;;;;;;;;;;;;;;;;;OAoBG;IACH,QAAQ,CACN,MAAM,EAAE,IAAI,EACZ,GAAG,EAAE,IAAI,EACT,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM;IAClC;0EACsE;IACtE,SAAS,CAAC,EAAE,WAAW,GAAG,IAAI,GAC7B,gBAAgB,GAAG,IAAI;IAmJ1B;;gEAE4D;IAC5D,OAAO,IAAI,IAAI;CAUhB"}
@@ -17,8 +17,46 @@ export const DEFAULT_POINTCLOUD_INDEX_CELL_SIZE = 0.5;
17
17
  * so this only bites on genuinely extreme clouds — at ~20 bytes/point
18
18
  * of CPU overhead (12 bytes retained positions + ~8 bytes grid), 30M
19
19
  * points is already ~600 MB of additional retained memory.
20
+ *
21
+ * This limb bounds RETAINED POSITION MEMORY. It does NOT bound the size
22
+ * of the `cells` Map — see `DEFAULT_MAX_INDEXED_CELLS`, which binds
23
+ * first on sparse clouds.
20
24
  */
21
25
  export const DEFAULT_MAX_INDEXED_POINTS = 30_000_000;
26
+ /**
27
+ * V8's hard ceiling on `Map`/`Set` entry count: exactly 2^24 entries,
28
+ * after which `set()` throws `RangeError: Map maximum size exceeded`.
29
+ * This is an engine limit, not a memory limit — it fires with gigabytes
30
+ * of heap still free, and it is not catchable anywhere useful (it would
31
+ * abort a streaming chunk insert mid-cloud).
32
+ */
33
+ export const V8_MAP_MAX_ENTRIES = 2 ** 24; // 16,777,216
34
+ /**
35
+ * Hard cap on how many OCCUPIED CELLS the grid will create — the second
36
+ * limb of the memory safety valve, and the one that actually protects
37
+ * the `cells` Map.
38
+ *
39
+ * `DEFAULT_MAX_INDEXED_POINTS` alone does not bound the Map, because
40
+ * `insertRange` creates at most one new cell per indexed point and, on a
41
+ * SPARSE cloud, very nearly one per point: airborne LiDAR at 1-20
42
+ * points/m^2, or a coarse site scan, puts on the order of one point in
43
+ * each 0.5 m cell (`DEFAULT_POINTCLOUD_INDEX_CELL_SIZE`), so occupied
44
+ * cells track the point count almost 1:1. The worst case is therefore
45
+ * `cells === points`, and a 30M-point cap sits ABOVE `V8_MAP_MAX_ENTRIES`
46
+ * — the Map throws at 16,777,216 cells, i.e. the valve could never bind
47
+ * on exactly the clouds it was written for. Dense terrestrial scans put
48
+ * thousands of points in a cell and never come close, which is why the
49
+ * gap survived.
50
+ *
51
+ * The two limbs bound different resources and neither implies the other:
52
+ * a sparse cloud exhausts cells long before points; a dense one exhausts
53
+ * points with a tiny grid. Both are enforced.
54
+ *
55
+ * Chosen 1M cells below the engine limit: high enough that it binds only
56
+ * where V8 would otherwise have thrown (no cloud that indexes fully today
57
+ * loses coverage), with headroom so the grid never races the ceiling.
58
+ */
59
+ export const DEFAULT_MAX_INDEXED_CELLS = V8_MAP_MAX_ENTRIES - (1 << 20); // 15,728,640
22
60
  /**
23
61
  * Cap on the per-visited-cell neighborhood dilation radius, in cells
24
62
  * (issue #1860 review finding 1). `toleranceAt(t)` GROWS with depth
@@ -129,9 +167,12 @@ function rayBoxEntryExit(origin, dir, box) {
129
167
  export class PointCloudSpatialIndex {
130
168
  cellSize;
131
169
  maxIndexedPoints;
170
+ maxIndexedCells;
132
171
  cells = new Map();
133
172
  chunks = [];
134
173
  total = 0;
174
+ /** Set once a point needed a cell the grid had no room left to create. */
175
+ cellsExhausted = false;
135
176
  minX = Infinity;
136
177
  minY = Infinity;
137
178
  minZ = Infinity;
@@ -157,62 +198,96 @@ export class PointCloudSpatialIndex {
157
198
  const uz = clampRelCell(cz - this.cellOriginZ) + CELL_KEY_BIAS;
158
199
  return (ux * CELL_KEY_RANGE + uy) * CELL_KEY_RANGE + uz;
159
200
  }
160
- constructor(cellSize = DEFAULT_POINTCLOUD_INDEX_CELL_SIZE, maxIndexedPoints = DEFAULT_MAX_INDEXED_POINTS) {
201
+ constructor(cellSize = DEFAULT_POINTCLOUD_INDEX_CELL_SIZE, maxIndexedPoints = DEFAULT_MAX_INDEXED_POINTS, maxIndexedCells = DEFAULT_MAX_INDEXED_CELLS) {
161
202
  this.cellSize = cellSize > 0 && Number.isFinite(cellSize) ? cellSize : DEFAULT_POINTCLOUD_INDEX_CELL_SIZE;
162
203
  this.maxIndexedPoints =
163
204
  maxIndexedPoints > 0 && Number.isFinite(maxIndexedPoints)
164
205
  ? Math.floor(maxIndexedPoints)
165
206
  : DEFAULT_MAX_INDEXED_POINTS;
207
+ // Clamped BELOW the engine ceiling unconditionally: a caller that asks
208
+ // for more cells than V8 can hold gets a bounded index, never a throw.
209
+ const requestedCells = maxIndexedCells > 0 && Number.isFinite(maxIndexedCells)
210
+ ? Math.floor(maxIndexedCells)
211
+ : DEFAULT_MAX_INDEXED_CELLS;
212
+ this.maxIndexedCells = Math.min(requestedCells, V8_MAP_MAX_ENTRIES - 1);
166
213
  }
167
214
  /** Total number of points currently indexed (may be less than the
168
215
  * asset's true point count once `maxIndexedPoints` is hit). */
169
216
  get pointCount() {
170
217
  return this.total;
171
218
  }
172
- /** True once further inserts are silently dropped (memory safety valve). */
219
+ /** Number of occupied grid cells the `cells` Map's entry count. */
220
+ get cellCount() {
221
+ return this.cells.size;
222
+ }
223
+ /**
224
+ * The effective occupied-cell budget after clamping — always strictly
225
+ * below `V8_MAP_MAX_ENTRIES`, whatever the caller asked for.
226
+ */
227
+ get cellCapacity() {
228
+ return this.maxIndexedCells;
229
+ }
230
+ /**
231
+ * Which limb of the safety valve closed the index, or `null` while it
232
+ * is still accepting points. `'cells'` means the grid ran out of room
233
+ * for new occupied cells (sparse cloud); `'points'` means the retained
234
+ * position budget ran out (dense cloud). Callers can surface this to
235
+ * explain why the measure tool stops snapping past a certain point.
236
+ */
237
+ get capReason() {
238
+ if (this.cellsExhausted)
239
+ return 'cells';
240
+ return this.total >= this.maxIndexedPoints ? 'points' : null;
241
+ }
242
+ /** True once further inserts are dropped (memory safety valve). */
173
243
  get isCapped() {
174
- return this.total >= this.maxIndexedPoints;
244
+ return this.capReason !== null;
245
+ }
246
+ /**
247
+ * Report the valve binding. Called at the tail of `insertRange`, which
248
+ * returns early once `isCapped`, so this fires exactly once per index
249
+ * (not once per streamed chunk). Truncating the index silently
250
+ * would make degraded picking indistinguishable from "the measure tool
251
+ * is broken", so the outcome is always announced with the numbers and
252
+ * the reason.
253
+ */
254
+ reportCapIfBound() {
255
+ const reason = this.capReason;
256
+ if (!reason)
257
+ return;
258
+ console.warn(`[PointCloudSpatialIndex] measure-snap index closed at its ${reason} limit ` +
259
+ `(${this.total} points in ${this.cells.size} cells, cell size ${this.cellSize} m). ` +
260
+ `Later points still render, but the measure tool cannot snap to them.`);
175
261
  }
176
262
  /**
177
263
  * Insert the first `count` xyz triples of `positions` (renderer/world
178
264
  * space — the same frame `queryRay` expects). Keeps `positions` (and
179
265
  * `classifications`, when given) BY REFERENCE; the caller must not
180
- * mutate them afterwards. A no-op past `maxIndexedPoints` (see class
266
+ * mutate them afterwards. A no-op once either cap has bound (see class
181
267
  * docs) — points beyond the cap render normally but are not indexed
182
- * for picking. When a chunk CROSSES the cap, only the accepted prefix
183
- * is retained (copied) so the cap genuinely bounds retained memory —
184
- * keeping the whole source array by reference would retain e.g. a
185
- * 100M-point one-shot chunk's full 1.2 GB for a 30M-point cap.
268
+ * for picking. When a chunk CROSSES either cap, only the accepted
269
+ * prefix is retained (copied) so the cap genuinely bounds retained
270
+ * memory — keeping the whole source array by reference would retain
271
+ * e.g. a 100M-point one-shot chunk's full 1.2 GB for a 30M-point cap.
272
+ *
273
+ * Two caps apply (see `DEFAULT_MAX_INDEXED_POINTS` and
274
+ * `DEFAULT_MAX_INDEXED_CELLS`): whichever binds first closes the index.
186
275
  */
187
276
  insertRange(positions, count, classifications) {
188
- if (count <= 0 || this.total >= this.maxIndexedPoints)
277
+ if (count <= 0 || this.isCapped)
189
278
  return;
190
- const usable = Math.min(count, this.maxIndexedPoints - this.total);
279
+ const room = Math.min(count, this.maxIndexedPoints - this.total);
191
280
  const startId = this.total;
192
- const retainedPositions = usable < count ? positions.slice(0, usable * 3) : positions;
193
- const retainedClasses = classifications
194
- ? (usable < count ? classifications.slice(0, usable) : classifications)
195
- : null;
196
- this.chunks.push({ positions: retainedPositions, classifications: retainedClasses, count: usable, startId });
197
- for (let i = 0; i < usable; i++) {
281
+ // Index first, then record the chunk: the cell cap can stop us part
282
+ // way through, and only the prefix we actually indexed may be retained.
283
+ let accepted = room;
284
+ for (let i = 0; i < room; i++) {
198
285
  const o = i * 3;
199
286
  const x = positions[o];
200
287
  const y = positions[o + 1];
201
288
  const z = positions[o + 2];
202
289
  if (!Number.isFinite(x) || !Number.isFinite(y) || !Number.isFinite(z))
203
290
  continue;
204
- if (x < this.minX)
205
- this.minX = x;
206
- if (x > this.maxX)
207
- this.maxX = x;
208
- if (y < this.minY)
209
- this.minY = y;
210
- if (y > this.maxY)
211
- this.maxY = y;
212
- if (z < this.minZ)
213
- this.minZ = z;
214
- if (z > this.maxZ)
215
- this.maxZ = z;
216
291
  const cx = Math.floor(x / this.cellSize);
217
292
  const cy = Math.floor(y / this.cellSize);
218
293
  const cz = Math.floor(z / this.cellSize);
@@ -225,12 +300,47 @@ export class PointCloudSpatialIndex {
225
300
  const key = this.packKey(cx, cy, cz);
226
301
  let bucket = this.cells.get(key);
227
302
  if (!bucket) {
303
+ // A point landing in an ALREADY occupied cell costs no Map entry,
304
+ // so the cap is only consulted where a new entry would be created.
305
+ if (this.cells.size >= this.maxIndexedCells) {
306
+ this.cellsExhausted = true;
307
+ accepted = i;
308
+ break;
309
+ }
228
310
  bucket = [];
229
311
  this.cells.set(key, bucket);
230
312
  }
313
+ // Bounds fold in only points that are actually indexed, so `getBounds`
314
+ // never advertises a region `queryRay` cannot reach.
315
+ if (x < this.minX)
316
+ this.minX = x;
317
+ if (x > this.maxX)
318
+ this.maxX = x;
319
+ if (y < this.minY)
320
+ this.minY = y;
321
+ if (y > this.maxY)
322
+ this.maxY = y;
323
+ if (z < this.minZ)
324
+ this.minZ = z;
325
+ if (z > this.maxZ)
326
+ this.maxZ = z;
231
327
  bucket.push(startId + i);
232
328
  }
233
- this.total += usable;
329
+ if (accepted <= 0) {
330
+ this.reportCapIfBound();
331
+ return;
332
+ }
333
+ const truncated = accepted < count;
334
+ this.chunks.push({
335
+ positions: truncated ? positions.slice(0, accepted * 3) : positions,
336
+ classifications: classifications
337
+ ? (truncated ? classifications.slice(0, accepted) : classifications)
338
+ : null,
339
+ count: accepted,
340
+ startId,
341
+ });
342
+ this.total += accepted;
343
+ this.reportCapIfBound();
234
344
  }
235
345
  /** World-space bounds of every indexed point, or null when empty. */
236
346
  getBounds() {
@@ -527,6 +637,7 @@ export class PointCloudSpatialIndex {
527
637
  this.cells.clear();
528
638
  this.chunks = [];
529
639
  this.total = 0;
640
+ this.cellsExhausted = false;
530
641
  this.minX = this.minY = this.minZ = Infinity;
531
642
  this.maxX = this.maxY = this.maxZ = -Infinity;
532
643
  this.cellOriginX = this.cellOriginY = this.cellOriginZ = 0;