@needle-tools/engine 4.14.0-next.31f837e → 4.14.0-next.52fdb13

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 (142) hide show
  1. package/CHANGELOG.md +9 -0
  2. package/components.needle.json +1 -1
  3. package/dist/{generateMeshBVH.worker-DFcS3P04.js → generateMeshBVH.worker-DiCnZlf3.js} +1 -1
  4. package/dist/{gltf-progressive-8voIgNp_.js → gltf-progressive-Bm_6aEi4.js} +4 -4
  5. package/dist/{gltf-progressive-BRRBj-nY.umd.cjs → gltf-progressive-BttGBXw6.umd.cjs} +3 -3
  6. package/dist/{gltf-progressive-Dkh3tG4-.min.js → gltf-progressive-T5WKTux5.min.js} +1 -1
  7. package/dist/{loader.worker-C6cXDgR1.js → loader.worker-BqODMeeW.js} +1 -1
  8. package/dist/{materialx-Dx8st96L.min.js → materialx-CJyQZtjt.min.js} +1 -1
  9. package/dist/{materialx-D66rYPqe.js → materialx-DMs1E08Z.js} +2 -2
  10. package/dist/{materialx-CxlgposR.umd.cjs → materialx-DaKKOoVk.umd.cjs} +1 -1
  11. package/dist/{needle-engine.bundle-D7w0XD7M.min.js → needle-engine.bundle-BwfaInTa.min.js} +156 -148
  12. package/dist/{needle-engine.bundle-BQXG5qbQ.umd.cjs → needle-engine.bundle-DJE-Bjpa.umd.cjs} +141 -133
  13. package/dist/{needle-engine.bundle-Byl5i6zJ.js → needle-engine.bundle-TmE5-_na.js} +6741 -6449
  14. package/dist/needle-engine.d.ts +896 -51
  15. package/dist/needle-engine.js +571 -570
  16. package/dist/needle-engine.min.js +1 -1
  17. package/dist/needle-engine.umd.cjs +1 -1
  18. package/dist/{postprocessing-Ce5-UWiA.min.js → postprocessing-06AXuvdv.min.js} +2 -2
  19. package/dist/{postprocessing-BkSpxpYB.js → postprocessing-CI2x8Cln.js} +4 -4
  20. package/dist/{postprocessing-DFVElmAh.umd.cjs → postprocessing-CPDcA21P.umd.cjs} +2 -2
  21. package/dist/{three-Bad8p1pf.umd.cjs → three-BjYim-vL.umd.cjs} +47 -47
  22. package/dist/{three-DFV1-P9z.js → three-Bvk2VKbF.js} +2 -2
  23. package/dist/{three-CWn13_u1.min.js → three-IG2qPafA.min.js} +2 -2
  24. package/dist/{three-examples-CO-tx3Sp.umd.cjs → three-examples-BMmNgNCN.umd.cjs} +1 -1
  25. package/dist/{three-examples-43yqn3mL.js → three-examples-CMYCd5nH.js} +1 -1
  26. package/dist/{three-examples-DKuJVGT4.min.js → three-examples-CQl1fFZp.min.js} +1 -1
  27. package/dist/{three-mesh-ui-DyEA5HQF.min.js → three-mesh-ui-5HVE2RV-.min.js} +1 -1
  28. package/dist/{three-mesh-ui-fSAQJxdI.js → three-mesh-ui-BlakAItG.js} +1 -1
  29. package/dist/{three-mesh-ui-ChzVOraf.umd.cjs → three-mesh-ui-D828VbQp.umd.cjs} +1 -1
  30. package/dist/{vendor-pe19S9r5.min.js → vendor-BxK0WKmT.min.js} +1 -1
  31. package/dist/{vendor-B51YffMU.umd.cjs → vendor-CIDkyBaO.umd.cjs} +1 -1
  32. package/dist/{vendor-CgpZ5ivC.js → vendor-ixwD-vv2.js} +1 -1
  33. package/lib/engine/api.d.ts +203 -18
  34. package/lib/engine/api.js +271 -18
  35. package/lib/engine/api.js.map +1 -1
  36. package/lib/engine/engine_accessibility.d.ts +58 -0
  37. package/lib/engine/engine_accessibility.js +143 -0
  38. package/lib/engine/engine_accessibility.js.map +1 -0
  39. package/lib/engine/engine_context.d.ts +2 -0
  40. package/lib/engine/engine_context.js +7 -0
  41. package/lib/engine/engine_context.js.map +1 -1
  42. package/lib/engine/engine_materialpropertyblock.d.ts +309 -11
  43. package/lib/engine/engine_materialpropertyblock.js +396 -36
  44. package/lib/engine/engine_materialpropertyblock.js.map +1 -1
  45. package/lib/engine/engine_math.d.ts +34 -1
  46. package/lib/engine/engine_math.js +34 -1
  47. package/lib/engine/engine_math.js.map +1 -1
  48. package/lib/engine/engine_networking.js +1 -1
  49. package/lib/engine/engine_networking.js.map +1 -1
  50. package/lib/engine/engine_types.d.ts +2 -0
  51. package/lib/engine/engine_types.js +2 -0
  52. package/lib/engine/engine_types.js.map +1 -1
  53. package/lib/engine/webcomponents/icons.js +3 -0
  54. package/lib/engine/webcomponents/icons.js.map +1 -1
  55. package/lib/engine/webcomponents/logo-element.d.ts +1 -0
  56. package/lib/engine/webcomponents/logo-element.js +3 -1
  57. package/lib/engine/webcomponents/logo-element.js.map +1 -1
  58. package/lib/engine/webcomponents/needle-button.d.ts +37 -11
  59. package/lib/engine/webcomponents/needle-button.js +42 -11
  60. package/lib/engine/webcomponents/needle-button.js.map +1 -1
  61. package/lib/engine/webcomponents/needle-engine.d.ts +10 -2
  62. package/lib/engine/webcomponents/needle-engine.js +13 -3
  63. package/lib/engine/webcomponents/needle-engine.js.map +1 -1
  64. package/lib/engine-components/Camera.js.map +1 -1
  65. package/lib/engine-components/Component.d.ts +1 -2
  66. package/lib/engine-components/Component.js +1 -2
  67. package/lib/engine-components/Component.js.map +1 -1
  68. package/lib/engine-components/DragControls.d.ts +1 -0
  69. package/lib/engine-components/DragControls.js +21 -0
  70. package/lib/engine-components/DragControls.js.map +1 -1
  71. package/lib/engine-components/DropListener.js.map +1 -1
  72. package/lib/engine-components/Duplicatable.js.map +1 -1
  73. package/lib/engine-components/GroundProjection.js.map +1 -1
  74. package/lib/engine-components/NeedleMenu.d.ts +2 -0
  75. package/lib/engine-components/NeedleMenu.js +2 -0
  76. package/lib/engine-components/NeedleMenu.js.map +1 -1
  77. package/lib/engine-components/NestedGltf.js.map +1 -1
  78. package/lib/engine-components/Networking.d.ts +28 -3
  79. package/lib/engine-components/Networking.js +28 -3
  80. package/lib/engine-components/Networking.js.map +1 -1
  81. package/lib/engine-components/ReflectionProbe.d.ts +33 -3
  82. package/lib/engine-components/ReflectionProbe.js +76 -27
  83. package/lib/engine-components/ReflectionProbe.js.map +1 -1
  84. package/lib/engine-components/Renderer.d.ts +2 -0
  85. package/lib/engine-components/Renderer.js +30 -6
  86. package/lib/engine-components/Renderer.js.map +1 -1
  87. package/lib/engine-components/RendererLightmap.js +2 -3
  88. package/lib/engine-components/RendererLightmap.js.map +1 -1
  89. package/lib/engine-components/SeeThrough.d.ts +0 -2
  90. package/lib/engine-components/SeeThrough.js +114 -88
  91. package/lib/engine-components/SeeThrough.js.map +1 -1
  92. package/lib/engine-components/SmoothFollow.js.map +1 -1
  93. package/lib/engine-components/export/usdz/extensions/behavior/BehaviourComponents.d.ts +107 -13
  94. package/lib/engine-components/export/usdz/extensions/behavior/BehaviourComponents.js +167 -30
  95. package/lib/engine-components/export/usdz/extensions/behavior/BehaviourComponents.js.map +1 -1
  96. package/lib/engine-components/ui/Button.d.ts +1 -0
  97. package/lib/engine-components/ui/Button.js +11 -0
  98. package/lib/engine-components/ui/Button.js.map +1 -1
  99. package/lib/engine-components/ui/Raycaster.js.map +1 -1
  100. package/lib/engine-components/ui/Text.d.ts +1 -0
  101. package/lib/engine-components/ui/Text.js +11 -0
  102. package/lib/engine-components/ui/Text.js.map +1 -1
  103. package/lib/engine-components/web/ViewBox.d.ts +2 -2
  104. package/lib/engine-components/web/ViewBox.js +2 -2
  105. package/lib/engine-components/web/ViewBox.js.map +1 -1
  106. package/lib/engine-components/webxr/WebXRPlaneTracking.js.map +1 -1
  107. package/lib/engine-components/webxr/controllers/XRControllerFollow.js.map +1 -1
  108. package/lib/engine-components/webxr/controllers/XRControllerMovement.js.map +1 -1
  109. package/package.json +4 -4
  110. package/src/engine/api.ts +371 -19
  111. package/src/engine/engine_accessibility.ts +178 -0
  112. package/src/engine/engine_context.ts +9 -0
  113. package/src/engine/engine_materialpropertyblock.ts +499 -42
  114. package/src/engine/engine_math.ts +34 -1
  115. package/src/engine/engine_networking.ts +1 -1
  116. package/src/engine/engine_types.ts +5 -0
  117. package/src/engine/webcomponents/icons.ts +3 -0
  118. package/src/engine/webcomponents/logo-element.ts +4 -1
  119. package/src/engine/webcomponents/needle-button.ts +44 -13
  120. package/src/engine/webcomponents/needle-engine.ts +18 -7
  121. package/src/engine-components/Camera.ts +2 -2
  122. package/src/engine-components/Component.ts +1 -3
  123. package/src/engine-components/DragControls.ts +29 -4
  124. package/src/engine-components/DropListener.ts +1 -1
  125. package/src/engine-components/Duplicatable.ts +1 -1
  126. package/src/engine-components/GroundProjection.ts +3 -0
  127. package/src/engine-components/NeedleMenu.ts +8 -3
  128. package/src/engine-components/NestedGltf.ts +1 -1
  129. package/src/engine-components/Networking.ts +29 -4
  130. package/src/engine-components/ReflectionProbe.ts +81 -31
  131. package/src/engine-components/Renderer.ts +34 -6
  132. package/src/engine-components/RendererLightmap.ts +2 -3
  133. package/src/engine-components/SeeThrough.ts +122 -107
  134. package/src/engine-components/SmoothFollow.ts +2 -2
  135. package/src/engine-components/export/usdz/extensions/behavior/BehaviourComponents.ts +198 -65
  136. package/src/engine-components/ui/Button.ts +13 -1
  137. package/src/engine-components/ui/Raycaster.ts +1 -1
  138. package/src/engine-components/ui/Text.ts +13 -0
  139. package/src/engine-components/web/ViewBox.ts +9 -2
  140. package/src/engine-components/webxr/WebXRPlaneTracking.ts +3 -3
  141. package/src/engine-components/webxr/controllers/XRControllerFollow.ts +1 -1
  142. package/src/engine-components/webxr/controllers/XRControllerMovement.ts +4 -4
