AspectRatioAxisConstraint

AspectRatioAxisConstraint

#Overview

name: AspectRatioAxisConstraint

The value of this variable can be defined or overridden in .ini config files. 3 .ini config files referencing this setting variable.

It is referenced in 31 C++ source files.

#Summary

#Usage in the C++ source code

The purpose of AspectRatioAxisConstraint is to control how the camera’s field of view (FOV) is adjusted when the viewport’s aspect ratio changes. It is primarily used in the rendering system to maintain consistent visual output across different screen sizes and aspect ratios.

AspectRatioAxisConstraint is relied upon by several Unreal Engine subsystems and modules, including:

  1. Camera system
  2. Viewport rendering
  3. Level editor
  4. Sequencer
  5. Movie Pipeline
  6. UMG (Unreal Motion Graphics)

The value of this variable is typically set in the ULocalPlayer class, which is a default setting for all local players. However, it can be overridden in specific contexts, such as in UCameraComponent or ALevelSequenceActor.

Other variables that interact with AspectRatioAxisConstraint include:

  1. bConstrainAspectRatio
  2. AspectRatio
  3. FOV (Field of View)

Developers should be aware of the following when using this variable:

  1. It affects how the camera’s FOV is adjusted when the viewport’s aspect ratio changes.
  2. Overriding this value in specific components or actors can lead to inconsistent behavior if not managed properly.
  3. It’s crucial for maintaining visual consistency across different display sizes and aspect ratios.

Best practices when using AspectRatioAxisConstraint:

  1. Understand the implications of each constraint option (MaintainYFOV, MaintainXFOV, MajorAxisFOV) on your game’s visuals.
  2. Be consistent in its usage across your project to avoid unexpected visual discrepancies.
  3. When overriding the default value, document the reason and ensure it doesn’t conflict with other camera settings.
  4. Test your game on various screen sizes and aspect ratios to ensure the chosen constraint works well in all scenarios.
  5. Consider the impact on both 2D and 3D elements in your game when choosing a constraint.

By carefully managing AspectRatioAxisConstraint, developers can ensure their game looks consistent and professional across a wide range of display configurations.

#Setting Variables

#References In INI files

Location: <Workspace>/Engine/Config/BaseEditorPerProjectUserSettings.ini:434, section: [/Script/UnrealEd.LevelEditorViewportSettings]

Location: <Workspace>/Engine/Config/BaseEngine.ini:2694, section: [/Script/Engine.LocalPlayer]

Location: <Workspace>/Projects/Lyra/Config/DefaultEngine.ini:289, section: [/Script/Engine.LocalPlayer]

#References in C++ code

#Callsites

This variable is referenced in the following C++ source code:

#Loc: <Workspace>/Engine/Plugins/Experimental/Avalanche/Source/Avalanche/Private/Framework/AvaGameViewportClient.cpp:443

Scope (from outer to inner):

file
function     bool UAvaGameViewportClient::GetProjectionData

