BrushComponentSize
BrushComponentSize
#Overview
name: BrushComponentSize
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 9
C++ source files.
#Summary
#Usage in the C++ source code
The purpose of BrushComponentSize is to control the size of the brush when editing landscape components in Unreal Engine 5. It specifically determines the number of components in both X and Y directions that will be affected by the brush operation at once.
This setting variable is primarily used in the Landscape Editor subsystem of Unreal Engine 5. It’s an integral part of the landscape editing tools, particularly for operations that work on a component level rather than individual heightmap pixels.
The value of this variable is set in several ways:
- It’s initialized in the ULandscapeEditorObject constructor.
- It can be loaded from and saved to the project’s configuration file (GEditorPerProjectIni).
- It can be modified through the Unreal Editor UI, as indicated by the UPROPERTY macro with EditAnywhere specified.
This variable interacts closely with other landscape editing variables, particularly:
- BrushRadius and PaintBrushRadius, which control the size of the brush for non-component operations.
- BrushComponentIncludeBorder, which determines whether the brush affects border pixels of components.
Developers should be aware that:
- The value is clamped between 1 and 128, with a UI range of 1 to 64.
- It’s used in calculations for brush positioning and extent determination.
- Changing this value can significantly affect the scale and performance of landscape editing operations.
Best practices when using this variable include:
- Use smaller values for more precise edits and larger values for broad changes.
- Consider the performance impact of larger brush sizes, especially on lower-end hardware.
- Coordinate its use with other brush settings for consistent editing behavior.
- Be mindful of its interaction with landscape component size when planning large-scale edits.
#Setting Variables
#References In INI files
Location: <Workspace>/Engine/Config/BaseEditorPerProjectUserSettings.ini:727, section: [LandscapeEdit]
- INI Section:
LandscapeEdit
- Raw value:
1
- 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:1707
Scope (from outer to inner):
file
function void FEdModeLandscape::ChangeBrushSize
Source code excerpt:
if (CurrentBrush->GetBrushType() == ELandscapeBrushType::Component)
{
int32 Radius = UISettings->BrushComponentSize;
if (bIncrease)
{
++Radius;
}
else
{
#Loc: <Workspace>/Engine/Source/Editor/LandscapeEditor/Private/LandscapeEdMode.cpp:1717
Scope (from outer to inner):
file
function void FEdModeLandscape::ChangeBrushSize
Source code excerpt:
}
Radius = (int32)FMath::Clamp(Radius, 1, 64);
UISettings->BrushComponentSize = Radius;
}
else
{
float Radius = UISettings->GetCurrentToolBrushRadius();
const ULandscapeSettings* LandscapeSettings = GetDefault<ULandscapeSettings>();
const float SliderMin = 10.0f;
#Loc: <Workspace>/Engine/Source/Editor/LandscapeEditor/Private/LandscapeEdModeBrushes.cpp:472
Scope (from outer to inner):
file
class class FLandscapeBrushComponent : public FLandscapeBrush
function virtual void Tick
Source code excerpt:
if (LandscapeInfo && LandscapeInfo->ComponentSizeQuads > 0)
{
const int32 BrushSize = FMath::Max(EdMode->UISettings->BrushComponentSize, 0);
const float BrushOriginX = static_cast<float>(LastMousePosition.X / LandscapeInfo->ComponentSizeQuads - (BrushSize - 1) / 2.0f);
const float BrushOriginY = static_cast<float>(LastMousePosition.Y / LandscapeInfo->ComponentSizeQuads - (BrushSize - 1) / 2.0f);
const int32 ComponentIndexX = FMath::FloorToInt(BrushOriginX);
const int32 ComponentIndexY = FMath::FloorToInt(BrushOriginY);
BrushExtentsInclusive.Min = FIntPoint(ComponentIndexX * LandscapeInfo->ComponentSizeQuads, ComponentIndexY * LandscapeInfo->ComponentSizeQuads);
#Loc: <Workspace>/Engine/Source/Editor/LandscapeEditor/Private/LandscapeEdModeBrushes.cpp:547
Scope (from outer to inner):
file
class class FLandscapeBrushComponent : public FLandscapeBrush
function virtual FLandscapeBrushData ApplyBrush
Source code excerpt:
if (EdMode->CurrentTool->GetToolName() == FName("AddComponent"))
{
const int32 BrushSize = FMath::Max(EdMode->UISettings->BrushComponentSize, 0);
const float BrushOriginX = static_cast<float>(LastMousePosition.X / LandscapeInfo->ComponentSizeQuads - (BrushSize - 1) / 2.0f);
const float BrushOriginY = static_cast<float>(LastMousePosition.Y / LandscapeInfo->ComponentSizeQuads - (BrushSize - 1) / 2.0f);
const int32 ComponentIndexX = FMath::FloorToInt(BrushOriginX);
const int32 ComponentIndexY = FMath::FloorToInt(BrushOriginY);
#Loc: <Workspace>/Engine/Source/Editor/LandscapeEditor/Private/LandscapeEdModeComponentTools.cpp:1037
Scope (from outer to inner):
file
class class FLandscapeToolAddComponent : public FLandscapeToolBase<FLandscapeToolStrokeAddComponent>
function virtual int32 GetToolActionResolutionDelta
Source code excerpt:
if ( LandscapeInfo != nullptr && ToolTarget.LandscapeInfo.IsValid() && LastMousePosition.IsSet() && ToolTarget.LandscapeInfo->GetLandscapeXYComponentBounds(LandscapeIndices))
{
const int32 BrushSize = FMath::Max(EdMode->UISettings->BrushComponentSize, 0);
const int32 ComponentSizeQuads = ToolTarget.LandscapeInfo->ComponentSizeQuads;
const float BrushOriginX = static_cast<float>(LastMousePosition.GetValue().X / ComponentSizeQuads - (BrushSize - 1) / 2.0);
const float BrushOriginY = static_cast<float>(LastMousePosition.GetValue().Y / ComponentSizeQuads - (BrushSize - 1) / 2.0);
const int32 ComponentIndexX = FMath::FloorToInt(BrushOriginX);
const int32 ComponentIndexY = FMath::FloorToInt(BrushOriginY);
#Loc: <Workspace>/Engine/Source/Editor/LandscapeEditor/Private/LandscapeEditorObject.cpp:119
Scope (from outer to inner):
file
function ULandscapeEditorObject::ULandscapeEditorObject
Source code excerpt:
, AlphaTextureSizeY(1)
, BrushComponentSize(1)
, TargetDisplayOrder(ELandscapeLayerDisplayMode::Default)
, ShowUnusedLayers(true)
, CurrentLayerIndex(INDEX_NONE)
{
// Structure to hold one-time initialization
struct FConstructorStatics
#Loc: <Workspace>/Engine/Source/Editor/LandscapeEditor/Private/LandscapeEditorObject.cpp:217
Scope (from outer to inner):
file
function void ULandscapeEditorObject::Load
Source code excerpt:
GConfig->GetFloat(TEXT("LandscapeEdit"), TEXT("BrushRadius"), BrushRadius, GEditorPerProjectIni);
GConfig->GetFloat(TEXT("LandscapeEdit"), TEXT("PaintBrushRadius"), PaintBrushRadius, GEditorPerProjectIni);
GConfig->GetInt(TEXT("LandscapeEdit"), TEXT("BrushComponentSize"), BrushComponentSize, GEditorPerProjectIni);
GConfig->GetFloat(TEXT("LandscapeEdit"), TEXT("BrushFalloff"), BrushFalloff, GEditorPerProjectIni);
GConfig->GetFloat(TEXT("LandscapeEdit"), TEXT("PaintBrushFalloff"), PaintBrushFalloff, GEditorPerProjectIni);
bool InbUseClayBrush = bUseClayBrush;
GConfig->GetBool(TEXT("LandscapeEdit"), TEXT("bUseClayBrush"), InbUseClayBrush, GEditorPerProjectIni);
bUseClayBrush = InbUseClayBrush;
GConfig->GetFloat(TEXT("LandscapeEdit"), TEXT("AlphaBrushScale"), AlphaBrushScale, GEditorPerProjectIni);
#Loc: <Workspace>/Engine/Source/Editor/LandscapeEditor/Private/LandscapeEditorObject.cpp:392
Scope (from outer to inner):
file
function void ULandscapeEditorObject::Save
Source code excerpt:
GConfig->SetFloat(TEXT("LandscapeEdit"), TEXT("BrushRadius"), BrushRadius, GEditorPerProjectIni);
GConfig->SetFloat(TEXT("LandscapeEdit"), TEXT("PaintBrushRadius"), PaintBrushRadius, GEditorPerProjectIni);
GConfig->SetInt(TEXT("LandscapeEdit"), TEXT("BrushComponentSize"), BrushComponentSize, GEditorPerProjectIni);
GConfig->SetFloat(TEXT("LandscapeEdit"), TEXT("BrushFalloff"), BrushFalloff, GEditorPerProjectIni);
GConfig->SetFloat(TEXT("LandscapeEdit"), TEXT("PaintBrushFalloff"), PaintBrushFalloff, GEditorPerProjectIni);
GConfig->SetBool(TEXT("LandscapeEdit"), TEXT("bUseClayBrush"), bUseClayBrush, GEditorPerProjectIni);
GConfig->SetFloat(TEXT("LandscapeEdit"), TEXT("AlphaBrushScale"), AlphaBrushScale, GEditorPerProjectIni);
GConfig->SetBool(TEXT("LandscapeEdit"), TEXT("AlphaBrushAutoRotate"), bAlphaBrushAutoRotate, GEditorPerProjectIni);
GConfig->SetFloat(TEXT("LandscapeEdit"), TEXT("AlphaBrushRotation"), AlphaBrushRotation, GEditorPerProjectIni);
#Loc: <Workspace>/Engine/Source/Editor/LandscapeEditor/Public/LandscapeEditorObject.h:686
Scope (from outer to inner):
file
class class ULandscapeEditorObject : public UObject
Source code excerpt:
// Number of components X/Y to affect at once. 1 means 1x1, 2 means 2x2, etc
UPROPERTY(Category = "Brush Settings", EditAnywhere, NonTransactional, meta=(DisplayName="Brush Size", ShowForBrushes="BrushSet_Component", ClampMin="1", ClampMax="128", UIMin="1", UIMax="64", SliderExponent="3"))
int32 BrushComponentSize;
UPROPERTY(Category = "Brush Settings", EditAnywhere, NonTransactional, meta = (DisplayName = "Include Border", ShowForBrushes = "BrushSet_Component", ShowForTools = "Paint,Sculpt", ToolTip = "When true, the brush will affect all pixels within the component, including those on the border, which means neightboring components (which share a line/row with their neighbor) will be affected as well"))
bool bBrushComponentIncludeBorder = true;
// Target Layer Settings: