|
@@ -1617,6 +1617,17 @@ void FBXExporter::WriteObjects ()
|
|
|
// at the same time we can build a list of all the skeleton nodes,
|
|
|
// which will be used later to mark them as type "limbNode".
|
|
|
std::unordered_set<const aiNode*> limbnodes;
|
|
|
+
|
|
|
+ //actual bone nodes in fbx, without parenting-up
|
|
|
+ std::set<std::string> setAllBoneNamesInScene;
|
|
|
+ for(int m = 0; m < mScene->mNumMeshes; ++ m)
|
|
|
+ {
|
|
|
+ aiMesh* pMesh = mScene->mMeshes[m];
|
|
|
+ for(int b = 0; b < pMesh->mNumBones; ++ b)
|
|
|
+ setAllBoneNamesInScene.insert(pMesh->mBones[b]->mName.data);
|
|
|
+ }
|
|
|
+ aiMatrix4x4 mxTransIdentity;
|
|
|
+
|
|
|
// and a map of nodes by bone name, as finding them is annoying.
|
|
|
std::map<std::string,aiNode*> node_by_bone;
|
|
|
for (size_t mi = 0; mi < mScene->mNumMeshes; ++mi) {
|
|
@@ -1660,6 +1671,11 @@ void FBXExporter::WriteObjects ()
|
|
|
if (node_name.find(MAGIC_NODE_TAG) != std::string::npos) {
|
|
|
continue;
|
|
|
}
|
|
|
+ //not a bone in scene && no effect in transform
|
|
|
+ if(setAllBoneNamesInScene.find(node_name)==setAllBoneNamesInScene.end()
|
|
|
+ && parent->mTransformation == mxTransIdentity) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
// otherwise check if this is the root of the skeleton
|
|
|
bool end = false;
|
|
|
// is the mesh part of this node?
|