Source code excerpt:

		// Create the projection matrix (and possibly constrain the view rectangle)
		FMinimalViewInfo::CalculateProjectionMatrixGivenView(ViewInfo
			, GetDefault<ULocalPlayer>()->AspectRatioAxisConstraint
			, InViewport
			, ProjectionData);

		for (const TSharedRef<ISceneViewExtension>& ViewExt : GEngine->ViewExtensions->GatherActiveExtensions(FSceneViewExtensionContext(InViewport)))
        {
			ViewExt->SetupViewProjectionMatrix(ProjectionData);

#Loc: <Workspace>/Engine/Plugins/Interchange/Runtime/Source/Import/Private/Animation/InterchangeLevelSequenceHelper.cpp:28

Scope (from outer to inner):

file
namespace    UE::Interchange::Private
function     FInterchangePropertyTracksHelper::FInterchangePropertyTracksHelper

Source code excerpt:


			// Camera
			{UE::Interchange::Animation::PropertyTracks::Camera::AspectRatioAxisConstraint, {UMovieSceneByteTrack::StaticClass()->GetName(), GET_MEMBER_NAME_STRING_CHECKED(UCameraComponent, AspectRatioAxisConstraint), TEXT("Aspect Ratio Axis Constraint"), StaticEnum<EAspectRatioAxisConstraint>()}},
			{UE::Interchange::Animation::PropertyTracks::Camera::ConstrainAspectRatio, {UMovieSceneBoolTrack::StaticClass()->GetName(), GET_MEMBER_NAME_STRING_CHECKED(UCameraComponent, bConstrainAspectRatio), TEXT("Constrain Aspect Ratio")}},
			{UE::Interchange::Animation::PropertyTracks::Camera::CurrentAperture, {UMovieSceneFloatTrack::StaticClass()->GetName(), GET_MEMBER_NAME_STRING_CHECKED(UCineCameraComponent, CurrentAperture), TEXT("Current Aperture")}},
			{UE::Interchange::Animation::PropertyTracks::Camera::CurrentFocalLength, {UMovieSceneFloatTrack::StaticClass()->GetName(), GET_MEMBER_NAME_STRING_CHECKED(UCineCameraComponent, CurrentFocalLength), TEXT("Current Focal Length")}},
			{UE::Interchange::Animation::PropertyTracks::Camera::CustomNearClippingPlane, {UMovieSceneFloatTrack::StaticClass()->GetName(), GET_MEMBER_NAME_STRING_CHECKED(UCineCameraComponent, CustomNearClippingPlane), TEXT("Custom Near Clipping Plane")}},
			{UE::Interchange::Animation::PropertyTracks::Camera::FieldOfView, {UMovieSceneFloatTrack::StaticClass()->GetName(), GET_MEMBER_NAME_STRING_CHECKED(UCameraComponent, FieldOfView), TEXT("Field of View")}},
			{UE::Interchange::Animation::PropertyTracks::Camera::OrthoFarClipPlane, {UMovieSceneFloatTrack::StaticClass()->GetName(), GET_MEMBER_NAME_STRING_CHECKED(UCameraComponent, OrthoFarClipPlane), TEXT("Ortho Far Clip Plane")}},

#Loc: <Workspace>/Engine/Plugins/Interchange/Runtime/Source/Nodes/Public/InterchangeAnimationDefinitions.h:26

Scope (from outer to inner):

file
namespace    UE
namespace    Interchange
namespace    Animation
namespace    PropertyTracks
namespace    Camera

Source code excerpt:

				{
					const FName AutoActivate = TEXT("Camera.bAutoActivate");
					const FName AspectRatioAxisConstraint = TEXT("Camera.AspectRatioAxisConstraint");
					const FName ConstrainAspectRatio = TEXT("Camera.bConstrainAspectRatio");
					const FName CurrentAperture = TEXT("Camera.CurrentAperture");
					const FName CurrentFocalLength = TEXT("Camera.CurrentFocalLength");
					const FName CustomNearClippingPlane = TEXT("Camera.CustomNearClippingPlane");
					const FName FieldOfView = TEXT("Camera.FieldOfView");
					const FName Mobility = TEXT("Camera.Mobility");

#Loc: <Workspace>/Engine/Plugins/MovieScene/MovieRenderPipeline/Source/MovieRenderPipelineRenderPasses/Private/Graph/Renderers/MovieGraphImagePassBase.cpp:347

Scope (from outer to inner):

file
namespace    UE::MovieGraph::Rendering
function     FMatrix FMovieGraphImagePassBase::CalculateProjectionMatrix

Source code excerpt:

		else
		{
			const EAspectRatioAxisConstraint AspectRatioAxisConstraint = GetDefault<ULocalPlayer>()->AspectRatioAxisConstraint;
			if (((ViewRectWidth > ViewRectHeight) && (AspectRatioAxisConstraint == AspectRatio_MajorAxisFOV)) || (AspectRatioAxisConstraint == AspectRatio_MaintainXFOV))
			{
				//if the viewport is wider than it is tall
				XAxisMultiplier = 1.0f;
				YAxisMultiplier = ViewRectWidth / ViewRectHeight;
			}
			else

#Loc: <Workspace>/Engine/Plugins/MovieScene/MovieRenderPipeline/Source/MovieRenderPipelineRenderPasses/Private/MoviePipelineImagePassBase.cpp:552

Scope (from outer to inner):

file
function     FSceneView* UMoviePipelineImagePassBase::GetSceneViewForSampleState

Source code excerpt:

				const int32 DestSizeX = ViewInitOptions.GetViewRect().Width();
				const int32 DestSizeY = ViewInitOptions.GetViewRect().Height();
				const EAspectRatioAxisConstraint AspectRatioAxisConstraint = GetDefault<ULocalPlayer>()->AspectRatioAxisConstraint;
				if (((DestSizeX > DestSizeY) && (AspectRatioAxisConstraint == AspectRatio_MajorAxisFOV)) || (AspectRatioAxisConstraint == AspectRatio_MaintainXFOV))
				{
					//if the viewport is wider than it is tall
					XAxisMultiplier = 1.0f;
					YAxisMultiplier = ViewInitOptions.GetViewRect().Width() / (float)ViewInitOptions.GetViewRect().Height();
				}
				else

#Loc: <Workspace>/Engine/Plugins/Runtime/nDisplay/Source/DisplayClusterLightCardEditor/Private/Viewport/DisplayClusterLightCardEditorViewportClient.cpp:2187

Scope (from outer to inner):

file
function     void FDisplayClusterLightCardEditorViewportClient::GetSceneViewInitOptions

Source code excerpt:

		ViewTransform.GetLocation(),
		ViewTransform.GetRotation(),
		GetDefault<ULevelEditorViewportSettings>()->AspectRatioAxisConstraint,
		GetNearClipPlane(),
		&RotationMatrix,
		GetDPIScale()
	);

	ViewInitOptions.SceneViewStateInterface = ViewState.GetReference();

#Loc: <Workspace>/Engine/Source/Editor/Sequencer/Private/Sequencer.cpp:4000

Scope (from outer to inner):

file
function     void FSequencer::UpdateLevelViewportClientsActorLocks

Source code excerpt:

	}

	TOptional<EAspectRatioAxisConstraint> AspectRatioAxisConstraint;
	if (LevelSequenceActor->CameraSettings.bOverrideAspectRatioAxisConstraint)
	{
		AspectRatioAxisConstraint = LevelSequenceActor->CameraSettings.AspectRatioAxisConstraint;
	}

	for (FLevelEditorViewportClient* LevelVC : GEditor->GetLevelViewportClients())
	{
		if (LevelVC != nullptr)
		{

#Loc: <Workspace>/Engine/Source/Editor/Sequencer/Private/Sequencer.cpp:4017

Scope (from outer to inner):

file
function     void FSequencer::UpdateLevelViewportClientsActorLocks

Source code excerpt:

				if (CachedCameraActors.Find(LockedActor))
				{
					ActorLock.AspectRatioAxisConstraint = AspectRatioAxisConstraint;
				}
			}
			// If we are in control of the entire viewport, also set the aspect ratio axis constraint.
			if (IsPerspectiveViewportCameraCutEnabled())
			{
				FLevelViewportActorLock& CinematicLock = LevelVC->GetCinematicActorLock();
				if (AActor* LockedActor = CinematicLock.GetLockedActor())
				{
					CinematicLock.AspectRatioAxisConstraint = AspectRatioAxisConstraint;
				}
			}
		}
	}
}

