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:
- Camera system
- Viewport rendering
- Level editor
- Sequencer
- Movie Pipeline
- 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:
- bConstrainAspectRatio
- AspectRatio
- FOV (Field of View)
Developers should be aware of the following when using this variable:
- It affects how the camera’s FOV is adjusted when the viewport’s aspect ratio changes.
- Overriding this value in specific components or actors can lead to inconsistent behavior if not managed properly.
- It’s crucial for maintaining visual consistency across different display sizes and aspect ratios.
Best practices when using AspectRatioAxisConstraint:
- Understand the implications of each constraint option (MaintainYFOV, MaintainXFOV, MajorAxisFOV) on your game’s visuals.
- Be consistent in its usage across your project to avoid unexpected visual discrepancies.
- When overriding the default value, document the reason and ensure it doesn’t conflict with other camera settings.
- Test your game on various screen sizes and aspect ratios to ensure the chosen constraint works well in all scenarios.
- 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]
- INI Section:
/Script/UnrealEd.LevelEditorViewportSettings
- Raw value:
AspectRatio_MaintainXFOV
- Is Array:
False
Location: <Workspace>/Engine/Config/BaseEngine.ini:2694, section: [/Script/Engine.LocalPlayer]
- INI Section:
/Script/Engine.LocalPlayer
- Raw value:
AspectRatio_MaintainYFOV
- Is Array:
False
Location: <Workspace>/Projects/Lyra/Config/DefaultEngine.ini:289, section: [/Script/Engine.LocalPlayer]
- INI Section:
/Script/Engine.LocalPlayer
- Raw value:
AspectRatio_MaintainYFOV
- Is Array:
False
#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();