@@ -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