From 89a6ff01df4ee2db38b2e200c34009982c5f10e1 Mon Sep 17 00:00:00 2001 From: Toni Alatalo Date: Fri, 11 Sep 2015 13:03:24 +0300 Subject: [PATCH 1/2] dev2 three.json SkinnedMesh loading w.i.p. had to disable material setting in EC_Mesh_ThreeJs as it overrode the material from the three.json --- src/view/threejs/asset/ThreeJsonAsset.js | 12 +++++++++++- .../threejs/entity-components/EC_Mesh_ThreeJs.js | 3 +++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/src/view/threejs/asset/ThreeJsonAsset.js b/src/view/threejs/asset/ThreeJsonAsset.js index a7ee588..47e9315 100644 --- a/src/view/threejs/asset/ThreeJsonAsset.js +++ b/src/view/threejs/asset/ThreeJsonAsset.js @@ -144,7 +144,17 @@ var ThreeJsonAsset = IAsset.$extend( material = (threejsData.materials.length === 1 ? threejsData.materials[0] : new THREE.MeshFaceMaterial(threejsData.materials)); this.mesh = TundraSDK.framework.renderer.createSceneNode(); - this.mesh.add(new THREE.Mesh(threejsData.geometry, material)); + + var threeMesh = undefined; + if (threejsData.geometry.bones !== undefined && threejsData.geometry.bones.length > 0) { + threeMesh = new THREE.SkinnedMesh(threejsData.geometry, material); + material.skinning = true; + } + else { + threeMesh = new THREE.Mesh(threejsData.geometry, material) + } + + this.mesh.add(threeMesh); //this.mesh is confusingly named: is not a mesh but an object3d parent for mesh } else this.log.error("Parsing failed, three.js didnt return a valid geometry for", this.name); diff --git a/src/view/threejs/entity-components/EC_Mesh_ThreeJs.js b/src/view/threejs/entity-components/EC_Mesh_ThreeJs.js index 454a271..e1df4fc 100644 --- a/src/view/threejs/entity-components/EC_Mesh_ThreeJs.js +++ b/src/view/threejs/entity-components/EC_Mesh_ThreeJs.js @@ -174,6 +174,7 @@ var EC_Mesh_ThreeJs = EC_Mesh.$extend( } } +/* // Apply materials var materialRefs = this.attributes.materialRefs.get(); var numSubmeshes = this.meshAsset.numSubmeshes(); @@ -199,12 +200,14 @@ var EC_Mesh_ThreeJs = EC_Mesh.$extend( submesh.receiveShadow = (submesh.material.hasTundraShadowShader !== undefined && submesh.material.hasTundraShadowShader === true); submesh.castShadow = this.castShadows; } + if (this.materialAssets.length > numSubmeshes) { this.log.warnC("Too many materials for target mesh " + this.meshAsset.name + ". Materials: " + this.materialAssets.length + " Submeshes: " + numSubmeshes + " In entity: " + this.parentEntity.id + " " + this.parentEntity.name); } +*/ } // Parent this meshes scene node to EC_Placeable scene node From 26cf52db697e09f65664b8a8a0bc4526c4889d79 Mon Sep 17 00:00:00 2001 From: Toni Alatalo Date: Fri, 11 Sep 2015 14:49:55 +0300 Subject: [PATCH 2/2] better way to not override material set in three json mesh asset --- .../threejs/entity-components/EC_Mesh_ThreeJs.js | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/src/view/threejs/entity-components/EC_Mesh_ThreeJs.js b/src/view/threejs/entity-components/EC_Mesh_ThreeJs.js index e1df4fc..c7e15e9 100644 --- a/src/view/threejs/entity-components/EC_Mesh_ThreeJs.js +++ b/src/view/threejs/entity-components/EC_Mesh_ThreeJs.js @@ -174,7 +174,6 @@ var EC_Mesh_ThreeJs = EC_Mesh.$extend( } } -/* // Apply materials var materialRefs = this.attributes.materialRefs.get(); var numSubmeshes = this.meshAsset.numSubmeshes(); @@ -194,9 +193,13 @@ var EC_Mesh_ThreeJs = EC_Mesh.$extend( var materialAsset = this.materialAssets[i]; if (materialAsset instanceof IAsset || materialAsset instanceof THREE.Material) submesh.material = (materialAsset instanceof IAsset ? materialAsset.material : materialAsset); - else - submesh.material = TundraSDK.framework.renderer.materialWhite; - + else { + //only set materialWhite if no material is set from before. + //-- in case of three json assets, the material is already set by the mesh loader. + if (submesh.material === null) { //is this what actually happens when no material is set? + submesh.material = TundraSDK.framework.renderer.materialWhite; + } //@todo: probably breaks using the EC editor to *remove* material ref to default to white. + } submesh.receiveShadow = (submesh.material.hasTundraShadowShader !== undefined && submesh.material.hasTundraShadowShader === true); submesh.castShadow = this.castShadows; } @@ -207,7 +210,6 @@ var EC_Mesh_ThreeJs = EC_Mesh.$extend( this.materialAssets.length + " Submeshes: " + numSubmeshes + " In entity: " + this.parentEntity.id + " " + this.parentEntity.name); } -*/ } // Parent this meshes scene node to EC_Placeable scene node