Skip to content

Camera Switching

While there can only be one target camera in an MR set at any given time, an MR Set can contain multiple cameras that can be switched between using an Indirection Controller.

Overview

The target camera of an MR set determines the video input being routed to the MR set. However, multiple cameras can be added into an MR set.

Camera switching in xR requires all delays in the system to be compensated for perfectly, so that all parts of the output switch view in the same frame. This requires introducing a delay between the user requesting a switch, and the switch being visible in the output.

Controllers

Inside Disguise Controller we have 6 Indirection Controller Types:

  • DMXIndirectionController
  • ListIndirectionController
  • MachineListIndirectionController
  • ManualIndirectionController
  • SequencedIndirectionController
  • OSCIndirectionController
  • UDPIndirectionController

These allow multiple protocols to be used to switch the active camera inside Disguise, as well as non-external trigger based.

Workflow

DMXIndirectionController

This allows for Cameras to be selected in a Bank and Slot mechanism.

  1. Ensure you have set up Disguise to receive DMX.
  2. Create and assign a DMXIndirectionController to the MR Set.
  3. In the Sockpuppet bank editor, a Camera bank list is now made available.
  4. Populate banks and slots with Cameras you wish to select.
  5. Enter the Universe and channel you wish to select the Camera bank with into the controller.
  6. The slot is the next channel immediately after the bank, so you must specify 2 channels in your DMX sender.
  7. From the DMX sending device, send the appropriate 2 channel identifier to the universe and channel you selected.

ListIndirectionController

This allows for Cameras to be selected on a 0 Based index

  1. Create a ListIndirectionController.
  2. Add the Cameras as Resource.
  3. The order of the Cameras as the Index Number.
  4. Scroll through the Index to then choose the active cam.

The selected index is 0-based, meaning the first item in the list is selected by index 0.

Right-clicking on the selected index allows the user to enter an expression to control the index (e.g. allowing control from an external protocol.)

If the selected index is less than 0 or greater than or equal to the number of elements in the list, then the controller selects None as the Resource.

MachineListIndirectionController

This allows for certain machines to only output the perspective of specified cameras. A use case for this is when splitting up Front and Back plate rendering over multiple machines.

  1. Create a ManualIndirectionController
  2. Select a Camera.

SequencedIndirectionController

This is controlled by keyframes in an IndirectionControl layer. The indirection control module allows indirections to be sequenced on the timeline. One Indirection control module controls one indirection.

To sequence an indirection:

  1. Add a SequencedIndirectionController in the controller field of the indirection.
  2. Add an IndirectionControl(../../designer/layers/layer-types/control/indirectioncontrol/) layer to the timeline.
  3. Select the controller in the Indirection control module.

OSCIndirectionController

This allows you to force a camera to be active over OSC.

  1. Create an OSCIndirectionController
  2. Create an OSC Device
  3. Add the OSC device to the Controller.
  4. Remove the $ sign from the OSC address field.
  5. The string to recall the Camera to be active is the camera’s name inside Disguise. Currently the OSC indirection controller requires you to use the full path of the object you are selecting such as:

path: /d3/indirection/osc

value: objects/camera/cam1.apx **

UDPIndirectionController

This allows you to force a camera to be active over UDP.

  1. Create a UDPIndirectionController.
  2. Add the number of Resources needed. This will be the number of cameras in the scene.
  3. Add a Key to trigger that active camera, and add a resource which would be the Virtual Camera.
  4. Add the receive port number from the UDP sender.
  5. Send the command to Disguise and see the Current Target change. Turn on Verbose Logging to check incoming strings in the console (alt+c).