Selaa lähdekoodia

Revert: Removed more material.skinning references.

Mr.doob 8 vuotta sitten
vanhempi
commit
1546b798fc

+ 18 - 0
editor/js/Sidebar.Animation.js

@@ -27,6 +27,24 @@ Sidebar.Animation = function ( editor ) {
 
 		object.traverse( function ( child ) {
 
+			if ( child instanceof THREE.SkinnedMesh ) {
+
+				var material = child.material;
+
+				if ( material instanceof THREE.MultiMaterial ) {
+
+					for ( var i = 0; i < material.materials.length; i ++ ) {
+
+						material.materials[ i ].skinning = true;
+
+					}
+
+				} else {
+
+					child.material.skinning = true;
+
+				}
+
 				animations[ child.id ] = new THREE.Animation( child, child.geometry.animation );
 
 			} else if ( child instanceof THREE.MorphAnimMesh ) {

+ 23 - 0
editor/js/Sidebar.Material.js

@@ -229,6 +229,16 @@ Sidebar.Material = function ( editor ) {
 
 	container.add( materialVertexColorsRow );
 
+	// skinning
+
+	var materialSkinningRow = new UI.Row();
+	var materialSkinning = new UI.Checkbox( false ).onChange( update );
+
+	materialSkinningRow.add( new UI.Text( 'Skinning' ).setWidth( '90px' ) );
+	materialSkinningRow.add( materialSkinning );
+
+	container.add( materialSkinningRow );
+
 	// map
 
 	var materialMapRow = new UI.Row();
@@ -571,6 +581,12 @@ Sidebar.Material = function ( editor ) {
 
 			}
 
+			if ( material.skinning !== undefined && material.skinning !== materialSkinning.getValue() ) {
+
+				editor.execute( new SetMaterialValueCommand( currentObject, 'skinning', materialSkinning.getValue() ) );
+
+			}
+
 			if ( material.map !== undefined ) {
 
 				var mapEnabled = materialMapEnabled.getValue() === true;
@@ -938,6 +954,7 @@ Sidebar.Material = function ( editor ) {
 			'clearCoatRoughness': materialClearCoatRoughnessRow,
 			'vertexShader': materialProgramRow,
 			'vertexColors': materialVertexColorsRow,
+			'skinning': materialSkinningRow,
 			'map': materialMapRow,
 			'alphaMap': materialAlphaMapRow,
 			'bumpMap': materialBumpMapRow,
@@ -1044,6 +1061,12 @@ Sidebar.Material = function ( editor ) {
 
 		}
 
+		if ( material.skinning !== undefined ) {
+
+			materialSkinning.setValue( material.skinning );
+
+		}
+
 		if ( material.map !== undefined ) {
 
 			materialMapEnabled.setValue( material.map !== null );

+ 6 - 2
examples/js/BlendCharacter.js

@@ -36,6 +36,8 @@ THREE.BlendCharacter = function () {
 
 			}
 
+			scope.material.skinning = true;
+
 			scope.mixer = new THREE.AnimationMixer( scope );
 
 			// Create the animations
@@ -57,9 +59,10 @@ THREE.BlendCharacter = function () {
 		var scope = this;
 
 		var loader = new THREE.JSONLoader();
-		loader.load( url, function ( geometry, materials ) {
+		loader.load( url, function( geometry, materials ) {
 
 			var originalMaterial = materials[ 0 ];
+			originalMaterial.skinning = true;
 
 			THREE.SkinnedMesh.call( scope, geometry, originalMaterial );
 
@@ -79,7 +82,7 @@ THREE.BlendCharacter = function () {
 		} );
 
 	};
-
+	
 	this.update = function( dt ) {
 
 		this.mixer.update( dt );
@@ -176,3 +179,4 @@ THREE.BlendCharacter.prototype.getForward = function() {
 	}
 
 };
+

+ 2 - 0
examples/js/effects/OutlineEffect.js

@@ -206,6 +206,7 @@ THREE.OutlineEffect = function ( renderer, parameters ) {
 			fragmentShader: fragmentShader,
 			side: THREE.BackSide,
 			//wireframe: true,
+			skinning: false,
 			morphTargets: false,
 			morphNormals: false,
 			fog: false
@@ -326,6 +327,7 @@ THREE.OutlineEffect = function ( renderer, parameters ) {
 
 		var outlineParameters = originalMaterial.outlineParameters;
 
+		material.skinning = originalMaterial.skinning;
 		material.morphTargets = originalMaterial.morphTargets;
 		material.morphNormals = originalMaterial.morphNormals;
 		material.fog = originalMaterial.fog;

+ 4 - 3
examples/js/loaders/AssimpLoader.js

@@ -635,6 +635,7 @@
 			var skeleton = new THREE.Skeleton( allBones, offsetMatrix );
 
 			this.threeNode.bind( skeleton, new THREE.Matrix4() );
+			this.threeNode.material.skinning = true;
 
 		};
 
@@ -1849,7 +1850,7 @@
 
 					}
 
-
+					
 
 				}
 
@@ -1872,7 +1873,7 @@
 				} else {
 
 					throw ( new Error( "Sorry, can't currently triangulate polys. Use the triangulate preprocessor in Assimp." ))
-
+					
 				}
 
 
@@ -2349,4 +2350,4 @@
 
 	THREE.AssimpLoader = AssimpLoader;
 
-} )();
+} )();

+ 12 - 1
examples/js/loaders/ColladaLoader.js

@@ -1197,7 +1197,18 @@ THREE.ColladaLoader = function () {
 
 					applySkin( geom, skinController );
 
-					material.morphTargets = geom.morphTargets.length > 0;
+					if ( geom.morphTargets.length > 0 ) {
+
+						material.morphTargets = true;
+						material.skinning = false;
+
+					} else {
+
+						material.morphTargets = false;
+						material.skinning = true;
+
+					}
+
 
 					mesh = new THREE.SkinnedMesh( geom, material, false );
 

+ 14 - 0
examples/js/loaders/FBXLoader.js

@@ -464,6 +464,20 @@
 
 			if ( geometry.bones !== undefined && geometry.skinWeights !== undefined && geometry.skinWeights.length > 0 ) {
 
+				if ( material instanceof THREE.MultiMaterial ) {
+
+					for ( var i = 0; i < material.materials.length; ++ i ) {
+
+						material.materials[ i ].skinning = true;
+
+					}
+
+				} else {
+
+					material.skinning = true;
+
+				}
+
 				mesh = new THREE.SkinnedMesh( geometry, material );
 
 			} else {

+ 5 - 0
examples/js/loaders/FBXLoader2.js

@@ -1224,6 +1224,11 @@
 								}
 								if ( geometry.FBX_Deformer ) {
 
+									for ( var materialsIndex = 0, materialsLength = materials.length; materialsIndex < materialsLength; ++ materialsIndex ) {
+
+										materials[ materialsIndex ].skinning = true;
+
+									}
 									model = new THREE.SkinnedMesh( geometry, material );
 
 								} else {

+ 1 - 0
examples/js/loaders/GLTFLoader.js

@@ -2023,6 +2023,7 @@ THREE.GLTFLoader = ( function () {
 
 									var geometry = originalGeometry;
 									var material = originalMaterial;
+									material.skinning = true;
 
 									child = new THREE.SkinnedMesh( geometry, material, false );
 									child.castShadow = true;

+ 1 - 0
examples/js/loaders/MMDLoader.js

@@ -1118,6 +1118,7 @@ THREE.MMDLoader.prototype.createMesh = function ( model, texturePath, onProgress
 
 			if ( p.name !== undefined ) m.name = p.name;
 
+			m.skinning = geometry.bones.length > 0 ? true : false;
 			m.morphTargets = geometry.morphTargets.length > 0 ? true : false;
 			m.lights = true;
 			m.side = ( model.metadata.format === 'pmx' && ( p2.flag & 0x1 ) === 1 ) ? THREE.DoubleSide : p.side;

+ 2 - 0
examples/js/loaders/sea3d/SEA3DLoader.js

@@ -1993,6 +1993,7 @@ THREE.SEA3D.prototype.readMesh = function ( sea ) {
 
 				mats[ i ] = sea.material[ i ].tag;
 
+				mats[ i ].skinning = skeleton != undefined;
 				mats[ i ].morphTargets = uMorph;
 				mats[ i ].morphNormals = uMorphNormal;
 				mats[ i ].vertexColors = sea.geometry.color ? THREE.VertexColors : THREE.NoColors;
@@ -2006,6 +2007,7 @@ THREE.SEA3D.prototype.readMesh = function ( sea ) {
 
 			mat = sea.material[ 0 ].tag;
 
+			mat.skinning = skeleton != undefined;
 			mat.morphTargets = uMorph;
 			mat.morphNormals = uMorphNormal;
 			mat.vertexColors = sea.geometry.color ? THREE.VertexColors : THREE.NoColors;

+ 2 - 0
examples/js/renderers/WebGLDeferredRenderer.js

@@ -427,6 +427,7 @@ THREE.WebGLDeferredRenderer = function ( parameters ) {
 
 	function updateDeferredNormalDepthMaterial( material, originalMaterial ) {
 
+		if ( originalMaterial.skinning !== undefined ) material.skinning = originalMaterial.skinning;
 		if ( originalMaterial.morphTargets !== undefined ) material.morphTargets = originalMaterial.morphTargets;
 
 		if ( originalMaterial.visible === true ) {
@@ -490,6 +491,7 @@ THREE.WebGLDeferredRenderer = function ( parameters ) {
 	function updateDeferredColorMaterial( material, originalMaterial ) {
 
 		if ( originalMaterial.map !== undefined ) material.map = originalMaterial.map;
+		if ( originalMaterial.skinning !== undefined ) material.skinning = originalMaterial.skinning;
 		if ( originalMaterial.morphTargets !== undefined ) material.morphTargets = originalMaterial.morphTargets;
 
 		if ( originalMaterial.visible === true ) {

+ 1 - 0
examples/webgl_animation_skinning_morph.html

@@ -198,6 +198,7 @@
 				for ( var i = 0; i < materials.length; i ++ ) {
 
 					var m = materials[ i ];
+					m.skinning = true;
 					m.morphTargets = true;
 
 					m.specular.setHSL( 0, 0, 0.1 );

+ 6 - 0
examples/webgl_skinning_simple.html

@@ -63,6 +63,12 @@
 
 				loader.load( './models/skinned/simple/simple.js', function ( geometry, materials ) {
 
+					for ( var k in materials ) {
+
+						materials[k].skinning = true;
+
+					}
+
 					skinnedMesh = new THREE.SkinnedMesh(geometry, new THREE.MultiMaterial(materials));
 					skinnedMesh.scale.set( 1, 1, 1 );
 

+ 1 - 0
examples/webgldeferred_animation.html

@@ -112,6 +112,7 @@
 
 					var material = materials[ 0 ];
 					material.emissive.set( 0x101010 );
+					material.skinning = true;
 					material.morphTargets = true;
 
 					var mesh = new THREE.SkinnedMesh( geometry, material );