Skip to content
Gallery
Documentation: Ultimate Gameplay Camera
Share
Explore
Camera Modifiers

icon picker
Pitch to Arm Length and FOV Modifier

PitchFOVCurve.gif
FOV Changes with Pitch
PitchArmLengthCurve.gif
Arm Length Changes with Pitch

Pitch to Arm Length and FOV Modifier

One of the more basic requirement of a dynamic camera is a subtle but very important feature which allows various camera properties to change based on the current camera pitch angle (looking down or up).
As you know, the camera pitch angle is changed directly through player input (e.g. by using the Y axis of the right stick on the gamepad) and through this modifier, other camera properties, mainly the arm length and field of view, are changed as well each time the player tilts the camera. This is done through normalized curves with time and value ranges between -1.0 and 1.0.
Here are examples from AAA video games.
AC_PitchCurveMod.gif
Source - Assassin’s Creed Origins
Arm Length Changes (Closer when looking up)
Uncharted_PitchCurveMod.gif
Source - Uncharted Lost Legacy
FOV + Arm Length Changes
GoT_PitchCurveMod.gif
Source - Ghost of Tsushima
Arm Length Changes
GTAIV_PitchCurveMod.gif
Source - GTA IV FOV Changes when Looking Up

Pitch to Arm Length and FOV Modifier Settings

There are a number of settings you can tweak for the Pitch to Arm Length and FOV modifier.
image.png
PitchToArmLengthCurve: Curve with X and Y between -1.0 and 1.0. This maps the LocalMinPitch (X=-1.0) and LocalMaxPitch (X=1.0) to the MinArmLength and MaxArmLength.
PitchToFOVCurve: Curve with X and Y between -1.0 and 1.0. This maps the LocalMinPitch (X=-1.0) and LocalMaxPitch (X=1.0) to the MinFOV and MaxFOV.
image.png
MinArmLength: The minimum arm length value. The length of the arm will change depending on the current pitch of the camera and the PitchToArmLengthCurve.
MaxArmLength: The maximum arm length value. The length of the arm will change depending on the current pitch of the camera and the PitchToArmLengthCurve.
ArmRangeBlendTime: How long does it take to blend to the current Arm Length range.
ArmRangeBlendCurve: Controls the acceleration/deceleration of the blend. The curve has to be normalized (going from 0 to 1). Leave empty or use Hermite if unsure.
image.png
MinFOV: The minimum FOV value. The FOV of the camera will change depending on the current pitch of the camera and the PitchToFOVCurve.
MaxFOV: The maximum FOV value. The FOV of the camera will change depending on the current pitch of the camera and the PitchToFOVCurve.
FOVRangeBlendTime: A tolerance in degrees above which the Angle Constraints modifier will start decelerating the camera.
FOVRangeBlendCurve: Controls the acceleration/deceleration of the blend. The curve has to be normalized (going from 0 to 1). Leave empty or use Hermite if unsure.
You can set the LocalMinPitch and LocalMaxPitch in the .

Setting up the Pitch curves

These curves basically map the X axis, which is the Pitch range onto the Y axis which is either the FOV range or the Arm Length Range.
In simpler terms, X = -1.0 is the minimum value of the pitch (LocalPitchMin in ) which is when the player is looking down. And X = 1.0 is the maximum value of the pitch (LocalPitchMax in ) which is when the player is looking up.

Pitch to Arm Length Curve

PitchArmLengthCurve.jpg
Here, Y =-1.0 is the minimum value of the Arm Length (MinArmLength in the Settings described above) which is the minimum distance that the camera can be from the player and Y = 1.0 is the maximum value of the Arm Length (MaxArmLength in the Settings described above).
What this curve signifies is the following:
When the player is looking down (X = -1.0, which is the MinPitch), the length of the arm should be modified by -0.4, i.e., closer to MinArmLength than MaxArmLength (because it’s negative). This is the point A (X = -1.0, Y = 0.4) in the curve.
When the player is looking straight ahead (X = 0, which is perfectly between MinPitch and MaxPitch), the length of the arm should be 1.0, i.e., 100% the value of MaxArmLength (which means it’s exactly the same as MaxArmLength). This is point B (X = 0, Y = 1.0) in the curve.
When the player is looking up (X = 1, which is the MaxPitch), the length of the arm should be modified by -1.0, i.e., 100% the value of MinArmLength (which means it’s exactly the same as MinArmLength). This is point C (X = 1.0, Y = -1.0) in the curve.
In summary, what this curve will do is make the distance of the camera from the player smaller when we are aiming up or down, and longer when we are looking straight ahead.
PitchArmLengthCurve.gif
Here MinArmLength=100 and MaxArmLength=400

Pitch to FOV Curve

PitchFOVCurve.jpg
Here, Y =-1.0 is the minimum value of the Field of View (MinFOV in the Settings described above) and Y = 1.0 is the maximum value of the Field of View (MaxFOV in the Settings described above).
What this curve signifies is the following:
When the player is looking down (X = -1.0, which is the MinPitch), the FOV should be modified by -1.0, i.e., 100% the value of MinFOV (which means it’s exactly the same as MinFOV). This is the point A (X = -1.0, Y = -1.0) in the curve.
When the player is looking straight ahead (X = 0, which is perfectly between MinPitch and MaxPitch), the FOV should still be modified by -1.0, i.e., 100% the value of MinFOV (which means it’s exactly the same as MinFOV). This is the point A (X = -1.0, Y = -1.0) in the curve.
When the player is looking up (X = 1, which is the MaxPitch), the length of the arm should be modified by 1.0, i.e., 100% the value of MaxFOV (which means it’s exactly the same as MaxFOV). This is point C (X = 1.0, Y = 1.0) in the curve.
In summary, what this curve will do is make the FOV stay equal to MinFOV when the player is looking down or straight ahead, but will start changing to MaxFOV once the player starts looking upwards.
PitchFOVCurve.gif
Here MinFOV=90 and MaxFOV=125

Triggering the Pitch to Arm Length and FOV Modifier

You can set the Pitch-To-FOV curve and Pitch-To-Arm-Length by calling SetPitchToArmLengthAndFOVCurves on the BP_UGCCameraManager
image.png
You can also set the MinFOV, MaxFOV and MinArmLength, MaxArmLength with blends by calling SetFOVRange and SetArmLengthRange on the BP_UGCCameraManager. These functions make sure that the new range is transitioned to in a smooth manner.
image.png
UGC_ArmRange.gif
RDR2_ArmRange.gif
Source - Red Dead Redemption 2
Changing Arm Length Range in runtime
Or you can set all of the above properties through the UGCCameraDataAssets, and then calling SetCameraData on BP_UGCCameraManager (see ).
image.png
UGC_ArmRange.gif
RDR2_Arm.gif
Source - Red Dead Redemption 2
Changing Arm Length Range with Data Asset

Want to print your doc?
This is not the way.
Try clicking the ⋯ next to your doc name or using a keyboard shortcut (
CtrlP
) instead.