Animating and setting keys with MotionBuilder’s Python Editor

Here is the code for a Python script that I wrote dealing animating and setting keys on a selected object within MotionBuilder. Writing this animation script really helped me get a better understanding on how to use MotionBuilder’s FBTime. The exercise forced me to sit down for about two hours and research 3 of the major things that we as animators manipulate – Time, Keys, and Transforms.

I hope this helps others and I really look forward to spending more time with fun scripts like this.

A big thanks goes to Alex Forsythe’s video “Python Scripting in MotionBuilder – 05 – FBTime and Playback Control”.

from pyfbsdk import *

# Get the instance of FBApplication, and clear the scene with FileNew().
app = FBApplication()
app.FileNew()

# import time to allow us to access time line controls and play back controls
import time

# ensure new scene is set to 30 fps and that the time line is shown as frames
FBPlayerControl().SetTransportFps(FBTimeMode.kFBTimeMode30Frames)
FBPlayerControl().TransportTimeFormat = FBTransportTimeFormat.kFBTimeFormatFrame

# Set our Timeline to be 200 frames in length
FBSystem().CurrentTake.LocalTimeSpan = FBTimeSpan(
    # set start frame (0, 0, 0, 0, 0) = (hours, minutes, seconds, frames, fields)
    FBTime(0, 0, 0, 0, 0),
    # end frame
    FBTime(0, 0, 0, 200, 0)
    # if you wanted to set the time line to be 3 minutes long you could do some of the following to achieve that:
    #in frames = (0, 0, 0, 5400, 0)
    #in seconds = (0, 0, 180, 0, 0)
    #in minutes = (0, 3, 0, 0, 0) 
    )

# Creat an object that we will animate
lmarker = FBModelMarker('VicMarker')
lmarker.Show = True
lmarker.Size = 1000
lmarker.PropertyList.Find('LookUI').Data=1
lmarker.Color = FBColor(0,1,1)
lmarker.Selected = True

# Define the Transaltion to be represented as lmarker.Translation
xTrans, yTrans, zTrans = lmarker.Translation

# Declare that lmarker.Translation can be animated
lmarker.Translation.SetAnimated(True)

# Position lmarker.Translation to 0 on the x axis, 250 on the y axis and 0 on the z axis [0, 250, 0]
# Set a key at frame 0 (FBTime(0,0,0,0) - the time is the last 0 in the sequence
lmarker.Translation.GetAnimationNode().KeyAdd(FBTime(0,0,0,0), [0, 250, 0])

# Position lmarker.Translation to -200 on the x axis, -150 on the y axis and 200 on the z axis [-200, -150, 200]
# Set a key at frame 25 (FBTime(0,0,0,25)
lmarker.Translation.GetAnimationNode().KeyAdd(FBTime(0,0,0,25), [-200, 150, 200])
# Set a key at frame 50 (FBTime(0,0,0,50) with x,y and z translation values
lmarker.Translation.GetAnimationNode().KeyAdd(FBTime(0,0,0,50), [0, 0, 400])
# Set a key at frame 75......
lmarker.Translation.GetAnimationNode().KeyAdd(FBTime(0,0,0,75), [200, -150, 250])
# etc. for the remaining 5 translation keys that will be set on frames 100, 125, 150, 175 and finally our last frame 200  
lmarker.Translation.GetAnimationNode().KeyAdd(FBTime(0,0,0,100), [0, -250, 0])
lmarker.Translation.GetAnimationNode().KeyAdd(FBTime(0,0,0,125), [-200, -150, -250])
lmarker.Translation.GetAnimationNode().KeyAdd(FBTime(0,0,0,150), [0, 0, -400])
lmarker.Translation.GetAnimationNode().KeyAdd(FBTime(0,0,0,175), [200, 150, -200])
lmarker.Translation.GetAnimationNode().KeyAdd(FBTime(0,0,0,200), [0, 250, 0])

print "BAM! YOU JUST ANIMATED WITH PYTHON! :)"



Add a Comment

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.