UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
MaterialInstance.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"
8#include "Misc/Guid.h"
11
12#include "MaterialInstance.generated.h"
13
14class ITargetPlatform;
17class UTexture;
19
20//
21// Forward declarations.
22//
26class FSHAHash;
27
30USTRUCT()
32{
34public:
35 UPROPERTY()
36 bool bIsUsedAsAtlasPosition;
37
38 UPROPERTY()
40
41 UPROPERTY()
43
44 bool operator==(const FScalarParameterAtlasInstanceData& Other) const
45 {
46 return
47 bIsUsedAsAtlasPosition == Other.bIsUsedAsAtlasPosition &&
48 Curve == Other.Curve &&
49 Atlas == Other.Atlas;
50 }
52 {
53 return !((*this) == Other);
54 }
55
57 : bIsUsedAsAtlasPosition(false)
58 {
59 }
60};
61
62USTRUCT(BlueprintType)
64{
66
67#if WITH_EDITORONLY_DATA
68 UPROPERTY()
70
71 UPROPERTY()
73#endif
74
75 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category=ScalarParameterValue)
77
78 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category=ScalarParameterValue)
79 float ParameterValue;
80
81 UPROPERTY()
82 FGuid ExpressionGUID;
83
85 : ParameterInfo(InParameterInfo), ParameterValue(InValue)
86 {
87#if WITH_EDITORONLY_DATA
88 AtlasData = InAtlasData;
89#endif
90 }
91
92 bool IsOverride() const { return true; }
93
94 bool IsValid() const { return true; }
95
97 {
98 return
99 ParameterInfo == Other.ParameterInfo &&
100 ParameterValue == Other.ParameterValue &&
101 ExpressionGUID == Other.ExpressionGUID;
102 }
104 {
105 return !((*this) == Other);
106 }
107
108 typedef float ValueType;
109 static ValueType GetValue(const FScalarParameterValue& Parameter) { return Parameter.ParameterValue; }
110
112 {
113 OutResult.Value = ParameterValue;
114#if WITH_EDITORONLY_DATA
115 OutResult.ExpressionGuid = ExpressionGUID;
116 OutResult.ScalarCurve = AtlasData.Curve;
117 OutResult.ScalarAtlas = AtlasData.Atlas;
118 OutResult.bUsedAsAtlasPosition = AtlasData.bIsUsedAsAtlasPosition;
119#endif // WITH_EDITORONLY_DATA
120 }
121};
122
124USTRUCT(BlueprintType)
126{
128
129#if WITH_EDITORONLY_DATA
130 UPROPERTY()
132#endif
133
134 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category=VectorParameterValue)
136
137 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category=VectorParameterValue)
138 FLinearColor ParameterValue;
139
140 UPROPERTY()
141 FGuid ExpressionGUID;
142
147
148 bool IsOverride() const { return true; }
149
150 bool IsValid() const { return true; }
151
153 {
154 return
155 ParameterInfo == Other.ParameterInfo &&
156 ParameterValue == Other.ParameterValue &&
157 ExpressionGUID == Other.ExpressionGUID;
158 }
160 {
161 return !((*this) == Other);
162 }
163
165 static ValueType GetValue(const FVectorParameterValue& Parameter) { return Parameter.ParameterValue; }
166
168 {
169 OutResult.Value = ParameterValue;
170#if WITH_EDITORONLY_DATA
171 OutResult.ExpressionGuid = ExpressionGUID;
172#endif
173 }
174};
175
177USTRUCT(BlueprintType)
179{
181
182 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = VectorParameterValue)
184
185 // LWC_TODO: Blueprint?
186 UPROPERTY(EditAnywhere, Category = VectorParameterValue)
187 FVector4d ParameterValue;
188
189 UPROPERTY()
190 FGuid ExpressionGUID;
191
193 : ParameterInfo(InParameterInfo), ParameterValue(InValue)
194 {
195 }
196
197 bool IsOverride() const { return true; }
198
199 bool IsValid() const { return true; }
200
202 {
203 return
204 ParameterInfo == Other.ParameterInfo &&
205 ParameterValue == Other.ParameterValue &&
206 ExpressionGUID == Other.ExpressionGUID;
207 }
209 {
210 return !((*this) == Other);
211 }
212
214 static ValueType GetValue(const FDoubleVectorParameterValue& Parameter) { return Parameter.ParameterValue; }
215
217 {
218 OutResult.Value = ParameterValue;
219#if WITH_EDITORONLY_DATA
220 OutResult.ExpressionGuid = ExpressionGUID;
221#endif
222 }
223};
224
226USTRUCT(BlueprintType)
228{
230
231#if WITH_EDITORONLY_DATA
232 UPROPERTY()
234#endif
235
236 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category=TextureParameterValue)
238
239 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category=TextureParameterValue)
240 TObjectPtr<class UTexture> ParameterValue;
241
242 UPROPERTY()
243 FGuid ExpressionGUID;
244
246 : ParameterInfo(InParameterInfo), ParameterValue(InValue)
247 {
248 }
249
250 bool IsOverride() const { return true; }
251
252 bool IsValid() const { return GetValue(*this) != nullptr; }
253
255 {
256 return
257 ParameterInfo == Other.ParameterInfo &&
258 ParameterValue == Other.ParameterValue &&
259 ExpressionGUID == Other.ExpressionGUID;
260 }
262 {
263 return !((*this) == Other);
264 }
265
266 typedef const UTexture* ValueType;
267 static ValueType GetValue(const FTextureParameterValue& Parameter) { return Parameter.ParameterValue; }
268
270 {
271 OutResult.Value = ParameterValue;
272#if WITH_EDITORONLY_DATA
273 OutResult.ExpressionGuid = ExpressionGUID;
274#endif
275 }
276};
277
279USTRUCT(BlueprintType)
281{
283
284 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category=TextureCollectionParameterValue)
286
287 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category=TextureCollectionParameterValue)
289
290 UPROPERTY()
291 FGuid ExpressionGUID;
292
297
298 bool IsOverride() const { return true; }
299
300 bool IsValid() const { return GetValue(*this) != nullptr; }
301
303 {
304 return
305 ParameterInfo == Other.ParameterInfo &&
306 ParameterValue == Other.ParameterValue &&
307 ExpressionGUID == Other.ExpressionGUID;
308 }
310 {
311 return !((*this) == Other);
312 }
313
315 static ValueType GetValue(const FTextureCollectionParameterValue& Parameter) { return Parameter.ParameterValue; }
316
318 {
319 OutResult.Value = ParameterValue;
320#if WITH_EDITORONLY_DATA
321 OutResult.ExpressionGuid = ExpressionGUID;
322#endif
323 }
324};
325
327USTRUCT(BlueprintType)
329{
331
332 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category=ParameterCollectionParameterValue)
334
335 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category=ParameterCollectionParameterValue)
337
338 UPROPERTY()
339 FGuid ExpressionGUID;
340
345
346 bool IsOverride() const { return true; }
347
348 bool IsValid() const { return GetValue(*this) != nullptr; }
349
351 {
352 return
353 ParameterInfo == Other.ParameterInfo &&
354 ParameterValue == Other.ParameterValue &&
355 ExpressionGUID == Other.ExpressionGUID;
356 }
358 {
359 return !((*this) == Other);
360 }
361
363 static ValueType GetValue(const FParameterCollectionParameterValue& Parameter) { return Parameter.ParameterValue; }
364
366 {
367 OutResult.Value = ParameterValue;
368#if WITH_EDITORONLY_DATA
369 OutResult.ExpressionGuid = ExpressionGUID;
370#endif
371 }
372};
373
375USTRUCT(BlueprintType)
377{
379
380 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = RuntimeVirtualTextureParameterValue)
382
383 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = RuntimeVirtualTextureParameterValue)
384 TObjectPtr<class URuntimeVirtualTexture> ParameterValue;
385
386 UPROPERTY()
387 FGuid ExpressionGUID;
388
393
394 bool IsOverride() const { return true; }
395
396 bool IsValid() const { return GetValue(*this) != nullptr; }
397
399 {
400 return
401 ParameterInfo == Other.ParameterInfo &&
402 ParameterValue == Other.ParameterValue &&
403 ExpressionGUID == Other.ExpressionGUID;
404 }
406 {
407 return !((*this) == Other);
408 }
409
411 static ValueType GetValue(const FRuntimeVirtualTextureParameterValue& Parameter) { return Parameter.ParameterValue; }
412
414 {
415 OutResult.Value = ParameterValue;
416#if WITH_EDITORONLY_DATA
417 OutResult.ExpressionGuid = ExpressionGUID;
418#endif
419 }
420};
421
423USTRUCT(BlueprintType)
425{
427
428 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = RuntimeVirtualTextureParameterValue)
430
431 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = RuntimeVirtualTextureParameterValue)
432 TObjectPtr<class USparseVolumeTexture> ParameterValue;
433
434 UPROPERTY()
435 FGuid ExpressionGUID;
436
438 : ParameterInfo(InParameterInfo), ParameterValue(InValue)
439 {
440 }
441
442 bool IsOverride() const { return true; }
443
444 bool IsValid() const { return GetValue(*this) != nullptr; }
445
447 {
448 return
449 ParameterInfo == Other.ParameterInfo &&
450 ParameterValue == Other.ParameterValue &&
451 ExpressionGUID == Other.ExpressionGUID;
452 }
454 {
455 return !((*this) == Other);
456 }
457
459 static ValueType GetValue(const FSparseVolumeTextureParameterValue& Parameter) { return Parameter.ParameterValue; }
460
462 {
463 OutResult.Value = ParameterValue;
464#if WITH_EDITORONLY_DATA
465 OutResult.ExpressionGuid = ExpressionGUID;
466#endif
467 }
468};
469
471USTRUCT(BlueprintType)
473{
475
476#if WITH_EDITORONLY_DATA
477 UPROPERTY()
479#endif
480
481 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category=FontParameterValue)
483
484 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category=FontParameterValue)
485 TObjectPtr<class UFont> FontValue;
486
487 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category=FontParameterValue)
488 int32 FontPage;
489
490 UPROPERTY()
491 FGuid ExpressionGUID;
492
494 : ParameterInfo(InParameterInfo), FontValue(InFont), FontPage(InPage)
495 {
496 }
497
498 bool IsOverride() const { return true; }
499
500 bool IsValid() const { return GetValue(*this) != nullptr; }
501
503 {
504 return
505 ParameterInfo == Other.ParameterInfo &&
506 FontValue == Other.FontValue &&
507 FontPage == Other.FontPage &&
508 ExpressionGUID == Other.ExpressionGUID;
509 }
511 {
512 return !((*this) == Other);
513 }
514
515 typedef const UTexture* ValueType;
516 static ValueType GetValue(const FFontParameterValue& Parameter);
517
519 {
520 OutResult.Value = FMaterialParameterValue(FontValue, FontPage);
521#if WITH_EDITORONLY_DATA
522 OutResult.ExpressionGuid = ExpressionGUID;
523#endif
524 }
525};
526
527USTRUCT(BlueprintType)
529{
531
532
533 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category=UserSceneTextureOverrideValue)
534 FName Key;
535
536 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category=UserSceneTextureOverrideValue)
538};
539
541{
542 bool bOverrideBlendableLocation = false;
543 bool bOverrideBlendablePriority = false;
545 int32 BlendablePriorityOverride = 0;
546};
547
548template<class T>
550{
551 if (InA.Num() != InB.Num())
552 {
553 return false;
554 }
555 if (!InA.Num())
556 {
557 return true;
558 }
561 AA.Sort([](const T& A, const T& B) { return B.ExpressionGUID < A.ExpressionGUID; });
562 BB.Sort([](const T& A, const T& B) { return B.ExpressionGUID < A.ExpressionGUID; });
563 return AA == BB;
564}
565
566USTRUCT()
568{
570
571 ENGINE_API static const FMaterialInstanceCachedData EmptyData;
572
573#if WITH_EDITOR
575#endif // WITH_EDITOR
576 void InitializeForDynamic(const FMaterialLayersFunctions* ParentLayers);
577
578 UPROPERTY()
579 TArray<int32> ParentLayerIndexRemap;
580};
581
583{
584 None = 0u,
585 Numeric = (1u << 0),
586 Texture = (1u << 1),
587 Static = (1u << 2),
588
591};
593
594#if WITH_EDITORONLY_DATA
595class FMaterialInstanceParameterUpdateContext
596{
597public:
600
601 inline FStaticParameterSet& GetStaticParameters() { return StaticParameters; }
602
607
608private:
610 FStaticParameterSet StaticParameters;
611 FMaterialInstanceBasePropertyOverrides BasePropertyOverrides;
613};
614#endif // WITH_EDITORONLY_DATA
615
616UCLASS(MinimalAPI, Optional)
624
625UCLASS(abstract, BlueprintType,MinimalAPI)
627{
629
630#if WITH_EDITORONLY_DATA
631 virtual const UClass* GetEditorOnlyDataClass() const override { return UMaterialInstanceEditorOnlyData::StaticClass(); }
632
634 virtual const UMaterialInstanceEditorOnlyData* GetEditorOnlyData() const override { return CastChecked<UMaterialInstanceEditorOnlyData>(Super::GetEditorOnlyData(), ECastCheckedType::NullAllowed); }
635#endif // WITH_EDITORONLY_DATA
636
638 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category=MaterialInstance)
640
642 UPROPERTY(EditAnywhere, Category = PhysicalMaterialMask)
644
646 UPROPERTY(EditAnywhere, BlueprintReadOnly, Category=MaterialInstance, AssetRegistrySearchable)
648
650 UPROPERTY(EditAnywhere, Category = MaterialInstance)
651 FMaterialOverrideNanite NaniteOverrideMaterial;
652
653#if WITH_EDITORONLY_DATA
655#endif // WITH_EDITORONLY_DATA
656
662 ENGINE_API bool HasStaticParameters() const;
663 ENGINE_API FStaticParameterSet GetStaticParameters() const;
664
665 const FMaterialInstanceCachedData& GetCachedInstanceData() const { return CachedData ? *CachedData : FMaterialInstanceCachedData::EmptyData; }
666
668 UPROPERTY()
669 TObjectPtr<class USpecularProfile> SpecularProfileOverride;
670
676 UPROPERTY()
677 uint8 bHasStaticPermutationResource:1;
678
680 UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = MaterialInstance)
681 uint8 bOverrideSubsurfaceProfile:1;
682
684 UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = MaterialInstance)
685 uint8 bOverrideSpecularProfile:1;
686
688 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = MaterialInstance)
689 uint8 bOverrideBlendableLocation:1;
690
692 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = MaterialInstance)
693 uint8 bOverrideBlendablePriority : 1;
694
695 uint8 TwoSided : 1;
696 uint8 bIsThinSurface : 1;
698 uint8 bCastDynamicShadowAsMasked : 1;
699 uint8 bOutputTranslucentVelocity : 1;
700 uint8 bIsShadingModelFromMaterialExpression : 1;
701 uint8 bHasPixelAnimation : 1;
702 uint8 bEnableTessellation : 1;
703 uint8 bEnableDisplacementFade : 1;
704 uint8 bCompatibleWithLumenCardSharing : 1;
705protected:
707public:
708
710
711 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = MaterialInstance)
712 TEnumAsByte<EBlendableLocation> BlendableLocationOverride;
713
714 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = MaterialInstance)
715 int32 BlendablePriorityOverride;
716
718
719 //Cached copies of the base property overrides or the value from the parent to avoid traversing the parent chain for each access.
720 float OpacityMaskClipValue;
721
722 FDisplacementScaling DisplacementScaling;
723 FDisplacementFadeRange DisplacementFadeRange;
724
725 float MaxWorldPositionOffsetDisplacement;
726
727 inline bool GetReentrantFlag(bool bIsInGameThread = IsInGameThread()) const
728 {
729#if WITH_EDITOR
731 {
732 return ReentrantFlag[bIsInGameThread ? 0 : 1];
733 }
734#endif
735 return false;
736 }
737
738 inline void SetReentrantFlag(const bool bValue, bool bIsInGameThread = IsInGameThread())
739 {
740#if WITH_EDITOR
742 {
743 ReentrantFlag[bIsInGameThread ? 0 : 1] = bValue;
744 }
745#endif
746 }
747
749 UPROPERTY(EditAnywhere, BlueprintReadOnly, Category=MaterialInstance, meta = (EditFixedOrder))
750 TArray<struct FScalarParameterValue> ScalarParameterValues;
751
753 UPROPERTY(EditAnywhere, BlueprintReadOnly, Category=MaterialInstance, meta = (EditFixedOrder))
754 TArray<struct FVectorParameterValue> VectorParameterValues;
755
757 UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = MaterialInstance, meta = (EditFixedOrder))
758 TArray<struct FDoubleVectorParameterValue> DoubleVectorParameterValues;
759
761 UPROPERTY(EditAnywhere, BlueprintReadOnly, Category=MaterialInstance, meta = (EditFixedOrder))
762 TArray<struct FTextureParameterValue> TextureParameterValues;
763
765 UPROPERTY(EditAnywhere, BlueprintReadOnly, Category=MaterialInstance, meta = (EditFixedOrder))
766 TArray<struct FTextureCollectionParameterValue> TextureCollectionParameterValues;
767
769 UPROPERTY(EditAnywhere, BlueprintReadOnly, Category=MaterialInstance, meta = (EditFixedOrder))
770 TArray<struct FParameterCollectionParameterValue> ParameterCollectionParameterValues;
771
773 UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = MaterialInstance, meta = (EditFixedOrder))
774 TArray<struct FRuntimeVirtualTextureParameterValue> RuntimeVirtualTextureParameterValues;
775
777 UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = MaterialInstance, meta = (EditFixedOrder))
778 TArray<struct FSparseVolumeTextureParameterValue> SparseVolumeTextureParameterValues;
779
781 UPROPERTY(EditAnywhere, BlueprintReadOnly, Category=MaterialInstance, meta = (EditFixedOrder))
782 TArray<struct FFontParameterValue> FontParameterValues;
783
785 UPROPERTY(EditAnywhere, Category = MaterialInstance)
786 TArray<struct FUserSceneTextureOverride> UserSceneTextureOverrides;
787
788#if WITH_EDITORONLY_DATA
789 UPROPERTY()
791
793 UPROPERTY()
795#endif
796
797 UPROPERTY(EditAnywhere, Category=MaterialInstance)
799
800#if WITH_EDITOR
802 bool ReentrantFlag[2];
803
806#endif
807
812
813#if WITH_EDITOR
814 ENGINE_API virtual void OnCookEvent(UE::Cook::ECookEvent CookEvent, UE::Cook::FCookEventContext& CookContext) override;
815#endif
816 ENGINE_API virtual float GetTextureDensity(FName TextureName, const struct FMeshUVChannelInfo& UVChannelData) const override;
817#if !WITH_EDITOR
818 ENGINE_API virtual FTextureSamplingInfo CalculateTexturesSamplingInfo(UTexture* Texture) override;
819#endif
820
821 ENGINE_API bool Equivalent(const UMaterialInstance* CompareTo) const;
822
823 // Returns true if using this material instance would be equivalent to using its parent.
824 // i.e. no parameters/etc of any kind have been set.
825 ENGINE_API virtual bool IsRedundant() const;
826
827private:
828
830 UPROPERTY()
831 FStaticParameterSetRuntimeData StaticParametersRuntime;
832
833#if WITH_EDITORONLY_DATA
834 UPROPERTY()
836
837 UPROPERTY()
839
840 UPROPERTY()
842#endif // WITH_EDITORONLY_DATA
843
844protected:
846
847private:
849 TArray<FMaterialResource> LoadedMaterialResources;
850
858 TArray<FMaterialResource*> StaticPermutationMaterialResources;
859#if WITH_EDITOR
862#endif
863
865 mutable bool bResourceCreated = false;
866
868 mutable bool bCachingUniformExpressions = false;
869
870#if WITH_EDITOR
872 {
875 , OverrideTexture(InOverrideTexture)
876 {}
877
879 TObjectPtr<UTexture> OverrideTexture;
880 };
881
883
884 // Helper for setting an override texture
888#endif // WITH_EDITOR
889public:
891
892 // Begin UMaterialInterface interface.
893 virtual ENGINE_API UMaterial* GetMaterial() override;
894 virtual ENGINE_API const UMaterial* GetMaterial() const override;
895 virtual ENGINE_API const UMaterial* GetMaterial_Concurrent(TMicRecursionGuard RecursionGuard = TMicRecursionGuard()) const override;
896 virtual ENGINE_API void GetMaterialInheritanceChain(FMaterialInheritanceChain& OutChain) const override;
897 virtual ENGINE_API const FMaterialCachedExpressionData& GetCachedExpressionData(TMicRecursionGuard RecursionGuard = TMicRecursionGuard()) const override;
898 virtual ENGINE_API FMaterialResource* AllocatePermutationResource();
900 virtual ENGINE_API const FMaterialResource* GetMaterialResource(EShaderPlatform InShaderPlatform, EMaterialQualityLevel::Type QualityLevel = EMaterialQualityLevel::Num) const override;
901
902 ENGINE_API bool GetParameterOverrideValue(EMaterialParameterType Type, const FMemoryImageMaterialParameterInfo& ParameterInfo, FMaterialParameterMetadata& OutValue) const;
904
907 virtual ENGINE_API bool GetTextureParameterValue(const FHashedMaterialParameterInfo& ParameterInfo, class UTexture*& OutValue, bool bOveriddenOnly = false) const override;
908 virtual ENGINE_API bool GetTextureCollectionParameterValue(const FHashedMaterialParameterInfo& ParameterInfo, class UTextureCollection*& OutValue, bool bOveriddenOnly = false) const override;
909 virtual ENGINE_API void OverrideTexture(const UTexture* InTextureToOverride, UTexture* OverrideTexture, ERHIFeatureLevel::Type InFeatureLevel) override;
910 virtual ENGINE_API void SetNumericParameterDefault(EMaterialParameterType Type, const FHashedMaterialParameterInfo& ParameterInfo, const UE::Shader::FValue& Value,EShaderPlatform InShaderPlatform) override;
911 virtual ENGINE_API void ClearNumericParameterDefault(EMaterialParameterType Type, const FHashedMaterialParameterInfo& ParameterInfo, EShaderPlatform InShaderPlatform) override;
912 virtual ENGINE_API bool CheckMaterialUsage(const EMaterialUsage Usage) override;
913 virtual ENGINE_API bool CheckMaterialUsage_Concurrent(const EMaterialUsage Usage) const override;
914 virtual ENGINE_API bool GetMaterialLayers(FMaterialLayersFunctions& OutLayers, TMicRecursionGuard RecursionGuard = TMicRecursionGuard()) const override;
915 virtual ENGINE_API bool IsDependent(UMaterialInterface* TestDependency) override;
916 virtual ENGINE_API bool IsDependent_Concurrent(UMaterialInterface* TestDependency, TMicRecursionGuard RecursionGuard) override;
917 virtual ENGINE_API void GetDependencies(TSet<UMaterialInterface*>& Dependencies) override;
918 virtual ENGINE_API FMaterialRenderProxy* GetRenderProxy() const override;
919 virtual ENGINE_API UPhysicalMaterial* GetPhysicalMaterial() const override;
920 virtual ENGINE_API UPhysicalMaterialMask* GetPhysicalMaterialMask() const override;
921 virtual ENGINE_API UPhysicalMaterial* GetPhysicalMaterialFromMap(int32 Index) const override;
922 virtual ENGINE_API UMaterialInterface* GetNaniteOverride(TMicRecursionGuard RecursionGuard = TMicRecursionGuard()) const override;
923 virtual ENGINE_API bool UpdateLightmassTextureTracking() override;
924 virtual ENGINE_API bool GetCastShadowAsMasked() const override;
925 virtual ENGINE_API float GetEmissiveBoost() const override;
926 virtual ENGINE_API float GetDiffuseBoost() const override;
927 virtual ENGINE_API float GetExportResolutionScale() const override;
928#if WITH_EDITOR
929 virtual ENGINE_API bool GetGroupSortPriority(const FString& InGroupName, int32& OutSortPriority) const override;
934#endif
935 virtual ENGINE_API void RecacheUniformExpressions(bool bRecreateUniformBuffer) const override;
936 virtual ENGINE_API bool GetRefractionSettings(float& OutBiasValue) const override;
937 virtual ENGINE_API bool GetUserSceneTextureOverride(FName& InOutName) const override;
938 virtual ENGINE_API EBlendableLocation GetBlendableLocation(const UMaterial* Base) const override;
939 virtual ENGINE_API int32 GetBlendablePriority(const UMaterial* Base) const override;
940
942
943
944#if WITH_EDITOR
946#endif // WITH_EDITOR
947
948 ENGINE_API virtual float GetOpacityMaskClipValue() const override;
949 ENGINE_API virtual bool GetCastDynamicShadowAsMasked() const override;
950 ENGINE_API virtual EBlendMode GetBlendMode() const override;
951 ENGINE_API virtual FMaterialShadingModelField GetShadingModels() const override;
952 ENGINE_API virtual bool IsShadingModelFromMaterialExpression() const override;
953 ENGINE_API virtual bool IsTwoSided() const override;
954 ENGINE_API virtual bool IsThinSurface() const override;
955 ENGINE_API virtual bool IsTranslucencyWritingVelocity() const override;
956 ENGINE_API virtual bool IsTranslucencyVelocityFromDepth() const override;
957 ENGINE_API virtual bool IsDitheredLODTransition() const override;
958 ENGINE_API virtual bool IsMasked() const override;
959 ENGINE_API virtual bool WritesToRuntimeVirtualTexture() const override;
960 ENGINE_API virtual bool HasMeshPaintTexture() const override;
961 ENGINE_API virtual bool HasCustomPrimitiveData() const override;
962 ENGINE_API virtual FDisplacementScaling GetDisplacementScaling() const override;
963 ENGINE_API virtual bool IsDisplacementFadeEnabled() const override;
964 ENGINE_API virtual FDisplacementFadeRange GetDisplacementFadeRange() const override;
965 ENGINE_API virtual float GetMaxWorldPositionOffsetDisplacement() const override;
966 ENGINE_API virtual bool ShouldAlwaysEvaluateWorldPositionOffset() const override;
967 ENGINE_API virtual bool IsDeferredDecal() const override;
968 ENGINE_API virtual bool IsUIMaterial() const override;
969 ENGINE_API virtual bool IsPostProcessMaterial() const override;
970 ENGINE_API virtual bool HasVertexInterpolator() const override;
971 ENGINE_API virtual bool HasCustomizedUVs() const override;
972 ENGINE_API virtual bool HasPixelAnimation() const override;
973 ENGINE_API virtual USubsurfaceProfile* GetSubsurfaceProfile_Internal() const override;
974 ENGINE_API virtual USubsurfaceProfile* GetSubsurfaceProfileRoot_Internal() const override;
975 ENGINE_API uint32 NumSubsurfaceProfileRoot_Internal() const override;
976 ENGINE_API USubsurfaceProfile* GetSubsurfaceProfileRoot_Internal(uint32 Index) const override;
977 ENGINE_API virtual USubsurfaceProfile* GetSubsurfaceProfileOverride_Internal() const override;
978 ENGINE_API virtual uint32 NumSpecularProfile_Internal() const override;
979 ENGINE_API virtual USpecularProfile* GetSpecularProfile_Internal(uint32 Index) const override;
980 ENGINE_API virtual USpecularProfile* GetSpecularProfileOverride_Internal() const override;
981 ENGINE_API virtual bool CastsRayTracedShadows() const override;
982 ENGINE_API virtual bool IsTessellationEnabled() const override;
983 ENGINE_API virtual bool HasSubstrateRoughnessTracking() const override;
984 ENGINE_API virtual bool IsCompatibleWithLumenCardSharing() const override;
985
987 ENGINE_API virtual bool IsPropertyActive(EMaterialProperty InProperty) const override;
988#if WITH_EDITOR
990 ENGINE_API virtual int32 CompilePropertyEx(class FMaterialCompiler* Compiler, const FGuid& AttributeID) override;
991#endif // WITH_EDITOR
992 //~ End UMaterialInterface Interface.
993
994 //~ Begin UObject Interface.
995 virtual ENGINE_API void GetResourceSizeEx(FResourceSizeEx& CumulativeResourceSize) override;
996 virtual ENGINE_API void PostInitProperties() override;
997#if WITH_EDITOR
998 virtual ENGINE_API void BeginCacheForCookedPlatformData(const ITargetPlatform *TargetPlatform) override;
999 virtual ENGINE_API bool IsCachedCookedPlatformDataLoaded(const ITargetPlatform* TargetPlatform) override;
1000 virtual ENGINE_API void ClearCachedCookedPlatformData(const ITargetPlatform *TargetPlatform) override;
1001 virtual ENGINE_API void ClearAllCachedCookedPlatformData() override;
1002
1004#endif
1005 virtual ENGINE_API void Serialize(FArchive& Ar) override;
1006 virtual ENGINE_API void PostDuplicate(bool bDuplicateForPIE) override;
1007 virtual ENGINE_API void PostLoad() override;
1008#if WITH_EDITORONLY_DATA
1010#endif
1011 virtual ENGINE_API void BeginDestroy() override;
1012 virtual ENGINE_API bool IsReadyForFinishDestroy() override;
1013 virtual ENGINE_API void FinishDestroy() override;
1014 ENGINE_API static void AddReferencedObjects(UObject* InThis, FReferenceCollector& Collector);
1015#if WITH_EDITOR
1016 virtual ENGINE_API void PostEditChangeProperty(FPropertyChangedEvent& PropertyChangedEvent) override;
1017 virtual ENGINE_API void PostEditUndo() override;
1018
1032
1033 ENGINE_API void SwapLayerParameterIndices(int32 OriginalIndex, int32 NewIndex);
1035
1040
1045
1046#endif // WITH_EDITOR
1047
1048 //~ End UObject Interface.
1049
1055
1056 ENGINE_API void UpdateOverridableBaseProperties();
1057
1058#if WITH_EDITOR
1066 EShaderPlatform ShaderPlatform,
1069 const ITargetPlatform* TargetPlatform = nullptr,
1070 bool bBlocking = false
1071 );
1072#endif
1073
1078 void GetAllShaderMaps(TArray<FMaterialShaderMap*>& OutShaderMaps);
1079
1080#if WITH_EDITORONLY_DATA
1081
1083#endif // WITH_EDITORONLY_DATA
1084
1085 ENGINE_API virtual void GetAllParametersOfType(EMaterialParameterType Type, TMap<FMaterialParameterInfo, FMaterialParameterMetadata>& OutParameters) const override;
1086#if WITH_EDITORONLY_DATA
1087 ENGINE_API virtual bool IterateDependentFunctions(TFunctionRef<bool(UMaterialFunctionInterface*)> Predicate) const override;
1089#endif // WITH_EDITORONLY_DATA
1090
1091#if WITH_EDITOR
1094#endif
1095
1096#if WITH_EDITOR
1099
1100 ENGINE_API virtual void UpdateCachedData();
1101#endif
1102
1103 void GetBasePropertyOverridesHash(FSHAHash& OutHash)const;
1104 ENGINE_API virtual bool HasOverridenBaseProperties()const;
1105
1106#if WITH_EDITOR
1108#endif
1109
1110 // For all materials instances, UMaterialInstance::CacheResourceShadersForRendering
1111 ENGINE_API static void AllMaterialsCacheResourceShadersForRendering(bool bUpdateProgressDialog = false, bool bCacheAllRemainingShaders = true);
1112
1120
1121
1122#if !(UE_BUILD_SHIPPING || UE_BUILD_TEST)
1127 ENGINE_API virtual void LogMaterialsAndTextures(FOutputDevice& Ar, int32 Indent) const override;
1128#endif
1129 UE_DEPRECATED(5.7, "Please use GetMaterialResource with EShaderPlatform argument and not ERHIFeatureLevel::Type")
1130 ENGINE_API void ValidateTextureOverrides(ERHIFeatureLevel::Type InFeatureLevel) const;
1131 ENGINE_API void ValidateTextureOverrides(EShaderPlatform InShaderPlatform) const;
1132
1140 ENGINE_API virtual void GetLightingGuidChain(bool bIncludeTextures, TArray<FGuid>& OutGuids) const override;
1141
1142 ENGINE_API virtual void DumpDebugInfo(FOutputDevice& OutputDevice) const override;
1143 void SaveShaderStableKeys(const class ITargetPlatform* TP);
1144 ENGINE_API virtual void SaveShaderStableKeysInner(const class ITargetPlatform* TP, const struct FStableShaderKeyAndValue& SaveKeyVal) override;
1145
1146#if WITH_EDITOR
1148#endif // WITH_EDITOR
1149
1150#if WITH_EDITOR
1153#endif // WITH_EDITOR
1154
1155 ENGINE_API virtual void CacheShaders(EMaterialShaderPrecompileMode CompileMode) override;
1156#if WITH_EDITOR
1158#endif
1159 ENGINE_API virtual bool IsComplete() const override;
1160
1161#if WITH_EDITOR
1162 ENGINE_API virtual bool IsCompiling() const override;
1163#endif
1164
1166 void StartCacheUniformExpressions() const;
1167 void FinishCacheUniformExpressions() const;
1168
1169protected:
1170
1177 void CopyMaterialUniformParametersInternal(UMaterialInterface* Source);
1178
1182 bool UpdateParameters();
1183
1184 ENGINE_API bool SetParentInternal(class UMaterialInterface* NewParent, bool RecacheShaders);
1185
1186 void GetTextureExpressionValues(const FMaterialResource* MaterialResource, TArray<UTexture*>& OutTextures, TArray<TArray<int32>>* OutIndices = nullptr, bool bIncludeTextureCollections = false) const;
1187 void GetTextureCollectionExpressionValues(const FMaterialResource* MaterialResource, TArray<UTextureCollection*>& OutTextureCollections) const;
1188
1189#if WITH_EDITOR
1193 ENGINE_API void UpdateParameterNames();
1194
1195#endif // WITH_EDITOR
1196
1200 void ReserveParameterValuesInternal(EMaterialParameterType Type, int32 Capacity);
1203 void SetVectorParameterValueInternal(const FMaterialParameterInfo& ParameterInfo, FLinearColor Value);
1204 void SetDoubleVectorParameterValueInternal(const FMaterialParameterInfo& ParameterInfo, FVector4d Value);
1205 bool SetVectorParameterByIndexInternal(int32 ParameterIndex, FLinearColor Value);
1206 bool SetScalarParameterByIndexInternal(int32 ParameterIndex, float Value);
1207 void SetScalarParameterValueInternal(const FMaterialParameterInfo& ParameterInfo, float Value, bool bUseAtlas = false, FScalarParameterAtlasInstanceData AtlasData = FScalarParameterAtlasInstanceData());
1208#if WITH_EDITOR
1210#endif
1211 void SetTextureParameterValueInternal(const FMaterialParameterInfo& ParameterInfo, class UTexture* Value);
1212 void SetTextureCollectionParameterValueInternal(const FMaterialParameterInfo& ParameterInfo, class UTextureCollection* Value);
1213 void SetParameterCollectionParameterValueInternal(const FMaterialParameterInfo& ParameterInfo, class UMaterialParameterCollection* Value);
1214 void SetRuntimeVirtualTextureParameterValueInternal(const FMaterialParameterInfo& ParameterInfo, class URuntimeVirtualTexture* Value);
1215 void SetSparseVolumeTextureParameterValueInternal(const FMaterialParameterInfo& ParameterInfo, class USparseVolumeTexture* Value);
1216 void SetFontParameterValueInternal(const FMaterialParameterInfo& ParameterInfo, class UFont* FontValue, int32 FontPage);
1218
1220 ENGINE_API void InitResources();
1221
1230
1232 void CacheShadersForResources(EShaderPlatform ShaderPlatform, const TArray<FMaterialResource*>& ResourcesToCache, EMaterialShaderPrecompileMode PrecompileMode = EMaterialShaderPrecompileMode::Default, const ITargetPlatform* TargetPlatform = nullptr);
1233
1234#if WITH_EDITOR
1237#endif
1238
1244 ENGINE_API void CopyMaterialInstanceParameters(UMaterialInterface* Source);
1245
1246 // to share code between PostLoad() and PostEditChangeProperty()
1247 void PropagateDataToMaterialProxy();
1248
1252 friend class UMaterialEditingLibrary;
1255 friend class FMaterialInstanceParameterUpdateContext;
1256};
EBlendableLocation
Definition BlendableInterface.h:15
@ BL_SceneColorAfterTonemapping
Definition BlendableInterface.h:75
@ ForceInit
Definition CoreMiscDefines.h:155
#define UE_DEPRECATED(Version, Message)
Definition CoreMiscDefines.h:302
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
EBlendMode
Definition EngineTypes.h:245
#define ENUM_CLASS_FLAGS(Enum)
Definition EnumClassFlags.h:6
bool CompareValueArraysByExpressionGUID(const TArray< T > &InA, const TArray< T > &InB)
Definition MaterialInstance.h:549
EMaterialInstanceClearParameterFlag
Definition MaterialInstance.h:583
EMaterialUsage
Definition MaterialInterface.h:73
TMaterialRecursionGuard< class UMaterialInterface > TMicRecursionGuard
Definition MaterialInterface.h:205
EMaterialGetParameterValueFlags
Definition MaterialParameters.h:260
EMaterialParameterType
Definition MaterialParameters.h:187
EMaterialSetParameterValueFlags
Definition MaterialParameters.h:271
EMaterialShaderPrecompileMode
Definition MaterialShaderPrecompileMode.h:7
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 USTRUCT(...)
Definition ObjectMacros.h:746
#define GENERATED_USTRUCT_BODY(...)
Definition ObjectMacros.h:767
EPSOPrecachePriority
Definition PipelineStateCache.h:33
EShaderPlatform
Definition RHIShaderPlatform.h:11
EMaterialProperty
Definition SceneTypes.h:148
CORE_API bool IsInParallelGameThread()
Definition ThreadingBase.cpp:207
CORE_API bool IsInGameThread()
Definition ThreadingBase.cpp:185
uint8_t uint8
Definition binka_ue_file_header.h:8
uint32_t uint32
Definition binka_ue_file_header.h:6
Definition Archive.h:1208
Definition MaterialCompiler.h:109
Definition MaterialInstanceSupport.h:208
Definition MaterialRenderProxy.h:102
Definition MaterialShared.h:3076
Definition MaterialShared.h:1194
Definition MaterialShared.h:1518
Definition MaterialShared.h:3326
Definition NameTypes.h:617
Definition OutputDevice.h:133
Definition UObjectGlobals.h:2492
Definition SecureHash.h:226
Definition Array.h:670
Definition EnumAsByte.h:22
Definition AssetRegistryState.h:50
Definition UnrealString.h.inl:34
Definition UniquePtr.h:107
Definition Class.h:3793
Definition CurveLinearColorAtlas.h:72
Definition CurveLinearColor.h:29
Definition Font.h:111
Definition MaterialFunctionInterface.h:59
Definition MaterialInstance.h:618
Definition MaterialInstance.h:627
class FMaterialInstanceResource * Resource
Definition MaterialInstance.h:811
void SetReentrantFlag(const bool bValue, bool bIsInGameThread=IsInGameThread())
Definition MaterialInstance.h:738
uint8 bLoadedCachedData
Definition MaterialInstance.h:706
TUniquePtr< FMaterialInstanceCachedData > CachedData
Definition MaterialInstance.h:845
TEnumAsByte< EBlendMode > BlendMode
Definition MaterialInstance.h:709
Definition MaterialInterface.h:275
Definition MaterialInterface.h:296
Definition MaterialParameterCollection.h:79
Definition Material.h:432
Definition Object.h:95
Definition PhysicalMaterialMask.h:22
Definition PhysicalMaterial.h:104
Definition RuntimeVirtualTexture.h:18
Definition SparseVolumeTexture.h:309
Definition SpecularProfile.h:74
Definition SubsurfaceProfile.h:170
Definition TextureCollection.h:47
Definition Texture.h:1219
@ NullAllowed
Definition Object.h:62
Type
Definition SceneTypes.h:132
@ Num
Definition SceneTypes.h:137
@ MAX
Definition EngineTypes.h:3780
Definition SceneComponent.h:24
Type
Definition RHIFeatureLevel.h:20
@ false
Definition radaudio_common.h:23
U16 Index
Definition radfft.cpp:71
Definition EngineTypes.h:3237
Definition EngineTypes.h:3204
Definition MaterialInstance.h:179
bool IsValid() const
Definition MaterialInstance.h:199
static ValueType GetValue(const FDoubleVectorParameterValue &Parameter)
Definition MaterialInstance.h:214
bool operator==(const FDoubleVectorParameterValue &Other) const
Definition MaterialInstance.h:201
void GetValue(FMaterialParameterMetadata &OutResult) const
Definition MaterialInstance.h:216
bool IsOverride() const
Definition MaterialInstance.h:197
bool operator!=(const FDoubleVectorParameterValue &Other) const
Definition MaterialInstance.h:208
FVector4d ValueType
Definition MaterialInstance.h:213
Definition MaterialInstance.h:473
bool IsValid() const
Definition MaterialInstance.h:500
bool operator!=(const FFontParameterValue &Other) const
Definition MaterialInstance.h:510
bool operator==(const FFontParameterValue &Other) const
Definition MaterialInstance.h:502
void GetValue(FMaterialParameterMetadata &OutResult) const
Definition MaterialInstance.h:518
bool IsOverride() const
Definition MaterialInstance.h:498
const UTexture * ValueType
Definition MaterialInstance.h:515
Definition Guid.h:109
Definition Color.h:48
Definition MaterialCachedData.h:199
Definition MaterialInterface.h:209
Definition MaterialInstanceBasePropertyOverrides.h:13
Definition MaterialInstance.h:568
static ENGINE_API const FMaterialInstanceCachedData EmptyData
Definition MaterialInstance.h:88
Definition MaterialLayersFunctions.h:221
Definition MaterialOverrideNanite.h:20
Definition MaterialParameters.h:33
Definition MaterialParameters.h:446
Definition MaterialParameters.h:341
Definition EngineTypes.h:732
Definition MaterialParameters.h:96
Definition MeshUVChannelInfo.h:13
Definition PSOPrecache.h:30
Definition MaterialInstance.h:329
bool IsOverride() const
Definition MaterialInstance.h:346
static ValueType GetValue(const FParameterCollectionParameterValue &Parameter)
Definition MaterialInstance.h:363
bool operator==(const FParameterCollectionParameterValue &Other) const
Definition MaterialInstance.h:350
bool IsValid() const
Definition MaterialInstance.h:348
const UMaterialParameterCollection * ValueType
Definition MaterialInstance.h:362
void GetValue(FMaterialParameterMetadata &OutResult) const
Definition MaterialInstance.h:365
bool operator!=(const FParameterCollectionParameterValue &Other) const
Definition MaterialInstance.h:357
Definition MaterialInstance.h:541
Definition UnrealType.h:6865
Definition ResourceSize.h:31
Definition MaterialInstance.h:377
void GetValue(FMaterialParameterMetadata &OutResult) const
Definition MaterialInstance.h:413
bool IsValid() const
Definition MaterialInstance.h:396
bool IsOverride() const
Definition MaterialInstance.h:394
const URuntimeVirtualTexture * ValueType
Definition MaterialInstance.h:410
static ValueType GetValue(const FRuntimeVirtualTextureParameterValue &Parameter)
Definition MaterialInstance.h:411
bool operator!=(const FRuntimeVirtualTextureParameterValue &Other) const
Definition MaterialInstance.h:405
bool operator==(const FRuntimeVirtualTextureParameterValue &Other) const
Definition MaterialInstance.h:398
Definition MaterialInstance.h:32
FScalarParameterAtlasInstanceData()
Definition MaterialInstance.h:56
bool operator!=(const FScalarParameterAtlasInstanceData &Other) const
Definition MaterialInstance.h:51
Definition MaterialInstance.h:64
void GetValue(FMaterialParameterMetadata &OutResult) const
Definition MaterialInstance.h:111
static ValueType GetValue(const FScalarParameterValue &Parameter)
Definition MaterialInstance.h:109
bool operator!=(const FScalarParameterValue &Other) const
Definition MaterialInstance.h:103
bool operator==(const FScalarParameterValue &Other) const
Definition MaterialInstance.h:96
float ValueType
Definition MaterialInstance.h:108
bool IsValid() const
Definition MaterialInstance.h:94
bool IsOverride() const
Definition MaterialInstance.h:92
Definition MaterialInstance.h:425
static ValueType GetValue(const FSparseVolumeTextureParameterValue &Parameter)
Definition MaterialInstance.h:459
bool operator==(const FSparseVolumeTextureParameterValue &Other) const
Definition MaterialInstance.h:446
bool IsOverride() const
Definition MaterialInstance.h:442
bool IsValid() const
Definition MaterialInstance.h:444
const USparseVolumeTexture * ValueType
Definition MaterialInstance.h:458
void GetValue(FMaterialParameterMetadata &OutResult) const
Definition MaterialInstance.h:461
bool operator!=(const FSparseVolumeTextureParameterValue &Other) const
Definition MaterialInstance.h:453
Definition ShaderCodeLibrary.h:118
Definition StaticParameterSet.h:425
Definition StaticParameterSet.h:390
Definition StaticParameterSet.h:462
Definition MaterialInstance.h:281
void GetValue(FMaterialParameterMetadata &OutResult) const
Definition MaterialInstance.h:317
const UTextureCollection * ValueType
Definition MaterialInstance.h:314
bool IsOverride() const
Definition MaterialInstance.h:298
static ValueType GetValue(const FTextureCollectionParameterValue &Parameter)
Definition MaterialInstance.h:315
bool IsValid() const
Definition MaterialInstance.h:300
bool operator==(const FTextureCollectionParameterValue &Other) const
Definition MaterialInstance.h:302
bool operator!=(const FTextureCollectionParameterValue &Other) const
Definition MaterialInstance.h:309
Definition MaterialInstance.h:228
const UTexture * ValueType
Definition MaterialInstance.h:266
bool operator==(const FTextureParameterValue &Other) const
Definition MaterialInstance.h:254
bool IsOverride() const
Definition MaterialInstance.h:250
static ValueType GetValue(const FTextureParameterValue &Parameter)
Definition MaterialInstance.h:267
void GetValue(FMaterialParameterMetadata &OutResult) const
Definition MaterialInstance.h:269
bool IsValid() const
Definition MaterialInstance.h:252
bool operator!=(const FTextureParameterValue &Other) const
Definition MaterialInstance.h:261
Definition MaterialInterface.h:247
Definition MaterialInstance.h:529
Definition MaterialInstance.h:126
bool operator!=(const FVectorParameterValue &Other) const
Definition MaterialInstance.h:159
bool IsOverride() const
Definition MaterialInstance.h:148
bool IsValid() const
Definition MaterialInstance.h:150
bool operator==(const FVectorParameterValue &Other) const
Definition MaterialInstance.h:152
FLinearColor ValueType
Definition MaterialInstance.h:164
static ValueType GetValue(const FVectorParameterValue &Parameter)
Definition MaterialInstance.h:165
void GetValue(FMaterialParameterMetadata &OutResult) const
Definition MaterialInstance.h:167
Definition MaterialRecursionGuard.h:11
Definition ObjectPtr.h:488
Definition Optional.h:131
Definition SoftObjectPtr.h:174
Definition ShaderTypes.h:368