The Pixotope Event System provides a robust event-handling framework.

It allows a quick setup for the triggering of Unreal blueprints and animations to achieve whatever effect is desired, creating repeatable, deterministic actions. This works by means of firing off actions called on a list of cues.

It supports direct, remote, or pre-programmed timecode-driven operation, with all action/cue organization and event handling, driven through an intuitive and flexible master blueprint.

Early versions of the Pixotope Event System have been used in high-profile productions like Super Bowl, Eurovision, League of Legends World Championship, and others.


Academy Tutorial - Pixotope Event System

  • Learn how to set up the Pixotope Event System


Preparation

Add the Pixotope Event System content to your project

Using the Pixotope Event System in a project will inherently alter the imported assets. As a result, you should always use a fresh copy of the content for every new project.

  1. Click on “Add/Import” in the Content Browser

  2. Select “Pixotope Event System” from Pixotope > Add Pixotope Content
    The content is copied into your project

Define Cues and Actions

Cues represent distinct segments of a production on which actions are executed. Blueprints and level sequences can then be set up to listen to specific Cues and run their triggered Action logic.

The Event System allows you to define any number of cues and and allows you to extend the included default actions.

Example

Our production has a fireworks segment. For this we define a Cue called "Fireworks". The blueprint handling the particle animation needs to be set up to react to all default Actions and listen to the "Fireworks".

  • On the IN-Action it starts slow, ramping-up the fireworks display

  • The OUT-Action ends the fireworks with a final blast

  • The ON and OFF-Actions are set up as failsafes and for testing/debugging where the particles immediately jump to a full ON/OFF state

Define Cues

Cues are stored in the ECues enumerator.

  1. Open the ECues enumerator

  2. Edit the display name and description based on your production segments

  3. Add more items if needed

Define additional Actions

Actions are stored in the EAction enumerator. The Pixotope Event System comes with the following default actions.

Default actions

  • IN - Trigger an IN-transition and end in the ON state

  • OUT - Trigger an OUT-transition and end in the OFF state

  • ON - Go instantly to the ON state

  • OFF - Go instantly to the OFF state

The default actions cover most use cases. However, should the project require more actions do the following:

  1. Open the EActions enumerator list

  2. Add more Actions
    Note: Every action needs a corresponding function in the BP_EventActor.

    1. Open the BP_EventActor

    2. Duplicate one of the functions of the default actions

    3. Update the name of the new function to the one of the action

Prepare blueprints

In order for the Event System to index your blueprints, they will first need to be reparented to the BP_EventActor.

Reparent blueprints

  1. Open the blueprints which should be triggered by the event system

  2. Click on "Reparent blueprint" in the File menu

  3. Select the "BP_EventActor"

Set Cues to listen to

Specify which Cues each blueprint should listen to.

  1. Go to the "Details" panel in your blueprint

  2. Assign one or multiple Cues this blueprint should listen to

or on a per-instance basis, directly in our scene

Add blueprint logic

With BP_EventActor assigned as the parent, we can now add the inherited Action events, and wire them into the desired blueprint logic.

It is good practice to ensure that calling any of the available Actions, at any time, results in replicable and correct behavior.

  1. Add all Actions to the blueprint

  2. Add the desired blueprint logic to it

  3. Optionally use a "Switch on ECues" node to execute different Action logic depending on the sent Cue

Set triggers

Once all our Action logic has been wired up and Cues are assigned, we are ready to set up triggers.

Add BP_Master to the level

BP_Master is the beating heart of the event system. It is responsible for rounding up all actors that belong to the system and ensure that actions are called correctly on them.

  1. Drag BP_Master into the level

Use manual/remote event triggers

  1. Open the BP_Master blueprint

  2. Add a Custom Event and give it a distinct name

  3. Connect a Cue Action and select which Cue Action should be triggered

  4. Repeat these steps for all events which need to be triggered

  5. Save BP_Master

Set up manual event triggers

For every Cue Action a debug button on BP_Master gets added.

This can be disabled by unchecking "Call in Editor" on the Details panel of the Cue Action.

Set up remote event triggers

With the Custom Events set up in BP_Master, they can be triggered using the Control Panel.

  1. In Director, open an existing or create a new control panel

  2. Add a trigger widget

  3. As a target and select one of the created events on BP_Master

Test the event triggers

  1. Enter Play or LIVE mode

  2. Trigger the events using the debug buttons or the control panel

