Each shipped transition, what it does, and what parameters drive it. See Concepts → Transitions for the pose-only contract, the four-phase lifecycle, and the five-tier resolution chain; User Guide → Transitions & Blending for authoring guidance.
Every transition inherits from UComposableCameraTransitionBase, which provides:
TransitionDuration— total duration in seconds. Most transitions treat this as an exact duration;InertializedTransitioncan treat it as a minimum.TransitionEnabled / OnBeginPlay / OnEvaluate / OnFinished— the four-phase lifecycle. Subclasses typically overrideOnBeginPlay(to cache source-driven state) andOnEvaluate(to produce the blended pose).
The OnEvaluate contract is the same across every subclass: receive live source and target poses plus a normalized Percentage in [0, 1], return the blended pose.
LinearTransition¶
Straight linear interpolation of position and rotation. Lerp(source, target, Percentage).
- Parameters: none beyond the base duration.
- Velocity-aware: no.
- Typical use: cheapest possible blend. Use as a baseline, or for UI-driven cuts where the source camera isn't moving.
CubicTransition¶
Cubic easing — smooth start and smooth end, accelerating through the middle. No tunable exponent; a fixed cubic polynomial.
- Parameters: none beyond the base duration.
- Velocity-aware: no.
- Typical use: a visual step up from
LinearTransitionfor moderate-duration blends where physical plausibility isn't required.
EaseTransition¶
EaseInOut with a tunable exponent.
| Field | Type | Default | Purpose |
|---|---|---|---|
Exp |
float |
1.0 |
Exponent. 1.0 behaves like a linear blend; higher values produce sharper in/out regions with a flatter middle. |
- Velocity-aware: no.
- Typical use: when you want a specific easing feel that neither
CubicnorSmoothquite hits. Start aroundExp = 2.0and tune.
SmoothTransition¶
Hermite smoothstep or smootherstep — a classic S-curve blend with zero derivative at both ends.
| Field | Type | Default | Purpose |
|---|---|---|---|
bSmootherStep |
bool |
false |
false → Hermite smoothstep t²(3−2t). true → smootherstep t³(t(6t−15)+10), a 5th-order polynomial with zero first and second derivative at both ends. |
- Velocity-aware: no.
- Typical use: UI-driven blends, cinematic establishing shots, anywhere you want a clean S-curve without the velocity recovery of inertialization.
CylindricalTransition¶
Arcs the camera around a pivot derived from the intersection of the source and target look-at rays, instead of cutting a straight path between the two positions. The result reads like an orbital sweep rather than a teleport.
| Field | Type | Default | Purpose |
|---|---|---|---|
MinimumDistanceFromOrigin |
float |
10.0 |
Minimum distance from the derived pivot along the look direction, so the arc never passes through the pivot itself. |
bLockToPivot |
bool |
true |
If true, the camera's rotation is locked toward the pivot throughout the arc. |
- Velocity-aware: no (but inherits the pivot from a ray intersection of the endpoints' look directions).
- Typical use: orbital feels, "camera swoops around hero" moments, boss-reveal swings. Avoid for short gameplay blends — the arc reads as motion for its own sake.
InertializedTransition¶
Physics-plausible 5th-order polynomial blend. The polynomial is constructed so that, at the start of the transition, position and rotation match the source with the correct velocity (recovered from InitParams via (CurrentSourcePose − PreviousSourcePose) / DeltaTime); and at the end, position and rotation reach the target with zero velocity and zero acceleration. This produces a blend that visually respects the source camera's momentum instead of snapping to zero velocity at t=0.
| Field | Type | Default | Purpose |
|---|---|---|---|
bAutoTransitionTime |
bool |
false |
If true, the transition auto-computes its own duration from MaxAcceleration instead of using TransitionDuration. |
MaxAcceleration |
float |
100.0 |
Acceleration cap (cm/s²) used when bAutoTransitionTime is on. Lower values produce longer, softer blends. |
AdditiveCurve |
UCurveFloat* |
nullptr |
Optional normalized curve (x∈[0,1], y∈[0,1], f(0)=1, f(1)=0) added to the polynomial output. Lets you reshape the blend without abandoning the inertialized math. |
AdditiveCurveWeight |
float |
0.5 |
Overall contribution of the additive curve. |
AdditiveCurveShape |
float |
10.0 |
Per-phase falloff for the additive curve (how quickly it blends in near the midpoint and out near the ends). |
- Velocity-aware: yes — the default for most gameplay blends.
- Typical use: gameplay cuts, camera-to-camera blends while the player is moving, any blend where snapping to zero velocity at the start would be visible as a kink.
See Concepts → Transitions → InitParams for why velocity matters and how FComposableCameraTransitionInitParams delivers it.
SplineTransition¶
The camera follows a computed spline from source to target. The spline shape is authored directly as tangents, control points, or an arc descriptor — there's no external rail actor involved (unlike PathGuidedTransition).
| Field | Type | Default | Purpose |
|---|---|---|---|
SplineType |
enum | Hermite |
Hermite / Bezier / CatmullRom / Arc. Controls which geometry fields apply. |
EvaluationCurveType |
enum | Smoother |
Linear / Cubic / Smooth / Smoother. How the camera's t parameter is evolved along the spline. |
StartTangent |
FVector |
(0, 100, 0) |
(Hermite only) tangent at source, in a local frame aligned with source→target. |
EndTangent |
FVector |
(0, 100, 0) |
(Hermite only) tangent at target. |
StartControlPoint |
FVector |
(0, 100, 0) |
(Bezier only) cubic control point attached to source. |
EndControlPoint |
FVector |
(0, 100, 0) |
(Bezier only) cubic control point attached to target. |
ControlPoints |
TArray<FVector> |
— | (CatmullRom only) intermediate knots. |
ArcAngle |
float |
180 |
(Arc only) span in degrees — 180 is a half circle, 90 a quarter circle, 270 a quarter circle going the long way. |
ArcRoll |
float |
0 |
(Arc only) roll along the source→target axis, in degrees. |
- Velocity-aware: no (the spline is pre-computed at
OnBeginPlay). - Typical use: cinematic blends where the exact path matters and is worth authoring by hand. For rail-driven paths, prefer
PathGuidedTransition.
PathGuidedTransition¶
Three-phase cinematic: enter from source onto a rail, follow the rail, exit to the target. An intermediate camera is spawned on the rail as a carrier. Uses two internal InertializedTransitions (for enter and exit) around a rail-follow middle phase.
| Field | Type | Default | Purpose |
|---|---|---|---|
DrivingTransition |
UComposableCameraTransitionBase* (instanced) |
— | Transition used to drive the base camera's motion underneath the path phase. Typically an InertializedTransition. |
Type |
enum | Inertialized |
Inertialized (two inertialized bridges) or Auto (auto-generated splines). Auto does not update the target pose each frame — don't use it if the target camera is moving. |
RailActor |
TSoftObjectPtr<ACameraRig_Rail> |
— | The CameraRig_Rail whose spline the camera follows in the middle phase. |
GuideRange |
FVector2D |
(0.25, 0.75) |
Normalized percentages marking the start and end of the guide phase. The blend spends [0, start] entering the rail, [start, end] following it, [end, 1] exiting. |
SplineMoveCurve |
UCurveFloat* |
— | Optional normalized curve ([0, 1] → [0, 1]) controlling how fast the intermediate camera progresses along the rail. |
- Velocity-aware: yes on enter and exit (via the inertialized bridges).
- Cost: higher than other transitions — spawns an intermediate camera actor and duplicates the rail's spline component. Use for set pieces, not gameplay.
- Typical use: cinematic swoops, lift-off shots, "camera leaves the player and flies to the vista" moments.
DynamicDeocclusionTransition¶
A wrapper around another transition. Each frame it casts one or more "feeler" rays from the wrapped transition's output pose toward the target; if any feeler is blocked, it nudges the output pose along the unblocked feeler direction, preventing the blend from passing through occluders. Clears back to the base pose when occlusion resolves.
| Field | Type | Default | Purpose |
|---|---|---|---|
DrivingTransition |
UComposableCameraTransitionBase* (instanced) |
— | The wrapped transition that actually computes the base blended pose. The deocclusion pass runs on top of that. |
Feelers |
TArray<FComposableCameraRayFeeler> |
— | Rays to probe for occlusion. Each feeler has Yaw, Pitch, Length, Radius, Offset, and a StrengthCurve. |
TraceChannel |
TEnumAsByte<ETraceTypeQuery> |
— | Collision channel used for all feeler traces. |
ActorTypesToIgnore |
TArray<TSoftClassPtr<AActor>> |
— | Actor classes whose instances are ignored by the feelers. |
DeocclusionSpeed |
float |
1.0 |
How fast the camera pushes off an occlusion. |
ResumeWaitingTime |
float |
0.2 |
Seconds to wait with no occlusion detected before returning to the base pose. |
DeadPercentage |
float |
0.8 |
Past this normalized blend percentage, deocclusion is ignored — the transition commits to the target. |
ResumeSpeed |
float |
0.8 |
How fast the camera returns to the base pose once deocclusion clears. |
- Velocity-aware: depends on the
DrivingTransition. Usually wrap anInertializedTransition. - Typical use: long blends in geometry-dense environments — cinematic pans through corridors, third-person → aim transitions around corners, anywhere the blend path might pass through a wall.
See also: User Guide → Transitions & Blending for authoring and tuning; Extending → Custom Transitions for writing your own.