Siobhan Maracle
  • About Me
  • Work
    • Rigging
    • Animation
  • Projects
  • Blog

FK/IK Blending - from Zeth Willie

10/4/2018

 
This is another fantastic tutorial from Zeth Willie. I take no credit for any of this.
  • Create bound shoulder, elbow and wrist joints, attached to the clavicle. Duplicate twice to make FK and IK joints chains. These should also be attach to the bound clavicle.
  • FK and IK joints should orient constrain the bound joints.
  • Create RP IK on the IK joint chain.
  • Make FK and IK controls.
  • Make 5 locators
    • arm_pv_dummy_loc : Place this where the pv ctrl is and parent constrain it to the FK shoulder joint, maintain offset on.
    • wrist_fk_dummy_loc : Parent constrain this to the wrist FK joint, maintain offset off.
    • elbow_fk_dummy_loc : Parent constrain this to the elbow FK joint, maintain offset off.
    • shoulder_fk_dummy_loc : Parent constrain this to the shoulder FK joint, maintain offset off.
    • shoulder_wrist_fk_midpoint_loc : Point constrain this to the shoulder and wrist FK joints, maintain offset off.


Maya/Rigging: IK to FK snapping, part 1 from zeth willie on Vimeo.

Topology Needs

10/4/2018

 
Something I really struggle with is OK-ing topology on a new model. So I'm going to be keeping a list of things to check. Right now it's super short because my memory is terrible. I will add to it as I discover more.
  • Close edge loops around knuckles would be helpful when trying to figure out where knuckle joints are meant to go. Also they help maintain volume.

Change Joint Colour

10/4/2018

 
Super small little entry but wow it makes a difference ^^ I've found it particularly useful when you have to add a joint to a hierarchy that's already skinned.
  • Display > Wireframe Colour
  • You can select multiple joints to apply the same colour to all of them at once

Collar KeepOut Node

10/4/2018

 
After seeing the below tweet by Riham Toulan, I figured out how to use the nodes she mentioned to make a similar system in my own rigs. This may or may not be how Toulan set it up, but this is how I've done it so far.
  • Make a poly cylinder for the neck. You can shape it later to better fit the shape of the neck and head of your character. You could even use a low poly version of your character's actual neck and head.
  • Make a nurbs circle or curve around the top of the collar. You'll want to rebuilt the curve so that the U value goes between 0 and 1.
  • Decide how many points you want to put around the collar. Put them at the base of the collar where each part of it will rotate. We'll call these bound joints for now.
  • Make a number of locators equal to the number of bound joints. Attach them to the curve using the pointOnCurveInfo node, and place them above each joint by adjusting the U value.
  • You may need to create a locator that sits in the middle of the ring of locators. This isn't attached to the curve, but will act as an 'up' pointer for your aim constraints in a sec.
  • Aim each bound joint at the appropriate locator on the curve, and use the central locator as the up vector.
  • Now make a floating joint for each locator on the curve. We'll call these control joints.
  • Select the control joints, shift select the curve and bind skin.
  • Now when you move one of the control joints it'll pull the curve and the collar joints will rotate accordingly.
  • Make a group for each of the control joints.
  • Select the neck cylinder. Deform > Muscle > Muscles / Bones > Convert Surface to Muscle/Bone.
  • Select one of the groups that has a control joint in it and Deform > Muscle > Self / Multi Collision > Rig selection for KeepOut. Do this for each group.
  • Select the neck cylinder and one of the newly made cMuscleKeepOut nodes. Deform > Muscle > Self / Multi Collision > Connect Muscle to KeepOut.
  • You may have to change which direction the joints move away from the neck in. You can do this in the attribute editor of the cMuscleKeepOut nodes.
Voila ^^

My favorite rig test right after the hip sway! :) very simple joint based setup with Point on curve Info and keep out nodes. #maya3d #gamedev #rigtip pic.twitter.com/3iEBdIXNsi

— Riham Toulan (@RihamToulan) March 17, 2018

Attach object to curve using pointOnCurveInfo nodes - from Zeth Willie

9/4/2018

 
This has been taken from a tutorial by Zeth Willie. I can't recommend his tutorials enough, seriously go check them out. He has a wonderful way of explaining things and he really goes in depth into topics.

He explains that this particular way of attaching an object to a curve is a less chunky way than the more well known 'attach to motion path'.

  • Create a curve, you will probably need to rebuild curve so that the U value goes between 0 and 1. Pretty useful for later.
  • Make an empty pointOnCurveInfo node using 'shadingNode -asUtility pointOnCurveInfo -n "myName". Obviously name it whatever you want.
  • Open connection editor. Load the shape node of the curve into the left and the pointOnCurveInfo node into the right.
  • Connect worldSpace to inputCurve.
  • Then load up the pointOnCurveInfo into the left and the object you're trying to attach intot he right side.
  • Connect result.position to translate.
Voila.

Maya/Rigging: Attaching objects to a curve (using pointOnCurveInfo node) from zeth willie on Vimeo.

