@needle-tools/engine 4.13.1-next.9fc3e64 → 4.14.0-next.31f837e

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 (52) hide show
  1. package/dist/generateMeshBVH.worker-DFcS3P04.js +21 -0
  2. package/dist/{gltf-progressive-Dbi_Tfhb.js → gltf-progressive-8voIgNp_.js} +4 -4
  3. package/dist/{gltf-progressive-CaUGGjVL.umd.cjs → gltf-progressive-BRRBj-nY.umd.cjs} +1 -1
  4. package/dist/{gltf-progressive-DuAR0MQR.min.js → gltf-progressive-Dkh3tG4-.min.js} +1 -1
  5. package/dist/loader.worker-C6cXDgR1.js +23 -0
  6. package/dist/{materialx-BF23AVE8.umd.cjs → materialx-CxlgposR.umd.cjs} +1 -1
  7. package/dist/{materialx-fkoFuRh3.js → materialx-D66rYPqe.js} +2 -2
  8. package/dist/{materialx-B9ddsHcF.min.js → materialx-Dx8st96L.min.js} +1 -1
  9. package/dist/{needle-engine.bundle-Dqrh7aWw.umd.cjs → needle-engine.bundle-BQXG5qbQ.umd.cjs} +136 -143
  10. package/dist/{needle-engine.bundle-BZRE5G6O.js → needle-engine.bundle-Byl5i6zJ.js} +6120 -5904
  11. package/dist/{needle-engine.bundle-DwybonUg.min.js → needle-engine.bundle-D7w0XD7M.min.js} +147 -154
  12. package/dist/needle-engine.d.ts +61 -9
  13. package/dist/needle-engine.js +416 -415
  14. package/dist/needle-engine.min.js +1 -1
  15. package/dist/needle-engine.umd.cjs +1 -1
  16. package/dist/{postprocessing-DdM-tz1j.js → postprocessing-BkSpxpYB.js} +2 -2
  17. package/dist/{postprocessing-BVNrgYZK.min.js → postprocessing-Ce5-UWiA.min.js} +1 -1
  18. package/dist/{postprocessing-CI2TjWpu.umd.cjs → postprocessing-DFVElmAh.umd.cjs} +1 -1
  19. package/dist/{three-BW2s1Yl-.umd.cjs → three-Bad8p1pf.umd.cjs} +46 -46
  20. package/dist/{three-I__hSXzr.min.js → three-CWn13_u1.min.js} +33 -33
  21. package/dist/{three-VvRoMeIN.js → three-DFV1-P9z.js} +4209 -4209
  22. package/dist/{three-examples-BhfOE7NG.js → three-examples-43yqn3mL.js} +1 -1
  23. package/dist/{three-examples-Bpfu6ke_.umd.cjs → three-examples-CO-tx3Sp.umd.cjs} +1 -1
  24. package/dist/{three-examples-D8zAE_7t.min.js → three-examples-DKuJVGT4.min.js} +1 -1
  25. package/dist/{three-mesh-ui-BU55xDxJ.umd.cjs → three-mesh-ui-ChzVOraf.umd.cjs} +1 -1
  26. package/dist/{three-mesh-ui-C3QbemOV.min.js → three-mesh-ui-DyEA5HQF.min.js} +1 -1
  27. package/dist/{three-mesh-ui-CcMp-FQm.js → three-mesh-ui-fSAQJxdI.js} +1 -1
  28. package/dist/{vendor-COVQl0b8.umd.cjs → vendor-B51YffMU.umd.cjs} +1 -1
  29. package/dist/{vendor-BiyIZ61v.js → vendor-CgpZ5ivC.js} +1 -1
  30. package/dist/{vendor-DW7zqjuT.min.js → vendor-pe19S9r5.min.js} +1 -1
  31. package/lib/engine/api.d.ts +1 -0
  32. package/lib/engine/api.js +1 -0
  33. package/lib/engine/api.js.map +1 -1
  34. package/lib/engine/engine_lightdata.js +8 -6
  35. package/lib/engine/engine_lightdata.js.map +1 -1
  36. package/lib/engine/engine_materialpropertyblock.d.ts +47 -0
  37. package/lib/engine/engine_materialpropertyblock.js +412 -0
  38. package/lib/engine/engine_materialpropertyblock.js.map +1 -0
  39. package/lib/engine-components/ReflectionProbe.d.ts +0 -1
  40. package/lib/engine-components/ReflectionProbe.js +15 -76
  41. package/lib/engine-components/ReflectionProbe.js.map +1 -1
  42. package/lib/engine-components/RendererLightmap.d.ts +13 -9
  43. package/lib/engine-components/RendererLightmap.js +68 -81
  44. package/lib/engine-components/RendererLightmap.js.map +1 -1
  45. package/package.json +2 -2
  46. package/src/engine/api.ts +1 -0
  47. package/src/engine/engine_lightdata.ts +8 -6
  48. package/src/engine/engine_materialpropertyblock.ts +500 -0
  49. package/src/engine-components/ReflectionProbe.ts +17 -89
  50. package/src/engine-components/RendererLightmap.ts +76 -87
  51. package/dist/generateMeshBVH.worker-iyfPIK6R.js +0 -21
  52. package/dist/loader.worker-C1GG9A7C.js +0 -23
