Skip to content

Commit 9dd393e

Browse files
committed
Clean up and improve logic for instantiating nodes in AssetContainer.instantiateModelsToScene
1 parent d521fd0 commit 9dd393e

File tree

1 file changed

+14
-6
lines changed

1 file changed

+14
-6
lines changed

packages/dev/core/src/assetContainer.ts

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -308,11 +308,6 @@ export class AssetContainer extends AbstractScene {
308308
...options,
309309
};
310310

311-
if (!localOptions.doNotInstantiate) {
312-
// Always clone skinned meshes.
313-
localOptions.doNotInstantiate = (node) => !!(node as AbstractMesh).skeleton;
314-
}
315-
316311
const onClone = (source: TransformNode, clone: TransformNode) => {
317312
conversionMap[source.uniqueId] = clone.uniqueId;
318313
storeMap[clone.uniqueId] = clone;
@@ -438,7 +433,20 @@ export class AssetContainer extends AbstractScene {
438433
onNewCreated(instancedNode, replicatedInstancedNode);
439434
} else {
440435
// Mesh or TransformNode
441-
const canInstance = !localOptions?.doNotInstantiate && (node as Mesh).getTotalVertices() > 0;
436+
let canInstance = true;
437+
if (
438+
node.getClassName() === "TransformNode" ||
439+
(node as Mesh).skeleton ||
440+
(node as Mesh).getTotalVertices() === 0) {
441+
// Transform nodes, skinned meshes, and meshes with no vertices can never be instanced!
442+
canInstance = false;
443+
} else if (localOptions?.doNotInstantiate) {
444+
if (localOptions.doNotInstantiate instanceof Function) {
445+
canInstance = !localOptions.doNotInstantiate(node);
446+
} else {
447+
canInstance = !localOptions.doNotInstantiate;
448+
}
449+
}
442450
const replicatedNode = canInstance ? (node as Mesh).createInstance(`instance of ${node.name}`) : node.clone(`Clone of ${node.name}`, null, true);
443451
if (!replicatedNode) {
444452
throw new Error(`Could not clone or instantiate node on Asset Container ${node.name}`);

0 commit comments

Comments
 (0)