Skip to content
Voro
  1. Geometry
  2. Render

Camera

A render is drawn from one camera. Camera is a native TouchDesigner Camera COMP with an extra Voro page, so you keep every TD control you already use. The Voro page adds what TD has no control for: marking a shot change for renderers that keep history, driving the pose from a wire, framing the camera from the subject’s size and returning to a stored pose.

You don’t need Camera to render. Any Scene or renderer Camera parameter also accepts a plain TD Camera COMP.

Place Camera from the Geometry view of the Voro menu, under Render. Set its pose the TD way, with Translate and Rotate, Look At, a parent or a path. Set Field of View, Near and Far on the COMP as usual.

To render through it, select it in the Camera parameter on Scene’s Collection page. A renderer also has its own Camera parameter on its Scene page. When the renderer’s Scene Mode is Local or Scene + Local and you set that parameter, it wins over the Scene’s camera. Path Trace, Realtime Trace and Surface Renderer all collect the camera this way.

To frame a subject, first make sure a Scene has selected this Camera, then pulse Frame Scene. Camera measures the geometry that Scene collected, pulls back until the subject fits with Frame Margin to spare, and writes the result into its own Translate and Rotate. After that it is an ordinary TD camera you can nudge, keyframe and undo. A Camera that no Scene has selected has nothing to measure, and its Status line says so.

In TouchDesigner, Camera shows one input, state. Connect a row of numbers there to let other Voro logic own the pose. The row’s width decides what it drives:

  • 3 channels drive Position.
  • 6 channels drive Position and Target.
  • 7 channels drive Position, Target and Field of View.
  • 48 channels are a whole camera, taken as is.

While a wire drives the camera, Camera writes the driven pose into its own Translate and Rotate as expressions. The COMP’s parameters show the real pose, and TD viewports and Render TOPs agree with the render. Remove the wire and your own typed values come back. An expression you wrote yourself on one of those parameters is left alone.

The camera output carries this Camera’s resolved viewpoint as a 48-channel row. Wire it into another Camera’s state to hand a pose from a rig or a switcher to the camera that renders.

The scene input and output and the camera0 to camera7 inputs are for Lab and .voro graphs, where cameras are wired instead of selected by name.

The generated table below lists the whole module, including controls that only Lab and .voro graphs use. In TouchDesigner the Voro page holds these:

  • Cut. Bump it and every renderer with history treats the next frame as a new shot, so a jump in the camera does not smear across frames.
  • Frame Scene and Frame Margin. Solve the framing once from the subject’s size. Frame Margin is how much room to leave around it.
  • Go Home, Home Position and Home Target. Go Home returns the camera to the stored pose. TD’s own preset button resets only the Pre-Xform page, so it does something else.
  • Status. Read only. It names what drives the camera and which Scenes or renderers have selected it. The driver is the native pose, a state wire or a Frame Scene pulse.

Aim, Position, Target, Direction, Up, the Lens page, Select and Reset are not on the TD page. Native TD parameters cover them: Look At, Translate, Field of View, Near and Far. To pick between several cameras in TD, point the Scene’s Camera parameter at a different camera.

Motion blur and depth of field are not camera controls. They sit on the renderer’s Lens page as Shutter and Aperture Radius.

With no camera selected, nothing falls back to a default camera. A renderer whose own Camera parameter and Scene’s Camera are both empty reports “no effective Camera selected” and draws nothing. Select a camera before you look for other causes of a missing picture.

Renderers accept perspective cameras only. An orthographic camera stops the render with an error.

Frame Scene measures each object’s bounding box, not its points. Debris flung far from the subject pulls the camera back with it. Instanced objects are framed by their base transform only, and Camera reports that in its status.

The Lab’s camera guide, lab/AUTHORING_GUIDE/CAMERA.md in the Voro package, covers the camera record and framing from Python.

Inputs

  • scene scene
  • state row
  • camera0..7 scene
    8 slots

Outputs

  • scene scene required
  • camera row required

Camera

Aim (Aim) Menu op('camera').par.Aim
Default:
0
Options:
Look At Target, Direction, Frame Scene
Position (Positionx) Float op('camera').par.Positionx
Default:
0
Range:
-1000000 to 1000000
Position (Positiony) Float op('camera').par.Positiony
Default:
1.5
Range:
-1000000 to 1000000
Position (Positionz) Float op('camera').par.Positionz
Default:
6
Range:
-1000000 to 1000000
Target (Targetx) Float op('camera').par.Targetx
Default:
0
Range:
-1000000 to 1000000
Target (Targety) Float op('camera').par.Targety
Default:
1
Range:
-1000000 to 1000000
Target (Targetz) Float op('camera').par.Targetz
Default:
0
Range:
-1000000 to 1000000
Direction (Directionx) Float op('camera').par.Directionx
Default:
0.6
Range:
-1 to 1
Direction (Directiony) Float op('camera').par.Directiony
Default:
0.35
Range:
-1 to 1
Direction (Directionz) Float op('camera').par.Directionz
Default:
0.72
Range:
-1 to 1
Up (Upx) Float op('camera').par.Upx
Default:
0
Range:
-1 to 1
Up (Upy) Float op('camera').par.Upy
Default:
1
Range:
-1 to 1
Up (Upz) Float op('camera').par.Upz
Default:
0
Range:
-1 to 1
Frame Margin (Framemargin) Float op('camera').par.Framemargin
Default:
1.15
Range:
1 to 4
Cut (Cut) Int op('camera').par.Cut
Default:
0
Range:
0 to 4096
Select (Select) Int op('camera').par.Select
Default:
0
Range:
0 to 7

Lens

Field of View (Fov) Float op('camera').par.Fov
Default:
45
Range:
1 to 179
FOV Method (Fovmethod) Menu op('camera').par.Fovmethod
Default:
0
Options:
Vertical, Horizontal
Near (Near) Float op('camera').par.Near
Default:
0.01
Range:
0.0001 to 1000000
Far (Far) Float op('camera').par.Far
Default:
10000
Range:
0.001 to 1000000000

Home

Home Position (Homepositionx) Float op('camera').par.Homepositionx
Default:
0
Range:
-1000000 to 1000000
Home Position (Homepositiony) Float op('camera').par.Homepositiony
Default:
1.5
Range:
-1000000 to 1000000
Home Position (Homepositionz) Float op('camera').par.Homepositionz
Default:
6
Range:
-1000000 to 1000000
Home Target (Hometargetx) Float op('camera').par.Hometargetx
Default:
0
Range:
-1000000 to 1000000
Home Target (Hometargety) Float op('camera').par.Hometargety
Default:
1
Range:
-1000000 to 1000000
Home Target (Hometargetz) Float op('camera').par.Hometargetz
Default:
0
Range:
-1000000 to 1000000
Reset (Reset) Toggle op('camera').par.Reset
Default:
Off
Options:
Off, On