@@ -0,0 +1,412 @@
1
+ import { Texture } from "three";
2
+ // Centralized registry for all property block related data
3
+ class PropertyBlockRegistry {
4
+ // Map from object to its property block
5
+ objectToBlock = new WeakMap();
6
+ // Track which materials belong to which property block (to prevent applying to wrong materials)
7
+ // Use WeakSet for automatic cleanup when materials are garbage collected
8
+ objectToMaterials = new WeakMap();
9
+ // Track which meshes have callbacks for which property block owners
10
+ meshToOwners = new WeakMap();
11
+ // Track original callback functions for cleanup (reserved for future use)
12
+ meshToOriginalCallbacks = new WeakMap();
13
+ getBlock(object) {
14
+ return this.objectToBlock.get(object);
15
+ }
16
+ setBlock(object, block) {
17
+ this.objectToBlock.set(object, block);
18
+ }
19
+ deleteBlock(object) {
20
+ 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
+ }
34
+ isHooked(mesh, owner) {
35
+ return this.meshToOwners.get(mesh)?.has(owner) ?? false;
36
+ }
37
+ addHook(mesh, owner) {
38
+ let owners = this.meshToOwners.get(mesh);
39
+ if (!owners) {
40
+ owners = new Set();
41
+ this.meshToOwners.set(mesh, owners);
42
+ }
43
+ owners.add(owner);
44
+ }
45
+ removeHook(mesh, owner) {
46
+ const owners = this.meshToOwners.get(mesh);
47
+ if (owners) {
48
+ owners.delete(owner);
49
+ if (owners.size === 0) {
50
+ this.meshToOwners.delete(mesh);
51
+ }
52
+ }
53
+ }
54
+ getOriginalCallbacks(mesh) {
55
+ return this.meshToOriginalCallbacks.get(mesh);
56
+ }
57
+ setOriginalCallbacks(mesh, callbacks) {
58
+ this.meshToOriginalCallbacks.set(mesh, callbacks);
59
+ }
60
+ }
61
+ const registry = new PropertyBlockRegistry();
62
+ export class MaterialPropertyBlock {
63
+ _overrides = [];
64
+ _defines = {};
65
+ _object = null;
66
+ get object() { return this._object; }
67
+ constructor(object = null) {
68
+ this._object = object;
69
+ }
70
+ static get(object) {
71
+ let block = registry.getBlock(object);
72
+ if (!block) {
73
+ block = new MaterialPropertyBlock(object);
74
+ registry.setBlock(object, block);
75
+ attachPropertyBlockToObject(object, block);
76
+ }
77
+ return block;
78
+ }
79
+ dispose() {
80
+ if (this._object) {
81
+ registry.deleteBlock(this._object);
82
+ // TODO: Add cleanup for hooked meshes
83
+ }
84
+ this._overrides = [];
85
+ this._object = null;
86
+ }
87
+ setOverride(name, value, textureTransform) {
88
+ const existing = this._overrides.find(o => o.name === name);
89
+ if (existing) {
90
+ existing.value = value;
91
+ existing.textureTransform = textureTransform;
92
+ }
93
+ else {
94
+ this._overrides.push({ name, value, textureTransform });
95
+ }
96
+ }
97
+ getOverride(name) {
98
+ return this._overrides.find(o => o.name === name);
99
+ }
100
+ clearOverride(name) {
101
+ const index = this._overrides.findIndex(o => o.name === name);
102
+ if (index >= 0) {
103
+ this._overrides.splice(index, 1);
104
+ }
105
+ }
106
+ clearAllOverrides() {
107
+ this._overrides = [];
108
+ }
109
+ removeOverride(name) {
110
+ this.clearOverride(name);
111
+ }
112
+ get overrides() {
113
+ return this._overrides;
114
+ }
115
+ hasOverrides() {
116
+ return this._overrides.length > 0;
117
+ }
118
+ /**
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
121
+ */
122
+ setDefine(name, value) {
123
+ this._defines[name] = value;
124
+ }
125
+ /**
126
+ * Remove a shader define
127
+ */
128
+ clearDefine(name) {
129
+ this._defines[name] = undefined;
130
+ }
131
+ /**
132
+ * Get all defines set on this property block
133
+ */
134
+ getDefines() {
135
+ return this._defines;
136
+ }
137
+ getCacheKey() {
138
+ const parts = [];
139
+ // Add defines to cache key
140
+ const defineKeys = Object.keys(this._defines).sort();
141
+ for (const key of defineKeys) {
142
+ const value = this._defines[key];
143
+ if (value !== undefined) {
144
+ parts.push(`d:${key}=${value}`);
145
+ }
146
+ }
147
+ // Add overrides to cache key
148
+ for (const o of this._overrides) {
149
+ if (o.value === null)
150
+ continue;
151
+ let val = "";
152
+ if (o.value instanceof Texture) {
153
+ val = o.value.uuid || "texture";
154
+ if (o.textureTransform) {
155
+ const t = o.textureTransform;
156
+ if (t.offset)
157
+ val += `;to:${t.offset.x},${t.offset.y}`;
158
+ if (t.repeat)
159
+ val += `;tr:${t.repeat.x},${t.repeat.y}`;
160
+ }
161
+ }
162
+ else if (Array.isArray(o.value)) {
163
+ val = o.value.join(",");
164
+ }
165
+ else if (o.value && typeof o.value === "object" && "r" in o.value) {
166
+ const c = o.value;
167
+ val = `${c.r},${c.g},${c.b},${c.a !== undefined ? c.a : ""}`;
168
+ }
169
+ else if (o.value && typeof o.value === "object" && "x" in o.value) {
170
+ // Vector2, Vector3, Vector4
171
+ const v = o.value;
172
+ val = `${v.x},${v.y}${v.z !== undefined ? `,${v.z}` : ""}${v.w !== undefined ? `,${v.w}` : ""}`;
173
+ }
174
+ else {
175
+ val = String(o.value);
176
+ }
177
+ parts.push(`${o.name}=${val}`);
178
+ }
179
+ return parts.join(";");
180
+ }
181
+ }
182
+ const $originalValues = Symbol("originalValues");
183
+ const $savedTextureTransforms = Symbol("savedTextureTransforms");
184
+ // Collect all materials from an object and its children
185
+ function collectMaterials(object, materials) {
186
+ const obj = object;
187
+ if (obj.material) {
188
+ if (Array.isArray(obj.material)) {
189
+ obj.material.forEach(mat => materials.add(mat));
190
+ }
191
+ else {
192
+ materials.add(obj.material);
193
+ }
194
+ }
195
+ // For Groups, collect materials from children too
196
+ if (object.type === "Group") {
197
+ object.children.forEach(child => collectMaterials(child, materials));
198
+ }
199
+ }
200
+ // Find property block by checking this object and parent (if parent is a Group)
201
+ // Returns both the block and the owner object
202
+ function findPropertyBlockAndOwner(obj) {
203
+ // First check if this object itself has a property block
204
+ let block = registry.getBlock(obj);
205
+ if (block)
206
+ return { block, owner: obj };
207
+ // If not, check if parent is a Group and has a property block
208
+ if (obj.parent && obj.parent.type === "Group") {
209
+ block = registry.getBlock(obj.parent);
210
+ if (block)
211
+ return { block, owner: obj.parent };
212
+ }
213
+ return undefined;
214
+ }
215
+ // #region OnBeforeRender
216
+ const onBeforeRender_MaterialBlock = function (_renderer, _scene, _camera, _geometry, material, _group) {
217
+ const result = findPropertyBlockAndOwner(this);
218
+ if (!result) {
219
+ return;
220
+ }
221
+ const { block: propertyBlock, owner } = result;
222
+ // Only apply if this material was registered with this property block
223
+ if (!registry.hasMaterial(owner, material)) {
224
+ return;
225
+ }
226
+ const overrides = propertyBlock.overrides;
227
+ const mat = material;
228
+ // Apply defines to material - this affects shader compilation
229
+ const defines = propertyBlock.getDefines();
230
+ const defineKeys = Object.keys(defines);
231
+ if (defineKeys.length > 0) {
232
+ if (!mat.defines)
233
+ mat.defines = {};
234
+ for (const key of defineKeys) {
235
+ const value = defines[key];
236
+ if (value !== undefined) {
237
+ mat.defines[key] = value;
238
+ }
239
+ }
240
+ }
241
+ // Still set up cache key even if no overrides (defines affect it)
242
+ if (overrides.length === 0 && defineKeys.length === 0) {
243
+ return;
244
+ }
245
+ // Defines always affect shader compilation → need program change
246
+ let needsProgramChange = defineKeys.length > 0;
247
+ if (!mat[$originalValues]) {
248
+ mat[$originalValues] = [];
249
+ }
250
+ const originalValues = mat[$originalValues];
251
+ for (const override of overrides) {
252
+ if (override.value === null)
253
+ continue;
254
+ const currentValue = mat[override.name];
255
+ const existingOriginal = originalValues.find((o) => o.name === override.name);
256
+ if (existingOriginal) {
257
+ // Update to current value each frame so animations/external changes are preserved
258
+ existingOriginal.value = currentValue;
259
+ }
260
+ else {
261
+ originalValues.push({ name: override.name, value: currentValue });
262
+ }
263
+ // Check if this override changes shader features (truthiness change).
264
+ // E.g. null → Texture enables USE_LIGHTMAP, Texture → null disables it.
265
+ // Pure uniform changes (red → blue, textureA → textureB) don't need program switch.
266
+ if (!needsProgramChange && !!currentValue !== !!override.value) {
267
+ needsProgramChange = true;
268
+ }
269
+ // Set all material properties including lightMap -
270
+ // three.js reads material.lightMap to determine shader parameters and upload uniforms
271
+ mat[override.name] = override.value;
272
+ // Apply per-object texture transform (offset/repeat) if specified
273
+ if (override.textureTransform && override.value instanceof Texture) {
274
+ const tex = override.value;
275
+ if (!mat[$savedTextureTransforms])
276
+ mat[$savedTextureTransforms] = [];
277
+ mat[$savedTextureTransforms].push({
278
+ name: override.name,
279
+ offsetX: tex.offset.x, offsetY: tex.offset.y,
280
+ repeatX: tex.repeat.x, repeatY: tex.repeat.y
281
+ });
282
+ const t = override.textureTransform;
283
+ if (t.offset)
284
+ tex.offset.copy(t.offset);
285
+ if (t.repeat)
286
+ tex.repeat.copy(t.repeat);
287
+ }
288
+ }
289
+ // Only set needsUpdate when overrides change shader features (truthiness changes
290
+ // like null↔texture, or defines added). This triggers getProgram() for program switches.
291
+ // Pure uniform overrides (color, roughness) skip this — no version increment needed.
292
+ if (needsProgramChange) {
293
+ mat.needsUpdate = true;
294
+ }
295
+ // _forceRefresh triggers uniform re-upload for consecutive objects sharing
296
+ // the same program and material (without it three.js skips the upload).
297
+ mat._forceRefresh = true;
298
+ };
299
+ // #region OnAfterRender
300
+ const onAfterRender_MaterialBlock = function (_renderer, _scene, _camera, _geometry, material, _group) {
301
+ const result = findPropertyBlockAndOwner(this);
302
+ if (!result) {
303
+ return;
304
+ }
305
+ const { block: propertyBlock, owner } = result;
306
+ // Only restore if this material was registered with this property block
307
+ if (!registry.hasMaterial(owner, material)) {
308
+ return;
309
+ }
310
+ const overrides = propertyBlock.overrides;
311
+ const mat = material;
312
+ const originalValues = mat[$originalValues];
313
+ // Clean up defines — this affects shader compilation
314
+ const defines = propertyBlock.getDefines();
315
+ const defineKeys = Object.keys(defines);
316
+ let needsProgramChange = false;
317
+ if (defineKeys.length > 0 && mat.defines) {
318
+ for (const key of defineKeys) {
319
+ delete mat.defines[key];
320
+ }
321
+ needsProgramChange = true;
322
+ }
323
+ if (overrides.length === 0) {
324
+ if (needsProgramChange) {
325
+ mat.needsUpdate = true;
326
+ mat._forceRefresh = true;
327
+ }
328
+ return;
329
+ }
330
+ if (!originalValues)
331
+ return;
332
+ // Restore texture transforms before restoring material properties
333
+ const savedTransforms = mat[$savedTextureTransforms];
334
+ if (savedTransforms && savedTransforms.length > 0) {
335
+ for (const saved of savedTransforms) {
336
+ const override = overrides.find(o => o.name === saved.name);
337
+ if (override?.value instanceof Texture) {
338
+ override.value.offset.set(saved.offsetX, saved.offsetY);
339
+ override.value.repeat.set(saved.repeatX, saved.repeatY);
340
+ }
341
+ }
342
+ savedTransforms.length = 0;
343
+ }
344
+ for (const override of overrides) {
345
+ const original = originalValues.find(o => o.name === override.name);
346
+ if (original) {
347
+ // Check if restoring changes shader features (truthiness change)
348
+ if (!needsProgramChange && !!override.value !== !!original.value) {
349
+ needsProgramChange = true;
350
+ }
351
+ mat[override.name] = original.value;
352
+ }
353
+ }
354
+ // Only set needsUpdate when restoring affects shader features
355
+ if (needsProgramChange) {
356
+ mat.needsUpdate = true;
357
+ }
358
+ // Always force uniform refresh so the next object gets correct values
359
+ mat._forceRefresh = true;
360
+ };
361
+ // #region Attach Callbacks
362
+ function attachPropertyBlockToObject(object, _propertyBlock) {
363
+ // 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));
367
+ // Attach callbacks to renderable objects (Mesh, SkinnedMesh)
368
+ // Groups don't render themselves but we still need to handle child meshes
369
+ if (object.type === "Group") {
370
+ object.children.forEach(child => {
371
+ if (child.type === "Mesh" || child.type === "SkinnedMesh") {
372
+ attachCallbacksToMesh(child, object);
373
+ }
374
+ });
375
+ }
376
+ else if (object.type === "Mesh" || object.type === "SkinnedMesh") {
377
+ attachCallbacksToMesh(object, object);
378
+ }
379
+ }
380
+ function attachCallbacksToMesh(mesh, propertyBlockOwner) {
381
+ // Check if this specific mesh already has our callbacks attached for this property block owner
382
+ if (registry.isHooked(mesh, propertyBlockOwner)) {
383
+ // Already hooked for this property block owner
384
+ return;
385
+ }
386
+ registry.addHook(mesh, propertyBlockOwner);
387
+ if (!mesh.onBeforeRender) {
388
+ mesh.onBeforeRender = onBeforeRender_MaterialBlock;
389
+ }
390
+ else {
391
+ const original = mesh.onBeforeRender;
392
+ mesh.onBeforeRender = function (renderer, scene, camera, geometry, material, group) {
393
+ original.call(this, renderer, scene, camera, geometry, material, group);
394
+ onBeforeRender_MaterialBlock.call(this, renderer, scene, camera, geometry, material, group);
395
+ };
396
+ }
397
+ if (!mesh.onAfterRender) {
398
+ mesh.onAfterRender = onAfterRender_MaterialBlock;
399
+ }
400
+ else {
401
+ const original = mesh.onAfterRender;
402
+ mesh.onAfterRender = function (renderer, scene, camera, geometry, material, group) {
403
+ onAfterRender_MaterialBlock.call(this, renderer, scene, camera, geometry, material, group);
404
+ original.call(this, renderer, scene, camera, geometry, material, group);
405
+ };
406
+ }
407
+ }
408
+ //#endregion
409
+ export function objectHasPropertyBlock(object) {
410
+ return registry.getBlock(object) !== undefined;
411
+ }
412
+ //# sourceMappingURL=engine_materialpropertyblock.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"engine_materialpropertyblock.js","sourceRoot":"","sources":["../../src/engine/engine_materialpropertyblock.ts"],"names":[],"mappings":"AAAA,OAAO,EAA6B,OAAO,EAAkF,MAAM,OAAO,CAAC;AAmB3I,2DAA2D;AAC3D,MAAM,qBAAqB;IACvB,wCAAwC;IAChC,aAAa,GAAG,IAAI,OAAO,EAAmC,CAAC;IAEvE,gGAAgG;IAChG,yEAAyE;IACjE,iBAAiB,GAAG,IAAI,OAAO,EAA+B,CAAC;IAEvE,oEAAoE;IAC5D,YAAY,GAAG,IAAI,OAAO,EAA2B,CAAC;IAE9D,0EAA0E;IAClE,uBAAuB,GAAG,IAAI,OAAO,EAGzC,CAAC;IAEL,QAAQ,CAAC,MAAgB;QACrB,OAAO,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAC1C,CAAC;IAED,QAAQ,CAAC,MAAgB,EAAE,KAA4B;QACnD,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IAC1C,CAAC;IAED,WAAW,CAAC,MAAgB;QACxB,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAClC,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAC1C,CAAC;IAED,WAAW,CAAC,MAAgB,EAAE,QAAkB;QAC5C,IAAI,SAAS,GAAG,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACnD,IAAI,CAAC,SAAS,EAAE;YACZ,SAAS,GAAG,IAAI,OAAO,EAAE,CAAC;YAC1B,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;SACjD;QACD,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAC5B,CAAC;IAED,WAAW,CAAC,MAAgB,EAAE,QAAkB;QAC5C,OAAO,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,GAAG,CAAC,QAAQ,CAAC,IAAI,KAAK,CAAC;IACtE,CAAC;IAED,QAAQ,CAAC,IAAc,EAAE,KAAe;QACpC,OAAO,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC;IAC5D,CAAC;IAED,OAAO,CAAC,IAAc,EAAE,KAAe;QACnC,IAAI,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACzC,IAAI,CAAC,MAAM,EAAE;YACT,MAAM,GAAG,IAAI,GAAG,EAAE,CAAC;YACnB,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;SACvC;QACD,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IACtB,CAAC;IAED,UAAU,CAAC,IAAc,EAAE,KAAe;QACtC,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC3C,IAAI,MAAM,EAAE;YACR,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACrB,IAAI,MAAM,CAAC,IAAI,KAAK,CAAC,EAAE;gBACnB,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;aAClC;SACJ;IACL,CAAC;IAED,oBAAoB,CAAC,IAAc;QAC/B,OAAO,IAAI,CAAC,uBAAuB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAClD,CAAC;IAED,oBAAoB,CAAC,IAAc,EAAE,SAA0F;QAC3H,IAAI,CAAC,uBAAuB,CAAC,GAAG,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;IACtD,CAAC;CACJ;AAED,MAAM,QAAQ,GAAG,IAAI,qBAAqB,EAAE,CAAC;AAE7C,MAAM,OAAO,qBAAqB;IACtB,UAAU,GAA4B,EAAE,CAAC;IACzC,QAAQ,GAA8C,EAAE,CAAC;IACzD,OAAO,GAAoB,IAAI,CAAC;IAExC,IAAI,MAAM,KAAsB,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;IAEtD,YAAY,SAA0B,IAAI;QACtC,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;IAC1B,CAAC;IAED,MAAM,CAAC,GAAG,CAAgC,MAAgB;QACtD,IAAI,KAAK,GAAG,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QACtC,IAAI,CAAC,KAAK,EAAE;YACR,KAAK,GAAG,IAAI,qBAAqB,CAAC,MAAM,CAAC,CAAC;YAC1C,QAAQ,CAAC,QAAQ,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;YACjC,2BAA2B,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;SAC9C;QACD,OAAO,KAAiC,CAAC;IAC7C,CAAC;IAED,OAAO;QACH,IAAI,IAAI,CAAC,OAAO,EAAE;YACd,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACnC,sCAAsC;SACzC;QACD,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;QACrB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;IACxB,CAAC;IAID,WAAW,CAAC,IAAY,EAAE,KAA2B,EAAE,gBAAmC;QACtF,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;QAC5D,IAAI,QAAQ,EAAE;YACV,QAAQ,CAAC,KAAK,GAAG,KAAK,CAAC;YACvB,QAAQ,CAAC,gBAAgB,GAAG,gBAAgB,CAAC;SAChD;aAAM;YACH,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,gBAAgB,EAAE,CAAC,CAAC;SAC3D;IACL,CAAC;IAED,WAAW,CAAC,IAAY;QACpB,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;IACtD,CAAC;IAED,aAAa,CAAC,IAAY;QACtB,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;QAC9D,IAAI,KAAK,IAAI,CAAC,EAAE;YACZ,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;SACpC;IACL,CAAC;IAED,iBAAiB;QACb,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;IACzB,CAAC;IAED,cAAc,CAAC,IAAY;QACvB,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;IAC7B,CAAC;IAED,IAAI,SAAS;QACT,OAAO,IAAI,CAAC,UAAU,CAAC;IAC3B,CAAC;IAED,YAAY;QACR,OAAO,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC;IACtC,CAAC;IAED;;;OAGG;IACH,SAAS,CAAC,IAAY,EAAE,KAAgC;QACpD,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC;IAChC,CAAC;IAED;;OAEG;IACH,WAAW,CAAC,IAAY;QACpB,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,SAAgB,CAAC;IAC3C,CAAC;IAED;;OAEG;IACH,UAAU;QACN,OAAO,IAAI,CAAC,QAAQ,CAAC;IACzB,CAAC;IAED,WAAW;QACP,MAAM,KAAK,GAAa,EAAE,CAAC;QAE3B,2BAA2B;QAC3B,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,EAAE,CAAC;QACrD,KAAK,MAAM,GAAG,IAAI,UAAU,EAAE;YAC1B,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;YACjC,IAAI,KAAK,KAAK,SAAS,EAAE;gBACrB,KAAK,CAAC,IAAI,CAAC,KAAK,GAAG,IAAI,KAAK,EAAE,CAAC,CAAC;aACnC;SACJ;QAED,6BAA6B;QAC7B,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,UAAU,EAAE;YAC7B,IAAI,CAAC,CAAC,KAAK,KAAK,IAAI;gBAAE,SAAS;YAC/B,IAAI,GAAG,GAAG,EAAE,CAAC;YACb,IAAI,CAAC,CAAC,KAAK,YAAY,OAAO,EAAE;gBAC5B,GAAG,GAAI,CAAC,CAAC,KAAa,CAAC,IAAI,IAAI,SAAS,CAAC;gBACzC,IAAI,CAAC,CAAC,gBAAgB,EAAE;oBACpB,MAAM,CAAC,GAAG,CAAC,CAAC,gBAAgB,CAAC;oBAC7B,IAAI,CAAC,CAAC,MAAM;wBAAE,GAAG,IAAI,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC;oBACvD,IAAI,CAAC,CAAC,MAAM;wBAAE,GAAG,IAAI,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC;iBAC1D;aACJ;iBAAM,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE;gBAC/B,GAAG,GAAG,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;aAC3B;iBAAM,IAAI,CAAC,CAAC,KAAK,IAAI,OAAO,CAAC,CAAC,KAAK,KAAK,QAAQ,IAAI,GAAG,IAAI,CAAC,CAAC,KAAK,EAAE;gBACjE,MAAM,CAAC,GAAG,CAAC,CAAC,KAAY,CAAC;gBACzB,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;aAChE;iBAAM,IAAI,CAAC,CAAC,KAAK,IAAI,OAAO,CAAC,CAAC,KAAK,KAAK,QAAQ,IAAI,GAAG,IAAI,CAAC,CAAC,KAAK,EAAE;gBACjE,4BAA4B;gBAC5B,MAAM,CAAC,GAAG,CAAC,CAAC,KAAY,CAAC;gBACzB,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;aACnG;iBAAM;gBACH,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;aACzB;YACD,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,GAAG,EAAE,CAAC,CAAC;SAClC;QACD,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC3B,CAAC;CACJ;AAED,MAAM,eAAe,GAAG,MAAM,CAAC,gBAAgB,CAAC,CAAC;AAejD,MAAM,uBAAuB,GAAG,MAAM,CAAC,wBAAwB,CAAC,CAAC;AAIjE,wDAAwD;AACxD,SAAS,gBAAgB,CAAC,MAAgB,EAAE,SAAwB;IAChE,MAAM,GAAG,GAAG,MAAyD,CAAC;IACtE,IAAI,GAAG,CAAC,QAAQ,EAAE;QACd,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE;YAC7B,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;SACnD;aAAM;YACH,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;SAC/B;KACJ;IAED,kDAAkD;IAClD,IAAI,MAAM,CAAC,IAAI,KAAK,OAAO,EAAE;QACzB,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,gBAAgB,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC;KACxE;AACL,CAAC;AAED,gFAAgF;AAChF,8CAA8C;AAC9C,SAAS,yBAAyB,CAAC,GAAa;IAC5C,yDAAyD;IACzD,IAAI,KAAK,GAAG,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;IACnC,IAAI,KAAK;QAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC;IAExC,8DAA8D;IAC9D,IAAI,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,MAAM,CAAC,IAAI,KAAK,OAAO,EAAE;QAC3C,KAAK,GAAG,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACtC,IAAI,KAAK;YAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC;KAClD;IAED,OAAO,SAAS,CAAC;AACrB,CAAC;AAED,yBAAyB;AACzB,MAAM,4BAA4B,GAAyB,UAA0B,SAAwB,EAAE,MAAa,EAAE,OAAe,EAAE,SAAyB,EAAE,QAAkB,EAAE,MAAa;IACvM,MAAM,MAAM,GAAG,yBAAyB,CAAC,IAAI,CAAC,CAAC;IAC/C,IAAI,CAAC,MAAM,EAAE;QACT,OAAO;KACV;IAED,MAAM,EAAE,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,GAAG,MAAM,CAAC;IAE/C,sEAAsE;IACtE,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,KAAK,EAAE,QAAQ,CAAC,EAAE;QACxC,OAAO;KACV;IAED,MAAM,SAAS,GAAG,aAAa,CAAC,SAAS,CAAC;IAC1C,MAAM,GAAG,GAAG,QAAe,CAAC;IAE5B,8DAA8D;IAC9D,MAAM,OAAO,GAAG,aAAa,CAAC,UAAU,EAAE,CAAC;IAC3C,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACxC,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE;QACvB,IAAI,CAAC,GAAG,CAAC,OAAO;YAAE,GAAG,CAAC,OAAO,GAAG,EAAE,CAAC;QACnC,KAAK,MAAM,GAAG,IAAI,UAAU,EAAE;YAC1B,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;YAC3B,IAAI,KAAK,KAAK,SAAS,EAAE;gBACrB,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;aAC5B;SACJ;KACJ;IAED,kEAAkE;IAClE,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE;QACnD,OAAO;KACV;IAED,iEAAiE;IACjE,IAAI,kBAAkB,GAAG,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC;IAE/C,IAAI,CAAC,GAAG,CAAC,eAAe,CAAC,EAAE;QACvB,GAAG,CAAC,eAAe,CAAC,GAAG,EAAE,CAAC;KAC7B;IACD,MAAM,cAAc,GAAG,GAAG,CAAC,eAAe,CAAoB,CAAC;IAE/D,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE;QAC9B,IAAI,QAAQ,CAAC,KAAK,KAAK,IAAI;YAAE,SAAS;QAEtC,MAAM,YAAY,GAAG,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAExC,MAAM,gBAAgB,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC,CAAgB,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC7F,IAAI,gBAAgB,EAAE;YAClB,kFAAkF;YAClF,gBAAgB,CAAC,KAAK,GAAG,YAAY,CAAC;SACzC;aAAM;YACH,cAAc,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE,KAAK,EAAE,YAAY,EAAE,CAAC,CAAC;SACrE;QAED,sEAAsE;QACtE,wEAAwE;QACxE,oFAAoF;QACpF,IAAI,CAAC,kBAAkB,IAAI,CAAC,CAAC,YAAY,KAAK,CAAC,CAAC,QAAQ,CAAC,KAAK,EAAE;YAC5D,kBAAkB,GAAG,IAAI,CAAC;SAC7B;QAED,mDAAmD;QACnD,sFAAsF;QACtF,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC;QAEpC,kEAAkE;QAClE,IAAI,QAAQ,CAAC,gBAAgB,IAAI,QAAQ,CAAC,KAAK,YAAY,OAAO,EAAE;YAChE,MAAM,GAAG,GAAG,QAAQ,CAAC,KAAK,CAAC;YAC3B,IAAI,CAAC,GAAG,CAAC,uBAAuB,CAAC;gBAAE,GAAG,CAAC,uBAAuB,CAAC,GAAG,EAAE,CAAC;YACpE,GAAG,CAAC,uBAAuB,CAA6B,CAAC,IAAI,CAAC;gBAC3D,IAAI,EAAE,QAAQ,CAAC,IAAI;gBACnB,OAAO,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE,OAAO,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;gBAC5C,OAAO,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE,OAAO,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;aAC/C,CAAC,CAAC;YACH,MAAM,CAAC,GAAG,QAAQ,CAAC,gBAAgB,CAAC;YACpC,IAAI,CAAC,CAAC,MAAM;gBAAE,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;YACxC,IAAI,CAAC,CAAC,MAAM;gBAAE,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;SAC3C;KACJ;IAED,iFAAiF;IACjF,yFAAyF;IACzF,qFAAqF;IACrF,IAAI,kBAAkB,EAAE;QACpB,GAAG,CAAC,WAAW,GAAG,IAAI,CAAC;KAC1B;IACD,2EAA2E;IAC3E,wEAAwE;IACxE,GAAG,CAAC,aAAa,GAAG,IAAI,CAAC;AAC7B,CAAC,CAAC;AAEF,wBAAwB;AACxB,MAAM,2BAA2B,GAAyB,UAA0B,SAAwB,EAAE,MAAa,EAAE,OAAe,EAAE,SAAyB,EAAE,QAAkB,EAAE,MAAa;IACtM,MAAM,MAAM,GAAG,yBAAyB,CAAC,IAAI,CAAC,CAAC;IAC/C,IAAI,CAAC,MAAM,EAAE;QACT,OAAO;KACV;IAED,MAAM,EAAE,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,GAAG,MAAM,CAAC;IAE/C,wEAAwE;IACxE,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,KAAK,EAAE,QAAQ,CAAC,EAAE;QACxC,OAAO;KACV;IAED,MAAM,SAAS,GAAG,aAAa,CAAC,SAAS,CAAC;IAE1C,MAAM,GAAG,GAAG,QAAe,CAAC;IAC5B,MAAM,cAAc,GAAG,GAAG,CAAC,eAAe,CAAgC,CAAC;IAE3E,qDAAqD;IACrD,MAAM,OAAO,GAAG,aAAa,CAAC,UAAU,EAAE,CAAC;IAC3C,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACxC,IAAI,kBAAkB,GAAG,KAAK,CAAC;IAC/B,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,IAAI,GAAG,CAAC,OAAO,EAAE;QACtC,KAAK,MAAM,GAAG,IAAI,UAAU,EAAE;YAC1B,OAAO,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;SAC3B;QACD,kBAAkB,GAAG,IAAI,CAAC;KAC7B;IAED,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE;QACxB,IAAI,kBAAkB,EAAE;YACpB,GAAG,CAAC,WAAW,GAAG,IAAI,CAAC;YACvB,GAAG,CAAC,aAAa,GAAG,IAAI,CAAC;SAC5B;QACD,OAAO;KACV;IAED,IAAI,CAAC,cAAc;QAAE,OAAO;IAE5B,kEAAkE;IAClE,MAAM,eAAe,GAAG,GAAG,CAAC,uBAAuB,CAAwC,CAAC;IAC5F,IAAI,eAAe,IAAI,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE;QAC/C,KAAK,MAAM,KAAK,IAAI,eAAe,EAAE;YACjC,MAAM,QAAQ,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI,CAAC,CAAC;YAC5D,IAAI,QAAQ,EAAE,KAAK,YAAY,OAAO,EAAE;gBACpC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;gBACxD,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;aAC3D;SACJ;QACD,eAAe,CAAC,MAAM,GAAG,CAAC,CAAC;KAC9B;IAED,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE;QAC9B,MAAM,QAAQ,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,IAAI,CAAC,CAAC;QACpE,IAAI,QAAQ,EAAE;YACV,iEAAiE;YACjE,IAAI,CAAC,kBAAkB,IAAI,CAAC,CAAC,QAAQ,CAAC,KAAK,KAAK,CAAC,CAAC,QAAQ,CAAC,KAAK,EAAE;gBAC9D,kBAAkB,GAAG,IAAI,CAAC;aAC7B;YACD,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC;SACvC;KACJ;IAED,8DAA8D;IAC9D,IAAI,kBAAkB,EAAE;QACpB,GAAG,CAAC,WAAW,GAAG,IAAI,CAAC;KAC1B;IACD,sEAAsE;IACtE,GAAG,CAAC,aAAa,GAAG,IAAI,CAAC;AAC7B,CAAC,CAAC;AAGF,2BAA2B;AAC3B,SAAS,2BAA2B,CAAC,MAAgB,EAAE,cAAqC;IACxF,wEAAwE;IACxE,MAAM,SAAS,GAAG,IAAI,GAAG,EAAY,CAAC;IACtC,gBAAgB,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IACpC,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC;IAE5D,6DAA6D;IAC7D,0EAA0E;IAC1E,IAAI,MAAM,CAAC,IAAI,KAAK,OAAO,EAAE;QACzB,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;YAC5B,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,IAAI,KAAK,CAAC,IAAI,KAAK,aAAa,EAAE;gBACvD,qBAAqB,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;aACxC;QACL,CAAC,CAAC,CAAC;KACN;SAAM,IAAI,MAAM,CAAC,IAAI,KAAK,MAAM,IAAI,MAAM,CAAC,IAAI,KAAK,aAAa,EAAE;QAChE,qBAAqB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;KACzC;AACL,CAAC;AACD,SAAS,qBAAqB,CAAC,IAAc,EAAE,kBAA4B;IACvE,+FAA+F;IAC/F,IAAI,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE,kBAAkB,CAAC,EAAE;QAC7C,+CAA+C;QAC/C,OAAO;KACV;IAED,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,kBAAkB,CAAC,CAAC;IAE3C,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE;QACtB,IAAI,CAAC,cAAc,GAAG,4BAA4B,CAAC;KACtD;SAAM;QACH,MAAM,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC;QACrC,IAAI,CAAC,cAAc,GAAG,UAAU,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK;YAC9E,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;YACxE,4BAA4B,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;QAChG,CAAC,CAAC;KACL;IAED,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE;QACrB,IAAI,CAAC,aAAa,GAAG,2BAA2B,CAAC;KACpD;SAAM;QACH,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC;QACpC,IAAI,CAAC,aAAa,GAAG,UAAU,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK;YAC7E,2BAA2B,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;YAC3F,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;QAC5E,CAAC,CAAC;KACL;AACL,CAAC;AACD,YAAY;AAEZ,MAAM,UAAU,sBAAsB,CAAC,MAAgB;IACnD,OAAO,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,SAAS,CAAC;AACnD,CAAC"}
@@ -42,7 +42,6 @@ export declare class ReflectionProbe extends Behaviour {
42
42
  awake(): void;
43
43
  start(): void;
44
44
  onDestroy(): void;
45
- private static _rendererMaterialsCache;
46
45
  onSet(_rend: IRenderer): void;
47
46
  onUnset(_rend: IRenderer): void;
48
47
  }
