Wednesday, January 27, 2021

Pipeline 1: Jetpack Jones - Creating a Ribbon spine


   There are 3 types of spines that can be created and used for animating characters, the first is a FK (Parent), the second a IK (ribbon) and third being a IK (spline).

  • FK (Parent) - this is like a stop motion putted spine and requires moving every joint the base curving each joint.
  • IK (Ribbon) - Paired with joints and a plane whit is then skinned, highly stretch and flexible.
  • IK (Spline) -  Driven via a curve control, updates with movement.


  The best spine to use for our character (JPJ) will be the Ribbon Spine, however there will be some movement issue that will need to be resolved when before skinning. 

  To measure the space needed for the spine, we use 2 locators, placing one at the base of the rib cage and one at the pelvis. As a whole, this measurement works out about 4 grid spaces in the y axis. Placing them on a layer and colouring them so they don't get lost in 3D space, we make sure they are central to the grid in all views. 

  Creating a Nurbs plane in the front view and rotating so its facing the screen, the plane needs to be 4 spaces in length via the Y axis. Under the Nurb shape channel box, create 3 V patches gives us 3 surfaces planes in the geometry. Next we need to remove any history and making sure it's rename as Ribbon_geo.  (Making sure everything is named correctly is important for the skinning process).

  The geo has CV's attached, so to removes them we use the rebuild option, changing the number of spans in the U to 1 and the V to 3 (so as to match the channel box). For the U Degree, will have to marked as linear and the V degree left blank, then setting it to be rebuilt. 

  Using the nhair options and setting it to nurbs curves, we needed same numbers as in the rebuild options. Adding the follicles caused some crashing issues, so by changing my Maya fromanimation settings from DC to Parallel resolved this issue. Now the hair is attached, the nucleus node, dynamic system, curve nodes and the groups can all be removed, leaving just the follicles.

  Renaming the follicles to their corresponding position and re-arranging them correctly into the outliner, placing them into a groups will help with the joints and locators allocation. Using the joint creation options and creating one single joint, duplicating it 3 (one is extra for future duplication) allows us to drag one to be parented under each follicle. 

  Selecting each joint and removing the values in the channel box enabled them to appearing in the correct co-ordinations to the follicles. Each of these joints needs a bind name, starting the follicle location _rbn_bind_jnt. These now move with the follicles when moving the plane.

  Next is the control joints. Duplicating 3 more joints, one is placed on the centre of the plane, one at the top where the locator is set and the last at the bottom. Changing the radius of the control joint means they can be seen better, giving them colour by placing them onto a layer. This resolves any joint confusion. We also need to rename them also as Location_rbn_ctrl_jnt. 

  The locator is duplicated 3 times and the size reduced to 0.5 in every direction in the local scale (not the channel scale), the bottom two are then parented un the top locator so them move when that one does. As with the joints, these need to be renamed. teh parent is upper_pos_loc, the second as upper_aim_loc and the final one being upper_aim_up_loc. These are the duplicated 2 more times, the second snapped to the middle joint and then the names of the location changed to mid. This is then repeat for the bottom set of locators, names can be altered by selecting groups and using the search and replace options. 

  The middle locator group needs another locators, duplicating the up locator and then reparented underneath the first. This one is the offset locator. to finish this part of the set up, the corresponding joints are then drop under the required locators. The middle joint need to be placed under the offset group.  The locators now move the joints when moved around the screen. Selecting all the aim up locators, we bring them out the side in the viewport and resize them to 0.2 in every orientation via the local scale. These will lock the aim constraints. 

  We require different constraints for the actions desired. The mid locator needs to stay at 50% between the top and bottom when moving. Selecting the top, bottom and then mid, we create a point constraint with the offest selected. In order for them to point toward each other when in movement, a aim constraint is needed. Selecting the upper_pos_locator and then the lower_aim_locator, we use the aim options to change the aim vector to what the controlled locators needs. In this case the controlled is the bottom locator and needs to face towards the controller (upper_pos_loc), meaning we have to change the X aim vector to 0 and the Y to 1. The "Up vector" axis need to face the Upper_pos_loc  in the X axis, so the X will need to be 1 and the Y as 0. So to lock it so when the aim locator moves, the joint moves, the world up type needs to be object up. In the "World up Object" box, typing in a controlled value (lower_aim_up_loc) always associated the up locator to the controlled. These all now point up towards the upper_pos_locator when moves and twists with the lower_aim. 

This process has to be repeated but in the opposite direction.

  Working on the middle locator and selecting the lower_pos_loc (its best to use this one rather then the upper), the aim constraint "world up" option needs to be changed to mid_aim_up_loc. All the configured joints and locators point in the correct directions when moved around. 

  When twisting the upper or lower pos locators, we need the mid_pos_loc to move at 50%, as it does when being stretching the horizonal.  Selecting both the upper and lower aim up locators and then the middle, applying a point constrain give the desired movement when rotating in Y. 

  For the rotation functions in  X and Z, we can use the connection editor. Bringing in the the upper_pos_loc in the left and the upper_rbn_ctrl_jnt into the right, we then connect the rotate X's and Z's together. When tested, there is currently no movement but this is due to not being bound to the nurb plane but does update in the channel box. This is now repeated for the lower joint. 



  To bind the control joints to the ribbon, we select all three joints, the nurb plane and then change the "bind skin" options to "selected joints". The current bind isn't great. To fix this, we place the spine in to a bell shape (this enables us to keep track of the changes being made), choose the CV's in the middle and open the component editor. The weights on the mid_rbn_ctrl_jnt needs to be 1, typing this in changes them to the correct weight. The is then repeated for the four CV's at the top and bottom of the ribbon. however, the inner set of the bottom and top CV's needs to weights 50% towards the mid_rbn_ctrl_jnt. When changing the CV's to 100% its removed access to the mid joint weight, to get them back we can select one of the mid joint CV's so it shows up in the editor and then relocate weights as needed.  The ribbon should have a nice flex when moved around.

  Selecting all the locator group and regrouping, we rename as ribbon_spine_loc_grp. The follicles and ribbon are also regroup and then called ribbon_spine_misc_grp. The bind joint are currently in the Misc, at this point if place into a group with the spine, there will be inherited transformations and will cause deformations on movement. So currently, its best to keep them separate.

  Finally, for the volume control (in order to maintain volume as the character stretches) we need a driver curve. At this point, we only need the curve as the driver will be added later. Choosing "Isopalm" when right clicking on the nurb and selecting the left sided Isopalm, using the Duplicate Surface Curve tool in the curve menu will make the Isopalm into a curve (we need the CV to match the current CV's in place on the Nurb geometry). Selecting the new curve, centring the pivot and snapping back to the centre, we name it as ribbon_vol_driver_crv.

  This curve is then placed into the misc group and the transformations wiped clean. Selecting the 3 joints, the curve and then the geometry, binding the skin will connect them all together. As with the joints, there is some skinning issues. To resolve this, using the component editor and reallocating the weights will make a better curve. 

  To finish this section, we bring back the torso and position the ribbon into the correct place. Selecting the upper_pos_loc, we bring it forward and create some slight offset with the middle_loc. 

Completed Ribbon Spine

Positioned into Place


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...