Camera Dolly: Difference between revisions

From VRChat Wiki
(unmark for deletion)
(→‎See also: Added Camera Drone to see also list.)
 
(11 intermediate revisions by 7 users not shown)
Line 1: Line 1:
= Camera Dolly =
{{Noticebox/Official}}
The camera dolly is a VRC+ exclusive system that allows you to create and play animations for the in-app VRC camera.
{{Noticebox/unreleased|This feature is available for testing, apart of the 2025.1.2 Open Beta released on February 11th, 2025. <ref>[https://docs.vrchat.com/docs/vrchat-202512-openbeta#camera-dolly-for-vrc-users|VRChat 2025.1.2 Open Beta docs - Camera Dolly for VRC+ Users]</ref>.}}
 
'''Camera Dolly''' is a [[VRChat+|VRC+]] exclusive system that allows you to create and play animations for the VRChat [[Camera|camera]].  
A walkthrough video will be added here shortly.


== Features ==
{{Thumb|{{YouTube|A5STfwFkwEE}}}}
It includes the following 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
* 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
** Position
** rotation
** Rotation
** zoom
** Zoom
** focal distance and aperture
** Focal distance and aperture
** Look-At-Me offsets
** Look-At-Me offsets
** green screen color
** 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.
* 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. Capture lets you record a video, an emoji, or automatically take pictures during an animation. Last but not least, the stream type indicates how to animation is streamed via Spout.
* OSC integration
* [[Open Sound Control|OSC]] integration


The camera dolly is supported on PCVR, Desktop, and Standalone VR platforms, while mobile platforms are not supported at this time.
The camera dolly is not supported on Android/iOS at this time.


== Points ==
== Points ==
Line 60: Line 61:
The following camera controls help you control various aspects of the camera dolly.
The following camera controls help you control various aspects of the camera dolly.


Movement controls:
=== Movement controls ===
 
* The Fly Speed slider adjust how fast the camera moves in Fly Mode
* 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 Turn Speed slider adjusts how fast the camera rotates in Fly Mode
Line 67: Line 67:
* While using the camera dolly, the maximum fly distance has been increased ten-fold, allowing you to move the camera further away from yourself
* 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:
=== 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
* 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
* 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
=== Greenscreen controls ===
 
* A new set of HSL sliders is displayed while the Greenscreen mask is toggled on
* 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
* The Hue, Saturation, and Lightness sliders adjust the color of the greenscreen
Line 90: Line 88:
'''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.
'''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 ===
=== Path type ===
The path type defines how the path is smoothed. The following path types are available:
The path type defines how the path is smoothed. The following path types are available:


Line 112: Line 110:


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.
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.
=== Capture ===
The capture setting determines how an animation should be recorded. Note that the animation cannot loop while using one of the below capture settings in order to prevent users from accidentally filling up their storage. The Capture feature currently comes with a few restrictions and is thus in BETA.
* Photo: Automatically takes photos while the camera is animating. While selected a `Photos per Second` slider is displayed, ranging from 0.1 (one photo every 10 seconds) to 2 (one photo every half second)
* Video: Records an mp4 video while the animation plays. The maximum clip length is 60 seconds. When selected, an additional Audio Source option is displayed that let's you pick between local microphone audio or world audio (including other players) for the audio to record with the video. Due to technical limitations, you can't choose both at this time.
* Emoji: Takes exactly 16 photos spaced out evenly along the animation. When the animation concludes, the Emoji editor opens. This option is not currently supported with Speed-based motion.


=== Streaming ===
=== Streaming ===
Line 122: Line 127:
** Additional cameras only animate position and rotation (no additional parameters like zoom, focus, etc.)
** Additional cameras only animate position and rotation (no additional parameters like zoom, focus, etc.)


== OSC Integration ==
== OSC integration ==
Four OSC endpoints have been added to interact with the camera dolly:
Four OSC endpoints have been added to interact with the camera dolly:


* <code>/dolly/Play</code>: Play or Stop an animation
* <code>/dolly/Play <Play: boolean></code>: Play or Stop an animation
* <code>/dolly/PlayDelayed</code>: Play an animation with an initial delay timer
**You will receive a <code>/dolly/Play <Playing: boolean></code> event whenever playback starts or stops by any method.
* <code>/dolly/Export</code>: Export the current path to a JSON file
*<code>/dolly/PlayDelayed <Delay: float></code>: Play an animation with an initial delay timer
* <code>/dolly/Import</code>: Import a path from a JSON file
**You will receive a <code>/dolly/Play</code> event immediately when firing this - not when the dolly actually starts.
**Sending this event while a delay is running will do nothing.
**Sending <code>/dolly/Play TRUE</code> will skip any existing delay and immediately start the sequence.
**Sending <code>/dolly/Play FALSE</code> will cancel a currently running delay.
*<code>/dolly/Export</code>: Export the current path to a JSON file
**The exported file is autogenerated, and defaults to exporting to <code>~/Documents/CameraPaths/VRChat_CameraPath_[time].json</code>
**When exported, you will receive <code>/dolly/Export <ExportedFilePath: string></code> regardless of method.
*<code>/dolly/Import <DollyPathJSON: string></code>: Import a JSON dolly path
**If the dolly is currently playing or about to play due to a delay, this won't do anything.


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.
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.
 
The camera dolly menu includes an Import button that lets you paste in a file path to a JSON file to import paths from. This setting is only available on Windows at this time. While this import menu doesn't use OSC, you currently need to have OSC enabled in order for it to work.


Use cases for OSC integration include:
Use cases for OSC integration include:


* Fine-tuning animation values
*Fine-tuning animation values
* Editing <code>isLocal</code> values to determine whether a path is imported relative to the user or not
*Editing <code>isLocal</code> values to determine whether a path is imported relative to the user or not
* Reusing paths between sessions
*Reusing paths between sessions
* Sharing a path with others
*Sharing a path with others
* Path libraries
*Path libraries
* Keyframe visualization tools
*Keyframe visualization tools
* Integrations with existing community tools
*Integrations with existing community tools


The path can be exported via OSC or the camera dolly menu. JSON files are saved under <code>~/Documents/VRChat/VRChat_CameraPath_<date>.json</code>. The below table lists value ranges for points to import:
The path can be exported via OSC or the camera dolly menu. JSON files are saved under <code>~/Documents/VRChat/VRChat_CameraPath_<date>.json</code>. The below table lists value ranges for points to import:
Line 210: Line 225:
| -
| -
|}
|}
== See also ==
* [[Camera]]
* [[Camera Drone]]
* [[Gallery]]
* [[VRC+]]
==References==
<references />
[[Category:Needs images]]
[[Category:Features]]

Latest revision as of 23:36, 12 March 2025

VRLogo.png
V · EThis is an official VRChat information page!
It is reviewed and approved by the VRCWiki Team. Learn how to contribute to this page by reading the Contribution Guide.
CautionTriangle.png
V · EUnreleased or beta content!
This content is currently unreleased or in beta, be aware it could change!
[Reason: This feature is available for testing, apart of the 2025.1.2 Open Beta released on February 11th, 2025. [1].]

Camera Dolly is a VRC+ exclusive system that allows you to create and play animations for the VRChat camera.

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. Capture lets you record a video, an emoji, or automatically take pictures during an animation. Last but not least, the stream type indicates how to animation is streamed via Spout.
  • OSC integration

The camera dolly is not supported on Android/iOS 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.

Capture

The capture setting determines how an animation should be recorded. Note that the animation cannot loop while using one of the below capture settings in order to prevent users from accidentally filling up their storage. The Capture feature currently comes with a few restrictions and is thus in BETA.

  • Photo: Automatically takes photos while the camera is animating. While selected a `Photos per Second` slider is displayed, ranging from 0.1 (one photo every 10 seconds) to 2 (one photo every half second)
  • Video: Records an mp4 video while the animation plays. The maximum clip length is 60 seconds. When selected, an additional Audio Source option is displayed that let's you pick between local microphone audio or world audio (including other players) for the audio to record with the video. Due to technical limitations, you can't choose both at this time.
  • Emoji: Takes exactly 16 photos spaced out evenly along the animation. When the animation concludes, the Emoji editor opens. This option is not currently supported with Speed-based motion.

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: boolean>: Play or Stop an animation
    • You will receive a /dolly/Play <Playing: boolean> event whenever playback starts or stops by any method.
  • /dolly/PlayDelayed <Delay: float>: Play an animation with an initial delay timer
    • You will receive a /dolly/Play event immediately when firing this - not when the dolly actually starts.
    • Sending this event while a delay is running will do nothing.
    • Sending /dolly/Play TRUE will skip any existing delay and immediately start the sequence.
    • Sending /dolly/Play FALSE will cancel a currently running delay.
  • /dolly/Export: Export the current path to a JSON file
    • The exported file is autogenerated, and defaults to exporting to ~/Documents/CameraPaths/VRChat_CameraPath_[time].json
    • When exported, you will receive /dolly/Export <ExportedFilePath: string> regardless of method.
  • /dolly/Import <DollyPathJSON: string>: Import a JSON dolly path
    • If the dolly is currently playing or about to play due to a delay, this won't do anything.

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.

The camera dolly menu includes an Import button that lets you paste in a file path to a JSON file to import paths from. This setting is only available on Windows at this time. While this import menu doesn't use OSC, you currently need to have OSC enabled in order for it to work.

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 - -

See also

References