From b21415fca89f71a1a4db69c3fd1a156d644347e7 Mon Sep 17 00:00:00 2001 From: Bastien Montagne <montagne29@wanadoo.fr> Date: Tue, 22 Jul 2014 08:50:14 +0200 Subject: [PATCH] FBX import: Minor optimization. --- io_scene_fbx/import_fbx.py | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/io_scene_fbx/import_fbx.py b/io_scene_fbx/import_fbx.py index 18f31a04f..c12739ba0 100644 --- a/io_scene_fbx/import_fbx.py +++ b/io_scene_fbx/import_fbx.py @@ -690,6 +690,14 @@ def blen_read_animations_action_item(action, item, cnodes, global_matrix, force_ transform_data = object_tdata_cache[item] rot_prev = item.rotation_euler.copy() + # Pre-compute inverted local rest matrix of the bone, if relevant. + if isinstance(item, PoseBone): + # First, get local (i.e. parentspace) rest pose matrix + restmat = item.bone.matrix_local + if item.parent: + restmat = item.parent.bone.matrix_local.inverted() * restmat + restmat_inv = restmat.inverted() + # We assume for now blen init point is frame 1.0, while FBX ktime init point is 0. for frame, values in blen_read_animations_curves_iter(fbx_curves, 1.0, 0, fps): for v, (fbxprop, channel, _fbx_acdata) in values: @@ -705,12 +713,8 @@ def blen_read_animations_action_item(action, item, cnodes, global_matrix, force_ if (not item.parent or force_global) and global_matrix is not None: mat = global_matrix * mat else: # PoseBone, Urg! - # First, get local (i.e. parentspace) rest pose matrix - restmat = item.bone.matrix_local - if item.parent: - restmat = item.parent.bone.matrix_local.inverted() * restmat # And now, remove that rest pose matrix from current mat (also in parent space). - mat = restmat.inverted() * mat + mat = restmat_inv * mat # Now we have a virtual matrix of transform from AnimCurves, we can insert keyframes! loc, rot, sca = mat.decompose() -- GitLab