UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
StaticParameterSet.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"
6#include "UObject/NameTypes.h"
7#include "Misc/Guid.h"
15#include "StaticParameterSet.generated.h"
16
18class FSHA1;
20
24USTRUCT()
26{
28
29 UPROPERTY()
31
32 UPROPERTY()
33 bool bOverride;
34
35 UPROPERTY()
36 FGuid ExpressionGUID;
37
39 bOverride(false),
40 ExpressionGUID(0, 0, 0, 0)
41 { }
42
44 ParameterInfo(InInfo),
45 bOverride(InOverride),
46 ExpressionGUID(InGuid)
47 { }
48
49 bool IsOverride() const { return bOverride; }
50
52 {
53 // This method should never be called, derived structures need to implement their own code (to retain compatibility) or call SerializeBase (for new classes)
54 check(false);
55
56 return Ar;
57 }
58
59 bool operator==(const FStaticParameterBase& Reference) const
60 {
61 return ParameterInfo == Reference.ParameterInfo && bOverride == Reference.bOverride && ExpressionGUID == Reference.ExpressionGUID;
62 }
63
65 {
66 Ar << ParameterInfo;
67 Ar << bOverride;
68 Ar << ExpressionGUID;
69 }
70
71 void UpdateHash(FSHA1& HashState) const
72 {
73 const FString ParameterName = ParameterInfo.ToString();
74 HashState.Update((const uint8*)*ParameterName, ParameterName.Len() * sizeof(TCHAR));
75 HashState.Update((const uint8*)&ExpressionGUID, sizeof(ExpressionGUID));
76 uint8 Override = bOverride;
77 HashState.Update((const uint8*)&Override, sizeof(Override));
78 }
79
80 ENGINE_API void AppendKeyString(FString& KeyString) const;
81 ENGINE_API void Append(FShaderKeyGenerator& KeyGen) const;
82};
83
84
88USTRUCT()
90{
92
93 UPROPERTY()
95
100
105
106 bool operator==(const FStaticSwitchParameter& Reference) const
107 {
108 return FStaticParameterBase::operator==(Reference) && Value == Reference.Value;
109 }
110
112 {
115 {
116 Ar << P.ParameterInfo.Name;
117 }
118 else
119 {
120 Ar << P.ParameterInfo;
121 }
122 Ar << P.Value << P.bOverride << P.ExpressionGUID;
123 return Ar;
124 }
125
126 void UpdateHash(FSHA1& HashState) const
127 {
130 HashState.Update((const uint8*)&HashValue, sizeof(HashValue));
131 }
132
133 ENGINE_API void AppendKeyString(FString& KeyString) const;
134 ENGINE_API void Append(FShaderKeyGenerator& KeyGen) const;
135
137 {
138 OutResult.Value = Value;
139#if WITH_EDITORONLY_DATA
140 OutResult.ExpressionGuid = ExpressionGUID;
141#endif
142 }
143
144 bool IsValid() const { return true; }
145};
146
150USTRUCT()
152{
154
155 UPROPERTY()
157
158 UPROPERTY()
159 bool G;
160
161 UPROPERTY()
162 bool B;
163
164 UPROPERTY()
165 bool A;
166
169 R(false),
170 G(false),
171 B(false),
172 A(false)
173 { }
174
177 R(InR),
178 G(InG),
179 B(InB),
180 A(InA)
181 { }
182
183 bool operator==(const FStaticComponentMaskParameter& Reference) const
184 {
185 return FStaticParameterBase::operator==(Reference) && R == Reference.R && G == Reference.G && B == Reference.B && A == Reference.A;
186 }
187
189 {
192 {
193 Ar << P.ParameterInfo.Name;
194 }
195 else
196 {
197 Ar << P.ParameterInfo;
198 }
199 Ar << P.R << P.G << P.B << P.A << P.bOverride << P.ExpressionGUID;
200 return Ar;
201 }
202
203 void UpdateHash(FSHA1& HashState) const
204 {
206 uint8 Values[4];
207 Values[0] = R;
208 Values[1] = G;
209 Values[2] = B;
210 Values[3] = A;
211 HashState.Update((const uint8*)&Values, sizeof(Values));
212 }
213
214 ENGINE_API void AppendKeyString(FString& KeyString) const;
215 ENGINE_API void Append(FShaderKeyGenerator& KeyGen) const;
216
218 {
220#if WITH_EDITORONLY_DATA
221 OutResult.ExpressionGuid = ExpressionGUID;
222#endif
223 }
224
225 bool IsValid() const { return true; }
226};
227
233USTRUCT()
235{
237
239 // These are necessary to prevent deprecation warnings from UE_DEPRECATED on some compilers because of auto-generated code
246
247 UE_DEPRECATED(all, "ParameterInfo_DEPRECATED remains in the code for backwards-compatibility reasons but shall not be used")
248 UPROPERTY()
249 FMaterialParameterInfo ParameterInfo_DEPRECATED;
250
251 UE_DEPRECATED(5.7, "ExpressionGUID_DEPRECATED is now unused and will be removed in a future version")
252 UPROPERTY()
253 FGuid ExpressionGUID_DEPRECATED;
254
255 UE_DEPRECATED(all, "bOverride_DEPRECATED remains in the code for backwards-compatibility reasons but shall not be used")
256 UPROPERTY()
257 bool bOverride_DEPRECATED = true;
258
259 UPROPERTY()
260 FName LayerName;
261
262 UPROPERTY()
263 int32 WeightmapIndex = INDEX_NONE;
264
265 UE_DEPRECATED(5.7, "bIsRepeatedLayer is now unused and will be removed in a future version")
266 UPROPERTY()
267 bool bIsRepeatedLayer = false;
268
269 UE_DEPRECATED(5.7, "bWeightBasedBlend is now unused and will be removed in a future version")
270 UPROPERTY()
271 bool bWeightBasedBlend = false;
272
273 UE_DEPRECATED(5.7, "bWeightBasedBlend being deprecated, this constructor is now useless")
275 : LayerName(InName)
276 , WeightmapIndex(InWeightmapIndex)
277 { }
278
279 UE_DEPRECATED(5.7, "bWeightBasedBlend being deprecated, this constructor is now useless")
281 : LayerName(InName)
282 , WeightmapIndex(InWeightmapIndex)
283 {
284 }
285
287 : LayerName(InName)
288 , WeightmapIndex(InWeightmapIndex)
289 {}
290
292 {
293 return LayerName == Reference.LayerName && WeightmapIndex == Reference.WeightmapIndex;
294 }
295
297 {
301
302#if WITH_EDITORONLY_DATA
304 {
305 Ar << P.LayerName;
306 }
307 else if(Ar.CustomVer(FFortniteMainBranchObjectVersion::GUID) < FFortniteMainBranchObjectVersion::TerrainLayerWeightsAreNotParameters)
308 {
309 Ar << P.ParameterInfo_DEPRECATED;
310 P.LayerName = P.ParameterInfo_DEPRECATED.Name;
311 }
312 else
313#endif // WITH_EDITORONLY_DATA
314 {
315 Ar << P.LayerName;
316 }
317
318 if (Ar.CustomVer(FFortniteMainBranchObjectVersion::GUID) >= FFortniteMainBranchObjectVersion::StaticParameterTerrainLayerWeightBlendType)
319 {
320 // For backwards compatibility reasons, we now serialize a bogus value and this code shall remain here forever, but the member
321 // variable bWeightBasedBlend can be removed after the deprecation grace period has passed
322 bool bDummyWeightBasedBlend = false;
324 }
325
326 Ar << P.WeightmapIndex;
327#if WITH_EDITORONLY_DATA
328 if (Ar.CustomVer(FFortniteMainBranchObjectVersion::GUID) < FFortniteMainBranchObjectVersion::TerrainLayerWeightsAreNotParameters)
329 {
330 Ar << P.bOverride_DEPRECATED;
331 // For backwards compatibility reasons, we now serialize a bogus value and this code shall remain here forever, but the member
332 // variable ExpressionGUID_DEPRECATED can be removed after the deprecation grace period has passed
335 }
336#endif // WITH_EDITORONLY_DATA
337 return Ar;
339 }
340
341 void UpdateHash(FSHA1& HashState) const
342 {
343 const FString LayerNameString = LayerName.ToString();
344 HashState.Update((const uint8*)*LayerNameString, LayerNameString.Len() * sizeof(TCHAR));
345 HashState.Update((const uint8*)&WeightmapIndex, sizeof(WeightmapIndex));
346 }
347 ENGINE_API void AppendKeyString(FString& KeyString) const;
348 ENGINE_API void Append(FShaderKeyGenerator& KeyGen) const;
349};
350
351struct UE_DEPRECATED(5.0, "Material layers are no longer material parameters, use FStaticParameterSet::MaterialLayers") FStaticMaterialLayersParameter;
352USTRUCT()
354{
356#if WITH_EDITOR
357 struct ID
358 {
360 FMaterialLayersFunctions::ID Functions;
361
362 friend FArchive& operator<<(FArchive& Ar, ID& P)
363 {
364 P.ParameterID.SerializeBase(Ar);
365 P.Functions.SerializeForDDC(Ar);
366 return Ar;
367 }
368 };
369#endif // WITH_EDITOR
370
371 UPROPERTY()
373
374#if WITH_EDITOR
376 {
377 Ar << P.ParameterInfo << P.bOverride << P.ExpressionGUID;
380 {
381 P.Value.SerializeLegacy(Ar);
382 }
383 return Ar;
384 }
385#endif // WITH_EDITOR
386};
387
388USTRUCT()
390{
392
393 FStaticParameterSetRuntimeData() : bHasMaterialLayers(false) {}
398
400 UPROPERTY()
401 TArray<FStaticSwitchParameter> StaticSwitchParameters;
402
404 UPROPERTY()
406
407 UPROPERTY()
408 uint8 bHasMaterialLayers : 1;
409
410 void Empty()
411 {
412 StaticSwitchParameters.Empty();
413 MaterialLayers.Empty();
414 bHasMaterialLayers = false;
415 }
416
417 bool IsEmpty() const
418 {
419 return StaticSwitchParameters.Num() == 0 && !bHasMaterialLayers;
420 }
421};
422
423USTRUCT()
425{
427
428
429 UPROPERTY()
430 TArray<FStaticSwitchParameter> StaticSwitchParameters_DEPRECATED;
431
433 UPROPERTY()
434 TArray<FStaticComponentMaskParameter> StaticComponentMaskParameters;
435
437 UPROPERTY()
438 TArray<FStaticTerrainLayerWeightParameter> TerrainLayerWeightParameters;
439
441 UPROPERTY()
443
444#if WITH_EDITOR
445 void Empty()
446 {
447 StaticComponentMaskParameters.Empty();
448 TerrainLayerWeightParameters.Empty();
449 MaterialLayers.Empty();
450 }
451
452 bool IsEmpty() const
453 {
454 return StaticComponentMaskParameters.Num() == 0 && TerrainLayerWeightParameters.Num() == 0;
455 }
456#endif // WITH_EDITOR
457};
458
460USTRUCT()
462{
464
465#if WITH_EDITORONLY_DATA
466 UPROPERTY()
468#endif // WITH_EDITORONLY_DATA
469
473
476
478 const FStaticParameterSetRuntimeData& GetRuntime() const { return *this; }
479
485 bool IsEmpty() const
486 {
487 if (!FStaticParameterSetRuntimeData::IsEmpty()) return false;
488#if WITH_EDITOR
489 if (!EditorOnly.IsEmpty()) return false;
490#endif
491 return true;
492 }
493
494 void Empty()
495 {
497#if WITH_EDITOR
498 EditorOnly.Empty();
499#endif
500 // Ensure that we're actually empty now
501 check(IsEmpty());
502 }
503
505
506#if WITH_EDITOR
507 void SerializeLegacy(FArchive& Ar);
510
512 void Validate()
513 {
514 Validate(GetRuntime(), EditorOnly);
515 }
516#endif // WITH_EDITOR
517
518 void PostSerialize(const FArchive& Ar);
519
526 bool operator==(const FStaticParameterSet& ReferenceSet) const;
527
529 {
530 return !(*this == ReferenceSet);
531 }
532
533 ENGINE_API bool Equivalent(const FStaticParameterSet& ReferenceSet) const;
534
535#if WITH_EDITORONLY_DATA
538#endif // WITH_EDITORONLY_DATA
539
540private:
541#if WITH_EDITORONLY_DATA
543 UPROPERTY()
546
547 UPROPERTY()
548 TArray<FStaticSwitchParameter> StaticSwitchParameters_DEPRECATED;
549
550 UPROPERTY()
552
553 UPROPERTY()
555#endif // WITH_EDITORONLY_DATA
556
557 void SortForEquivalent();
558
559#if WITH_EDITORONLY_DATA
560 void SetStaticSwitchParameterValue(const FMaterialParameterInfo& ParameterInfo, const FGuid& ExpressionGuid, bool Value);
561 void SetStaticComponentMaskParameterValue(const FMaterialParameterInfo& ParameterInfo, const FGuid& ExpressionGuid, bool R, bool G, bool B, bool A);
562#endif // WITH_EDITORONLY_DATA
563
568};
569
570template<>
572{
573 enum { WithPostSerialize = true };
574};
#define check(expr)
Definition AssertionMacros.h:314
@ INDEX_NONE
Definition CoreMiscDefines.h:150
#define UE_DEPRECATED(Version, Message)
Definition CoreMiscDefines.h:302
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
FArchive & operator<<(FArchive &Ar, FEnvQueryDebugProfileData::FStep &Data)
Definition EnvQueryTypes.cpp:489
return true
Definition ExternalRpcRegistry.cpp:601
#define PRAGMA_ENABLE_DEPRECATION_WARNINGS
Definition GenericPlatformCompilerPreSetup.h:12
#define PRAGMA_DISABLE_DEPRECATION_WARNINGS
Definition GenericPlatformCompilerPreSetup.h:8
EMaterialParameterType
Definition MaterialParameters.h:187
EMaterialSetParameterValueFlags
Definition MaterialParameters.h:271
void SerializeLegacy(FArchive &Ar, FAttributesSetBase &AttributesSet)
Definition MeshAttributeArray.cpp:41
const bool
Definition NetworkReplayStreaming.h:178
#define UPROPERTY(...)
UObject definition macros.
Definition ObjectMacros.h:744
#define GENERATED_BODY(...)
Definition ObjectMacros.h:765
#define USTRUCT(...)
Definition ObjectMacros.h:746
uint8_t uint8
Definition binka_ue_file_header.h:8
Definition Archive.h:1208
virtual CORE_API void UsingCustomVersion(const struct FGuid &Guid)
Definition Archive.cpp:590
CORE_API int32 CustomVer(const struct FGuid &Key) const
Definition Archive.cpp:602
Definition NameTypes.h:617
Definition SecureHash.h:314
CORE_API void Update(const uint8 *data, uint64 len)
Definition SecureHash.cpp:1205
Definition ShaderKeyGenerator.h:29
Definition Array.h:670
Definition UnrealString.h.inl:34
@ false
Definition radaudio_common.h:23
CORE_API static const FGuid GUID
Definition FortniteMainBranchObjectVersion.h:21
Definition Guid.h:109
Definition MaterialLayersFunctions.h:57
Definition MaterialLayersFunctions.h:131
void Empty()
Definition MaterialLayersFunctions.h:165
Definition MaterialLayersFunctions.h:221
Definition MaterialParameters.h:33
Definition MaterialParameters.h:446
Definition MaterialParameters.h:341
CORE_API static const FGuid GUID
Definition ReleaseObjectVersion.h:154
@ MaterialLayersParameterSerializationRefactor
Definition ReleaseObjectVersion.h:48
CORE_API static const FGuid GUID
Definition RenderingObjectVersion.h:148
@ MaterialAttributeLayerParameters
Definition RenderingObjectVersion.h:63
Definition StaticParameterSet.h:152
bool operator==(const FStaticComponentMaskParameter &Reference) const
Definition StaticParameterSet.h:183
void UpdateHash(FSHA1 &HashState) const
Definition StaticParameterSet.h:203
bool IsValid() const
Definition StaticParameterSet.h:225
void GetValue(FMaterialParameterMetadata &OutResult) const
Definition StaticParameterSet.h:217
friend FArchive & operator<<(FArchive &Ar, FStaticComponentMaskParameter &P)
Definition StaticParameterSet.h:188
FStaticComponentMaskParameter(const FMaterialParameterInfo &InInfo, bool InR, bool InG, bool InB, bool InA, bool InOverride, FGuid InGuid)
Definition StaticParameterSet.h:175
Definition StaticParameterSet.h:354
Definition StaticParameterSet.h:26
bool IsOverride() const
Definition StaticParameterSet.h:49
void SerializeBase(FArchive &Ar)
Definition StaticParameterSet.h:64
FStaticParameterBase(const FMaterialParameterInfo &InInfo, bool InOverride, FGuid InGuid)
Definition StaticParameterSet.h:43
void UpdateHash(FSHA1 &HashState) const
Definition StaticParameterSet.h:71
bool operator==(const FStaticParameterBase &Reference) const
Definition StaticParameterSet.h:59
friend FArchive & operator<<(FArchive &Ar, FStaticParameterBase &P)
Definition StaticParameterSet.h:51
Definition StaticParameterSet.h:425
Definition StaticParameterSet.h:390
bool IsEmpty() const
Definition StaticParameterSet.h:417
FStaticParameterSetRuntimeData(const FStaticParameterSet &Rhs)=delete
FStaticParameterSetRuntimeData & operator=(const FStaticParameterSetRuntimeData &Rhs)=default
FStaticParameterSetRuntimeData & operator=(const FStaticParameterSet &Rhs)=delete
void Empty()
Definition StaticParameterSet.h:410
FStaticParameterSetRuntimeData(const FStaticParameterSetRuntimeData &Rhs)=default
Definition StaticParameterSet.h:462
FStaticParameterSet & operator=(const FStaticParameterSetRuntimeData &InValue)=delete
FStaticParameterSet(const FStaticParameterSetRuntimeData &)=delete
friend bool operator!=(const FStaticParameterSet &, const FStaticParameterSetRuntimeData &)=delete
const FStaticParameterSetRuntimeData & GetRuntime() const
Definition StaticParameterSet.h:478
bool operator!=(const FStaticParameterSet &ReferenceSet) const
Definition StaticParameterSet.h:528
void Empty()
Definition StaticParameterSet.h:494
FStaticParameterSetRuntimeData & GetRuntime()
Definition StaticParameterSet.h:477
friend bool operator!=(const FStaticParameterSetRuntimeData &, const FStaticParameterSet &)=delete
friend bool operator==(const FStaticParameterSetRuntimeData &, const FStaticParameterSet &)=delete
friend bool operator==(const FStaticParameterSet &, const FStaticParameterSetRuntimeData &)=delete
FStaticParameterSet()=default
bool IsEmpty() const
Definition StaticParameterSet.h:485
ENGINE_API FStaticParameterSet(const FStaticParameterSet &InValue)
bool GetMaterialLayers(FMaterialLayersFunctions &OutMaterialLayers) const
Definition StaticParameterSet.h:90
void UpdateHash(FSHA1 &HashState) const
Definition StaticParameterSet.h:126
void GetValue(FMaterialParameterMetadata &OutResult) const
Definition StaticParameterSet.h:136
bool operator==(const FStaticSwitchParameter &Reference) const
Definition StaticParameterSet.h:106
bool IsValid() const
Definition StaticParameterSet.h:144
FStaticSwitchParameter(const FMaterialParameterInfo &InInfo, bool InValue, bool InOverride, FGuid InGuid)
Definition StaticParameterSet.h:101
friend FArchive & operator<<(FArchive &Ar, FStaticSwitchParameter &P)
Definition StaticParameterSet.h:111
Definition StaticParameterSet.h:235
friend FArchive & operator<<(FArchive &Ar, FStaticTerrainLayerWeightParameter &P)
Definition StaticParameterSet.h:296
void UpdateHash(FSHA1 &HashState) const
Definition StaticParameterSet.h:341
PRAGMA_DISABLE_DEPRECATION_WARNINGS FStaticTerrainLayerWeightParameter()=default
FStaticTerrainLayerWeightParameter(FStaticTerrainLayerWeightParameter &&)=default
FStaticTerrainLayerWeightParameter(const FName &InName, int32 InWeightmapIndex)
Definition StaticParameterSet.h:286
FStaticTerrainLayerWeightParameter(const FStaticTerrainLayerWeightParameter &)=default
FStaticTerrainLayerWeightParameter & operator=(FStaticTerrainLayerWeightParameter &&)=default
bool operator==(const FStaticTerrainLayerWeightParameter &Reference) const
Definition StaticParameterSet.h:291
FStaticTerrainLayerWeightParameter & operator=(const FStaticTerrainLayerWeightParameter &)=default
Definition StructOpsTypeTraits.h:11
@ WithPostSerialize
Definition StructOpsTypeTraits.h:25
Definition StructOpsTypeTraits.h:46