In this MotionBuilder tutorial we’re going to be animating props. And if we’re going to be animating props, then we’re going to need constraints!
But we’re not talking simple Parent/Child constraints, where the prop only has one parent object. We’re going to be animating complex props that need multiple parent objects. Props that are getting picked up, put down, taken out, thrown away, and passed between different objects. And the good news is, you can do all this using just one type of constraint in MotionBuilder…
Introducing the Multi-Referential Constraint.
The Multi-Referential constraint is like a super powerful Parent/Child constraint. It lets you set multiple parent objects in the constraint and then simply switch between them using the Key Controls. This makes it perfect for actions where you need to keep changing a model’s parent object, like we’ll be doing here with our props.
We’ll start by creating a Multi-Referential constraint to animate the bag being passed between Nigel, the bag scanner and Tracy.
Then, we’ll create a slightly more complex setup combining a Multi-Ref constraint and an Auxiliary Effector to animate the guard, calling for backup on the radio.
Plot Animation from Story Tool to Characters
But before we can do any of that, we’ll need to plot the animation from Story Tool onto our characters.
In the video I show a couple of ways to do this, but if you’re into coding or have a scenes with lots of characters, here’s the script I use in the video:
from pyfbsdk import* def plot_character_options(): """ Set Plot Options for character """ plotClipOptions = FBPlotOptions() plotClipOptions.PlotAllTakes = False plotClipOptions.PlotOnFrame = True plotClipOptions.PlotPeriod = FBTime( 0, 0, 0, 1 ) plotClipOptions.PlotTranslationOnRootOnly = False plotClipOptions.PreciseTimeDiscontinuities = False plotClipOptions.RotationFilterToApply = FBRotationFilter.kFBRotationFilterUnroll plotClipOptions.UseConstantKeyReducer = False plotClipOptions.ConstantKeyReducerKeepOneKey = True return plotClipOptions def process_character_to_new_take(plotToSkeleton = True): """ Plot animation to all characters in Story Mute Story and Tracks """ ## -------------------- Process Character Tracks in Story -------------------- for track in FBStory().RootFolder.Tracks: # Check Track Type is Character Animation Track if track.Type is FBStoryTrackType.kFBStoryTrackCharacter: # Get Character in Track characterToPlot = track.Character if plotToSkeleton: # Select Objects in Character characterToPlot.PlotAnimation(FBCharacterPlotWhere.kFBCharacterPlotOnSkeleton ,plot_character_options()) if not plotToSkeleton: # Check character has Control Rig characterControlSet = characterToPlot.GetCurrentControlSet() if not characterControlSet: # Create FK/IK control rig if doesn't exist. characterToPlot.CreateControlRig(True) characterToPlot.PlotAnimation(FBCharacterPlotWhere.kFBCharacterPlotOnControlRig, plot_character_options()) # Mute Story Track track.Mute = True # Mute Story FBStory().Mute = True process_character_to_new_take(False)
Why you should ALWAYS hold a prop – even if you don’t capture it.
So, as you may have noticed from the video, I didn’t actually capture any props for this. But, the important thing is, I was actually holding something that resembled the props when I performed the actions.
So, why bother holding a prop if you’re not going to capture it?
Well, the reason is, the act of physically holding something will change the way you move. From the tension in your body to the adjustments you make to accommodate the size, shape and weight of the object. Even before you grab hold of the object, you’ve already started to change the way you move to prepare to pick it up.
And also there are actions you can’t physically do without an actual prop. Think about lifting a heavy box. You can’t shift your center of gravity under an imaginary box to accommodate the extra weight without falling over….
And it’s all these tiny details that are impossible to recreate without a prop that will make the performance more believable.
So, the important thing to remember is if you’re capturing an action that uses a prop, make sure you’re holding something because even if you don’t capture the object, you will capture the affect it has on the way you move.