Animatable Models Part 1 - The Concepts

When creating LDraw models, there are several techniques you can use so your models are easily animated. This article will show three short techniques that will make it easy to use LDraw models in animations.

Even if you have no plan to animate your model, if you follow these three techniques, you can easily pose your model for stills or you can contribute your model to amateur animators like myself who do not have the time to create models! (shameless request) Here is an example of some poses that were easy to create once the model was designed using the three techniques shown in the article.

The article will not cover how to animate. If you desire to make animations, you should still read this as it will cover issues you will run into when creating animations, but creating an animation will not be shown. You can download the files used to create the animation seen above though.

Movable Parts

The most important tip is that you should use separate files or an MPD sub-model for any part or group of parts that will move together. If you have a jet with no moving parts except a cockpit window, then the main file is the jet body, and the separate file or sub-model should consist of the cockpit window. If you have a robot with many joints, each limb portion should be in a separate file such as hand, lower arm, upper arm, torso, head, hip, upper leg, lower leg, and foot.

If you put the different part or part groups in separate files, they can be assembled into an MPD file so it is easier to share with others. Read how to make MPD files.

Parent and Child

When you have parts that are connected to other parts that are connected to other parts, you need to decide which part is going to be the parent. To use the body as an example, say you have these files:

head.ldr
torso.ldr
right_up_arm.ldr
right_low_arm.ldr
right_hand.ldr
left_up_arm.ldr
left_low_arm.ldr
left_hand.ldr
hip.ldr
right_up_leg.ldr
right_low_leg.ldr
right_foot.ldr
left_up_leg.ldr
left_low_leg.ldr
left_foot.ldr

You want to make the hip the parent of all other body parts. The hip.ldr file will contain the parts that make up the hip, and it will also contain these three files:

torso.ldr
right_up_leg.ldr
left_up_leg.ldr

The right_up_leg.ldr would contain the parts for the right upper leg and this file:

right_low_leg.ldr

The right_low_leg.ldr would contain the parts for the right lower leg and this file:

right_foot.ldr

The torso.ldr file would contain the parts that make up the torso and these files:

head.ldr
right_up_arm.ldr
left_up_arm.ldr

The arms would contain the parts for each arm segment and the child arm/hand file.

That makes the hip the parent of all, and each file in succession is a parent of another file until you reach the head, feet, and hands which are the parent of no files (unless a hand holds something).

Rotation Points

Using the body example from above again, each file that is a parent file contains a child file. The location of the child file is determined by the child file's location of <0,0,0>, the origin. You want to model the child part so that the origin is the rotation or connecting point of the child part.

The rotation points for our hypothetical model are the hip socket joints, the knees, the ankles, the shoulders, the elbows, the wrists, and the neck.

Here is the origin of the following files:

head.ldr - the bottom of the neck is <0,0,0>
torso.ldr - the bottom of the torso is <0,0,0>
right/left_up_arm.ldr - the shoulder is <0,0,0>
right/left_low_arm.ldr - the elbow is <0,0,0>
right/left_hand.ldr - the wrist is <0,0,0>
hip.ldr - the point between the two hip sockets
right/left_up_leg.ldr - the hip socket
right/left_low_leg.ldr - the knee
right/left_foot.ldr - the ankle

In each parent file, the child file will be located exactly where the rotation point is. For example, the hip is centered at <0,0,0>. Suppose the hip is 40 wide and 32 tall, like this:

1 7 -10 0 0 0 0 1 0 1 0 -1 0 0 2458.dat
1 7 10 0 0 0 0 -1 0 1 0 1 0 0 2458.dat
1 7 0 -8 0 1 0 0 0 1 0 0 0 1 3680.dat
1 7 -30 0 0 0 0 1 0 1 0 -1 0 0 right_up_leg.ldr

The location of the torso inside of the hip would be:
1 7 0 -8 0 1 0 0 0 1 0 0 0 1 torso.ldr

Inside of torso.ldr, the first part would be the top of the turntable and it would be located at the origin (not <0,-8,0>):

1 7 0 0 0 1 0 0 0 1 0 0 0 1 3679.dat

The location of the right leg inside of the hip would be:

1 7 -30 0 0 0 0 1 0 1 0 -1 0 0 right_up_leg.ldr

And the center of rotation in the right_up_leg.ldr is:

1 7 0 0 0 1 0 0 0 1 0 0 0 1 3700.dat

WAIT! This is wrong. The reason why is because if you edit hip.dat and rotate right_up_leg.ldr, this is what you get:

LDraw parts do not have origins around the pivot points, so you need to move them so that the origins are centered around the pivot points. The pivot point on the upper leg is the center of the pin hole. So you need to move the center of the pin hole to <0,0,0>. So move the brick 10 units up (negative is up, so move it "-10")

Here are the correct coordinates:

torso.ldr

0 COMMENT Unchanged
1 7 0 0 0 1 0 0 0 1 0 0 0 1 3679.dat

right_up_leg.ldr

0 COMMENT Move up 10 so the center of pin hole is at <0,0,0>
1 7 0 -10 0 1 0 0 0 1 0 0 0 1 3700.dat

hip.dat

0 COMMENT Move everything up by 10 so the pins are centered around <0,0,0>
1 7 -10 -10 0 0 0 1 0 1 0 -1 0 0 2458.dat
1 7 10 -10 0 0 0 -1 0 1 0 1 0 0 2458.dat
1 7 0 -18 0 1 0 0 0 1 0 0 0 1 3680.dat
1 7 0 -18 0 1 0 0 0 1 0 0 0 1 torso.ldr
0 COMMENT Leave the right leg alone.
1 7 -30 0 0 0 0 1 0 1 0 -1 0 0 right_up_leg.ldr

Notice that I moved everything up 10 ("-10") except the right leg location in the hip file. If I had moved the right leg up with the other parts in the hip, it actually would have gone up double, because I already modified the right leg child file.

Now when I rotate the right leg it now has the correct rotation point.

One easy to visualize the pivot points is to add a cross-hair centered around <0,0,0> to your child files:

2 24 0 40 0 0 1 0
2 24 40 0 0 1 0 0
2 24 0 0 40 0 0 1
2 24 0 -40 0 0 -1 0
2 24 -40 0 0 -1 0 0
2 24 0 0 -40 0 0 -1

Here you can see cross-hairs in right_up_leg.ldr and torso.ldr showing where <0,0,0> is at for each file.

Conclusion

That is really all you have to do to make animatable models. However, this is no simple task. Take the following model. Its arm joints are composed of only a few pieces, in fact, sometimes just one piece. Finding the correct origin and rotation for each segment is difficult, to put it mildly. But once discovered, the rewards are more than worth the effort.

Clickochet Community Ads (ads for ads marketplace)