Browse Source

Merge pull request #14111 from takahirox/GLTFLoaderLessMeshClone

GLTFLoader: No mesh clone if it is referenced only once
Mr.doob 7 years ago
parent
commit
45528f5ac5
1 changed files with 10 additions and 20 deletions
  1. 10 20
      examples/js/loaders/GLTFLoader.js

+ 10 - 20
examples/js/loaders/GLTFLoader.js

@@ -2903,36 +2903,26 @@ THREE.GLTFLoader = ( function () {
 
 				var mesh = dependencies.meshes[ nodeDef.mesh ];
 
-				node = mesh.clone();
-
-				// for Specular-Glossiness
-				if ( mesh.isGroup === true ) {
+				if ( meshReferences[ nodeDef.mesh ] > 1 ) {
 
-					for ( var i = 0, il = mesh.children.length; i < il; i ++ ) {
+					var instanceNum = meshUses[ nodeDef.mesh ] ++;
 
-						var child = mesh.children[ i ];
+					node = mesh.clone();
+					node.name += '_instance_' + instanceNum;
 
-						if ( child.material && child.material.isGLTFSpecularGlossinessMaterial === true ) {
+					// onBeforeRender copy for Specular-Glossiness
+					node.onBeforeRender = mesh.onBeforeRender;
 
-							node.children[ i ].onBeforeRender = child.onBeforeRender;
+					for ( var i = 0, il = node.children.length; i < il; i ++ ) {
 
-						}
+						node.children[ i ].name += '_instance_' + instanceNum;
+						node.children[ i ].onBeforeRender = mesh.children[ i ].onBeforeRender;
 
 					}
 
 				} else {
 
-					if ( mesh.material && mesh.material.isGLTFSpecularGlossinessMaterial === true ) {
-
-						node.onBeforeRender = mesh.onBeforeRender;
-
-					}
-
-				}
-
-				if ( meshReferences[ nodeDef.mesh ] > 1 ) {
-
-					node.name += '_instance_' + meshUses[ nodeDef.mesh ] ++;
+					node = mesh;
 
 				}