Appearance
How to create camera curves
Use this guide to create a custom camera effect curve or tune the Stable camera / Motion 1.6 camera.
Motion uses vector curves for procedural camera motion and Stable upper-body composition, plus one float curve for Stable body clearance. Choose the curve surface by what you intend to control.
Prerequisites
MotionCameraComponenton the character- Basic familiarity with the Unreal Curve Editor
Choose the curve surface
FMotionCurvecontrols time-based camera motion such as walk bob, sprint energy, impacts, or recoil.StableCameraClearanceCurvemaps final view pitch to a dimensionless clearance strength.0does not change the Stable camera point.1applies all calculated forward clearance.StablePresentationOffsetCurvemaps final view pitch to yaw-local XYZ correction forFirstPersonUpperBodyand its attached item. It does not move the camera or lower body.
The clearance curve does not contain XYZ camera positions or movement states. Motion evaluates the desired camera point after it applies height, static offsets, and active camera effects. It then calculates the applicable forward distance at that point. The same curve applies to all item states and camera heights.
Use StableCameraClearancePadding for extra distance from the capsule surface. Use MaxStableCameraClearanceCorrection as the safety limit. MotionNativeFirstPersonItemConfig transforms control item-specific grip and screen placement.
Create a curve asset
For a procedural FMotionCurve effect:
- In the Content Browser, right-click and select Miscellaneous > Curve.
- Choose CurveVector.
- Name the asset for the effect, such as
Curve_HeadBoborCurve_LandingImpact.
StableCameraClearanceCurve is an FRuntimeFloatCurve on MotionCameraProfile. Add inline keys, or assign a reusable CurveFloat asset. StablePresentationOffsetCurve is an FRuntimeVectorCurve. Assign a CurveVector asset for a reusable shared presentation curve. Motion supplies Curve_FirstPersonPresentationOffset for this purpose.
Design a vector effect curve
Each curve channel maps to a different offset axis:
- X controls forward or backward location offset. For rotation, it controls roll.
- Y controls right or left location offset. For rotation, it controls pitch.
- Z controls up or down location offset. For rotation, it controls yaw.
WARNING
Keep small values for location effects. Return the curve to zero for a smooth end to the effect.
Configure FMotionCurve
For built-in Motion effects, duplicate the applicable profile. Edit the FMotionCurve on the duplicate. For project gameplay systems, create an FMotionCurve in Blueprint or C++. Set these playback fields:
Identifier: unique name to add, pause, resume, or remove the curve.CurveAsset: theUCurveVectorasset.bShouldLoop: returns to the start at the end when reverse playback is disabled.bShouldReverse: reverses at each endpoint and produces ping-pong playback.Tickrate: playback speed multiplier.Multiplier: effect intensity.FalloutSmoothness: reserved configuration value.RemoveMotionCurve()removes a curve immediately and does not apply this value.bPauseAtNextZero: waits to pause until all three curve axes are withinZeroToleranceof zero.ZeroTolerance: per-axis threshold for pause-at-zero.bRemoveOnComplete: removes one-shot curves automatically at the end.
Profiles store all authored FMotionCurve values. Before playback, Motion copies these values to component state. Thus, runtime fields do not change the profile asset.
Tune Stable camera clearance
The supplied profile uses linear keys that apply full clearance only near the steepest downward angle:
-89degrees:1-60degrees:089degrees:0
Keep curve values between 0 and 1. Motion limits the evaluated result to this range. Raise the curve earlier if the project body mesh must have more clearance at a smaller downward pitch. Lower the curve if forward movement becomes visible. Adjust padding only if the capsule surface is too close to the visible mesh. Keep a finite maximum correction to limit unusual offsets.
Stable clearance is inactive in Socket mode. Keep CameraPivotSocketName empty to do a test of this curve.
Tune the Stable camera / Motion 1.6 camera
The Stable camera / Motion 1.6 camera uses the full-body MotionCamera socket only as an evaluated animation reference. Motion aligns this reference with the Stable camera anchor before clearance. It then adds StablePresentationOffsetCurve. MaxStablePresentationCorrection limits the total. Offsets use camera yaw with world-up Z. Thus, X stays forward, Y stays right, and Z stays up at all pitch angles.
The supplied shared curve is zero until a steep downward view begins. It then adds forward upper-body and item composition:
-89degrees:(40, 0, 0)cm-60degrees:(0, 0, 0)cm89degrees:(0, 0, 0)cm
Start with StablePresentationAnchorOffset at zero. Use it only for a different neutral anchor relationship. Adjust the shared curve for all item and movement states. Do this before you use a specialized curve. If the limit stays active, examine the pose, anchor, and correction limit.
Apply the curve
Built-in Motion movement effects come from their assigned component profiles. For your own camera polish, call the camera component directly:
cpp
MotionCameraComponent->AddMotionCurve(HeadBobCurve);Remove the curve when the state ends:
cpp
MotionCameraComponent->RemoveMotionCurve(HeadBobCurve.Identifier);Do a test of the effect
- Start PIE.
- Trigger the state that adds the curve.
- Make sure that the curve starts, loops, and returns to a neutral camera position.
- Adjust the curve keys, tangents,
Tickrate, andMultiplier.
Common patterns
- Walk head bob: loop, reverse, and small multiplier.
- Sprint camera shake: looping, faster tickrate, stronger multiplier.
- Landing impact: one-shot, quick downward Z offset, recovery to zero.
- Jump takeoff: one-shot, short lift or pitch impulse.
- Weapon recoil: one-shot, fast tickrate, returns to zero.
Do not add separate stance or item curves to reproduce camera positions. First, adjust the shared clearance curve for geometric safety. Then, adjust the shared presentation curve for upper-body and item composition. Use item transforms only for item-specific grip placement. Correct visible cut surfaces or missing torso geometry in the first-person mesh content.
Troubleshooting
- Curve does not play: confirm camera effects are enabled, the character has a
MotionCameraComponent, and the curve has a uniqueIdentifier. - Effect is too subtle: increase
Multiplieror curve values. - Motion is jerky: use smoother tangents in the Curve Editor.
- Curve never stops: confirm the remove action uses the same
Identifier. - Stable clearance has no effect: confirm
CameraPivotSocketNameis empty and native first-person presentation is enabled. - Stable clearance starts too early or late: adjust the pitch keys on
StableCameraClearanceCurve. Do not add a fixed XYZ offset. - Stable arms or item drift during movement/crouch: confirm the full-body skeleton has
MotionCameraand that the Stable camera / Motion 1.6 camera is valid. - Stable arms or item leave the frame only at steep pitch: adjust
StablePresentationOffsetCurve. Do not move the Stable camera to position the item. - Stable correction stays at the limit: correct the neutral anchor or pose. Increase
MaxStablePresentationCorrectiononly after you measure the necessary range.
Next steps
Continue with the camera reference.