Use timecode triggers

The Pixotope Event System also supports automatic triggering with timecode (LTC).

Set up timecode (LTC)

Linear Timecode (LTC) is a clock stream that can be supplied in a number of ways. We can use it to facilitate automated execution of Cue Actions.

We receive an LTC signal through the video card, either

  • as analog audio on a breakout cable OR

  • via an SDI input

Learn more about how to setup LTC for AJA video cards

Linear Timecode (LTC) is a clock stream that can be supplied in a number of ways. It is typically used for synchronization in video production, filmmaking, and live events.

We can use it to facilitate automated execution of Cue Actions, through the 1.5 | Pixotope Event System. If we feed multiple engines the same Timecode signal, they will all trigger at the same time - imperative when frame-perfect accuracy is required, for instance for hitting lip sync or matching audio cues!

We receive an LTC signal through the video card, either

  • as analog audio on a breakout cable OR
  • via an SDI input

In a production environment, this signal would usually come from audio, especially if events had to be triggered on audio playback cues. However, we can easily set up a test environment where we generate and handle our own timecode.

Setup for AJA video cards

Analog audio timecode

AJA Kona 4 and 5

For the Kona 4 and Kona 5 cards, analog audio timecode can be received on the “LTC In” cable on the multifunction breakout cable. 

The state of the Timecode can be seen on the AJA ControlPanel, by viewing the Timecode tab and selecting the source as “LTC Port”. if timecode is received, it is displayed in the control panel.*

*Note the timecode display does not update in real-time.

AJA CORVID

For the CORVID video cards there is a joint Genlock/LTC In analog connector. 

Pixotope does not genlock to Timecode and always requires a genlock reference as analog black/burst or tri-level, or to genlock from an SDI input reference signal. 

We suggest for the Corvid cards it is easier to genlock to an SDI input and to reserve the “genlock/LTC In” input for LTC.

Testing LTC Input

It is very simple to set up an LTC source. You need:

  • Windows computer with a headphone audio output
  • Source audio file 
  • Program to playback the file 
  • An audio cable from a 3.5mm plug to a BNC connector

We suggest you plug in your headphones to the audio output to verify the signal. Test first that you can hear Windows alert sounds. You may need to adjust the Windows audio mixer controls.

  1. Create or download an audio LTC file
    • This should be in.wav format and at 44.1kHz. For ease of testing, we have supplied some working test files here: <reference to Cloud location>
    • Alternatively, you can create your own file at this site: http://elteesee.pehrhovey.net/ltc/create
    • An LTC file has to be created in the same timebase that your video is using - so for 25 or 50Hz video rates, choose a timecode base of 25; for 29.97 or 59.94Hz video rates, choose a timecode base of 59.94
  2. Select a program to play back the file
    • Windows Media Player is sufficient. You could also use Audacity: https://www.audacityteam.org/download/
    • Play one of these LTC files back through the headphones - the sound should “warble” quite loudly - timecode has a very distinctive sound
  3. Connect the audio cable
    • Connect the audio cable from the headphone output jack to the “LTC In” connector of your AJA card
  4. Open the AJA ControlPanel
    • Select the Timecode tab and set the source to “LTC Port”
      • Ensure that the Capture block is showing the correct timebase, and change it if necessary
  5. Play the file
    • Play the LTC file again and check that the timecode display is showing the correct value in the AJA ControlPanel

If the correct timecode can be shown in the AJA ControlPanel, Pixotope will be able to access the LTC values.

Windows Media Player can run the LTC .wav file by just right clicking on the .wav file. If you want move control or to adjust or trim the signal, then we suggest using Audacity.

Troubleshooting LTC Audio

Run the LTC input:

  • If the timecode isn’t shown in Pixotope, check that the timecode is shown in the AJA ControlPanel
  • If it is not shown in the AJA ControlPanel, check that “LTC Port” is selected and that the sync rate of the Capture block matches the LTC file rate
  • If it still doesn’t work, check the audio output of the source computer on headphones. Is it warbling like timecode? Is it loud?
  • If it sounds incorrect, or you have no sound, check the Windows Audio Mixer options or try a different LTC file
  • If it doesn’t appear to playback in Audacity, check with Windows Media Player
Connecting Audio LTC to Multiple Pixotope Engines

The AJA Kona 4 and Kona 5 cards have an “LTC In” and an “LTC Out” cable, so that Audio LTC could be looped through one machine to the next in a “daisy-chained” configuration.