#Loc: <Workspace>/Engine/Source/Editor/UnrealEd/Classes/Settings/LevelEditorViewportSettings.h:497

Scope (from outer to inner):

file
class        class ULevelEditorViewportSettings : public UObject

Source code excerpt:

	/** How to constrain perspective view port FOV */
	UPROPERTY(EditAnywhere, config, Category=LookAndFeel)
	TEnumAsByte<enum EAspectRatioAxisConstraint> AspectRatioAxisConstraint;

	/** Enables real-time hover feedback when mousing over objects in editor view ports */
	UPROPERTY(EditAnywhere, config, Category=LookAndFeel, meta=(DisplayName = "Highlight Objects Under Mouse Cursor"))
	uint32 bEnableViewportHoverFeedback:1;

	/** If enabled, selected objects will be highlighted with brackets in all modes rather than a special highlight color. */

#Loc: <Workspace>/Engine/Source/Editor/UnrealEd/Private/EditorViewportClient.cpp:984

Scope (from outer to inner):

file
function     FSceneView* FEditorViewportClient::CalcSceneView

Source code excerpt:


	const bool bConstrainAspectRatio = bUseControllingActorViewInfo && ControllingActorViewInfo.bConstrainAspectRatio;
	EAspectRatioAxisConstraint AspectRatioAxisConstraint = GetDefault<ULevelEditorViewportSettings>()->AspectRatioAxisConstraint;
	if (bUseControllingActorViewInfo && ControllingActorAspectRatioAxisConstraint.IsSet())
	{
		AspectRatioAxisConstraint = ControllingActorAspectRatioAxisConstraint.GetValue();
	}

	AWorldSettings* WorldSettings = nullptr;
	if( GetScene() != nullptr && GetScene()->GetWorld() != nullptr )
	{
		WorldSettings = GetScene()->GetWorld()->GetWorldSettings();

#Loc: <Workspace>/Engine/Source/Editor/UnrealEd/Private/EditorViewportClient.cpp:1009

Scope (from outer to inner):

file
function     FSceneView* FEditorViewportClient::CalcSceneView

Source code excerpt:

			FPlane(0, 0, 0, 1));

		FMinimalViewInfo::CalculateProjectionMatrixGivenView(ControllingActorViewInfo, AspectRatioAxisConstraint, Viewport, /*inout*/ ViewInitOptions);
	}
	else
	{
		//
		if (EffectiveViewportType == LVT_Perspective)
		{

#Loc: <Workspace>/Engine/Source/Editor/UnrealEd/Private/EditorViewportClient.cpp:1085

Scope (from outer to inner):

file
function     FSceneView* FEditorViewportClient::CalcSceneView

Source code excerpt:

				    float YAxisMultiplier;

				    if (((ViewportSize.X > ViewportSize.Y) && (AspectRatioAxisConstraint == AspectRatio_MajorAxisFOV)) || (AspectRatioAxisConstraint == AspectRatio_MaintainXFOV))
				    {
					    //if the viewport is wider than it is tall
					    XAxisMultiplier = 1.0f;
					    YAxisMultiplier = ViewportSize.X / (float)ViewportSize.Y;
				    }
				    else

#Loc: <Workspace>/Engine/Source/Editor/UnrealEd/Private/LevelEditorViewport.cpp:3048

Scope (from outer to inner):

file
function     void FLevelEditorViewportClient::UpdateViewForLockedActor

Source code excerpt:


						// Axis constraint for aspect ratio
						ControllingActorAspectRatioAxisConstraint = ActiveLock.AspectRatioAxisConstraint;
						
						// Post processing is handled by OverridePostProcessingSettings
						ViewFOV = ControllingActorViewInfo.FOV;
						AspectRatio = ControllingActorViewInfo.AspectRatio;
						SetViewLocation(ControllingActorViewInfo.Location);
						SetViewRotation(ControllingActorViewInfo.Rotation);

#Loc: <Workspace>/Engine/Source/Editor/UnrealEd/Public/LevelEditorViewport.h:147

Scope (from outer to inner):

file
function     FLevelViewportActorLock

Source code excerpt:

	/** Creates a new instance of FLevelViewportActorLock. */
	FLevelViewportActorLock(AActor* InActor, TOptional<EAspectRatioAxisConstraint> InAspectRatioAxisConstraint) 
		: LockedActor(InActor), AspectRatioAxisConstraint(InAspectRatioAxisConstraint) {}

	/** Returns whether the locked actor is valid. */
	bool HasValidLockedActor() const { return LockedActor.IsValid(); }

	/** Gets the locked actor. */
	AActor* GetLockedActor() const { return LockedActor.Get(); }

#Loc: <Workspace>/Engine/Source/Editor/UnrealEd/Public/LevelEditorViewport.h:159

Scope: file

Source code excerpt:


	/** An optional aspect ratio axis constraint to use when resizing the viewport. */
	TOptional<EAspectRatioAxisConstraint> AspectRatioAxisConstraint;
};

/** */
class FLevelEditorViewportClient : public FEditorViewportClient
{
	friend class FActorElementLevelEditorViewportInteractionCustomization;

#Loc: <Workspace>/Engine/Source/Runtime/Engine/Classes/Camera/CameraComponent.h:84

Scope (from outer to inner):

file
class        class UCameraComponent : public USceneComponent

Source code excerpt:

	/** Override for the default aspect ratio axis constraint defined on the local player */
	UPROPERTY(Interp, EditAnywhere, BlueprintReadWrite, Category = CameraOptions, meta = (EditCondition = "bOverrideAspectRatioAxisConstraint"))
	TEnumAsByte<EAspectRatioAxisConstraint> AspectRatioAxisConstraint = EAspectRatioAxisConstraint::AspectRatio_MaintainXFOV;
	UFUNCTION(BlueprintCallable, Category = Camera)
	void SetAspectRatioAxisConstraint(EAspectRatioAxisConstraint InAspectRatioAxisConstraint) { AspectRatioAxisConstraint = InAspectRatioAxisConstraint; }

	/** If bConstrainAspectRatio is true, black bars will be added if the destination view has a different aspect ratio than this camera requested. */
	UPROPERTY(Interp, EditAnywhere, BlueprintReadWrite, Category = CameraOptions)
	uint8 bConstrainAspectRatio : 1;
	UFUNCTION(BlueprintCallable, Category = Camera)
	void SetConstraintAspectRatio(bool bInConstrainAspectRatio) { bConstrainAspectRatio = bInConstrainAspectRatio; }

#Loc: <Workspace>/Engine/Source/Runtime/Engine/Classes/Camera/CameraTypes.h:90

Scope: file

Source code excerpt:


	// Aspect ratio axis constraint override
	TOptional<EAspectRatioAxisConstraint> AspectRatioAxisConstraint;

	// If bConstrainAspectRatio is true, black bars will be added if the destination view has a different aspect ratio than this camera requested.
	UPROPERTY(EditAnywhere, BlueprintReadWrite, Category=Camera)
	uint32 bConstrainAspectRatio:1; 

	// If true, account for the field of view angle when computing which level of detail to use for meshes.

#Loc: <Workspace>/Engine/Source/Runtime/Engine/Classes/Camera/CameraTypes.h:165

Scope: file

Source code excerpt:


	/** Calculates the projection matrix (and potentially a constrained view rectangle) given a FMinimalViewInfo and partially configured projection data (must have the view rect already set) */
	ENGINE_API static void CalculateProjectionMatrixGivenView(FMinimalViewInfo& ViewInfo, TEnumAsByte<enum EAspectRatioAxisConstraint> AspectRatioAxisConstraint, class FViewport* Viewport, struct FSceneViewProjectionData& InOutProjectionData);
	/** Calculates the projection matrix (and potentially a constrained view rectangle) given a FMinimalViewInfo and partially configured projection data (must have the view rect already set). ConstrainedViewRectangle is only used if the ViewInfo.bConstrainAspectRatio is set. */
	ENGINE_API static void CalculateProjectionMatrixGivenViewRectangle(FMinimalViewInfo& ViewInfo, TEnumAsByte<enum EAspectRatioAxisConstraint> AspectRatioAxisConstraint, const FIntRect& ConstrainedViewRectangle, FSceneViewProjectionData& InOutProjectionData);

	/** The near plane distance of the perspective view (in world units). Returns the value of PerspectiveNearClipPlane if positive, and GNearClippingPlane otherwise */
	FORCEINLINE float GetFinalPerspectiveNearClipPlane() const
	{
		return PerspectiveNearClipPlane > 0.0f ? PerspectiveNearClipPlane : GNearClippingPlane;
	}

#Loc: <Workspace>/Engine/Source/Runtime/Engine/Classes/Engine/LocalPlayer.h:195

Scope (from outer to inner):

file
class        class ULocalPlayer : public UPlayer

Source code excerpt:

	/** How to constrain perspective viewport FOV */
	UPROPERTY(config)
	TEnumAsByte<enum EAspectRatioAxisConstraint> AspectRatioAxisConstraint;

	/** The class of PlayerController to spawn for players logging in. */
	UPROPERTY()
	TSubclassOf<class APlayerController> PendingLevelPlayerControllerClass;

	/** set when we've sent a split join request */

#Loc: <Workspace>/Engine/Source/Runtime/Engine/Private/Camera/CameraComponent.cpp:437

Scope (from outer to inner):

file
function     void UCameraComponent::GetCameraView

Source code excerpt:

	if (bOverrideAspectRatioAxisConstraint)
	{
		DesiredView.AspectRatioAxisConstraint = AspectRatioAxisConstraint;
	}

	// See if the CameraActor wants to override the PostProcess settings used.
	DesiredView.PostProcessBlendWeight = PostProcessBlendWeight;
	if (PostProcessBlendWeight > 0.0f)
	{

#Loc: <Workspace>/Engine/Source/Runtime/Engine/Private/Camera/CameraStackTypes.cpp:217

Scope (from outer to inner):

file
function     void FMinimalViewInfo::CalculateProjectionMatrixGivenViewRectangle

Source code excerpt:

}

void FMinimalViewInfo::CalculateProjectionMatrixGivenViewRectangle(FMinimalViewInfo& ViewInfo, TEnumAsByte<enum EAspectRatioAxisConstraint> AspectRatioAxisConstraint, const FIntRect& ConstrainedViewRectangle, FSceneViewProjectionData& InOutProjectionData)
{
#if !(UE_BUILD_SHIPPING)
	if (CVarDebugForceAllCamerasToOrtho.GetValueOnAnyThread())
	{
		ViewInfo.ProjectionMode = ECameraProjectionMode::Orthographic;
		ViewInfo.OrthoWidth = CVarDebugForceCameraOrthoWidth.GetValueOnAnyThread();

#Loc: <Workspace>/Engine/Source/Runtime/Engine/Private/Camera/CameraStackTypes.cpp:258

Scope (from outer to inner):

file
function     void FMinimalViewInfo::CalculateProjectionMatrixGivenViewRectangle

Source code excerpt:


		// Get effective aspect ratio axis constraint.
		AspectRatioAxisConstraint = ViewInfo.AspectRatioAxisConstraint.Get(AspectRatioAxisConstraint);

		// If x is bigger, and we're respecting x or major axis, AND mobile isn't forcing us to be Y axis aligned
		const bool bMaintainXFOV = 
			((SizeX > SizeY) && ((AspectRatioAxisConstraint == AspectRatio_MajorAxisFOV) || (ViewInfo.ProjectionMode == ECameraProjectionMode::Orthographic))) ||
			(AspectRatioAxisConstraint == AspectRatio_MaintainXFOV);
		if (bMaintainXFOV)
		{
			// If the viewport is wider than it is tall
			XAxisMultiplier = 1.0f;
			YAxisMultiplier = SizeX / (float)SizeY;
		}

#Loc: <Workspace>/Engine/Source/Runtime/Engine/Private/Camera/CameraStackTypes.cpp:339

Scope (from outer to inner):

file
function     void FMinimalViewInfo::CalculateProjectionMatrixGivenView

Source code excerpt:

}

void FMinimalViewInfo::CalculateProjectionMatrixGivenView(FMinimalViewInfo& ViewInfo, TEnumAsByte<enum EAspectRatioAxisConstraint> AspectRatioAxisConstraint, FViewport* Viewport, FSceneViewProjectionData& InOutProjectionData)
{
	FIntRect ViewExtents = Viewport->CalculateViewExtents(ViewInfo.AspectRatio, InOutProjectionData.GetViewRect());
	CalculateProjectionMatrixGivenViewRectangle(ViewInfo, AspectRatioAxisConstraint, ViewExtents, InOutProjectionData);
}

bool FMinimalViewInfo::AutoCalculateOrthoPlanes(FSceneViewProjectionData& InOutProjectionData)
{	
	if (ProjectionMode == ECameraProjectionMode::Orthographic && CVarOrthoAllowAutoPlanes.GetValueOnAnyThread() && bAutoCalculateOrthoPlanes)
	{

#Loc: <Workspace>/Engine/Source/Runtime/Engine/Private/LocalPlayer.cpp:1251

Scope (from outer to inner):

file
function     bool ULocalPlayer::GetProjectionData

Source code excerpt:

	{
		// Create the projection matrix (and possibly constrain the view rectangle)
		FMinimalViewInfo::CalculateProjectionMatrixGivenView(ViewInfo, AspectRatioAxisConstraint, Viewport, /*inout*/ ProjectionData);

		for (auto& ViewExt : GEngine->ViewExtensions->GatherActiveExtensions(FSceneViewExtensionContext(Viewport)))
        {
			ViewExt->SetupViewProjectionMatrix(ProjectionData);
		};
	}

#Loc: <Workspace>/Engine/Source/Runtime/LevelSequence/Private/LevelSequenceActor.cpp:129

Scope (from outer to inner):

file
function     TOptional<EAspectRatioAxisConstraint> ALevelSequenceActor::GetAspectRatioAxisConstraint

Source code excerpt:

TOptional<EAspectRatioAxisConstraint> ALevelSequenceActor::GetAspectRatioAxisConstraint() const
{
	TOptional<EAspectRatioAxisConstraint> AspectRatioAxisConstraint;
	if (CameraSettings.bOverrideAspectRatioAxisConstraint)
	{
		AspectRatioAxisConstraint = CameraSettings.AspectRatioAxisConstraint;
	}
	return AspectRatioAxisConstraint;
}

bool ALevelSequenceActor::GetIsReplicatedPlayback() const
{
	return bReplicatePlayback;
}

#Loc: <Workspace>/Engine/Source/Runtime/LevelSequence/Private/LevelSequencePlayer.cpp:204

Scope (from outer to inner):

file
function     TOptional<EAspectRatioAxisConstraint> ULevelSequencePlayer::GetAspectRatioAxisConstraintOverride

Source code excerpt:

{
	return CameraSettings.bOverrideAspectRatioAxisConstraint ?
		TOptional<EAspectRatioAxisConstraint>(CameraSettings.AspectRatioAxisConstraint) :
		TOptional<EAspectRatioAxisConstraint>();
}

void ULevelSequencePlayer::OnCameraCutUpdated(const UE::MovieScene::FOnCameraCutUpdatedParams& Params)
{
	CachedCameraComponent = Params.ViewTargetCamera;

#Loc: <Workspace>/Engine/Source/Runtime/LevelSequence/Public/LevelSequenceCameraSettings.h:16

Scope: file

Source code excerpt:


	UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Aspect Ratio", meta = (EditCondition = bOverrideAspectRatioAxisConstraint))
	TEnumAsByte<EAspectRatioAxisConstraint> AspectRatioAxisConstraint = EAspectRatioAxisConstraint::AspectRatio_MaintainXFOV;
};

#Loc: <Workspace>/Engine/Source/Runtime/MovieSceneTracks/Private/TrackInstances/MovieSceneCameraCutGameHandler.cpp:44

Scope (from outer to inner):

file
namespace    UE::MovieScene
function     FPreAnimatedCameraCutState FPreAnimatedCameraCutTraits::CachePreAnimatedValue

Source code excerpt:

		// Save previous aspect ratio axis constraint.
		ULocalPlayer* LocalPlayer = (PC != nullptr) ? PC->GetLocalPlayer() : nullptr;
		TOptional<EAspectRatioAxisConstraint> AspectRatioAxisConstraint;
		if (LocalPlayer)
		{
			AspectRatioAxisConstraint = LocalPlayer->AspectRatioAxisConstraint;
		}

		return StorageType{ World, LocalPlayer, ViewTarget, AspectRatioAxisConstraint };
	}
	return StorageType();
}

void FPreAnimatedCameraCutTraits::RestorePreAnimatedValue(
		uint8 InKey, 

#Loc: <Workspace>/Engine/Source/Runtime/MovieSceneTracks/Private/TrackInstances/MovieSceneCameraCutGameHandler.cpp:85

Scope (from outer to inner):

file
namespace    UE::MovieScene
function     void FPreAnimatedCameraCutTraits::RestorePreAnimatedValue

Source code excerpt:

	if (LocalPlayer && CachedValue.LastAspectRatioAxisConstraint.IsSet())
	{
		LocalPlayer->AspectRatioAxisConstraint = CachedValue.LastAspectRatioAxisConstraint.GetValue();
	}
}

TAutoRegisterPreAnimatedStorageID<FPreAnimatedCameraCutStorage> FPreAnimatedCameraCutStorage::StorageID;

/** Utility function for converting sequence blend curves to camera manager blend types */

#Loc: <Workspace>/Engine/Source/Runtime/MovieSceneTracks/Private/TrackInstances/MovieSceneCameraCutGameHandler.cpp:318

Scope (from outer to inner):

file
namespace    UE::MovieScene
function     void FCameraCutGameHandler::SetCameraCut

Source code excerpt:

	if (LocalPlayer != nullptr && OverrideAspectRatioAxisConstraint.IsSet())
	{
		LocalPlayer->AspectRatioAxisConstraint = OverrideAspectRatioAxisConstraint.GetValue();
	}

	// We want to notify of cuts on hard cuts and time jumps, but not on blend cuts.
	const bool bIsStraightCut = !CameraCutParams.BlendType.IsSet() || CameraCutParams.bJumpCut;

	if (CameraComponent && bIsStraightCut)

#Loc: <Workspace>/Engine/Source/Runtime/UMG/Private/Components/Viewport.cpp:280

Scope (from outer to inner):

file
function     FSceneView* FUMGViewportClient::CalcSceneView

Source code excerpt:


	//@TODO: Should probably be locally configurable (or just made into a FMinimalViewInfo property)
	const EAspectRatioAxisConstraint AspectRatioAxisConstraint = GetDefault<ULocalPlayer>()->AspectRatioAxisConstraint;

	FMinimalViewInfo::CalculateProjectionMatrixGivenView(ViewInfo, AspectRatioAxisConstraint, Viewport, /*inout*/ ViewInitOptions);

	ViewInitOptions.ViewFamily = ViewFamily;
	ViewInitOptions.SceneViewStateInterface = ViewState.GetReference();
	ViewInitOptions.ViewElementDrawer = this;

	ViewInitOptions.BackgroundColor = GetBackgroundColor();