UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
MaterialExpression.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4
5#include "CoreMinimal.h"
7#include "UObject/Object.h"
9#include "Misc/Guid.h"
11#include "MaterialValueType.h"
12
13#include "MaterialExpression.generated.h"
14
15class UEdGraphNode;
16class UMaterial;
17class UTexture;
25
29
31
33enum class EMaterialParameterType : uint8;
34
35namespace MIR
36{
37 class FEmitter;
38 struct FValue;
39}
40
41//@warning: FExpressionInput is mirrored in MaterialShared.h and manually "subclassed" in Material.h (FMaterialInput)
42#if !CPP //noexport struct
43USTRUCT(noexport)
45{
47 UPROPERTY()
49
51 UPROPERTY()
53
58 UPROPERTY()
60
61
62 UPROPERTY()
63 int32 Mask;
64
65 UPROPERTY()
67
68 UPROPERTY()
70
71 UPROPERTY()
73
74 UPROPERTY()
76};
77
78USTRUCT(noexport)
80{
82 int64 PropertyConnectedMask;
83};
84
85#endif
86
87#if !CPP //noexport struct
89USTRUCT(noexport)
91{
92 UPROPERTY()
93 FName OutputName;
94
95 UPROPERTY()
96 int32 Mask;
97
98 UPROPERTY()
99 int32 MaskR;
100
101 UPROPERTY()
102 int32 MaskG;
103
104 UPROPERTY()
105 int32 MaskB;
106
107 UPROPERTY()
108 int32 MaskA;
109};
110#endif
111
113{
114 None = 0u,
115 SendPostEditChangeProperty = (1u << 0), // Send PostEditChangeProperty events for all properties that are modified
116 NoUpdateExpressionGuid = (1u << 1), // By default ExpressionGUI will be updated for static parameters
117 AssignGroupAndSortPriority = (1u << 2), // Update the Group and SortPriority along with parameter value
118};
120
121USTRUCT()
123{
125
126 ENGINE_API void AddExpression(UMaterialExpression* InExpression);
127 ENGINE_API void RemoveExpression(UMaterialExpression* InExpression);
130 ENGINE_API void Empty();
131
133 UPROPERTY()
135
137 UPROPERTY()
139
141 UPROPERTY()
142 TObjectPtr<UMaterialExpression> ExpressionExecBegin = nullptr;
143
144 UPROPERTY()
145 TObjectPtr<UMaterialExpression> ExpressionExecEnd = nullptr;
146};
147
148UCLASS(abstract, Optional, BlueprintType, Config=MaterialExpressions, hidecategories=Object, MinimalAPI)
150{
152
153 static constexpr int32 CompileExecutionOutputIndex = -2;
154
155 UPROPERTY(BlueprintReadWrite, Category = MaterialEditing)
156 int32 MaterialExpressionEditorX;
157
158 UPROPERTY(BlueprintReadWrite, Category = MaterialEditing)
159 int32 MaterialExpressionEditorY;
160
163 TObjectPtr<UEdGraphNode> GraphNode;
164
166 UPROPERTY()
167 TObjectPtr<UMaterialExpression> SubgraphExpression;
168
170 FString LastErrorText;
171
173 UPROPERTY()
174 FGuid MaterialExpressionGuid;
175
180 UPROPERTY()
182
187 UPROPERTY()
189
191 UPROPERTY(EditAnywhere, Category=MaterialExpression, meta=(MultiLine=true, DisplayAfter = "SortPriority"))
192 FString Desc;
193
195 UPROPERTY()
196 uint32 bRealtimePreview:1;
197
200 uint32 bNeedToUpdatePreview:1;
201
203 UPROPERTY()
204 uint8 bIsParameterExpression : 1;
205
207 UPROPERTY()
208 uint32 bCommentBubbleVisible:1;
209
211 UPROPERTY()
212 uint32 bShowOutputNameOnPin:1;
213
215 UPROPERTY()
216 uint32 bShowMaskColorsOnPin:1;
217
219 UPROPERTY()
220 uint32 bHidePreviewWindow:1;
221
223 UPROPERTY()
224 uint32 bCollapsed:1;
225
227 UPROPERTY(config)
228 uint32 bShaderInputData:1;
229
231 UPROPERTY()
232 uint32 bShowInputs:1;
233
235 UPROPERTY()
236 uint32 bShowOutputs:1;
237
239 UPROPERTY(config)
240 TArray<FText> MenuCategories;
241
243 UPROPERTY()
245
246 //~ Begin UObject Interface.
247 ENGINE_API virtual void PostInitProperties() override;
248 ENGINE_API virtual void PostLoad() override;
249 ENGINE_API virtual void PostDuplicate(bool bDuplicateForPIE) override;
250#if WITH_EDITOR
251 ENGINE_API virtual void PostEditChangeProperty(FPropertyChangedEvent& PropertyChangedEvent) override;
252 ENGINE_API virtual void PostEditImport() override;
253 ENGINE_API virtual bool CanEditChange( const FProperty* InProperty ) const override;
254
255 ENGINE_API virtual bool Modify( bool bAlwaysMarkDirty=true ) override;
256#endif // WITH_EDITOR
258 //~ End UObject Interface.
259
260 ENGINE_API UObject* GetAssetOwner() const;
261 ENGINE_API FString GetAssetPathName() const;
262
263#if WITH_EDITOR
270 ENGINE_API virtual int32 Compile(class FMaterialCompiler* Compiler, int32 OutputIndex);
271 virtual int32 CompilePreview(class FMaterialCompiler* Compiler, int32 OutputIndex) { return Compile(Compiler, OutputIndex); }
272
273 ENGINE_API bool IsUsingNewHLSLGenerator() const;
274
281 ENGINE_API virtual void Build(MIR::FEmitter& Emitter);
282
283 /* Material expressions can add shader tags that to a material. Adding a shader tag helps to identify materials
284 * that use certain material expressions, and can be used to limit shader generation to only materials that have
285 * use that material expression
286 */
287 virtual void GetShaderTags(TArray<FName>& ShaderTagsOut) {}
288
290#endif // WITH_EDITOR
291
298 ENGINE_API virtual bool IsAllowedIn(const UObject* MaterialOrFunction) const;
299
300
304 virtual void GetTexturesForceMaterialRecompile(TArray<UTexture *> &Textures) const { }
305
306
312 virtual UObject* GetReferencedTexture() const { return nullptr; }
313
315 virtual ReferencedTextureArray GetReferencedTextures() const { return { GetReferencedTexture() }; }
316
318 virtual bool CanReferenceTexture() const { return false; }
319
320 virtual UTextureCollection* GetReferencedTextureCollection() const { return nullptr; }
321
322#if WITH_EDITOR
323
325 ENGINE_API virtual int32 CountInputs() const;
326
330 FExpressionOutput* GetOutput(int32 OutputIndex) { return Outputs.IsValidIndex(OutputIndex) ? &Outputs[OutputIndex] : nullptr; }
331
336 ENGINE_API virtual FExpressionInput* GetInput(int32 InputIndex);
337 const FExpressionInput* GetInput(int32 InputIndex) const { return const_cast<UMaterialExpression*>(this)->GetInput(InputIndex); }
338
339 UE_DEPRECATED(5.5, "Use FExpressionInputIterator instead or GetInput() directly.")
341
342 ENGINE_API virtual FName GetInputName(int32 InputIndex) const;
343
344 ENGINE_API virtual bool IsInputConnectionRequired(int32 InputIndex) const;
345
346 UE_DEPRECATED(5.6, "Use EMaterialValueType GetInputValueType(...) instead")
347 ENGINE_API virtual uint32 GetInputType(int32 InputIndex);
348
349 ENGINE_API virtual TArray<FExpressionOutput>& GetOutputs();
350
351 UE_DEPRECATED(5.6, "Use EMaterialValueType GetOutputValueType(...) instead")
352 ENGINE_API virtual uint32 GetOutputType(int32 OutputIndex);
353
354 virtual EMaterialValueType GetInputValueType(int32 InputIndex)
355 {
357 return static_cast<EMaterialValueType>(GetInputType(InputIndex));
359 }
360
362 {
364 return static_cast<EMaterialValueType>(GetOutputType(OutputIndex));
366 }
367
368 virtual bool IsStaticExpression() const { return false; }
369 virtual bool CanUserDeleteExpression() const { return true; }
370
375 ENGINE_API virtual void PinDefaultValueChanged(int32 PinIndex, const FString& DefaultValue);
377 ENGINE_API virtual void RefreshNode(bool bUpdatePreview = true);
380
382 ENGINE_API virtual FText GetCreationName() const;
383
389 ENGINE_API virtual int32 GetWidth() const;
390 ENGINE_API virtual int32 GetHeight() const;
391 ENGINE_API virtual bool UsesLeftGutter() const;
392 ENGINE_API virtual bool UsesRightGutter() const;
393
401 ENGINE_API virtual FString GetDescription() const;
404
412 virtual int GetLabelPadding() { return 0; }
413 ENGINE_API virtual int32 CompilerError(class FMaterialCompiler* Compiler, const TCHAR* pcMessage);
414#endif // WITH_EDITOR
415
419#if WITH_EDITOR
420 virtual bool NeedsRealtimePreview() { return false; }
421
425 virtual FText GetPreviewOverlayText() const { return FText(); }
426
432 ENGINE_API virtual bool MatchesSearchQuery( const TCHAR* SearchQuery );
433
442
449
453 virtual bool IsResultMaterialAttributes(int32 OutputIndex) { return false; }
454
458 virtual bool IsResultSubstrateMaterial(int32 OutputIndex) { return false; }
459
464
471
475 virtual bool CanIgnoreOutputIndex() { return false; }
476
481#endif // WITH_EDITOR
482
483#if WITH_EDITOR
488
492 ENGINE_API virtual void ConnectExpression(FExpressionInput* Input, int32 OutputIndex);
493#endif // WITH_EDITOR
494
500 ENGINE_API void UpdateParameterGuid(bool bForceGeneration, bool bAllowMarkingPackageDirty);
501
503 virtual FGuid& GetParameterExpressionId()
504 {
505 checkf(!bIsParameterExpression, TEXT("Expressions with bIsParameterExpression==true must implement their own GetParameterExpressionId!"));
506 static FGuid Dummy;
507 return Dummy;
508 }
509
515 ENGINE_API void UpdateMaterialExpressionGuid(bool bForceGeneration, bool bAllowMarkingPackageDirty);
516
518 virtual FGuid& GetMaterialExpressionId()
519 {
520#if WITH_EDITORONLY_DATA
521 return MaterialExpressionGuid;
522#else
523 static FGuid Dummy;
524 return Dummy;
525#endif
526 }
527
529 ENGINE_API void ValidateState();
530
531#if WITH_EDITOR
532
534 ENGINE_API bool ShouldShowPreview() const;
535
537 virtual FText GetKeywords() const {return FText::GetEmpty();}
538
548
552 ENGINE_API virtual bool CanRenameNode() const;
553
558 ENGINE_API virtual FString GetEditableName() const;
559
564 ENGINE_API virtual void SetEditableName(const FString& NewName);
565
569 virtual bool HasAParameterName() const { return false; }
570 ENGINE_API virtual void ValidateParameterName(const bool bAllowDuplicateName = true);
572
573 ENGINE_API EMaterialParameterType GetParameterType() const;
574
575 virtual FName GetParameterName() const { return NAME_None; }
576 virtual void SetParameterName(const FName& Name) {}
577 virtual bool GetParameterValue(FMaterialParameterMetadata& OutMeta) const { return false; }
579
580 virtual void GetLandscapeLayerNames(TArray<FName>& OutLayers) const {}
582
588
589 ENGINE_API virtual bool HasConnectedOutputs() const;
590
592 ENGINE_API bool ContainsInputLoop(const bool bStopOnFunctionCall = true);
593
596
603 virtual bool CanDeletePin(EEdGraphPinDirection PinDirection, int32 PinIndex) const { return false; }
604
610 virtual void DeletePin(EEdGraphPinDirection PinDirection, int32 PinIndex) {}
611
618
619protected:
622
623private:
629
638
639#endif // WITH_EDITOR
640};
641
643UENUM()
645{
647 Absolute UMETA(DisplayName="Absolute World Position"),
648
650 CameraRelative UMETA(DisplayName="Camera Relative World Position")
651};
652
653
654#if WITH_EDITOR
655
674{
677
680
682 int Index;
683
686 , Input{ InExpression->GetInput(0) }
687 , Index{ 0 }
688 {
689 }
690
691 operator bool() const
692 {
693 return Input != nullptr;
694 }
695
696 FExpressionInputIterator& operator++()
697 {
698 Index += 1;
699 Input = Expression->GetInput(Index);
700 return *this;
701 }
702
703 FExpressionInput* operator->()
704 {
705 return Input;
706 }
707};
708
727{
730
733
735 int Index;
736
739 , Output{ InExpression->GetOutput(0) }
740 , Index{ 0 }
741 {
742 }
743
744 operator bool() const
745 {
746 return Output != nullptr;
747 }
748
749 FExpressionOutputIterator& operator++()
750 {
751 Index += 1;
752 Output = Expression->GetOutput(Index);
753 return *this;
754 }
755
756 FExpressionOutput* operator->()
757 {
758 return Output;
759 }
760};
761
762#endif // WITH_EDITOR
#define checkf(expr, format,...)
Definition AssertionMacros.h:315
#define UE_DEPRECATED(Version, Message)
Definition CoreMiscDefines.h:302
#define TEXT(x)
Definition Platform.h:1272
FPlatformTypes::TCHAR TCHAR
Either ANSICHAR or WIDECHAR, depending on whether the platform supports wide characters or the requir...
Definition Platform.h:1135
FPlatformTypes::int64 int64
A 64-bit signed integer.
Definition Platform.h:1127
FPlatformTypes::int32 int32
A 32-bit signed integer.
Definition Platform.h:1125
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
EEdGraphPinDirection
Definition EdGraphNode.h:98
#define ENUM_CLASS_FLAGS(Enum)
Definition EnumClassFlags.h:6
#define PRAGMA_ENABLE_DEPRECATION_WARNINGS
Definition GenericPlatformCompilerPreSetup.h:12
#define PRAGMA_DISABLE_DEPRECATION_WARNINGS
Definition GenericPlatformCompilerPreSetup.h:8
EMaterialExpressionSetParameterValueFlags
Definition MaterialExpression.h:113
EPositionOrigin
Definition MaterialExpression.h:645
EMaterialParameterType
Definition MaterialParameters.h:187
EMaterialValueType
Definition MaterialValueType.h:15
const bool
Definition NetworkReplayStreaming.h:178
#define UPROPERTY(...)
UObject definition macros.
Definition ObjectMacros.h:744
#define GENERATED_BODY(...)
Definition ObjectMacros.h:765
#define GENERATED_UCLASS_BODY(...)
Definition ObjectMacros.h:768
#define UCLASS(...)
Definition ObjectMacros.h:776
#define UENUM(...)
Definition ObjectMacros.h:749
#define USTRUCT(...)
Definition ObjectMacros.h:746
#define Absolute(a)
Definition Predicates.inl:150
uint8_t uint8
Definition binka_ue_file_header.h:8
uint32_t uint32
Definition binka_ue_file_header.h:6
Definition MaterialCompiler.h:109
Definition MaterialShared.h:1943
Definition NameTypes.h:617
Definition UnrealType.h:174
Definition StructuredArchiveSlots.h:144
Definition Text.h:385
static CORE_API const FText & GetEmpty()
Definition Text.cpp:252
Definition ArrayView.h:139
Definition Array.h:670
UE_NODEBUG UE_FORCEINLINE_HINT bool IsValidIndex(SizeType Index) const
Definition Array.h:1122
Definition SharedPointer.h:692
Definition EdGraphNode.h:289
Definition MaterialExpressionComment.h:15
Definition MaterialExpression.h:150
Definition MaterialFunction.h:40
Definition Material.h:432
Definition Object.h:95
Definition TextureCollection.h:47
Definition Texture.h:1219
Definition MaterialExpression.h:36
int
Definition TestServer.py:515
U16 Index
Definition radfft.cpp:71
Definition MaterialExpressionIO.h:23
int32 OutputIndex
Definition MaterialExpressionIO.h:34
FName InputName
Definition MaterialExpressionIO.h:40
int32 MaskB
Definition MaterialExpressionIO.h:45
class UMaterialExpression * Expression
Definition MaterialExpressionIO.h:28
int32 MaskR
Definition MaterialExpressionIO.h:45
int32 MaskA
Definition MaterialExpressionIO.h:45
int32 MaskG
Definition MaterialExpressionIO.h:45
int32 Mask
Definition MaterialExpressionIO.h:45
Definition MaterialExpressionIO.h:115
Definition EdGraphSchema.h:641
Definition Guid.h:109
Definition MaterialExpressionIO.h:303
Definition MaterialExpression.h:123
Definition MaterialParameters.h:446
Definition EngineTypes.h:732
Definition UnrealType.h:6865
Definition EngineTypes.h:840
Definition SubstrateMaterialShared.h:105
Definition ObjectPtr.h:488