[Closed] Twisting Forearms
Hi,
I’m still new to 3D Studio Max, and need some help figuring out a simple script. Basically, I’ve already gone through almost every tutorial I can find, and I’ve looked into the recommended method for twisting forearms with sliders (i.e 75%, 50%, 25%, etc.) But I still can’t find what I’m looking for.
There’s a method I like to use that I learned in Maya, where I can twist the wrist helper, and the rotational value will be divided up amongst the three forearms for a nice, clean, convenient rotation. I really enjoy using this method, and would like to know how to get the same effect in Max. Does anyone know a simple expression (aside from X_Rotation/3) to make this work, and if so, where would the best place in the program be to put it (i.e. wire parameters/controller/etc.?)
Thanks
Okay, I think I almost found a solution. What I did was align the orientation of both the helper AND it’s pivot point to the first forearm arm. Then, I attached the helper’s X_rotation to each bone using this simple wire parameter expression:
CTRL_L_FOREARM
degtoRads(X_rotation)
<–>
BONE_L_FOREARM_01
(X_Rotation/3)
CONNECT
By doing this to all three bones, each one will twist a complete third of the forearm helper’s rotation.
So now my only problem lies in that darn “Zeroing out” issue which is keeping my other expressions from working properly. I’ve tried parenting the main helper to point helpers that were parented to the zeroed node, but all it does is pass on the off-set value from the zero node. How can I fully zero out the rotation and transform values (keeping in mind that “Freeze Transform,” “Freeze Rotation,” “Transform to Zero,” and “Transform to Rotate” don’t work at all.)
You can do twist bones with Max8 CS, but if you need twist bones and have not possible to use CS you can do it with expressions. Here’s little expression what I have made for this.
dependsOn $L_Arm02
o_ang = $L_Arm02.rotation
o_ang = (o_ang as eulerAngles)
Rx = degtorad (o_ang.x)
Rx /= 2
This is script controller for Twistbone->Rotation->X channel.
You can do this easily with lookat constraints or you can use the Extract transform helper and wire to it.
I found some bugs in my style to make twistbones. Now I do it like this.
First. Here is part of my arm rig.
Next I make couple dummys to control twist.
Now I set ForeArm_Dummy position and rotation same as FormArm bone and UpperArm_Dummy position and rotation same as UpperArm bone. Little script helps here.
selection[1].rotation = selection[2].rotation
selection[1].pos = selection[2].pos
So script transform first selected object same position and rotation as next selected object.
Now parent ForeArm_Dummy to ForeArm and UpperArm_Dummy to UpperArm. I tell later why those dummys are so nice thing
Next thing is write code what control twistbones.
This code is needed in twistbones controller.x_rotation so add there float script controller. And type something like this.
obj1 = $UpperArm_Dummy
obj2 = $ForeArm_Dummy
dependsOn obj1 obj2
in coordsys obj1
(
r1 = inverse obj1.rotation
r2 = inverse obj2.rotation
r1 = r1 as EulerAngles
r2 = r2 as EulerAngles
)
r = ((r1.x + r2.x)/2)
r = degtorad (r)
Now evaluate script and twist shoud work! You may notice than some twist bones may rotate wrong. This is becouse your pivots not pointting same directions. That is why you need those dummys. So if your twist rotation is wrong take dummy and rotate it when twist rotation is correct.
Sorry for my bad english but maybe someone get something out of it :).
These are all the hard ways to deal with it. All you need is to use the Extract Transform helper and extract to rotation of the wrist from the forearm. Then you can wire to the ExTm’s local X rotation parameter.
Maya returns joint rotation values for joints and objects that are being controlled by IK solvers or orientation constraints, Max doesn’t. The ExTm helper is designed just for this purpose and is fast and easy to set up.
You can also use Look At constraints as well without using any expressions at all.
I’ve seen your arm rig with the twisting forearm, but when I try to reproduce it I don’t get the same results.
Do you have a brake down of the steps to do this?
Hi all,
PENs idea is truly simplicity itslef, and a very powerful tool which I will certainly look into as soon as possible, just if anyone gets a little confused, at least as of max8, this helper is called Expose Transform, or ExposeTm instead of extract. PEN, Im a huge fan of your rigging work.
Rafa Polit Jr.
Quito, Ecuador.
PENs style to do this is better than any script what you can find. I learned that becouse I did give couple days to scope what this Expose Transform can do. Really amazing tool with Reaction Manger. Also it seems guite powerfull too I haven’t seen any performance lack not yet anyway.
I really warmly recommend to getting know Expose Transform and forget everything what I said in my earlier post in this thread :).
Thanks guys. I should know the name to the tool becasue I wrote the spec for it and pushed to have it created for Max7:S
I use the ExTm (as it is known in short form) all the time and in many different areas of rigs and it speeds up the rigs as it solves the angles far faster then scripts can because it is a compiled tool.