I see plenty of twist bone tutorials for arms.
I am exploring adding twist bones t the thighs of our characters to smooth out the pelvis-to-leg deformation.
but I have not been able to find a tutorial about thigh twist bones.
I ask because I’m trying wrap my head around what drives the twist in this case
there is no delta between the upper and lower leg because it follows the IK pole vector…
if anyone has a link or screen shot of thigh twist rig I’d much appreciate it.
The twist datas you need for leg twist is the roll delta between Hips and UpperLeg and between Leg and Foot.
On 3dsmax I use a helper parent to Hips controller, align and with an orientation constraint on Upperleg.
You can use an exposeTm Helper to get the correct roll value and wire that to your twistbones.
You can do it exactly the way that MoKev explained but I’ve found it quicker to use a LookAt constraint.
[ol]
[li]Create a helper, align it to the upper leg and parent it to the pelvis
[/li][li]Create your twist bones
[/li][li]Link all the twist bones to the upper leg
[/li][li]Create a LookAt constraint from the first twist bone to the last twist bone and use the newly created helper as the Upnode
[/li][li]Orientation constrain the other twist bones to the first and last twist bone so that the twist is distributed evenly
[/li][/ol]
I’ve uploaded a scene file where I’ve done exactly what I just described.
Also, while I was creating the example file I also wrote a script to create the twist bones, it’s simple but effective
(
rollout boneChainCreator "Bone Chain Creator"
(
spinner bonesSp "Number Of Bones:" type:#integer width:100 offset:[56,0] range:[1,10,1]
button creatorBtn "Create Bone Chain" width: 134
on creatorBtn pressed do
(
if selection.count != 2 then
messageBox "Please select only two objects" title:"Error" beep:false
else
(
local startPoint = $[1].pos, endPoint = $[2].pos, val = bonesSp.value, zAxis = $[1].transform[3],
startEnd, endStart
for i in 1 to val do
(
startEnd = startPoint * ((val - (i - 1)) as float) / val + endPoint * ((i - 1) as float) / val
endStart = startPoint * ((val - i) as float) / val + endPoint * (i as float) / val
boneSys.createBone startEnd endStart zAxis
)
)
)
)
createDialog boneChainCreator width:175
)
Yea in Maya you can get this type of ‘reverse’ twist setup by using aim constraints and some up node trickery. In max there’s a few ways to get the same result (expose TM or LookAt’s are probably good enough).
I’m sure everyone’s already seen this, but in case not…
Honestly in the end the problem is exactly the same for arms or legs , and the way you solve it is the same , you need a way to extract the twist from 3d rotations (of course that doesnt mean reading the rx). Once you have that your problem is sovled doesnst matter if the drivers of the twist joints are shoulder-elbow , elbow-twist , hip - knee , neck-head etc.