Well, I don't know if this constitutes progress, but this is
where I'm at right now. I've been studying the fbx format this
past weekend. I downloaded a Milkshape tutorial which had a
form with bones, bone assignments, etc. but before keyframing
(which doesn't seem to be a .mesh attribute). It did have assignment
of vertices to bones but no vertex weighting because Milkshape
doesn't have this right now. I exported this model to 8 file formats
but the only ones that supported bone information seem to be the
native Milkshape ASCII and fbx. fbx is owned by Autodesk now,
(used to be Alias) and doesn't seem to have any format specification.
However, there is a free download from Autodesk of an SDK, in C++,
not one of my languages, which I downloaded and installed. No information
there about its actual format. In the Autodesk forums I found a
main() for converting the fbx binaries to fbx ASCII. Here's the main()
for those interested
Anyway here's the bones entries from the Milkshape 3D ASCII formatCode:int main(int argc, char** argv) { KFbxSdkManager* lSdkManager = NULL; MyMemoryAllocator lMyMemoryAllocator; KFbxScene* lScene = NULL; bool lResult; // Specify a custom memory allocator to be used by the FBX SDK KFbxSdkManager::SetMemoryAllocator(&lMyMemoryAllocator); // Prepare the FBX SDK. InitializeSdkObjects(lSdkManager, lScene); // Create the scene. lResult = CreateScene(lSdkManager, lScene); if(lResult == false) { printf("\n\nAn error occured while creating the scene...\n"); DestroySdkObjects(lSdkManager); return 0; } // Save the scene. // The example can take an output file name as an argument. if(argc > 1) { lResult = SaveScene(lSdkManager, lScene, argv[1]); } // A default output file name is given otherwise. else { lResult = SaveScene(lSdkManager, lScene, SAMPLE_FILENAME); } if(lResult == false) { printf("\n\nAn error occured while saving the scene...\n"); DestroySdkObjects(lSdkManager); return 0; } // Destroy all objects created by the FBX SDK. DestroySdkObjects(lSdkManager); return 0; }
And here's the bones from the fbx ASCII file converted by theCode:Bones: 10 "Main Bone" "" 8 0.133333 -68.428429 0.000000 1.570796 -0.000000 -3.141593 0 0 "Pelvis" "Main Bone" 8 0.000000 0.000000 61.999996 0.000000 0.000000 0.000000 0 0 "Hip left" "Pelvis" 8 -6.333340 -2.250002 -0.583334 -3.061560 0.070235 -3.141593 0 0 "Knee left" "Hip left" 8 0.000000 0.000000 25.016495 -0.079812 0.035746 0.000000 0 0 "Calcaneum left" "Knee left" 8 0.000000 0.000000 32.519444 -1.232623 0.610880 0.000000 0 0 "Toes left" "Calcaneum left" 8 0.000000 0.000000 11.230869 0.000000 0.000000 0.000000 0 0 "Hip right" "Pelvis" 8 6.654752 -2.249992 -0.464289 3.061907 0.059931 0.000000 0 0 "Knee right" "Hip right" 8 0.000000 0.000000 25.124689 0.079672 0.018985 0.000000 0 0 "Calcaneum right" "Knee right" 8 0.000000 0.000000 32.527370 1.237598 0.569478 0.000000 0 0 "Toes right" "Calcaneum right" 13 0.000000 0.000000 11.213799 0.000000 0.000000 0.000000 0 0 GroupComments: 0 MaterialComments: 0 BoneComments: 0 ModelComment: 0
above C++ program (Note: I'm not a C++ programmer, the main
shown above is taken from the Autodesk forums. I just built
it with the Autodesk SDK.)
This looks promising doesn't it? The information is all there.Code:; Object connections ;------------------------------------------------------------------ Connections: { Connect: "OO", "Model::Main Bone", "Model::Scene" Connect: "OO", "Model::DefaultMaterial", "Model::Scene" Connect: "OO", "Model::jacke_seite_rechts", "Model::Scene" Connect: "OO", "Model::Regroup01", "Model::Scene" Connect: "OO", "Model::Duplicate04", "Model::Scene" Connect: "OO", "Model::Pelvis", "Model::Main Bone" Connect: "OO", "Model::Hip left", "Model::Pelvis" Connect: "OO", "Model::Hip right", "Model::Pelvis" Connect: "OO", "Model::Knee left", "Model::Hip left" Connect: "OO", "Model::Calcaneum left", "Model::Knee left" Connect: "OO", "Model::Toes left", "Model::Calcaneum left" Connect: "OO", "Model::Knee right", "Model::Hip right" Connect: "OO", "Model::Calcaneum right", "Model::Knee right" Connect: "OO", "Model::Toes right", "Model::Calcaneum right" Connect: "OO", "Material::DefaultMaterial", "Model::DefaultMaterial" Connect: "OO", "Deformer::Skin DefaultMaterial_0", "Model::DefaultMaterial" Connect: "OO", "SubDeformer::Cluster Pelvis_0", "Deformer::Skin DefaultMaterial_0" Connect: "OO", "SubDeformer::Cluster Hip left_1", "Deformer::Skin DefaultMaterial_0" Connect: "OO", "SubDeformer::Cluster Knee left_2", "Deformer::Skin DefaultMaterial_0" Connect: "OO", "SubDeformer::Cluster Calcaneum left_3", "Deformer::Skin DefaultMaterial_0" Connect: "OO", "SubDeformer::Cluster Toes left_4", "Deformer::Skin DefaultMaterial_0" Connect: "OO", "Model::Pelvis", "SubDeformer::Cluster Pelvis_0" Connect: "OO", "Model::Hip left", "SubDeformer::Cluster Hip left_1" Connect: "OO", "Model::Knee left", "SubDeformer::Cluster Knee left_2" Connect: "OO", "Model::Calcaneum left", "SubDeformer::Cluster Calcaneum left_3" Connect: "OO", "Model::Toes left", "SubDeformer::Cluster Toes left_4" Connect: "OO", "Material::Material01", "Model::jacke_seite_rechts" Connect: "OO", "Texture::.\Test2.jpg", "Model::jacke_seite_rechts" Connect: "OO", "Video::.\Test2.jpg", "Texture::.\Test2.jpg" Connect: "OO", "Material::Material01", "Model::Regroup01" Connect: "OO", "Texture::.\Test2.jpg", "Model::Regroup01" Connect: "OO", "Deformer::Skin Regroup01_1", "Model::Regroup01" Connect: "OO", "SubDeformer::Cluster Pelvis 1_5", "Deformer::Skin Regroup01_1" Connect: "OO", "Model::Pelvis", "SubDeformer::Cluster Pelvis 1_5" Connect: "OO", "Video::.\Test2.jpg", "Texture::.\Test2.jpg" Connect: "OO", "Material::Default", "Model::Duplicate04" Connect: "OO", "Deformer::Skin Duplicate04_2", "Model::Duplicate04" Connect: "OO", "SubDeformer::Cluster Pelvis 2_6", "Deformer::Skin Duplicate04_2" Connect: "OO", "SubDeformer::Cluster Hip left 1_7", "Deformer::Skin Duplicate04_2" Connect: "OO", "SubDeformer::Cluster Hip right_8", "Deformer::Skin Duplicate04_2" Connect: "OO", "SubDeformer::Cluster Knee right_9", "Deformer::Skin Duplicate04_2" Connect: "OO", "SubDeformer::Cluster Calcaneum right_10", "Deformer::Skin Duplicate04_2" Connect: "OO", "SubDeformer::Cluster Toes right_11", "Deformer::Skin Duplicate04_2" Connect: "OO", "Model::Pelvis", "SubDeformer::Cluster Pelvis 2_6" Connect: "OO", "Model::Hip left", "SubDeformer::Cluster Hip left 1_7" Connect: "OO", "Model::Hip right", "SubDeformer::Cluster Hip right_8" Connect: "OO", "Model::Knee right", "SubDeformer::Cluster Knee right_9" Connect: "OO", "Model::Calcaneum right", "SubDeformer::Cluster Calcaneum right_10" Connect: "OO", "Model::Toes right", "SubDeformer::Cluster Toes right_11" } ;Takes and animation section ;----------------------------------------------------
Could Tsar Stefan Dusan IV or another 3dsmax professional answer
this question? Can 3dsmax import fbx in its ASCII form or must it
be binary. Secondly, can it export both or again, must it be binary?
It's late where I am so I have to go to bed. The vertex and face data
is there along with vertex weighting. I don't understand bone assignments
so I can't judge that. I'll look at it more tomorrow night. Sorry this is
so slow but all this stuff is really new to me.![]()
Bookmarks