@shapediver/viewer.rendering-engine.rendering-engine-threejs 3.16.8 → 3.16.10

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 (185) hide show
  1. package/dist/RenderingEngine.d.ts +294 -294
  2. package/dist/RenderingEngine.js +987 -977
  3. package/dist/RenderingEngine.js.map +1 -1
  4. package/dist/index.d.ts +16 -16
  5. package/dist/index.js +57 -57
  6. package/dist/injectors/TextureUnifierInjector.d.ts +13 -13
  7. package/dist/injectors/TextureUnifierInjector.js +181 -171
  8. package/dist/injectors/TextureUnifierInjector.js.map +1 -1
  9. package/dist/interfaces/ILoader.d.ts +3 -3
  10. package/dist/interfaces/ILoader.js +2 -2
  11. package/dist/interfaces/IRenderingEngine.d.ts +45 -45
  12. package/dist/interfaces/IRenderingEngine.js +2 -2
  13. package/dist/loaders/EnvironmentMapLoader.d.ts +119 -119
  14. package/dist/loaders/EnvironmentMapLoader.js +512 -502
  15. package/dist/loaders/EnvironmentMapLoader.js.map +1 -1
  16. package/dist/loaders/GeometryLoader.d.ts +39 -39
  17. package/dist/loaders/GeometryLoader.d.ts.map +1 -1
  18. package/dist/loaders/GeometryLoader.js +603 -593
  19. package/dist/loaders/GeometryLoader.js.map +1 -1
  20. package/dist/loaders/HTMLElementAnchorLoader.d.ts +15 -15
  21. package/dist/loaders/HTMLElementAnchorLoader.js +98 -98
  22. package/dist/loaders/HTMLElementAnchorLoader.js.map +1 -1
  23. package/dist/loaders/LightLoader.d.ts +19 -19
  24. package/dist/loaders/LightLoader.js +197 -187
  25. package/dist/loaders/LightLoader.js.map +1 -1
  26. package/dist/loaders/MaterialLoader.d.ts +115 -115
  27. package/dist/loaders/MaterialLoader.d.ts.map +1 -1
  28. package/dist/loaders/MaterialLoader.js +1612 -1602
  29. package/dist/loaders/MaterialLoader.js.map +1 -1
  30. package/dist/managers/ARManager.d.ts +17 -17
  31. package/dist/managers/ARManager.js +128 -128
  32. package/dist/managers/ARManager.js.map +1 -1
  33. package/dist/managers/CameraManager.d.ts +19 -19
  34. package/dist/managers/CameraManager.js +244 -234
  35. package/dist/managers/CameraManager.js.map +1 -1
  36. package/dist/managers/EnvironmentGeometryManager.d.ts +32 -32
  37. package/dist/managers/EnvironmentGeometryManager.js +114 -114
  38. package/dist/managers/EnvironmentGeometryManager.js.map +1 -1
  39. package/dist/managers/FlagManager.d.ts +19 -19
  40. package/dist/managers/FlagManager.js +143 -143
  41. package/dist/managers/FlagManager.js.map +1 -1
  42. package/dist/managers/PostProcessingManager.d.ts +1019 -1019
  43. package/dist/managers/PostProcessingManager.js +1306 -1296
  44. package/dist/managers/PostProcessingManager.js.map +1 -1
  45. package/dist/managers/RenderingManager.d.ts +84 -84
  46. package/dist/managers/RenderingManager.d.ts.map +1 -1
  47. package/dist/managers/RenderingManager.js +679 -669
  48. package/dist/managers/RenderingManager.js.map +1 -1
  49. package/dist/managers/SceneTracingManager.d.ts +28 -28
  50. package/dist/managers/SceneTracingManager.js +160 -150
  51. package/dist/managers/SceneTracingManager.js.map +1 -1
  52. package/dist/managers/SceneTreeManager.d.ts +81 -81
  53. package/dist/managers/SceneTreeManager.d.ts.map +1 -1
  54. package/dist/managers/SceneTreeManager.js +500 -490
  55. package/dist/managers/SceneTreeManager.js.map +1 -1
  56. package/dist/managers/SettingsManager.d.ts +28 -28
  57. package/dist/managers/SettingsManager.js +284 -284
  58. package/dist/managers/SettingsManager.js.map +1 -1
  59. package/dist/managers/environmentGeometry/ContactShadow.d.ts +42 -42
  60. package/dist/managers/environmentGeometry/ContactShadow.js +295 -285
  61. package/dist/managers/environmentGeometry/ContactShadow.js.map +1 -1
  62. package/dist/managers/environmentGeometry/Grid.d.ts +20 -20
  63. package/dist/managers/environmentGeometry/Grid.js +110 -100
  64. package/dist/managers/environmentGeometry/Grid.js.map +1 -1
  65. package/dist/managers/environmentGeometry/GroundPlane.d.ts +21 -21
  66. package/dist/managers/environmentGeometry/GroundPlane.js +105 -95
  67. package/dist/managers/environmentGeometry/GroundPlane.js.map +1 -1
  68. package/dist/managers/environmentGeometry/GroundPlaneShadow.d.ts +21 -21
  69. package/dist/managers/environmentGeometry/GroundPlaneShadow.js +96 -86
  70. package/dist/managers/environmentGeometry/GroundPlaneShadow.js.map +1 -1
  71. package/dist/managers/environmentGeometry/IEnvironmentGeometry.d.ts +8 -8
  72. package/dist/managers/environmentGeometry/IEnvironmentGeometry.js +2 -2
  73. package/dist/managers/postprocessing/GodRaysManager.d.ts +12 -12
  74. package/dist/managers/postprocessing/GodRaysManager.js +73 -63
  75. package/dist/managers/postprocessing/GodRaysManager.js.map +1 -1
  76. package/dist/managers/postprocessing/OutlineManager.d.ts +15 -15
  77. package/dist/managers/postprocessing/OutlineManager.js +86 -76
  78. package/dist/managers/postprocessing/OutlineManager.js.map +1 -1
  79. package/dist/managers/postprocessing/SSAARenderPass.d.ts +53 -53
  80. package/dist/managers/postprocessing/SSAARenderPass.js +281 -281
  81. package/dist/managers/postprocessing/SSAARenderPass.js.map +1 -1
  82. package/dist/managers/postprocessing/SelectiveBloomManager.d.ts +14 -14
  83. package/dist/managers/postprocessing/SelectiveBloomManager.js +76 -66
  84. package/dist/managers/postprocessing/SelectiveBloomManager.js.map +1 -1
  85. package/dist/managers/postprocessing/ao/ao/AOEffect.d.ts +46 -46
  86. package/dist/managers/postprocessing/ao/ao/AOEffect.js +142 -142
  87. package/dist/managers/postprocessing/ao/ao/AOEffect.js.map +1 -1
  88. package/dist/managers/postprocessing/ao/ao/AOPass.d.ts +12 -12
  89. package/dist/managers/postprocessing/ao/ao/AOPass.js +108 -108
  90. package/dist/managers/postprocessing/ao/ao/AOPass.js.map +1 -1
  91. package/dist/managers/postprocessing/ao/ao/shader/ao_compose.d.ts +1 -1
  92. package/dist/managers/postprocessing/ao/ao/shader/ao_compose.js +4 -4
  93. package/dist/managers/postprocessing/ao/ao/shader/ao_utils.d.ts +1 -1
  94. package/dist/managers/postprocessing/ao/ao/shader/ao_utils.js +4 -4
  95. package/dist/managers/postprocessing/ao/hbao/HBAOEffect.d.ts +14 -14
  96. package/dist/managers/postprocessing/ao/hbao/HBAOEffect.js +24 -24
  97. package/dist/managers/postprocessing/ao/hbao/shader/hbao.d.ts +1 -1
  98. package/dist/managers/postprocessing/ao/hbao/shader/hbao.js +4 -4
  99. package/dist/managers/postprocessing/ao/poissionDenoise/PoissionDenoisePass.d.ts +33 -33
  100. package/dist/managers/postprocessing/ao/poissionDenoise/PoissionDenoisePass.js +211 -211
  101. package/dist/managers/postprocessing/ao/poissionDenoise/PoissionDenoisePass.js.map +1 -1
  102. package/dist/managers/postprocessing/ao/poissionDenoise/shader/poissionDenoise.d.ts +1 -1
  103. package/dist/managers/postprocessing/ao/poissionDenoise/shader/poissionDenoise.js +4 -4
  104. package/dist/managers/postprocessing/ao/ssao/SSAOEffect.d.ts +14 -14
  105. package/dist/managers/postprocessing/ao/ssao/SSAOEffect.js +82 -82
  106. package/dist/managers/postprocessing/ao/ssao/SSAOEffect.js.map +1 -1
  107. package/dist/managers/postprocessing/ao/ssao/shader/ssao.d.ts +1 -1
  108. package/dist/managers/postprocessing/ao/ssao/shader/ssao.js +4 -4
  109. package/dist/managers/postprocessing/ao/utils/shader/basic.d.ts +1 -1
  110. package/dist/managers/postprocessing/ao/utils/shader/basic.js +4 -4
  111. package/dist/managers/postprocessing/ao/utils/shader/sampleBlueNoise.d.ts +1 -1
  112. package/dist/managers/postprocessing/ao/utils/shader/sampleBlueNoise.js +4 -4
  113. package/dist/managers/postprocessing/effects/tone-mapping/ToneMappingEffect.d.ts +165 -165
  114. package/dist/managers/postprocessing/effects/tone-mapping/ToneMappingEffect.js +299 -299
  115. package/dist/managers/postprocessing/effects/tone-mapping/ToneMappingEffect.js.map +1 -1
  116. package/dist/managers/postprocessing/effects/tone-mapping/tone-mapping.d.ts +1 -1
  117. package/dist/managers/postprocessing/effects/tone-mapping/tone-mapping.js +4 -4
  118. package/dist/managers/postprocessing/utils/CopyMaterial.d.ts +37 -37
  119. package/dist/managers/postprocessing/utils/CopyMaterial.js +69 -69
  120. package/dist/managers/postprocessing/utils/CopyShader.d.ts +13 -13
  121. package/dist/managers/postprocessing/utils/CopyShader.js +12 -12
  122. package/dist/managers/postprocessing/utils/FullScreenQuad.d.ts +9 -9
  123. package/dist/managers/postprocessing/utils/FullScreenQuad.js +28 -28
  124. package/dist/managers/postprocessing/utils/NormalPass.d.ts +87 -87
  125. package/dist/managers/postprocessing/utils/NormalPass.js +156 -156
  126. package/dist/managers/postprocessing/utils/NormalPass.js.map +1 -1
  127. package/dist/managers/postprocessing/utils/RenderPass.d.ts +114 -114
  128. package/dist/managers/postprocessing/utils/RenderPass.js +259 -259
  129. package/dist/managers/postprocessing/utils/RenderPass.js.map +1 -1
  130. package/dist/managers/sceneTree/SDTFUtils.d.ts +6 -6
  131. package/dist/managers/sceneTree/SDTFUtils.d.ts.map +1 -1
  132. package/dist/managers/sceneTree/SDTFUtils.js +50 -50
  133. package/dist/managers/sceneTree/SDTFUtils.js.map +1 -1
  134. package/dist/managers/sceneTree/SceenTreeManagerUtils.d.ts +7 -7
  135. package/dist/managers/sceneTree/SceenTreeManagerUtils.d.ts.map +1 -1
  136. package/dist/managers/sceneTree/SceenTreeManagerUtils.js +175 -165
  137. package/dist/managers/sceneTree/SceenTreeManagerUtils.js.map +1 -1
  138. package/dist/managers/sceneTree/ThreeJsDataUtils.d.ts +6 -6
  139. package/dist/managers/sceneTree/ThreeJsDataUtils.d.ts.map +1 -1
  140. package/dist/managers/sceneTree/ThreeJsDataUtils.js +80 -70
  141. package/dist/managers/sceneTree/ThreeJsDataUtils.js.map +1 -1
  142. package/dist/materials/GemMaterial.d.ts +37 -37
  143. package/dist/materials/GemMaterial.js +262 -252
  144. package/dist/materials/GemMaterial.js.map +1 -1
  145. package/dist/materials/MeshUnlitMaterialParameters.d.ts +3 -3
  146. package/dist/materials/MeshUnlitMaterialParameters.js +2 -2
  147. package/dist/materials/MultiPointsMaterial.d.ts +93 -93
  148. package/dist/materials/MultiPointsMaterial.js +577 -567
  149. package/dist/materials/MultiPointsMaterial.js.map +1 -1
  150. package/dist/materials/SpecularGlossinessMaterial.d.ts +13 -13
  151. package/dist/materials/SpecularGlossinessMaterial.js +171 -161
  152. package/dist/materials/SpecularGlossinessMaterial.js.map +1 -1
  153. package/dist/objects/SDColor.d.ts +16 -16
  154. package/dist/objects/SDColor.js +52 -52
  155. package/dist/objects/SDColor.js.map +1 -1
  156. package/dist/objects/SDObject.d.ts +27 -27
  157. package/dist/objects/SDObject.js +112 -102
  158. package/dist/objects/SDObject.js.map +1 -1
  159. package/dist/shaders/PCSS.d.ts +2 -2
  160. package/dist/shaders/PCSS.js +5 -5
  161. package/dist/shaders/gem.d.ts +2 -2
  162. package/dist/shaders/gem.js +5 -5
  163. package/dist/shaders/multi_points.d.ts +2 -2
  164. package/dist/shaders/multi_points.js +5 -5
  165. package/dist/styling/viewport-css.d.ts +1 -1
  166. package/dist/styling/viewport-css.js +4 -4
  167. package/dist/three/CSS2DRenderer.d.ts +31 -31
  168. package/dist/three/CSS2DRenderer.d.ts.map +1 -1
  169. package/dist/three/CSS2DRenderer.js +152 -152
  170. package/dist/three/CSS2DRenderer.js.map +1 -1
  171. package/dist/three/geometries/TextGeometry.d.ts +21 -21
  172. package/dist/three/geometries/TextGeometry.js +45 -45
  173. package/dist/three/geometries/TextGeometry.js.map +1 -1
  174. package/dist/three/loaders/RGBELoader.d.ts +23 -23
  175. package/dist/three/loaders/RGBELoader.js +311 -311
  176. package/dist/three/loaders/RGBELoader.js.map +1 -1
  177. package/dist/types/IThreejsData.d.ts +6 -6
  178. package/dist/types/IThreejsData.js +2 -2
  179. package/dist/types/ThreejsData.d.ts +10 -10
  180. package/dist/types/ThreejsData.js +41 -41
  181. package/package.json +18 -18
  182. package/dist/managers/InstanceGroupManager.d.ts +0 -58
  183. package/dist/managers/InstanceGroupManager.d.ts.map +0 -1
  184. package/dist/managers/InstanceGroupManager.js +0 -372
  185. package/dist/managers/InstanceGroupManager.js.map +0 -1
