public void Geometry_AddDeformer_AddsDeformer() { // given: var g = new FbxMesh(""); var skin = new FbxSkin(""); // require: Assert.AreEqual(0, g.GetDeformerCount()); Assert.AreEqual(0, g.GetSrcObjectCount()); // when: g.AddDeformer(skin); // then: Assert.AreEqual(1, g.GetDeformerCount()); Assert.AreSame(skin, g.GetDeformer(0)); Assert.AreEqual(1, g.GetSrcObjectCount()); Assert.AreSame(skin, g.GetSrcObject(0)); }
public void Geometry_DisconnectSrcObject_RemovesDeformer() { // given: var g = new FbxMesh(""); var skin = new FbxSkin(""); g.AddDeformer(skin); // require: Assert.AreEqual(1, g.GetDeformerCount()); Assert.AreEqual(1, g.GetSrcObjectCount()); // when: g.DisconnectSrcObject(skin); // then: Assert.AreEqual(0, g.GetDeformerCount()); Assert.AreEqual(0, g.GetSrcObjectCount()); }
/// <summary> /// Export binding of mesh to skeleton /// </summary> protected void ExportSkin(MeshInfo meshInfo, FbxScene fbxScene, FbxMesh fbxMesh, FbxNode fbxRootNode, Dictionary <Transform, FbxNode> boneNodes) { SkinnedMeshRenderer unitySkinnedMeshRenderer = meshInfo.renderer as SkinnedMeshRenderer; FbxSkin fbxSkin = FbxSkin.Create(fbxScene, (meshInfo.unityObject.name + "_Skin")); FbxAMatrix fbxMeshMatrix = fbxRootNode.EvaluateGlobalTransform(); // keep track of the bone index -> fbx cluster mapping, so that we can add the bone weights afterwards Dictionary <int, FbxCluster> boneCluster = new Dictionary <int, FbxCluster> (); for (int i = 0; i < unitySkinnedMeshRenderer.bones.Length; i++) { FbxNode fbxBoneNode = boneNodes [unitySkinnedMeshRenderer.bones[i]]; // Create the deforming cluster FbxCluster fbxCluster = FbxCluster.Create(fbxScene, "BoneWeightCluster"); fbxCluster.SetLink(fbxBoneNode); fbxCluster.SetLinkMode(FbxCluster.ELinkMode.eTotalOne); boneCluster.Add(i, fbxCluster); // set the Transform and TransformLink matrix fbxCluster.SetTransformMatrix(fbxMeshMatrix); FbxAMatrix fbxLinkMatrix = fbxBoneNode.EvaluateGlobalTransform(); fbxCluster.SetTransformLinkMatrix(fbxLinkMatrix); // add the cluster to the skin fbxSkin.AddCluster(fbxCluster); } // set the vertex weights for each bone SetVertexWeights(meshInfo, boneCluster); // Add the skin to the mesh after the clusters have been added fbxMesh.AddDeformer(fbxSkin); }