Bookmark and Share

Virtual dolly for camera work in a 3D program.

This Maya scene shows how to rig a dolly/crane in 3D to make 3D cameras behave more like real-world cameras.

This page and the associated Maya file (dolly.mb) are very technical, and are meant for 3D Animators who direct in 3D. If you're not a 3D artist, don't feel like you have to understand any of this.

This Maya scene shows how to rig a dolly/crane in 3D to make 3D cameras behave more like real-world cameras.


  1. Dolly.mb is for Maya 5 and up.
  2. After loading, press 6 to view with shading.
  3. Play the timeline.
  4. Select Panels->Perspective->camera10Shape to view the move from camera’s perspective.

The dolly rig included in the file is the same as used in The Master Course in High-End Blocking and Staging, so naturally most of the rigging is to accommodate geometry for rendering purposes. This rig is merely meant as demonstration of a concept. For 3D filmmaking you may want to rig your own dolly/crane from scratch, since such a rig doesn’t need any geometry and will be much simpler.

The idea behind this rig is that normal keyframed 3D cameras can often behave erratically and be hard to control. Because 3D cameras can move so freely, 3D camera work often gets the feeling of being “all over the place”, and very often feels like 3D or video game.

In order to give 3D camera work a cinematic feel, it can be useful to rig a virtual dolly/crane in 3D to constrain the camera to the same physical parameters as physical camera support equipment.

A normal dolly/crane consists of a base which can track left/right, and a boom arm placed at a certain elevation which can rotate left/right and up/down. The camera is attached to the end of the boom, and can pan/tilt/roll. Regardless of the specific camera support equipment, this is the basic function of anything from a tiny tripod-dolly to a 100ft crane, the only difference being the length of the boom.

Instead of animating the camera directly, we’ll then set up a structure (with or without geometry) with the following hierarchy:

  1. A container group that allows us to position and rotate the entire rig.
  2. A dolly base that can only move on one axis.
  3. An elevation point above the base that allows us to control how high the pivot of the boom arm is positioned.
  4. A boom arm of any length attached to the elevation point.
  5. A camera attached to the end of the boom arm.

Our controls are then the following:

  1. Dolly left/right.
  2. Boom Pan and Tilt.
  3. Camera Pan, Tilt and Roll.

Camera Pan, Tilt and Roll can either be animated directly, or with an Aim Constraint. In addition, we’ll be able to change the length of the boom, and how high it’s positioned, but we wouldn’t normally animate these parameters.


The rig in “dolly.mb” is made of 3 objects:

Dolly10- which contains all keyable attributes, and holds the entire rig.
Camera10- which is the Maya camera.
CameraGreen- which is a green piece of geometry to show the position and orientation of the Maya camera, and simply copies the Translate and Rotate XYZ from the Maya camera. This object is not necessary, but very convenient.

Most of the objects in Dolly10, such as Wheels and Track, are geometry for display purposes and are not important, so let’s just cover the important objects:

  1. The Dolly10->Dolly object is the dolly base. Animating translateX slides the dolly left and right. The child “Base” is the geometry to show the base and wheels.
  2. Attached to Dolly10->Dolly->Base is a cylinder called “VerticalPosition” which is there to determine how high above the base the boom arm is positioned.
  3. A locator “BoomHeightLocator” is parented to the cylinder at the end. We move that locator up and down by scaling the cylinder-geometry on the Y-axis, thereby changing the height of where the boom arm will be attached.
  4. The Boom arm itself is another cylinder which is Point Constrained to “BoomHeightLocator”. The Boom object is placed within the Dolly10 hierarchy, but since it’s Point Constrained, it gets its translateXYZ from the absolute position of “BoomHeightLocator”, and not the Dolly10 hierarchy.
  5. We change the length of the boom by scaling the boom cylinder on the X axis.
  6. We Pan and Tilt the boom by rotating the boom-cylinder on the Y and Z axis.
  7. At the end of the Boom geometry we’ve attached another locator “CameraLocator”.
  8. The Maya camera “camera10” is Point Constrained to this locator.
  9. Pan, Tilt and Roll are controlled by animating camera10’s rotateXYZ directly.

