[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [37858] branches/soc-2011-pepper/release/ scripts/modules/retarget.py: Some bugfixing and tweaking for retargeting.
Benjy Cook
benjycook at hotmail.com
Mon Jun 27 14:48:30 CEST 2011
Revision: 37858
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=37858
Author: benjycook
Date: 2011-06-27 12:48:30 +0000 (Mon, 27 Jun 2011)
Log Message:
-----------
Some bugfixing and tweaking for retargeting. Script works now regardless of world transform on performer and end user rigs. This breaks stride bone functionality, will be addressed in next commit
Modified Paths:
--------------
branches/soc-2011-pepper/release/scripts/modules/retarget.py
Modified: branches/soc-2011-pepper/release/scripts/modules/retarget.py
===================================================================
--- branches/soc-2011-pepper/release/scripts/modules/retarget.py 2011-06-27 12:46:53 UTC (rev 37857)
+++ branches/soc-2011-pepper/release/scripts/modules/retarget.py 2011-06-27 12:48:30 UTC (rev 37858)
@@ -75,7 +75,8 @@
bpy.ops.object.add()
empty = bpy.context.active_object
empty.name = perf_bone.name + "Org"
- empty.empty_draw_size = 0.01
+ empty.empty_draw_size = 0.1
+ #empty.parent = enduser_obj
empty = bpy.data.objects[perf_bone.name + "Org"]
offset = perf_bone.vector
if inter_bone.length == 0 or perf_bone.length == 0:
@@ -262,18 +263,19 @@
#end bone's delta
if endV.length != 0:
linearAvg.append(hipV.length / endV.length)
+
+ bpy.ops.object.add()
+ stride_bone = bpy.context.active_object
+ stride_bone.name = "stride_bone"
+
if linearAvg:
avg = sum(linearAvg) / len(linearAvg)
- print("retargeted root motion should be " + str(1 / avg) + " of original")
-
- bpy.ops.object.add()
- stride_bone = bpy.context.active_object
- stride_bone.name = "stride_bone"
for t in range(s_frame, e_frame):
scene.frame_set(t)
newTranslation = (tailLoc(perf_bones[perfRoot]) / avg)
stride_bone.location = newTranslation
stride_bone.keyframe_insert("location")
+ return stride_bone
def IKRetarget(bonemap, bonemapr, performer_obj, enduser_obj, s_frame, e_frame, scene):
@@ -324,7 +326,23 @@
ik_constraint = [constraint for constraint in pose_bone.constraints if constraint.type == "IK"][0]
ik_constraint.mute = True
+def cleanAndStoreObjMat(performer_obj,enduser_obj):
+ perf_obj_mat = performer_obj.matrix_world.copy()
+ enduser_obj_mat = enduser_obj.matrix_world.copy()
+ zero_mat = Matrix()#Matrix(((0,0,0,0),(0,0,0,0),(0,0,0,0),(0,0,0,0)))
+ performer_obj.matrix_world = zero_mat
+ enduser_obj.matrix_world = zero_mat
+ return perf_obj_mat, enduser_obj_mat
+def restoreObjMat(performer_obj,enduser_obj,perf_obj_mat,enduser_obj_mat):
+ perf_bones = performer_obj.pose.bones
+ for perf_bone in perf_bones:
+ if perf_bone.name + "Org" in bpy.data.objects:
+ empty = bpy.data.objects[perf_bone.name + "Org"]
+ empty.parent = enduser_obj
+ performer_obj.matrix_world = perf_obj_mat
+ enduser_obj.matrix_world = enduser_obj_mat
+
def totalRetarget():
print("retargeting...")
enduser_obj = bpy.context.active_object
@@ -339,14 +357,16 @@
s_frame = scene.frame_start
e_frame = scene.frame_end
bonemap, bonemapr, root = createDictionary(perf_arm)
+ perf_obj_mat, enduser_obj_mat = cleanAndStoreObjMat(performer_obj,enduser_obj)
turnOffIK(enduser_obj)
inter_obj, inter_arm = createIntermediate(performer_obj, enduser_obj, bonemap, bonemapr, root, s_frame, e_frame, scene)
retargetEnduser(inter_obj, enduser_obj, root, s_frame, e_frame, scene)
- copyTranslation(performer_obj, enduser_obj, ["RightFoot", "LeftFoot"], bonemap, bonemapr, root, s_frame, e_frame, scene)
+ stride_bone = copyTranslation(performer_obj, enduser_obj, ["RightFoot", "LeftFoot"], bonemap, bonemapr, root, s_frame, e_frame, scene)
IKRetarget(bonemap, bonemapr, performer_obj, enduser_obj, s_frame, e_frame, scene)
+ restoreObjMat(performer_obj,enduser_obj,perf_obj_mat,enduser_obj_mat)
bpy.ops.object.mode_set(mode='OBJECT')
bpy.ops.object.select_name(name=inter_obj.name, extend=False)
bpy.ops.object.delete()
if __name__ == "__main__":
- totalRetarget()
+ totalRetarget()
\ No newline at end of file
More information about the Bf-blender-cvs
mailing list