@@ -1,372 +0,0 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || function (mod) {
19
- if (mod && mod.__esModule) return mod;
20
- var result = {};
21
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
- __setModuleDefault(result, mod);
23
- return result;
24
- };
25
- Object.defineProperty(exports, "__esModule", { value: true });
26
- exports.InstanceGroupManager = void 0;
27
- const viewer_shared_types_1 = require("@shapediver/viewer.shared.types");
28
- const THREE = __importStar(require("three"));
29
- /**
30
- * Manages GPU-instanced meshes and their per-instance operations.
31
- *
32
- * Each group of primitives sharing the same geometry hash is represented by
33
- * one or more THREE.InstancedMesh objects:
34
- * - defaultMesh: contains all instances that have no active post-processing effect
35
- * - effectMeshes: lazily-created meshes that contain instances which participate
36
- * in a specific post-processing effect (outline, bloom, …)
37
- *
38
- * All InstancedMeshes are direct children of `instancedRoot`, which must be
39
- * added to the THREE scene by the owner (RenderingEngine / SceneTreeManager).
40
- */
41
- class InstanceGroupManager {
42
- // #endregion Properties (3)
43
- // #region Constructors (1)
44
- constructor(_renderingEngine) {
45
- this._renderingEngine = _renderingEngine;
46
- // #region Properties (3)
47
- this._groups = new Map();
48
- this._nodeToHash = new Map(); // nodeId → instanceHash
49
- this.instancedRoot = new THREE.Group();
50
- this.instancedRoot.matrixAutoUpdate = false;
51
- this.instancedRoot.name = "instancedRoot";
52
- }
53
- // #endregion Constructors (1)
54
- // #region Public Methods (7)
55
- /**
56
- * Register a node as part of an instanced group.
57
- * Creates the InstancedMesh if this is the first node for the given hash.
58
- * Returns the defaultMesh so callers can reference it.
59
- */
60
- addNode(node, geometry, bufferGeometry, material) {
61
- var _a;
62
- const instanceHash = geometry.instanceHash;
63
- let group = this._groups.get(instanceHash);
64
- if (!group) {
65
- const initialCapacity = Math.max(geometry.instanceColors.length, 4);
66
- const instancedMesh = new THREE.InstancedMesh(bufferGeometry, material, initialCapacity);
67
- instancedMesh.count = 0;
68
- instancedMesh.frustumCulled = false;
69
- instancedMesh.matrixAutoUpdate = false;
70
- instancedMesh.userData.instanceHash = instanceHash;
71
- instancedMesh.userData.instanceNodes = [];
72
- group = {
73
- instanceHash,
74
- defaultMesh: instancedMesh,
75
- effectMeshes: new Map(),
76
- nodeToIndex: new Map(),
77
- indexToNode: new Map(),
78
- count: 0,
79
- nodeMatrices: new Map(),
80
- nodeColors: new Map(),
81
- nodeEffect: new Map(),
82
- };
83
- this._groups.set(instanceHash, group);
84
- this.instancedRoot.add(instancedMesh);
85
- }
86
- const nodeId = node.id;
87
- // If already registered, just refresh matrix (re-load scenario)
88
- if (this._nodeToHash.has(nodeId)) {
89
- this._refreshNodeMatrix(group, node);
90
- return group.defaultMesh;
91
- }
92
- this._nodeToHash.set(nodeId, instanceHash);
93
- // Resolve color: first entry in instanceColors that corresponds to this node,
94
- // or white as fallback.
95
- const colorRaw = (_a = geometry.instanceColors[group.count]) !== null && _a !== void 0 ? _a : [1, 1, 1, 1];
96
- const rgb = [
97
- Array.isArray(colorRaw) ? colorRaw[0] : 1,
98
- Array.isArray(colorRaw) ? colorRaw[1] : 1,
99
- Array.isArray(colorRaw) ? colorRaw[2] : 1,
100
- ];
101
- const matrix = new Float32Array(node.worldMatrix);
102
- group.nodeMatrices.set(nodeId, matrix);
103
- group.nodeColors.set(nodeId, rgb);
104
- // Grow buffers if needed
105
- if (group.count >= group.defaultMesh.instanceMatrix.count) {
106
- this._growMeshBuffers(group.defaultMesh);
107
- }
108
- const idx = group.count;
109
- const tempMatrix = new THREE.Matrix4();
110
- tempMatrix.fromArray(matrix);
111
- group.defaultMesh.setMatrixAt(idx, tempMatrix);
112
- if (this._renderingEngine.type !== viewer_shared_types_1.RENDERER_TYPE.ATTRIBUTES) {
113
- group.defaultMesh.setColorAt(idx, new THREE.Color().setRGB(rgb[0], rgb[1], rgb[2]));
114
- }
115
- group.nodeToIndex.set(nodeId, idx);
116
- group.indexToNode.set(idx, node);
117
- group.defaultMesh.userData.instanceNodes[idx] = node;
118
- group.count++;
119
- group.defaultMesh.count = group.count;
120
- group.defaultMesh.instanceMatrix.needsUpdate = true;
121
- if (group.defaultMesh.instanceColor)
122
- group.defaultMesh.instanceColor.needsUpdate = true;
123
- return group.defaultMesh;
124
- }
125
- /**
126
- * Unregister a node from its instance group.
127
- * Uses swap-and-pop so the InstancedMesh never has gaps.
128
- */
129
- removeNode(node) {
130
- const nodeId = node.id;
131
- const instanceHash = this._nodeToHash.get(nodeId);
132
- if (!instanceHash)
133
- return;
134
- const group = this._groups.get(instanceHash);
135
- if (!group)
136
- return;
137
- // Remove from effect first if applicable
138
- const effectKey = group.nodeEffect.get(nodeId);
139
- if (effectKey !== undefined)
140
- this.removeFromEffect(node, effectKey);
141
- this._removeFromDefault(group, nodeId);
142
- group.nodeMatrices.delete(nodeId);
143
- group.nodeColors.delete(nodeId);
144
- this._nodeToHash.delete(nodeId);
145
- // Dispose empty groups
146
- if (group.count === 0) {
147
- this.instancedRoot.remove(group.defaultMesh);
148
- group.effectMeshes.forEach((m) => this.instancedRoot.remove(m));
149
- this._groups.delete(instanceHash);
150
- }
151
- }
152
- /**
153
- * Move a node's instance from the default mesh to a dedicated effect mesh.
154
- * Creates the effect mesh lazily. Returns it so it can be added to the
155
- * post-processing effect's selection set.
156
- */
157
- addToEffect(node, effectKey) {
158
- var _a;
159
- const nodeId = node.id;
160
- const instanceHash = this._nodeToHash.get(nodeId);
161
- if (!instanceHash)
162
- return null;
163
- const group = this._groups.get(instanceHash);
164
- if (!group)
165
- return null;
166
- // Already in an effect mesh
167
- const existingEffect = group.nodeEffect.get(nodeId);
168
- if (existingEffect !== undefined)
169
- return (_a = group.effectMeshes.get(existingEffect)) !== null && _a !== void 0 ? _a : null;
170
- // Lazily create effect mesh (shares geometry, but different material instance)
171
- let effectMesh = group.effectMeshes.get(effectKey);
172
- if (!effectMesh) {
173
- // Clone the material so effect passes can override it independently
174
- const effectMaterial = group.defaultMesh.material.clone();
175
- effectMesh = new THREE.InstancedMesh(group.defaultMesh.geometry, effectMaterial, 8);
176
- effectMesh.count = 0;
177
- effectMesh.frustumCulled = false;
178
- effectMesh.matrixAutoUpdate = false;
179
- effectMesh.userData.instanceHash = instanceHash;
180
- effectMesh.userData.effectKey = effectKey;
181
- effectMesh.userData.instanceNodes = [];
182
- group.effectMeshes.set(effectKey, effectMesh);
183
- this.instancedRoot.add(effectMesh);
184
- }
185
- // Remove from default mesh (swap-and-pop), keep metadata
186
- this._removeFromDefault(group, nodeId);
187
- // Add to effect mesh
188
- const matrix = group.nodeMatrices.get(nodeId);
189
- const color = group.nodeColors.get(nodeId);
190
- const effectIdx = effectMesh.count;
191
- if (effectIdx >= effectMesh.instanceMatrix.count)
192
- this._growMeshBuffers(effectMesh);
193
- const tempMatrix = new THREE.Matrix4();
194
- tempMatrix.fromArray(matrix);
195
- effectMesh.setMatrixAt(effectIdx, tempMatrix);
196
- if (effectMesh.instanceColor)
197
- effectMesh.setColorAt(effectIdx, new THREE.Color().setRGB(color[0], color[1], color[2]));
198
- effectMesh.count++;
199
- effectMesh.userData.instanceNodes[effectIdx] = node;
200
- effectMesh.instanceMatrix.needsUpdate = true;
201
- if (effectMesh.instanceColor)
202
- effectMesh.instanceColor.needsUpdate = true;
203
- group.nodeEffect.set(nodeId, effectKey);
204
- return effectMesh;
205
- }
206
- /**
207
- * Move a node's instance back from an effect mesh to the default mesh.
208
- * Disposes the effect mesh if it becomes empty.
209
- */
210
- removeFromEffect(node, effectKey) {
211
- const nodeId = node.id;
212
- const instanceHash = this._nodeToHash.get(nodeId);
213
- if (!instanceHash)
214
- return;
215
- const group = this._groups.get(instanceHash);
216
- if (!group)
217
- return;
218
- if (group.nodeEffect.get(nodeId) !== effectKey)
219
- return;
220
- const effectMesh = group.effectMeshes.get(effectKey);
221
- if (!effectMesh)
222
- return;
223
- // Find position in effect mesh
224
- const instanceNodes = effectMesh.userData.instanceNodes;
225
- const effectIdx = instanceNodes.indexOf(node);
226
- if (effectIdx === -1)
227
- return;
228
- // Swap-and-pop from effect mesh
229
- const lastEffectIdx = effectMesh.count - 1;
230
- if (effectIdx !== lastEffectIdx) {
231
- const lastNode = instanceNodes[lastEffectIdx];
232
- const lastMatrix = group.nodeMatrices.get(lastNode.id);
233
- const lastColor = group.nodeColors.get(lastNode.id);
234
- const tempMatrix = new THREE.Matrix4();
235
- tempMatrix.fromArray(lastMatrix);
236
- effectMesh.setMatrixAt(effectIdx, tempMatrix);
237
- if (effectMesh.instanceColor)
238
- effectMesh.setColorAt(effectIdx, new THREE.Color().setRGB(lastColor[0], lastColor[1], lastColor[2]));
239
- instanceNodes[effectIdx] = lastNode;
240
- }
241
- effectMesh.count--;
242
- instanceNodes[lastEffectIdx] = undefined;
243
- effectMesh.instanceMatrix.needsUpdate = true;
244
- if (effectMesh.instanceColor)
245
- effectMesh.instanceColor.needsUpdate = true;
246
- group.nodeEffect.delete(nodeId);
247
- // Add back to default mesh
248
- this._addBackToDefault(group, nodeId, node);
249
- // Remove empty effect meshes
250
- if (effectMesh.count === 0) {
251
- this.instancedRoot.remove(effectMesh);
252
- effectMesh.material.dispose();
253
- group.effectMeshes.delete(effectKey);
254
- }
255
- }
256
- /**
257
- * Look up the tree node for a given InstancedMesh + instanceId.
258
- * Used by the intersection engine.
259
- */
260
- findNodeByMeshAndIndex(mesh, instanceId) {
261
- const instanceNodes = mesh.userData.instanceNodes;
262
- return instanceNodes === null || instanceNodes === void 0 ? void 0 : instanceNodes[instanceId];
263
- }
264
- /** Returns true if the node participates in any instance group. */
265
- isInstanced(nodeId) {
266
- return this._nodeToHash.has(nodeId);
267
- }
268
- /** Returns all active InstancedMeshes (default + effect) for a node. */
269
- getMeshesForNode(nodeId) {
270
- const instanceHash = this._nodeToHash.get(nodeId);
271
- if (!instanceHash)
272
- return [];
273
- const group = this._groups.get(instanceHash);
274
- if (!group)
275
- return [];
276
- const result = [group.defaultMesh];
277
- group.effectMeshes.forEach((m) => result.push(m));
278
- return result;
279
- }
280
- // #endregion Public Methods (7)
281
- // #region Private Methods (4)
282
- _removeFromDefault(group, nodeId) {
283
- const index = group.nodeToIndex.get(nodeId);
284
- if (index === undefined)
285
- return;
286
- const lastIdx = group.count - 1;
287
- if (index !== lastIdx) {
288
- const lastNode = group.indexToNode.get(lastIdx);
289
- const lastMatrix = group.nodeMatrices.get(lastNode.id);
290
- const lastColor = group.nodeColors.get(lastNode.id);
291
- const tempMatrix = new THREE.Matrix4();
292
- tempMatrix.fromArray(lastMatrix);
293
- group.defaultMesh.setMatrixAt(index, tempMatrix);
294
- if (group.defaultMesh.instanceColor)
295
- group.defaultMesh.setColorAt(index, new THREE.Color().setRGB(lastColor[0], lastColor[1], lastColor[2]));
296
- group.nodeToIndex.set(lastNode.id, index);
297
- group.indexToNode.set(index, lastNode);
298
- group.defaultMesh.userData.instanceNodes[index] = lastNode;
299
- }
300
- group.count--;
301
- group.defaultMesh.count = group.count;
302
- group.nodeToIndex.delete(nodeId);
303
- group.indexToNode.delete(lastIdx);
304
- group.defaultMesh.userData.instanceNodes[lastIdx] = undefined;
305
- group.defaultMesh.instanceMatrix.needsUpdate = true;
306
- if (group.defaultMesh.instanceColor)
307
- group.defaultMesh.instanceColor.needsUpdate = true;
308
- }
309
- _addBackToDefault(group, nodeId, node) {
310
- const matrix = group.nodeMatrices.get(nodeId);
311
- const color = group.nodeColors.get(nodeId);
312
- const newIdx = group.count;
313
- if (newIdx >= group.defaultMesh.instanceMatrix.count)
314
- this._growMeshBuffers(group.defaultMesh);
315
- const tempMatrix = new THREE.Matrix4();
316
- tempMatrix.fromArray(matrix);
317
- group.defaultMesh.setMatrixAt(newIdx, tempMatrix);
318
- if (group.defaultMesh.instanceColor)
319
- group.defaultMesh.setColorAt(newIdx, new THREE.Color().setRGB(color[0], color[1], color[2]));
320
- group.nodeToIndex.set(nodeId, newIdx);
321
- group.indexToNode.set(newIdx, node);
322
- group.defaultMesh.userData.instanceNodes[newIdx] = node;
323
- group.count++;
324
- group.defaultMesh.count = group.count;
325
- group.defaultMesh.instanceMatrix.needsUpdate = true;
326
- if (group.defaultMesh.instanceColor)
327
- group.defaultMesh.instanceColor.needsUpdate = true;
328
- }
329
- _refreshNodeMatrix(group, node) {
330
- const nodeId = node.id;
331
- const matrix = new Float32Array(node.worldMatrix);
332
- group.nodeMatrices.set(nodeId, matrix);
333
- const idx = group.nodeToIndex.get(nodeId);
334
- if (idx !== undefined) {
335
- const tempMatrix = new THREE.Matrix4();
336
- tempMatrix.fromArray(matrix);
337
- group.defaultMesh.setMatrixAt(idx, tempMatrix);
338
- group.defaultMesh.instanceMatrix.needsUpdate = true;
339
- }
340
- const effectKey = group.nodeEffect.get(nodeId);
341
- if (effectKey !== undefined) {
342
- const effectMesh = group.effectMeshes.get(effectKey);
343
- if (effectMesh) {
344
- const instanceNodes = effectMesh.userData.instanceNodes;
345
- const effectIdx = instanceNodes.indexOf(node);
346
- if (effectIdx !== -1) {
347
- const tempMatrix = new THREE.Matrix4();
348
- tempMatrix.fromArray(matrix);
349
- effectMesh.setMatrixAt(effectIdx, tempMatrix);
350
- effectMesh.instanceMatrix.needsUpdate = true;
351
- }
352
- }
353
- }
354
- }
355
- _growMeshBuffers(mesh) {
356
- const currentCapacity = mesh.instanceMatrix.count;
357
- const newCapacity = Math.max(currentCapacity * 2, 8);
358
- const newMatrixArray = new Float32Array(newCapacity * 16);
359
- newMatrixArray.set(mesh.instanceMatrix.array);
360
- mesh.instanceMatrix = new THREE.InstancedBufferAttribute(newMatrixArray, 16);
361
- if (mesh.instanceColor) {
362
- const newColorArray = new Float32Array(newCapacity * 3);
363
- newColorArray.set(mesh.instanceColor.array);
364
- mesh.instanceColor = new THREE.InstancedBufferAttribute(newColorArray, 3);
365
- }
366
- // Grow the instanceNodes array too
367
- if (!mesh.userData.instanceNodes)
368
- mesh.userData.instanceNodes = [];
369
- }
370
- }
371
- exports.InstanceGroupManager = InstanceGroupManager;
372
- //# sourceMappingURL=InstanceGroupManager.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"InstanceGroupManager.js","sourceRoot":"","sources":["../../src/managers/InstanceGroupManager.ts"],"names":[],"mappings":"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"}