bUseClayBrush
bUseClayBrush
#Overview
name: bUseClayBrush
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 7
C++ source files.
#Summary
#Usage in the C++ source code
The purpose of bUseClayBrush is to control the behavior of the landscape sculpting tool in Unreal Engine’s Landscape Editor. Specifically, it determines whether the Clay Brush painting mode is enabled or disabled for landscape sculpting operations.
This setting variable is primarily used within the Landscape Editor module of Unreal Engine. It is referenced in the LandscapeEdModePaintTools.cpp and LandscapeEditorObject.cpp files, which are part of the landscape editing system.
The value of this variable is set in several ways:
- It is initialized in the ULandscapeEditorObject constructor (LandscapeEditorObject.cpp:105).
- It can be loaded from the editor’s project-specific ini file (LandscapeEditorObject.cpp:220).
- It can be saved to the editor’s project-specific ini file (LandscapeEditorObject.cpp:395).
- It is exposed as an editable property in the Landscape Editor UI (LandscapeEditorObject.h:636).
The bUseClayBrush variable interacts with other variables and calculations in the landscape sculpting process, particularly in the Apply function of the FLandscapeToolStrokeSculpt class. When enabled, it affects how the brush strength is calculated and how the landscape heightmap is modified.
Developers should be aware that:
- Enabling the Clay Brush mode changes the behavior of the sculpting tool, potentially providing a different sculpting experience.
- The Clay Brush mode involves additional calculations, including normal computation and plane-based height adjustments.
Best practices when using this variable include:
- Use it in conjunction with other brush settings to achieve the desired sculpting effect.
- Be mindful of performance implications when enabling the Clay Brush mode, as it involves more complex calculations.
- Consider providing user documentation or tooltips to explain the difference in behavior when the Clay Brush mode is enabled vs. disabled.
- Ensure that any custom landscape editing tools or extensions properly respect this setting to maintain consistent behavior across the editor.
#Setting Variables
#References In INI files
Location: <Workspace>/Engine/Config/BaseEditorPerProjectUserSettings.ini:729, section: [LandscapeEdit]
- INI Section:
LandscapeEdit
- Raw value:
False
- 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/LandscapeEdModePaintTools.cpp:489
Scope (from outer to inner):
file
class class FLandscapeToolStrokeSculpt : public FLandscapeToolStrokePaintBase<FHeightmapToolTarget>
function void Apply
Source code excerpt:
this->Cache.CacheData(X1, Y1, X2, Y2);
bool bUseClayBrush = UISettings->bUseClayBrush;
// The data we'll be writing to
TArray<ValueType> Data;
this->Cache.GetCachedData(X1, Y1, X2, Y2, Data);
// The source data we use for editing.
#Loc: <Workspace>/Engine/Source/Editor/LandscapeEditor/Private/LandscapeEdModePaintTools.cpp:513
Scope (from outer to inner):
file
class class FLandscapeToolStrokeSculpt : public FLandscapeToolStrokePaintBase<FHeightmapToolTarget>
function void Apply
Source code excerpt:
}
if (!bUseClayBrush)
{
SculptStrength = FMath::Max(SculptStrength, 1.0f);
}
FPlane BrushPlane;
TArray<FVector> Normals;
if (bUseClayBrush)
{
TRACE_CPUPROFILER_EVENT_SCOPE(ComputeClayBrush);
// Calculate normals for brush verts in data space
Normals.Empty(SourceDataArrayPtr->Num());
Normals.AddZeroed(SourceDataArrayPtr->Num());
#Loc: <Workspace>/Engine/Source/Editor/LandscapeEditor/Private/LandscapeEdModePaintTools.cpp:627
Scope (from outer to inner):
file
class class FLandscapeToolStrokeSculpt : public FLandscapeToolStrokePaintBase<FHeightmapToolTarget>
function void Apply
Source code excerpt:
const ValueType& SourceValue = SourceDataScanline[X];
if (bUseClayBrush)
{
// Brush application starts from original world location at start of stroke
FVector WorldLoc = ToWorld.TransformPosition(FVector(X, Y, SourceValue));
// Calculate new location on the brush plane
WorldLoc.Z = (BrushPlane.W - BrushPlane.X*WorldLoc.X - BrushPlane.Y*WorldLoc.Y) / BrushPlane.Z;
#Loc: <Workspace>/Engine/Source/Editor/LandscapeEditor/Private/LandscapeEditorObject.cpp:105
Scope (from outer to inner):
file
function ULandscapeEditorObject::ULandscapeEditorObject
Source code excerpt:
, BrushFalloff(0.5f)
, PaintBrushFalloff(0.5f)
, bUseClayBrush(false)
, AlphaBrushScale(0.5f)
, bAlphaBrushAutoRotate(true)
, AlphaBrushRotation(0.0f)
, AlphaBrushPanU(0.5f)
, AlphaBrushPanV(0.5f)
#Loc: <Workspace>/Engine/Source/Editor/LandscapeEditor/Private/LandscapeEditorObject.cpp:220
Scope (from outer to inner):
file
function void ULandscapeEditorObject::Load
Source code excerpt:
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);
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);
#Loc: <Workspace>/Engine/Source/Editor/LandscapeEditor/Private/LandscapeEditorObject.cpp:395
Scope (from outer to inner):
file
function void ULandscapeEditorObject::Save
Source code excerpt:
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);
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);
#Loc: <Workspace>/Engine/Source/Editor/LandscapeEditor/Public/LandscapeEditorObject.h:636
Scope (from outer to inner):
file
class class ULandscapeEditorObject : public UObject
Source code excerpt:
// Selects the Clay Brush painting mode
UPROPERTY(Category="Brush Settings", EditAnywhere, NonTransactional, meta=(ShowForTools="Sculpt", ShowForBrushes="BrushSet_Circle,BrushSet_Alpha,BrushSet_Pattern"))
bool bUseClayBrush;
// Alpha/Pattern Brush:
// Scale of the brush texture. A scale of 1.000 maps the brush texture to the landscape at a 1 pixel = 1 vertex size
UPROPERTY(Category="Brush Settings", EditAnywhere, NonTransactional, meta=(DisplayName="Texture Scale", ShowForBrushes="BrushSet_Pattern", ClampMin="0.005", ClampMax="5", SliderExponent="3"))
float AlphaBrushScale;