Skip to content

Camera Cuts

Making Cameras Available To Dialogue

Any Participant that implements ISudsProCameraShotProvider can implement "Get Dialogue Camera Shot" to map a camera name to a camera instance.

BP_SudsProDialogueRunner implements this interface for you, and provides a simple way to link your cameras by name via an instance of it in your level:

Camera Shots

You can of course implement your own version of this if you wish, but using the provided runner is simplest.

Framing Camera Shots

When you create a camera in the scene to act as a dialogue camera, you'll want to frame it so that everything looks the way you want, including where the characters are. But players and NPCs can move around, so how do you manage this?

Character Marks can provide both a location that you can move characters to, and also a placeholder mesh you can use to frame the shot. You can use those to make sure characters are in the right place to be framed nicely, and have them display a version of the character in that spot at edit time that helps you judge how to set your cameras up.

Place a "BP_DialogueCharacterMark" instance in your scene and set the skeleton & default animation, and use that as a sighting guide for framing. See Character Marks for more details.

Hard Cuts

To perform a hard cut to another camera, use the CameraCut event:

[event CameraCut `ShotName`]

Note the use of backticks (`) around `ShotName`, which is the quoting required in SUDS for a Name value

Where `ShotName` is the name of the camera shot you want to cut to.

Default Camera Shots

It's extremely common to want to flip back & forth between cameras when each character in the dialogue is speaking. Instead of manually specifying a CameraCut for every line, you can set a DefaultCameraShot variable for speakers in the dialogue, and unless otherwise specified, the camera will cut to that shot when that character speaks.

For example:

[set DefaultCameraShot.Player `OverTheShoulderAtPlayer`]
[set DefaultCameraShot.NPC `OverTheShoulderAtNPC`]

In this case, whenever Player has a line in the dialogue, the camera will cut to them before playing it, and the same for NPC. The general form is:

[set DefaultCameraShot.SpeakerID `CameraShotName`]

A good place to do this is in the header of your script.

Overriding Default Camera Shots

If there is an explicit CameraCut or CameraTransition before a speaker line, then the default camera shot will not be cut to for that line.

Alternatively, you can explicitly disable default camera shot cuts for a time by setting the CameraDefaultShotCutsDisabled variable.

[set CameraDefaultShotCutsDisabled true]

After that line, no default camera shot cuts will occur, until CameraDefaultShotCutsDisabled is reset back to false.

Smooth Transitions

To smoothly transition from the current camera to another shot, use the CameraTransition event:

[event CameraTransition `ShotName`]

Once again, ShotName is the name of the camera you want to transition to.

Optionally, you can specify how long the transition should take, and using what easing curve. Here's an example with the default values, specified explicitly:

[event CameraTransition `ShotName`, 0.5, `EaseInOut`, 3]

Note the use of backticks (`) around `ShotName` and `EaseInOut`, which is the quoting required in SUDS for a Name value

Argument Default Description
Shot Name None The name of the camera shot to transition to
Duration 0.5 The time it should take for the transition to happen
Ease Curve `EaseInOut` The easing curve to apply to the transition. Valid values are `Linear`, `Cubic`, `EaseIn`, `EaseOut`, `EaseInOut`
Ease Exponent 3 If using `EaseIn`, `EaseOut` or `EaseInOut`, the exponent controls the amount of easing

Note: Any line after a CameraTransition won't occur until after the transition is complete. This is in contrast to other animated camera effects, which run in parallel by default. The reason for CameraTransition to block later lines until done is that this is pretty much always what you want; for the speaker to continue once the camera transition is done.

Transition Into and Out of Dialogue

There's a special case around dialogue cameras, and that's what happens when you enter and exit the dialogue from a regular player camera. By default, SUDS Pro does a hard cut between them (assuming you have a DefaultCameraShot for the first speaker).

You can override on entry using a manual CameraTransition event before the first line, but this doesn't cover the case of returning to the player at the end.

A better way of controlling the transition from / to player cameras is via Project Settings > Plugins > SUDS Pro:

Dialogue Transition Settings

Here you can set the default way that SUDS Pro will transition cameras when entering and exiting dialogue.

You can override this per-script as well. For entering the dialogue:

# Makes the transition from the player camera to the first dialogue DefaultCameraShot a smooth transition
[set CameraEnterSmoothTransition true]
# Alternatively you could do this before your first line of dialogue
# Although it does hard-code the shot, instead of it being inferred from the DefaultCameraShot
[event CameraTransition `FirstCameraShot`]

And when exiting dialogue back to the player camera:

# Makes the camera transition at the end of dialogue back to player camera a smooth transition
[set CameraExitSmoothTransition true]

Alternative: Keep Dialogue Camera On Exit

Although by default SUDS Pro will try to restore the camera back to the player camera when the dialogue ends, you can optionally keep the last dialogue camera as the active one, if you want. Set this in your script some time before the end:

[set CameraKeepShotPostDialogue true]