Skip to content

Introduction to Dialogue Cameras

One of the really useful features SUDS Pro offers is the ability to cut the camera to different shots. Dialogue is a lot more dynamic and cinematic when camera shots are chosen to suit the flow of dialogue; in cinematography it's been long established that different camera shots can communicate lots of subtle cues. For an introduction to dialogue camera shots, I recommend this video on Dialogue Camera Shots in Westworld.

Making Cameras Available To Dialogue

Let's say we have a Cine Camera Actor in our scene. How do we make this available to the dialogue?

Well, SUDS Pro has an interface called ISudsProCameraShotProvider. Any Participant which implements this interface can provide cameras to the dialogue via the "Get Dialogue Camera Shot" function.

Luckily, BP_SudsProDialogueRunner implements this interface for you, so all you need to do is fill it in on the properties of the instance in your level:

Camera Shots

The Camera Shots list maps a camera shot name, to a camera in the level. You can then refer to this camera shot name, e.g. OTSAtPlayer, in your dialogue scripts.

Cutting to a camera shot

To cut to a camera shot in the dialogue, you use the CameraCut event:

[event CameraCut `OTSAtPlayer`]
Player: Hey, the camera is pointing at me now!

On executing that event, SUDS Pro will attempt to find a camera called OTSAtPlayer and then cut to that camera, before playing the Player's line of dialogue.

Notice how you use backticks (`) to enclose OTSAtPlayer, that's because it's a Name, and backticks are the way Names are quoted in script.

There are other arguments you can give to the CameraCut event, described in the main Camera docs, but let's keep it simple for now.

Default camera shots

Often, you're going to want to cut backwards and forwards between the main characters in the dialogue as they talk. It would be tedious to have to use explicit CameraCut events before every line, so instead you can set default camera shots for each speaker. These are just special Variables:

[set DefaultCameraShot.Player `OTSAtPlayer`]
[set DefaultCameraShot.Manny `OTSAtNPC`]
Player: This will have cut to over-the-shoulder shot pointing at Player
Manny: OK now we've cut to another over-the-shoulder camera, pointing at the Manny NPC
Player: And now we're pointing at me again!

The format of the variable is DefaultCameraShot.SpeakerID, and you set it to the same shot name you would have used in an explicit CameraCut event. So with the above code, whenever the Player speaks, there's an implicit CameraCut to the OTSAtPlayer camera, and whenever Manny speaks, it cuts to OTSAtNPC.

If you explicitly CameraCut before a speaker line, then the default camera shot is not used for that line. You can also temporarily suspend default camera cutting for a time; more details are available in the main camera docs.

Framing shots

This is all fine, but how do you set up the camera shots in the first place? If you want to frame a shot, you need the subjects in the frame to judge where to place the camera, right? But players and NPCs move around, so if you're putting a static camera in the scene, you'll need to be able to see what the characters will look like in that scene (and also maybe move them there during dialogue setup).

This is where Character Marks come in. In movies, there's a concept of actors needing to "hit their marks", so that they're in the right spot to frame a shot nicely.

SUDS Pro comes with a class called "BP_DialogueCharacterMark", which provides 2 things:

  1. A visual placeholder for a character so you can frame a camera shot
  2. A "mark" that characters can be moved to so they match this framing

Moving characters is covered elsewhere, but the visual placeholder is as simple as placing an instance of this class in the scene, and changing the skeletal mesh entry to your character's mesh. It will automatically hide itself at game time, but you can use it to frame up your camera shots.

Take a look at the Example Project for details.