@@ -1,11 +1,15 @@
1
1
  import { Texture } from "three";
2
- // Centralized registry for all property block related data
2
+ /**
3
+ * Centralized registry for all property block related data.
4
+ * Uses WeakMaps to allow automatic garbage collection when objects are destroyed.
5
+ * @internal
6
+ */
3
7
  class PropertyBlockRegistry {
4
8
  // Map from object to its property block
5
9
  objectToBlock = new WeakMap();
6
10
  // Track which materials belong to which property block (to prevent applying to wrong materials)
7
11
  // Use WeakSet for automatic cleanup when materials are garbage collected
8
- objectToMaterials = new WeakMap();
12
+ // private objectToMaterials = new WeakMap<Object3D, WeakSet<Material>>();
9
13
  // Track which meshes have callbacks for which property block owners
10
14
  meshToOwners = new WeakMap();
11
15
  // Track original callback functions for cleanup (reserved for future use)
@@ -18,19 +22,19 @@ class PropertyBlockRegistry {
18
22
  }
19
23
  deleteBlock(object) {
20
24
  this.objectToBlock.delete(object);
21
- this.objectToMaterials.delete(object);
22
- }
23
- addMaterial(object, material) {
24
- let materials = this.objectToMaterials.get(object);
25
- if (!materials) {
26
- materials = new WeakSet();
27
- this.objectToMaterials.set(object, materials);
28
- }
29
- materials.add(material);
30
- }
31
- hasMaterial(object, material) {
32
- return this.objectToMaterials.get(object)?.has(material) ?? false;
33
- }
25
+ // this.objectToMaterials.delete(object);
26
+ }
27
+ // addMaterial(object: Object3D, material: Material): void {
28
+ // let materials = this.objectToMaterials.get(object);
29
+ // if (!materials) {
30
+ // materials = new WeakSet();
31
+ // this.objectToMaterials.set(object, materials);
32
+ // }
33
+ // materials.add(material);
34
+ // }
35
+ // hasMaterial(object: Object3D, material: Material): boolean {
36
+ // return this.objectToMaterials.get(object)?.has(material) ?? false;
37
+ // }
34
38
  isHooked(mesh, owner) {
35
39
  return this.meshToOwners.get(mesh)?.has(owner) ?? false;
36
40
  }
