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