Rigging - Hand/Fingers controls

Ello everyone. I'm new to maxscript so for me it's really time consuming thing. Mayby some of u could help. Hole world would take advantage of it ;)

All controls of fingers looks pretty the same. So AttributHolder and lots of spinners and sliders for every finger.. and every bone in it. Lots of sliders makes that its time-consuming to operate poses of fingers. Some of u would say ;) thers a Poul's Nale PEN holder for saving poses. Yup ther is, but i like clear things and as animator I like to operate fingers every time. So there goes the IDEA.

Instead of building sliders and spinners for every bone I would like to make listBox with fingers written down (thomb, pinky, middle etc.). Bellow listbox there would be tree sliders and spinners: BEND, CURL, SPREAD. IT wolud work like: Select fingers, from LisBox and animate them using only those 3 sliders. Really simple thing. It would work like in CAT rigg system.

What I can't do to finish my idea. I'm having problems with initiating (I don't know what is called in proffesional coding name) some strings which would representing hierarchy of finger bones and combaining them to sliders or spinners, doesn't matter. Another problem is in Max and Minimum rotations for bones to disable any errors. So the sliders (bend, curl, spread) should have independent changing value to exactly rotations of fingers bones which whould have rotation limits ;)

Sorry for all mistakes Im not good in these language pices. If its not clear for u what I had written I could make some screen shoots and draw every thing if someone is intreasted in helping me ofcorse.

What I could offer in change of helping. I would make ofcorse script avaible for everyone and I could make video tutorial of rigging hand with all features (IK/FK switch, streatch, and much more) - the beast heand ever ;)

Comments

Comment viewing options

Select your preferred way to display the comments and click "Save settings" to activate your changes.
super_oko's picture

Ello agani. It was simpler

Ello agani. It was simpler than I thougt.

hand=attributes Hand_5_fingers
(
parameters hand_5 rollout:fingers
(
bend type:#float ui:(bendSL)
curl type:#float ui:(curlSL)
spred type:#float ui:(spredSL)

--instances for PEN attribute holder
thumb_1y type:#float
thumb_1z type:#float
thumb_2z type:#float
index_1y type:#float
index_1z type:#float
index_2y type:#float
index_3y type:#float
middle_1y type:#float
middle_1z type:#float
middle_2y type:#float
middle_3y type:#float
groow_1y type:#float
groow_1z type:#float
groow_2y type:#float
groow_3y type:#float
pinky_1y type:#float
pinky_1z type:#float
pinky_2y type:#float
pinky_3y type:#float
)

rollout fingers "fingers" width:162 height:300
(
MultiListBox fingersMLT "Chose fingers:" pos:[3,26] width:67 height:7 items:#("thumb","index","middle","groowing","pinky")
slider bendSL " Bend" range:[-7,7,0] ticks:0 width:87 pos:[80,5]
slider curlSL " Curl" range:[-7,7,0] ticks:0 width:87 pos:[80,55]
slider spredSL " Spread" range:[-2,2,0] ticks:0 width:87 pos:[80,105]

on bendSL changed val do

(
if fingersMLT.selection[1] == true then
(
thumb1 = $name_thumb1 --change name of your finger thumb first bone
in coordsys local rotate thumb1 (eulerAngles 0 bendSL.value 0)
) else()
if fingersMLT.selection[2] == true then
(
index1 = $name_index1 --change name of your finger index first bone
in coordsys local rotate index1 (eulerAngles 0 bendSL.value 0)
) else()
if fingersMLT.selection[3] == true then
(
middle1 = $name_middle1 --change name of your finger middle first bone
in coordsys local rotate middle1 (eulerAngles 0 bendSL.value 0)
) else()
if fingersMLT.selection[4] == true then
(
growi1 = $name_growi1 --change name of your finger groowing first bone
in coordsys local rotate growi1 (eulerAngles 0 bendSL.value 0)
) else()
if fingersMLT.selection[5] == true then
(
pinky1 = $name_pinky1 --change name of your finger pinky first bone
in coordsys local rotate pinky1 (eulerAngles 0 bendSL.value 0)
) else()
)
on bendSL buttonup do
(
bendSL.value=0
)

on curlSL changed val do
(
if fingersMLT.selection[1] == true then
(
thumb2 = $name_thumb2 --change name of your finger thumb second bone
in coordsys local rotate thumb2 (eulerAngles 0 0 curlSL.value)
) else()
if fingersMLT.selection[2] == true then
(
index2 = $name_index2 --change name of your finger index second bone
index3 = $name_index3 --change name of your finger index third bone
in coordsys local rotate index2 (eulerAngles 0 curlSL.value 0)
in coordsys local rotate index3 (eulerAngles 0 curlSL.value 0)
) else()
if fingersMLT.selection[3] == true then
(
middle2 = $name_middle2 --change name of your finger middle second bone
middle3 = $name_middle3 --change name of your finger middle third bone
in coordsys local rotate middle2 (eulerAngles 0 curlSL.value 0)
in coordsys local rotate middle3 (eulerAngles 0 curlSL.value 0)
) else()
if fingersMLT.selection[4] == true then
(
growi2 = $name_growi2 --change name of your finger groowing second bone
growi3 = $name_growi3 --change name of your finger groowing third bone
in coordsys local rotate growi2 (eulerAngles 0 curlSL.value 0)
in coordsys local rotate growi3 (eulerAngles 0 curlSL.value 0)
) else()
if fingersMLT.selection[5] == true then
(
pinky2 = $name_pinky2 --change name of your finger pinky second bone
pinky3 = $name_pinky3 --change name of your finger pinky third bone
in coordsys local rotate pinky2 (eulerAngles 0 curlSL.value 0)
in coordsys local rotate pinky3 (eulerAngles 0 curlSL.value 0)
) else()
)
on curlSL buttonup do
(
curlSL.value=0
)

on spredSL changed val do
(
if fingersMLT.selection[1] == true then
(
thumb1 = $name_thumb1 --change name of your finger thumb first bone
in coordsys local rotate thumb1 (eulerAngles 0 0 spredSL.value)
) else()
if fingersMLT.selection[2] == true then
(
index1 = $name_index1 --change name of your finger index first bone
in coordsys local rotate index1 (eulerAngles 0 0 spredSL.value)
) else()
if fingersMLT.selection[3] == true then
(
middle1 = $name_middle1 --change name of your finger middle first bone
spreda1 = (spredSL.value)/3
in coordsys local rotate middle1 (eulerAngles 0 0 spreda1)
) else()
if fingersMLT.selection[4] == true then
(
growi1 = $name_growi1 --change name of your finger groowing first bone
spredb1 = -(spredSL.value)/3
in coordsys local rotate growi1 (eulerAngles 0 0 spredb1)
) else()
if fingersMLT.selection[5] == true then
(
pinky1 = $name_pinky1 --change name of your finger pinky first bone
spredc1 = -(spredSL.value)
in coordsys local rotate pinky1 (eulerAngles 0 0 spredc1)
) else()
)
on spredSL buttonup do
(
spredSL.value=0
)
))
custattributes.add $.modifiers[1] hand

-- Scene is made in Max v9, required PEN Attribute holder

AttachmentSize
hand_5_fingers_multilistbox.max 308 KB

Comment viewing options

Select your preferred way to display the comments and click "Save settings" to activate your changes.