[Bf-extensions-cvs] SVN commit: /data/svn/bf-extensions [4342] trunk/py/scripts/addons/rigify/ rigs/biped/limb_common.py: Rigify: bug fix for biped arm/leg rigs.
Nathan Vegdahl
cessen at cessen.com
Tue Mar 5 00:05:13 CET 2013
Revision: 4342
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-extensions&revision=4342
Author: cessen
Date: 2013-03-04 23:05:13 +0000 (Mon, 04 Mar 2013)
Log Message:
-----------
Rigify: bug fix for biped arm/leg rigs.
The bbone elbow was causing weird twisting and sharp bend angles
even when smooth elbow/knee was fully disabled. Now fixed.
This fix, however, exposes bug #34532 in Blender, so for the time
being the transition between smooth/sharp elbow is a jumpy one.
This is less objectionable, however, then the weird twisting
that was happening, as bug #34532 can be worked around by the
animator, whereas the weird twisting could not be worked around.
Modified Paths:
--------------
trunk/py/scripts/addons/rigify/rigs/biped/limb_common.py
Modified: trunk/py/scripts/addons/rigify/rigs/biped/limb_common.py
===================================================================
--- trunk/py/scripts/addons/rigify/rigs/biped/limb_common.py 2013-03-04 18:18:46 UTC (rev 4341)
+++ trunk/py/scripts/addons/rigify/rigs/biped/limb_common.py 2013-03-04 23:05:13 UTC (rev 4342)
@@ -813,6 +813,10 @@
flimb2 = copy_bone(self.obj, self.org_bones[1], make_deformer_name(strip_org(insert_before_lr(self.org_bones[1], ".02"))))
elimb = copy_bone(self.obj, self.org_bones[2], make_deformer_name(strip_org(self.org_bones[2])))
+ ulimb2_smoother = copy_bone(self.obj, self.org_bones[1], make_mechanism_name(strip_org(insert_before_lr(self.org_bones[0], "_smth.02"))))
+ flimb1_smoother = copy_bone(self.obj, self.org_bones[0], make_mechanism_name(strip_org(insert_before_lr(self.org_bones[1], "_smth.01"))))
+ flimb1_pos = copy_bone(self.obj, self.org_bones[1], make_mechanism_name(strip_org(insert_before_lr(self.org_bones[1], ".01"))))
+
junc = copy_bone(self.obj, self.org_bones[1], make_mechanism_name(strip_org(insert_before_lr(self.org_bones[1], ".junc"))))
uhose = new_bone(self.obj, strip_org(insert_before_lr(self.org_bones[0], "_hose")))
@@ -837,6 +841,10 @@
flimb2_e = eb[flimb2]
elimb_e = eb[elimb]
+ ulimb2_smoother_e = eb[ulimb2_smoother]
+ flimb1_smoother_e = eb[flimb1_smoother]
+ flimb1_pos_e = eb[flimb1_pos]
+
junc_e = eb[junc]
uhose_e = eb[uhose]
@@ -855,9 +863,18 @@
ulimb2_e.use_connect = False
ulimb2_e.parent = eb[self.org_bones[0]]
+ ulimb2_smoother_e.use_connect = True
+ ulimb2_smoother_e.parent = ulimb2_e
+
flimb1_e.use_connect = True
- flimb1_e.parent = ulimb2_e
+ flimb1_e.parent = flimb1_smoother_e
+ flimb1_smoother_e.use_connect = False
+ flimb1_smoother_e.parent = flimb1_pos_e
+
+ flimb1_pos_e.use_connect = False
+ flimb1_pos_e.parent = eb[self.org_bones[1]]
+
flimb2_e.use_connect = False
flimb2_e.parent = eb[self.org_bones[1]]
@@ -892,6 +909,12 @@
flimb2_e.head = Vector(flimb1_e.tail)
align_bone_roll(self.obj, flimb2, elimb)
+ ulimb2_smoother_e.tail = Vector(flimb1_e.tail)
+ ulimb2_smoother_e.roll = flimb1_e.roll
+
+ flimb1_smoother_e.head = Vector(ulimb1_e.tail)
+ flimb1_pos_e.length *= 0.5
+
junc_e.length *= 0.2
uhose_par_e.length *= 0.25
@@ -949,6 +972,10 @@
flimb2_p = pb[flimb2]
elimb_p = pb[elimb]
+ ulimb2_smoother_p = pb[ulimb2_smoother]
+ flimb1_smoother_p = pb[flimb1_smoother]
+ flimb1_pos_p = pb[flimb1_pos]
+
junc_p = pb[junc]
uhose_p = pb[uhose]
@@ -977,35 +1004,24 @@
ulimb2_p.bone.bbone_in = 0.0
ulimb2_p.bone.bbone_out = 1.0
+ ulimb2_smoother_p.bone.bbone_segments = 16
+ ulimb2_smoother_p.bone.bbone_in = 1.0
+ ulimb2_smoother_p.bone.bbone_out = 0.0
+
flimb1_p.bone.bbone_segments = 16
flimb1_p.bone.bbone_in = 1.0
flimb1_p.bone.bbone_out = 0.0
+ flimb1_smoother_p.bone.bbone_segments = 16
+ flimb1_smoother_p.bone.bbone_in = 0.0
+ flimb1_smoother_p.bone.bbone_out = 1.0
+
# Custom properties
prop = rna_idprop_ui_prop_get(jhose_p, "smooth_bend", create=True)
jhose_p["smooth_bend"] = 0.0
prop["soft_min"] = prop["min"] = 0.0
prop["soft_max"] = prop["max"] = 1.0
- # Drivers
- fcurve = ulimb2_p.bone.driver_add("bbone_out")
- driver = fcurve.driver
- var = driver.variables.new()
- driver.type = 'AVERAGE'
- var.name = "var"
- var.targets[0].id_type = 'OBJECT'
- var.targets[0].id = self.obj
- var.targets[0].data_path = jhose_p.path_from_id() + '["smooth_bend"]'
-
- fcurve = flimb1_p.bone.driver_add("bbone_in")
- driver = fcurve.driver
- var = driver.variables.new()
- driver.type = 'AVERAGE'
- var.name = "var"
- var.targets[0].id_type = 'OBJECT'
- var.targets[0].id = self.obj
- var.targets[0].data_path = jhose_p.path_from_id() + '["smooth_bend"]'
-
# Constraints
con = ulimb1_p.constraints.new('COPY_SCALE')
con.name = "anchor"
@@ -1035,24 +1051,56 @@
con.subtarget = jhose
con.volume = 'NO_VOLUME'
- con = flimb1_p.constraints.new('COPY_TRANSFORMS')
- con.name = "anchor"
+ con = ulimb2_smoother_p.constraints.new('COPY_TRANSFORMS')
+ con.name = "smoother"
con.target = self.obj
- con.subtarget = self.org_bones[1]
- con = flimb1_p.constraints.new('COPY_LOCATION')
+ con.subtarget = flimb1_pos
+ fcurve = con.driver_add("influence")
+ driver = fcurve.driver
+ var = driver.variables.new()
+ driver.type = 'SUM'
+ var.name = "var"
+ var.targets[0].id_type = 'OBJECT'
+ var.targets[0].id = self.obj
+ var.targets[0].data_path = jhose_p.path_from_id() + '["smooth_bend"]'
+
+ con = flimb1_pos_p.constraints.new('COPY_LOCATION')
con.name = "anchor"
con.target = self.obj
con.subtarget = jhose
- con = flimb1_p.constraints.new('DAMPED_TRACK')
+ con = flimb1_pos_p.constraints.new('DAMPED_TRACK')
con.name = "track"
con.target = self.obj
con.subtarget = fhose
- con = flimb1_p.constraints.new('STRETCH_TO')
+ con = flimb1_pos_p.constraints.new('STRETCH_TO')
con.name = "track"
con.target = self.obj
con.subtarget = fhose
con.volume = 'NO_VOLUME'
+ con = flimb1_p.constraints.new('COPY_TRANSFORMS')
+ con.name = "position"
+ con.target = self.obj
+ con.subtarget = flimb1_pos
+
+ con = flimb1_smoother_p.constraints.new('COPY_TRANSFORMS')
+ con.name = "smoother"
+ con.target = self.obj
+ con.subtarget = ulimb2
+ fcurve = con.driver_add("influence")
+ driver = fcurve.driver
+ var = driver.variables.new()
+ driver.type = 'SUM'
+ var.name = "var"
+ var.targets[0].id_type = 'OBJECT'
+ var.targets[0].id = self.obj
+ var.targets[0].data_path = jhose_p.path_from_id() + '["smooth_bend"]'
+ con = flimb1_smoother_p.constraints.new('STRETCH_TO')
+ con.name = "track"
+ con.target = self.obj
+ con.subtarget = jhose
+ con.volume = 'NO_VOLUME'
+
con = flimb2_p.constraints.new('COPY_LOCATION')
con.name = "anchor"
con.target = self.obj
More information about the Bf-extensions-cvs
mailing list