@@ -59,14 +63,127 @@ class PropertyBlockRegistry {
59
63
  }
60
64
  }
61
65
  const registry = new PropertyBlockRegistry();
66
+ /**
67
+ * MaterialPropertyBlock allows per-object material property overrides without creating new material instances.
68
+ * This is useful for rendering multiple objects with the same base material but different properties
69
+ * (e.g., different colors, textures, or shader parameters).
70
+ *
71
+ * ## How Property Blocks Work
72
+ *
73
+ * **Important**: Overrides are registered on the **Object3D**, not on the material.
74
+ * This means:
75
+ * - If you change the object's material, the overrides will still be applied to the new material
76
+ * - Multiple objects can share the same material but have different property overrides
77
+ * - If you don't want overrides applied after changing a material, you must remove them using {@link removeOveride}, {@link clearAllOverrides}, or {@link dispose}
78
+ *
79
+ * The property block system works by:
80
+ * - Temporarily applying overrides in onBeforeRender
81
+ * - Restoring original values in onAfterRender
82
+ * - Managing shader defines and program cache keys for correct shader compilation
83
+ * - Supporting texture coordinate transforms per object
84
+ *
85
+ * ## Common Use Cases
86
+ *
87
+ * - **Lightmaps**: Apply unique lightmap textures to individual objects sharing the same material
88
+ * - **Reflection Probes**: Apply different environment maps per object for localized reflections
89
+ * - **See-through effects**: Temporarily override transparency/transmission properties for X-ray effects
90
+ *
91
+ * ## Getting a MaterialPropertyBlock
92
+ *
93
+ * **Important**: Do not use the constructor directly. Instead, use the static {@link MaterialPropertyBlock.get} method:
94
+ *
95
+ * ```typescript
96
+ * const block = MaterialPropertyBlock.get(myMesh);
97
+ * ```
98
+ *
99
+ * This method will either return an existing property block or create a new one if it doesn't exist.
100
+ * It automatically:
101
+ * - Creates the property block instance
102
+ * - Registers it in the internal registry
103
+ * - Attaches the necessary render callbacks to the object
104
+ * - Handles Groups by applying overrides to all child meshes
105
+ *
106
+ * @example Basic usage
107
+ * ```typescript
108
+ * // Get or create a property block for an object
109
+ * const block = MaterialPropertyBlock.get(myMesh);
110
+ *
111
+ * // Override the color property
112
+ * block.setOverride("color", new Color(1, 0, 0));
113
+ *
114
+ * // Override a texture with custom UV transform (useful for lightmaps)
115
+ * block.setOverride("lightMap", myLightmapTexture, {
116
+ * offset: new Vector2(0.5, 0.5),
117
+ * repeat: new Vector2(2, 2)
118
+ * });
119
+ *
120
+ * // Set a shader define
121
+ * block.setDefine("USE_CUSTOM_FEATURE", 1);
122
+ * ```
123
+ *
124
+ * @example Material swapping behavior
125
+ * ```typescript
126
+ * const mesh = new Mesh(geometry, materialA);
127
+ * const block = MaterialPropertyBlock.get(mesh);
128
+ * block.setOverride("color", new Color(1, 0, 0));
129
+ *
130
+ * // The color override is red for materialA
131
+ *
132
+ * // Swap the material - overrides persist and apply to the new material!
133
+ * mesh.material = materialB;
134
+ * // The color override is now red for materialB too
135
+ *
136
+ * // If you don't want overrides on the new material, remove them:
137
+ * block.clearAllOverrides(); // Remove all overrides
138
+ * // or
139
+ * block.removeOveride("color"); // Remove specific override
140
+ * // or
141
+ * block.dispose(); // Remove the entire property block
142
+ * ```
143
+ *
144
+ * @example Lightmap usage
145
+ * ```typescript
146
+ * const block = MaterialPropertyBlock.get(mesh);
147
+ * block.setOverride("lightMap", lightmapTexture);
148
+ * block.setOverride("lightMapIntensity", 1.5);
149
+ * ```
150
+ *
151
+ * @example See-through effect
152
+ * ```typescript
153
+ * const block = MaterialPropertyBlock.get(mesh);
154
+ * block.setOverride("transparent", true);
155
+ * block.setOverride("opacity", 0.3);
156
+ * ```
157
+ *
158
+ * @template T The material type this property block is associated with
159
+ */
62
160
  export class MaterialPropertyBlock {
63
161
  _overrides = [];
64
162
  _defines = {};
65
163
  _object = null;
164
+ /** The object this property block is attached to */
66
165
  get object() { return this._object; }
166
+ /**
167
+ * Creates a new MaterialPropertyBlock
168
+ * @param object The object this property block is for (optional)
169
+ */
67
170
  constructor(object = null) {
68
171
  this._object = object;
69
172
  }
173
+ /**
174
+ * Gets or creates a MaterialPropertyBlock for the given object.
175
+ * This is the recommended way to obtain a property block instance.
176
+ *
177
+ * @template T The material type
178
+ * @param object The object to get/create a property block for
179
+ * @returns The MaterialPropertyBlock associated with this object
180
+ *
181
+ * @example
182
+ * ```typescript
183
+ * const block = MaterialPropertyBlock.get(myMesh);
184
+ * block.setOverride("roughness", 0.5);
185
+ * ```
186
+ */
70
187
  static get(object) {
71
188
  let block = registry.getBlock(object);
72
189
  if (!block) {
@@ -76,6 +193,19 @@ export class MaterialPropertyBlock {
76
193
  }
77
194
  return block;
78
195
  }
196
+ /**
197
+ * Checks if an object has any property overrides
198
+ * @param object The object to check
199
+ * @returns True if the object has a property block with overrides
200
+ */
201
+ static hasOverrides(object) {
202
+ const block = registry.getBlock(object);
203
+ return block ? block.hasOverrides() : false;
204
+ }
205
+ /**
206
+ * Disposes this property block and cleans up associated resources.
207
+ * After calling dispose, this property block should not be used.
208
+ */
79
209
  dispose() {
80
210
  if (this._object) {
81
211
  registry.deleteBlock(this._object);
@@ -97,43 +227,134 @@ export class MaterialPropertyBlock {
97
227
  getOverride(name) {
98
228
  return this._overrides.find(o => o.name === name);
99
229
  }
100
- clearOverride(name) {
230
+ /**
231
+ * Removes a specific property override.
232
+ * After removal, the material will use its original property value for this property.
233
+ *
234
+ * @param name The property name to remove the override for
235
+ *
236
+ * @example
237
+ * ```typescript
238
+ * const block = MaterialPropertyBlock.get(mesh);
239
+ *
240
+ * // Set some overrides
241
+ * block.setOverride("color", new Color(1, 0, 0));
242
+ * block.setOverride("roughness", 0.5);
243
+ * block.setOverride("lightMap", lightmapTexture);
244
+ *
245
+ * // Remove a specific override - the material will now use its original color
246
+ * block.removeOveride("color");
247
+ *
248
+ * // Other overrides (roughness, lightMap) remain active
249
+ * ```
250
+ */
251
+ removeOveride(name) {
101
252
  const index = this._overrides.findIndex(o => o.name === name);
102
253
  if (index >= 0) {
103
254
  this._overrides.splice(index, 1);
104
255
  }
105
256
  }
257
+ /**
258
+ * Removes all property overrides from this block.
259
+ * After calling this, the material will use its original values for all properties.
260
+ *
261
+ * **Note**: This does NOT remove shader defines. Use {@link clearDefine} or {@link dispose} for that.
262
+ *
263
+ * @example Remove all overrides but keep the property block
264
+ * ```typescript
265
+ * const block = MaterialPropertyBlock.get(mesh);
266
+ *
267
+ * // Set multiple overrides
268
+ * block.setOverride("color", new Color(1, 0, 0));
269
+ * block.setOverride("roughness", 0.5);
270
+ * block.setOverride("lightMap", lightmapTexture);
271
+ *
272
+ * // Later, remove all overrides at once
273
+ * block.clearAllOverrides();
274
+ *
275
+ * // The material now uses its original values
276
+ * // The property block still exists and can be reused with new overrides
277
+ * ```
278
+ *
279
+ * @example Temporarily disable all overrides
280
+ * ```typescript
281
+ * const block = MaterialPropertyBlock.get(mesh);
282
+ *
283
+ * // Save current overrides if you want to restore them later
284
+ * const savedOverrides = [...block.overrides];
285
+ *
286
+ * // Clear all overrides temporarily
287
+ * block.clearAllOverrides();
288
+ *
289
+ * // Do some rendering without overrides...
290
+ *
291
+ * // Restore overrides
292
+ * savedOverrides.forEach(override => {
293
+ * block.setOverride(override.name, override.value, override.textureTransform);
294
+ * });
295
+ * ```
296
+ *
297
+ * @see {@link removeOveride} - To remove a single override
298
+ * @see {@link dispose} - To completely remove the property block and clean up resources
299
+ */
106
300
  clearAllOverrides() {
107
301
  this._overrides = [];
108
302
  }
109
- removeOverride(name) {
110
- this.clearOverride(name);
111
- }
303
+ /**
304
+ * Gets all property overrides as a readonly array
305
+ * @returns Array of all property overrides
306
+ */
112
307
  get overrides() {
113
308
  return this._overrides;
114
309
  }
310
+ /**
311
+ * Checks if this property block has any overrides
312
+ * @returns True if there are any overrides set
313
+ */
115
314
  hasOverrides() {
116
315
  return this._overrides.length > 0;
117
316
  }
118
317
  /**
119
- * Set a shader define that will be included in the program cache key
120
- * This allows different objects sharing the same material to have different shader programs
318
+ * Set a shader define that will be included in the program cache key.
319
+ * This allows different objects sharing the same material to have different shader programs.
320
+ *
321
+ * Defines affect shader compilation and are useful for enabling/disabling features per-object.
322
+ *
323
+ * @param name The define name (e.g., "USE_LIGHTMAP", "ENABLE_REFLECTIONS")
324
+ * @param value The define value (typically a boolean, number, or string)
325
+ *
326
+ * @example
327
+ * ```typescript
328
+ * // Enable a feature for this specific object
329
+ * block.setDefine("USE_CUSTOM_SHADER", true);
330
+ * block.setDefine("QUALITY_LEVEL", 2);
331
+ * ```
121
332
  */
122
333
  setDefine(name, value) {
123
334
  this._defines[name] = value;
124
335
  }
125
336
  /**
126
337
  * Remove a shader define
338
+ * @param name The define name to remove
127
339
  */
128
340
  clearDefine(name) {
129
341
  this._defines[name] = undefined;
130
342
  }
131
343
  /**
132
344
  * Get all defines set on this property block
345
+ * @returns A readonly record of all defines
133
346
  */
134
347
  getDefines() {
135
348
  return this._defines;
136
349
  }
350
+ /**
351
+ * Generates a cache key based on the current overrides and defines.
352
+ * This key is used internally to ensure correct shader program selection
353
+ * when objects share materials but have different property blocks.
354
+ *
355
+ * @returns A string representing the current state of this property block
356
+ * @internal
357
+ */
137
358
  getCacheKey() {
138
359
  const parts = [];
139
360
  // Add defines to cache key
@@ -179,9 +400,20 @@ export class MaterialPropertyBlock {
179
400
  return parts.join(";");
180
401
  }
181
402
  }
403
+ /**
404
+ * Symbol used to store original material values on the material object
405
+ * @internal
406
+ */
182
407
  const $originalValues = Symbol("originalValues");
408
+ /**
409
+ * Symbol used to store saved texture transforms on the material object
410
+ * @internal
411
+ */
183
412
  const $savedTextureTransforms = Symbol("savedTextureTransforms");
184
- // Collect all materials from an object and its children
413
+ /**
414
+ * Collect all materials from an object and its children
415
+ * @internal
416
+ */
185
417
  function collectMaterials(object, materials) {
186
418
  const obj = object;
187
419
  if (obj.material) {
@@ -197,8 +429,14 @@ function collectMaterials(object, materials) {
197
429
  object.children.forEach(child => collectMaterials(child, materials));
198
430
  }
199
431
  }
200
- // Find property block by checking this object and parent (if parent is a Group)
201
- // Returns both the block and the owner object
432
+ /**
433
+ * Find property block by checking this object and parent (if parent is a Group).
434
+ * Returns both the block and the owner object.
435
+ *
436
+ * @param obj The object to search from
437
+ * @returns The property block and its owner object, or undefined if not found
438
+ * @internal
439
+ */
202
440
  function findPropertyBlockAndOwner(obj) {
203
441
  // First check if this object itself has a property block
204
442
  let block = registry.getBlock(obj);
@@ -212,17 +450,94 @@ function findPropertyBlockAndOwner(obj) {
212
450
  }
213
451
  return undefined;
214
452
  }
453
+ /**
454
+ * Symbol to track which materials are currently being rendered for an object
455
+ * @internal
456
+ */
457
+ const currentlyRenderingFlag = Symbol("beforeRenderingFlag");
458
+ /**
459
+ * Tracks original transparent values that were changed during render list building
460
+ * @internal
461
+ */
462
+ const beforeRenderListTransparentChanged = new WeakMap();
463
+ /**
464
+ * Tracks original transmission values that were changed during render list building
465
+ * @internal
466
+ */
467
+ const beforeRenderListTransparentChangedTransmission = new WeakMap();
468
+ /**
469
+ * Callback invoked before an object is added to the render list.
470
+ * Used to temporarily override transparency/transmission for correct render list assignment.
471
+ * @internal
472
+ */
473
+ const onBeforeRenderListPush = function (_object, _geometry, material, _group) {
474
+ const block = registry.getBlock(_object);
475
+ if (!block) {
476
+ return;
477
+ }
478
+ if (block.hasOverrides()) {
479
+ const transmission = block.getOverride("transmission")?.value;
480
+ const transparent = block.getOverride("transparent")?.value;
481
+ if (transmission !== undefined && typeof transmission === "number" && "transmission" in material && transmission !== material.transmission) {
482
+ beforeRenderListTransparentChangedTransmission.set(this, material.transmission);
483
+ material.transmission = transmission;
484
+ }
485
+ if (transparent !== undefined && typeof transparent === "boolean" && transparent !== material.transparent) {
486
+ beforeRenderListTransparentChanged.set(this, material.transparent);
487
+ material.transparent = transparent;
488
+ }
489
+ }
490
+ };
491
+ /**
492
+ * Callback invoked after an object is added to the render list.
493
+ * Restores the original transparency/transmission values that were overridden in onBeforeRenderListPush.
494
+ * @internal
495
+ */
496
+ const onAfterRenderListPush = function (_object, _geometry, material, _group) {
497
+ const prevTransparent = beforeRenderListTransparentChanged.get(_object);
498
+ if (prevTransparent !== undefined) {
499
+ beforeRenderListTransparentChanged.delete(_object);
500
+ material.transparent = prevTransparent;
501
+ }
502
+ const prevTransmission = beforeRenderListTransparentChangedTransmission.get(_object);
503
+ if (prevTransmission !== undefined) {
504
+ beforeRenderListTransparentChangedTransmission.delete(_object);
505
+ material.transmission = prevTransmission;
506
+ }
507
+ };
215
508
  // #region OnBeforeRender
509
+ /**
510
+ * Main callback invoked before rendering an object.
511
+ * Applies property block overrides and defines to the material.
512
+ * @internal
513
+ */
216
514
  const onBeforeRender_MaterialBlock = function (_renderer, _scene, _camera, _geometry, material, _group) {
515
+ // Only run if the material belongs to this object and is a "regular" material (not depth or other override material)
516
+ const materials = this.material;
517
+ if (!materials)
518
+ return;
519
+ if (Array.isArray(materials)) {
520
+ if (!materials.includes(material))
521
+ return;
522
+ }
523
+ else if (materials !== material) {
524
+ return;
525
+ }
526
+ // Keep track of which materials rendering started for so we can check in onAfterRender if it was processed
527
+ // (in case of override materials like depth material where onBeforeRender runs but we don't want to apply overrides)
528
+ if (this[currentlyRenderingFlag] === undefined)
529
+ this[currentlyRenderingFlag] = new WeakSet();
530
+ this[currentlyRenderingFlag].add(material);
531
+ // Before rendering, check if this object (or its parent Group) has a property block with overrides for this material.
217
532
  const result = findPropertyBlockAndOwner(this);
218
533
  if (!result) {
219
534
  return;
220
535
  }
221
536
  const { block: propertyBlock, owner } = result;
222
537
  // Only apply if this material was registered with this property block
223
- if (!registry.hasMaterial(owner, material)) {
224
- return;
225
- }
538
+ // if (!registry.hasMaterial(owner, material)) {
539
+ // return;
540
+ // }
226
541
  const overrides = propertyBlock.overrides;
227
542
  const mat = material;
228
543
  // Apply defines to material - this affects shader compilation
@@ -297,16 +612,27 @@ const onBeforeRender_MaterialBlock = function (_renderer, _scene, _camera, _geom
297
612
  mat._forceRefresh = true;
298
613
  };
299
614
  // #region OnAfterRender
615
+ /**
616
+ * Main callback invoked after rendering an object.
617
+ * Restores the original material property values and defines.
618
+ * @internal
619
+ */
300
620
  const onAfterRender_MaterialBlock = function (_renderer, _scene, _camera, _geometry, material, _group) {
621
+ // We don't want to run this logic if onBeforeRender didn't run for this material (e.g. due to DepthMaterial or other override material), so we check the flag set in onBeforeRender
622
+ if (this[currentlyRenderingFlag] === undefined)
623
+ return;
624
+ if (!this[currentlyRenderingFlag].has(material))
625
+ return;
626
+ this[currentlyRenderingFlag].delete(material);
301
627
  const result = findPropertyBlockAndOwner(this);
302
628
  if (!result) {
303
629
  return;
304
630
  }
305
631
  const { block: propertyBlock, owner } = result;
306
632
  // Only restore if this material was registered with this property block
307
- if (!registry.hasMaterial(owner, material)) {
308
- return;
309
- }
633
+ // if (!registry.hasMaterial(owner, material)) {
634
+ // return;
635
+ // }
310
636
  const overrides = propertyBlock.overrides;
311
637
  const mat = material;
312
638
  const originalValues = mat[$originalValues];
@@ -359,31 +685,48 @@ const onAfterRender_MaterialBlock = function (_renderer, _scene, _camera, _geome
359
685
  mat._forceRefresh = true;
360
686
  };
361
687
  // #region Attach Callbacks
688
+ /**
689
+ * Attaches the property block render callbacks to an object and its child meshes.
690
+ * @param object The object to attach callbacks to
691
+ * @param _propertyBlock The property block being attached (unused but kept for clarity)
692
+ * @internal
693
+ */
362
694
  function attachPropertyBlockToObject(object, _propertyBlock) {
363
695
  // Collect and register all materials that belong to this property block
364
- const materials = new Set();
365
- collectMaterials(object, materials);
366
- materials.forEach(mat => registry.addMaterial(object, mat));
696
+ // const materials = new Set<Material>();
697
+ // collectMaterials(object, materials);
698
+ // materials.forEach(mat => registry.addMaterial(object, mat));
367
699
  // Attach callbacks to renderable objects (Mesh, SkinnedMesh)
368
700
  // Groups don't render themselves but we still need to handle child meshes
369
701
  if (object.type === "Group") {
370
702
  object.children.forEach(child => {
371
703
  if (child.type === "Mesh" || child.type === "SkinnedMesh") {
372
- attachCallbacksToMesh(child, object);
704
+ attachCallbacksToMesh(child, object, _propertyBlock);
373
705
  }
374
706
  });
375
707
  }
376
708
  else if (object.type === "Mesh" || object.type === "SkinnedMesh") {
377
- attachCallbacksToMesh(object, object);
709
+ attachCallbacksToMesh(object, object, _propertyBlock);
378
710
  }
379
711
  }
380
- function attachCallbacksToMesh(mesh, propertyBlockOwner) {
712
+ /**
713
+ * Attaches render callbacks to a specific mesh object.
714
+ * Chains with existing callbacks if they exist.
715
+ * @param mesh The mesh to attach callbacks to
716
+ * @param propertyBlockOwner The object that owns the property block (may be the mesh itself or its parent Group)
717
+ * @internal
718
+ */
719
+ function attachCallbacksToMesh(mesh, propertyBlockOwner, _propertyBlock) {
381
720
  // Check if this specific mesh already has our callbacks attached for this property block owner
382
721
  if (registry.isHooked(mesh, propertyBlockOwner)) {
383
722
  // Already hooked for this property block owner
384
723
  return;
385
724
  }
386
725
  registry.addHook(mesh, propertyBlockOwner);
726
+ /**
727
+ * Expose the property block for e.g. Needle Inspector
728
+ */
729
+ mesh["needle:materialPropertyBlock"] = _propertyBlock;
387
730
  if (!mesh.onBeforeRender) {
388
731
  mesh.onBeforeRender = onBeforeRender_MaterialBlock;
389
732
  }
@@ -404,8 +747,25 @@ function attachCallbacksToMesh(mesh, propertyBlockOwner) {
404
747
  original.call(this, renderer, scene, camera, geometry, material, group);
405
748
  };
406
749
  }
750
+ /** @ts-ignore patched in three.js */
751
+ mesh.onBeforeRenderListPush = onBeforeRenderListPush;
752
+ /** @ts-ignore patched in three.js */
753
+ mesh.onAfterRenderListPush = onAfterRenderListPush;
407
754
  }
408
755
  //#endregion
756
+ /**
757
+ * Checks if an object has a MaterialPropertyBlock attached to it.
758
+ *
759
+ * @param object The object to check
760
+ * @returns True if the object has a property block registered
761
+ *
762
+ * @example
763
+ * ```typescript
764
+ * if (objectHasPropertyBlock(myMesh)) {
765
+ * console.log("This mesh has property overrides");
766
+ * }
767
+ * ```
768
+ */
409
769
  export function objectHasPropertyBlock(object) {
410
770
  return registry.getBlock(object) !== undefined;
411
771
  }
@@ -1 +1 @@
1
- {"version":3,"file":"engine_materialpropertyblock.js","sourceRoot":"","sources":["../../src/engine/engine_materialpropertyblock.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"engine_materialpropertyblock.js","sourceRoot":"","sources":["../../src/engine/engine_materialpropertyblock.ts"],"names":[],"mappings":"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"}