[Bf-extensions-cvs] [cf871d6] master: FBX exporter: add option to choose which type of FBX node to use as armature.

Bastien Montagne noreply at git.blender.org
Fri Feb 12 09:30:47 CET 2016


Commit: cf871d6a3027bad3b39b66abf71a5d08f7650db5
Author: Bastien Montagne
Date:   Fri Feb 12 09:26:00 2016 +0100
Branches: master
https://developer.blender.org/rBAcf871d6a3027bad3b39b66abf71a5d08f7650db5

FBX exporter: add option to choose which type of FBX node to use as armature.

By default, Blender uses a 'Null' one (rouglhly equivalent to our Empty),
but now user can also choose a 'Root' or even plain "LimbNode".

This seems to be necessary to hack around some Unity bug (see T47325).

WARNING: the 'LimbNode' option *does not* import back correctly in Blender.
Use it in pure export-only cases.

===================================================================

M	io_scene_fbx/__init__.py
M	io_scene_fbx/export_fbx_bin.py
M	io_scene_fbx/fbx_utils.py

===================================================================

diff --git a/io_scene_fbx/__init__.py b/io_scene_fbx/__init__.py
index 9ccc5b7..65fe695 100644
--- a/io_scene_fbx/__init__.py
+++ b/io_scene_fbx/__init__.py
@@ -21,7 +21,7 @@
 bl_info = {
     "name": "FBX format",
     "author": "Campbell Barton, Bastien Montagne, Jens Restemeier",
-    "version": (3, 7, 0),
+    "version": (3, 7, 1),
     "blender": (2, 76, 0),
     "location": "File > Import-Export",
     "description": "FBX IO meshes, UV's, vertex colors, materials, textures, cameras, lamps and actions",
@@ -375,6 +375,17 @@ class ExportFBX(bpy.types.Operator, ExportHelper, IOFBXOrientationHelper):
             description="Only write deforming bones (and non-deforming ones when they have deforming children)",
             default=False,
             )
+    armature_nodetype = EnumProperty(
+            name="Armature FBXNode Type",
+            items=(('NULL', "Null", "'Null' FBX node, similar to Blender's Empty (default)"),
+                   ('ROOT', "Root", "'Root' FBX node, supposed to be the root of chains of bones..."),
+                   ('LIMBNODE', "LimbNode", "'LimbNode' FBX node, a regular joint between two bones..."),
+                  ),
+            description="FBX type of node (object) used to represent Blender's armatures "
+                        "(use Null one unless you experience issues with other app, other choices may no import back "
+                        "perfectly in Blender...)",
+            default='NULL',
+            )
     # Anim - 7.4
     bake_anim = BoolProperty(
             name="Baked Animation",
@@ -517,6 +528,7 @@ class ExportFBX(bpy.types.Operator, ExportHelper, IOFBXOrientationHelper):
                 layout.prop(self, "add_leaf_bones")
                 layout.prop(self, "primary_bone_axis")
                 layout.prop(self, "secondary_bone_axis")
+                layout.prop(self, "armature_nodetype")
             elif self.ui_tab == 'ANIMATION':
                 layout.prop(self, "bake_anim")
                 col = layout.column()
diff --git a/io_scene_fbx/export_fbx_bin.py b/io_scene_fbx/export_fbx_bin.py
index d3aeee7..fc34ea3 100644
--- a/io_scene_fbx/export_fbx_bin.py
+++ b/io_scene_fbx/export_fbx_bin.py
@@ -1557,8 +1557,12 @@ def fbx_data_object_elements(root, ob_obj, scene_data):
     if ob_obj.is_bone:
         obj_type = b"LimbNode"
     elif (ob_obj.type == 'ARMATURE'):
-        #~ obj_type = b"Root"
-        obj_type = b"Null"
+        if scene_data.settings.armature_nodetype == 'ROOT':
+            obj_type = b"Root"
+        elif scene_data.settings.armature_nodetype == 'LIMBNODE':
+            obj_type = b"LimbNode"
+        else:  # Default, preferred option...
+            obj_type = b"Null"
     elif (ob_obj.type in BLENDER_OBJECT_TYPES_MESHLIKE):
         obj_type = b"Mesh"
     elif (ob_obj.type == 'LAMP'):
@@ -2867,6 +2871,7 @@ def save_single(operator, scene, filepath="",
                 embed_textures=False,
                 use_custom_props=False,
                 bake_space_transform=False,
+                armature_nodetype='NULL',
                 **kwargs
                 ):
 
@@ -2919,7 +2924,8 @@ def save_single(operator, scene, filepath="",
         bake_space_transform, global_matrix_inv, global_matrix_inv_transposed,
         context_objects, object_types, use_mesh_modifiers,
         mesh_smooth_type, use_mesh_edges, use_tspace,
-        use_armature_deform_only, add_leaf_bones, bone_correction_matrix, bone_correction_matrix_inv,
+        armature_nodetype, use_armature_deform_only,
+        add_leaf_bones, bone_correction_matrix, bone_correction_matrix_inv,
         bake_anim, bake_anim_use_all_bones, bake_anim_use_nla_strips, bake_anim_use_all_actions,
         bake_anim_step, bake_anim_simplify_factor, bake_anim_force_startend_keying,
         False, media_settings, use_custom_props,
diff --git a/io_scene_fbx/fbx_utils.py b/io_scene_fbx/fbx_utils.py
index f050179..ee91a1d 100644
--- a/io_scene_fbx/fbx_utils.py
+++ b/io_scene_fbx/fbx_utils.py
@@ -1192,7 +1192,8 @@ FBXExportSettings = namedtuple("FBXExportSettings", (
     "bake_space_transform", "global_matrix_inv", "global_matrix_inv_transposed",
     "context_objects", "object_types", "use_mesh_modifiers",
     "mesh_smooth_type", "use_mesh_edges", "use_tspace",
-    "use_armature_deform_only", "add_leaf_bones", "bone_correction_matrix", "bone_correction_matrix_inv",
+    "armature_nodetype", "use_armature_deform_only", "add_leaf_bones",
+    "bone_correction_matrix", "bone_correction_matrix_inv",
     "bake_anim", "bake_anim_use_all_bones", "bake_anim_use_nla_strips", "bake_anim_use_all_actions",
     "bake_anim_step", "bake_anim_simplify_factor", "bake_anim_force_startend_keying",
     "use_metadata", "media_settings", "use_custom_props",



More information about the Bf-extensions-cvs mailing list