@shapediver/viewer.rendering-engine.rendering-engine-threejs 3.16.7 → 3.16.8
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.
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { GeometryData, ITreeNode } from "@shapediver/viewer.shared.node-tree";
|
|
2
|
+
import * as THREE from "three";
|
|
3
|
+
import { RenderingEngine } from "../RenderingEngine";
|
|
4
|
+
/**
|
|
5
|
+
* Manages GPU-instanced meshes and their per-instance operations.
|
|
6
|
+
*
|
|
7
|
+
* Each group of primitives sharing the same geometry hash is represented by
|
|
8
|
+
* one or more THREE.InstancedMesh objects:
|
|
9
|
+
* - defaultMesh: contains all instances that have no active post-processing effect
|
|
10
|
+
* - effectMeshes: lazily-created meshes that contain instances which participate
|
|
11
|
+
* in a specific post-processing effect (outline, bloom, …)
|
|
12
|
+
*
|
|
13
|
+
* All InstancedMeshes are direct children of `instancedRoot`, which must be
|
|
14
|
+
* added to the THREE scene by the owner (RenderingEngine / SceneTreeManager).
|
|
15
|
+
*/
|
|
16
|
+
export declare class InstanceGroupManager {
|
|
17
|
+
private readonly _renderingEngine;
|
|
18
|
+
private readonly _groups;
|
|
19
|
+
private readonly _nodeToHash;
|
|
20
|
+
readonly instancedRoot: THREE.Group;
|
|
21
|
+
constructor(_renderingEngine: RenderingEngine);
|
|
22
|
+
/**
|
|
23
|
+
* Register a node as part of an instanced group.
|
|
24
|
+
* Creates the InstancedMesh if this is the first node for the given hash.
|
|
25
|
+
* Returns the defaultMesh so callers can reference it.
|
|
26
|
+
*/
|
|
27
|
+
addNode(node: ITreeNode, geometry: GeometryData, bufferGeometry: THREE.BufferGeometry, material: THREE.Material): THREE.InstancedMesh;
|
|
28
|
+
/**
|
|
29
|
+
* Unregister a node from its instance group.
|
|
30
|
+
* Uses swap-and-pop so the InstancedMesh never has gaps.
|
|
31
|
+
*/
|
|
32
|
+
removeNode(node: ITreeNode): void;
|
|
33
|
+
/**
|
|
34
|
+
* Move a node's instance from the default mesh to a dedicated effect mesh.
|
|
35
|
+
* Creates the effect mesh lazily. Returns it so it can be added to the
|
|
36
|
+
* post-processing effect's selection set.
|
|
37
|
+
*/
|
|
38
|
+
addToEffect(node: ITreeNode, effectKey: string): THREE.InstancedMesh | null;
|
|
39
|
+
/**
|
|
40
|
+
* Move a node's instance back from an effect mesh to the default mesh.
|
|
41
|
+
* Disposes the effect mesh if it becomes empty.
|
|
42
|
+
*/
|
|
43
|
+
removeFromEffect(node: ITreeNode, effectKey: string): void;
|
|
44
|
+
/**
|
|
45
|
+
* Look up the tree node for a given InstancedMesh + instanceId.
|
|
46
|
+
* Used by the intersection engine.
|
|
47
|
+
*/
|
|
48
|
+
findNodeByMeshAndIndex(mesh: THREE.InstancedMesh, instanceId: number): ITreeNode | undefined;
|
|
49
|
+
/** Returns true if the node participates in any instance group. */
|
|
50
|
+
isInstanced(nodeId: string): boolean;
|
|
51
|
+
/** Returns all active InstancedMeshes (default + effect) for a node. */
|
|
52
|
+
getMeshesForNode(nodeId: string): THREE.InstancedMesh[];
|
|
53
|
+
private _removeFromDefault;
|
|
54
|
+
private _addBackToDefault;
|
|
55
|
+
private _refreshNodeMatrix;
|
|
56
|
+
private _growMeshBuffers;
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=InstanceGroupManager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"InstanceGroupManager.d.ts","sourceRoot":"","sources":["../../src/managers/InstanceGroupManager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,YAAY,EAAE,SAAS,EAAC,MAAM,qCAAqC,CAAC;AAE5E,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAC,eAAe,EAAC,MAAM,oBAAoB,CAAC;AAoBnD;;;;;;;;;;;GAWG;AACH,qBAAa,oBAAoB;IAYpB,OAAO,CAAC,QAAQ,CAAC,gBAAgB;IAT7C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAoC;IAC5D,OAAO,CAAC,QAAQ,CAAC,WAAW,CAA6B;IAEzD,QAAQ,CAAC,aAAa,EAAE,KAAK,CAAC,KAAK,CAAqB;gBAM3B,gBAAgB,EAAE,eAAe;IAS9D;;;;OAIG;IACI,OAAO,CACb,IAAI,EAAE,SAAS,EACf,QAAQ,EAAE,YAAY,EACtB,cAAc,EAAE,KAAK,CAAC,cAAc,EACpC,QAAQ,EAAE,KAAK,CAAC,QAAQ,GACtB,KAAK,CAAC,aAAa;IA0FtB;;;OAGG;IACI,UAAU,CAAC,IAAI,EAAE,SAAS,GAAG,IAAI;IAyBxC;;;;OAIG;IACI,WAAW,CACjB,IAAI,EAAE,SAAS,EACf,SAAS,EAAE,MAAM,GACf,KAAK,CAAC,aAAa,GAAG,IAAI;IAsE7B;;;OAGG;IACI,gBAAgB,CAAC,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI;IAgEjE;;;OAGG;IACI,sBAAsB,CAC5B,IAAI,EAAE,KAAK,CAAC,aAAa,EACzB,UAAU,EAAE,MAAM,GAChB,SAAS,GAAG,SAAS;IAOxB,mEAAmE;IAC5D,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO;IAI3C,wEAAwE;IACjE,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,KAAK,CAAC,aAAa,EAAE;IAc9D,OAAO,CAAC,kBAAkB;IAkD1B,OAAO,CAAC,iBAAiB;IAsCzB,OAAO,CAAC,kBAAkB;IAgC1B,OAAO,CAAC,gBAAgB;CA0BxB"}
|
|
@@ -0,0 +1,372 @@
|
|
|
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
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"InstanceGroupManager.js","sourceRoot":"","sources":["../../src/managers/InstanceGroupManager.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@shapediver/viewer.rendering-engine.rendering-engine-threejs",
|
|
3
|
-
"version": "3.16.
|
|
3
|
+
"version": "3.16.8",
|
|
4
4
|
"description": "",
|
|
5
5
|
"keywords": [],
|
|
6
6
|
"author": "Michael Oppitz <michael@shapediver.com>",
|
|
@@ -38,21 +38,21 @@
|
|
|
38
38
|
"testEnvironment": "node"
|
|
39
39
|
},
|
|
40
40
|
"dependencies": {
|
|
41
|
-
"@shapediver/viewer.data-engine.gltf-converter": "3.16.
|
|
42
|
-
"@shapediver/viewer.data-engine.shared-types": "3.16.
|
|
43
|
-
"@shapediver/viewer.data-engine.tag3d-engine": "3.16.
|
|
44
|
-
"@shapediver/viewer.rendering-engine.animation-engine": "3.16.
|
|
45
|
-
"@shapediver/viewer.rendering-engine.animation-frame-engine": "3.16.
|
|
46
|
-
"@shapediver/viewer.rendering-engine.camera-engine": "3.16.
|
|
47
|
-
"@shapediver/viewer.rendering-engine.canvas-engine": "3.16.
|
|
48
|
-
"@shapediver/viewer.rendering-engine.intersection-engine": "3.16.
|
|
49
|
-
"@shapediver/viewer.rendering-engine.light-engine": "3.16.
|
|
50
|
-
"@shapediver/viewer.rendering-engine.rendering-engine": "3.16.
|
|
51
|
-
"@shapediver/viewer.shared.global-access-objects": "3.16.
|
|
52
|
-
"@shapediver/viewer.shared.math": "3.16.
|
|
53
|
-
"@shapediver/viewer.shared.node-tree": "3.16.
|
|
54
|
-
"@shapediver/viewer.shared.services": "3.16.
|
|
55
|
-
"@shapediver/viewer.shared.types": "3.16.
|
|
41
|
+
"@shapediver/viewer.data-engine.gltf-converter": "3.16.8",
|
|
42
|
+
"@shapediver/viewer.data-engine.shared-types": "3.16.8",
|
|
43
|
+
"@shapediver/viewer.data-engine.tag3d-engine": "3.16.8",
|
|
44
|
+
"@shapediver/viewer.rendering-engine.animation-engine": "3.16.8",
|
|
45
|
+
"@shapediver/viewer.rendering-engine.animation-frame-engine": "3.16.8",
|
|
46
|
+
"@shapediver/viewer.rendering-engine.camera-engine": "3.16.8",
|
|
47
|
+
"@shapediver/viewer.rendering-engine.canvas-engine": "3.16.8",
|
|
48
|
+
"@shapediver/viewer.rendering-engine.intersection-engine": "3.16.8",
|
|
49
|
+
"@shapediver/viewer.rendering-engine.light-engine": "3.16.8",
|
|
50
|
+
"@shapediver/viewer.rendering-engine.rendering-engine": "3.16.8",
|
|
51
|
+
"@shapediver/viewer.shared.global-access-objects": "3.16.8",
|
|
52
|
+
"@shapediver/viewer.shared.math": "3.16.8",
|
|
53
|
+
"@shapediver/viewer.shared.node-tree": "3.16.8",
|
|
54
|
+
"@shapediver/viewer.shared.services": "3.16.8",
|
|
55
|
+
"@shapediver/viewer.shared.types": "3.16.8",
|
|
56
56
|
"@tweenjs/tween.js": "18.6.4",
|
|
57
57
|
"@types/stats.js": "0.17.4",
|
|
58
58
|
"@types/three": "0.162.0",
|
|
@@ -61,5 +61,5 @@
|
|
|
61
61
|
"stats.js": "0.17.0",
|
|
62
62
|
"three": "0.162.0"
|
|
63
63
|
},
|
|
64
|
-
"gitHead": "
|
|
64
|
+
"gitHead": "d0305585911852e700f9e3768e5edd4bac222ea0"
|
|
65
65
|
}
|