[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [39266] branches/soc-2011-pepper/release/ scripts: Continued changes to storing of retargeted animation data, making it possible to easily switch between all retargeted clips, and stitch them with the future operator
Benjy Cook
benjycook at hotmail.com
Wed Aug 10 20:40:14 CEST 2011
Revision: 39266
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=39266
Author: benjycook
Date: 2011-08-10 18:40:14 +0000 (Wed, 10 Aug 2011)
Log Message:
-----------
Continued changes to storing of retargeted animation data, making it possible to easily switch between all retargeted clips, and stitch them with the future operator
Modified Paths:
--------------
branches/soc-2011-pepper/release/scripts/modules/mocap_constraints.py
branches/soc-2011-pepper/release/scripts/modules/retarget.py
branches/soc-2011-pepper/release/scripts/startup/ui_mocap.py
Modified: branches/soc-2011-pepper/release/scripts/modules/mocap_constraints.py
===================================================================
--- branches/soc-2011-pepper/release/scripts/modules/mocap_constraints.py 2011-08-10 18:21:26 UTC (rev 39265)
+++ branches/soc-2011-pepper/release/scripts/modules/mocap_constraints.py 2011-08-10 18:40:14 UTC (rev 39266)
@@ -186,6 +186,8 @@
bone = bones[m_constraint.constrained_bone]
cons_obj = getConsObj(bone)
real_constraint = cons_obj.constraints[m_constraint.real_constraint]
+ NLATracks = obj.data.mocapNLATracks[obj.data.active_mocap]
+ obj.animation_data.action = bpy.data.actions[NLATracks.auto_fix_track]
#frame changing section
setConstraintFraming(m_constraint, context)
@@ -364,8 +366,9 @@
simpleBake += [end_bone]
for bone in selectedBones:
bone.bone.select = True
- tracks = [track for track in obj.data.mocapNLATracks if track.active][0]
- constraintTrack = obj.animation_data.nla_tracks[tracks.auto_fix_track]
+ NLATracks = obj.data.mocapNLATracks[obj.data.active_mocap]
+ obj.animation_data.action = bpy.data.actions[NLATracks.auto_fix_track]
+ constraintTrack = obj.animation_data.nla_tracks[NLATracks.auto_fix_track]
constraintStrip = constraintTrack.strips[0]
constraintStrip.action_frame_start = s_frame
constraintStrip.action_frame_end = e_frame
@@ -404,8 +407,9 @@
obj = context.active_object
bones = obj.pose.bones
scene = bpy.context.scene
- tracks = obj.data.mocapNLATracks[obj.animation_data.action]
- constraintTrack = obj.animation_data.nla_tracks[tracks.auto_fix_track]
+ NLATracks = obj.data.mocapNLATracks[obj.data.active_mocap]
+ obj.animation_data.action = bpy.data.actions[NLATracks.auto_fix_track]
+ constraintTrack = obj.animation_data.nla_tracks[NLATracks.auto_fix_track]
constraintStrip = constraintTrack.strips[0]
action = constraintStrip.action
# delete the fcurves on the strip
Modified: branches/soc-2011-pepper/release/scripts/modules/retarget.py
===================================================================
--- branches/soc-2011-pepper/release/scripts/modules/retarget.py 2011-08-10 18:21:26 UTC (rev 39265)
+++ branches/soc-2011-pepper/release/scripts/modules/retarget.py 2011-08-10 18:40:14 UTC (rev 39266)
@@ -52,7 +52,6 @@
feetBones = [bone.name for bone in perf_arm.bones if bone.foot]
return feetBones, root
-
def loadMapping(perf_arm, end_arm):
for end_bone in end_arm.bones:
@@ -273,8 +272,8 @@
linearAvg.append(hipV.length / endV.length)
action_name = performer_obj.animation_data.action.name
- #if you have a parent, and that parent is a previously created stride bone
- if enduser_obj.parent:
+ #is there a stride_bone?
+ if "stride_bone" in bpy.data.objects:
stride_action = bpy.data.actions.new("Stride Bone " + action_name)
stride_bone = enduser_obj.parent
stride_bone.animation_data.action = stride_action
@@ -386,17 +385,17 @@
#create the specified NLA setup for base animation, constraints and tweak layer.
-def NLASystemInitialize(enduser_obj, s_frame, name):
+def NLASystemInitialize(enduser_arm, context):#enduser_obj, name):
+ enduser_obj = context.active_object
+ NLATracks = enduser_arm.mocapNLATracks[enduser_obj.data.active_mocap]
+ name = NLATracks.name
anim_data = enduser_obj.animation_data
- if not name in enduser_obj.data.mocapNLATracks:
- NLATracks = enduser_obj.data.mocapNLATracks.add()
- NLATracks.name = name
+ s_frame = 0
+ print(name)
+ if ("Base " + name) in bpy.data.actions:
+ mocapAction = bpy.data.actions[("Base " + name)]
else:
- NLATracks = enduser_obj.data.mocapNLATracks[name]
- for track in enduser_obj.data.mocapNLATracks:
- track.active = False
- mocapAction = anim_data.action
- mocapAction.name = "Base " + name
+ print("That retargeted anim has no base action")
anim_data.use_nla = True
for track in anim_data.nla_tracks:
anim_data.nla_tracks.remove(track)
@@ -407,28 +406,46 @@
constraintTrack = anim_data.nla_tracks.new()
constraintTrack.name = "Auto fixes " + name
NLATracks.auto_fix_track = constraintTrack.name
- constraintAction = bpy.data.actions.new("Auto fixes " + name)
+ if ("Auto fixes " + name) in bpy.data.actions:
+ constraintAction = bpy.data.actions[("Auto fixes " + name)]
+ else:
+ constraintAction = bpy.data.actions.new("Auto fixes " + name)
constraintStrip = constraintTrack.strips.new("Auto fixes " + name, s_frame, constraintAction)
constraintStrip.extrapolation = "NOTHING"
userTrack = anim_data.nla_tracks.new()
userTrack.name = "Manual fixes " + name
NLATracks.manual_fix_track = userTrack.name
- if enduser_obj.parent.animation_data:
- NLATracks.stride_action = enduser_obj.parent.animation_data.action.name
- userAction = bpy.data.actions.new("Manual fixes " + name)
+ if ("Manual fixes " + name) in bpy.data.actions:
+ userAction = bpy.data.actions[("Manual fixes " + name)]
+ else:
+ userAction = bpy.data.actions.new("Manual fixes " + name)
userStrip = userTrack.strips.new("Manual fixes " + name, s_frame, userAction)
userStrip.extrapolation = "HOLD"
#userStrip.blend_type = "MULITPLY" - doesn't work due to work, will be activated soon
anim_data.nla_tracks.active = constraintTrack
- NLATracks.active = True
#anim_data.action = constraintAction
anim_data.action_extrapolation = "NOTHING"
+ #set the stride_bone's action
+ if "stride_bone" in bpy.data.objects:
+ stride_bone = bpy.data.objects["stride_bone"]
+ if NLATracks.stride_action:
+ stride_bone.animation_data.action = bpy.data.actions[NLATracks.stride_action]
+ else:
+ NLATracks.stride_action = stride_bone.animation_data.action.name
+ anim_data.action = None
#Main function that runs the retargeting sequence.
def totalRetarget(performer_obj, enduser_obj, scene, s_frame, e_frame):
perf_arm = performer_obj.data
end_arm = enduser_obj.data
+
+ try:
+ enduser_obj.animation_data.action = bpy.data.actions.new("temp")
+ except:
+ print("no need to create new action")
+
+
print("creating Dictionary")
feetBones, root = createDictionary(perf_arm, end_arm)
print("cleaning stuff up")
@@ -437,7 +454,11 @@
print("Creating intermediate armature (for first pass)")
inter_obj = createIntermediate(performer_obj, enduser_obj, root, s_frame, e_frame, scene)
print("First pass: retargeting from intermediate to end user")
+
+
retargetEnduser(inter_obj, enduser_obj, root, s_frame, e_frame, scene)
+ name = performer_obj.animation_data.action.name
+ enduser_obj.animation_data.action.name = "Base " + name
print("Second pass: retargeting root translation and clean up")
stride_bone = copyTranslation(performer_obj, enduser_obj, feetBones, root, s_frame, e_frame, scene, enduser_obj_mat)
IKRetarget(performer_obj, enduser_obj, s_frame, e_frame, scene)
@@ -445,7 +466,14 @@
bpy.ops.object.mode_set(mode='OBJECT')
bpy.ops.object.select_name(name=inter_obj.name, extend=False)
bpy.ops.object.delete()
- NLASystemInitialize(enduser_obj, s_frame, performer_obj.animation_data.action.name)
+ bpy.ops.object.select_name(name=enduser_obj.name, extend=False)
+
+ if not name in [tracks.name for tracks in end_arm.mocapNLATracks]:
+ NLATracks = end_arm.mocapNLATracks.add()
+ NLATracks.name = name
+ else:
+ NLATracks = end_arm.mocapNLATracks[name]
+ end_arm.active_mocap = name
print("retargeting done!")
if __name__ == "__main__":
Modified: branches/soc-2011-pepper/release/scripts/startup/ui_mocap.py
===================================================================
--- branches/soc-2011-pepper/release/scripts/startup/ui_mocap.py 2011-08-10 18:21:26 UTC (rev 39265)
+++ branches/soc-2011-pepper/release/scripts/startup/ui_mocap.py 2011-08-10 18:40:14 UTC (rev 39266)
@@ -127,7 +127,6 @@
class MocapNLATracks(bpy.types.PropertyGroup):
name = bpy.props.StringProperty()
- active = bpy.props.BoolProperty()
base_track = bpy.props.StringProperty()
auto_fix_track = bpy.props.StringProperty()
manual_fix_track = bpy.props.StringProperty()
@@ -136,7 +135,7 @@
bpy.utils.register_class(MocapNLATracks)
bpy.types.Armature.stitch_settings = bpy.props.PointerProperty(type=AnimationStitchSettings)
-
+bpy.types.Armature.active_mocap = bpy.props.StringProperty(update=retarget.NLASystemInitialize)
bpy.types.Armature.mocapNLATracks = bpy.props.CollectionProperty(type=MocapNLATracks)
#Update function for IK functionality. Is called when IK prop checkboxes are toggled.
@@ -349,6 +348,8 @@
activeIsArmature = isinstance(context.active_object.data, bpy.types.Armature)
if activeIsArmature:
enduser_arm = context.active_object.data
+ layout.label("Retargeted Animations:")
+ layout.prop_search(enduser_arm, "active_mocap",enduser_arm, "mocapNLATracks")
settings = enduser_arm.stitch_settings
layout.prop_search(settings, "first_action", enduser_arm, "mocapNLATracks")
layout.prop_search(settings, "second_action", enduser_arm, "mocapNLATracks")
More information about the Bf-blender-cvs
mailing list