Thursday, January 28, 2021

Pipeline 1: Jetpack Jones - Building a Skeleton

  In order to build the Skeleton, we need to understand that the joints chains in the legs need to have a slight bend in order to move in the correct direction. This is best obtained via the joint orient rather then the the channel box. If the bend is in the wrong direction or too much, it will give inaccurate results and odd movements. In terms of values, joints need to be clean to stop any interference when skinned to the model. 

  Using Locators again, marking locations for the joints will make creating the skeleton much easier. Working from the hip (on the right left hand side) to place the first one, we place another on on the ankle and then one around the knee. Moving up the model, the next is place were ideally the pelvis would be (in JPJ's case, around the belt), one about the base of the ribcage, another just in the shoulder point (making sure they are central). Continuing onwards down the arm (elbow, wrist and the bone for the clavicle), the clavicle need to be a bit more forward so as not to interfere with the shoulder jnt. 

  Returning down to the foot, we place the last 3 on the ankle, ball of the foot and the tip of the toes.  Using locators also allows us to removed the geometry so to enable better view. 

  To start the skeleton building, before placing any joint chains we need to make sure that the primary axis is X (studios may use a different axis). Moving into the side view, we create the first chain from the leg. To move the joint, we need to make sure the object orientations (not the channel box) is being used, in this case in axis X. 

  Snapping the first joint to the the top locator, we rough out the knee location and use the joint orientation in the attribute editor to place a slight rotation. (We do not want to use the channel box!). With these done, the ankle is placed and the same process is repeated in the front view. We continue to position until we are happy with the placements.

  Testing can be done by using a IK to ensure the correct bending, then removing it afterwards. Every joint needs to be named as the correct position, being l_location_jnt. (l for left hand side and to help coordinate joints)

  For the feet, a single joint is made at the top and on the ball of the foot. These are then parented to the ankle joint, making sure they are named correctly and completing the leg chain,

  Working upwards, a joint is snapped to the locator on the pelvis, naming it a c_pelvis_jnt (c meaning central) and is then parented to the leg joint. 

  Once happy, we then use the mirror joints options to create a copy across the YZ plane, changing the l_ to r_. This now gives us two sets of leg joints connected to the pelvis. 

Completed Legs 

  With the arm, we create a 3 joint chain and point snap to the first locator. As with the leg, we undergo the same process to get the joint into the correct place, but in the rotate Y (joint orietaint). The arm joints are named l_location_jnt. For the clavicle, we use a single joint, check and then parent tot eh shoulder, making sure to rename starting with l_. 

  The left arm will be connect to a chest joint (which is best placed slightly higher then the ribbon upper joint), placing a new joint to the locator and then parented to the clavicle. The upper ribbon joint is then snapped to the chest joint so there is no gaps. 

  For the fingers, we create a chain of 4 joints. They are much too big to begin with, so changing the radius in the channel box or the global scale to 0.1 will help them fit with the model. This chain is then duclipated and then placed where the smallest finger is in 3D space. As with the previous joints, the same process is used to position them correctly. If a character has some bend in their fingers, we will need to place a slight bend to fit. This is then repeated for all 3 of the other fingers. 

  The thumb is only a 2 joint chain, but as it is rotated out and downwards, some time is need to make sure it in the best place for skinning. Another joint is needed further back in the thumb to create maximum movement. Before parenting to the wrist, its best to use the name and replace to give the joints names. The end of the finger joints should be named as end and the knuckle as base. 

  The thumb should be named as Twist on the one furthest back joint, then base onwards. 

  Grabbing the end of end chain and the writs, we parent and then mirror the joints to give us a full skeleton torso. 

Completed Torso 

  Currently, we are not worried about the head, but we will need some neck joints. Creating two new joints, we place them in at the base of the neck and head by eye and then parent them to the chest joint. To finish this section, we remove the locators still hanging around in the viewport.

  To help finish up, we select the pelvis and the lower Position locator and parent them together (with the offset selected). Repeating this for the chest joint, we know that when the joints are moved, it also moves the spine locators. 

  For the wrists, we need another joint in the forearm to give us a 50% twist along the arm. Deleting the right side and selecting the left forearm chain, we insert another joint in the centre (named as l_forearm_jnt) and then remirror to give us a complete torso again. This process is then repeated for the legs. 

  To help with the fall out along the arms and legs, we need a script. Adding a cube to each joint (this allows visual reference to see if the script is working due joint movements not be visible in the maya viewport). Using the the left wrist first, we open the expression editor for the rotate X box. Copying the name (l_wrist_jnt.rotate.) and then going into the forearm rotate x channel and place it into the expression box.  The following script is then used to create our fall off:

l_forearm_jnt.rotateX = l_writst_jnt.rotateX*0.5

(using the notion of divided by 2 will do them same)

  This is then repeated for the right arm and the legs, however in the legs it will be shin rotate X to ankle rotate Y.  When doing this on the legs, the joints will move in opposite directions. To stop this, we need to place a minus sign in the script so they move in the same correlation:

l_shin_jnt.rotateX = - l_ankle_jnt.rotateY*0.5

Once all done, the cubes can be deleted and the skeleton is all ready for binding. 

Added Script

Final Skeleton

No comments:

Post a Comment

Note: Only a member of this blog may post a comment.

Major - Submission Post: Final Animation, Reflective Statement and Links

Final Reflective Statement When starting the Major Project, there was still quite a lot of work left over from Minor for the planned final...