UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
Material.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 "Misc/Guid.h"
10#include "RenderCommandFence.h"
12
13#if WITH_EDITOR
14#include "RHIDefinitions.h"
15#endif
16
22#include "Templates/UniquePtr.h"
23#include "Shader/ShaderTypes.h"
25#include "Material.generated.h"
26
27enum EMaterialDomain : int;
29class ITargetPlatform;
35class UTexture;
37
38#if WITH_EDITOR
39
42{
45
48 {
49 }
50
55 inline bool IsDefault()
56 {
57 return MaterialFlagsThatHaveChanged == DefaultAnnotation.MaterialFlagsThatHaveChanged;
58 }
59
61 void MarkUsageFlagDirty(EMaterialUsage UsageFlag);
62
64 bool IsUsageFlagDirty(EMaterialUsage UsageFlag);
65
67 static const FMaterialsWithDirtyUsageFlags DefaultAnnotation;
68};
69#endif
70
72UENUM()
74{
76 DBM_Translucent UMETA(DisplayName="Translucent"),
78 DBM_Stain UMETA(DisplayName="Stain"),
80 DBM_Normal UMETA(DisplayName="Normal"),
82 DBM_Emissive UMETA(DisplayName="Emissive"),
84 DBM_DBuffer_ColorNormalRoughness UMETA(DisplayName="DBuffer Translucent Color,Normal,Roughness"),
86 DBM_DBuffer_Color UMETA(DisplayName="DBuffer Translucent Color"),
88 DBM_DBuffer_ColorNormal UMETA(DisplayName="DBuffer Translucent Color,Normal"),
90 DBM_DBuffer_ColorRoughness UMETA(DisplayName="DBuffer Translucent Color,Roughness"),
92 DBM_DBuffer_Normal UMETA(DisplayName="DBuffer Translucent Normal"),
94 DBM_DBuffer_NormalRoughness UMETA(DisplayName="DBuffer Translucent Normal,Roughness"),
96 DBM_DBuffer_Roughness UMETA(DisplayName="DBuffer Translucent Roughness"),
97
99 DBM_DBuffer_Emissive UMETA(DisplayName = "DBuffer Emissive", Hidden),
100 DBM_DBuffer_AlphaComposite UMETA(DisplayName = "DBuffer AlphaComposite (Premultiplied Alpha)", Hidden),
101 DBM_DBuffer_EmissiveAlphaComposite UMETA(DisplayName = "DBuffer Emissive AlphaComposite (Premultiplied Alpha)", Hidden),
102
104 DBM_Volumetric_DistanceFunction UMETA(DisplayName="Volumetric Distance Function (experimental)"),
105
107 DBM_AlphaComposite UMETA(DisplayName ="AlphaComposite (Premultiplied Alpha)"),
108
110 DBM_AmbientOcclusion UMETA(DisplayName = "Ambient Occlusion"),
111
113};
114
116UENUM()
118{
120 MDR_None UMETA(DisplayName="None"),
121
123 MDR_ColorNormalRoughness UMETA(DisplayName="Color Normal Roughness"),
125 MDR_Color UMETA(DisplayName="Color"),
127 MDR_ColorNormal UMETA(DisplayName="Color Normal"),
129 MDR_ColorRoughness UMETA(DisplayName="Color Roughness"),
131 MDR_Normal UMETA(DisplayName="Normal"),
133 MDR_NormalRoughness UMETA(DisplayName="Normal Roughness"),
135 MDR_Roughness UMETA(DisplayName="Roughness"),
136 MDR_MAX
138
140UENUM()
142{
144 MTP_BeforeDOF UMETA(DisplayName="Before DOF"),
146 MTP_AfterDOF UMETA(DisplayName="After DOF"),
148 MTP_AfterMotionBlur UMETA(DisplayName="After Motion Blur"),
149 MTP_MAX
151
152// Material input structs.
153//@warning: manually mirrored in MaterialShared.h
154#if !CPP //noexport struct
155USTRUCT(noexport)
156struct FMaterialInput
157{
159 UPROPERTY()
161
163 UPROPERTY()
165
170 UPROPERTY()
172
173 UPROPERTY()
175
176 UPROPERTY()
178
179 UPROPERTY()
181
182 UPROPERTY()
184
185 UPROPERTY()
187};
188#endif
189
190#if !CPP //noexport struct
191USTRUCT(noexport)
193{
194 UPROPERTY()
195 uint32 UseConstant : 1;
196
197 UPROPERTY()
199
201 UseConstant(0) {}
202};
203#endif
204
205#if !CPP //noexport struct
206USTRUCT(noexport)
208{
209 UPROPERTY()
210 uint32 UseConstant : 1;
211
212 UPROPERTY()
213 float Constant;
214
216 UseConstant(0) {}
217};
218#endif
219
220#if !CPP //noexport struct
221USTRUCT(noexport)
223{
224 // No support for constant
225};
226#endif
227
228#if !CPP //noexport struct
229USTRUCT(noexport)
231{
232 // No support for constant
233};
234#endif
235
236#if !CPP //noexport struct
237USTRUCT(noexport)
239{
240 UPROPERTY()
241 uint32 UseConstant : 1;
242
243 UPROPERTY()
245
247 UseConstant(0) {}
248};
249#endif
250
251#if !CPP //noexport struct
252USTRUCT(noexport)
254{
255 UPROPERTY()
256 uint32 UseConstant : 1;
257
258 UPROPERTY()
259 float ConstantX=0.0f;
260
261 UPROPERTY()
262 float ConstantY=0.0f;
263
265 UseConstant(0) {}
266};
267#endif
268
277
278USTRUCT()
280{
282
283 UPROPERTY(VisibleAnywhere, Category = "Group Sorting")
284 FString GroupName;
285
286 UPROPERTY(EditAnywhere, Category = "Group Sorting")
287 int32 GroupSortPriority;
288
290 {
291 GroupName = FString(TEXT(""));
292 GroupSortPriority = 0;
293 }
294
296 : GroupName(InString),
297 GroupSortPriority(InSortPriority)
298 {
299 }
300
302 {
303 return GroupName == Other.GroupName && GroupSortPriority == Other.GroupSortPriority;
304 }
305};
306
307UCLASS(MinimalAPI, Optional)
309{
311public:
313
314 // Reflection
315 UPROPERTY()
317
318 UPROPERTY()
320
321 UPROPERTY()
323
324 UPROPERTY()
326
327 UPROPERTY()
329
330 UPROPERTY()
332
333 UPROPERTY()
335
336 UPROPERTY()
337 FColorMaterialInput EmissiveColor;
338
339 // Transmission.
340 UPROPERTY()
342
343 UPROPERTY()
345
347 UPROPERTY()
348 FVectorMaterialInput WorldPositionOffset;
349
350 UPROPERTY()
352
354 UPROPERTY()
355 FColorMaterialInput SubsurfaceColor;
356
358 UPROPERTY()
360
362 UPROPERTY()
363 FScalarMaterialInput ClearCoatRoughness;
364
366 UPROPERTY()
368
373 UPROPERTY()
375
380 UPROPERTY()
381 FVector2MaterialInput CustomizedUVs[8];
382
383 UPROPERTY()
385
386 UPROPERTY()
387 FScalarMaterialInput PixelDepthOffset;
388
389 UPROPERTY()
390 FShadingModelMaterialInput ShadingModelFromMaterialExpression;
391
392 UPROPERTY()
393 FScalarMaterialInput SurfaceThickness;
394
395 UPROPERTY()
397
398 UPROPERTY()
399 FMaterialExpressionCollection ExpressionCollection;
400
402 UPROPERTY(EditAnywhere, EditFixedSize, Category = "Group Sorting")
403 TArray<FParameterGroupData> ParameterGroupData;
404
406 UPROPERTY()
407 int32 SubstrateConversionVersion;
408
410 UPROPERTY()
411 int32 SubstrateVersion;
412
414 UPROPERTY()
415 bool bIsSubsutrateAutoConvertedAndNotSaved = false;
416
418 ENGINE_API void ResetSubstrateConversionVersion();
419
421 ENGINE_API bool IsSubstrateAutoConverted() const;
422};
423
430UCLASS(hidecategories=Object, MinimalAPI, BlueprintType, PrioritizeCategories = ("Material", "Nanite", "Translucency", "TranslucencySelfShadowing", "Refraction", "WorldPositionOffset", "PostProcessMaterial", "Mobile", "ForwardShading", "PhysicalMaterial", "PhysicalMaterialMask", "Usage", "Lightmass", "Previewing", "ImportSettings"))
432{
434
435#if WITH_EDITORONLY_DATA
436 virtual const UClass* GetEditorOnlyDataClass() const override { return UMaterialEditorOnlyData::StaticClass(); }
437
439 virtual const UMaterialEditorOnlyData* GetEditorOnlyData() const override { return CastChecked<UMaterialEditorOnlyData>(Super::GetEditorOnlyData(), ECastCheckedType::NullAllowed); }
440#endif // WITH_EDITORONLY_DATA
441
442 // Physics.
443
445 UPROPERTY(EditAnywhere, Category=PhysicalMaterial)
447
449 UPROPERTY(EditAnywhere, Category = PhysicalMaterial)
451
453 UPROPERTY(EditAnywhere, Category = PhysicalMaterialMask)
455
456
457 UPROPERTY()
458 TArray<TObjectPtr<class UPhysicalMaterial>> RenderTracePhysicalMaterialOutputs;
459
464 UPROPERTY(EditAnywhere, BlueprintReadOnly, Category=Material, AssetRegistrySearchable)
465 TEnumAsByte<EMaterialDomain> MaterialDomain;
466
468 UPROPERTY(BlueprintReadOnly, EditAnywhere, Category=Material, AssetRegistrySearchable)
469 TEnumAsByte<EBlendMode> BlendMode;
470
471 UPROPERTY(meta = (DeprecatedProperty, DeprecationMessage = "No longer used."))
472 TEnumAsByte<EDecalBlendMode> DecalBlendMode;
473
478 UPROPERTY(EditAnywhere, BlueprintReadOnly, Category=Material, AdvancedDisplay, meta=(DisplayName = "Decal Response (DBuffer)"), AssetRegistrySearchable)
480
482 UPROPERTY(EditAnywhere, Category=Nanite, meta = (EditInline, ShowOnlyInnerProperties))
483 FMaterialOverrideNanite NaniteOverrideMaterial;
484
485 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = Nanite, meta = (DisplayName = "Displacement", EditCondition="bEnableTessellation", DisplayAfter="bEnableTessellation"))
486 FDisplacementScaling DisplacementScaling;
487
488 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = Nanite, meta = (DisplayName = "Displacement Fade", EditCondition="bEnableDisplacementFade", DisplayAfter="DisplacementScaling"))
489 FDisplacementFadeRange DisplacementFadeRange;
490
491private:
493 UPROPERTY(EditAnywhere, Category=Material, AssetRegistrySearchable)
495
496public:
498 UPROPERTY(EditAnywhere, Category = Material, AdvancedDisplay)
499 uint8 bCastDynamicShadowAsMasked : 1;
500
501private:
502 UPROPERTY(AssetRegistrySearchable)
503 FMaterialShadingModelField ShadingModels;
504
505#if WITH_EDITORONLY_DATA
507 UPROPERTY(VisibleAnywhere, Transient, Category=Material)
508 FString UsedShadingModels;
509#endif
510
511public:
512
518 UPROPERTY(EditAnywhere, Category = Material, AdvancedDisplay)
519 float OpacityMaskClipValue;
520
521private:
523 UPROPERTY()
524 uint8 bEnableSeparateTranslucency_DEPRECATED : 1;
525
526public:
531 UPROPERTY(EditAnywhere, Category=Translucency, meta=(DisplayName = "Responsive AA"), AdvancedDisplay)
532 uint8 bEnableResponsiveAA : 1;
533
535 UPROPERTY(EditAnywhere, Category=Translucency, meta=(DisplayName = "Screen Space Reflections"))
536 uint8 bScreenSpaceReflections : 1;
537
539 UPROPERTY(EditAnywhere, Category = Translucency, meta = (DisplayName = "Contact Shadows"))
540 uint8 bContactShadows : 1;
541
543 UPROPERTY(EditAnywhere, Category=Material)
545
547 UPROPERTY(EditAnywhere, Category = Material)
548 uint8 bIsThinSurface : 1;
549
551 UPROPERTY(EditAnywhere, Category = Material, AdvancedDisplay, meta = (DisplayName = "Dithered LOD Transition"))
553
555 UPROPERTY(EditAnywhere, Category=Material, AdvancedDisplay)
556 uint8 DitherOpacityMask : 1;
557
559 UPROPERTY(EditAnywhere, Category=Material, AdvancedDisplay)
560 uint8 bAllowNegativeEmissiveColor : 1;
561
565 UPROPERTY(EditAnywhere, Category=Material, meta=(DisplayName = "Has Pixel Animation"), AdvancedDisplay)
566 uint8 bHasPixelAnimation : 1;
567
569 UPROPERTY(EditAnywhere, Category=Nanite, meta = (Keywords = "Displacement"))
570 uint8 bEnableTessellation : 1;
571
573 UPROPERTY(EditAnywhere, Category=Nanite, meta=(EditCondition="bEnableTessellation", InlineEditConditionToggle))
574 uint8 bEnableDisplacementFade : 1;
575
580 UPROPERTY(EditAnywhere, AdvancedDisplay, Category=Translucency)
582
584 UPROPERTY(EditAnywhere, AssetRegistrySearchable, Category=Translucency, meta=(DisplayName = "Lighting Mode"))
585 TEnumAsByte<ETranslucencyLightingMode> TranslucencyLightingMode;
586
588 UPROPERTY(EditAnywhere, Category = Translucency, meta = (DisplayName = "Mobile Separate Translucency"), AdvancedDisplay)
589 uint8 bEnableMobileSeparateTranslucency : 1;
590
592 UPROPERTY(EditAnywhere, Category = Material, AdvancedDisplay, meta = (ClampMin = 0))
593 int32 NumCustomizedUVs;
594
599 UPROPERTY(EditAnywhere, Category=Translucency, meta=(DisplayName = "Directional Lighting Intensity"))
600 float TranslucencyDirectionalLightingIntensity;
601
603 UPROPERTY(EditAnywhere, Category=TranslucencySelfShadowing, meta=(DisplayName = "Shadow Density Scale"))
604 float TranslucentShadowDensityScale;
605
610 UPROPERTY(EditAnywhere, Category=TranslucencySelfShadowing, meta=(DisplayName = "Self Shadow Density Scale"))
611 float TranslucentSelfShadowDensityScale;
612
614 UPROPERTY(EditAnywhere, Category=TranslucencySelfShadowing, meta=(DisplayName = "Second Density Scale"))
615 float TranslucentSelfShadowSecondDensityScale;
616
618 UPROPERTY(EditAnywhere, Category=TranslucencySelfShadowing, meta=(DisplayName = "Second Opacity"))
619 float TranslucentSelfShadowSecondOpacity;
620
626 UPROPERTY(EditAnywhere, Category=TranslucencySelfShadowing, meta=(DisplayName = "Backscattering Exponent"))
627 float TranslucentBackscatteringExponent;
628
633 UPROPERTY(EditAnywhere, Category=TranslucencySelfShadowing, meta=(DisplayName = "Multiple Scattering Extinction"))
634 FLinearColor TranslucentMultipleScatteringExtinction;
635
637 UPROPERTY(EditAnywhere, Category=TranslucencySelfShadowing, meta=(DisplayName = "Start Offset"))
638 float TranslucentShadowStartOffset;
639
641 UPROPERTY(EditAnywhere, Category=Translucency, AdvancedDisplay)
642 uint8 bDisableDepthTest : 1;
643
645 UPROPERTY(EditAnywhere, Category = Translucency, AdvancedDisplay)
646 uint8 bWriteOnlyAlpha : 1;
647
649 UPROPERTY(EditAnywhere, Category=Material, AdvancedDisplay)
650 uint8 bGenerateSphericalParticleNormals : 1;
651
656 UPROPERTY(EditAnywhere, Category=Material, AdvancedDisplay)
657 uint8 bTangentSpaceNormal : 1;
658
662 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category=Material, meta=(DisplayName = "Emissive (Dynamic Area Light)"), AdvancedDisplay)
663 uint8 bUseEmissiveForDynamicAreaLighting : 1;
664
672 uint8 bUsedAsSpecialEngineMaterial : 1;
673
677 UPROPERTY(EditAnywhere, BlueprintReadOnly, meta = (DisplayName = "Roughness Tracking"), Category = Substrate)
678 uint8 bSubstrateRoughnessTracking : 1;
679
684 UPROPERTY(EditAnywhere, BlueprintReadOnly, Category=Usage)
685 uint8 bUsedWithSkeletalMesh : 1;
686
691 UPROPERTY(EditAnywhere, BlueprintReadOnly, Category=Usage)
692 uint8 bUsedWithEditorCompositing : 1;
693
698 UPROPERTY(EditAnywhere, BlueprintReadOnly, Category=Usage)
699 uint8 bUsedWithParticleSprites : 1;
700
705 UPROPERTY(EditAnywhere, BlueprintReadOnly, Category=Usage)
706 uint8 bUsedWithBeamTrails : 1;
707
712 UPROPERTY(EditAnywhere, BlueprintReadOnly, Category=Usage)
713 uint8 bUsedWithMeshParticles : 1;
714
715
720 UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = Usage)
721 uint8 bUsedWithNiagaraSprites : 1;
722
723 UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = Usage)
724 uint8 bUsedWithNiagaraRibbons : 1;
725
726 UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = Usage)
727 uint8 bUsedWithNiagaraMeshParticles : 1;
728
729 UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = Usage)
730 uint8 bUsedWithGeometryCache : 1;
731
736 UPROPERTY(EditAnywhere, BlueprintReadOnly, Category=Usage)
737 uint8 bUsedWithStaticLighting : 1;
738
743 UPROPERTY(EditAnywhere, BlueprintReadOnly, Category=Usage)
744 uint8 bUsedWithMorphTargets : 1;
745
750 UPROPERTY(EditAnywhere, BlueprintReadOnly, Category=Usage)
751 uint8 bUsedWithSplineMeshes : 1;
752
757 UPROPERTY(EditAnywhere, BlueprintReadOnly, Category=Usage)
758 uint8 bUsedWithInstancedStaticMeshes : 1;
759
764 UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = Usage)
765 uint8 bUsedWithGeometryCollections : 1;
766
771 UPROPERTY()
772 uint8 bUsesDistortion : 1;
773
777 UPROPERTY()
778 uint8 bRootNodeOverridesDefaultDistortion_DEPRECATED : 1;
779
784 UPROPERTY(EditAnywhere, BlueprintReadOnly, Category=Usage)
785 uint8 bUsedWithClothing : 1;
786
791 UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = Usage)
792 uint32 bUsedWithWater : 1;
793
798 UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = Usage)
799 uint32 bUsedWithHairStrands : 1;
800
805 UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = Usage)
806 uint32 bUsedWithLidarPointCloud : 1;
807
812 UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = Usage)
813 uint32 bUsedWithVirtualHeightfieldMesh : 1;
814
819 UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = Usage)
820 uint32 bUsedWithNanite : 1;
821
826 UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = Usage)
827 uint8 bUsedWithVoxels : 1;
828
833 UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = Usage)
834 uint32 bUsedWithVolumetricCloud : 1;
835
840 UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = Usage)
841 uint32 bUsedWithHeterogeneousVolumes : 1;
842
847 UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = Usage, AdvancedDisplay)
848 uint32 bUsedWithStaticMesh : 1;
849
854 UPROPERTY()
855 uint8 bUsedWithUI_DEPRECATED : 1;
856
863 UPROPERTY(EditAnywhere, Category = LightFunctionMaterial, meta = (DisplayName = "Compatible With Light Function Atlas"))
864 uint8 bForceCompatibleWithLightFunctionAtlas : 1;
865
870 UPROPERTY(EditAnywhere, BlueprintReadOnly, Category=Usage, AdvancedDisplay)
871 uint8 bAutomaticallySetUsageInEditor : 1;
872
873 /* Forces the material to be completely rough. Saves a number of instructions and one sampler. */
874 UPROPERTY(EditAnywhere, BlueprintReadOnly, Category=Material, AdvancedDisplay)
875 uint8 bFullyRough : 1;
876
883 UPROPERTY()
884 uint8 bUseFullPrecision_DEPRECATED : 1;
885
892 UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = Mobile)
894
895 /* Use lightmap directionality and per pixel normals. If disabled, lighting from lightmaps will be flat but cheaper. */
896 UPROPERTY(EditAnywhere, BlueprintReadOnly, Category=Mobile)
897 uint8 bUseLightmapDirectionality : 1;
898
899 /* Use alpha to coverage for masked material on mobile, make sure MSAA is enabled as well. */
900 UPROPERTY(EditAnywhere, BlueprintReadOnly, Category=Mobile, AdvancedDisplay, meta = (EditCondition = "BlendMode != EBlendMode::BLEND_Opaque"))
901 uint8 bUseAlphaToCoverage : 1;
902
903 /* Forward (including mobile) renderer: use preintegrated GF lut for simple IBL, but will use one more sampler. */
904 UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = ForwardShading, meta = (DisplayName = "PreintegratedGF For Simple IBL"))
905 uint32 bForwardRenderUsePreintegratedGFForSimpleIBL : 1;
906
907 /*
908 * Forward renderer: enables multiple parallax-corrected reflection captures that blend together.
909 */
910 UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = ForwardShading, meta = (DisplayName = "High Quality Reflections"))
911 uint8 bUseHQForwardReflections : 1;
912
913 /*
914 * Enables blending of sky light cubemap textures. When disabled, the secondary cubemap is only visible when the blend factor is 1.
915 */
916 UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = ForwardShading, meta = (DisplayName = "Blend Sky Light Cubemaps"))
917 uint8 bForwardBlendsSkyLightCubemaps : 1;
918
919 /* Enables planar reflection when using the forward renderer or mobile. Enabling this setting reduces the number of samplers available to the material as one more sampler will be used for the planar reflection. */
920 UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = ForwardShading, meta = (DisplayName = "Planar Reflections"))
921 uint8 bUsePlanarForwardReflections : 1;
922
923 /* Reduce roughness based on screen space normal changes. */
924 UPROPERTY(EditAnywhere, BlueprintReadOnly, Category=Material, AdvancedDisplay)
925 uint8 bNormalCurvatureToRoughness : 1;
926
928 UPROPERTY(EditAnywhere, Category = Translucency, AdvancedDisplay, meta = (DisplayName = "Allow Custom Depth Writes"))
929 uint8 AllowTranslucentCustomDepthWrites : 1;
930
932 UPROPERTY(EditAnywhere, Category = Translucency, AdvancedDisplay, meta = (DisplayName = "Allow Front Layer Translucency"))
933 uint8 bAllowFrontLayerTranslucency : 1;
934
936 UPROPERTY(EditAnywhere, BlueprintReadOnly, Category=Material, AdvancedDisplay)
937 uint8 bCompatibleWithLumenCardSharing : 1;
938
940 UPROPERTY(EditAnywhere, Category=Material, AdvancedDisplay)
942
944 UPROPERTY(EditAnywhere, Category = Translucency, AdvancedDisplay, meta = (DisplayName = "Allow Local Light Shadow"))
945 uint8 bAllowTranslucentLocalLightShadow : 1;
946
948 UPROPERTY(EditAnywhere, Category = Translucency, AdvancedDisplay, meta = (DisplayName = "Local Light Shadow Quality", UIMin = "0", UIMax = "1", ClampMin = "0", ClampMax = "1", SliderExponent = 1.0))
949 float TranslucentLocalLightShadowQuality = 0;
950
952 UPROPERTY(EditAnywhere, Category = Translucency, AdvancedDisplay, meta = (DisplayName = "Directional Light Shadow Quality", UIMin = "0", UIMax = "1", ClampMin = "0", ClampMax = "1", SliderExponent = 1.0))
953 float TranslucentDirectionalLightShadowQuality = 0;
954
960 UPROPERTY(EditAnywhere, Category = Material, AdvancedDisplay)
962
964 UPROPERTY(EditAnywhere, Category = Material, AdvancedDisplay)
965 uint8 bAllowVariableRateShading : 1;
966
967#if WITH_EDITORONLY_DATA
968 UPROPERTY()
970
971 UPROPERTY()
973
974 UPROPERTY()
976
977 UPROPERTY()
979#endif // WITH_EDITORONLY_DATA
980
982 UPROPERTY()
983 uint8 bCanMaskedBeAssumedOpaque : 1;
984
986 UPROPERTY()
987 uint8 bIsMasked_DEPRECATED : 1;
988
991 uint8 bIsPreviewMaterial : 1;
992
995 uint8 bIsFunctionPreviewMaterial : 1;
996
998 UPROPERTY(EditAnywhere, Category=Material)
999 uint8 bUseMaterialAttributes : 1;
1000
1001 UE_DEPRECATED(5.8, "Experimental bEnableExecWire is no longer supported.")
1002 UPROPERTY(EditAnywhere, Category = Material)
1003 uint8 bEnableExecWire : 1;
1004
1005 UPROPERTY(EditAnywhere, Category = Material)
1006 uint8 bEnableNewHLSLGenerator : 1;
1007
1009 UPROPERTY(EditAnywhere, Category = Material)
1010 uint8 bCastRayTracedShadows : 1;
1011
1013 UPROPERTY(EditAnywhere, Category=Translucency, meta=(DisplayName = "Apply Fogging"))
1014 uint8 bUseTranslucencyVertexFog : 1;
1015
1017 UPROPERTY(EditAnywhere, Category=Translucency, meta=(DisplayName = "Apply Cloud Fogging"))
1018 uint8 bApplyCloudFogging : 1;
1019
1021 UPROPERTY(EditAnywhere, Category=Material, AdvancedDisplay)
1022 uint8 bIsSky : 1;
1023
1025 UPROPERTY(EditAnywhere, Category=Translucency)
1026 uint8 bComputeFogPerPixel : 1;
1027
1029 UPROPERTY(EditAnywhere, Category = Translucency, meta = (DisplayName = "Output Depth and Velocity"))
1030 uint8 bOutputTranslucentVelocity : 1;
1031
1036 UPROPERTY(EditAnywhere, Category = Translucency, meta = (DisplayName = "Velocity From Depth Only", editcondition = "bOutputTranslucentVelocity"))
1037 uint8 bIsTranslucencyVelocityFromDepth : 1;
1038
1041 uint8 bAllowDevelopmentShaderCompile : 1;
1042
1045 uint8 bIsMaterialEditorStatsMaterial : 1;
1046
1053 UPROPERTY(EditAnywhere, Category = VirtualTexture)
1054 uint8 bRelaxRuntimeVirtualTextureRestrictions : 1;
1055 uint8 bRelaxRuntimeVirtualTextureRestrictionsForOldContent : 1;
1056
1058 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category=PostProcessMaterial, meta=(DisplayName = "Blendable Location"))
1060
1062 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = PostProcessMaterial, meta = (DisplayName = "Output Alpha"))
1063 uint8 BlendableOutputAlpha : 1;
1064
1066 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = PostProcessMaterial, meta = (DisplayName = "User Scene Texture"))
1067 FName UserSceneTexture;
1068
1070 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = PostProcessMaterial, meta = (DisplayName = "User Texture Divisor"))
1071 FIntPoint UserTextureDivisor = FIntPoint(0, 0);
1072
1074 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = PostProcessMaterial, meta = (DisplayName = "Resolution Relative To Input"))
1075 FName ResolutionRelativeToInput;
1076
1083 UPROPERTY(EditAnywhere, Category = PostProcessMaterial)
1084 uint8 bDisablePreExposureScale : 1;
1085
1092 UPROPERTY(EditAnywhere, Category = PostProcessMaterial)
1093 uint8 bUsedWithNeuralNetworks : 1;
1094
1099 UPROPERTY(EditAnywhere, Category = PostProcessMaterial, AdvancedDisplay)
1100 uint8 bEnableStencilTest : 1;
1101
1102 UPROPERTY(EditAnywhere, Category = PostProcessMaterial, AdvancedDisplay, meta = (EditCondition = "bEnableStencilTest"))
1104
1105 UPROPERTY(EditAnywhere, Category = PostProcessMaterial, AdvancedDisplay, meta = (EditCondition = "bEnableStencilTest"))
1106 uint8 StencilRefValue = 0;
1107
1111 UPROPERTY(EditAnywhere, Category = PostProcessMaterial, AdvancedDisplay, meta = (EditCondition = "false"))
1112 int8 NeuralProfileId = INDEX_NONE;
1113
1114 UPROPERTY()
1115 TEnumAsByte<ERefractionMode> RefractionMode_DEPRECATED;
1116
1118 UPROPERTY(EditAnywhere, Category=Refraction)
1119 TEnumAsByte<ERefractionMode> RefractionMethod;
1120
1122 UPROPERTY(EditAnywhere, Category=Refraction)
1123 TEnumAsByte<ERefractionCoverageMode> RefractionCoverageMode;
1124
1126 UPROPERTY(EditAnywhere, Category=PixelDepthOffset)
1127 TEnumAsByte<EPixelDepthOffsetMode> PixelDepthOffsetMode;
1128
1130 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = PostProcessMaterial, meta = (DisplayName = "Blendable Priority"))
1131 int32 BlendablePriority;
1132
1134 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = PostProcessMaterial, meta = (DisplayName = "Is Blendable"))
1135 uint8 bIsBlendable : 1;
1136
1138 UPROPERTY(EditAnywhere, Category = Material, AdvancedDisplay)
1139 uint16 PreshaderGap;
1140
1143 uint32 UsageFlagWarnings;
1144
1145 mutable std::atomic<uint32> UsageFlagCacheMiss{0u};
1146
1148 UPROPERTY(EditAnywhere, Category=Refraction)
1149 float RefractionDepthBias;
1150
1156 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = WorldPositionOffset, meta = (ClampMin = 0.0f))
1157 float MaxWorldPositionOffsetDisplacement;
1158
1163 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = WorldPositionOffset)
1164 bool bAlwaysEvaluateWorldPositionOffset;
1165
1167 FSubstrateCompilationConfig SubstrateCompilationConfig;
1168
1175 UPROPERTY()
1176 FGuid StateId;
1177
1181 class FDefaultMaterialInstance* DefaultMaterialInstance;
1182
1183#if WITH_EDITORONLY_DATA
1186
1189#endif //WITH_EDITORONLY_DATA
1190
1191private:
1193 TArray<FMaterialResource> LoadedMaterialResources;
1194
1201 TArray<FMaterialResource*> MaterialResources;
1202#if WITH_EDITOR
1205#endif
1207 FThreadSafeBool ReleasedByRT;
1208
1210 mutable bool bCachingUniformExpressions = false;
1211
1212#if WITH_EDITORONLY_DATA
1213 UPROPERTY()
1215#endif
1216
1217#if WITH_EDITORONLY_DATA
1218 UPROPERTY()
1220
1221#endif // WITH_EDITORONLY_DATA
1222public:
1223
1226
1227 //~ Begin UMaterialInterface Interface.
1228 ENGINE_API virtual UMaterial* GetMaterial() override;
1229 ENGINE_API virtual const UMaterial* GetMaterial() const override;
1230 ENGINE_API virtual const UMaterial* GetMaterial_Concurrent(TMicRecursionGuard RecursionGuard = TMicRecursionGuard()) const override;
1231 ENGINE_API virtual void GetMaterialInheritanceChain(FMaterialInheritanceChain& OutChain) const override;
1233
1234 ENGINE_API virtual bool GetRefractionSettings(float& OutBiasValue) const override;
1235 ENGINE_API virtual EBlendableLocation GetBlendableLocation(const UMaterial* Base) const override;
1236 ENGINE_API virtual int32 GetBlendablePriority(const UMaterial* Base) const override;
1237 ENGINE_API virtual void GetDependencies(TSet<UMaterialInterface*>& Dependencies) override;
1238 ENGINE_API virtual FMaterialRenderProxy* GetRenderProxy() const override;
1239 ENGINE_API virtual UPhysicalMaterial* GetPhysicalMaterial() const override;
1240 ENGINE_API virtual UPhysicalMaterialMask* GetPhysicalMaterialMask() const override;
1241 ENGINE_API virtual UPhysicalMaterial* GetPhysicalMaterialFromMap(int32 Index) const override;
1242 ENGINE_API virtual UMaterialInterface* GetNaniteOverride(TMicRecursionGuard RecursionGuard = TMicRecursionGuard()) const override;
1244 ENGINE_API virtual void GetUsedTexturesAndIndices(TArray<UTexture*>& OutTextures, TArray< TArray<int32> >& OutIndices, EMaterialQualityLevel::Type QualityLevel, EShaderPlatform InShaderPlatform) const override;
1245 ENGINE_API virtual void OverrideTexture(const UTexture* InTextureToOverride, UTexture* OverrideTexture, ERHIFeatureLevel::Type InFeatureLevel) override;
1246 ENGINE_API virtual void SetNumericParameterDefault(EMaterialParameterType Type, const FHashedMaterialParameterInfo& ParameterInfo, const UE::Shader::FValue& Value, EShaderPlatform InShaderPlatform) override;
1247 ENGINE_API virtual void ClearNumericParameterDefault(EMaterialParameterType Type, const FHashedMaterialParameterInfo& ParameterInfo, EShaderPlatform InShaderPlatform) override;
1248 ENGINE_API virtual bool CheckMaterialUsage(const EMaterialUsage Usage) override;
1249 ENGINE_API virtual bool CheckMaterialUsage_Concurrent(const EMaterialUsage Usage) const override;
1250 ENGINE_API virtual FMaterialResource* AllocateResource();
1252 ENGINE_API virtual const FMaterialResource* GetMaterialResource(EShaderPlatform InShaderPlatform, EMaterialQualityLevel::Type QualityLevel = EMaterialQualityLevel::Num) const override;
1253 ENGINE_API virtual bool GetMaterialLayers(FMaterialLayersFunctions& OutLayers, TMicRecursionGuard RecursionGuard = TMicRecursionGuard()) const override;
1254 ENGINE_API virtual bool UpdateLightmassTextureTracking() override;
1255#if WITH_EDITOR
1256 ENGINE_API virtual bool GetGroupSortPriority(const FString& InGroupName, int32& OutSortPriority) const override;
1260#endif
1261 ENGINE_API virtual void RecacheUniformExpressions(bool bRecreateUniformBuffer) const override;
1262
1263 ENGINE_API virtual float GetOpacityMaskClipValue() const override;
1264 ENGINE_API virtual bool GetCastDynamicShadowAsMasked() const override;
1265 ENGINE_API virtual EBlendMode GetBlendMode() const override;
1266 ENGINE_API virtual FMaterialShadingModelField GetShadingModels() const override;
1267 ENGINE_API virtual bool IsShadingModelFromMaterialExpression() const override;
1268 ENGINE_API virtual bool IsTwoSided() const override;
1269 ENGINE_API virtual bool IsThinSurface() const override;
1270 ENGINE_API virtual bool IsDitheredLODTransition() const override;
1271 ENGINE_API virtual bool IsTranslucencyWritingCustomDepth() const override;
1272 ENGINE_API virtual bool IsTranslucencyWritingVelocity() const override;
1273 ENGINE_API virtual bool IsTranslucencyVelocityFromDepth() const override;
1274 ENGINE_API virtual bool IsTranslucencyWritingFrontLayerTransparency() const override;
1275 ENGINE_API virtual bool IsMasked() const override;
1276 ENGINE_API virtual bool IsDeferredDecal() const override;
1277 ENGINE_API virtual bool IsUIMaterial() const;
1278 ENGINE_API virtual bool IsPostProcessMaterial() const;
1279 ENGINE_API bool IsPostProcessMaterialOutputingAlpha() const;
1280 ENGINE_API virtual USubsurfaceProfile* GetSubsurfaceProfile_Internal() const override;
1281 ENGINE_API virtual USubsurfaceProfile* GetSubsurfaceProfileRoot_Internal() const override;
1282 ENGINE_API virtual uint32 NumSubsurfaceProfileRoot_Internal() const override;
1283 ENGINE_API virtual USubsurfaceProfile* GetSubsurfaceProfileRoot_Internal(uint32 Index) const override;
1284 ENGINE_API virtual USubsurfaceProfile* GetSubsurfaceProfileOverride_Internal() const override;
1285 ENGINE_API virtual uint32 NumSpecularProfile_Internal() const override;
1286 ENGINE_API virtual USpecularProfile* GetSpecularProfile_Internal(uint32 Index) const override;
1287 ENGINE_API virtual UNeuralProfile* GetNeuralProfile_Internal() const override;
1288 ENGINE_API virtual bool CastsRayTracedShadows() const override;
1289 ENGINE_API virtual bool IsTessellationEnabled() const override;
1290 ENGINE_API virtual FDisplacementScaling GetDisplacementScaling() const override;
1291 ENGINE_API virtual bool IsDisplacementFadeEnabled() const override;
1292 ENGINE_API virtual FDisplacementFadeRange GetDisplacementFadeRange() const override;
1293 ENGINE_API virtual float GetMaxWorldPositionOffsetDisplacement() const override;
1294 ENGINE_API virtual bool ShouldAlwaysEvaluateWorldPositionOffset() const override;
1295 ENGINE_API virtual bool HasPixelAnimation() const override;
1296 ENGINE_API virtual bool HasVertexInterpolator() const override;
1297 ENGINE_API virtual bool HasCustomizedUVs() const override;
1298 ENGINE_API virtual bool WritesToRuntimeVirtualTexture() const override;
1299 ENGINE_API virtual bool HasMeshPaintTexture() const override;
1300 ENGINE_API virtual bool HasCustomPrimitiveData() const override;
1301 ENGINE_API virtual bool HasSubstrateRoughnessTracking() const override;
1302 ENGINE_API virtual bool IsCompatibleWithLumenCardSharing() const override;
1303
1304 ENGINE_API bool IsMobileSeparateTranslucencyEnabled() const;
1305
1307
1308 ENGINE_API void SetShadingModel(EMaterialShadingModel NewModel);
1309
1311 ENGINE_API virtual bool IsPropertyActive(EMaterialProperty InProperty) const override;
1312
1313#if WITH_EDITORONLY_DATA
1316#endif
1317
1318#if WITH_EDITOR
1326#endif
1327
1329 ENGINE_API bool IsPropertyActiveInDerived(EMaterialProperty InProperty, const UMaterialInterface* DerivedMaterial) const;
1330
1331#if WITH_EDITOR
1333 ENGINE_API virtual int32 CompilePropertyEx( class FMaterialCompiler* Compiler, const FGuid& AttributeID ) override;
1334 ENGINE_API virtual bool ShouldForcePlanePreview() override;
1336#endif // WITH_EDITOR
1337 //~ End UMaterialInterface Interface.
1338
1339 //~ Begin UObject Interface
1340 ENGINE_API virtual void PreSave(FObjectPreSaveContext ObjectSaveContext) override;
1341#if WITH_EDITOR
1342 ENGINE_API virtual void OnCookEvent(UE::Cook::ECookEvent CookEvent, UE::Cook::FCookEventContext& CookContext) override;
1343#endif
1344 ENGINE_API virtual void PostInitProperties() override;
1345 ENGINE_API virtual void Serialize(FArchive& Ar) override;
1346 ENGINE_API virtual void PostDuplicate(bool bDuplicateForPIE) override;
1347 ENGINE_API virtual void PostLoad() override;
1348#if WITH_EDITORONLY_DATA
1350#endif
1351#if WITH_EDITOR
1352 ENGINE_API virtual void BeginCacheForCookedPlatformData( const ITargetPlatform *TargetPlatform ) override;
1353 ENGINE_API virtual bool IsCachedCookedPlatformDataLoaded( const ITargetPlatform* TargetPlatform ) override;
1354 ENGINE_API virtual void ClearCachedCookedPlatformData( const ITargetPlatform *TargetPlatform ) override;
1355 ENGINE_API virtual void ClearAllCachedCookedPlatformData() override;
1356#endif
1357#if WITH_EDITOR
1359 ENGINE_API virtual void PostEditChangeProperty(FPropertyChangedEvent& PropertyChangedEvent) override;
1360 ENGINE_API virtual bool CanEditChange(const FProperty* InProperty) const override;
1361 ENGINE_API virtual bool Modify(bool bAlwaysMarkDirty = true) override;
1362#endif // WITH_EDITOR
1363 ENGINE_API virtual void BeginDestroy() override;
1364 ENGINE_API virtual bool IsReadyForFinishDestroy() override;
1365 ENGINE_API virtual void FinishDestroy() override;
1366 ENGINE_API virtual void GetResourceSizeEx(FResourceSizeEx& CumulativeResourceSize) override;
1367 ENGINE_API static void AddReferencedObjects(UObject* InThis, FReferenceCollector& Collector);
1368 ENGINE_API virtual bool CanBeClusterRoot() const override;
1369 ENGINE_API virtual void GetAssetRegistryTags(FAssetRegistryTagsContext Context) const override;
1370 //~ End UObject Interface
1371
1373 {
1374 Default,
1375 DoesNotInvalidate
1376 };
1377
1379
1380#if WITH_EDITOR
1383#endif // WITH_EDITOR
1384
1388 ENGINE_API static UMaterial* GetDefaultMaterial(EMaterialDomain Domain);
1389
1393 ENGINE_API bool IsDefaultMaterial() const;
1394
1400 ENGINE_API void ReleaseResources();
1401
1403 ENGINE_API bool IsUsageFlagDirty(EMaterialUsage Usage);
1404
1405 UE_DEPRECATED(5.7, "Please use IsCompilingOrHadCompileError with EShaderPlatform argument and not ERHIFeatureLevel::Type")
1406 ENGINE_API bool IsCompilingOrHadCompileError(ERHIFeatureLevel::Type InFeatureLevel);
1407
1409 ENGINE_API bool IsCompilingOrHadCompileError(EShaderPlatform InShaderPlatform);
1410
1411#if WITH_EDITORONLY_DATA
1413#endif // WITH_EDITORONLY_DATA
1414
1415#if WITH_EDITOR
1420
1421 ENGINE_API bool SetParameterValueEditorOnly(const FName& ParameterName, const FMaterialParameterMetadata& Meta);
1423 ENGINE_API bool SetScalarParameterValueEditorOnly(FName ParameterName, float InValue);
1429 ENGINE_API bool SetStaticComponentMaskParameterValueEditorOnly(FName ParameterName, bool R, bool G, bool B, bool A, FGuid OutExpressionGuid);
1431#endif // WITH_EDITOR
1432
1434 void StartCacheUniformExpressions() const;
1435 void FinishCacheUniformExpressions() const;
1436
1437#if !(UE_BUILD_SHIPPING || UE_BUILD_TEST)
1442 ENGINE_API virtual void LogMaterialsAndTextures(FOutputDevice& Ar, int32 Indent) const override;
1443#endif
1444
1452 ENGINE_API virtual void GetLightingGuidChain(bool bIncludeTextures, TArray<FGuid>& OutGuids) const override;
1453
1454#if WITH_EDITOR
1462 ENGINE_API virtual uint32 ComputeAllStateCRC() const override;
1463#endif // WITH_EDITOR
1464
1470
1471private:
1472
1473 void SetInitialValues();
1474
1476 void MarkUsageFlagDirty(EMaterialUsage Usage, bool CurrentValue, bool NewValue);
1477
1479 void SetUsageByFlag(const EMaterialUsage Usage, const bool NewValue);
1480
1482 void PropagateDataToMaterialProxy();
1483
1484#if WITH_EDITOR
1489
1495#endif
1496
1497public:
1498
1499#if WITH_EDITOR
1501#endif
1502
1504 FString GetUsageName(const EMaterialUsage Usage) const;
1505
1507 ENGINE_API bool GetUsageByFlag(const EMaterialUsage Usage) const;
1508
1509
1517 ENGINE_API bool SetMaterialUsage(bool &bNeedsRecompile, const EMaterialUsage Usage, UMaterialInterface* MaterialInstance = nullptr);
1518
1525 ENGINE_API bool NeedsSetMaterialUsage_Concurrent(bool &bOutHasUsage, const EMaterialUsage Usage) const;
1526
1527 ENGINE_API virtual void CacheShaders(EMaterialShaderPrecompileMode CompileMode) override;
1528#if WITH_EDITOR
1530#endif
1531 ENGINE_API virtual bool IsComplete() const override;
1532
1533#if WITH_EDITOR
1534 ENGINE_API virtual bool IsCompiling() const override;
1535#endif
1536
1537#if WITH_EDITORONLY_DATA
1538 ENGINE_API virtual bool IterateDependentFunctions(TFunctionRef<bool(UMaterialFunctionInterface*)> Predicate) const override;
1540#endif // WITH_EDITORONLY_DATA
1541
1544
1545#if WITH_EDITORONLY_DATA
1549 template<typename ExpressionType>
1551 {
1552 if (InGUID.IsValid())
1553 {
1555 }
1556 return nullptr;
1557 }
1558
1559 /* Get all expressions of the requested type */
1560 template<typename ExpressionType>
1562 {
1564 {
1566 if (ExpressionPtr)
1567 {
1569 }
1570 }
1571 }
1572
1574
1575 struct FLayersInterfaces
1576 {
1579 };
1581
1583 template<typename ExpressionType>
1585 {
1587 {
1589 if (ExpressionOfType)
1590 {
1592 }
1593
1595 {
1596 MaterialFunction->GetAllExpressionsOfType<ExpressionType>(OutExpressions);
1597 }
1599 {
1600 for (UMaterialFunctionInterface* Layer : LayersInterfaces->Layers)
1601 {
1602 if (Layer)
1603 {
1604 Layer->GetAllExpressionsOfType<ExpressionType>(OutExpressions);
1605 }
1606 }
1607
1609 {
1610 if (Blend)
1611 {
1612 Blend->GetAllExpressionsOfType<ExpressionType>(OutExpressions);
1613 }
1614 }
1615 }
1616 }
1617 }
1618
1620 template<typename ExpressionType>
1622 {
1624 {
1626 if (ExpressionOfType)
1627 {
1628 return true;
1629 }
1630
1632 {
1633 if (MaterialFunction->HasAnyExpressionsOfType<ExpressionType>())
1634 {
1635 return true;
1636 }
1637 }
1639 {
1640 for (auto* Layer : LayersInterfaces->Layers)
1641 {
1642 if (Layer && Layer->HasAnyExpressionsOfType<ExpressionType>())
1643 {
1644 return true;
1645 }
1646 }
1647
1648 for (auto* Blend : LayersInterfaces->Blends)
1649 {
1650 if (Blend && Blend->HasAnyExpressionsOfType<ExpressionType>())
1651 {
1652 return true;
1653 }
1654 }
1655 }
1656 }
1657
1658 return false;
1659 }
1660
1662#endif // WITH_EDITORONLY_DATA
1663
1664#if WITH_EDITOR
1666#endif
1667
1669 ENGINE_API bool AttemptInsertNewGroupName(const FString& InNewName);
1670
1671private:
1677 ENGINE_API virtual void ReleaseResourcesAndMutateDDCKey(const FGuid& TransformationId = FGuid());
1678
1686
1687#if WITH_EDITOR
1696 const ITargetPlatform* TargetPlatform = nullptr, bool bBlocking = false);
1697#endif
1698
1699 void GetNewResources(EShaderPlatform ShaderPlatform, TArray<FMaterialResource*>& NewResourcesToCache);
1700
1702 void CacheShadersForResources(EShaderPlatform ShaderPlatform, const TArray<FMaterialResource*>& ResourcesToCache, EMaterialShaderPrecompileMode PrecompileMode = EMaterialShaderPrecompileMode::Default, const ITargetPlatform* TargetPlatform = nullptr);
1703
1704#if WITH_EDITOR
1705
1708
1715#endif // WITH_EDITOR
1716
1717public:
1718#if WITH_EDITOR
1720
1721 /* Recompute the ddc cache key and reload the material in case the key is not the same.
1722 * It will also make sure lightmass texture reference are up to date
1723 */
1725#endif
1726
1731
1732#if WITH_EDITOR
1736 EShaderPlatform ShaderPlatform,
1737 class ITargetPlatform* TargetPlatform,
1739
1741
1747
1753
1760
1767 ENGINE_API virtual void PropagateExpressionParameterChanges(const FName& ParameterName, const FMaterialParameterMetadata& Meta);
1768
1774
1778 ENGINE_API virtual void BuildEditorParameterList();
1779
1785
1791
1799
1802
1810
1817
1824#endif // WITH_EDITOR
1825
1826 /* Helper functions for text output of properties. */
1827 static const TCHAR* GetMaterialShadingModelString(EMaterialShadingModel InMaterialShadingModel);
1828 static EMaterialShadingModel GetMaterialShadingModelFromString(const TCHAR* InMaterialShadingModelStr);
1830 static EBlendMode GetBlendModeFromString(const TCHAR* InBlendModeStr);
1831
1832#if WITH_EDITOR
1842
1844#endif
1845
1846#if WITH_EDITORONLY_DATA
1847 /* Returns any UMaterialExpressionFunctionOutput expressions */
1849 /* Returns any UMaterialExpressionCustomOutput expressions */
1852#endif // WITH_EDITORONLY_DATA
1853
1854#if WITH_EDITOR
1870
1871
1888
1889#endif // WITH_EDITOR
1890
1891protected:
1892
1893#if WITH_EDITOR
1916 const bool bInRecurseIntoMaterialFunctions = false);
1917
1927#endif
1928
1929public:
1930 ENGINE_API virtual void DumpDebugInfo(FOutputDevice& OutputDevice) const override;
1931 void SaveShaderStableKeys(const class ITargetPlatform* TP);
1932 ENGINE_API virtual void SaveShaderStableKeysInner(const class ITargetPlatform* TP, const struct FStableShaderKeyAndValue& SaveKeyVal) override;
1933
1934#if WITH_EDITOR
1936
1938#endif // WITH_EDITOR
1939
1940 ENGINE_API bool IsPropertyConnected(EMaterialProperty Property) const;
1941 ENGINE_API bool HasBaseColorConnected() const;
1942 ENGINE_API bool HasRoughnessConnected() const;
1943 ENGINE_API bool HasAmbientOcclusionConnected() const;
1944 ENGINE_API bool HasNormalConnected() const;
1945 ENGINE_API bool HasSpecularConnected() const;
1946 ENGINE_API bool HasMetallicConnected() const;
1947 ENGINE_API bool HasEmissiveColorConnected() const;
1948 ENGINE_API bool HasAnisotropyConnected() const;
1949 ENGINE_API bool HasSurfaceThicknessConnected() const;
1950 ENGINE_API bool HasSubstrateFrontMaterialConnected() const;
1951 ENGINE_API bool HasVertexPositionOffsetConnected() const;
1952 ENGINE_API bool HasDisplacementConnected() const;
1953 ENGINE_API bool HasPixelDepthOffsetConnected() const;
1954
1955 // Return true if the property is supported
1956 ENGINE_API bool IsPropertySupported(EMaterialProperty InProperty) const;
1957
1959 ENGINE_API static bool IsPropertyRelevantForMobile(EMaterialProperty InProperty);
1960
1961#if WITH_EDITOR
1963
1966#endif // WITH_EDITOR
1967
1968 // For all materials, UMaterial::CacheResourceShadersForRendering
1969 ENGINE_API static void AllMaterialsCacheResourceShadersForRendering(bool bUpdateProgressDialog = false, bool bCacheAllRemainingShaders = true);
1970
1971#if WITH_EDITORONLY_DATA
1981
1988
1992 bool HasFlippedCoordinates();
1993
1996
1997#endif //WITH_EDITORONLY_DATA
2002 ENGINE_API TArrayView<const TObjectPtr<UPhysicalMaterial>> GetRenderTracePhysicalMaterialOutputs() const;
2003
2007 ENGINE_API void SetRenderTracePhysicalMaterialOutputs(TArrayView<TObjectPtr<UPhysicalMaterial>> PhysicalMaterials);
2008
2009#if WITH_EDITOR
2011 ENGINE_API void GetShaderTags(TArray<FName>& OutShaderTags) const;
2013 ENGINE_API EMaterialTranslateValidationFlags GetMaterialTranslateValidationFlags() const;
2014#endif
2015
2016private:
2017#if WITH_EDITOR
2019
2021#endif // WITH_EDITOR
2022
2023 friend class FLightmassMaterialProxy;
2026 friend class FMaterialResource;
2027 friend class FMaterialEditor;
2028 friend class FMaterialDetailCustomization;
2029
2030 // DO NOT CALL outside of FMaterialEditor!
2031 ENGINE_API static void ForceNoCompilationInPostLoad(bool bForceNoCompilation);
2032
2033#if WITH_EDITORONLY_DATA
2034 /* Helper function to help finding expression GUID taking into account UMaterialExpressionMaterialFunctionCall */
2035 template<typename ExpressionType>
2037 {
2039 {
2041
2042 if (ExpressionPtr && ExpressionPtr->GetParameterExpressionId() == InGUID)
2043 {
2044 check(ExpressionPtr->bIsParameterExpression);
2046 }
2048 {
2049 if (ExpressionType* Expression = FindExpressionByGUIDRecursive<ExpressionType>(InGUID, MaterialFunction->GetExpressions()))
2050 {
2051 return Expression;
2052 }
2053 }
2054 else if (TOptional<FLayersInterfaces> LayersInterfaces = UMaterial::GetExpressionLayers(ExpressionPtr))
2055 {
2056 for (const auto* Layer : LayersInterfaces->Layers)
2057 {
2058 if (Layer)
2059 {
2061 {
2062 return Expression;
2063 }
2064 }
2065 }
2066
2067 for (const auto* Blend : LayersInterfaces->Blends)
2068 {
2069 if (Blend)
2070 {
2072 {
2073 return Expression;
2074 }
2075 }
2076 }
2077 }
2078 }
2079
2080 return nullptr;
2081 }
2082#endif // WITH_EDITORONLY_DATA
2083
2084#if WITH_EDITORONLY_DATA
2085 UPROPERTY()
2087
2088 UPROPERTY()
2090
2091 UPROPERTY(meta = (DeprecatedProperty, DeprecationMessage = "GetEditorOnlyData().ParameterGroupData"))
2093
2094 UPROPERTY()
2096
2097 UPROPERTY()
2099
2100 UPROPERTY()
2102
2103 UPROPERTY()
2105
2106 UPROPERTY()
2108
2109 UPROPERTY()
2111
2112 UPROPERTY()
2114
2115 UPROPERTY()
2117
2118 UPROPERTY()
2120
2121 UPROPERTY()
2123
2124 UPROPERTY()
2126
2127 UPROPERTY()
2129
2130 UPROPERTY()
2132
2133 UPROPERTY()
2135
2136 UPROPERTY()
2138
2139 UPROPERTY()
2141
2142 UPROPERTY()
2144
2145 UPROPERTY()
2147
2148 UPROPERTY()
2150
2151 UPROPERTY()
2153
2154 UPROPERTY()
2156
2157 UPROPERTY()
2159
2160 UPROPERTY()
2162#endif // WITH_EDITORONLY_DATA
2163};
2164
2165
2166
#define NULL
Definition oodle2base.h:134
@ Normal
Definition AndroidInputInterface.h:116
#define check(expr)
Definition AssertionMacros.h:314
EBlendableLocation
Definition BlendableInterface.h:15
return Self
Definition CocoaThread.cpp:337
@ INDEX_NONE
Definition CoreMiscDefines.h:150
#define UE_DEPRECATED(Version, Message)
Definition CoreMiscDefines.h:302
FPlatformTypes::int8 int8
An 8-bit signed integer.
Definition Platform.h:1121
#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::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
#define DECLARE_EVENT_OneParam(OwningType, EventName, Param1Type)
Definition DelegateCombinations.h:51
ERefractionMode
Definition EngineTypes.h:359
EMaterialFloatPrecisionMode
Definition EngineTypes.h:266
EMaterialShadingRate
Definition EngineTypes.h:981
EBlendMode
Definition EngineTypes.h:245
EMaterialStencilCompare
Definition EngineTypes.h:967
ERefractionCoverageMode
Definition EngineTypes.h:398
ETranslucencyLightingMode
Definition EngineTypes.h:314
EPixelDepthOffsetMode
Definition EngineTypes.h:416
EMaterialShadingModel
Definition EngineTypes.h:705
EMaterialDomain
Definition MaterialDomain.h:13
EMaterialUsage
Definition MaterialInterface.h:73
TMaterialRecursionGuard< class UMaterialInterface > TMicRecursionGuard
Definition MaterialInterface.h:205
EMaterialGetParameterValueFlags
Definition MaterialParameters.h:260
EMaterialParameterType
Definition MaterialParameters.h:187
EMaterialShaderPrecompileMode
Definition MaterialShaderPrecompileMode.h:7
FString GetBlendModeString(EBlendMode BlendMode)
Definition MaterialShader.cpp:205
EMaterialTranslateValidationFlags
Definition MaterialShared.h:1906
EDecalBlendMode
Definition Material.h:74
@ DBM_MAX
Definition Material.h:112
EMaterialTranslucencyPass
Definition Material.h:142
@ UMETA
Definition Material.h:76
@ MTP_MAX
Definition Material.h:149
EMaterialDecalResponse
Definition Material.h:118
@ MDR_MAX
Definition Material.h:136
@ Pixel
Definition MetalRHIPrivate.h:224
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 GENERATED_USTRUCT_BODY(...)
Definition ObjectMacros.h:767
EPSOPrecachePriority
Definition PipelineStateCache.h:33
EShaderFrequency
Definition RHIDefinitions.h:202
@ SF_NumFrequencies
Definition RHIDefinitions.h:216
EShaderPlatform
Definition RHIShaderPlatform.h:11
EMaterialProperty
Definition SceneTypes.h:148
USkinnedMeshComponent float
Definition SkinnedMeshComponent.h:60
uint32 Offset
Definition VulkanMemory.cpp:4033
uint8_t uint8
Definition binka_ue_file_header.h:8
uint16_t uint16
Definition binka_ue_file_header.h:7
uint32_t uint32
Definition binka_ue_file_header.h:6
Definition Archive.h:1208
Definition AssetRegistryTagsContext.h:98
Definition Material.cpp:404
Definition MaterialCompiler.h:109
Definition MaterialRenderProxy.h:102
Definition MaterialShared.h:3076
Definition MaterialShared.h:3326
Definition NameTypes.h:617
Definition ObjectSaveContext.h:244
Definition OutputDevice.h:133
Definition UnrealType.h:174
Definition UObjectGlobals.h:2492
Definition SecureHash.h:226
Definition ThreadSafeBool.h:17
Definition ObjectMacros.h:180
Definition ArrayView.h:139
Definition Array.h:670
Definition EnumAsByte.h:22
Definition AssetRegistryState.h:50
Definition AndroidPlatformMisc.h:14
Definition UnrealString.h.inl:34
Definition RefCounting.h:454
Definition Class.h:3793
Definition Font.h:111
Definition Material.h:309
Definition MaterialExpressionComment.h:15
Definition MaterialExpression.h:150
Definition MaterialFunctionInterface.h:59
Definition MaterialInterface.h:275
Definition MaterialInterface.h:296
Definition Material.h:432
uint32 GetMaterialDecalResponse() const
Definition Material.h:1543
EPostEditChangeEffectOnShaders
Definition Material.h:1373
ENGINE_API void PostEditChangePropertyInternal(FPropertyChangedEvent &PropertyChangedEvent, const EPostEditChangeEffectOnShaders EffectOnShaders)
ENGINE_API bool CheckInValidStateForCompilation(class FMaterialCompiler *Compiler) const
Definition NeuralProfile.h:141
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
@ Num
Definition RHIFeatureLevel.h:54
Type
Definition RHIDefinitions.h:317
@ Num
Definition RHIDefinitions.h:321
Definition RobinHoodHashTable.h:18
Definition SkinnedMeshComponent.h:50
Definition RenderUtils.cpp:2080
int
Definition TestServer.py:515
EValueType
Definition ShaderTypes.h:94
Definition VirtualTextureRecreate.cpp:16
@ false
Definition radaudio_common.h:23
U16 Index
Definition radfft.cpp:71
Definition MaterialExpressionIO.h:172
Definition EngineTypes.h:3237
Definition EngineTypes.h:3204
Definition MaterialExpressionIO.h:23
Definition Guid.h:109
Definition Color.h:48
Definition MaterialExpressionIO.h:303
Definition MaterialExpression.h:123
Definition MaterialInterface.h:209
Definition Material.h:270
UE::Shader::FValue ConstantValue
Definition Material.h:273
Definition MaterialExpressionIO.h:156
int32 Mask
Definition Material.h:174
int32 MaskR
Definition Material.h:177
TObjectPtr< class UMaterialExpression > Expression
Definition Material.h:160
int32 MaskB
Definition Material.h:183
int32 MaskG
Definition Material.h:180
int32 MaskA
Definition Material.h:186
int32 OutputIndex
Definition Material.h:164
FName InputName
Definition Material.h:171
Definition MaterialLayersFunctions.h:221
Definition MaterialOverrideNanite.h:20
Definition MaterialParameters.h:446
Definition EngineTypes.h:732
Definition MaterialParameters.h:96
Definition ShaderCompiler.h:1417
Definition PSOPrecache.h:30
Definition Material.h:280
bool operator==(const FParameterGroupData &Other) const
Definition Material.h:301
FParameterGroupData(const FString &InString, int32 InSortPriority)
Definition Material.h:295
Definition UnrealType.h:6865
Definition ResourceSize.h:31
Definition MaterialExpressionIO.h:195
Definition MaterialExpressionIO.h:217
Definition ShaderCodeLibrary.h:118
Definition StaticParameterSet.h:462
Definition MaterialParameters.h:503
Definition MaterialExpressionIO.h:238
Definition MaterialExpressionIO.h:281
Definition MaterialExpressionIO.h:259
Definition MaterialRecursionGuard.h:11
Definition ObjectPtr.h:488
Definition Optional.h:131
Definition IntPoint.h:25
Definition ShaderTypes.h:368