Cameras are encapsulated by the FBCamera class. 3D stereo vision cameras are encapsulated by the FBCameraStereo class, a subclass of FBCamera. A camera is created using the FBCamera() constructor. The interest point of a camera can be set via FBCamera.Interest, which forces the camera to maintain its focus on a specific instance of FBModel in the scene. Showing the camera (FBCamera.Show) allows you to view the camera as a wireframe object in the scene.
camera = FBCamera('myCamera') camera.Interest = pModel camera.Show = True
The properties documented in the FBCamera class reference reflect the properties available through the MotionBuilder user interface. These properties should be modified from their FBProperty.Data field, as illustrated in the following code sample where we modify the camera's motion blur properties. For more information on properties, see FBProperty - Object Properties.
camera.PropertyList.Find('UseMotionBlur').Data = True camera.PropertyList.Find('UseRealTimeMotionBlur').Data = True camera.PropertyList.Find('Motion Blur Intensity').Data = 2
Switching the Viewport to a Different Camera
The viewport's perspective can be changed to a different camera using the FBCameraSwitcher class, and its FBCameraSwitcher.CurrentCamera property. Programmatic camera switching is disabled by default in the scene, so it must be enabled via the scene's FBRenderer object and its FBRenderer.UseCameraSwitcher property.
# Enable camera switching. FBSystem().Scene.Renderer.UseCameraSwitcher = True # Set our view to the newly created camera. cameraSwitcher = FBCameraSwitcher() cameraSwitcher.CurrentCamera = camera
Sample Viewport and FCurve Editor Output:
Program Summary: The program below creates a torus (FBModel), and a camera (FBCamera) with motion blur enabled. The program uses the scene's camera switcher (FBCameraSwitcher) to switch the viewport's perspective to the newly created camera. An animated translation around the torus is then applied to the camera using one of two methods:
from pyfbsdk import * # Define a list of keys to be used later in the applyKeys1() # and applyKeys2() functions. keyList = [ #(time: FBTime , coords: [x,y,z] coordinate list) (FBTime(0, 0, 0), [0, 100, -100]), (FBTime(0, 0, 1), [100, 100, 0]), (FBTime(0, 0, 2), [0, 100, 100]), (FBTime(0, 0, 3), [-100, 100, 0]), (FBTime(0, 0, 4), [0, 100, -100]) ] ############################################################### # Helper Function(s). # ############################################################### # Create a model to look at. def createModel(): model = FBCreateObject( 'Browsing/Templates/Elements/Primitives', 'Torus', 'Torus' ) model.Name = 'myModel' model.Translation = FBVector3d(0, 75, 0) model.Scaling = FBVector3d(2, 2, 2) model.Rotation = FBVector3d(90, 0, 0) model.Show = True return model # Create a camera looking at the model. def createCamera(pModel): camera = FBCamera('myCamera') camera.Interest = pModel camera.Show = True # Enable motion blurring for the camera. camera.PropertyList.Find('UseMotionBlur').Data = True camera.PropertyList.Find('UseRealTimeMotionBlur').Data = True camera.PropertyList.Find('Motion Blur Intensity').Data = 2 # Enable camera switching. FBSystem().Scene.Renderer.UseCameraSwitcher = True # Set our view to the newly created camera. cameraSwitcher = FBCameraSwitcher() cameraSwitcher.CurrentCamera = camera return camera # First method of applying keys to an animation node. # Here, we add keys directly to the translation animation node. def applyKeys1(pTranslationAnimNode): # keyList is defined at the top of this file. global keyList for time, coords in keyList: # time format: FBTime(<hour>, <minute>, <second>) # coords format: [<x>, <y>, <z>] FBPlayerControl().Goto(time) # set the player control's time. pTranslationAnimNode.SetCandidate(coords) # set the candidate at the player control's current time. pTranslationAnimNode.KeyCandidate() # apply the candidate. # Get the parent's child animation node with the given name. def getChildNode(pParentNode, pChildName): for node in pParentNode.Nodes: if node.Name == pChildName: return node return None # Second method of applying keys to an animation node. # Here, we are working with the X, Y, and Z child nodes of the translation node. def applyKeys2(pTranslationAnimNode): # keyList is defined at the top of this file. global keyList # Obtain the FCurves for each X, Y, Z element of the translation vector. # We use the helper function getChildNode() defined above to get the animation # nodes for these X, Y, Z elements. xAnimNode = getChildNode(pTranslationAnimNode, 'X') yAnimNode = getChildNode(pTranslationAnimNode, 'Y') zAnimNode = getChildNode(pTranslationAnimNode, 'Z') xFCurve = xAnimNode.FCurve yFCurve = yAnimNode.FCurve zFCurve = zAnimNode.FCurve # Apply the keys to each FCurve using cubic interpolation. interpolation = FBInterpolation.kFBInterpolationCubic for time, coords in keyList: # key the x coordinate (coords[0]) at the given time along the X FCurve. xKeyIndex = xFCurve.KeyAdd(time, coords[0]) xKey = xFCurve.Keys[xKeyIndex] xKey.Interpolation = interpolation # key the y coordinate (coords[1]) at the given time along the Y FCurve. yKeyIndex = yFCurve.KeyAdd(time, coords[1]) yKey = yFCurve.Keys[yKeyIndex] yKey.Interpolation = interpolation # key the z coordinate (coords[2]) at the given time along the Z FCurve. zKeyIndex = zFCurve.KeyAdd(time, coords[2]) zKey = zFCurve.Keys[zKeyIndex] zKey.Interpolation = interpolation # Create a circling animation for the camera. def applyAnimationToCamera(pCamera): # (!) IMPORTANT: Properties are not animatable by default. # you must explicitly call SetAnimated(True) to initialize # the animation nodes for animatable properties. pCamera.Translation.SetAnimated(True) translationAnimNode = pCamera.Translation.GetAnimationNode() # Set the useApplyKeys1 variable below to False to use a different keying method. useApplyKeys1 = True #useApplyKeys1 = False if useApplyKeys1 == True: # Add keys to the translation animation node directly. applyKeys1(translationAnimNode) else: # Add keys to the FCurves of the X, Y, Z elements in the # translation animation node. applyKeys2(translationAnimNode) ############################################################### # Main. # ############################################################### # Clear the scene. FBApplication().FileNew() model = createModel() camera = createCamera(model) applyAnimationToCamera(camera) # Playback lPlayer = FBPlayerControl() lPlayer.LoopStart = FBTime(0,0,0) # Set the start time in the player control. lPlayer.LoopStop = FBTime(0,0,4) # Set the end time in the player control. lPlayer.LoopActive = True # Enable playback looping. lPlayer.GotoStart() lPlayer.Play()