This is not the best way, however, because any break in that chain could stop the downstream machines from receiving the LTC signal.

A better approach is to distribute the LTC signal through an audio distribution amplifier (d/a), and send a separate cable from the d/a to each of the “LTC In” ports of the AJA cards.

Using SDI Embedded Timecode

Pixotope can read LTC timecode that is embedded into the SDI video stream. Currently, that requires a manual procedure to enable it:

  1. In the Editor: Enter the console command: TTMTextureHandler.LtcSourceNumeric 2

    Learn more about Console commands


  2. In Director: Toggle a video input spigot up and down in the Routing panel to restart the video pipeline

Verify the timecode is received by viewing the Timecode tab of the AJA ControlPanel, with source set to “RP188 LTC” or “RP188 VITC”

To revert to accepting LTC through the analog audio input, either:

  1. Reload the Level

Or

  1. In the Editor: Enter the console command: TTMTextureHandler.LtcSourceNumeric 0
  2. In Director: Toggle a video input spigot up and down in the Routing panel

Setup for Blackmagic Design DeckLink video cards

Blackmagic Design DeckLink cards are supported in Pixotope from version 1.5.0. At present, DeckLink cards only support timecode embedded in the SDI input.

Currently, that requires a manual procedure to enable it:

  1. In the Editor: Enter the console command: TTMTextureHandler.LtcSourceNumeric 2

    Learn more about Console commands

  2. In Director: Toggle a video input spigot up and down in the Routing panel to restart the video pipeline

Set up timecode event triggers

For this we utilize the BP_TimeCodeTrigger actor which is also used if we wish to trigger Level Sequences directly.

For Cue Action events on blueprints

BP_TimeCodeTrigger acts as a trigger source and sends a Cue Action call to BP_Master. This then gives the exact same result as if the Cue Action was triggered manually.

  1. Drag a BP_TimeCodeTrigger into your scene

  2. Check "Run Event" and set which Cue Action it should trigger

  3. Set the timecode at which the Cue Action should be triggered

  4. Check the "Live" checkbox to enable the trigger

For level sequences
  1. Drag a BP_TimeCodeTrigger into your scene

  2. Select the Level Sequence which should be triggered and leave "Run Event" unchecked

    1. Choose whether the sequence should be looped

    2. Set start and stop timing overrides, letting you “slip” the level sequence without having to edit the actual sequence asset

  3. Set the timecode at which the Cue Action should be triggered

  4. Check the "Live" checkbox to enable the trigger

More options
Timecode

Most shows tend to start each segment at an arbitrary start time, usually a whole hour, so remember to offset your start time by that value.

Make sure the timecode’s FPS (LTC) is set to the actual frame rate of the production - a timecode trigger set to happen at frame 50, will never be executed if the inbound timecode is at 25 frames per second!

“Display Timecode” simply plays a text element directly above the blueprint, showing the current TC. Excellent for debugging and checking timings. 

Live

By default, all BP_TimeCodeTriggers are set to “Standby”. This means that they will not trigger if their timecode Cue is hit. This is useful in a live production environment, where we do not wish to accidentally have graphics brought up too early due to, for instance, an audio check. “Live” makes the trigger start listening to timecode, and will make it execute once the trigger timing is hit. 

Mock Timecode

If your are working on the event cues, and do not have access to live timecode, we have a handy alternative in Mock Timecode. This is not an actual live signal, but rather a clock that starts ticking from a predefined starting point, fired off manually or at beginPlay.

Useful for testing individual Cues without needing an external trigger source. Can be enabled or disabled through BP_Master, and made to default to active or idle on BeginPlay.

Debug buttons

The debug buttons/events can be used to set live/standby state, start/stop mock timecode, and force a trigger.

For setting project-wide live/standby, or doing other wide calls, please use the relevant events in BP_Master.

Debug timecode triggers

BP_TimeCodeDebug allows you to print timecode to the log, as well as on-screen, and is primarily used to ensure that timecode is actually running, when you go live in a production.

We recommend having one of these in your scene. It will need to be connected to a TimeCodeTrigger actor to function correctly, and will display colour-coded TC on-screen if “Print TC” is enabled, and live/mock timecode is being received.

  • Green - Level Sequence playing

  • Cyan - Standby mode

  • Red - Orange - Live, waiting on trigger