Camera Dolly

The camera dolly is a VRC+ exclusive system that allows you to create and play animations for the in-app VRC camera.
A walkthrough video will be added here shortly.
Features
It includes the following features:
- Path Management: At its core, the camera dolly is a system for authoring animations through points. You can create, edit, and delete points in a variety of ways. Additionally, paths allow you to play multiple animations in sequence. New camera controls have been added that enable more fine-tuned camera usage. Camera parameters the dolly can animate currently include
- position
- rotation
- zoom
- focal distance and aperture
- Look-At-Me offsets
- green screen color
- The initial release of the camera dolly includes a number of configuration options that let you define how animations behave. Motion control allows you to switch between duration and speed as the value driving the animation. The path type refers to how the animation path is smoothed between the points you’ve created. You may also have the path loop, or use easing to create more aesthetically pleasing animations. Last but not least, the stream type indicates how to animation is streamed via Spout.
- OSC integration
The camera dolly is supported on PCVR, Desktop, and Standalone VR platforms, while mobile platforms are not supported at this time.
Points
Where the path represents the camera animation, points are essentially keyframes. When you add a point, it is placed at the position and rotation of your camera, and inherits the zoom, focus, Look-At-Me, and Greenscreen values your camera is currently set to.
When adding points, you can leave your camera in hand-held mode, or put it into Fly Mode. Likewise, it works both in landscape and portrait orientation. Position the camera, then click Add
in the camera dolly menu to place a point. Create a second point, and you got yourself a path. Click Play
to start the animation from the first to the second point. Note that while the animation is playing, the Play button is replaced by a Stop
button to cancel it.
Due to performance constraints, there are limits on how many points you can author at any given time. Currently, the limits are as follows:
- Windows
- Up to 100 points total
- Up to 50 points per path
- Quest/Pico
- Up to 50 points total
- Up to 25 points per path
- The camera dolly is not currently supported on mobile (Android/iOS)
If you want to reset the entire path, you can use the Clear All
menu button to remove all points (a confirmation prompt will be displayed to ensure you don’t inadvertently select this option). Likewise, the Clear Last
option will delete the point at the end of the current path. To delete a specific point, you can do so via the point menu or by grabbing a point and double-clicking the interact button.
Points are pickups. Grab one, and in VR the viewfinder will show its perspective. As you move the point, the path is updated with the point's new position and rotation. While holding a point, you can click the interact button to freeze the point’s position - only rotation will update while the point is frozen. Click again to unfreeze. To edit the point’s animation parameters, adjust the corresponding sliders in the Point Menu.
The Point Menu also includes a button Copy to Camera
that let’s you apply a point’s position, rotation, and animation parameters back to the camera. This can be used as an alternative way to preview a point’s perspective, or add new points with precise positions close to the copied one.
The camera dolly takes the lens space into account.
- Default or Local: The path itself will move with the player as the camera animation plays out
- World: The path is static and does not move with the player
Paths
Paths allow you to create any number of animations that run sequentially. This gives you a way to create more complex animations with multi-camera setups and keep action more fluid between shots.
Point menus reflect each point’s path, as well as position within a path. For example, point 1-2 is the second point in the first path. The point menu further let’s to change a point’s position and path:
- Moving a point to the next path will prepend it there as the new first point
- Moving a point to the previous path will append it there as the new last point
Potential use cases include:
- Reversing a path: By changing the position of points within a path, it’s direction can be turned around
- Combining paths or dividing one path into multiple paths
Controls
The following camera controls help you control various aspects of the camera dolly.
Movement controls:
- The Fly Speed slider adjust how fast the camera moves in Fly Mode
- The Turn Speed slider adjusts how fast the camera rotates in Fly Mode
- The Smoothing Strength slider adjusts how much camera movement is softened when the Smoothed behaviour is toggled on
- While using the camera dolly, the maximum fly distance has been increased ten-fold, allowing you to move the camera further away from yourself
Look-At-Me controls:
- When the Look-At-Me behaviour is toggled on, the horizontal and vertical Look-At-Me offset sliders adjust your position within the camera view
- By default, you are in the center of the camera view when using Look-At-Me - Using the sliders, you can offset your position from the center
Greenscreen controls
- A new set of HSL sliders is displayed while the Greenscreen mask is toggled on
- The Hue, Saturation, and Lightness sliders adjust the color of the greenscreen
Settings
The camera dolly has a number of configuration options that allow you to tweak how animations behave.
Motion Control
Motion control specifies whether the animation should be time- or speed-based:
- When time-based, a Duration slider is shown
- When speed-based, the Fly Speed slider will be used
Speed-based animations allow you to create animations with custom ease curves. This can be useful for long animations where easing shouldn’t be applied uniformly across the entire path.
Time-based animations allow you to pick from a list of ease presets. The overall duration of a time-based animation is the sum of point durations, minus the last one and anchors. So if there are three points, each with duration 2sec, the overall duration will be 4 seconds (A to B ~ 2sec, B to C ~ 2sec). The Easing configuration includes options for In, Out, and In-Out ease curves at different intensities.
Path Type
The path type defines how the path is smoothed. The following path types are available:
- Fitted paths use B-Spline interpolation and are very smooth, but may not pass through points
- Loose paths use Catmull Rom interpolation and pass through the points you’ve added, while being slightly less smooth than Fitted paths
- Linear paths are not smoothed
Fitted and Loose paths require at least 4 points to be smoothed. While a path has less than 4 points, it will always be linear.
With at least 4 points, Fitted and Loose paths will be smoothed. When smoothed, a few additional elements come into play:
- Anchors: The first and last points of a smoothed path are anchors. They are used to give shape to the beginning and end of the animation path. While anchors aren’t part of the path itself, they are used to interpolate values for the start and end points.
- Curve Points: Smoothed paths generate smaller “in-between” points between the points you add. These are used to visualize the path. You may also interact with a curve point to add a new point anywhere in an existing path.
Looping
The loop type specifies how the animation should loop. Options include Repeat, Reverse, and Revolve.
- Repeat looping restarts the path from the start once the camera reaches the end
- Reverse changes direction whenever the camera reaches the start or end of the path
- Revolve connects the end of a path back to the start so it loops smoothly
Note that looping will have the path loop indefinitely, including while the camera is closed. You can click Stop or change worlds to cancel the animation.
Streaming
Building on top of the Spout2 integration for Stream Mode, this configuration allows you to define how content is streamed. Since this uses Spout, it is currently only supported on Windows.
- Single: The camera animates along paths in order
- Multi: Spawns up to 3 additional cameras with a spout sender for each path beyond the first. Rather than animating sequentially, each camera animates along its respective path at the same time. Currently has a number of restrictions:
- Only supports up to 4 paths - additional paths are ignored
- Only works with time-based animation
- Additional cameras only animate position and rotation (no additional parameters like zoom, focus, etc.)
OSC Integration
Four OSC endpoints have been added to interact with the camera dolly:
/dolly/Play
: Play or Stop an animation/dolly/PlayDelayed
: Play an animation with an initial delay timer/dolly/Export
: Export the current path to a JSON file/dolly/Import
: Import a path from a JSON file
Points are always exported local, but JSON files can be edited to mark points as global. This defines whether imported points are created relative to the player or not.
Use cases for OSC integration include:
- Fine-tuning animation values
- Editing
isLocal
values to determine whether a path is imported relative to the user or not - Reusing paths between sessions
- Sharing a path with others
- Path libraries
- Keyframe visualization tools
- Integrations with existing community tools
The path can be exported via OSC or the camera dolly menu. JSON files are saved under ~/Documents/VRChat/VRChat_CameraPath_<date>.json
. The below table lists value ranges for points to import:
Value Ranges | Default | Min | Max |
---|---|---|---|
Position | (0,0,0) | - | - |
Rotation | (0,0,0) | - | - |
Zoom | 45 | 20 | 150 |
FocalDistance | 1.5 | 0 | 10 |
Aperture | 15 | 1.4 | 32 |
Greenscreen HSL | 120 | 100 | 60 | 0 | 0 | 0 | 360 | 100 | 50 |
Look-At-Me Offsets | 0 | 0 | -25 | -25 | 25 | 25 |
Duration (sec) | 2 | 0.1 | 60 |
Speed | 3 | 0.1 | 15 |
Index | -1 (append) | 0 | <num points in current path> |
Path | <current path> | 0 | <num paths> |
IsLocal | FALSE | - | - |