Rigging Efficiency

7/4/2018

 
Motion Paths
For some reason, Maya makes an addDoubleLinear when you attach an object to a motion path, and it connects it in a way that causes a cyclic dependency. You don't actually need this addDoubleLinear node.
To get rid of it you can shift+MMD the motion path node and the node of the object that's attached to the motion path, this will open up the Connection Editor. On the motion path node side, expand 'allCoordinates' and on the constrained node expand 'translate'. Now connect the 'xCoordinate' from the left to the 'translateX' on the right. Do the same for Y and Z. Now you can delete the addDoubleLinear node.
Skinning
Make sure to remove unused influences, limit max influences and prune small influences to improve rig performance.
Profiler
The profiler can locate performance bottlenecks in your scene by recording and demonstrating in a graph the amount of time that each process consumes.

Useful Tips, Scripts and Formulae

7/4/2018

 
  • If you ever see FBXASC### somewhere in your Maya files, that's just Maya's way of dealing with characters that it can't understand. FBXASC032 represents a [space], for example. So far I've only encountered these when bringing in meshes from 3ds Max.
  • Not sure about this, needs testing. But you can make 'left' and 'right' namespaces. Then name all your joints the same, but put them under the appropriate namespace. In theory this would make mirroring easier.
  • Tear off a persp view when skinning and set it to Legacy High Quality Viewport, this will let you see the textures on the mesh, great for checking stretching.
  • Hold shift+MMD from one node to another in the hypergraph and it'll open up the Connection Editor straight away.
Script (mel)
Description
parent -r -s
Used to parent a shape node to another object
arclen -ch 1
Gives you a curveinfo node where you can find the length of a nurbs curve or spline ik curve.
string $stuff[] = `ls -sl`;

int $numbjoints = `size($stuff)`;
​
print("Number of objects selected: "+ $numbjoints +"\n");
Select objects then run this script. It'll count the number of objects you have selected. So works with most things, not just joints.
I currently use it to count the number of joints going into engine. I make a set called 'joint counter' or something, make sure all joints are there. When I add new ones, I add them to the set. Then I can just select all set members and run the script.
import maya.cmds as cmds

viewport = cmds.getPanel(wf = True)

if cmds.modelEditor(viewport, q = True, nc = False) == False:
     cmds.modelEditor(viewport, e = True, m = True,  alo = True)

else:

     cmds.modelEditor(viewport, e = True, m = False, alo = False)
     cmds.modelEditor(viewport, e = True, pm = True)
This script was put together by Jack Plummer during his time at Automaton.

Assign this to Alt+1 'On Press' in Maya's hotkey editor.
This will hide everything but the geometry in your scene on the first press, and then show everything on your second press.
​Good for previewing animation quickly without clutter.
shadingNode -asUtility pointOnCurveInfo -n "myName"
Will create a pointOnCurveInfo node called myName and adds it to the utilities tab in the hypershade. makes it easier to find.
dagPose -reset -name bindPose1
This will reset the bindpose on any given joint, you can select multiple joints if you wish.

Select the joint you with to affect, move it to your new desired bind pose. With it still selected, enter the script into the mel command line at the bottom, change 'bindPose1' to whatever the appropriate bind pose is and hit enter. The geometry should stay where it needs to be and the joint has assumed a new bind pose.
​dagPose -bindPose -save
Select the skeleton and enter this command, it will save a new bind pose for your skeleton.

If you find you have too many bind poses, and you just want one, it can be useful to delete the ones that are there and then run this.
setAttr "nurbsCircleShape1.isHistoricallyInteresting​" 0;
Can use this to make shape nodes disappear from the Channel Box. Particularly useful when you need to combine curves to make a control but don't want all the clutter.

The shape nodes are still visible in the outliner.
lockNode -lock off sphere1;
Sometimes you encounter locked nodes in rigs that restrict what you can do with them. Use this to unlock them at your own risk, ha!
import maya.cmds as cmds
import pymel.core as pm

# Get the panel
pan = pm.getPanel(withFocus=True)

# Add selected to panel
cmds.isolateSelect(pan, addSelected=True)
Just added this to my custom shelf. It adds whatever you've selected to the current 'isolate selected' view you have open.

​It's easy to make this also remove elements from your isolate selected by changing 'addSelected' to 'removeSelected'.
​Formula
​Description
a^2 + b^2 = c^2
Pythagoras Theorem (right angled triangles)
Useful for figuring out root motion for moving diagonally.

    What Is This?

    So this is a collection of things I've learned as I progress in rigging and animation. I just like to keep a note of things here so I can find things easily later.

    Does this all belong to you?

    Some things are things that I've figured out, but there's a great deal of tutorials and knowledge that I've found from perusing the internet. I've tried to give credit where it's due.

    Archives

    June 2019
    May 2019
    August 2018
    April 2018

    Categories

    All

    RSS Feed

Picture
siobhan.maracle@gmail.com