Constraints

In max some of the constraints available have similar functions. If you want to simulate a character grabbing and moving an object it's possible that you might make use of either the "Position" OR the "Link" constraint.

The "Link" constraint seems to be the one recommended by most for such a job but has one drawback when compared to the "Position" restraint. If the object is picked up and moved several times then it will result in a length list within the constraint rollout window which may become harder to manage. When using the "Position" constraint you simply keyframe the weights between two or more options as you see fit. To better understand this difference let's look at both.

Link constraints

First the "Link" constraint which makes use of postition, rotation, and scale by default. This constraint is useful for having a character "pick up" or hold an object and releasing it when you wish.

  1. Create at least two objects on a scene. One to be constrained and one to do the constraining.
  2. Move the main timeline to position "0".
  3. Select the object to be constrained ("held" by the other object).
  4. Go to the motion tab.
  5. Click the "Transform" entry in the list of the "Assign Controller" rolldown.
  6. Click the "Assign Controller" button under the "Assign Controller" rolldown.
  7. Click the "Link to World" button (this will allow you to move the object independently by hand if needed) under the "Link Params" rolldown.
  1. Move the main timeline to the point you want to begin constraining the object.
  2. Click the "Add Link" button (this enables a selection mode even if it's not immediately apparent).
  3. Click the object that will constrain the constrained object.
  4. To make the constrained object stop following the constrain target you need to just re-link it to the world by hitting the "Link to World" button at the appropriate time again.

So as you can see the idea is to build a list of when the constrained object is made a temporary child of what object is shown in the "Link Params" list.

In the "Link" approach to constraining you can think of alternating between the "Link to World" and the "Link to object" commands as keyframes in their own right. In the image shown here (a rolldown in the "Motion" tab) we have a constrained object that is free in the world at frame 0, is constrained to another object at frame 15, and repeats for 25, 55, and 65.

This pattern might be seen in a character juggling a ball or a using a computer mouse repeatedly, etc.

Position Constraints

The position constraint is marginally easier to keyframe but has the drawback of not allowing the constrained object to move on its own. Once the position constraint is used to attach one object to another you'll notice that you can not move the constrained object directly. But there is a way to get around that by simply making the constrained object a child of another target object.

That's the strength of Max Position constraint, it can target multiple constraining objects at once and mix between the strength of those constraints on the fly.

  1. Make two dummy objects.
  2. Parent one of the dummy objects to the object you want to do the constraining.
  3. Add the position constraint to the object to be constrained by simply going through "Animation > Constraints > Position Constraints".
  4. The "attach" line will be visible in the main viewport. Click on one of the dummies. The constrained object will snap to the position of the dummy.
  5. Repeat the previous step and add another constraint while the object to be constrained is selected but this time attach it to the other dummy object.

While the constrained object is selected go to the "motion" tab. You should see the first and second dummy listed under the "Position Constraint" roll down. At this time the constrained object should suspended between the dummy objects evenly. If you were to move one of them then it would remain exactly between them. What you need to do at this point is simply change the weight value involved to dictate which dummy the constrained object should follow.

It's this weighting which can be key-framed and allows you to temporarily "attach" the object to one of the dummies. Though for this to work you have to make sure the weights CAN be animated and this may require the keyframing of object parameters be available.

  1. Click the "Key Filters..." button at the bottom of the screen near the timeline.
  2. Check "Object Parameters" if it is not already checked and close the "Key Filters..." window.

With this option enabled the "weight" value within the "Position Constraint" roll down can be recorded within keyframes. By setting one dummy to a weight of "0" and the other to "100" within the span of a single frame you can change which dummy controls the constrained objects position.

Hence the dummy that is a child of the constraining object becomes the target point of the "carrying" object and the dummy that is free becomes the new point of animation for the constrained object when it needs to run on its own.

Controllers

In 3DS Max there are multitude of controllers. Most of them can be found in the same "Animation" menu where constraints are found.

Wire ParametersThese are also good for building things like elevator doors which have to close at the same time.

In 3DS Max the term Wire Parameters refer to a specific interface in which you can connect one or more properties of two objects to one another. This means that you can connect the translation of object A to the rotation of object B, or the scale of object C to the scale of object D. The connection can be one way or two way, meaning that one object can have complete control over another or the movement of either object will affect the other.

The wire parameter dialog can be found by selecting "Animation > Wire Parameters. Within the sub group are two options. The first will automatically apply a wire parameter to the selected object while the second brings up the Wire Parameter Dialog (in case you want to edit an existing wiring).

It may also be useful to select the second option to have full control over the wiring of the first object.

Once the wiring dialog is open you can follow these steps to establish a link between two objects (we presume there are at least two objects ivisible in the viewport to begin with).

  1. Click the first object (will act as the master by default).
  2. Select the "refresh" button for the left column (the spinning arrows icon).
  3. Select the 2nd object in the wire pair.
  4. Select the "refresh" button in the right column.
  5. Select the desired property of the first object in the left pane.
  6. Select the desired property of the second object in the right pane.
  7. Click one of the arrow symbols in the center to decide the direction of the wire.
  8. Click "connect" (or "update" if you are changing an existing wire connection)
  9. Click "Ok" to finish the process and close the wire dialog.
The Wire Parameter dialog. In this case we've established a two-way connection between the Y rotation of a Bone object with the Z rotation of a Circle object.

At this point you can test out your new wiring. Selecting either of the objects (if you established a two way connection) and adjust the property that your chose to attach via wire. So if you wired the rotation of the objects together, rotate the object. The property of the other should be modified as well causing it to move.

Now by default the wiring is 1 to 1. This means that if we were to wire the Y coordinate of object 1 to the X rotation of object 2 and then moved object 1 to a Y translation of "50" then object 2 will rotate 50 degrees on the X axis.

Usually this is not a problem. But if you are creating a controller interface, for a complex character for instance, then you might want to adjust the speed that wired object move at. In the Wire Parameter dialog you probably noticed two boxes at the bottom. These are "formula" windows where you can add mathematical operations to change the behavior of the wire.

In the case of the previous example we could simply add "* 2" to the formula so that it reads "x_rotation * 2" and the result would be that moving object 1 to a Y translation of 50 would result in an X rotation of 100.

Also keep in mind that if you do use Wire Parameters to create character controlling interfaces you will want to make the controlling objects children of the parent object to keep them in the same place. Perhaps not a child of the actual controlled object but of a containing null object (dummy) that the entire character exists within.

To disconnect a previously made wire when the objects are no longer the focus of the Wire Parameter dialog follow these steps.

  1. Locate at least one end of the wire in one of the parameter columns and select one end of the wire you wish to disconnect.
  2. In the other column press the "Show All Tracks" button (the folder icon).
  3. Right next to the same icon choose the "Find next parameter..." button (the binoculars icon). If more than one wire connections have been made to your current property you may need to press it more than once.
  4. Press the "disconnect" button.

Other Controllers

Screw'em, respect the glorious wire controller!

...or read about them here.

Solvers & Kinematics

There are a couple of different solvers included in 3DS Max but the most typical of them that I'd like to look at is the "HI Solver".

  • In 3DS Max a solver should be added by first selecting the base connection that is *higher* up the chain. In other words if you are applying a solver to a character's arm then select the shoulder bone.
  • At that point you can select "Animation > IK Solvers > HI Solver" from the main menu.
  • You will notice a dashed line extending from the selected bone to your mouse cursor. Click the *end* of the chain where you want the solver to point towards.

At this point Max will automatically create and position a solver target in the form of a cross dummy. This helper target is what you should move to reposition the end of the solver chain (NOT the bone / object you selected after activating the solver).

If you want to access the properties and options for your newly added solver then be aware that some solvers (like the HI Solver) will NOT add modifiers to the objects involved. Instead you'll need to click on the helper controller that was created in the process and then go to the "Motion" tab in the Command Panel (to the right of the modifier tab).

Now you could adjust the angle that the bend will point outwards at by changing the "Swivel Angle" value under the "IK Solver Properties" rollout but chances are you won't always want your bend angle to be constant. Think about your legs. If you were to do a squat down towards the ground then your knees would naturally separate slightly because that's what is most comfortable for us. For that kind of movement we want to choose a target for the bend that we can change the position of.

This too is simple enough. Create a new helper in the scene, of any kind you like, and then choose the "Pick Target" option right under where you see the "Swivel Angle" value (It will say "None" by default).

Morphs

WIP