View Full Version : 3dsmax 5.0 advanced Character Rigging...I want to help out if I can...
tymmyt48
27-01-2007, 09:22 PM
Hi all, my name is Tim. I have been using 3dsmax 5.0 now for many years and until recently did not know anything about the process of rigging an advanced character.
I chose to try and follow the professional tutorial that comes with this version of Max, and it is quite good, but I've also added some changes to it too.
First of all, I am not into modeling monsters or aliens. I am only interested in the rigging of human figures.
I began starting a new tutorial of my own with the max 5.0 tutorial as its base. I have then found other tutorials on the internet and added to it. Firstly, I don't like a four finger'd character, I prefer the normal five. I've gone over the rigging of these fingers in my tutorial many, many time and it seems to work pretty well. I am still working out some bugs here and there.
So, I am coming on to this forum in hopes that I can help someone out...and with hopes that somecan help me out in figuring out more advanced ways of doing things better.
I will start off from the beginning of my tutorial with the legs.
Please email me (or post here) if you have any comments or questions. I will do the best I can to answer any and all. machnng4tym46@earthlink.net
In order to view the attached png file, you need to click on the 'full version' link above.
Thanks for listening.
Tim
tymmyt48
27-01-2007, 09:28 PM
As requested in the tutorial, we need to name these leg bones. I will do so according to my personal tutorial. This tutorial is going to be quite lengthy.
You will notice in my picts that I do not have a character at this time to insert the bones into. Right now, I am trying to help out with the bone rigging, you can build these bones into your own character if you like.
As I mentioned above, if you feel I've made a mistake, or you know of a better way, PLEASE let me know. That's what I want...I want to improve this as much as I can...I also want to help others out there if I can.
Left leg:
'Bone_L_Leg_Upper'
'Bone_L_Leg_Lower'
'Bone_L_Foot'
'Bone_L_Toe'
'Bone_L_Toe_Tip'
Right Leg:
'Bone_R_Leg_Upper'
'Bone_R_Leg_Lower'
'Bone_R_Foot'
'Bone_R_Toe'
'Bone_R_Toe_Tip'
As you notice in the last pict, I've already added the fins to the right and left foot (side and front settings) at 7.0 each.
I've also added the fins to the right and left Bone Toes (side, front, and back settings) at 7.0, 3.0, and 3.0 each.
That was easy for the feet. We will rig them later, but first...let's build the spine.
Tim
tymmyt48
27-01-2007, 09:30 PM
In the original tutorial, you are to make a series of bones in the 'left' viewport that follows the curving of the back. The monster they use has a very curvy back. I did this only to find out that my back bone (series of bones) were not facing in the right direction. I had found someplace that the 'Front' fins are to be in the front. That makes perfect sense. But when I did this the first time, the front fins did NOT face the front.
So, I click on 'Bones', in the 'System' menu on the right of the screen.
Under the 'IK Chain Assignment' menu, I choose, 'SplineIKSolver'. I also turn on 'Assign to children'.
In the 'Bone Parameters' rollout, I change the 'Height' and 'Width' to '5.0'. we want to make these bones a little thinner than usual so they won't be so big and thick.
Instead of curving my spine (bones) I am going to place them straight up. We can edit them a little later if we so desire.
I created six bones starting at the hip area...and then right-click twice to exit the mode. The 'SplineIK' dialog appears.
Change the name to 'IK_Spline_Goal'. Make sure you spell 'Spline...' with an 'l'. I made a mistake once and spelled it as 'Spine'.
Set the number of 'Spline Knots' to '5'. Set it to the 'Besier' option. Make sure the 'Helper' option is checked.
When you are ready, click on 'OK'.
Will continue
tymmyt48
27-01-2007, 09:33 PM
Renaming the spine bones:
Bone01...'Bone_Spine_01'
Bone02...'Bone_Spine_02'
Bone03...'Bone_Spine_03'
Bone04...'Bone_Spine_04'
Bone05...'Bone_Spine_05'
Bone06...'Bone_Spine_06'
Bone07...'Bone_Spine_07'
Now, the spine helper objects:
Point01...'Helper_Spine_01'
Point02...'Helper_Spine_02'
Point03...'Helper_Spine_03'
Point04...'Helper_Spine_04'
Point05...'Helper_Spine_05'
As I did with the two legs, I changed the color of the spine bones. I used a blue gradient on the left leg, green on the right leg, and I decided on orange for the spine.
In the 'Fin Adjustment Tools' rollout, turn on 'Side', 'Front', and 'Back', and set their Size values to '7.0', '3.0', and '7.0', respectively. The 'front' fin should by all means be facing the front.
On 'bone07', the very last (top) bone, deselect the fins. I would like to add some curve to this spine, but I cannot seem to do it through, 'Bone Edit Mode'. Maybe I should have edited them before adding the fins...anybody's guess.
'IK_Spline_Goal'...
'SplineIKNode01'...
'Point01...05'
Now, we will continue with the building of the arms.
Tim
tymmyt48
27-01-2007, 09:36 PM
Creating the left arm Bones:
I recommend you to hide all other bones before you start this so that nothing will connect when you don't want it to connect.
Working in the top viewport, in the Create panel > Systems object type, click Bones to enter creation mode.
In the 'Bone Object group', set Width and Height to 5.0.
Turn off the Assign To Children check box.
Create three bones; clicking first at the center of the shoulder blades, second at the left shoulder, third at the left elbow, and fourth at the left wrist, right-clicking twice to cancel out of bone creation mode and create a bone tip.
Now, these arm bones may have been created in a different part of the screen. As mine were, I had to move them up into their correct position. You may have to do the same.
1.Use the 'Bone Edit Mode' to fit these individual bones into their proper places amongst the mesh object.
Rename these bones starting at the root bone:
'Bone_L_Arm_Clavicle'...
'Bone_L_Arm_Upper'...
'Bone_L_Arm_Lower'...
'Bone_L_Arm_Wrist'...
Before we continue, we need to position the last arm bone 'Bone_L_Arm_Lower' so that it is pretty straight on the 'x' axis from one end to the other. You can always move it later to correctly fit the mesh model. But for this next exercise, we need it straight.
Creating the Twist Wrist bones for realistic twisting of the palm bone...soon to come. This can be a little tricky if you have never done it before. I have tried this many times throughout my research and have come up with a little better way to keep these three bones aligned during the construction. In other words, instead of copying and moving these individual bones physically, I copy them and move them using the 'x' axis in the 'Select and Move' dialog box...it works so much better for me and it keeps them aligned very well.
We are in the top view again.
Change the 'Reference Coordiante System' to 'Local'.
Creat a single bone with its width and height of 5.0. Creat it directly on top and as close to the center of the 'Bone_L_Arm_Lower'... This new bone should be one-quarter of the size of it.
Delete the extra nub since we will not be needing it.
Click on the new bone...
Use the 'Align' to Position and Orientation XYZ (center)...
click on 'Bone_L_Arm_Lower'...
and the small bone will be positioned directly in the center of the large bone.
Name this new bone, 'Bone_L_Wrist_Twist_01'.
Now, instead of copying it and then phisically moving it, we will copy and paste WITHOUT moving it. Name the second new bone, 'Bone_L_Wrist_Twist_02'
Right-click on the 'Select and Move' button to bring up the XYZ axis dialog. Since we want to move it to the right on the 'x' axis, will use the spinner and move it that way, therefor this new bone will always be aligned properly.
Copy and paste once again. This new bone should already be labeled 'Bone_L_Wrist_Twist_03'. Click 'ok'.
And once again, move it the same way you did in the previous step. As far as I can tell, it is ok to have the third bone overlapping the long bone by a small amount.
This next step, I believe I have been doing it incorrectly. I went back to the 3dmax tutorials and read it again and again. I originally thought that I was to link the third bone, 'Bone_L_Twist_Wrist_03' to the second bone 'Bone_L_Twist_Wrsit_02' and then the second bone to the first bone. And then link the first bone 'Bone_L_Wrist_Twist_01' to the arm bone 'Bone_L_Arm_Lower' to complete the linkage.
Well, the tutorial says it this way...”Now, use Select And Link with each newly created bone to the lower arm bone (BONE_L_Arm_Lower).”
I now feel that each wrist twist bone is to be individually linked to the arm bone by itself. So we will do it that way and how how it comes out. If someone out there knows for sure...please let me know.
'Bone_L_Wrist_Twist_03'...link to...'Bone_L_Arm_Lower'
'Bone_L_Wrist_Twist_02'...link to...'Bone_L_Arm_Lower'
'Bone_L_Wrist_Twist_01'...link to...'Bone_L_Arm_Lower'
We will continue with a four finger'd hand...
Tim
tymmyt48
27-01-2007, 09:37 PM
Creating a Hand:
For this character rig, the hand bones will not be connected hierarchically to the arm bones. The reasoning for this is explained later.
Now, if you put your hand in front of you, you wil notice that the palm is about the same size in proportion as your fingers. So...
Make sure you are in the 'Local' mode in the 'Reference Coordinate System'. We are also working in the top viewport while creating these hand bones.
Bring up the 'Bones Tools' dialogue box.
Start with the bone for the palm of the hand...
You can delete the nub bone that Max automatically creates after you right-click to stop making new bones. Since the hand doesn't use IK then you don't need that extra bone.
Now using the same procedure as you did for the arm twist bones, make a copy of this bone and move it once again using it's 'x' axis. Move it to the end of the first bone you just created.
This new bone will be the beginning's of a set of the three-bone'd fingers.
Now refine that bone into three segments using the 'Refine' button in the 'Bone Tools window'.
Make the first click in the middle of the finger bone to create the first segment, and the next click about two-thirds of the way to the tip to create the last two segments.
If the bones are too thick for your liking, then adjust them smaller. If so, then change the sizes in the 'Modify' panel, in the 'Bone Parameters', I chose to change to '2.5' in the width and height spinners.
That made my bones easier to see and work with. I did not change anything on the palm bone.
Now, click on the hand bone (the first bone you made) and rename it, 'Bone_Palm_L'.
In the 'Bone Tools' dialog, go into the 'Fin Adjustment Tools' menu and activate the 'Front' and 'side' fins. Now, with these fins activated, and still in the 'top' viewport, you should see whether the 'front' fins are upwards towards you (the user)...and the side fins are actually aiming out to the side.
As in my case, the 'front' fins were aiming to the side. So I had to bring up the 'Rotate Transform Type-In' dialog and used the 'y' axis...90 degrees.
This should have rotated the 'Bone_Palm_L' 90 degrees so that the 'front' fin is point directly toward you (the user) and the 'side' fins are now aiming to the sides.
If you have it correctly, turn off the 'Front' fin. Adjust the 'side' fins to fit your character's hand accordingly.
I used the size of '10.0'.
Select all the segments of the finger bones and make one copy of them. Physically move them to make another set of fingers along the 'Bone_Palm_L' bone.
Naturally you will need to copy and paste three more sets and arrange them to make your full set of four fingers and thumb.
Now, since your new 'Thumb' bones are still straight like the rest, you need to click on the first root bone of the thumb. Click on 'Select and Rotate' to rotate it to a better angle. I chose about 25 degrees on my 'z' axis.
The nest step we need to do is to adjust each finger to the proper length according to our own physical hand. To do this, we need to go the the 'Bone Tools' menu, and click on the 'Bone Edit Mode' in oder to accomplish this task.
Since the middle fingers are the longest, we will use them to adjust the other fingers accordingly.
In my middle finger bones...I adjust the length slightly...
In my index finger bones...I kept it the same...
In my ring fingers bones...I adjust the length slightly shorter then the index fingers...
In my pinky finger bones...I adjusted them the shortest...
In my thumb bones...I adjusted them very short...a little shorter than the pinky bones...
Once I was happy with the length of each and every finger/thumb, make sure they are touching the palm bone.
Ok, we now need to rename the bones:
We have already named the first bone 'Bone_Palm_L'
The Index finger Bones:
The first bone closest to the palm...'Bone_Index_L_01', 'Bone_Index_L_02', and 'Bone_Index_L_03'
The Middle finger bones:
The first bone closest to the palm...'Bone_Middle_L_01', 'Bone_Middle_L_02', and 'Bone_Middle_L_03'
The Ring finger bones:
The first bone closest to the palm...'Bone_Ring_L_01', 'Bone_Ring_L_02', and 'Bone_Ring_L_03'
The Pinky finger bones:
The first bone closest to the palm...'Bone_Pinky_L_01', 'Bone_Pinky_L_02', and 'Bone_Pinky_L_03'
And. The Thumb bones:
The first bone closest to the palm...'Bone_Thumb_L_01', 'Bone_Thumb_L_02', and 'Bone_Thumb_L_03'
Ok, now we need to add the linkage to the necessary bones before we do anything else.
'Bone_Thumb_L_01'...link to ...'Bone_Palm_L'
'Bone_Index_L_01'...link to ...”
'Bone_Middle_L_01'...link to ...”
'Bone_Ring_L_01'...link to ...”
'Bone_Pinky_L_01'...link to ...”
Every bone in the hand should now be labeled. Activate the whole hand assembly and move it into your character's mesh and adjust anything that is necessary.
When you are finished, make sure that the 'Bone Edit Mode' is off.
If everything is connect right, you should be able to move the palm bone and all fingers will follow.
This is a simple, effective, and easy hand to work with. If you want to control each and every finger through a spinner, as making a fist, spreading fingers, thumbs up, peace sign, etc...then we can rig it with wires and custom attributes, and expressions, and such when it comes time to rig everything.
Tim
tymmyt48
27-01-2007, 09:41 PM
Copying the left arm assembly to the right side:
I already did this, though I have not rigged anything as of yet. I just wanted a more complete skeleton before I started the actual rigging. It is important that you take the time to rename the right hand bones. It is simple to do, everything is exactly the same except that the 'L' now turns to a 'R', and you will need to re-number some.
Now, as I had mentioned at the very beginning, I am interested only in rigging a human-like character. I have no interest in rigging an alien, monster, or four legged creature at this time. The 3dsmax 5.0 tutorials works through this monster.
I have not yet figured out the rigging process for a human character. Hopefully someone out there can give me some advice, or lead me to a link.
But, in this tutorial, I will continue with the leg rigging as well as the spine, arms, and hands...as I promised.
Let's begin here first with the two legs.
Ready?
We will be creating a professional rig for the skeletal structure...minus the head. I really wish I had the head included in this tutorial. But I do not as of yet.
Another word of advice to those who are interested in rigging their character through these instructions and illustrations. I have been accumulating many tutorials from the Internet which I've incorporated into this.
I started putting my original tutorial together about a year or so ago because I wanted to learn how to rig a character. But, I didn't want to rig a simple character, I wanted to do an advanced rig...even though I've never done it before.
I began this monotonous training for myself to learn from these tutorials. I would begin, and if something did not make sense, I would research it until I got it right.
Most of my attempts ended in failures because either I did something incorrectly, misread something...or, I was simply able to get around the rough spots by changing something to my liking that seemed to work better.
How am I so confident that this tutorial will work for you? Well, I can't be. I am confident that it will work for me...which it did, but there may be minute changes and differences when you do it on your computer. So, I cannot guarantee it will work for you. All I am saying is that this tutorial was put together for me...and that I was able to construct a fully rigged character by it.
Although I do not conclude that there are no typographical errors in here, I've made the tutorial as simple and clear as I could for others to read.
So, I remind you...I have been through this tutorial many times and have reworked them over and over again until I was able to finally establish a rig that satisfied me.
You need to read closely, and if something does not work correctly...back up a little and try again. Good luck to you all, I hope you like my tutorial.
If there is anyone out there that knows of a better way of doing something of what I've incorporated into these instructions, please feel free to email me at machnng4tym46@earthlink.net
Rigging the Legs and Feet:
For the legs and feet you’ll create a control curve to adjust each foot, with an Inverse Kinematics (IK) chain on them. This will allow you to simply move the foot instead of having to manually pose each leg bone. You’ll also add a custom control called a Custom Attribute onto the foot control that will allow you to do a basic foot roll and toe roll. You’ll start by creating the IK chains.
Create the IK chains:
In the Front viewport, make sure we have only the leg bones showing. All other bones and stuff should be hidden.
We are going to start by adding solvers to bones.
Select the 'Bone_L_Leg_Upper' only.
Choose Animation menu > IK Solvers > HI Solver.
You should now see a 'rubber-band' type effect...
Select 'Bone_L_Foot', just below the ankle. You have made your first IK Chain.
Name this IK Chain01, 'Ankle_L_IK_Goal'
(Do the exact same for the right leg: Rename the IK Chain to 'Ankle_R_IK_Goal'.)
If you want to quickly see how the IK works, select 'Ankle_L_IK_Goal' and move it around. The leg and foot will move. Do the same for the other foot just to make sure they are working correctly.
Make sure you undo any moves you make.
Now, for the second IK Chain we will make:
Back in the 'front' viewport:
Select 'Bone_L_Foot'.
Choose Animation menu > IK Solvers > HI Solver...
Select 'Bone_L_Toe' to complete another IK Goal...
Rename to 'Ball_L_IK_Goal '
(Do the exact same for the right leg: Rename the IK Chain to 'Ball_R_IK_Goal'.)
Move to the 'side' viewport:
Select 'Ankle_L_IK_Goal' and move it around. The foot moves but not the leg.
Creating a third IK Chain...select the Front viewport.
Select... 'Bone_L_Toe '.
Choose Animation menu > IK Solvers > HI Solver...
Select 'Bone_L_Toe_Tip '...
Name this 'IK Chain' ...'Toe_L_IK_Goal'.
(Do the exact same for the right leg: Rename the IK Chain to 'Toe_R_IK_Goal'.)
Select 'Toe_L_IK_Goal' and move it around. The Toe and Toe_tip move only.
These extra one–bone-length IK chains let you keep the feet planted solidly, but also let you produce other types of motion, such as heel lift and toe rotation.
Creating your Foot Controls on both feet:
In the 'top' view, create the foot control shape:
On the Create Panel, turn on Shapes as the object type, then click 'Rectangle'.
Drag to create an Rectangle (size of 90.L x 40.w) with a corner radius of 4.0 units.
Align the Rectangle to the left foot:
With the 'Rectangle' selected... go to the 'Hierarchy' menu, click on 'Pivot' and then click onto 'Effect Pivot Only'.
You will notice that the pivot point for the rectangle is directly in the center. In order for us to have the foot assembly somewhat centered into the rectangle is to change the pivot point of the rectangle.
We need to move this pivot point by clicking on the 'Select and Move' and then right-click on it.
This brings up another dialog, the 'Move Transform Type-In'
We need to move the pivot point by changing to '25' in the 'y' axis.
Close dialog and de-activate the 'Effect Pivot Only'.
Click on the rectangle and then Click 'Align' in the XYZ position and orientation of the IK goal 'Ball_L_IK_Goal' at the ball of the foot.
It is simply aligned...it is not attached to anything yet.
Now, copy and paste a second copy of this Rectangle to the right foot. The pivot point in this new rectangle should be exactly the same since it was a copy, so we don't have to change it again.
Just simply align the rectangle in the right foot.
In the Left viewport:
If the two Rectangles are not touching the bottom of both feet, have them both selected, click on the 'Select and Move'...Then right-click and in the dialog, adjust the 'Y' axis.
Now rename the shapes to 'Foot_L_Control', and 'Foot_R_Control' and give them 'white' wireframe color.
The results:
You can use this goal 'Ankle_L_IK_Goal' to make the heel go up, while the ball and toe stay planted on the floor.
If you move the second IK goal, 'Ball_L_IK_Goal', you see that the rest of the foot tries to stay planted.
Now, if you only select the third IK goal, 'Toe_L_IK_Goal', you’ll see that the toe will move up and down. If it is to rotate the last toe bone, I have not yet figured that out.
However, if you select the 'Ball_L_IK_Goal' and the third IK goal together, you see that the heel of the foot stays planted but the main foot can move or rotate.
For the goals to give the control you want, the real motion that needs to occur is that the goals need to move in an arc.
You’ll get this effect by creating some helper objects. By parenting the IK goals to the helpers, you can simply rotate the helpers to make the foot move. Then you’ll also parent the helpers together in such a way that you get all the moves and control you want. You’ll link all the helpers to the spline control you made so you can move the entire foot at once.
(Note that if you move all three IK goals, the entire foot moves).
The way to think about this is to think about where you want the foot to rotate. You’ll need a helper at the heel so the foot can roll back on the heel. You’ll need something at the ball so the heel can lift up and rotate around while keeping the ball planted. You’ll also need a second pivot at the ball so that you can rotate the toe at the toe start there. And you’ll also want a pivot at the toe tip so that the foot can lift off while the toe still sticks to the ground.
Creating The Helpers:
In the 'top' viewport.
On the 'Create panel', turn on 'Helpers'. Click on 'Point' then on the Parameters rollout turn on 'Box' and turn off 'Cross'.
This helps you distinguish the helpers from the IK goals, which already look like crosses.
Coordinate system is in 'View'
It is important to use the 'top' or 'User' viewports for this excerise.
Create the three point helper boxes along the left foot.
The first point helper is to be near the 'Ankle_L_IK_Goal', another near the 'Ball_L_IK_Goal'. The third near the 'Toe_L_IK_Goal'
Now create three more for the right leg. Do it in the same order as in the previous step.
You should have six helper boxes altogether around the legs...ready for the next posting...to be continued.
Tim
tymmyt48
28-01-2007, 12:26 AM
With the helpers that we made in the previous lesson, Align each helper to the XYZ position of its particular IK goal.
The first 'Point01' Helper should align to the 'Ankle_L_IK_Goal'...
'Point02' helper...
to the 'Ball_L_IK_GoaL'...
'Point03' helper...
to the 'Toe_L_IK_GoaL'...
Now, for the right foot:
'Point04' to the 'Ankle_R_IK_Goal',...
'Point05' to the...'Ball_R_IK_GoaL'...
and...'Point06' to the...'Toe_R_IK_Goal '... in this order.
Create another (a fourth) helper on each foot by selecting the middle helpers 'Point02', and 'Point05' (not at the same time), at the ball, and SHIFT-scaling it up a bit to create a copy.
Do this step as indicated here:
I find it a lot easier to use the 'Scale Transform Type_In' diolog. I can put in the actual value for both right and left feet.
Make a copy without scaling it. Label the left foot copy, 'Point07' and the right leg, 'Point08'.
IMPORTANT: Make sure you use Uniform scale and not a Non-uniform scale.
Select 'Point07' and right-click on the 'Select and Uniform Scale' button. Up comes the 'Scale Transform Type_in' dialog. In the 'Offset World' spinner, I use the value of 150. and hit Enter.
You will notice now that 'Point07' is larger than 'Point02'.
Repeat this exact step for 'Point08' in the right leg.
Select the two helpers at the left and right ankles, 'Point01', and 'Point04' and move them down to the level of the other helpers. You will be able to see it better in the side view.
Again, I used the 'Move Transform Type_in' dialog and put the value of ]-15[/COLOR]. in the 'y' spinner in the 'Offset Screen' group'. Depending on how you've set things up on your computer, you may be required to use a different axis.
You will notice that both point helpers move down to the level of the other foot helpers. According to my instructions, that is what we want to do.
Now you should rename all these helpers:
Helper 'Point01' (Left-Leg)... to 'Heel_Rotate_L_Help'...
'Point02'... 'Heel_Lift_L_Help'...
'Point03'...'Toe_Lift_L_Help'...
'Point04' (right-Leg)...'Heel_Rotate_R_Help'...
'Point05'...'Heel_Lift_R_Help'...
'Point06'...'Toe_Lift_R_Help'...
Name the two larger helpers 'Point07'... 'Toe_Rotate_L_Help'... and, 'Point08'...'Toe_Rotate_R_Help'...
Since it is going to start getting complicated, I will begin another posting soon...
Tim
tymmyt48
29-01-2007, 02:09 AM
For this particular section, I had to decide on some factors.
You see, I have some ideas and updates for the helpers and wiring of the feet and legs, but I am not quite ready to reveal them...still trying to get the bugs out.
So instead, I will explain a simpler way at this time. Then I can go back later in this tutorial and make some changes that will give better control of the legs and feet.
Linking the IK goals to the helpers:
Tip: In these steps, it is probably easiest to use the 'Select by Name' dialog to individually choose your objects and helpers. It is rather difficult to move your curser over particular objects on the screen and choose without accidently activating something else.
If you don't take slow care in these instructions, this may not work properly. I had to do it about half a dozen times, and if I am not careful...I still get it wrong!
Select the last IK chain, 'Toe_L_IK_Goal' at the tip...
link it to the larger ball helper, 'Toe_Rotate_L_Help'.
You are setting this up to make the toe rotate by rotating 'Toe_Rotate_L_Help'.
Note: This rotates the front leg assembly.
(Do the same step for the right foot:)
I got both working...shall we will continue?
tymmyt48
29-01-2007, 02:18 AM
Select the first IK chain 'Ankle_L_IK_Goal' and...
link it to the smaller ball helper 'Heel_Lift_L_Help'.
Now you can make the heel roll by rotating 'Heel_Lift_L_Help'.
Actually, when you rotate the helper, the leg moves and the 'Bone_L_Foot' moves. But, the 'Bone_L_Toe' stays put.
(Do the same step for the right leg:)
I got both feet working...shall we will continue?
tymmyt48
29-01-2007, 02:26 AM
Link 'Ball_L_IK_Goal' to...
'Heel_Lift_L_Help'.
This will help keep the foot bone stable when the heel lifts up.
(Do the same step for the right foot:)
I got both working...
Select 'Toe_Rotate_L_Help' and 'Heel_Lift_L_Help' and...
link them both to 'Toe_Lift_L_Help'.
If you move this helper upwards, it will make the whole foot move up. If you rotate the helper...then the feet and leg moves upwards like they are supposed too.
(Do the same step for the right foot:)
I got both feet working...Shall we continue?
Tim
tymmyt48
30-01-2007, 11:00 PM
Just a note of concern: I tested this on my own computer yesterday, and everything seemed to work correctly. but by any chance that I've made an error some place, PLEASE let me know so I can correct it. the last thing I want to do is to give false information to people I'm trying to help. thank you.
Creating custom Attributes:
Wire attributes to helper rotation:
You'll start by creating the attributes. Then you’ll use parameter wiring with some simple MAXScript expressions to drive the rotation of the helpers from the control attributes.
Add custom attributes:
Select 'Foot_L_Control'.
If you have installed the Attribute Holder modifier, add it to the 'Foot_L_Control'.
Note: This modifier is a simple scripted plug-in modifier that ships with the program, and is in the scripts directory. It makes an empty placeholder modifier on the stack where you can add attribute controls.
To install the modifer, simply copy Modifier-Attribute Holder.ms from the Scripts\PluginScripts directory to StdPlugs\Stdscripts.
Restart the program.
Locating the modifier in 3dsmax when your back to working in it.
Click on 'Foot_L_Control'. You notice the name is located at the top right corner area of the panel? Directly below is the 'Modifier List' with a small arrow at the right-hand side.
Click on the arrow which will open up a long listing of available modifiers that are currently in Max.
The modifier, 'Attribute Holder' is located two listings directly below 'Object-Space Modifier'...
Click onto it to activate it into the 'Foot_L_Control's' modifier's listings.
Now, from the Animation menu, choose 'Add Custom Attribute'.
The Add Parameter dialog is displayed.
In the Add Parameter dialog > Attribute Style rollout > UI Type group, change Name to 'Roll' (without the quotes).
In the Float UI Options rollout > Range group, set From to '–100.0 ' and to '100.0 '. You’ll use the negative side to make the foot rotate back on the heel, and the positive side to make it rotate forward ball to toe.
In the 'Finish' rollout, choose 'Object’s Current Modifier' from the drop-down list...
...and click 'Add'.
The 'Roll' modifier should now be seen in the modify panal on the righ-hand side of the screen. this is where you will be able to control certain aspects of the foot by inserting values, instead of having to maunually move differents parts of the foot itself.
This is much easier to control.
Currently, changing the attributes values won’t do anything, since you haven’t connected, or “wired” the spinner to anything yet. The next steps now will connect these attributes to the helpers' rotations.
Certain controllers, such as Wire Controllers, Expressions and others, will operate only over the time range you specify. While you can go into Track View to adjust this after the fact, it is much easier to simply create the controller with a large enough time span to cover any animation you might do.
The default time span for the controller is the current time range.
By setting the time range to a really large range, say ]–1000 [/COLOR] to 10,000, you’ll be sure not to have any problems later.
Make sure that 'Foot_L_Control' is still active. If not, select it...
Click on Animation > Wire Parameters > Wire Parameters...
On the pop-up menu, choose Modified Object > Attribute Holder > Custom_Attributes > 'Roll ' (without the quotes).
A rubber band stretches from the target object. Click 'Heel_Rotate_L_Help'.
On the new pop-up,and choose Transform > Rotation > 'X Rotation'.
The Parameter Wiring Dialog appears.
You need only a one-way connection...
click the right-arrow and click 'Connect'. This sets the control direction from the Roll attribute to the foot's X rotation.
It should say 'Roll' in the right-hand box.
Leave the Parameter Wiring dialog open, but move it aside so you can try out the new control.
Use an expression to better control the rotation:
Try changing the Roll value. The foot spins wildly.
Reset the Roll attribute to 0.0.
What is actually happening is not random, but rather an issue with how 3ds max internally handles rotations. Most people are used to degrees for rotation. Ninety degrees is a quarter turn or rotation, 180 is half and 360 is a full turn. However, many 3D applications use radians. Radians are another way to numerically describe a rotation, except they are based on the value of pi (3.14159...).
With Radians, 2 times pi is a full 360–degree spin. That is, 6.28 Radians equals 360 degrees. Pi itself would be a 180–degree or half turn. One-half of pi would be 90 degrees. Fortunately, 3ds max includes a couple of built-in functions that can convert from radians to degrees and back.
Currently, 3ds max wants radians, which means that if you change Roll from 0 to 3.14, you’ll get a 180 or half spin. It’s easier if you work in degrees. Next, you’ll use a function called degToRad to convert Roll into radians.
1.In the Parameter Wiring dialog, change the wiring expression to:
degToRad(Roll) .
Click 'Update'.
Now try spinning the Roll attribute. It is much more controlled.
In the Parameter Wiring dialog, change the wiring expression to: degToRad(0.6*Roll), and click 'Update'.
Here, you have told the script to multiply Roll by 0.6, which limits the rotation to the 60 to –60 degree range.
(Do the same for the right-foot)
Now, this expression works for my feet..shall we continue..?
tymmyt48
31-01-2007, 03:22 AM
We are going to add another custom attribute to the foot. This time, we want to make the toe rotate when the heel moves upward as if beginning a step forward.
Since we already have the 'Attribute Holder Modifer' installed and into the 'Foot_L_Control's' modifier stack, we don't need re-insert it ifwe are going to use it again.
Click onto 'Foot_L_Control'
In Animation > Custom Attribute...make another attribute.
Type in the name as 'ToeRotate' .
Type in '-100' to '100'. Select 'Object Current Modifier'...and click 'Add'.
Now you can see in the modifier panel that it appears directly underneath the 'Roll' spinner. If you do not have this, you may need to go back and try again.
Wire an attribute to spin the toe helper:
Select 'Foot_L_Control'.
Wire the 'ToeRotate' attribute to 'Toe_Rotate_L_Help's X rotation.
Animation > Wire Parameters > Wire Parameter...
Modified Object > Attribute Holder > Custom Attributes > ToeRotate...
Click on 'Toe_Lift_L_Help'
Transform > Rotation > X Rotation...
The Parameter Wiring dialog box appears. The 'ToeRotate' should appear in the lower right hand box.
Click on the right arrow because you are choosing a 'one-way' wiring...and click 'Connect'.
Now, change the values in the 'ToeRotate' spinner in the modifier panel. The foot spin wildly.
Reset the value back to '0.0'.
Change the expression to: degToRad(ToeRotate) and click 'Connect'.
Now, you may notice that when you change the values again, the foot moves at a more controlled rate. Looks better!
Note:Now, I am still working on a separate tutorial that will supply expressions in order to provide rotation to the foot bone as well. I am still getting the bugs out.
(Do these steps for the right foot)
With the 'Foot_L_Control' active, we want to create another custom attribute called 'FootPan'. We are setting this up so that we can make the character move its foot from side to side on the 'y' axis...just like you and I can.
Click on 'custom Attributes' to bring up the dialog.
Name: 'FootPan'... select '-100' to '100'
(I have discovered that this number represents how many degrees you can access in the actuall value). I am only using these values because it is what the instruction say to do.
'Objects Current Modifier' and click 'Add'.
Now, the 'FootPan' spinner is in the modifier's panel directly beneath 'ToeRotate'.
Animation > Wire Parameters > Wire Parameters...
Modify Object > Attribute Holder > custom Attributes > FootPan...
Select 'Heel_Rotate_L_Help', since this is the helper we want to move.
Transform > Rotation > Z Rotation...
The 'Wire Parameters' dialog...Click the right-arrow...click on 'Connect'.
If you move the value in the spinner, the foot's movement will be too sensitive.
Change the expression to 'degToRad(FootPan)'. Now the 'FootPan' should move side to side much smoother.
(Do this same for the right foot)
Creating the last and final custom Attribute for both these feet.
Select the 'Foot_L_Control'.
Add a custom attribute...
In the dialog, Name: 'AnkleTwist'...since we are going to create the movement to twist your ankle just like kids do when they stand on their ankles.
The value range, '0.0' to '100'...since it is impossible to move out ankle the other way. 'Object Current Modifier' ...click on 'Add'.
The final spinner appears at the right hand panel.
I go to the screen and activate 'Heel_Rotate_L_Help' since this is the helper we want to twist. I check on the axis and it appears to be, 'y'.
Animation > Wire Parameters > Wire Parameters...
Modified Object >Attribute Holder > Custom Attibutes > AnkleTwist...
Select 'Heel_Rotate_L_Help'...
Transform > Rotation > Y Rotation...
In the Wiring Parameters Diolog, click the right arrow and 'Connect'. 'AnkleTwist' should be in the right hand box.
Changing the values in the spinner twists the ankle in the direction we want, but it moves too quickly.
Change the expression to 'degToRad(AnkleTwist)'. Now the 'AnkleTwist' should move to only one side much smoother.
(Once again...and finally, lets do the same steps for the right foot.)
Change the expression to 'degToRad(AnkleTwist)'. Now the 'AnkleTwist' should move to only one side much smoother.
But you will notice that it moves to the wrong side...
In the expression box, simply add a '-' to the beginning of the expression...and click 'Update'.
Ok, now all of my attributes...'Roll', 'ToeRotate'” (except for the rotation of the toe itself), 'FootPan', and finally 'AnkleTwist' work just fine for me on both feet.
You also notice that you can still move each foot by activating their helpers, 'Foot_L(R)_Control'. So far, so good!
If you have the same situation, then shall we continue?
Tim
tymmyt48
31-01-2007, 06:57 AM
Add a swivel target to control the knee:
In the Top viewport...
In the Create Menu...'Shapes' click on 'Rectangle'. Create one with Length and Width both equal to '10.0'.
I personally like to add a corner radius to '2.5'.
Copy and Paste to make another helper for the right leg.
I am going to leave it the color of white for better visibility.
Move 'Rectangle01' in front of the left leg and the 'Rectangle02' in front of the right. These helpers should be placed at knee height and in front of the toe bone. Check the picture below if you not sure.
Rename the left to 'Knee_L_Control ', and the right to 'Knee_R_Control'.
In the perspective viewport...
Select 'Ankle_L_IK_Goal '.
In the Motion Panel > IK Solver Properties rollout > IK Solver Plane group, click the Pick 'Target button' currently labeled 'None'.
Link 'knee_L_Control' to ... 'Foot_L_Control'.
For the right foot...
Link 'knee_R_Control' to ...'Foot_R_Control'.
Now try moving 'Knee_L_Control' and, 'Knee _R_Control' around. As you do so, the knees tries to aim towards the control, even though the feet are nicely locked down. The effect is more noticeable when the leg is bent.
Now, fix the pivot point for 'Foot_L_Control'.
In the left view port...
Select 'Foot_L_Control'.
In the Hierarchy Panel > Adjust Pivot rollout, click 'Affect Pivot Only'.
This allows you to move the pivot point of the object, without affecting the children or object itself.
In a side view, move the pivot to where the ankle is. This is better illustrated in the picture below.
Make sure to de-active the 'Affect Pivot Only' button.
This gives you a more natural animation control.
With the Swivel Target parented to the foot, you can adjust the knee as needed using the 'Knee_L_Control' . You can also animate and move the foot, and use the attributes on it to do basic foot roll and toe rotation.
Now, go back and do the same steps for the right foot...
Now, that you have completed the two legs, we may now continue onto the next step...
tymmyt48
01-02-2007, 01:33 AM
Add a helper for the leg as a whole:
Now you’ll add a point helper to the top of the entire leg bone structure. This gives you a nice layer of abstraction should you decide to do anything odd with the leg, and is a nice way to keep things clean.
Create a point helper in the Top viewport for the left leg.
Create > Helpers > Point...make sure 'Cross' is checked.
Copy and Paste to make another one for the right leg as well.
Rename (left leg) 'Leg_Start_L_Help '.
Rename (right leg) 'Leg_Start_R_Help' .
Align 'Leg_Start_L_Help' to the XYZ position and orientation of the 'Bone_L_Leg_Upper'.
Link 'Bone_L_Leg_Upper' ...to the helper, 'Leg_Start_L_Help'.
(Do the same for the right foot)
Later on you’ll make this helper a child of the hips and spine so the body works together.
Now that you have the basic working of both legs complete, you’ll finish the legs off with two more controls. One is the 'Ground_Control' that will be used to adjust both feet at the same time. The other is a 'Placement_Control' that eventually will control the entire character.
Add character placement controls:
In the Top view, create an Ngon.
Create > Shapes > Ngon...
This will be created 'world' aligned, at a height of 0.0.
A value of about 65.0 works well. You can also adjust it to have a larger number of Sides, such as 10, for more detail and points on the control. I also added a corner radius of 10...I think it looks better...just my own personal preference.
In the transform type-in fields at the bottom of the screen, enter 0.0 for the 'X' position. Then move its Y position so it is centered between the feet.
Rename the shape 'Ground_Control'.
In the 'Front' viewport, bring the 'Ground_Control' down to the ground, bottom of feet.
I had to use the 'Z' axis.
Create another NGon shape. Increase the radius to enclose the character. A value of 90.0 works well. Again, with the corner radius of 10.
Enter an exact position of 0, 0, 0 in the transform type in fields, to move it to the world origin.
Name this second shape 'Placement_Control '. Again, we need to bring this shape down to the foot level just like the previous shape. I used the 'Z' axis.
Now you'll parent our controls together:
Link both 'Foot_L_Control' and 'Foot_R_Control' ...to the new, smaller 'Ground_Control' shape.
Link 'Ground_Control' ...to 'Placement_Control'.
Normally you'd also link the top leg start helpers to the placement …but you'll be linking those to the spine later on.
For now, the feet and knee controls work the legs. You can also control both legs together by moving the 'Ground Control'. Later on, the placement control will cause not only the feet, but the entire character to move, which is useful for getting the entire character to some position and rotation in a scene before you start animating it.
Now let's look at something important.
Right now, the controls are where we want them. What if later on, after animating the character in various ways, we want to go back to this position and these settings?
There is a new feature in 3ds max 5 called Skin Pose, which lets you store and later retrieve the position, rotation and scale of the selected objects. You'll set a skin pose for this character right now.
Set the skin pose:
Select all of your created shape control objects: the feet, knee, ground and placement controls. The names of these all end in “CTRL”:
'Foot_L_Control '...
'Foot_R_Control '...
'Knee_L_Control '...
'Knee_R_Control '...
'Ground_Control '...
'Placement_Control '...
Hold down the ALT key and right-click to view the animation quad menu.
On the Pose (lower-left) quadrant choose Set As Skin Pose.
Answer 'Yes' to the verification dialog.
The skin pose is now set.
At this point you can now move the controls however you want. Rather than having to undo any moves and rotations, you can select the control object, ALT+right-click and then choose Assume Skin Pose. Try it out.
Select any control and move it around, leaving it in a new position and rotation.
ALT+right-click and choose Assume Skin Pose.
Result: the control moves back to where you had rigged it.
Important: Custom Attributes, however, are not stored. This means that if you adjust the Roll or toeRotate settings, you will have to manually set those attributes back to zero to restore the skin pose.
Everything worked for me. Shall we continue?
tymmyt48
05-02-2007, 01:23 AM
In this lesson, you will concentrate on articulating the spine assembly.
As you have probably noticed, I have re-arranged the bones in my spine assembly with a curve. You might want to re-do the bones to match mine. Or, you can use the original, it doesn't really matter.
I have also change to the 'World' Reference Coordinate System.
You've already created the bones with the splineIK goal.
Unhide everything, in order to show the spine curve, helpers, and IK goal. Then, hide everything else except the 'Placement_Control' and these spine-related objects, to help see what you're doing.
Since you already have the IK working, and can move the five splineIK helpers around, you only now need to simplify the controls. Right now, you can move each helper around, but rotating them doesn’t do much. This is because bone rotation is based on the spline, so moving the points causes the bone to rotate.
However, what about twisting?
Rotating in a top view doesn’t cause the bones to twist. This is because splineIK has a swivel “twist” value that you have to animate in order to get the twist. Let’s take a look at that.
Examine the spline IK goal:
Select the 'IK_Spline_Goal' object. It is the cross at the top of the spine. It should also high lite the long line through the spine too.
On the Motion panel > IK Solver Properties rollout, adjust the Twist Start Angle and Twist End Angle values.
As you can see, the first one controls the entire chain twisting (you can see that the whole spine is twisting when you chagne the value), while the second one only affects the top (only the second thru the top moves, but at different rates of speed), smoothly ramping down toward the bottom.
Unlike the HI IK setup, there is no option for a swivel target object. So, you won’t be able to use a control like a knee control as you did earlier. Instead, you'll set up a Script expression to tie the twist into the control objects we’ll make, so that rotating our control object drives the twist as one would expect.
You'll now set up our basic control structure and then link the helper objects to the controls.
You'll want three basic controls:
One control will allow you to move and rotate the entire spine system at once. This is the basic hip control that the animator will use to move the character around.
The second control will be another one located at the hips, but that will give the animator independent hip control to move just the lower half of the spine. This allows the character to swing the hips sideways, without affecting the overall motion of the animation.
A third control for the top of the spine will allow the animator to move and bend the spine around from there as well.
Set up the basic spline controls:
Put the Reference Coordinate System to 'World'...
On the Create panel > Shapes section, click Star.
In a Top viewport, draw out the star shape.
Click again to adjust how pointy the star is, pick whatever you want: a radius of 32 and 22 works fine.
Change points to 8 if you desire a different looking shape.
I like to have the corner radius's of 2.5 each. I just like it better...
Rename the star shape 'Hip_Control'.
Align the XYZ position and orientation of the 'Hip_Control' ...to the first bottom helper, 'Spine_Helper01'.
Create an NGon with 6 sides.
Set the radius to 20, Color the new shape as you want, and a corner radius of 5.0.
Rename the shape 'Spine_Bot_Control'.
Align this 'Spine_Bot_Control' shape to the XYZ position and orientation...to the 'Hip_Control'.
Duplicate the 'Spine_Bot_Control' by holding down the SHIFT key. Rename the duplicate 'Spine_Top_Control'.
We want to now Align the 'Spine_Top_Control'...to the top spine helper 'Spine_Helper_05'.
Now you will link the controls together:
Link both the 'Spine_Top_Control' and the 'Spine_Bot_Control' to...
the 'Hip_Control'.
This way, the 'Hip_Control' can move them both together as one, or they can move independently.
Link the 'Hip_Control' to...
the 'Placement_Control'.
This way, the placement will let the entire character move later.
Link, 'Spine_Helper_01' and 'Spine_Helper_02' to...'Spine_Bot_Control '.
Link 'Spine_Helper_04' and 'Spine_Helper_05' to... 'Spine_helper_05'...
Reasoning: All of the bones' assembly rotated when the 'Hip_control' was rotated.
The next step is to link the point helpers to the two spine controls.
The top helpers will go to the top control, and the bottom ones to the bottom control. However, the middle control needs something that is somewhere in-between.
While you could do a simple Offset Point and Offset Orient constraint that is halfway between the top and bottom helpers that is close, but not exactly what we want. The problem is that we want that middle helper to appear to be parented to both controls. With a simple point and orient constraint, when we rotate the control, the helper would indeed rotate; however, it would not move. If you think about it, if the middle helper was linked to the top control, when the top control was rotated, the helper would move in an arc. The same thing would happen if it was linked to the bottom control.
In order to accomplish this, you'll create three helpers. Two helpers will be placed generally at the position of the middle splineIK helper. Each will be linked to a top or bottom control. Then the third helper will be constrained between these two; that way, it will be constrained to objects that indeed are picking up the proper position and orientation as if they were linked to the controls. Then you’ll link the real splineIK middle helper to the newly constrained one.
You’ll start by doing the simple linking of the top and bottom helpers.
Link the helpers to the spline controls:
Now create one Point helper object. I use the ractangle shapes because that is what is used in the instructions.
Once you have one created with the size of 10 and corner radius of 2.5...
Rename this helper to: 'Offset_Top_Helper'...
Now, copy and past to create another. Rename it...'Offset_Bot_Helper'...
Again, copy and paste and rename this third one ...'Between_Helper'.
Align the XYZ position and orientation of 'Offset_Top_Helper' and the 'Offset_Bot_Helper' to...the middle 'Spine_Helper_03' object.
In a side view, move the 'Offset_Top_Helper' and 'Offset_Bot_Helper' back a bit so you can see what you are doing. You may need to use the Select By Name or Selection Floater dialogs to find and select them.
I used the 'move and select' dialog and changed the 'x' axis and a value of -30. But, your setup might be slightly different.
Move the 'Offset_Top_Helper' up a bit vertically. Move the 'Offset_Bot_Helper' down a bit vertically.
This way they are separated so you can easily see and work with them, but are still relatively close to behind the middle helper.
With the 'Move and Select' button, I used the 'y' axis...'5.0' for the 'Offset_Top_Helper', and '-5.0' for the 'Offset_Bot_Helper'.
Link the 'Offset_Top_Helper' to...the 'Spine_Top_Control'.
Link the 'Offset_Bot_Helper' to...the 'Spine_Bot_Control'.
Now, when you rotate either spine control, these offset helpers move and rotate properly because they are parented to the control.
Select the 'Between_Helper' control. From the Animation menu, choose Constraints > Position Constraint.
Click the 'Offset_Top_Helper'.
Reasoning: This puts 'Between_Helper' aligned directly in the center of the helper, 'Offset_Top_Helper'.
So, when I have the 'Spine_Top_Controller' active, I rotate it and it rotates the 'Offset_Top_Helper', and 'Bone_Spine_Helper04', but does not rotate 'Bone_Spine_Helper05'.
The 'Between_Helper' is now moved and constrained to the top helper.
With 'Between_Helper' still selected, choose Animation menu > Constraints > Position Constraint.
This time, click the 'Offset_Bot_Helper' object.
The helper is now constrained evenly, with a 50/50 split between the two other helpers. This way, it will always stay between them.
Reasoning: This position, not Orient, the 'Between_Helper' located in-between the 'Offset_Top_Helper', and the 'Offset_Bot_Helper'. We still need to assign the orientation to this assembly.
Now, create two more constraints to each of the top and bottom helpers, this time using an Orientation constraint to each.
'Offset_Top_Helper'...
Select the Offset_Top_Helper' control. From the Animation menu, choose Constraints > Orientation Constraint.
Click the 'Between_Helper.
Select the 'Offset_Bot_Helper' control once again. From the Animation menu, choose Constraints > Orientation Constraint.
Click the 'Between_Helper.
This way, 'Between_Helper' will also rotate 50/50 between the two other helpers.
Finally, link the middle spine helper, 'Spine_Helper_03' to...the 'Between_Helper' object.
At this point almost all the control is in. You can take the 'Hip_Control' and move and rotate it, to adjust the entire spine. You can move and rotate each of the spine controls as well. For example, to make the character lean forward, you can move the 'Spine_Top_Control' forward and then also rotate it down. However, twisting spine controls don’t do anything, because the twist is controlled by the IK Goal twist attributes. You'll fix that now by creating an expression for the twist angles.
But, before we continue with these next steps, I want to bring you up-to-date with the system I have and how it is working for me.
I did exactly the same step above as you did...and my spine system is working correctly. Atleast it appears to be.
When I rotate 'Hip_Control', it rotates all of the spine and helpers, plus the 'Spine_Top_Helper' amd 'Spine_Bot_Helper' at the same time.
When I rotate 'Spine_bot_Helper', it rotates everything except the 'Spine_Top_Helper' and the 'Hip_Control'.
When I rotate only the 'Spine_Top_Helper', it rotates from 'Spine_Helper_03' and up with gradual speeds. But, the rotation is not exactly smooth and even.
when a person rotates his/her spine, they are only able to do it a minute amount. You cannot move you spine (in a natural way) more than 15 or 20 degrees at one time.
In our spine setup, we are able to twist the spine by rotating 'Spine_Top_Helper'. It does in fact do the job. But, it is not meant to rotate more than what is commonly natural. If you rotate it more than what's natural, then you will begin to see deformation in the spine.
This may be why so many people are confused about this spine setup in the tutorial in Max 5.0, because they see the deformation after rotating it to the extreme...when it is not supposed to be rotated more than what is natural.
This is my view.
Now, we can continue on...with more rigging...expressions...on the spine...
tymmyt48
06-02-2007, 02:36 AM
At this point almost all the control is in.
You can take the 'Hip_Control' and move and rotate it, to adjust the entire spine. You can move and rotate each of the spine controls as well.
For example, to make the character lean forward, you can move the 'Spine_Top_Control' forward and then also rotate it down.
However, twisting spine controls don’t do anything, because the twist is controlled by the IK Goal twist attributes.
You'll fix that now by creating an expression for the twist angles.
To do this you'll have to know a little about how the software works.
Normally, in MAXScript, you can say something like:
rotX = $object.rotation.x;
and that will return the X rotation. However, if you do this, you will often get flipping of the numbers as the object goes past 180 or so. A better way to do this is to set your object to use a Euler controller, the program's default controller.
By doing this, you can read the exact true value for the controller, which is what is being used and shown in the Motion panel and in Track View.
In this case the same line would be:
rotX = $object.rotation.x_rotation.controller.value;
This gets the controller for the X rotation, and then the value that it is set to, and is much more stable. Knowing this, you can set up the expression for the IK goal to have the bottom spine control handle the initial start twisting.
Add controls to twist the spine:
Select the 'Spine_Bot_Control' object, and click Move And Rotate on the Main toolbar.
Set the Reference Coordinate System to 'Parent'.
Note: Remember everything is always relative to the parent. You will want to see which is the twisting axis. By going to “parent” mode, you will see the true axis that are used for the object.
Verify that the axis constraint is the Z-axis, assuming you created everything in a top view and followed the built-in splineIK creation.
Meaning, click onto the 'Spine_Bot_Control' helper and click to rotate. As you rotate it a small amount, you should notice that three numbers come up on the screen. these numbers are in the order of 'x,y, and z'.
Mine shows that 'z' is the rotation axis for my spine.
If it’s different, just note that, and change Z to whichever is the twist axis for the rest of the spine setup steps below.
Select the 'IK_Spline_Goal' object. This is the blue IK goal object at the top of the chain. Go to the Motion panel.
You can see all of the regular spline IK items listed. In addition, any object shows the controllers here as well.
Expand the Assign Controller rollout to see the list.
Note: Every animitable value in 3ds max has a controller assigned. A controller is the item that stores all the keys that you animate, or holds other data that describes how the values change over time. The typical controller for the twist angles is just a changing floating point number, or a Float controller.
You will change the Twist Angle controller into a Float Script controller, so that you can override it with a MAXScript expression.
The first two items listed in the rollout under the main transform items are 'Twist Start Angle' and 'Twist End Angle', which is exactly what you want to adjust.
Make sure your time range is from –1000 to 10,000, or any other large range as mentioned earlier, so that the script controller you create will operate, even after frame 100.
Click 'Twist Start Angle' to highlight it.
Click the 'Assign Controller' button above the list. Choose 'Float Script' from the list of possible controllers.
The Script Controller dialog appears.
You can always restore this later by right-clicking the item in the list and choosing Properties.
By default, the script simply contains the original value for the controller, which was zero. All you should see in the window is '0'.
Highlite that '0', and Type the following script:
dependsOn $spineBotCTRL $hipCTRL $placementCTRL; bot = degToRad $spineBotCTRL.rotation.z_rotation.controller.value ; hip = degToRad $hipCTRL.rotation.z_rotation.controller.value; place = degToRad $placementCTRL.rotation.z_rotation.controller.valu e; twist = bot+hip+place
This script was the original that came with the tutorial. I made some changes (minute changes...because I kept getting errors)
This is the updated version:
dependsOn $Spine_Bot_Control $Hip_Control $Placement_Control; bot = degToRad $Spine_Bot_Control.rotation.z_rotation.controller. value; hip = degToRad $Hip_Control.rotation.z_rotation.controller.value; place = degToRad $Placement_Control.rotation.z_rotation.controller. value; twist = bot+hip+place
Note: When you have copied and pasted this expression into the box, it will paste as one line. to make it easier to read, click you cruser right after, 'Placement_Control;' and hit 'return'. Put an extra line in there.
Next, hit 'return' right before, 'Hip' (hit return), right before, 'Place' (hit return). Go down one extra line and click right before, 'Twist' and hit return.
This way, you will be able to see better for the next several steps. You may have to repeat this several times unless you are familiar with all this. That is up to you.
Click on 'Evaluate'
Then, Close.
Take a look at the script.
The first line, dependsOn, tells the software that this script depends on changes made to the following list of objects. That way, whenever any of those objects changes, the script is evaluated.
The next three lines get the rotation value in radians for each object. You need to read not only the bottom spine controller, but also any animated controller above it, since you are reading the animated values.
At this point, if you rotate 'Spine_Bot_Control', 'Hip_Control', or 'Placement_Control', the entire spine will twist. This is as desired, except you don’t want the top to twist when you only use the 'Spine_Bot_control'.
So we’ll take this into account when you create the expression for the 'Twist End Angle'.
Create an expression for the twist end angle:
Select the 'IK_Spline_Goal' object.
Click 'Twist End Angle' in the Motion panel to highlight it.
Click the Assign Controller button above the list.
Choose 'Float Script' from the list of possible controllers to assign. The Script Controller dialog appears.
Type the following script:
dependsOn $spineTopCTRL $spineBotCTRL; top = degToRad $spineTopCTRL.rotation.z_rotation.controller.value ; bot = degToRad $spineBotCTRL.rotation.z_rotation.controller.value ; twist = top – bot;
Updated version:
Again, make sure that ONLY 'Twist End Angle' is highlited. When I did this step, I noticed a couple of times that the 'Twist Start Angle' also tended to highlite too.
dependsOn $Spine_Top_Control $Spine_Bot_control; top = degToRad $Spine_Top_Control.rotation.z_rotation.controller. value; bot = degToRad $Spine_Bot_Control.rotation.z_rotation.controller. value; twist = top - bot;
Close.
This script is similar to the one you entered earlier for the bottom controller. It lists which objects the script depends on. Then it gets the rotation in Z for each object, in radians. Finally, it takes the top value and subtracts out any rotation you did on the spine bottom controller. By subtracting rotation, you effectively “twist backward” the top twist value, which will make the top appear to remain stationary, even when you twist the bottom controller, thereby giving you independent control of the top and bottom twist with each controller.
You can try moving the placement of the hips and spine controls and rotating them to see how they work. Make sure you reset things back to zero, or undo any moves you have made before continuing.
At this point, you could leave the spine as-is.
However, for one more extra feature, you will add a script to each bone, starting with the second bone, in order to let the spine “stretch”. You'll add an attribute to the top spine control to allow the animator to specify whether or not the spine will be stretchy.
Add attribute for stretchy spine:
Select the 'Spine_Top_Control' object.
Add the Attribute Holder modifier if you have it installed.
From the Animation menu, choose Add Custom Attribute. This is a one time thing. You need to install this modifier for this sequence, but you will not have to add it any more. You will be going through these following steps for multiple bones in the spine, but this is the only time that you will have to creat this cutom attribute modifier.
When the dialog appears, name the attribute 'Stretchable'.
In the Float U.I. options, set the Range from 0 to 100 (the default is 100).
Choose 'Object’s Current Modifier' in the area that specifies where the attribute will appear.
Click 'Add' to add the attribute. And you should see it in the modifier panel. If you don't, something is not right.
I was thinking about continuing on here in this post, but I came to realize that this post is quite long as it is. So, I will continue...Wire Bones to Stretchy Attribute.
tymmyt48
06-02-2007, 03:52 AM
Do people want me to continue with this tutorial? I am not getting many responces.
Tim
tymmyt48
06-02-2007, 11:56 PM
Wire bones to 'Stretchy' attribute:
Now you’ll wire each bone to use this value, as well as the spline path length to determine stretching.
To do this, you’ll have to use a MAXScript command that gets the length of the spline path, the 'splineIKSpineCurve' object. This object is the line that goes directly through the back bone. It is part of the IK Chain.
It is called, 'SplineIKNode01'. Rename it to, 'Spline_IK_Spine_Curve'. Make sure that you spell this exactly how it appears.
We’ll do the following for each bone starting with the second, and up to and including the last tip bone.
Make sure that 'Spline_IK_Spine_Curve' is selected. You will eventually do these same steps for the other bones splines.
Open the MAXScript Listener window.
Type 'curveLength $splineIKSpineCurve'...
Updated version:
'curveLength $Spline_IK_Spine_Curve'. Type in exactly what you see. If you do not, you will get errors. Then press the 'ENTER' key on the numeric keypad. This executes the command.
A number will be returned. This number is the length of the curve path. Write down the number, because you'll use it in an expression coming up. Your number will probably be different than mine, so don't rely on these numbers.
Select the Second bone, 'Bone_Spine02'...
'Bone_Spine03'...(20.0566)
'Bone_Spine04'...(21.1179)
'Bone_Spine05'...(21.1613)
'Bone_Spine06'...(19.1558)
'Bone_Spine07'...(18.1852)
All of these indivual numbers that I used in my system will probably be different in your system. I am only showing them here for reference as to what I did.
On the Motion panel, open the Assign Controller rollout.
Expand the FK-Sub Control part of the tree.
Expand Position to show each X, Y, and Z position controller.
Click the 'X Position' controller.
The X position of the bone determines where it is along its length. By moving the bones in the X axis, you'll effectively stretch the or squash the bones.
Make sure you have a large time range for your timeline, as mentioned earlier.
Click the 'Assign Controller' button above the list. Choose 'Float Script'.
Click OK.
Note: The default value for the bone position is not zero. We’ll need to use that as well.
The value here may be different than mine. Just make sure you save them.
Enter the following expression, replacing your own default curve length from earlier, and repositioning your own default initial bone value into the proper places:
dependsOn $splineIKSpineCurve $spineTopCTRL; origLen = 47.6604 -- Put your orig length here origBone = 11.2722; -- Put your orig bone/script value here pct = $spineTopCTRL.Attribute_Holder.stretchable; newLen = curveLength $splineIKSpineCurve; xPos =(origBone*(1.0-(pct/100.0))) + (origBone*newLen/origLen*(pct/100.0));
'Updated version'
dependsOn $Spline_IK_Spine_Curve $Spine_Top_Control; origLen = 47.6604 --Put your orig length here origBone = 11.2722; -- Put your orig bone/script value here pct = $Spine_Top_Control.Attribute_Holder.Stretchable; newLen = curveLength $Spline_IK_Spine_curve; xPos =(origBone*(1.0-(pct/100.0))) + (origBone*newLen/origLen*(pct/100.0));
Note: If you are not using Attribute Holder modifier, then remove “.Attribute_Holder” from the line that contains it, and just add $obj.attr instead.
Let's take a look at the expression. Once again, the first line tells the software that the expression needs to update whenever the spline curve adjusts length, or when you adjust the top control, which has the attribute.
For the next lines, you specify what the original curve length is , and what the default bone position was. You should fill these values with your own proper values for each bone.
Next, we get the percentage that specified for the stretchable attribute. This goes from 0 to 100; you’ll divide by 100 later to get it in a range of 0–1 later. If you are not using Attribute Holder modifier, then it should only read: “pct = $spineTopCTRL.stretchable”.
Then the script looks at the current or new curve length for the spline curve. As the animator moves the spline controls around, this will update.
Click on Evaluate.
Finally the script calculates the new bone position. There are two parts to the expression:
The first part is simply the original bone position. We multiple it by 1.0 minus the percentage normalized to 1. So that when the user takes the “stretchable” down to 0, we revert back to the default bone length.
The right half of the line is what does the actual stretching. We take the original bone position and multiple it by the “New Length” divided by the “Orig Length”. This tells us how much the spline has stretched. By increasing the bone position by the same percentage, the bone will move with the spline movement. We then multiply that by the “percent” normalize to 0–1, so that this only occurs when the animator has the “stretchable” attribute up.
Close the dialog.
You can test this now by moving the 'Spine_Top_Control' up or down. You don't want to rotate in this step. The second bone will move out, causing the first bone to appear to stretch.
At first I could not see any difference at all, I was beginning to wonder if this 'stretchable' modifier was worthless...until I checked it out in the side viewport.
In the 'Stretchable' modifier in the side panel, I put the value of '0'. I then made 'Spine_Top_Helper' active and began moving it up and down...not rotating it.
As I was doing this, I noticed nothing at the first and second bone of the spine.
So, I changed the value in the spinner this time to '50.0' and moved the helper again. A-HAA! I noticed that the first bone was stretching a trifle amount. Then I understood that the more value (up to 100) you insert into the spinner, the more the bones are able to stretch.
If you want no stretching, put the value of '0' into the spinner.
You can slide the “Stretchable” attribute from 0 to 100 to blend between allowing and disallowing the spine to squash and stretch.
Repeat the above process now for each bone, replacing the proper origBone value for each.
'Bone_Spine_03'...
Now, go back and do these same steps for:
'Bone_Spine03'...through 'Bone_Spine07'...
Go back to: 'Wire bones to 'Stretchy' attribute'.
At this point, the hip and spine controls all move and rotate properly.
tymmyt48
08-02-2007, 10:22 PM
I have tried over and over to post more of this tutorial, but the site will not let me. Meaning, I have absolutely no control over the fonts and highlites as I have previously.
I don't know whether it is my computer...or the website.
Will post more as soon as I possibly can.
Tim
tymmyt48
09-02-2007, 08:57 PM
Hi all,
It looks like I am up and running again...
So, I will go back and find my saved tutorial for the next step at hand.
Glad to be back.
tymmyt48
09-02-2007, 09:34 PM
I hope everyone is up to speed. If there is anything that you don't quitte understand, please reply.
Link legs to spine control:
Unhide all.
Try moving the hips or bottom spine control. The result is the legs are still not linked yet.
Undo any move changes you made.
Select both of the leg start dummies, the 'Leg_Start_L_Helper', and 'Leg_Start_R_Helper' Point helpers, and link them...to the 'Spine_Bot_Control' (not the hips).
This way, when you move the hips, the legs stay connected, and if you offset or swing the 'Spine_Bot_Control', the legs also stay connected.
In the next section, you’ll work on the arms. In order to make the most stable arms, you'll need to anticipate some slight motion due to spline IK on the top bone. For example, move the 'Spine_Bot_control' object around.
As you do so, look at the topmost spine bone. It moves around a bit, which is OK, but it also rotates just a little. It’d be nice if you were able to parent the arms right to the top bone, and have it still move, or placed there, but rotate only when you rotate the upper spine control. That will make the arms more stable, as you might adjust the lower spine a bit when animating, but you will want the upper spine rotation locked.
This is a perfect case where you can easily create a point helper and position and orient constrain it to two different things.
Constrain the Point helper to the spine:
Create a new point helper.
Set the point helper size to 25.
Rename it 'Spine_Link_Helper'.
Create a 'Position constraint' to the very last spine tip bone, 'Bone_Spine06'. 'Bone_Spine07' is actually the very last bone tip, so we will use that instead. Hopefully it works ok.
Select 'Spine_Link_Helper' once again.
Create an Orientation constraint to...the top spine control, 'Spine_Top_Control'.
You now have a helper that you can link the head and arms to later, one that is properly positioned at the end of the spine chain, and that rotates only when you specifically rotate the hips or top spine control.
Rigging the Arms:
Next you'll rig the arms. Just like the feet, there are probably as many options and personal preferences that people have for the arms as there are animators.
For this tutorial, you’ll set up a basic IK chain for the shoulder and arm, and include the ability to switch the hand to be “relative” to the upper spine, or “locked” to the world. That way, the animator can easily keep the hands moving with the character, or lock them down if the character has to push against a wall or other object.
Start by creating the basic HI IK chain for the arm. You'll work on the left arm here.
Later on you can repeat the steps for the right side.
Copy and paste the left arm assemblies to the right-hand side if you haven't done it already.
Make sure the 'Reference Coordinate system' is to 'World'
Use 'Transform Coordinate system'...
Create HI IK for the arm:
Hide everything except for the arms, hands, and the 'Placement_Control' and top spine helper you made, the 'Spine_Link_Helper' object.
Since we copied and pasted the left arm assembly earier to make a new right arm assembly, we have yet to rename every bone since it is no longer on the left hand side. The 'L' would need to be changed to a 'R'.
If you have already done this, then move on to the next step...
'Bone_R_Arm_Clavicle'...
'Bone_R_Arm_Upper'...
'Bone_R_Arm_Lower'...
'Bone_R_Twist_Wrist_01...
'Bone_R_Twist_Wrist_02'...
'Bone_R_Twist_Wrist_03'...
'Bone_Palm_R'...
'Bone_Thumb_R_01'...
'Bone_Thumb_R_02'...
'Bone_Thumb_R_03'...
'Bone_Index_R_01'...
'Bone_Index_R_02'...
'Bone_Index_R_03'...
'Bone_Middle_R_01'...
'Bone_Middle_R_02'...
'Bone_Middle_R_03'...
'Bone_Ring_R_01'...
'Bone_Ring_R_02'...
'Bone_Ring_R_03'...
'Bone_Pinky_R_01'...
'Bone_Pinky_R_02'...
'Bone_Pinky_R_03'...
When this is all accomplished, you can continue on.
Create two point helpers.
You’ll parent the entire chain to a starting point helper that is aligned with the Clavicle bone, just to keep things clean and neat.
Rename the left (the model's left) point helper to 'Arm_L_Start_Helper'.
And, the right to 'Arm_R_Start_Helper'.
Align the XYZ Position and Orientation of the 'Arm_L_Start_Helper' to the first bone, the 'Bone_L_Arm_Clavicle.'
Align the XYZ Position and Orientation of the 'Arm_R_Start_Helper' to the first bone, the 'Bone_R_Arm_Clavicle.'
Parent the 'Bone_L_Arm_Clavicle' to the helper 'Arm_L_Start_Helper'.
Link...'Arm_L_Start_Helper'...to...'Bone_L_Arm_Cla vicle'.
Select the 'Bone_L_Arm_Clavicle'. From the Animation menu, choose IK Solvers and then HI IK Solver...
Click the next bone in the chain, 'Bone_L_Arm_Upper', to create a simple, one-bone-length IK chain for the Clavicle.
Rename the newly created IK Goal object to 'Clavicle_L_Goal '.
Do the same for the right arm:
Select the 'Bone_L_Arm_Upper'. Create another IK chain all the way to the last 'Bone_L_Wrist_Twist_03', which is the last tip bone on the arm (Remember, the hands are a separate hierarchy).
Select, 'Bone_L_Twist_Wrist_03' to complete a new IK Chain.
Rename the IK goal to 'Hand_L_Goal '.
Do the same for the right arm, naturally when you rename it...change the 'L' to an 'R'.
At this point, the basic IK chain goals let you control the shoulder and arms. The hand is still detached for now; you’ll take care of that later.
Now you’ll create the real animator controls for the shoulder and hand and also, as with the knee, a Swivel Target object to point the elbow.
Create controls for the shoulder, hand, and elbow:
Create a shape that will become the shoulder control. A rectangle shape with a size of 15 x 15 works well. I Also liked the corner radius option...2.5.
Make a copy of it for the right arm.
Align the first shape (Rectangle01) ...to the 'Clavicle_L_Goal'.
You might want to rotate the shape 90 degrees so it isn’t flat on the arm. But that is up to your own reference.
Rename the shape to 'Shoulder_L_Control'.
Again, repeat this step for the right arm:
Create a basic NGon shape. A 6–sided NGon with a radius of 15 works well. And a corner radius of 5.
copy and Paste a copy along side the original one.
Align the first shape, 'NGon01' ...to the 'Hand_L_Goal'. Rename the NGon to 'Hand_L_Control_Helper'.
And now the same for the right arm...
tymmyt48
09-02-2007, 09:59 PM
Create a third shape for the elbow swivel control. A 10 x 10 rectangle works well. A corner radius of 2.5 is what I like.
Make a copy of it for the right arm assembly:
Align the shape, 'Rectangal01' ...to the pivot point of 'Bone_L_Arm_Lower', which starts at the elbow.
Rename the shape to 'Elbow_L_Control '.
Slide the 'Elbow_L_Control' shape backwards a bit. I moved it 30 units in the 'y' 'Offset Screen' axis.
Do the same steps for the right arm assembly:
To make the controls work, you'll start by linking the basic IK controls together. You'll also link the main hierarchy to the upper body as well. The hand is a bit more complicated, so you’ll do that afterwards.
Link the basic IK controls together:
Select and link the 'Clavicle_L_Goal' ...to the 'Shoulder_L_Control'.
Select and link the 'Clavicle_R_Goal' ...to the 'Shoulder_R_Control'.
Link both the 'Shoulder_L_Control' and the 'Arm_L_Start_Helper 'objects to...the 'Helper_Spine_05 ' that you made when you finished the spine.
Link both the 'Shoulder_R_Control' and the 'Arm_R_Start_Helper 'objects to...the 'Helper_Spine_05 ' again.
Select the 'Hand_L_Goal' IK goal.
In the Motion panel, click the Pick Target: None button...
then click 'Elbow_L_Control' to make that object the swivel target control.
Select the 'Hand_R_Goal' IK goal.
In the Motion panel, click the Pick Target: None button...
and then click 'Elbow_R_Control' to make that object the swivel target control.
Now, if your rig works so far, we will continue...
tymmyt48
09-02-2007, 11:50 PM
Link the 'Hand_L_Goal' ...to the 'Hand_L_Control' shape'.
Link the 'Elbow_L_control' ...to the 'Spine_Link_Helper'.
Zero out all the control shapes except for the hand, using the techniques discussed earlier. The hand will be taken care of later.
Well, I sort of skipped this part at the very beginning because I did not fully understand it. But it is about time that I try and fully understand it, because apparently it is quite important. DUHHHH!
Control-Object Positioning and “Zeroing Out” Transform Values:
Next...
tymmyt48
10-02-2007, 01:39 AM
Control-Object Positioning and “Zeroing Out” Transform Values
There is one more important issue:
the default values for the control objects.
...I am trying to understand this...
In other words, which numeric X, Y, and Z position and rotation values they have.
...I am trying to understand this...
In 3ds max and most other programs, these values depend on the parent object. The child object's position and rotation is based on a relative change from the parent object.
For example, let's say we have two objects...
A and B.
Object A is at X=10 units, and...
object B is at X= 15 units.
...I am trying to understand this...
If neither object has a parent, then the “world” is the parent and the X value shown for A is 10...
and the X value shown for B is 15.
These values are relative to the world origin (0,0,0).
...I am trying to understand this...
Now suppose we link object B to object A.
At this point, object B is the child of A. Object B’s values will be relative or offset from those of object A.
In this case, A's X position still equals 10. But object B's X position now displays as 5, because it is +5 units away from its parent.
...I am trying to understand this...
We can use this information to our advantage.
...Good. Please explain to me...
If you are in Move or Rotate mode and choose Parent as the reference coordinate system...
then transform type-in values will show you the values in parent space.
...I think I understand this...
In fact, these values will be identical to the ones you will see in the Motion panel and in Track View when you are animating.
...ok, right now, I will have to take your word for it...
Most animators prefer to have everything in Track View start at 0,0,0. However, if you take the foot control for example, you will note that its position is not 0,0,0 but three other numbers. It would be nice if we could zero it out.
...I'm game. Show me how to do this..!
By zeroing out an object's position, the animator can reset that position by entering zeros while using Track View or the Motion panel. (This is in addition to using Assume Skin Pose, as described above.) And values relative to zero are easier to read in the Track View Curve Editor.
...Please show me how..!
The way to do this is to create a helper object...
aligned to the object whose transform values we want to “zero out.”
...Please show me...
By inserting the helper into the hierarchy, and linking the real object to the helper, the real object's values will be zero because they are not offset from those of the helper.
Let’s do this for the Left foot control.
...by all means, let's do..!
Zero out the left foot control:
...I am going to try and follow along...
(1) Creat a new Point Helper object. Set the options to have only a Center Marker and Axis Tripod. Set the size to 30 so you can see it easily.
(2) Align the helper to the XYZ Pivot Point (not Center) position of footLCTRL ('Foot_L_Control').
(3) It will move to the ankle, which is where the foot’s pivot is.
(4) Name the helper footLZEROHELP. ('Foot_L_Zero_Help')
Now we know footLCTRL ('Foot_L_Control') is already a child of groundCTRL ('Ground_Control'), so we’ll make this helper a child of groundCTRL ('Ground_Control') as well.
(5) Link footLZEROHELP ('Foot_L_Zero_Help') to groundCTRL ('Ground_Control').
(Do the exact same steps for the right foot.)
At this point, if you look at the values for the helper and the foot control, they are identical.
...How do you look for the values? I am trying to figure this out...
This is because they have the same parent, and are at the same place. Now you'll zero out the foot control by making it a child of the helper.
...don't' understand...
Link footLCTRL ('Foot_L_Control') to footLZEROHELP ('Foot_L_Zero_Help').
...Do the right foot too...
(6) Turn off the “Axis Tripod” option...
for the helper leaving on the “Center Maker” only. This will make it less intrusive visually.
(7) Now select footLCTRL ('Foot_L_Control'). On the toolbar, choose Parent as the reference coordinate system.
(8) The values are all zero. The same values will be shown in the Motion panel and Track View.
...What values? Are you talking about the spinner values I set up with custom attributes..?
You can repeat this process for all the other control shapes. In the future, these lessons will tell you to “zero out” controls. Do this the same way: create a helper, align it to the object, insert it into the hierarchy, then make the control shape a child of the helper. Remember, though, that this depends on the helper object already being in the hierarchy. So the object you are zeroing needs to have a parent already.
...I'm not quite understanding a lot of this...Can somebody help me..?
Now, on the top menu's, got to Character > Set Skin Pose. when the Pop-up dialog comes up, click on 'Yes'.
tymmyt48
10-02-2007, 09:41 PM
You can repeat this Zero'ing out for all control shapes. In the future, these lessons will tell you to “zero out” controls.
(Example: Align the helper to the XYZ Pivot Point (not Center) position of footLCTRL ('Foot_L_Control'.))
Do this the same way: create two helpers...in the top viewport.
'Point01'...'Point02'...
Align 'Point01/02' to the object's...XYZ position (pivot point)...to 'Elbow_L(R)_Control'
(...since I aligned 'Foot_L_Zero_Help' with 'Foot_L_Control', then it would seem to me that it is purely logical to align 'Point01' to 'Elbow_L_Control'...and align 'Point02' to 'Elbow_R_Control'. These are more '...control' objects just as the instruction specify...)
Since these two helpers are helping the 'Elbow_L(R)_Control/s', then we will rename them according. Rename 'Point01', as 'Elbow_L_Zero_Help'. 'Point02', as 'Elbow_R_Zero_Help'.
Insert into the hierarchy...
(Example: Now we know footLCTRL ('Foot_L_Control') is already a child of groundCTRL ('Ground_Control'), so we’ll make this helper a child of groundCTRL ('Ground_Control') as well. Link footLZEROHELP ('Foot_L_Zero_Help') to groundCTRL ('Ground_Control'.))
(A) I can see that the 'Elbow_L(R)_Control/s' are a child of 'Spine_Link_Helper'. Since this is the case, I believe the most logical step would be to link both, 'Elbow_L(R)_Zero_Help' to 'Spine_Link_Control'.
Then make the control shape a child of the helper. Remember, though, that this depends on the helper object already being in the hierarchy. So the object you are zeroing needs to have a parent already.
(Example: This is because they have the same parent, and are at the same place. Now you'll zero out the foot control by making it a child of the helper. Link footLCTRL ('Foot_L_Control') to footLZEROHELP ('Foot_L_Zero_Help'.))
Now, the way I am understanding this is that once I link 'Elbow_L(R)_Zero_Help' to 'Spine_Link_Helper', then I'd turn around and link, 'Elbow_L(R)_Control' to 'Elbow_L(R)_Zero_Help'. Is this a correct way of thinking?
Turn off the 'Axis Tripod' option...makes it less intrusive visually.
(Example: Now select footLCTRL ('Foot_L_Control'). On the toolbar, choose Parent as the reference coordinate system.)
Now select 'Elbow_L(R)_Control'. On the toolbar, choose 'Parent' as the reference coordinate system...
Now, on the top menu's, got to Character > Set Skin Pose. when the Pop-up dialog comes up, click on 'Yes'.
We need to do this for all the 'Control' objects. I hope you are catching on...it is coming to me slowly, but I think I'm getting the general idea.
tymmyt48
11-02-2007, 01:10 AM
Setting up to Zero out the two 'Spine_Bot(Top)_Control/s':
Do this the same way: create two helpers...
'Point01'...'Point02'...
align it to the object, 'Spine_Bot_Control' and 'Spine_Top_Control'
It seems purely logical to align 'Point01' to 'Spine_Bot_Control'...and aligning 'Point02' to 'Spine_Top_Control'. These are more '...control' objects just as the instruction specify...
We will rename, 'Point01' to 'Spine_Bot_Zero_helper', and 'Point02' to 'Spine_Top_Zero_helper'.
Insert it into the hierarchy...
Link 'Spine_Bot_Zero_Helper' to 'Hip_control'
Then make the control shape a child of the helper. Remember, though, that this depends on the helper object already being in the hierarchy. So the object you are zeroing needs to have a parent already.
This is because they have the same parent, and are at the same place. Now you'll zero out the foot control by making it a child of the helper.
Link 'Spine_Bot_Control' to 'Spine_Bot_Zero_Helper'
Now, the way I am understanding this is that once I link 'Spine_Bot_Zero_Helper' to 'Hip_control', then I'd turn around and link, 'Spine_Bot_Control' to 'Spine_Bot_Zero_Help'. Is this a correct way of thinking?
Turn off the “Axis Tripod” option only...
Change the Reference Coordinate system to 'Parent'.
Click on Character > Set Skin Pose...
Finish off by clicking on 'Yes'...
And since the 'Spine_Top_Control' does not seem to be parented by anything (I have to check further on that), we will only do the 'Spine_bot_control'...
More to continue...
tymmyt48
11-02-2007, 03:41 AM
Setting up to Zero out the two 'Shoulder_L(R)_Control/s':
Create two helpers...
'Point01'...'Point02'...
Align it to the objects...
It seems purely logical to align 'Point01' to 'Shoulder_L_Control'...and aligning 'Point02' to 'Shoulder_R_Control'.
Remember that we want to align the XYZ position (pivot) only.
We will rename, 'Point01' as 'Shoulder_L_Zero_Helper', and 'Point02' as 'Shoulder_R_Zero_helper'.
Insert it into the hierarchy:
Now since the two controls, 'Shoulder_L(R)_Control/s' are indirectly parented to 'Spine_Top_Control', then that is what we will use to zero the two controls out.
Link 'Shoulder_L_Zero_Helper' to 'Spine_Top_control'.
Link 'Shoulder_R_Zero_Helper' to 'Spine_Top_control'.
Then make the control shape a child of the helper. Remember, though, that this depends on the helper object already being in the hierarchy. So the object you are zeroing needs to have a parent already.
This is because they have the same parent, and are at the same place. Now you'll zero out the foot control by making it a child of the helper.
Link 'Spine_Top_Control' to 'Shoulder_L_Zero_Helper'
Now, the way I am understanding this is that once I link 'Shoulder_L(R)_Zero_Helper' to 'Spine_Top_Control', then I'd turn around and link, 'Shoulder_L(R)_Control' to 'Spine_Bot_Zero_Help'. Is this a correct way of thinking?
Turn off the “Axis Tripod” option...
For the helper leaving on the “Center Maker” only. This will make it less intrusive visually.
Now select 'Shoulder_L(R)_Control/s'. On the toolbar, choose Parent as the reference coordinate system.
Click on Character > Set Skin Pose...
Click on 'Yes'...
Now, set it...'Set As Skin Pose'.
tymmyt48
11-02-2007, 06:26 AM
Well, so far we have done pretty well in the rigging of this character.
The legs are built up, ik Chains are built and the rigging is near complete.
The spine is put together with one IK chain going down the center of it. The rigging is near complete, although I do agree that it could have some better control...in easier of use. but, this is osmething I will learn down the road.
And now the arms. I constructed these bones and set up two or three IK Chains. then with helpers and controlls, it is coming right along.
We still have quite a bit of rigging to do in the arm assemblies...
Then comes the hands. Instead of using the three-finger'd hand included in the tutorial, I will be incorporating a regular human-type hand with four fingers and the thumb.
The hands will be more complicated to rig. I will be using spinner with values to be able to manually move each and every finger...and thumb so that the animator would not have to go in and manually move each and every finger bones to move then.
So, in the next post, I will be continuing with the arm rigging...there is a lot more involved with it...
Tim
tymmyt48
12-02-2007, 05:08 AM
For the hand controls, we made the IK Goal a child of the hand.
However, as mentioned earlier, we’d like the hand to be able to be either locked to the 'Placement_Control' of the character, which usually doesn’t move and is therefore “locked” to the world, or to have the hand automatically move with the spine, so that even though it is IK, it will still function a bit like FK.
As a result, the animator won’t have to constantly move the hand around when the character walks or moves away from its default position.
Switch between “local”, (relative to the spline) or “world” (locked down to the placement).
To accomplish this, you’ll create two target helpers. One will be linked to the upper spine link helper, so that when the body/spine of the character moves, this will move locally as well. The other helper will be linked to the placement, so that it remains locked. Finally you’ll create a third helper that will blend between the two via a simple Position and Orientation constraint.
You'll also create an attribute called 'Local_World' on the hand control that will drive the constraint weights, so that as the weights for the “local” constraints go up, the other goes down, and vice versa, letting us blend that third helper smoothly between relative or locked motion.
Finally, you'll link the hand control to that helper so that the hand will automatically inherit local or world motion.
*Change of plans here. I am in the works of doing some research on improving this particular section of the rigging process. It is going to take a little time for me to re-create this improvement, so I ask for patience.
Now, what we are going to do is to skip this section, and go directly to the rigging of our character's hand. I am using a regualr human hand of four fingers and a thumb.
Through these folowing steps, we will creat custom attributes for each finger so that we can simply use a slider to move each bone instead of having to go in to the hand and manually move the fingers on their axis. To me, that would be very time consuming. I realize that all this rigging will be rather tedius, but I have found that besides being fun (atleast for me), it is rewarding at the end to have total control over each and every finger just by the touch of a slider.
We are also going to be wiring in a couple of extra features on our fingers so that we will have the ability to make multiple poses by the use of these sliders.
Just a reminder: (I mentioned to you earlier in this forum that I was working on another more prcise way of making the foot rotate up while also causing the toe to react in a more realistic way. I have finished it, and will be posting it at the end of my tutorial posting here.)
Shall we begin with the fingers?
Tim
tymmyt48
23-02-2007, 10:47 PM
Using Wiring and Sliders to control the fingers:
Whatever you can do to make animating your character easier is worth doing. Using sliders or spinners to control the rotations of some bones is one of the things that makes animating easier. The way this helps when animating fingers is that you don't have to zoom up on the hand and select each individual bone every time you want to pose the hand. All you have to do is click on the control object for the arm, which you would probably have selected anyway if you're in the middle of posing the arm, and move the spinners or sliders that we're going to build into that object.
You should know is that this is a tedious process, but it's worth it in the end.
The first thing we'll do is add a 'Point' helper to the scene.
This would be the IK Goal or Helper object you would normally attach the hand to when you're setting up your arm.
Align XYZ Position the helper to the base of the palm. Use 'Pivot Point'.
Select your character's left palm 'Bone_Palm_L'.
Now that you have this helper prepared, we can start creating custom attributes.
Again, select the new point01 helper, we'll add all the Custom Attributes (CA's) that will ultimately control the fingers.
Continue...
tymmyt48
23-02-2007, 11:40 PM
Bring up the Custom Attribute window. The first one is for the 'Bone_Index_L_01' since this is the first bone of the first finger.
Instead of typing in all of that name, we will make it a little shorter by typing in, 'BoneIndex 01'. The point helper that we are using is telling us which hand we are currently at. Instead of having the 'underscores' included in the name, we want to save space. Plus, the 'L', and 'R' is not needed since we have already identified which hand we are animating at that present time.
So, name this first custom attribute, 'BoneIndex(space)01'.
Right above the name, change the 'UI' type to 'Slider'. In this way, you won't have to worry about typing in a value, personal I feel it is a headache...but yes, there are times when you need the spinners. You just look at the hand on the screen and move the slider until you like the position.
In the range area, I used to keep it at 0.0 to 100. That range would restrict me to move the fingers in only one direction of this particular axis. If you take your fingers straight, you can also move them in the apposite direction by a very small amount. And that is why I have changed the range to ]-20.0 to 80.0[/COLOR]. for your own personal preference, you can change these however you like.
I also like to add 'Ticks'. 6 is the amount that I want.
Once you click 'Add' you will notice that this new modifier is now present in the right-hand modifier's menu.
We are going to make a slider for every finger on our character's hand...except for the thumb at this time. Plus, I have noticed from the very first time I did this, if you don't be careful with the order of these modifier's, the right-hand side can become very untidy, unorganized, and confusing.
So, I am going to lead you through my steps in order to minimized the confusion and disorganization. Or, atleast...I hope! I want a controller board that looks half-way descent.
...'Index 02'...
...'0 to 100'...
Size-W...'140'...
...'Right'...
...'6 (ticks)'...
...'Index 03'...'
...'0 to 40'...
...'100'...
...'Right'...
...'6'...
...'BoneMiddle 01'...
...'-20.0 to 8'...
...'160'...
...'Center'...
...'6'...
...'Middle 02'...
...'0 to 100'...
...'140'...
...'Right'...
...'6'...
...'Middle 03'...
...'0 to 40'...
...'100'...
...'Right'...
...'6'...
...'BoneRing 01'...
...'-20.0 to 80'...
...'160'...
...'Center'...
...'6'...
...'Ring 02'...
...'0 to 100'...
...'140'...
...'Right'...
...'6'...
...'Ring 03'...
...'0 to 30'...
...'100'...
...'Right'...
...'6'...
...'BonePinky 01'...
...'-40.0 to 100'...
...'160'...
...'Center'...
...'6'...
...'Pinky 02'...
...'0 to 100'...
...'140'...
...'Right'...
...'6'...
...'Pinky 03'...
...'0 to 10'...
...'100'...
...'Right'...
...'6'...
this probably will not look exactly like it does at the right...
Keep on creating these custom attributes in this fashion...and they will appear on the right-hand side in this order as illustrated.
Continuing...
tymmyt48
24-02-2007, 12:30 AM
Make sure the Point helper is selected.
Go to Animation > Wire Parameters > Wire Parameters...
In the new menu that comes up, select Object (Point Helper) > Custom Attributes > BoneIndex 01...
Click on the first bone 'Bone_Index_L_01' of the first finger...
then a floater menu comes up...
Transform > Rotation > Z Rotation...
(This is the axis that we want our finger to rotate on).
Continued...
tymmyt48
24-02-2007, 01:11 AM
Up comes the 'Parameters wiring' dialog to create your expression for this current bone.
In the top right-hand box, you should see the 'Z' Rotation is highlighted. If it is not...then highlite it.
But do remember, these instruction worked on my computer just fine. You may have slight differences in your computer, so you may need to do minor adjustments.
In the bottom-right box, there is the name of the current bone which we are trying to make an expression for.
we need to update this expression. type in degtorad(BoneIndex 01)
click on the right-arrow and then 'Connect'.
Now, there should not be any errors...if not, then continue on.
Close the dialog box.
tymmyt48
24-02-2007, 01:33 AM
Go to the custom attribute 'BoneIndex 01' on the right of your screen and move the slider to the left.
If you have done things correctly, the finger should move up a trifle amount. But, if it moves downward instead...we need to correct this by adding a '-' in the expression box just before the expression.
-degtorad(BoneIndex 01)
Click on 'Update'.
Now, try the slider. It should now move the finger upward a trifle amount (just like our own finger would do) and then it as you move the slider to the right...the finger should move downward about 90 – 100 degrees.
With the above specs, create your custom Attribute sliders to all the other four finger bones. We need to do this in order for orgainzation and tidiness to take place in our controller board on our right-hand side.
I didn't add the Thumb sliders yet...will take care of that soon...
Continued...
tymmyt48
24-02-2007, 02:04 AM
Let's wire up the other two bones in this first finger so that we can see what we're dealing with before we continue on.
Again go to Animation > Wire Parameters > Wire Parameters...
Highlite Object (Point Helper) > Custom Attributes > Index 02...(since this is the second bone in this finger).
Click on the second bone...and Transform > Rotation > Y Rotation...
Since 'Z' was the up and down axis, we want to select it again.
Continued...
tymmyt48
24-02-2007, 02:19 AM
The Parameter Wiring dialog box is up for the second bone.
Try your slider 'Index 02' and move it. Your finger may move wildly around. We don't want that.
So, we need to change the expression a little bit. Type in -degtorad(Index_02).
The '-' in front of the expression will make it so the finger will again move downward. If you didn't include the '-', then the finger bone would most likely bend upward, un-naturally.
Click 'Update'.
Now, can you wire up the third finger bone?
Animation > Wire Parameters > Wire Parameters...
Object (Point Helper) > custom Attributes > Index 03...(the last finger bone)
Click on 'BoneIndex 03'...Transform > Rotation > Z Rotation (once again).
Click 'Update'.
Try your Index 03 slider...and it should work just fine. You might want to play with all three finger bones to get an idea of what we just accomplished here.
Continued...
tymmyt48
24-02-2007, 02:51 AM
Ok. Since we now have all finger bones (1st finger) wired up to move the three bones, we want to be able to do another setup for the fingers.
Instead of manually moving all the fingers to do another particular pose...we are going to rig the hands for a special pose so that all you have to do is move one slider and all the finger bones will move.
I am going to setup another custom attribute so that we can make the fingers do a 'Finger Spread'. Spreading your fingers, we do it with our hands all the time.
We're going to have two different Sliders controlling different rotations of each joint. If we don't add the List Controller to this one finger bone, then when we wire the connection to the second slider it will disconnect the first one, making it useless.
Wiring for 'Finger Spread' will require us to use the 'Y' axis since it is moving perpendicular to the 'Z' axis.
Shall we start?
Select the first bone...'BoneIndex 01'...
Go to Motion Panel > assign controller...
Highlite 'Rotation'...
click on the 'Assign Controller' button...
Click on 'Rotation List' so that we can add this controller to our bone object. Click 'ok'.
Continued...
tymmyt48
24-02-2007, 03:17 AM
Now, I do not want to create another slider directly below the last slider of 'Pinky 03'.
I would like to create a nice way of separating these things.
So, I am going to add a fake custom attribute. This one will not be a working slider...it is only for looks.
In the custom Attribute dialog box:
'Parameter type': Color...
'UI type': ColorPicker...
'Name': Clear it so it is empty...
'Size': (Width) 120 (Height) 10...
'Alignment': Center...
Choose the color you like. I chose blue.
Click 'Add'.
And, it appears in the Modifier's panel.
Now that that is out of the way...
Let's create our 'Finger Spread' custom attribute.
Make sure your point helper is selected.
Animation > custom Attributes...
In your dialog,
...'Slider'...
...'Finger Spread'...
...(Width) '100'...
...(Range) '-10' to '10'...
...(Alignment) 'Center'...
...(Ticks) '4'...
Click 'Add'.
Now make sure that the point helper is still selected.
Animation > wire Parameters > Wire Parameters...
This is the bone of the first finger since it is the only one that will move in two axis. Since we first used 'Z' axis to make the finger go up and down, we now want to make the finger move back and forth...the 'Y' axis.
Click on, 'Bone_Index_L_01'... or as it would appear in the menu...'BoneIndex 01'
Continued...
tymmyt48
24-02-2007, 03:36 AM
The 'Parameter Wiring' Dialog box appears again.
Click on the one-way arrow.
Type in this expression: (degtorad(finger_spread)*1);
Click 'Connect'.
Try your 'Finger Spread' slider and the whole first finger SHOULD move comfortably from side to side. But you see, if you move the three sliders at the top that control the three bones of the finger, you should still be able to get the propper up and down movwement of each bone.
If you got this...then things are going well.
Continued...
tymmyt48
25-02-2007, 03:08 AM
I am now ready to wire up the second finger. I will be going through these rather quickly...hopefully you can keep up with me.
Make sure the Point helper is selected...
Animations > Wire Parameters > Wire Parameters...
Object (Point Helper) > Custom Attributes > BoneMiddle 01...
Select 'Bone_Middle_L_01'...
Transform > Rotation > Z Rotation...
In the Parameter Wiring dialog box, click the one-way arrow, type the expression:
degtorad(BoneMiddle_01)
Click 'Connect'. If the finger moves upward too far, you may need to insert the '-' in there.
Close the box.
Repeat all the steps for the second and third finger bones. If everything works to your satisfaction, then repeat the above steps to finish off the third and fourth fingers on the Z axis.
All the finger bones should be done exactly the same way.
The only difference is when we wire the first bone of each finger for the 'Finger Spread' feature as we have already done for the first finger. But, we will finish that process again after we finish with the Z axis.
If a slider happens to rotate a finger bone too much (or too little) the only way I have figured to correct this is to delete that custom attribute, and recreate it with a different range setting.
But in doing so, this newly re-created attribute will be placed at the lowest point on the controller board at the right.
As I have completed the wiring of all the fingers, I have noticed that there are numerous improvements at our disposal.
One of the improvements, I would change the ranges for the 3rd bone of every finger. You may notice on your own hand that the last finger bones does not rotate very much in comparison to the others. Only about 10 degrees or so in both ways.
The fourth finger, 3rd bone does not rotate in the revers way, so no need to add that feature in that expression.
On our controller board on the right, I have added several features that I would eventaully wire up to my character's hand. But for this tutorial, I am only going to wire up the 'Finger Spread' and a 'Fist' since those are the most common features of a hand.
Continued...
tymmyt48
25-02-2007, 06:21 AM
Now let's complete our 'Finger Spread' process.
Since we already have the attribute slider created on the right-hand side, we do not need to create another custom attribute for another finger.
We are going to be using the same slider for all four fingers.
The thumb will also be included in this feature, but we will be adding that later. Setting up the thumb is going to be quite sophisticated since it is more involved with different rotations.
Are you ready? OK! :)
Let's wire up the 'Bone_Middle_L_01' for the 'Finger Spread' feature.
Select 'Bone_Middle_L_01'...
Go to Motion > Assign Controller...
Highlite 'Rotation' and click onto the 'Assign Controller' button...
Click on 'Rotation List'. And click 'OK'...
we now have this attribute connected to this new finger bone so that we can add another axis movement without disturbing the first up and down movement we just finished with.
Next to 'Rotation: Rotation List' is a '+' sign. Click to open it. It show all three axis XYZ before you.
Since we have already wired up the 'Z' axis, we will now wire up the 'Y' axis for the back and forth movement.
If you are ready..!
Once again, select the 'Point' Helper'...
Animation > wire Parameters > Wire Parameters...
Object (Point Helper) > Custom Attributes > Finger Spread...
Select 'Bone_Middle_L_01'...
Transform > Rotation > Euler XYZ > Y rotation...
And finally, the Parameter wiring dialog box appears.
****************************
Here's the breakdown:
for the 'BoneMiddle 01' bone:(degtorad(finger_spread)*.5);
When you have copied the above expression in for the 'BoneMiddle 01' bone, then click 'Connect' (Or update). Try the 'finger Spread' slider and see what happens. On my rig, the two first fingers move side to side as they are spreading outward. Mine works.
Now, repeat this process for the last two first fingers
For the 'BoneRing 01' Expression: (degtorad(finger_spread)*.5);
For the 'BonePinky 01' Expression: (degtorad(finger_spread)*1);
Now, play with all the fingers...and then play with the 'Finger Spread' to see what happens.
Continued...
tymmyt48
25-02-2007, 07:13 AM
Here is an illustration of my character's fingers in the 'Finger Spread' mode...
Once you have that completed to your satisfaction, then we can go to another feature...
Continued...
tymmyt48
03-03-2007, 06:29 AM
Well, I was finally able to accomplish this section...
I hope that it is helper for you all...
I starting wiring up the original thumb, but I did not like how it was looking.
I deleted it and made a whole new thumb of a different style.
I also added fins to the bones and fingers.
Here goes..!
Your thumb is one of the most evolved joints on your body. Such everyday things as pencils, doorknobs, and buttons are designed for use with opposable thumbs.
Figuring out the thumb rotation for the rig requires more research into how a real hand works. Fortunately, you have all the research material you need right in your hands.
I also started the root (first bone) of the thumb in a different area (4). I've been studying my own hand and this appears to be the way it is. Now, when you first click the screen to start this new bone, don't get too close to the palm bone, otherwise you take the risk of restarting another bone that is already connect to the palm bone. You don't want that. You want to start a separate bone.
I also added an 'Edit Mesh' modifier to the 'palm' bone to High lite the corner vertices (1 & 2) and to move them as illustrated.
After you have made the new thumb bones, do not delete the nub bone (5) as it will help in adjusting the three bones their length you want each bone.
I have left my bones in a straight line, I will change them later on.
I linked the root thumb bone to the palm bone.
The last step I did to improve this setup was to High lite all bones except the palm bone and in the 'Character > Bone Tools'...'Fin' Adjustment Tools', I checked on all fins and put the value of '4.0' into the 'size' spinners.
Continued...
tymmyt48
03-03-2007, 07:17 AM
Prepraring to Wiring the Thumb:
First off, we need to rename the thumb bones...'Bone_Thumb_L_01', 'Bone_Thumb_L_02', and 'Bone_Thumb_L_03', and finally 'Bone_Thumb_Nub_L_04'.
We need to rotate the root bone 'Bone_Thumb_L_01' on the 'Y' axis so that we can turn the thumb onto a 60 degree axis.
We need to rotate it on the 'Y' axis (according to my computer) to get it into position.
Continued...
tymmyt48
03-03-2007, 10:11 PM
Ok. We are going to be making our 'Fist'... which also combines the thumb...
So momentarily let's put the thumb onto the back burner and start with the fingers again.
The first thing we have to do is to click onto the first finger bone 'Bone_Index_L_01' and go into the 'Motion' panel'. Click on 'Available' in the Rotation menu.
We need this extra 'Euler XYZ' controller in order to help us so we don't disturb any of the previous controllers we have already built into this bone.
Now, we have another set of X, Y& Z axis to do this new feature with...
We are going to be doing this step for all of the fingers and their bones. I need to walk you through some of it because the first bones in the four fingers are different from all the other finger bones in their setup.
In this illustration, we are setting up the first bone 'Bone_Index_L_01' in the first finger.
Let's continue...
tymmyt48
03-03-2007, 10:30 PM
We need to set up all the first bones in each fingers...
Click onto the second finger, 'Bone_Middle_L_01'. We want to add another controller to this bone so that we do not cancel out what other controller we already have created in them.
Go to the 'Motion' panel.
We are repeating exactly what we did in the last step...only we are now doing it with the first bone in the second finger.
In the 'Assign Controller' High lite 'Euler XYZ' (5).
Click 'OK'.
Now, you may notice that we have a new 'Euler XYZ' controller where 'Available' was (7).
You may also notice that 'Available' has been duplicated again below, so that we can add more controllers later on if we desire (8).
But right now we are only interested in the highlited area.
Continued...
tymmyt48
03-03-2007, 10:49 PM
Ok, we've done the first bone in both fingers, 1 & 2.
we need to accomplish the exact same step for the last two fingers.
Click onto the third finger, 'Bone_Ring_L_01'...
'Motion' Panel...
In the 'Rotation' menu, again click onto 'Available'...
Open it up and assign an 'Euler XYZ' controller.
Click on 'OK'...
Once that is complete, go to the last finger. Click onto 'Bone_Pinky_L_01' and assign a 'Euler XYZ' into the 'Available' slot in the 'Motion' panel'.
And, click 'OK'.
Now, all the first bones in all four fingers should have the extra 'Euler XYZ' Controllers.
That is good! But, we are still not finished.
We need to add the 'Euler XYZ' controller to the 2nd and 3rd bones of all four fingers. Again...you wouldn't want to cancel any of the other controllers that we've applied to them. Would you?
Now, on this 2nd finger bone 'Bone_Index_L_02' it is a little different.
You see, we only have one controller on these bones, we have not added any extra controllers because we didn't need to at the time. You notice there is no 'Available' listed?
We need to add the 'Rotation List' controller to give us ability to add more controllers...as we see fit.
Click on the 'Rotation: Euler XYZ'...
Add the 'Rotation List' controller...
Click 'OK'.
Adding this 'Rotation List' enables me now to add another 'Euler XYZ' controller. That's what the 'Available' is for.
Highlite the 'Available' and click on the controller button...
Again, choose the 'Euler XYZ' controller.
Click 'OK'...
Done!
We have the 2nd bone 'Bone_Index_L_02' completed except for the wiring which will come a trifle later.
Now, we need to do this very same step for 'Bone_Index_L_03'...
'Bone_Middle_L_02'...'Bone_Middle_L_03'...
'Bone_Ring_L_02'...'Bone_Ring_L_03'...
'Bone_Pinky_L_02'...'Bone_Pinky_L_03'...
Click onto 'Rotation: Euler XYZ'...
Click on the 'Assign Controller' button.
High lite 'Rotation List' controller and click 'OK'...
High lite 'Available'...
Add 'Euler XYZ' controller to it...
Continued...
tymmyt48
03-03-2007, 10:58 PM
Now, assuming you are finished with all the fingers and the new 'Euler XYZ' controller, we will now continue with wiring all the fingers up to the 'Fist' attribute.
Select 'Point01' Helper...
Animation > Wire Parameters > Wire Parameters...
Object (Point Helper) > custom Attributes > Fist...
Click onto 'Bone_Index_L_01'
Transform > Rotation > Euler XYZ (the second one) > Y Rotation...(according to my computer)...
Continued...
tymmyt48
03-03-2007, 11:05 PM
Important*: Please remember that these expressions are one's that worked well in my computer. You may require adjusting here and there.
This expression is for the first finger bone, 'Bone_Index_L_01'...
-(degtorad(Fist)*.8);
This expression is for the first finger, second bone, 'Bone_Index_L_02'...
-(degtorad(Fist)*1);
This expression is for the first finger, third bone, 'Bone_Index_L_03'...
-(degtorad(Fist)*.6);
This expression is for the second finger, first bone, 'Bone_Middle_L_01'...
-(degtorad(Fist)*.8);
This expression is for the second finger, second bone, 'Bone_Middle_L_02'...
-(degtorad(Fist)*1.05);
This expression is for the second finger, third bone, 'Bone_Middle_L_03'...
-(degtorad(Fist)*.6);
tymmyt48
03-03-2007, 11:15 PM
This expression is for the third finger 'Bone_Ring_L_01'...
-(degtorad(Fist)*.9);
This expression is for the third finger 'Bone_Ring_L_02'...
-(degtorad(Fist)*.8);
This expression is for the third finger 'Bone_Ring_L_03'...
-(degtorad(Fist)*.8);
This expression is for the fourth finger 'Bone_Pinky_L_01'...
-(degtorad(Fist)*1);
This expression is for the fourth finger 'Bone_Pinky_L_02'...
-(degtorad(Fist)*.7);
This expression is for the fourth finger 'Bone_Pinky_L_03'...
-(degtorad(Fist)*1);
Continued...
tymmyt48
03-03-2007, 11:22 PM
Now, the thumb:
Select the thumb first bone 'Bone_Thumb_L_01'...
Go to the 'Motion' menu...
In 'Assign Controller'...highlite 'Rotation'...
Click onto the 'Assign Controller' button...Click onto 'Rotation List'...
'OK'
In the 'Rotation' menu is 'Available'...we are going to assign another controller to it.
High lite the 'Euler XYZ' controller and click on 'OK'...
Now, we have that extra 'Euler XYZ' controller so that we can add multiple controllers to the thumb without disturbing any other function.
Once you have completed the first bone, the root bone, 'Bone_Thumb_L_01'...
Then do the exact same steps with the second bone, 'Bone_Thumb_L_02'...
...and third, 'Bone_Thumb_L_03'...
When completed, we should now be ready for the wiring aspect.
Continued...
tymmyt48
03-03-2007, 11:36 PM
Select 'Point helper'...
Animation > Wire Parameters > Wire Parameters...
Object (Point Helper) > Custom Attributes > Fist...
Select the first bone, 'Bone_Thumb_L_01'...
Transform > Rotation > Euler XYZ (1st one) > Z Rotation...
Type in: -(degtorad(fist)*.4);
'Bone_Thumb_L_02'...Transform > Rotation > Euler XYZ (1st one) > Y Rotation...
(degtorad(fist)*.4);
(Disregard that in the illustration, the expression is on the left. When you go through these steps, you will be typing the expressionin the right-hand box)
'Bone_Thumb_L_03'...Transform > Rotation > Euler XYZ (2nd one) > Z Rotation...
(degtorad(fist)*.4);
My hand is all rigged up for the 'Fist'. Is yours ok?
Continued...
tymmyt48
03-03-2007, 11:41 PM
I realize that this hand and thumb is far from perfect, but it is what I have at this time.
If you come up with something much better, would you mind sharing it with me?
We completed the 'fist' feature, we should now finish off this hand with the 'Finger Spread' feature.
We could also go on with other custom attribute sliders as to control the thumb bones into lots of different positions. But, in this tutorial, I will stop at the 'Fingers Spread'.
Try everything out.
Put the 'Fist' slider back to normal, and then try all of the fingers. You will see that you can move them independently. That is what we wanted.
You can also move the 'Fingers Spread' independently.
So far-so good...
tymmyt48
05-03-2007, 06:09 AM
I will have more up soon.
I just went to a site and found a pretty good character rigging tutorial. I've been looking through it and have found some things that I may incorporate into my rig.
As I've read many times throughout my research, there are many ways to rig a character. It all depends on what you want it to do.
This tutorial that I've been posting here is from the 3dsmax 5.0 professional tutorial. Although it appears to be quite advanced, I'm finding it otherwize, because I've found many improvements amongst other tutorials.
I want to apply the improvement to the foot as I've stated throughout this tut, I also want to finish off the IK/FK blend feature on the arm.
I also want to show how to rig eyes to follow an object. I am presently learning to rig a head, to create realisctic ears. I also want to create realistic eyelid with a controller.
And anything else I can think of to add to this tut before I log off.
I truely wish that I would get responces from viewers on this tut, but it is vwery rare.
There have been many time when I wished someone out therer would be kind and generous to show me how to rig a character. But, I came across none. so I decided to do it through the profession tut that came with r5.
I'll be back soon with more...
Tim
tymmyt48
09-03-2007, 01:26 AM
I will post the improved foot 'toe roll' on here...
Tim
p.s. Anybody have any suggestions?
tymmyt48
10-03-2007, 02:45 AM
Originally I was going to show you how to change the foot controls to a better way. But, I got to thinking, how do I know it is a better way? Some of you out there may not agree.
So, I will simply show a different way and give you the option of how you want to rig a foot on your own character.
At the beginning of this huge tutorial, we built the skeleton (bones) in the legs and feet. Then we proceeded to rig it with controls to do a variety of things. I have learned so much from this...
I then mentioned that I had a better way of providing better foot rotations...
So here is another way you can do it. It is all up to you how you want to rig your character's foot.
As seen in the illustration, I have applied bones in the foot for our original (right side) and for the new one (left side). There is a difference...it may be obvious to you.
Continued...
tymmyt48
10-03-2007, 02:49 AM
As shown here, we set up Iksolvers...
'Bone_L_Leg_Upper'...Animations >IK Solvers > HISolver... 'Bone_L_Foot'.
'Bone_L_Foot'...Animations > IK Solvers > HISolver... 'Bone_L_Toe'.
'Bone_L_Toe'...Animations > IK Solvers > HISolver... 'Bone_L_Toe_Tip'....
This is exactly what we did in the beginning exercise.
This gives you three new IK Goals to rename.
tymmyt48
10-03-2007, 02:57 AM
The first IK Goal at the heel is named 'IK_Heel_R'...
The second IK Goal at the ball of foot is named 'IK_Ball_R'...
The third IK Goal at the toe is named, as you probably guessed, 'IK_Toe_R'...
Now, we want to link them altogether...
Link ...'IK_Heel_R'... to ...'IK_Ball_R'... (A)
Link ...'IK_Ball_R'... to ...'IK_Toe_R'... (B)
Continued...
tymmyt48
10-03-2007, 03:07 AM
Create the control objects:
Create a rectangle as illustrated...
Align this rectangle to the XYZ position and Orientation of 'IK_Ball_R', and then physically move it down so that it touches the ground.
Rename this to 'Foot_L_Control'...
Link ...'IK_Toe_L'... to ...'Foot_L_Control'... (C)
Now, select your 'Foot_L_Control' and move your foot around. Mine moves very well.
Continued...
tymmyt48
10-03-2007, 03:11 AM
Add Custom Attributes:
Select 'Foot_Control'...
Choose Animation > custom Attribute...
Name: Roll...
On the Float UI Options rollout, change the range '0 to 90'...
Click 'Add'...
The new modifier is now on the Modifiers panel. You also notice that we did not choose 'Object's Current Modifier'. We kept it at its default, 'Object's Base Level'.
Wire the left foot...
Now, we will wire the Roll parameter to cause the heel to come off the ground. Before setting up the wiring, you should increase the active time segment.
By default, parameter wiring works over the time segment that was active when you set up the wiring. Although you can change this in Trackview after setting up the wiring, it's usually easier to set the time segment to the longest time you think you'll need before doing the wiring.
I set my time length to 10000.
Make sure that 'Foot_Control' is selected...
Choose Animation > Wire Parameters > Wire Parameters...
From the Pop-up menu...Object (rectangle) > Custom Attributes > Roll...
Select 'IK_Ball_R(or L)'...and Choose, Transform > IK Goal > Rotation > X Rotation...
Continued...
tymmyt48
10-03-2007, 03:17 AM
In the lower right section of the 'Parameters Wiring' dialog box, change 'Roll' to (without the quotes) 'degtorad(Roll)'.
Click the right-arrow...
Click 'Connect'...
Select 'Foot_L_Control' and access the Modify panel. Change the Roll spinnerand and observe the results.
Continued...
tymmyt48
10-03-2007, 03:21 AM
As you change the value in your attribute spinner, the heel of the foot should go up. If it does not, then you need to look back and redo.
Reset the value back to '0'.
Adding the 'Toe'...
Right now, when you change the Roll parameter, the heel comes off the ground. But, what about the toe? Eventually, the toe will have to rotate so the entire foot can come off the ground.
You can make the Roll parameter effect the rotation of the toe as well as the ball of the foot. Any wired parameter can effect more than one parameter in the scene. This type of multiple wiring is handy for controlling more than one part of the character with a single control.
In this case, you're going to have the Roll parameter effect the Toe rotation, but only when Roll exceeds 35 degrees. The expression you will use for the IK chain at the toe, will follow this logic.
If Roll < 35, do nothing.
Otherwize, start rotating.
Select 'Foot_L_Control'...
Animation > Wire Parameters > Wire Parameters...
Object (rectangle) > custom Attributes > Roll...
Select 'IK_Toe_R(L)'
Transform > IK Goal > Rotation > X Rotation...
The 'Parameters Wiring' dialog appears...
You should see 'Roll' in the bottom right-hand box. Change that with the following expression...
if (Roll < 35) then 0.0; else degtorad(Roll-35);
Click on 'connect'.
Continued...
tymmyt48
10-03-2007, 03:27 AM
Again, try your attribute spinner at the right.
At '0' value, you whole foot is on the ground... (A)
At '35', you foot is leaning forward, but the toe portion is still motionless...But, this is the point in which the toe starts to rotate too! (B)
At '70' value, both your foot and toe move forward as when taking a step. (C)
In the original foot setup, I could not do this foot and toe rotation...atleast I did not know how to do it.
Now, you can keep on adding whatever controls you desire.
Continued...
tymmyt48
10-03-2007, 03:33 AM
Put the value back to '0'.
What if you wanted to reduce the ball roll...right now it does not look natural.
When you increase Roll past 35 degrees, the heek continues to rise. This does not represeent natural movement. In life, when you bring your foot off the ground, it starts to straighten after the toe comes up. Byt the time the toe reaches a 90 degree angle with the ground, the foot is nearly or completely straight.
We can make things more natural...
Select 'IK_Ball_R(or L)'...
Right-click the track bar at the bottom of the screen, and choose Controller Properties > IK_Ball_R:X Rotation...
The 'Parameter Wiring' dialog appears, but the wiring expression is on the left rather than the right.
In the entry area at the bottom left of the dialog, replace degtorad(Roll) with the following expression:
if (Roll < 35) then degtorad(Roll); else degtorad(70-Roll);
Click on 'Update'...
This expression is a little more complicated. Basically, we need to find a way to gradually reduce the balls rotation as Roll passes 35 and gets larger.
Let's look at how this works. Suppose Roll is larger than 35, which means the second expression, the one after the 'else', will be used. In this case, the equation (70-Roll) will be used. This equation causes the X Rotation for 'IK_Ball_L' to decrease as Roll increases beyond 35. I used the number 70 because it is equal to 2 times 35, so to change from increasing to decreasing rotation will be smooth when Roll hits 35.
Continued...
tymmyt48
10-03-2007, 03:35 AM
So, try your spinner again in the Modify panel and see what happens to the foot.
Personally, I think this looks so much better. Now, you have perfect control over the foot and toe when you want to make a step.
Continued...
tymmyt48
12-03-2007, 12:23 AM
Rigging the Hand to the arm:
Now that the arms are complete (except for the 3 box'd helpers), you’ll connect the hands to the ends of the arms.
Setup:
If you try moving and rotating a hand control, you’ll see that you can move the control away from the end of the arm.
The arm then tries to “reach out” to get to the control. While the rotation of the hand control should eventually control the rotation of the hand itself, you cannot parent the hand directly to the control. If you did, the hand and end of the arm would separate when you moved the control too far away.
Rather than forcing the animator to make sure the hand control never gets too far away from the arm, you can use constraints to avoid the problem.
In this lesson, you use Point Constraint (position constraint) to constrain the hand to the last arm tip bone...
...and then use Orientation Constraint to constrain it to the actual control.
The hand will then stick to the end of the arm, but rotate as needed based on the hand control.
Constrain the hand to the arm:
Select 'Bone_L_Palm'...
Choose Animation menu > Constraints > Position Constraint to constrain 'Bone_L_Palm' to the last arm-tip bone, 'Bone_L_Arm_Wrist'. (A)
On the Motion panel, click Keep Initial Offset in the Position Constraint rollout. (B)
Continued...
tymmyt48
12-03-2007, 12:35 AM
Choose Animation menu > Constraints > Orientation Constraint... to constrain 'Bone_L_Palm' to the 'Hand_L_Control'.
On the Motion panel, click Keep Initial Offset in the Orientation Constraint rollout.
By using the Keep Initial Offset options, you get the proper position and orientation you want, but retain the initial bone position and rotation for the hand, which you don’t want to adjust.
Continued...
tymmyt48
12-03-2007, 12:42 AM
At this point, the 'Hand_L_Control' can now move the IK arm around, and the hand follows.
If you rotate 'Hand_L_Control', it also rotates the hand, as intended.
If you pull the 'Hand_L_Control' too far out, the hand still maintains the rotation you've set, but the point constraint keeps it properly tacked onto the end of the arm.
Continue...
tymmyt48
12-03-2007, 12:56 AM
Another picture for you...
tymmyt48
12-03-2007, 01:10 AM
Wrist Twists:
Before you move onto the hands (we already did the hands, so hopefully this will work. If it dows not...then redo the twist bones first and then redo the hand attachment), you'll set up the extra “wrist twist” bones that you created earlier.
The wrist twist bones will be controlled by another custom attribute.
Using this control, the animator can rotate the twist bones so that they smoothly ramp more and more rotation down the chain towards the hand.
This way, if the hand is twisted, the arm can smoothly blend to it after skinning.
Set up the wrist twist bones:
Select 'Hand_L_Control_Helper'.
To the object’s current modifier, add a custom float attribute called 'Wrist_Twist' that goes from –360 to +360.
Using Wire Parameters, wire the X Rotation of the 'Wrist_Twist' attribute into the first wrist twist bone, 'Bone_L_Twist_Wrist_01'. Choose a one-way connection.
Select, 'Bone_L_Twist_Wrist_01'.
For the first bone, enter the following script expression:
degToRad wristTwist*0.25.
Click onto 'Connect'...
tymmyt48
12-03-2007, 01:16 AM
As you learned earlier, you'll want to change the attribute value that represents degrees into radians.
You'll also want it to rotate only a percentage of the entire value.
You”ll use a 25%, 50%, and finally 75% for each bone down the chain.
For the first bone, you entered:
degToRad wristTwist*0.25.
Repeat the same steps for the second bone. type in the expression:
degtorad wristTwist*0.50
Click 'Connect'.
Repeat the same steps for the third bone. type in the expression:
degtorad wristTwist*0.75
Click 'Connect'.
tymmyt48
12-03-2007, 02:18 AM
Ok...so now I have connected the hand to the arm. I have also made capabilities to rotate the hand by selecting 'Hand_L_Control'.
Well, this control is not really sufficient for me. I want to add more leverage.
Add a 'circle' shape and size the radius to '14' (accoding to my screen) exactly the same size as the 'Hand_L_Control'.
Continued...
tymmyt48
12-03-2007, 02:27 AM
Align it (Position only) to the 'Hand_L_Control_Helper'
Rotate it 90 degrees on the 'Y axis'.
Select the circular helper and make a copy of it.
Again, we will rotate this new helper on the 'Z' axis (according to my screen).
Now, you have two helpers perpendicular to the 'Hand_L_Control_Helper'.
We want to put these two helpers into a group setting so they will act as one. Go to the top menu, Group > Group...
Name the group 'Hand_L_Rotation_Helpers'.
Since we already linked the 'Hand_L_Control' to the first rotation helper, then we should be all set.
Rotate the helpers in all directions and you may find that it is easier to handle with all these helpers. I know I do!
tymmyt48
12-03-2007, 02:34 AM
All the helpers we need for the rotation.
I might even set up some custome attributes so that I can have perfect control over all rotation of this hand. but, that will be another time.
tymmyt48
13-03-2007, 02:35 AM
Ok, now we're not done with the arms yet. I am still doing some research on an issue I have with the arms and I will try and get to it soon.
Until then, I will wire up some controls to our eyes.
Please, don't laugh at my eyes (chuckle). These are only simple models for demonstration purposes.
Rigging the Eyes:
At this point, the character's body rig is nearly done. Next you'll add some controls to handle the eyes.
Continue...
tymmyt48
13-03-2007, 02:47 AM
Using an Orientation Constraint on both eyes so that they are controlled by a helper object.
Create your helper object. Which kind to create is a completely personal preference.
You can use geometry, splines, or Max's ready made helpers. I prefer the Point helper myself.
Make sure you place it in front of the eyes, a foot or two away from the face. The exact distance doesn't matter, but it makes it easier to animate if it's out in front of the head somewhat. Which kind of helper to create is a personal preference.
Continue...
tymmyt48
13-03-2007, 03:29 AM
Select, 'Eye Left'...
Go to the Motion panel...
expand the Assign Controller menu, and select Rotation. Click on the Assign Controller button (the question mark).
Select 'LookAt Constraint' from the list.
Scroll down the panel and select the Add Orientation Target button...
...and then select the helper object which is probably labeled (Point01) as the target.
The eye might rotate after you select the target, but this is normal. Go to the next step to fix this.
Scroll down further and 'check' the Keep Initial Offset box.
There are many other options available with this controller, but you shouldn't need to change any of them to make this work. If you like a clean viewport, however, you might want to change the Viewline that is created when you use this controller. You can either 'uncheck' the Viewline Length Absolute box, or change the Viewline Length to 0 to get rid of it completely.
Continue...
tymmyt48
13-03-2007, 03:32 AM
Once they're both set up you can move the helper object around the scene and the eyes will follow it wherever it goes. You'll probably want to link the helper object to the head so that the eyes don't move until you want them to.
This technique is pretty straight forward to set up and is easy to animate with.
Continue
tymmyt48
13-03-2007, 04:12 AM
Here's some other things you can do with this setup:
You can also achieve the same effect by selecting the ball, or whatever, as another LookAt Target. You can have many LookAt Targets for your eyes. Then you would animate the Weight for each target to have the eyes look at different objects.
A weighting of 0 means the eyes don't follow that object at all, and a weighting of 100 means the eyes follow that object exclusively. The drawback to this approach is that you have to animated the weighting for both eyes individually. It's much easier to just link the helper object to whichever item you want the eyes to follow.
But, this is in another tutorial...
Using the Rotation List controller.
If you want to be able to rotate the eyes manually, or independently from each other, after you set up the LookAt or Orientation Constraint controllers, you'll have to use a List controller.
This is one of the more handy controllers, and you can use it on Position and Scale, as well as Rotation. What it does is allow you to combine multiple controllers on one object.
In this case we need it to assign both the automatic animation type controller we've already went over, and the Euler XYZ controller so we can take back control of the eyeball when we want.
First thing you want to do is...
select the left eyeball once again.
Go to the Motion Panel and under the Assign Controller menu, click on Rotation.
Then click the Assign Controller button (the question mark), and select Rotation List.
Now if you expand the Rotation Controllers tree you'll see a new controller slot labeled Available.
Highlight Available, click on the Assign Controller button,
and select Euler XYZ from the list.
Now you'll see the Euler XYZ controller in your Rotation drop down list, along with whatever controller you applied previously. Plus, the Available slot is still there so you could add more controllers if you wanted.
The List Controller...
Do the exact same for the right eye...
In order to accomplish this task, you need to select the 'left_eye', and in the modify panel, in the Rotation List menu...
Highlite the 'Euler XYZ' that we just made. Make it active.
When you want to switch back to the 'Lookat Constraint', then make it active.
This is a necessary component to many character rig setups. You'll usually apply it before applying any custom controllers so that you can always go back and manually move a bone or other part of the body. Now would be a good time to investigate the other controllers available and see what they do.
I'll go over one in particular next that can come in handy in certain, specific situations.
Continued...
tymmyt48
13-03-2007, 05:54 AM
Picture #2
tymmyt48
13-03-2007, 05:59 AM
Using the Noise controller.
This is one of those things you'll probably rarely use, if ever. But if you come across a need for it you'll be glad you know about the Noise controller. What it does is add random motion to an object, and does it a hundred times better and faster than you could do it by hand.
First of all, I'm assuming you've added a Rotation List controller like I went over in the last technique. If so, select the, 'eye left'...
then go to the Motion Panel
and under the Assign Controller menu, expand the Rotation menu, and highlight the Available slot.
Click on the Assign Controller button (the question mark), and select Noise Rotation.
A window pops up that allows you to change the parameters of the noise.
These are the settings that worked for me, but play around. You can hit the play button and have the animation play in the background while you change the parameters. This way you get instant feedback from your changes. The Strength spinners can be animated so that you can apply the noise only when you want it.
If you ever need to go back and change the parameters, just right-click on the controller and select Properties.
Now, do the same for the right eye.
tymmyt48
13-03-2007, 06:12 AM
Using Wire Parameters and Custom Attributes to move the eyes;
Here's a nice trick if you want to add that extra bit of realism to your animations.
The thinking behind it is that the eyes tend to rotate away from each other slightly when a person is looking at something very far away or just "zoning out", and rotate slightly towards each other when the person is looking at something very close, like reading a book.
First thing to do is select the helper object you're using to animate the eyes...
Select, 'Point01'...
then select Add Custom Attribute from the Animation drop down list. You don't want to add the CA (Custom Attribute) to the eyes themselves because that would defeat the whole objective of making animation as easy and efficient as possible.
Now you'll see a window where you can set the parameters of the CA.
Make sure you set it up the way you want it because the bad thing about CA's is that you can't easily go back and change them once you've hit Add.
Keep the Parameter Type at Float,
and change the UI Type to whatever you like working with. Personally, I prefer the Slider because it's easier to get back to the default setting by just right-click on it.
Change the name to something that makes sense. 'EyesIn&Out'.
Width doesn't really matter... I use 160.
You can see a preview of the CA at the bottom of the window so you will be able to tell if you need to change this. The Range is very important.
For this technique we'll be setting it at -1 to 1 with the default at 0. You can change it to whatever you want depending on your needs, but if you leave it at -1 to 1 it's easier to change the wiring if you need to.
This will make sense in a minute.
I also like to add ticks as to tell me the slider is centered properly. I add '3' that way I always know when the slider (eyes) is centered.
Make sure the CA is set up the way you want by looking at the Testing Attribute section.
If it's okay then click Add.
tymmyt48
13-03-2007, 08:13 PM
Hi Everyone,
It seems I have reached my limit on this post here...for some reason I am having trouble uploading my illustrations.
So, I will attempt to continue this long tutorial at ...
3d Advanced Character Rigging...Part II. It is located in the 'Tutorial' section.
see you there...
vBulletin® v3.7.4, Copyright ©2000-2013, Jelsoft Enterprises Ltd.