AlphaBrushRotation
AlphaBrushRotation
#Overview
name: AlphaBrushRotation
The value of this variable can be defined or overridden in .ini config files. 1
.ini config file referencing this setting variable.
It is referenced in 10
C++ source files.
#Summary
#Usage in the C++ source code
The purpose of AlphaBrushRotation is to control the rotation of the brush mask texture in the Landscape Editor tool within Unreal Engine 5. This setting variable is specifically used for the Landscape painting and sculpting system.
AlphaBrushRotation is primarily utilized by the Landscape Editor module, which is part of the Unreal Engine’s terrain editing toolset. It’s referenced in several key files within the LandscapeEditor source code, including LandscapeEdMode.cpp, LandscapeEdModeBrushes.cpp, and LandscapeEditorObject.cpp.
The value of this variable is set in multiple ways:
- It can be modified through the Unreal Engine Editor interface, as indicated by the UPROPERTY macro in LandscapeEditorObject.h.
- It’s loaded from and saved to the project’s configuration file (GEditorPerProjectIni) in the Load() and Save() functions of LandscapeEditorObject.
- It can be programmatically adjusted, as seen in the ChangeAlphaBrushRotation function in LandscapeEdMode.cpp.
AlphaBrushRotation interacts with several other variables, notably:
- bAlphaBrushAutoRotate: When true, it overrides the manual rotation setting.
- AlphaBrushScale, AlphaBrushPanU, and AlphaBrushPanV: These work together with rotation to define the brush’s appearance.
Developers should be aware that:
- The rotation is measured in degrees and is clamped between -360 and 360 degrees.
- It’s used in conjunction with other brush settings to determine the final appearance and effect of the landscape brush.
- The auto-rotate feature (bAlphaBrushAutoRotate) can override this setting.
Best practices when using this variable include:
- Consider using bAlphaBrushAutoRotate for more dynamic brush behavior.
- Be mindful of how rotation interacts with brush scale and panning for the desired effect.
- Use the UI min/max values (-180 to 180) for more intuitive control in the editor interface.
- Remember to save changes if you want them to persist between editor sessions.
#Setting Variables
#References In INI files
Location: <Workspace>/Engine/Config/BaseEditorPerProjectUserSettings.ini:731, section: [LandscapeEdit]
- INI Section:
LandscapeEdit
- Raw value:
0.000000
- Is Array:
False
#References in C++ code
#Callsites
This variable is referenced in the following C++ source code:
#Loc: <Workspace>/Engine/Source/Editor/LandscapeEditor/Private/LandscapeEdMode.cpp:1809
Scope (from outer to inner):
file
function void FEdModeLandscape::ChangeAlphaBrushRotation
Source code excerpt:
const float Diff = bIncrease ? DefaultDiffValue : -DefaultDiffValue;
UISettings->Modify();
UISettings->AlphaBrushRotation = FMath::Clamp(UISettings->AlphaBrushRotation + Diff, SliderMin, SliderMax);
}
/** FEdMode: Called when a key is pressed */
bool FEdModeLandscape::InputKey(FEditorViewportClient* ViewportClient, FViewport* Viewport, FKey Key, EInputEvent Event)
{
#Loc: <Workspace>/Engine/Source/Editor/LandscapeEditor/Private/LandscapeEdModeBrushes.cpp:1215
Scope (from outer to inner):
file
class class FLandscapeBrushAlphaPattern : public FLandscapeBrushAlphaBase
function virtual FLandscapeBrushData ApplyBrush
Source code excerpt:
Bias.X = SizeX * EdMode->UISettings->AlphaBrushPanU;
Bias.Y = SizeY * EdMode->UISettings->AlphaBrushPanV;
Angle = EdMode->UISettings->AlphaBrushRotation;
}
// Find alphamap sample location
FVector2D SamplePos = FVector2D(X, Y) * Scale + Bias;
SamplePos = SamplePos.GetRotated(Angle);
#Loc: <Workspace>/Engine/Source/Editor/LandscapeEditor/Private/LandscapeEdModeBrushes.cpp:1308
Scope (from outer to inner):
file
class class FLandscapeBrushAlphaPattern : public FLandscapeBrushAlphaBase
function virtual void Tick
Source code excerpt:
EdMode->UISettings->AlphaBrushPanU,
EdMode->UISettings->AlphaBrushPanV);
Angle = EdMode->UISettings->AlphaBrushRotation;
}
Angle = FMath::DegreesToRadians(Angle);
FVector LandscapeLocation = Proxy->LandscapeActorToWorld().GetTranslation();
FVector4 LandscapeLocationParam(LandscapeLocation.X, LandscapeLocation.Y, LandscapeLocation.Z, Angle);
#Loc: <Workspace>/Engine/Source/Editor/LandscapeEditor/Private/LandscapeEdModeBrushes.cpp:1444
Scope (from outer to inner):
file
class class FLandscapeBrushAlpha : public FLandscapeBrushAlphaBase
function virtual FLandscapeBrushData ApplyBrush
Source code excerpt:
check(bIsValid && !FMath::IsNearlyZero(AlphaBrushScale) && !FMath::IsNearlyZero(Radius) && (SizeX > 0) && (SizeY > 0)); // See CanPaint() function above : if bCanPaint, AlphaBrushScale should be non-zero
const float BrushAngle = EdMode->UISettings->bAlphaBrushAutoRotate ? LastMouseAngle : FMath::DegreesToRadians(EdMode->UISettings->AlphaBrushRotation);
FIntRect Bounds;
Bounds.Min.X = FMath::FloorToInt(LastMousePosition.X - Radius);
Bounds.Min.Y = FMath::FloorToInt(LastMousePosition.Y - Radius);
Bounds.Max.X = FMath::CeilToInt( LastMousePosition.X + Radius);
Bounds.Max.Y = FMath::CeilToInt( LastMousePosition.Y + Radius);
#Loc: <Workspace>/Engine/Source/Editor/LandscapeEditor/Private/LandscapeEdModeBrushes.cpp:1556
Scope (from outer to inner):
file
class class FLandscapeBrushAlpha : public FLandscapeBrushAlphaBase
function virtual void Tick
Source code excerpt:
Scale.Y,
0.0f,
EdMode->UISettings->bAlphaBrushAutoRotate ? LastMouseAngle : FMath::DegreesToRadians(EdMode->UISettings->AlphaBrushRotation)
);
FLinearColor AlphaTextureMask(EdMode->UISettings->AlphaTextureChannel == ELandscapeTextureColorChannel::Red ? 1.0f : 0.0f,
EdMode->UISettings->AlphaTextureChannel == ELandscapeTextureColorChannel::Green ? 1.0f : 0.0f,
EdMode->UISettings->AlphaTextureChannel == ELandscapeTextureColorChannel::Blue ? 1.0f : 0.0f,
EdMode->UISettings->AlphaTextureChannel == ELandscapeTextureColorChannel::Alpha ? 1.0f : 0.0f);
#Loc: <Workspace>/Engine/Source/Editor/LandscapeEditor/Private/LandscapeEditorDetailCustomization_AlphaBrush.cpp:253
Scope (from outer to inner):
file
function BEGIN_SLATE_FUNCTION_BUILD_OPTIMIZATION void FLandscapeEditorDetailCustomization_AlphaBrush::CustomizeDetails
Source code excerpt:
TSharedRef<IPropertyHandle> PropertyHandle_bUseWorldSpacePatternBrush = DetailBuilder.GetProperty(GET_MEMBER_NAME_CHECKED(ULandscapeEditorObject, bUseWorldSpacePatternBrush));
TSharedRef<IPropertyHandle> PropertyHandle_AlphaBrushScale = DetailBuilder.GetProperty(GET_MEMBER_NAME_CHECKED(ULandscapeEditorObject, AlphaBrushScale));
TSharedRef<IPropertyHandle> PropertyHandle_AlphaBrushRotation = DetailBuilder.GetProperty(GET_MEMBER_NAME_CHECKED(ULandscapeEditorObject, AlphaBrushRotation));
TSharedRef<IPropertyHandle> PropertyHandle_AlphaBrushPanU = DetailBuilder.GetProperty(GET_MEMBER_NAME_CHECKED(ULandscapeEditorObject, AlphaBrushPanU));
TSharedRef<IPropertyHandle> PropertyHandle_AlphaBrushPanV = DetailBuilder.GetProperty(GET_MEMBER_NAME_CHECKED(ULandscapeEditorObject, AlphaBrushPanV));
auto NonWorld_Visibility = TAttribute<EVisibility>::Create(TAttribute<EVisibility>::FGetter::CreateLambda([=]() { return GetPropertyValue<bool>(PropertyHandle_bUseWorldSpacePatternBrush) ? EVisibility::Collapsed : EVisibility::Visible; } ));
auto World_Visibility = TAttribute<EVisibility>::Create(TAttribute<EVisibility>::FGetter::CreateLambda([=]() { return GetPropertyValue<bool>(PropertyHandle_bUseWorldSpacePatternBrush) ? EVisibility::Visible : EVisibility::Collapsed; } ));
#Loc: <Workspace>/Engine/Source/Editor/LandscapeEditor/Private/LandscapeEditorObject.cpp:109
Scope (from outer to inner):
file
function ULandscapeEditorObject::ULandscapeEditorObject
Source code excerpt:
, AlphaBrushScale(0.5f)
, bAlphaBrushAutoRotate(true)
, AlphaBrushRotation(0.0f)
, AlphaBrushPanU(0.5f)
, AlphaBrushPanV(0.5f)
, bUseWorldSpacePatternBrush(false)
, WorldSpacePatternBrushSettings(FVector2D::ZeroVector, 0.0f, false, 3200)
, AlphaTexture(nullptr)
, AlphaTextureChannel(ELandscapeTextureColorChannel::Red)
#Loc: <Workspace>/Engine/Source/Editor/LandscapeEditor/Private/LandscapeEditorObject.cpp:225
Scope (from outer to inner):
file
function void ULandscapeEditorObject::Load
Source code excerpt:
GConfig->GetFloat(TEXT("LandscapeEdit"), TEXT("AlphaBrushScale"), AlphaBrushScale, GEditorPerProjectIni);
GConfig->GetBool(TEXT("LandscapeEdit"), TEXT("AlphaBrushAutoRotate"), bAlphaBrushAutoRotate, GEditorPerProjectIni);
GConfig->GetFloat(TEXT("LandscapeEdit"), TEXT("AlphaBrushRotation"), AlphaBrushRotation, GEditorPerProjectIni);
GConfig->GetFloat(TEXT("LandscapeEdit"), TEXT("AlphaBrushPanU"), AlphaBrushPanU, GEditorPerProjectIni);
GConfig->GetFloat(TEXT("LandscapeEdit"), TEXT("AlphaBrushPanV"), AlphaBrushPanV, GEditorPerProjectIni);
GConfig->GetBool(TEXT("LandscapeEdit"), TEXT("bUseWorldSpacePatternBrush"), bUseWorldSpacePatternBrush, GEditorPerProjectIni);
GConfig->GetVector2D(TEXT("LandscapeEdit"), TEXT("WorldSpacePatternBrushSettings.Origin"), WorldSpacePatternBrushSettings.Origin, GEditorPerProjectIni);
GConfig->GetBool(TEXT("LandscapeEdit"), TEXT("WorldSpacePatternBrushSettings.bCenterTextureOnOrigin"), WorldSpacePatternBrushSettings.bCenterTextureOnOrigin, GEditorPerProjectIni);
GConfig->GetFloat(TEXT("LandscapeEdit"), TEXT("WorldSpacePatternBrushSettings.RepeatSize"), WorldSpacePatternBrushSettings.RepeatSize, GEditorPerProjectIni);
#Loc: <Workspace>/Engine/Source/Editor/LandscapeEditor/Private/LandscapeEditorObject.cpp:398
Scope (from outer to inner):
file
function void ULandscapeEditorObject::Save
Source code excerpt:
GConfig->SetFloat(TEXT("LandscapeEdit"), TEXT("AlphaBrushScale"), AlphaBrushScale, GEditorPerProjectIni);
GConfig->SetBool(TEXT("LandscapeEdit"), TEXT("AlphaBrushAutoRotate"), bAlphaBrushAutoRotate, GEditorPerProjectIni);
GConfig->SetFloat(TEXT("LandscapeEdit"), TEXT("AlphaBrushRotation"), AlphaBrushRotation, GEditorPerProjectIni);
GConfig->SetFloat(TEXT("LandscapeEdit"), TEXT("AlphaBrushPanU"), AlphaBrushPanU, GEditorPerProjectIni);
GConfig->SetFloat(TEXT("LandscapeEdit"), TEXT("AlphaBrushPanV"), AlphaBrushPanV, GEditorPerProjectIni);
GConfig->SetVector2D(TEXT("LandscapeEdit"), TEXT("WorldSpacePatternBrushSettings.Origin"), WorldSpacePatternBrushSettings.Origin, GEditorPerProjectIni);
GConfig->SetBool(TEXT("LandscapeEdit"), TEXT("WorldSpacePatternBrushSettings.bCenterTextureOnOrigin"), WorldSpacePatternBrushSettings.bCenterTextureOnOrigin, GEditorPerProjectIni);
GConfig->SetFloat(TEXT("LandscapeEdit"), TEXT("WorldSpacePatternBrushSettings.RepeatSize"), WorldSpacePatternBrushSettings.RepeatSize, GEditorPerProjectIni);
const FString AlphaTextureName = (AlphaTexture != nullptr) ? AlphaTexture->GetPathName() : FString();
#Loc: <Workspace>/Engine/Source/Editor/LandscapeEditor/Public/LandscapeEditorObject.h:650
Scope (from outer to inner):
file
class class ULandscapeEditorObject : public UObject
Source code excerpt:
// Rotates the brush mask texture
UPROPERTY(Category="Brush Settings", EditAnywhere, NonTransactional, meta=(DisplayName="Texture Rotation", ShowForBrushes="BrushSet_Alpha,BrushSet_Pattern", ClampMin="-360", ClampMax="360", UIMin="-180", UIMax="180"))
float AlphaBrushRotation;
// Horizontally offsets the brush mask texture
UPROPERTY(Category="Brush Settings", EditAnywhere, NonTransactional, meta=(DisplayName="Texture Pan U", ShowForBrushes="BrushSet_Pattern", ClampMin="0", ClampMax="1"))
float AlphaBrushPanU;
// Vertically offsets the brush mask texture