An example for the application of bones in aircraft animations
Disclaimer: First of all, this is not much more than a post made in the forums, so it can be anything from badly written to inaccurate or complete Bravo Sierra. However, it might provide some useful information for aircraft modelers nonetheless.
This article requires knowledge about the creation and use of bones and Inverse Kinematics (IK) in Gmax/Max. As an introduction and starting point the author of this article suggests the jetway animation video here.
Using bones for animating the handrail of an aircraft's passenger door
The first screenshot shows a general overview of the array with all IK handles, bones and skinned meshes displayed.
I'll just show the forward array of rails and rods as a demonstration since it's fairly straight forward. The aft array is a bit more complicated because it uses basically two bone chains linked together. Also, the skinned mesh and the door is set to transparent now to help seeing the bones. The only things left non-transparent in the following screenshot are the door hinge located inside the cabin and the rod sticking out of the passenger door (child to the door). Those two elements basically serve as the start and end points for the bone chain.
The blueish elements in the next shot is the bone structure. As suggested in the jetway tutorial video I've created the bones by snapping their ends to various pivot points. This can be accomplished by using a dummy as a disposable pivot point donor (you can delete them once the bones were created) placed at the actual rotating joints of the array. In my case, I did this with real modeled joints. I know now that this is basically a waste of polies, dummies can do the trick equally well. Note that the bone structure does *not* correspond to the actual mesh structure (the "Left" viewport illustrates this pretty well), say a bone isn't necessarily located inside the actual mesh that is used as its skin. This is because I wanted to keep things simple and rather opted for "easy" angles between bones (rectangular or a straight line) to avoid any possible undesired effects. Skinning the bones was achieved with a "skin" modifier; nothing difficult about that since you can assign whole elements (at least in Max 9). In terms of bone hierarchy (done automatically; the first bone is always the parent, the second in line child number one etc...), I started out at the hinge on top (see screenshot 1 and 2) and worked my way down to the rod sticking out of the door.
Once the skinned mesh was assigned it was time to place the IK handles, which are represented by the blue crosses. This was done with Max's "IK Limb Solver". Linking the right bones together required a bit of trial and error, since sometimes the desired effect can be obtained with linking two bones only while you need to link three to four to get the desired result. I find that it's better to work your way from the top of the bone hierarchy to the bottom. So just create a link, move the handle you've just created around a bit with the "Move" tool to see if it provides the anticipated effect and delete and try again or move on to the next bone. Screenshot number three shows the "Motion" tab of a handle (marked by the move tool) and shows that this one links the upper bone circled in red with the lower one with the red circle. The bone in between those two doesn't need a handle since its movement and rotation proved to be entirely autonomous and without any requirement for my interference.
Just to prove this autonomy I moved the handle a bit along the Z axis (upwards). As you can see, the IK-linked bones and their skin move as expected.
The next problem to resolve was making the lowest bone and thus part of the array move along with the door. It wasn't necessary of course, but way more convenient since it took away the necessity to keyframe this element. This is where the lower rod came into play. Since the whole construction was pretty accurately placed from the start I simply had to link the lowest IK handle to the rod and I was done.
The result of this whole process is being able to go from this...
...to this very conveniently with the help of just those two IK handles (the ones selected) and a preanimated (= keyframed) element (the door).
It should make doing the *real* animations fairly easy.
The railing array of the other side of the door works exactly like the one on this side with the exception of featuring two of these systems (see the first screenshot). The lower one once again runs from the hinge to the rod in the door, the parent bone of the upper system (for the handrail) is linked to a bone of the lower system while the handle at the end bone is once again linked to that rod. And again, all I need is two handles to arrange everything in the desired fashion.
The finished, keyframed animation of the door and railings looks like this:
Warning/Note: Exporting the animation into FSX
Do not export the animation with the IK handles still present! FSX will subsequently freeze every animation on your model! Instead, try to keyframe every bone. This can be done with collapse transformation. Select one bone at a time and then select to the "Motion" tab (right hand side of the UI), then "Trajectories". If the bone actually follows a path, the movement trajectory will be displayed in the viewport (at least in 3DS Max 9). Then specify the keyframe range in the "Sample Range" box, where 10 "samples" give you a keyframe every 10 keys (in a range of 100 keyframes). Finally, check that "Position" and "Rotation" are ticked and hit "Collapse". Your bone should now have a range of keyframes assigned.
This should be done with every moving bone in the whole array. When every linked bone has been keyframed, the IK handles used in the array can be deleted. Further tweaking might be needed before tagging all keyframed bones with the Animation Manager and exporting. Remember to have "Export Skin" checked when using the "Export LOD" tool.
Two screenshots of the animated, folding handrail from this example in FSX (SP2).
Last edit: 21:29, 19 May 2010 (BST)