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.
Source - Assassin’s Creed Origins
Arm Length Changes (Closer when looking up)
Source - Uncharted Lost Legacy
FOV + Arm Length Changes
Source - Ghost of Tsushima
Arm Length Changes
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.
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.
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.
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
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.
Here MinArmLength=100 and MaxArmLength=400
Pitch to FOV Curve
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.
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
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.
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