In order to make this easy to animate, we’ve collected all attributes within the root of Dolly10, which then remote control the various translates, rotates and scales within the Dolly10 hierarchy and camera10:

boomPan, boomTiltcontrol rotateY and rotateZ of Dolly10->Boom.
cameraPan, cameraTiltcontrol rotateX and rotateY of camera10.
dollyMovecontrols translateX of Dolly10->Dolly.
elevationcontrols scaleY of Dolly10->Base->VerticalPosition.
lengthcontrols scaleX of Dolly10->Boom.
FocalLengthcopies Focal Length value to camera10->camera10Shape->focalLength for convenience.
VisibilityToggles visibility of Dolly10 hierarchy. CameraGreen copies this value so entire rig can be Shown/Hidden by changing Dolly10’s visibility.

This makes it extremely easy to animate all camera functions from a central place. The way this is set up, the Maya camera only gets its translate XYZ from the dolly hierarchy, and rotate XYZ are animated directly. This is done so that if we decide to rotate the dolly rig, our pans and tilts don’t rotate with it, and won’t need to be completely re-animated.

You’ll notice that there’s no control for Roll. The need for Rolling is quite rare, so it hasn’t been added as an attribute. But it would be very easy to add an attribute to Dolly10 that controls the rotateZ parameter of camera10.


The easiest way to animate the rig is to simply set the track and dolly up in a way that will allow the movement we want, and then keyframe the relevant channels in Dolly10. It’s best to default to Flat Tangents, and then tweak the keyframes from there.

For many moves, we need to work on the pan/tilt curve. If we’re for example doing a move where we push in on a character at an angle, we’ll need to pan slowly in the beginning, and then pan harder and harder to keep him in the frame. If we don’t work on the pan-curve, the panning will not be in sync with the dolly move. This can be fixed either by adding more Spline keyframes, or by working with the Tangent weights.

The fewer keyframes we do, the better, even if they’re smooth spline keyframes, because you can somehow feel the keyframes, even if they’re very well done. So the best way is to limit ourselves to start and end keyframes whenever possible and only tweak the curves by working on the Tangent weights.

A useful MEL script to put in the Shelf is:

keyTangent -edit -weightedTangents true;

keyTangent -weightLock off;

keyTangent -lock off;

Running this script with keyframes selected in the Graph Editor releases their Tangent weights. We can then select the weight-handles and shift-drag them left/right on the X-axis (time). It’s best to always only move weights in time. Moving them up or down causes hard breaks around keyframes that are very visible and displeasing.


For blocking camera work in Maya, it can be useful to animate all cameras that are in a scene, and then actually cut between the cameras from within Maya as if it’s a multi-camera shoot. With audio loaded on the timeline, this is a great way to get a real-time feel for how all cameras complement each other in the blocking. Come rendering-time, this also makes it very easy to know which time-ranges need to be rendered for each camera-angle.

Akihiro Yoshida has written a public domain MEL script “Switching Camera”, which allows one to cut between any number of cameras within Maya. It works by creating an output camera called “cameraMain”, which copies all parameters from whichever camera is selected in the “cameraNumber” attribute. This attribute can either be keyframed manually, or with the GUI that’s provided (which allows you to select cameras by name).


Single dolly (Maya 5 .mb file) Contains a single dolly for demonstration purposes
Maya Previz Scene (Maya 5 .mb file) Contains multiple dollies and locked cameras, and also includes a camera shelf for easily selecting each of the cameras. See image below.
AK Switching Camera (Maya 5 .mel file) Was compatible with Maya 5. One day, this script may be incompatible.

Maya Pre-Viz Scene with multiple dollies and locked cameras:


You are welcome to use the dolly model for anything you want, and to redistribute it, provided redistribution is not done for profit, and all credits and files are included in their unaltered state.

© Hollywood Camera Work
“Switching Camera” is © Akihiro Yoshida

© 2004-2014 Hollywood Camera Work, All Rights Reserved      Home  |  Legal Notices  |  Contact Us