@@ -4,15 +4,15 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
4
4
  else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
5
  return c > 3 && r && Object.defineProperty(target, key, r), r;
6
6
  };
7
- import { CubeTexture, EquirectangularReflectionMapping, LinearSRGBColorSpace, MeshBasicMaterial, Vector3 } from "three";
7
+ import { CubeTexture, EquirectangularReflectionMapping, LinearSRGBColorSpace, Vector3 } from "three";
8
8
  import { serializable } from "../engine/engine_serialization.js";
9
9
  import { getParam } from "../engine/engine_utils.js";
10
10
  import { BoxHelperComponent } from "./BoxHelperComponent.js";
11
11
  import { Behaviour } from "./Component.js";
12
+ import { MaterialPropertyBlock } from "../engine/engine_materialpropertyblock.js";
12
13
  export const debug = getParam("debugreflectionprobe");
13
14
  const disable = getParam("noreflectionprobe");
14
15
  const $reflectionProbeKey = Symbol("reflectionProbeKey");
15
- const $originalMaterial = Symbol("original material");
16
16
  /**
17
17
  * The [ReflectionProbe](https://engine.needle.tools/docs/api/ReflectionProbe) provides environment reflection data to materials within its defined area.
18
18
  * Use for chrome-like materials that need accurate environment reflections.
@@ -40,7 +40,7 @@ const $originalMaterial = Symbol("original material");
40
40
  export class ReflectionProbe extends Behaviour {
41
41
  static _probes = new Map();
42
42
  static isUsingReflectionProbe(material) {
43
- return !!(material[$reflectionProbeKey] || material[$originalMaterial]?.[$reflectionProbeKey]);
43
+ return !!material[$reflectionProbeKey];
44
44
  }
45
45
  static get(object, context, isAnchor, anchor) {
46
46
  if (!object || object.isObject3D !== true)
@@ -54,7 +54,6 @@ export class ReflectionProbe extends Behaviour {
54
54
  probe.__internalAwake();
55
55
  if (probe.activeAndEnabled) {
56
56
  if (anchor) {
57
- // test if anchor is reflection probe object
58
57
  if (probe.gameObject === anchor) {
59
58
  return probe;
60
59
  }
@@ -72,7 +71,6 @@ export class ReflectionProbe extends Behaviour {
72
71
  return null;
73
72
  }
74
73
  _texture;
75
- // @serializable(Texture)
76
74
  set texture(tex) {
77
75
  if (this._texture === tex)
78
76
  return;
@@ -81,7 +79,6 @@ export class ReflectionProbe extends Behaviour {
81
79
  console.debug("[ReflectionProbe] Set reflection probe texture " + (tex?.name || "(removed)"));
82
80
  if (tex) {
83
81
  if (tex instanceof CubeTexture) {
84
- // cube textures use CubeReflectionMapping by default
85
82
  }
86
83
  else if (tex.mapping !== EquirectangularReflectionMapping) {
87
84
  tex.mapping = EquirectangularReflectionMapping;
@@ -131,10 +128,6 @@ export class ReflectionProbe extends Behaviour {
131
128
  }
132
129
  }
133
130
  }
134
- // when objects are rendered and they share material
135
- // and some need reflection probe and some don't
136
- // we need to make sure we don't override the material but use a copy
137
- static _rendererMaterialsCache = new Map();
138
131
  onSet(_rend) {
139
132
  if (disable)
140
133
  return;
@@ -144,14 +137,7 @@ export class ReflectionProbe extends Behaviour {
144
137
  return;
145
138
  if (!this.texture)
146
139
  return;
147
- let rendererCache = ReflectionProbe._rendererMaterialsCache.get(_rend);
148
- if (!rendererCache) {
149
- rendererCache = [];
150
- ReflectionProbe._rendererMaterialsCache.set(_rend, rendererCache);
151
- }
152
- // TODO: dont clone material for every renderer that uses reflection probes, we can do it once per material when they use the same reflection texture
153
- // need to make sure materials are not shared when using reflection probes
154
- // otherwise some renderers outside of the probe will be affected or vice versa
140
+ const object = _rend.gameObject;
155
141
  for (let i = 0; i < _rend.sharedMaterials.length; i++) {
156
142
  const material = _rend.sharedMaterials[i];
157
143
  if (!material) {
@@ -160,67 +146,20 @@ export class ReflectionProbe extends Behaviour {
160
146
  if (material["envMap"] === undefined) {
161
147
  continue;
162
148
  }
163
- if (material instanceof MeshBasicMaterial) {
164
- continue;
165
- }
166
- let cached = rendererCache[i];
167
- // make sure we have the currently assigned material cached (and an up to date clone of that)
168
- // Compare against the stored original version, not the clone's version (which gets modified by needsUpdate)
169
- // This prevents cloning materials every frame when onUnset restores the original material
170
- const isCachedInstance = material === cached?.copy;
171
- const hasChanged = !cached || cached.material.uuid !== material.uuid || cached.originalVersion !== material.version;
172
- if (!isCachedInstance && hasChanged) {
173
- if (debug) {
174
- let reason = "";
175
- if (!cached)
176
- reason = "not cached";
177
- else if (cached.material !== material)
178
- reason = "reference changed; cached instance?: " + isCachedInstance;
179
- else if (cached.originalVersion !== material.version)
180
- reason = "version changed";
181
- console.warn("Cloning material", material.name, material.version, "Reason:", reason, "\n", material.uuid, "\n", cached?.copy.uuid, "\n", _rend.name);
182
- }
183
- const clone = material.clone();
184
- clone.version = material.version;
185
- if (cached) {
186
- cached.copy = clone;
187
- cached.material = material;
188
- cached.originalVersion = material.version;
189
- }
190
- else {
191
- cached = {
192
- material: material,
193
- copy: clone,
194
- originalVersion: material.version
195
- };
196
- rendererCache.push(cached);
197
- }
198
- clone[$reflectionProbeKey] = this;
199
- clone[$originalMaterial] = material;
200
- if (debug)
201
- console.log("Set reflection", _rend.name, _rend.guid);
202
- }
203
- // See NE-4771 and NE-4856
204
- if (cached && cached.copy) {
205
- cached.copy.onBeforeCompile = material.onBeforeCompile;
206
- }
207
- /** this is the material that we copied and that has the reflection probe */
208
- const copy = cached?.copy;
209
- if ("envMap" in copy) {
210
- if (copy.envMap !== this.texture) { // Only update if changed
211
- copy.envMap = this.texture;
212
- copy.needsUpdate = true;
213
- }
214
- }
215
- _rend.sharedMaterials[i] = copy;
149
+ if (debug)
150
+ console.log("Setting reflection probe on material", material.name, "for renderer", _rend.name);
151
+ const propertyBlock = MaterialPropertyBlock.get(object);
152
+ propertyBlock.setOverride("envMap", this.texture);
153
+ // propertyBlock.setOverride("color", new Color(0xff0000));
154
+ material[$reflectionProbeKey] = true;
216
155
  }
217
156
  }
218
157
  onUnset(_rend) {
219
- const rendererCache = ReflectionProbe._rendererMaterialsCache.get(_rend);
220
- if (rendererCache) {
221
- for (let i = 0; i < rendererCache.length; i++) {
222
- const cached = rendererCache[i];
223
- _rend.sharedMaterials[i] = cached.material;
158
+ // const object = _rend.gameObject as unknown as Object3D;
159
+ for (let i = 0; i < _rend.sharedMaterials.length; i++) {
160
+ const material = _rend.sharedMaterials[i];
161
+ if (material) {
162
+ delete material[$reflectionProbeKey];
224
163
  }
225
164
  }
226
165
  }
@@ -1 +1 @@
1
- {"version":3,"file":"ReflectionProbe.js","sourceRoot":"","sources":["../../src/engine-components/ReflectionProbe.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ReflectionProbe.js","sourceRoot":"","sources":["../../src/engine-components/ReflectionProbe.ts"],"names":[],"mappings":"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"}