Blender FBX Visibility export
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
diff --git a/io_scene_fbx/export_fbx_bin.py b/io_scene_fbx/export_fbx_bin.py | |
index c5cd93a7..f15b3a8a 100644 | |
--- a/io_scene_fbx/export_fbx_bin.py | |
+++ b/io_scene_fbx/export_fbx_bin.py | |
@@ -1688,7 +1688,8 @@ def fbx_data_object_elements(root, ob_obj, scene_data): | |
animatable=True, animated=((ob_obj.key, "Lcl Rotation") in scene_data.animated)) | |
elem_props_template_set(tmpl, props, "p_lcl_scaling", b"Lcl Scaling", scale, | |
animatable=True, animated=((ob_obj.key, "Lcl Scaling") in scene_data.animated)) | |
- elem_props_template_set(tmpl, props, "p_visibility", b"Visibility", float(not ob_obj.hide)) | |
+ elem_props_template_set(tmpl, props, "p_visibility", b"Visibility", float(not ob_obj.hide), | |
+ animatable=True, animated=((ob_obj.key, "Visibility") in scene_data.animated)) | |
# Absolutely no idea what this is, but seems mandatory for validity of the file, and defaults to | |
# invalid -1 value... | |
@@ -1976,7 +1977,8 @@ def fbx_animations_do(scene_data, ref_id, f_start, f_end, start_zero, objects=No | |
force_key = (simplify_fac == 0.0) or (ob_obj.is_bone and force_keying) | |
animdata_ob[ob_obj] = (ACNW(ob_obj.key, 'LCL_TRANSLATION', force_key, force_sek, loc), | |
ACNW(ob_obj.key, 'LCL_ROTATION', force_key, force_sek, rot_deg), | |
- ACNW(ob_obj.key, 'LCL_SCALING', force_key, force_sek, scale)) | |
+ ACNW(ob_obj.key, 'LCL_SCALING', force_key, force_sek, scale), | |
+ ACNW(ob_obj.key, 'VISIBILITY', force_key, force_sek, (float(not ob_obj.hide),))) | |
p_rots[ob_obj] = rot | |
force_key = (simplify_fac == 0.0) | |
@@ -2007,7 +2009,7 @@ def fbx_animations_do(scene_data, ref_id, f_start, f_end, start_zero, objects=No | |
for dp_obj in ob_obj.dupli_list_gen(depsgraph): | |
pass # Merely updating dupli matrix of ObjectWrapper... | |
- for ob_obj, (anim_loc, anim_rot, anim_scale) in animdata_ob.items(): | |
+ for ob_obj, (anim_loc, anim_rot, anim_scale, anim_vis) in animdata_ob.items(): | |
# We compute baked loc/rot/scale for all objects (rot being euler-compat with previous value!). | |
p_rot = p_rots.get(ob_obj, None) | |
loc, rot, scale, _m, _mr = ob_obj.fbx_object_tx(scene_data, rot_euler_compat=p_rot) | |
@@ -2015,6 +2017,7 @@ def fbx_animations_do(scene_data, ref_id, f_start, f_end, start_zero, objects=No | |
anim_loc.add_keyframe(real_currframe, loc) | |
anim_rot.add_keyframe(real_currframe, tuple(convert_rad_to_deg_iter(rot))) | |
anim_scale.add_keyframe(real_currframe, scale) | |
+ anim_vis.add_keyframe(real_currframe, (float(not ob_obj.hide),)) | |
for anim_shape, me, shape in animdata_shapes.values(): | |
anim_shape.add_keyframe(real_currframe, (shape.value * 100.0,)) | |
for anim_camera_lens, anim_camera_focus_distance, camera in animdata_cameras.values(): | |
diff --git a/io_scene_fbx/fbx_utils.py b/io_scene_fbx/fbx_utils.py | |
index e52cd9eb..0189d4c0 100644 | |
--- a/io_scene_fbx/fbx_utils.py | |
+++ b/io_scene_fbx/fbx_utils.py | |
@@ -722,6 +722,7 @@ class AnimationCurveNodeWrapper: | |
'LCL_TRANSLATION': ("Lcl Translation", "T", ("X", "Y", "Z")), | |
'LCL_ROTATION': ("Lcl Rotation", "R", ("X", "Y", "Z")), | |
'LCL_SCALING': ("Lcl Scaling", "S", ("X", "Y", "Z")), | |
+ 'VISIBILITY': ("Visibility", "Visibility", ("Visibility",)), | |
'SHAPE_KEY': ("DeformPercent", "DeformPercent", ("DeformPercent",)), | |
'CAMERA_FOCAL': ("FocalLength", "FocalLength", ("FocalLength",)), | |
'CAMERA_FOCUS_DISTANCE': ("FocusDistance", "FocusDistance", ("FocusDistance",)), | |
@@ -978,7 +979,7 @@ class ObjectWrapper(metaclass=MetaObjectWrapper): | |
# XXX Not sure how much that’s useful now... :/ | |
def get_hide(self): | |
- return self.bdata.hide_viewport if self._tag in {'OB', 'DP'} else self.bdata.hide | |
+ return (not self.bdata.visible_get()) if self._tag in {'OB', 'DP'} else self.bdata.hide | |
hide = property(get_hide) | |
def get_parent(self): | |
~/code/blender/blender/release/scripts/addons/io_scene_fbx % |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment