Modifiers
Every behavior and parameter modifier in Agentic Gameplay Camera, with parameters, defaults, JSON examples and the blend curve list
Modifiers Reference
Modifiers are what turn authored data into rig behavior. A behavior modifier goes in a mode's Modifiers array and produces GameplayCameras rig nodes. A parameter modifier goes in a state's Parameters array and overrides values for that state.
Both use the same shape: a tag plus a Params map of string values. The generated /AgenticGameplayCamera/Shared/AgenticCameraSchema.json is authoritative for key names — regenerate it with Validate All Camera Tables whenever you are unsure.
Constraints and Shake require the Params. prefix. Their settings live in an inner struct, and the import resolver only descends into a struct when the path is explicitly dotted. A bare "PitchMin" is reported as an unknown key in the import report and the modifier keeps its C++ default. Every other modifier on this page takes bare keys.
Behavior Modifiers
Focus
Tag: Agentic.Camera.Modifier.Focus
Lock-on target tracking. Rotates the view to keep the target framed by driving control rotation, which makes the camera arm orbit the character. Needs IAgenticTargetProvider on your character — from the optional sibling Agentic Targeting plugin. Without a target source this modifier is inert; the rest of the camera is unaffected.
| Mode | Behavior | Use case |
|---|---|---|
Soft | The player can look away; the camera drifts back at InterpSpeed | Souls-like lock-on |
HardLock | Player look input is disabled outright; the camera always points at the target | Boss fights, cinematic combat |
HardLock calls SetIgnoreLookInput(true), which is what prevents the input fighting that reads as camera stutter. Input is restored automatically when the target is lost, the mode changes to Soft, or the camera mode deactivates.
| Param | Type | Default | Description |
|---|---|---|---|
Mode | enum | Soft | "0" = Soft, "1" = HardLock |
InterpSpeed | float | 10.0 | Rotation speed toward the target, degrees/sec. Soft only |
bYawOnly | bool | false | Rotate yaw only, preserving the player's pitch |
TargetOffset | vector | (0,0,50) | Offset from target centre — aim at the head instead of the torso |
bDebugDraw | bool | false | Target indicator, lock-on line, lock mode label |
{
"ModifierTag": { "TagName": "Agentic.Camera.Modifier.Focus" },
"Params": {
"Mode": "0",
"InterpSpeed": "12.0",
"bYawOnly": "true",
"TargetOffset": "(X=0,Y=0,Z=50)"
}
}Awareness
Tag: Agentic.Camera.Modifier.Awareness
Multi-threat framing. Adjusts arm length, FOV and lateral framing offset so several threats stay readable — and never touches rotation. The player always controls where they look; Awareness only controls how far back and how wide the view is, like taking a step back from a scene. Requires IAgenticTargetProvider.
It queries awareness targets, filters by ScoreThreshold, checks MinThreatsToActivate, measures the angular spread of what is left, and pulls back when that spread exceeds the current FOV.
| Param | Type | Default | Description |
|---|---|---|---|
MinThreatsToActivate | int | 2 | 1 = always, 2+ = group fights only |
ScoreThreshold | float | 0.1 | Minimum threat score (0–1) to consider |
FramingPadding | float | 0.1 | Margin around the threats |
MinArmLength | float | 300.0 | Arm length when threats are clustered |
MaxArmLength | float | 600.0 | Upper bound on pullback |
ArmWeight | float | 0.7 | Arm contribution, 0–1 |
MaxHeightOffset | float | 100.0 | Height rise at full pullback — a tactical overhead lean |
MinFOV | float | 90.0 | FOV when threats are clustered |
MaxFOV | float | 110.0 | Widest FOV |
FOVWeight | float | 0.3 | FOV contribution, 0–1 |
bEnableFramingOffset | bool | true | Slide laterally to keep threats visible |
MaxFramingOffset | float | 200.0 | Maximum sideways shift |
FramingOffsetWeight | float | 0.5 | Framing offset strength, 0–1 |
bEnableInputSteering | bool | false | Redirect pitch input into yaw when threats leave the frame below |
InputSteeringWeight | float | 2.0 | Redirect multiplier |
InputSteeringThreshold | float | 20.0 | Degrees off-screen before steering starts |
InputSteeringMaxAngle | float | 70.0 | Beyond this the player is deliberately looking away; steering stops |
InterpSpeed | float | 5.0 | Adjustment speed |
bDebugDraw | bool | false | Threat boxes, threat lines, zoom bar |
{
"ModifierTag": { "TagName": "Agentic.Camera.Modifier.Awareness" },
"Params": {
"MinThreatsToActivate": "2",
"MinArmLength": "300.0",
"MaxArmLength": "600.0",
"ArmWeight": "0.7",
"MaxFOV": "110.0",
"FOVWeight": "0.3",
"bEnableFramingOffset": "true",
"FramingOffsetWeight": "0.5",
"InterpSpeed": "5.0"
}
}Focus and Awareness compose deliberately: Focus points the camera at the locked target, Awareness pulls back to reveal flankers, and neither fights the player's input.
LookAhead
Tag: Agentic.Camera.Modifier.LookAhead
Offsets the camera toward the movement direction so motion reads with anticipation.
| Param | Type | Default | Description |
|---|---|---|---|
Mode | enum | Velocity | Velocity holds the offset while moving; Impulse kicks on acceleration and decays |
MaxOffset | float | 60.0 | Maximum offset in units |
InterpSpeed | float | 3.0 | Lower is smoother |
VelocityScale | float | 0.1 | Velocity / acceleration multiplier |
MinVelocity | float | 50.0 | Minimum speed to activate, units/sec |
DecaySpeed | float | 2.0 | Impulse mode only: decay back to centre |
bHorizontalOnly | bool | true | Offset horizontally only |
PitchScale
Tag: Agentic.Camera.Modifier.PitchScale
Scales arm length and FOV by camera pitch: one extreme gets intimate and close, the other gets a wider overview.
| Param | Type | Default | Description |
|---|---|---|---|
bScaleArmLength | bool | true | Enable arm scaling |
ArmLengthMinScale | float | 0.8 | Arm multiplier when looking straight down |
ArmLengthMaxScale | float | 1.2 | Arm multiplier when looking straight up |
MinAbsoluteArmLength | float | 150.0 | Safety clamp — keeps the character visible |
bInvertPitchDirection | bool | false | Off: down → min scale, up → max scale. On: inverted |
bScaleFOV | bool | true | Enable FOV scaling |
FOVMinScale | float | 0.95 | FOV multiplier at the min-scale extreme |
FOVMaxScale | float | 1.05 | FOV multiplier at the max-scale extreme |
InterpSpeed | float | 5.0 | Response speed |
PitchFollow
Tag: Agentic.Camera.Modifier.PitchFollow
Tilts the camera to follow terrain slope while walking up or down an incline, returning to a resting pitch on flat ground. For falling pitch, use the Pitch parameter on the Falling state instead — the separation lets you tune slope and falling independently.
| Param | Type | Default | Description |
|---|---|---|---|
Speed | float | 30.0 | Pitch adjustment speed, degrees/sec |
TimeThreshold | float | 2.0 | Seconds without camera input before it activates |
AngleThreshold | float | 5.0 | Minimum deviation to trigger, degrees |
RestingPitch | float | -10.0 | Resting pitch on flat ground (negative looks down) |
SlopeMinIncline | float | 15.0 | Minimum slope angle to react to, degrees |
SlopeWeight | float | 0.5 | 0 ignores the slope, 1 matches it exactly |
bDebugDraw | bool | false | Slope direction, angle text, target pitch indicator |
YawFollow
Tag: Agentic.Camera.Modifier.YawFollow
Rotates yaw to follow the character's movement direction after a delay without camera input — the exploration camera that quietly centres itself behind the character. Not recommended on combat modes, where precise manual control matters more.
| Param | Type | Default | Description |
|---|---|---|---|
Speed | float | 30.0 | Yaw rotation speed, degrees/sec. Above 30 is allowed, and the table validator warns |
TimeThreshold | float | 2.0 | Seconds without camera input before it activates |
AngleThreshold | float | 10.0 | Minimum deviation from movement direction, degrees |
bResetTimerOnStopMovement | bool | false | Reset the idle timer when the character stops |
bDebugDraw | bool | false | Movement-direction arrow, timer bar, status text |
Constraints
Tag: Agentic.Camera.Modifier.Constraints
Limits pitch and yaw, decelerating smoothly into the boundary rather than clamping hard. Requires the Params. prefix.
| Param | Type | Default | Description |
|---|---|---|---|
Params.bConstrainPitch | bool | true | Enable pitch limits |
Params.PitchMin | float | -89.0 | Minimum pitch |
Params.PitchMax | float | 89.0 | Maximum pitch |
Params.PitchTolerance | float | 10.0 | Deceleration zone before the limit, degrees |
Params.bConstrainYaw | bool | false | Enable yaw limits |
Params.YawMin | float | 0.0 | Minimum yaw |
Params.YawMax | float | 360.0 | Maximum yaw |
Params.YawTolerance | float | 10.0 | Deceleration zone, degrees |
bDebugDraw | bool | false | Pitch limit arc, current pitch marker, yaw range text |
{
"ModifierTag": { "TagName": "Agentic.Camera.Modifier.Constraints" },
"Params": {
"Params.bConstrainPitch": "true",
"Params.PitchMin": "-89.0",
"Params.PitchMax": "89.0",
"Params.PitchTolerance": "10.0",
"Params.bConstrainYaw": "false"
}
}IdleReset
Tag: Agentic.Camera.Modifier.IdleReset
Returns the camera to the rotation captured when the mode activated, once the player has been idle long enough.
| Param | Type | Default | Description |
|---|---|---|---|
Speed | float | 30.0 | Rotation speed, degrees/sec (30 ≈ 3 s for a 90° turn). Above 30 is allowed, and the table validator warns |
TimeThreshold | float | 2.0 | Seconds without input before the reset starts |
AngleThreshold | float | 10.0 | Minimum deviation to bother resetting, degrees |
MinMovementSpeed | float | 100.0 | Speed below which the character counts as idle, units/sec |
InterpCurve | enum | EaseInOut | Linear, EaseIn, EaseOut, EaseInOut |
Shake
Tag: Agentic.Camera.Modifier.Shake
Procedural Perlin shake, location and rotation, with per-axis control. Every value is a camera parameter evaluated by the plugin's deterministic shake math — the same evaluator the cinematic Shake correction uses — so a state that shakes differently is a variable write into the running rig, not a rig rebuild. Requires the Params. prefix.
| Param | Type | Default | Description |
|---|---|---|---|
Params.AmplitudeMultiplier | float | 1.0 | Global amplitude multiplier |
Params.FrequencyMultiplier | float | 1.0 | Global frequency multiplier |
Params.Octaves | int | 1 | Noise octaves, 1–4, for a more organic feel |
Params.bEnableLocationShake | bool | false | Enable positional shake |
Params.LocationX_Amplitude / _Frequency | float | 0.0 / 1.0 | Forward-back axis |
Params.LocationY_Amplitude / _Frequency | float | 0.0 / 1.0 | Left-right axis |
Params.LocationZ_Amplitude / _Frequency | float | 0.0 / 1.0 | Up-down axis |
Params.bEnableRotationShake | bool | true | Enable rotation shake |
Params.Pitch_Amplitude / _Frequency | float | 0.5 / 8.0 | Pitch, degrees |
Params.Yaw_Amplitude / _Frequency | float | 0.3 / 6.0 | Yaw, degrees |
Params.Roll_Amplitude / _Frequency | float | 0.2 / 4.0 | Roll, degrees |
Params.Seed | int | 0 | Noise seed — the evaluator is deterministic, so the same seed gives the same shake |
{
"ModifierTag": { "TagName": "Agentic.Camera.Modifier.Shake" },
"Params": {
"Params.Octaves": "2",
"Params.bEnableRotationShake": "true",
"Params.Pitch_Amplitude": "0.15",
"Params.Pitch_Frequency": "6.0",
"Params.Yaw_Amplitude": "0.08",
"Params.Yaw_Frequency": "4.5",
"Params.Roll_Amplitude": "0.12",
"Params.Roll_Frequency": "5.0"
}
}Rig Overlay
Tag: Agentic.Camera.Modifier.Rig
Overlays a designer-authored camera rig on top of the programmatic one — the bridge between data-driven modifiers and Epic's visual node graph. Good for one-off effects that are simply easier to draw than to describe.
| Param | Type | Default | Description |
|---|---|---|---|
OverlayRig | asset path | (none) | Path to a camera rig asset |
BlendWeight | float | 1.0 | 0 = no effect, 1 = full effect |
Create one with Content Browser → right-click → Miscellaneous → Camera Rig, build the node tree in the Camera Rig Editor, then reference its path.
Parameter Modifiers
State-specific value overrides, used in the Parameters array of a state configuration.
Arm — Agentic.Camera.Param.Arm
| Param | Type | Default | Description |
|---|---|---|---|
LengthMin | float | 200.0 | Minimum arm length |
LengthMax | float | 400.0 | Maximum arm length |
BlendTime | float | 0.5 | Seconds to blend the change |
BlendCurve | enum | EaseInOut | See blend curves |
FOV — Agentic.Camera.Param.FOV
| Param | Type | Default | Description |
|---|---|---|---|
FOVMin | float | 90.0 | Minimum field of view |
FOVMax | float | 90.0 | Maximum field of view |
BlendTime | float | 0.5 | Seconds to blend the change |
BlendCurve | enum | EaseInOut | See blend curves |
Offset — Agentic.Camera.Param.Offset
| Param | Type | Default | Description |
|---|---|---|---|
bOverrideSocketOffset | bool | true | Override the socket offset |
SocketOffset | vector | (0,40,0) | Offset at the camera end of the arm, in socket space — the shoulder offset |
bOverrideTargetOffset | bool | true | Override the target offset |
TargetOffset | vector | (0,0,60) | Offset at the character end of the arm, in target space — the pivot |
BlendTime | float | 0.5 | Seconds to blend the offset change |
Pitch — Agentic.Camera.Param.Pitch
| Param | Type | Default | Description |
|---|---|---|---|
PitchOffset | float | 0.0 | Degrees; negative looks down |
BlendTime | float | 0.3 | Seconds the offset blends over on enter and exit; 0 snaps |
BlendCurve | enum | EaseInOut | Curve shape of that blend |
Lag — Agentic.Camera.Param.Lag
| Param | Type | Default | Description |
|---|---|---|---|
PositionLagSpeed | float | -1.0 | Override; -1 uses the mode default. Higher is snappier, lower floatier |
bUseSameLagForBlendOut | bool | false | Use this speed when exiting the state too |
bUseSameLagForBlendOut is what makes a transition symmetric. Entering crouch at lag speed 5 and leaving it at the mode's default 12 reads as a slow settle and a fast snap back; setting the flag uses 5 in both directions.
The mode's Lag config also carries Lag.bDebugDraw, which draws the lag offset line, the target position sphere and the lag speed as text.
Blend Curves
Used by Arm, FOV, Pitch and the mode transition config.
| Curve | Shape | Use for |
|---|---|---|
Linear | f(t) = t | Constant rate, mechanical |
EaseIn | t² | Slow start, accelerating — deliberate actions |
EaseOut | 1−(1−t)² | Fast start, smooth settle — responsive |
EaseInOut | Smoothstep | S-curve, the default and the natural choice |
Overshoot | Back easing, ~10% | Goes past the target and settles — punchy jumps |
Bounce | Ball physics | Bounces at the end — landings |
Snap | 1−2^(−10t) | Very fast initial move — combat responsiveness |
Anticipation | Pull back first | Windup before the move |
SmoothStep | 3t²−2t³ | Hermite, relaxed and cinematic |
Elastic | Damped spring | Springy oscillation |
ExpoOut | 1−2^(−10t) | Exponential ease out (identical to Snap) |
CircularInOut | Circular arc | Smooth circular motion |
Recommended starting points per state: EaseInOut for a crouch's arm, EaseOut for sprint arm and FOV, Snap for falling and for aim arm, SmoothStep for walking, Overshoot for a jump's arm, EaseOut for aim FOV.
Adding Your Own
A new behavior modifier is a UAgenticCameraModifier subclass; a new parameter modifier is a UAgenticCameraParam subclass overriding GetParamTypeId(). Either way the data side is three files in this order:
DT_GameCameraTags.csv— the tag, added first, then reimported.DT_GameCameraModifiers.json— the tag → class mapping.DT_GameCameraModes.json— the modes or states that use it.
Then run Validate All Camera Tables: it cross-checks that contract and regenerates the schema your new parameter keys need to appear in.