EShotAnchorMode¶
enum EShotAnchorMode
| Value | Description |
|---|---|
SingleTarget |
Anchor = Targets[TargetIndex].Target's resolved world pivot. |
WeightedWorldCentroid |
Anchor = weighted centroid of multiple targets' world pivots. WeightedTargets carries (TargetIndex, Weight) pairs; only entries with valid TargetIndex AND Weight > 0 contribute. |
FixedWorldPosition |
Anchor = an explicit world-space point (WorldPosition), independent of any target. |
Selects how a Shot anchor — a single world-space point — is resolved from the Shot's targets. Used by both the placement anchor (where the camera is placed relative to) and the aim anchor (where the camera is looking at). See [FComposableCameraAnchorSpec](../structs/FComposableCameraAnchorSpec.md#fcomposablecameraanchorspec) below for the data-side.
EShotPlacementMode¶
enum EShotPlacementMode
| Value | Description |
|---|---|
AnchorOrbit |
|
AnchorAtScreen |
|
FixedWorldPosition |
Selects how the camera's POSITION is determined.
-
AnchorOrbit: pure spherical placement around the placement anchor. Camera = PlacementAnchor + Distance · BasisQuat · UnitDir(Yaw, Pitch).
ScreenPositionis unused — anchor projects to screen center under tentative look-at-anchor rotation. Recommended default; designers wanting an off-center anchor on screen should useAim.ScreenPosition(rotation-realized) instead. -
AnchorAtScreen: AnchorOrbit's spherical placement THEN a lateral camera shift along basis-derived right / up axes to make the anchor project to
Placement.ScreenPositionunder tentative rotation. Useful for OTS-style framings where designer wants explicit control over the placement anchor's screen X / Y while Aim looks at a different anchor. Caveat: once the lateral shift is applied, the camera is no longer literally "at Yaw/Pitch around anchor" — the effective spherical position drifts. The two parametrizations (Yaw/Pitch + ScreenPosition) over-specify the camera position; the result is the geometric composition of both, NOT a strict spherical interpretation of Yaw/Pitch. -
FixedWorldPosition: camera placed at an explicit world-space point. No orbit, no anchor required for position. Useful for "locked" cinematic shots (cranes, jib heads, surveillance cams).
Drives the Placement layer of the Composition Solver. See Docs/ShotBasedKeyframing.md §4.3.
EShotAimMode¶
enum EShotAimMode
| Value | Description |
|---|---|
LookAtAnchor |
|
NoOp |
Selects how the camera's ROTATION is determined (after Position is set by the Placement layer).
-
LookAtAnchor: camera rotates so the aim anchor lands at
Aim.ScreenPosition. Closed-form viaSolveCameraRotationForScreenTarget. The aim anchor may differ from the placement anchor — when it does, this is naturally an OTS / two-shot framing (camera placed near subject A, looking at subject B). -
NoOp: Aim layer does nothing. Output rotation = identity with
Shot.Rollcomposed.Aim.AimAnchorandAim.ScreenPositionare ignored. Useful when downstream nodes (or a FixedWorldPosition placement) should fully drive rotation; the editor renders the Aim handle greyed out as a non-effective indicator. Note: in NoOp modeSolvedFromBoundsFitFOV andFollowAnchorFocus modes still consume the identity rotation — projection / depth computations relative to that frame may not match designer intent; preferManualLens + Focus modes when pairing with NoOp Aim.
Drives the Aim layer of the Composition Solver. See spec §4.4.
EShotFOVMode¶
enum EShotFOVMode
| Value | Description |
|---|---|
Manual |
Use FShotLens::ManualFOV directly. |
SolvedFromBoundsFit |
Solve FOV from per-target bounds using the Weight-scaled Perceptual Union Box algorithm (spec §4.5). |
Selects how FOV is computed. Drives the Lens layer.
EShotFocusMode¶
enum EShotFocusMode
| Value | Description |
|---|---|
Manual |
Use FShotFocus::ManualDistance directly. |
FollowPlacementAnchor |
Focus distance = camera-to-PlacementAnchor depth (along forward). |
FollowAimAnchor |
Focus distance = camera-to-AimAnchor depth (along forward). |
FollowCustomAnchor |
Focus distance = camera-to-FocusAnchor depth (along forward), where FocusAnchor is its own [FComposableCameraAnchorSpec](../structs/FComposableCameraAnchorSpec.md#fcomposablecameraanchorspec) — letting the focus point follow a third world point independent of Placement / Aim. |
Selects what world point drives the focus distance. Independent of Position / Rotation / FOV. See spec §4.6.
EShotPlacementBasisFrame¶
enum EShotPlacementBasisFrame
| Value | Description |
|---|---|
World |
Use world axes for the LocalCameraDirection basis. Always valid. |
InheritFromActor |
Use the actor at [FShotPlacement::BasisActorIndex](../structs/FShotPlacement.md#basisactorindex) as the basis — its world quat (or its first SkelMeshComponent's quat when the target's bUseSkeletalMeshForwardAsBasis flag is set, see [FComposableCameraTargetInfo::ResolveBasisQuat](../structs/FComposableCameraTargetInfo.md#resolvebasisquat)). Falls back to World basis with a warning when the index is out of range or the actor is null. |
Reference-frame selector for AnchorOrbit's LocalCameraDirection. Lives at [FShotPlacement::BasisFrame](../structs/FShotPlacement.md#basisframe). See spec §3.5.2.
EComposableCameraActorInputSource¶
enum EComposableCameraActorInputSource
| Value | Description |
|---|---|
ExplicitActor |
Resolve from the actor property or promoted input pin on the node. |
ControllerControlledPawn |
Resolve from the pawn controlled by the camera manager's owning player controller. |
Shared selector used by camera nodes that can either target an explicit actor or automatically follow the controller-controlled pawn.
EComposableCameraLockOnAimPointSource¶
enum EComposableCameraLockOnAimPointSource
| Value | Description |
|---|---|
WorldPosition |
Point is a world-space FVector authored on the node or wired from upstream. |
ActorPosition |
Point is derived from an actor's world location plus a world-up offset. |
EComposableCameraBuildStatus¶
enum EComposableCameraBuildStatus
| Value | Description |
|---|---|
NotBuilt |
|
Success |
|
SuccessWithWarnings |
|
Failed |
Build status for camera type asset validation.
EComposableCameraActionExpirationType¶
enum EComposableCameraActionExpirationType
| Value | Description |
|---|---|
None |
|
Instant |
|
Duration |
|
Manual |
|
Condition |
EComposableCameraActionExecutionType¶
enum EComposableCameraActionExecutionType
| Value | Description |
|---|---|
PreCameraTick |
|
PreNodeTick |
|
PostNodeTick |
|
PostCameraTick |
EComposableCameraResumeCameraTransformSchema¶
enum EComposableCameraResumeCameraTransformSchema
| Value | Description |
|---|---|
PreserveCurrent |
|
PreserveResumed |
|
Specified |
EShotTargetBoundsShape¶
enum EShotTargetBoundsShape
| Value | Description |
|---|---|
None |
No bounding box — target does not contribute to FOV solve. Most common. |
ManualExtent |
Author-supplied half-extent (ManualBoundsExtent). Always cheap. |
AutoFromComponentBounds |
Snapshot of Actor->GetComponentsBoundingBox() per BoundsCachePolicy. Walks the actor's component hierarchy each refresh — never per-frame unless BoundsCachePolicy == Live. See §3.3.1 of the spec for the cache lifecycle. |
Selects how the bounding box around a shot target is determined. The bounding box drives the FOV solve when FOVMode == SolvedFromBoundsFit (Docs/ShotBasedKeyframing.md §4.5 — Weight-scaled Perceptual Union Box).
EBoundsCachePolicy¶
enum EBoundsCachePolicy
| Value | Description |
|---|---|
StaticSnapshot |
Cached once when the Shot becomes the active shot in LS; never refreshed for the lifetime of the Shot section. Cheapest; right for non-deforming scene actors. Default. |
Periodic |
Re-cached every BoundsRefreshIntervalFrames frames. Right for slowly- deforming actors (vehicles with moving parts, characters whose pose changes slowly). |
Live |
Re-cached every frame. Most accurate, most expensive — use sparingly, only for highly animated characters whose BB matters frame-to-frame. |
Cache refresh policy for AutoFromComponentBounds bounds shape. Only meaningful when BoundsShape == AutoFromComponentBounds.
EComposableCameraLookAtType¶
enum EComposableCameraLookAtType
| Value | Description |
|---|---|
ByPosition |
|
ByActor |
EComposableCameraLookAtConstraintType¶
enum EComposableCameraLookAtConstraintType
| Value | Description |
|---|---|
Hard |
|
Soft |
EComposableCameraSpiralPivotSourceType¶
enum EComposableCameraSpiralPivotSourceType
| Value | Description |
|---|---|
FromActor |
|
FromVector |
Source of the pivot the spiral is built around.
FromActor — PivotActor->GetActorLocation() is sampled each frame. The actor's Up / Forward are also available as Spiral-Space axis sources. FromVector — PivotPosition is used directly. When this mode is active, RotationAxis = PivotActorUp and ReferenceDirection = PivotActorForward silently fall back to WorldUp / WorldX with a runtime warning — there is no actor to read from.
EComposableCameraSpiralRotationAxis¶
enum EComposableCameraSpiralRotationAxis
| Value | Description |
|---|---|
WorldUp |
|
PivotActorUp |
|
Custom |
Axis around which the camera orbits. Defines Spiral Space's Up direction.
EComposableCameraSpiralReferenceDirection¶
enum EComposableCameraSpiralReferenceDirection
| Value | Description |
|---|---|
WorldX |
|
PivotActorForward |
|
CameraInitialForward |
|
Custom |
Direction that anchors θ = 0 in the plane perpendicular to the rotation axis. Defines Spiral Space's Forward direction after projection. The chosen direction is projected onto the plane perpendicular to the rotation axis and renormalized — it does not need to be pre-orthogonal to the axis.
CameraInitialForward captures the camera's forward vector on the first tick after activation and reuses it for the lifetime of the node, so the spiral starts seamlessly from the current camera orientation.
EComposableCameraSpiralPlayMode¶
enum EComposableCameraSpiralPlayMode
| Value | Description |
|---|---|
Once |
|
Loop |
|
PingPong |
How the spiral evolves past Duration seconds. In every mode, θ / Radius / Height are direct curve evaluations at NormalizedTime — there is no per-frame integration and no accumulated state, so the pose at any arbitrary t is computable in O(1).
Once — NormalizedTime clamps at 1 after Duration; all three curves hold their Y at X=1. The pose freezes at the terminal frame. Loop — NormalizedTime = Fmod(Elapsed, Duration) / Duration. θ visually wraps cleanly when AngleCurve's Y(1) - Y(0) is a multiple of 360 (trig periodicity absorbs the jump); non-multiples snap at the cycle seam, which is the author's explicit choice. PingPong — NormalizedTime oscillates 0 → 1 → 0 → 1 every 2 * Duration seconds. All three curves are sampled at the mirrored time, so θ / Radius / Height naturally retrace on the return half. No sign flip needed — the X mirror alone carries the symmetry.
EComposableCameraSplineNodeSplineType¶
enum EComposableCameraSplineNodeSplineType
| Value | Description |
|---|---|
BuiltInSpline |
|
Bezier |
|
CubicHermite |
|
BasicSpline |
|
NURBS |
EComposableCameraSplineNodeMoveMethod¶
enum EComposableCameraSplineNodeMoveMethod
| Value | Description |
|---|---|
Automatic |
|
ClosestPoint |
EComposableCameraPatchExpirationType¶
enum EComposableCameraPatchExpirationType
| Value | Description |
|---|---|
None |
|
Duration |
Expires after Duration seconds, counted from the moment the envelope reaches Active (alpha == 1). |
Manual |
Expires only when ExpirePatch(handle) is called. |
Condition |
Expires when the Patch asset's CanRemain() override returns false. |
Bitmask of expiration channels that may individually fire to retire a Patch.
Mirrors the spirit of EComposableCameraActionExpirationType but is tailored to Patch's "always has an enter/exit envelope" model — there is no Instant variant because every Patch ramps in and out via its envelope.
A Patch's effective expiration is the OR of its enabled channels: the first channel to fire flips Phase to Exiting. Bits are independent and stack additively — e.g. (Duration | Manual) means "expires after Duration seconds OR when ExpirePatch is called, whichever comes first".
EComposableCameraPatchEase¶
enum EComposableCameraPatchEase
| Value | Description |
|---|---|
Linear |
|
EaseIn |
|
EaseOut |
|
EaseInOut |
|
Smooth |
Easing curve applied symmetrically to the enter and exit alpha ramps.
Asset-only in V1 — there is no per-AddPatch override (an enum has no natural sentinel value, and adding a parallel bool is worse than asset-only). If a future case requires a runtime override, add a sixth Custom member with a companion FRuntimeFloatCurve pin (see PatchSystemProposal §8.1).
EComposableCameraPatchPhase¶
enum EComposableCameraPatchPhase
| Value | Description |
|---|---|
Entering |
|
Active |
|
Exiting |
|
Expired |
Lifecycle phase of a Patch instance.
Entering : alpha ramping 0 → 1 over EnterDuration. Patch evaluator already ticks at full fidelity. Active : alpha == 1, expiration channels are evaluated each frame. Exiting : alpha ramping 1 → 0 over ExitDuration. Expired : terminal; instance is removed at the end of PatchManager::Apply.
EComposableCameraImpulseBoxDistanceType¶
enum EComposableCameraImpulseBoxDistanceType
| Value | Description |
|---|---|
BoxOrigin |
|
XAxis |
|
YAxis |
|
ZAxis |
|
XYPlane |
|
XZPlane |
|
YZPlane |
EComposableCameraPinDirection¶
enum EComposableCameraPinDirection
| Value | Description |
|---|---|
Input |
|
Output |
Direction of a camera node data pin.
EComposableCameraPinType¶
enum EComposableCameraPinType
| Value | Description |
|---|---|
Bool |
|
Int32 |
|
Float |
|
Double |
|
Vector2D |
|
Vector3D |
|
Vector4 |
|
Rotator |
|
Transform |
|
Actor |
|
Object |
|
Struct |
Custom USTRUCT type. Currently rejected by runtime storage until typed ownership exists. |
Name |
FName value. Stored as FName in the data block (POD: NAME_INDEX + NAME_NUMBER). |
Enum |
UENUM value. Stored as a normalized int64 in the data block; the owning UEnum* is carried on the declaration and used to narrow-cast into the actual property's underlying width (uint8 / int32 / int64) at write time. When this is selected, EnumType must be set. |
Delegate |
Single-cast dynamic delegate (FScriptDelegate). NOT stored in the data block — delegates carry heap-owned state and cannot be memcpy'd. Instead they are stored in a parallel map on FComposableCameraParameterBlock and applied at activation time via reflection (FDelegateProperty). Per-frame auto-resolve skips this type. When this is selected, SignatureFunction must be set to the UFunction defining the delegate's parameter/return signature. |
Supported data types for camera node pins.
EComposableCameraExecEntryType¶
enum EComposableCameraExecEntryType
| Value | Description |
|---|---|
CameraNode |
Execute a camera node by its index in NodeTemplates. |
SetVariable |
Execute an internal-variable Set operation: copy the source camera node's output pin into the internal variable identified by VariableGuid. |
Tag for entries in the serialized execution chain.
The execution chain is a linear sequence of operations the camera runs each frame: camera nodes do the actual pose computation, and internal-variable Set operations write scratch values between camera nodes. See FComposableCameraExecEntry.
EComposableCameraTreeNodeKind¶
enum EComposableCameraTreeNodeKind
| Value | Description |
|---|---|
Leaf |
|
ReferenceLeaf |
|
InnerTransition |
Runtime debug snapshot structures consumed by FComposableCameraDebugPanel.
These are distinct from the editor-side FComposableCameraDebugSnapshot (Core/ComposableCameraDebugSnapshot.h, WITH_EDITOR only). The editor one captures a SINGLE camera's per-node state for the Type Asset Editor's graph overlay. These structs capture the entire Tier-1 context stack + each context's Tier-2 evaluation tree, for the in-viewport debug panel (runtime, always available).
Design:
-
Tree nodes are flattened DFS pre-order with a Depth field, so the renderer does not need recursion and can pick connector glyphs (vertical stem + elbow) from a single pass.
-
All pointer data is resolved eagerly into display strings at snapshot time — consumers never deref anything runtime-owned. This makes the snapshot safe to cache and freeze.
-
Progress / lifetime fields are captured as floats, not pre-formatted strings, so the renderer can draw real progress bars instead of parsing text. Kind of an evaluation-tree node. Parallels the TVariant in FComposableCameraEvaluationTreeNode.
EComposableCameraPatchSource¶
enum EComposableCameraPatchSource
| Value | Description |
|---|---|
BlueprintLibrary |
Added via BP AddCameraPatch library / runtime PCM path. Lives on the Director's PatchManager; uses stateful envelope. |
Sequencer |
Driven by a Sequencer [UMovieSceneComposableCameraPatchTrack](../uobjects-other/UMovieSceneComposableCameraPatchTrack.md#umoviescenecomposablecamerapatchtrack) section bound to an [AComposableCameraLevelSequenceActor](../actors/AComposableCameraLevelSequenceActor.md#acomposablecameralevelsequenceactor) via TargetActorBinding. Lives on the LS Component's overlay map; uses stateless envelope. |
Where a patch entry was sourced from — drives the row's prefix label so the designer can tell which path is producing each visible patch.
EComposableCameraAutoRotateDirectionMode¶
enum EComposableCameraAutoRotateDirectionMode
| Value | Description |
|---|---|
Direction |
|
ActorForward |
EComposableCameraNodeLevelSequenceCompatibility¶
enum EComposableCameraNodeLevelSequenceCompatibility
| Value | Description |
|---|---|
Compatible |
Node evaluates correctly without a PCM. Safe in Level Sequence. |
RequiresPCM |
Node requires a live PCM (viewport, player controller, HUD, spawn new cameras mid-init, etc.). In LS the node is a no-op and the Details panel warns. |
ComputeOnly |
Node lives on the BeginPlay compute chain and is never per-frame-evaluated in LS (LS skips the compute chain). Warning is informational. |
How a node class behaves when evaluated in a Level-Sequence context, where the camera is driven by a UComposableCameraLevelSequenceComponent and no UComposableCameraPlayerCameraManager is present.
Queried by the LS Details-panel customization (to warn the designer) and by the LS component's tick path (to decide whether to evaluate the node at all).
Default is Compatible; override in node classes that cannot run without a PCM, or on compute-chain nodes that are never evaluated in LS by design.
EComposableCameraNodePatchCompatibility¶
enum EComposableCameraNodePatchCompatibility
| Value | Description |
|---|---|
Compatible |
Reads upstream pose, mutates it. Safe in a Patch graph. |
Incompatible |
Initializes pose from scratch or delegates to external sources — ignores InPose. Meaningless in a Patch context; editor emits an error build message. |
CompatibleWithCaveat |
Works but with surprising semantics (e.g. overrides a single pose field in a way that may discard useful upstream data). Editor emits a warning build message so the author can confirm intent. |
Declares how a node behaves when placed in a Camera Patch graph (per PatchSystemProposal §11). A Patch evaluator receives an upstream pose each frame and expects its nodes to read-modify-write that pose — nodes that synthesize pose from scratch or delegate to external sources produce surprising results in a Patch context.
Queried by the Patch asset's editor-time validation (to warn the designer via Build messages) and by future runtime tooling (no current runtime gate, so Incompatible nodes do run — they just produce wrong output). The classification is authoring-side guidance, not a runtime safety net.
Default is Compatible; override in nodes that have surprising semantics.
ECameraPivotOffset¶
enum ECameraPivotOffset
| Value | Description |
|---|---|
WorldSpace |
|
ActorLocalSpace |
|
CameraSpace |
EComposableCameraMixingCameraWeightNormalizationMethod¶
enum EComposableCameraMixingCameraWeightNormalizationMethod
| Value | Description |
|---|---|
L1 |
|
L2 |
|
SoftMax |
Weight normalization method.
EComposableCameraMixingCameraMode¶
enum EComposableCameraMixingCameraMode
| Value | Description |
|---|---|
PositionOnly |
|
RotationOnly |
|
Both |
Mixing camera node mode.
EComposableCameraMixingCameraRotationMethod¶
enum EComposableCameraMixingCameraRotationMethod
| Value | Description |
|---|---|
MatrixInterp |
|
CircularInterp |
|
QuaternionInterpolation |
|
AngleInterpolation |
Different methods to average rotations. Ref: https://sulley.cc/2024/01/11/20/06/.
EComposableCameraSplineTransitionType¶
enum EComposableCameraSplineTransitionType
| Value | Description |
|---|---|
Hermite |
|
Bezier |
|
CatmullRom |
|
Arc |
EComposableCameraSplineTransitionEvaluationCurveType¶
enum EComposableCameraSplineTransitionEvaluationCurveType
| Value | Description |
|---|---|
Smooth |
|
Smoother |
|
Linear |
|
Cubic |
EComposableCameraHitchcockZoomDriver¶
enum EComposableCameraHitchcockZoomDriver
| Value | Description |
|---|---|
FromFOVDelta |
|
FromDistanceDelta |
Which authored quantity the node drives. The other is solved from the frame-zero lock constant.
FromFOVDelta — author FOVDeltaCurve, derive camera distance. Natural when you think about the look of the effect ("background should distort to N degrees wider"). FromDistanceDelta — author DistanceDeltaCurve, derive FOV. Natural when you think about the physical move ("camera dollies back 3 metres").
Both paths preserve the same distance · tan(FOV/2) = LockConstant invariant captured on the first tick, so the two authoring styles are physically equivalent — the choice is purely about which curve is easier to shape in the project's authoring pipeline.
EComposableCameraRotationConstrainType¶
enum EComposableCameraRotationConstrainType
| Value | Description |
|---|---|
WorldSpace |
|
ActorSpace |
|
VectorSpace |
EComposableCameraSetRotationSource¶
enum EComposableCameraSetRotationSource
| Value | Description |
|---|---|
FromActor |
Use a resolved actor's forward vector. |
FromVector |
Use an explicit forward vector. |
FromRotator |
Use the literal rotator value. |
EComposableCameraScreenSpaceMethod¶
enum EComposableCameraScreenSpaceMethod
| Value | Description |
|---|---|
Translate |
|
Rotate |
EComposableCameraScreenSpacePivotSource¶
enum EComposableCameraScreenSpacePivotSource
| Value | Description |
|---|---|
WorldPosition |
|
ActorPosition |
EComposableCameraVolumeSource¶
enum EComposableCameraVolumeSource
| Value | Description |
|---|---|
FromActor |
|
Inline |
How the constraint volume is sourced.
FromActor — Pull the shape from the first UShapeComponent on VolumeActor. UBoxComponent and USphereComponent are supported; the component's world transform + scaled extents drive the volume. Capsule and other shape subclasses are rejected with a warning. Inline — The node carries its own world-space volume definition via VolumeCenter / VolumeRotation / BoxExtents / SphereRadius.
EComposableCameraVolumeShape¶
enum EComposableCameraVolumeShape
| Value | Description |
|---|---|
Box |
|
Sphere |
Shape of the constraint volume in Inline mode. FromActor mode resolves the shape from the component's concrete class.
EComposableCameraPathGuidedTransitionType¶
enum EComposableCameraPathGuidedTransitionType
| Value | Description |
|---|---|
Inertialized |
|
Auto |
EComposableCameraShotSource¶
enum EComposableCameraShotSource
| Value | Description |
|---|---|
Inline |
InlineShot carries the Shot data directly inside the Section. One-off framing for a specific moment. Good for shots that aren't reused elsewhere and don't justify a separate asset. |
AssetReference |
ShotAssetRef soft-refs a [UComposableCameraShotAsset](../uobjects-other/UComposableCameraShotAsset.md#ucomposablecamerashotasset). Picking an asset snapshots its Shot into section-local ShotOverrides; later Level Sequence edits mutate only that section copy. |
Source-of-truth for a Shot Section's framing data — Inline value-typed struct or AssetReference soft-pointer. See [UComposableCameraShotAsset](../uobjects-other/UComposableCameraShotAsset.md#ucomposablecamerashotasset) and spec §3.4.1.
EComposableCameraRelativeFixedPoseMethod¶
enum EComposableCameraRelativeFixedPoseMethod
| Value | Description |
|---|---|
RelativeToTransform |
|
RelativeToActor |