private void AddMorphToMesh(FBXScene pScene, FBXNode pFbxNode, List <Vector> morph) { FBXShape lShape = FBXShape.Create(pScene, "MorphShape"); FBXMesh mesh = (FBXMesh)pFbxNode.GetMesh(); int count = mesh.GetControlPointsCount(); lShape.InitControlPoints(count); List <FBXVector4> lControlPoints = lShape.GetControlPoints(); for (int i = 0; i < count; i++) { FBXVector4 cp = new FBXVector4(morph[i].members[0] * exportScale, morph[i].members[1] * exportScale, morph[i].members[2] * exportScale, 0); lControlPoints[i] = cp; } lShape.SetControlPoints(lControlPoints); FBXBlendShape lBlendShape = FBXBlendShape.Create(pScene, "morph"); FBXBlendShapeChannel lBlendShapeChannel = FBXBlendShapeChannel.Create(pScene, "morphchannel"); mesh.AddDeformer(lBlendShape); lBlendShape.AddBlendShapeChannel(lBlendShapeChannel); lBlendShapeChannel.AddTargetShape(lShape); }
void FbxsdkBuildHierachy(FBXNode fbxNode, SkeletonNode parentNode, Dictionary<SkeletonNode, FBXMesh> outputMeshDict) { var node = new SkeletonNode(); node.Name = fbxNode.GetName(); node.PoseMatrix = FbxsdkConvertMatrix(fbxNode.GetLocalTransform()); node.Parent = parentNode; if (parentNode == null) skeleton = node; else parentNode.Children.Add(node); var mesh = fbxNode.GetMesh() ; if(mesh != null) { outputMeshDict[node] = mesh; } if (skeletonNodeDict.ContainsKey(node.Name)) { Debug.Log("Found duplicated skeleton node name: " + node.Name); } else { skeletonNodeDict.Add(node.Name, node); } for (int i = 0; i < fbxNode.GetChildCount(); ++i) { FbxsdkBuildHierachy(fbxNode.GetChild(i), node, outputMeshDict); } }