[Bf-extensions-cvs] [3abd8c2] master: Fix various issues regarding animation, still does not work... *sigh*
Bastien Montagne
noreply at git.blender.org
Fri Mar 28 17:43:38 CET 2014
Commit: 3abd8c2ba8e882b9886f1d42f2fe22e0594ff7f7
Author: Bastien Montagne
Date: Fri Mar 28 17:22:16 2014 +0100
https://developer.blender.org/rBA3abd8c2ba8e882b9886f1d42f2fe22e0594ff7f7
Fix various issues regarding animation, still does not work... *sigh*
===================================================================
M io_scene_fbx/export_fbx_bin.py
===================================================================
diff --git a/io_scene_fbx/export_fbx_bin.py b/io_scene_fbx/export_fbx_bin.py
index b957c74..cdaed18 100644
--- a/io_scene_fbx/export_fbx_bin.py
+++ b/io_scene_fbx/export_fbx_bin.py
@@ -1697,8 +1697,8 @@ def fbx_data_animation_elements(root, scene_data):
acn_props = elem_properties(acurvenode)
- for fbx_item, (acurve_key, default_value, keys) in acurves.items():
- elem_props_template_set(acn_tmpl, acn_props, "p_number", fbx_item.encode(), default_value)
+ for fbx_item, (acurve_key, def_value, keys) in acurves.items():
+ elem_props_template_set(acn_tmpl, acn_props, "p_number", fbx_item.encode(), def_value, animatable=True)
# Only create Animation curve if needed!
if keys:
@@ -1707,6 +1707,7 @@ def fbx_data_animation_elements(root, scene_data):
acurve.add_string(b"")
# key attributes...
+ nbr_keys = len(keys)
# flags...
keyattr_flags = (1 << 3 | # interpolation mode, 1 = constant, 2 = linear, 3 = cubic.
1 << 8 | # tangent mode, 8 = auto, 9 = TCB, 10 = user, 11 = generic break,
@@ -1718,13 +1719,13 @@ def fbx_data_animation_elements(root, scene_data):
keyattr_datafloat = (0.0, 0.0, 9.419963346924634e-30, 0.0)
# And now, the *real* data!
- elem_data_single_float64(acurve, b"Default", default_value)
+ elem_data_single_float64(acurve, b"Default", def_value)
elem_data_single_int32(acurve, b"KeyVer", FBX_ANIM_KEY_VERSION)
elem_data_single_int64_array(acurve, b"KeyTime", keys_to_ktimes(keys))
elem_data_single_float32_array(acurve, b"KeyValueFloat", (v for _f, v in keys))
elem_data_single_int32_array(acurve, b"KeyAttrFlags", keyattr_flags)
elem_data_single_float32_array(acurve, b"KeyAttrDataFloat", keyattr_datafloat)
- elem_data_single_int32_array(acurve, b"KeyAttrRefCount", (len(keys),))
+ elem_data_single_int32_array(acurve, b"KeyAttrRefCount", (nbr_keys,))
##### Top-level FBX data container. #####
@@ -1870,12 +1871,14 @@ def fbx_animations_simplify(scene_data, animdata):
key_write[idx] = True
p_key_write[idx] = True
p_keyed[idx] = (currframe, val)
- elif (abs(val - p_keyedval) > min_diffs[idx]) or (currframe - p_keyedframe >= max_frame_diff):
+ elif (abs(val - p_keyedval) >= min_diffs[idx]) or (currframe - p_keyedframe >= max_frame_diff):
# Else, if enough difference from previous keyed value (or max gap between keys is reached),
# key this value only!
key_write[idx] = True
p_keyed[idx] = (currframe, val)
p_currframe, p_key, p_key_write = currframe, key, key_write
+ # Always key last sampled values (we ignore curves with a single valid key anyway).
+ p_key_write[:] = [True] * len(p_key_write)
def fbx_animations_objects(scene_data):
@@ -2210,7 +2213,7 @@ def fbx_data_from_scene(scene, settings):
acurvenode_id = get_fbxuid_from_key(acurvenode_key)
connections.append((b"OO", acurvenode_id, alayer_id, None))
# Animcurvenode -> object property.
- connections.append((b"OP", alayer_id, obj_id, fbx_prop.encode()))
+ connections.append((b"OP", acurvenode_id, obj_id, fbx_prop.encode()))
for fbx_item, (acurve_key, dafault_value, acurve) in acurves.items():
if acurve:
# Animcurve -> Animcurvenode.
@@ -2318,10 +2321,18 @@ def fbx_header_elements(root, scene_data, time=None):
elem_props_set(props, "p_number", b"UnitScaleFactor", 1.0)
elem_props_set(props, "p_color_rgb", b"AmbientColor", (0.0, 0.0, 0.0))
elem_props_set(props, "p_string", b"DefaultCamera", "Producer Perspective")
- # XXX Those time stuff is taken from a file, have no (complete) idea what it means!
- elem_props_set(props, "p_enum", b"TimeMode", 11)
+
+ # Global timing data.
+ r = scene_data.scene.render
+ fps = r.fps / r.fps_base
+ f_start = scene_data.scene.frame_start
+ f_end = scene_data.scene.frame_end
+ elem_props_set(props, "p_enum", b"TimeMode", 14) # FPS, 14 = custom...
+ #elem_props_set(props, "p_timestamp", b"TimeSpanStart", int(units_convert(f_start / fps, "second", "ktime")))
+ #elem_props_set(props, "p_timestamp", b"TimeSpanStop", int(units_convert(f_end / fps, "second", "ktime")))
elem_props_set(props, "p_timestamp", b"TimeSpanStart", 0)
- elem_props_set(props, "p_timestamp", b"TimeSpanStop", 46186158000) # XXX One second!
+ elem_props_set(props, "p_timestamp", b"TimeSpanStop", FBX_KTIME)
+ elem_props_set(props, "p_number", b"CustomFrameRate", fps)
##### End of GlobalSettings element.
More information about the Bf-extensions-cvs
mailing list