UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
PrimitiveUniformShaderParametersBuilder.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 "SceneTypes.h"
9#include "ShaderParameters.h"
10#include "UniformBuffer.h"
12#include "NaniteDefinitions.h"
13#include "RenderTransform.h"
14#include "SceneDefinitions.h"
16
18{
19public:
21 {
22 ObjectRadius = 0.0f;
23
24 // Flags defaulted on
25 bCastShadow = true;
26 bCastContactShadow = true;
27 bEvaluateWorldPositionOffset = true;
28 bVisibleInGame = true;
29 bVisibleInEditor = true;
30 bVisibleInMainPass = true;
31 bVisibleInReflectionCaptures = true;
32 bVisibleInRealTimeSkyCaptures = true;
33 bVisibleInRayTracing = true;
34 bVisibleInLumenScene = true;
35
36 // Flags defaulted off
37 bReceivesDecals = false;
38 bUseSingleSampleShadowFromStationaryLights = false;
39 bUseVolumetricLightmap = false;
40 bOutputVelocity = false;
41 bHasRayTracingRepresentation = false;
42 bHasCapsuleRepresentation = false;
43 bHasPreSkinnedLocalBounds = false;
44 bHasPreviousLocalToWorld = false;
45 bHasInstanceLocalBounds = false;
46 bCastHiddenShadow = false;
47 bVisibleInSceneCaptureOnly = false;
48 bHiddenInSceneCapture = false;
49 bForceHidden = false;
50 bHasNaniteImposter = false;
51 bHasInstanceDrawDistanceCull = false;
52 bHasWPODisableDistance = false;
53 bHasAlwaysEvaluateWPOMaterials = false;
54 bReverseCulling = false;
55 bHoldout = false;
56 bDisableMaterialInvalidations = false;
57 bSplineMesh = false;
58 bSkinnedMesh = false;
59 bAllowInstanceCullingOcclusionQueries = false;
60 bHasPixelAnimation = false;
61 bRayTracingFarField = false;
62 bRayTracingHasGroupId = false;
63 bHasPerClusterDisplacementFallbackRaster = false;
64 bIsFirstPerson = false;
65
66 Parameters.MaxWPOExtent = 0.0f;
67 Parameters.MinMaterialDisplacement = 0.0f;
68 Parameters.MaxMaterialDisplacement = 0.0f;
69
70 // Default colors
71 Parameters.WireframeAndPrimitiveColor = FVector2f(FMath::AsFloat(0xFFFFFF00), FMath::AsFloat(0xFFFFFF00));
72
73 // Invalid indices
74 Parameters.LightmapDataIndex = 0;
75 Parameters.LightmapUVIndex = INDEX_NONE;
76 Parameters.SingleCaptureIndex = INDEX_NONE;
77 Parameters.PersistentPrimitiveIndex = INDEX_NONE;
78 Parameters.PrimitiveComponentId = ~uint32(0u);
79
80 // Nanite
81 Parameters.NaniteResourceID = INDEX_NONE;
82 Parameters.NaniteHierarchyOffset = INDEX_NONE;
83 Parameters.NaniteAssemblyTransformOffset = INDEX_NONE;
84 Parameters.PackedNaniteFlags = NANITE_IMPOSTER_INDEX_MASK;
85 Parameters.NaniteRayTracingDataOffset = INDEX_NONE;
86
87 // Instance data
88 Parameters.InstanceSceneDataOffset = INDEX_NONE;
89 Parameters.NumInstanceSceneDataEntries = 0;
90 Parameters.InstancePayloadDataOffset = INDEX_NONE;
91 Parameters.InstancePayloadDataStride = 0;
92 Parameters.InstancePayloadExtensionSize = 0;
93
94 Parameters.MeshPaintTextureDescriptor = FUintVector2(0, 0);
95 Parameters.MaterialCacheDescriptor = 0;
96
97 LightingChannels = GetDefaultLightingChannelMask();
98
99 return CustomPrimitiveData(nullptr);
100 }
101
102#define PRIMITIVE_UNIFORM_BUILDER_METHOD(INPUT_TYPE, VARIABLE_NAME) \
103 inline FPrimitiveUniformShaderParametersBuilder& VARIABLE_NAME(INPUT_TYPE In##VARIABLE_NAME) { Parameters.VARIABLE_NAME = In##VARIABLE_NAME; return *this; }
104
105#define PRIMITIVE_UNIFORM_BUILDER_FLAG_METHOD(INPUT_TYPE, VARIABLE_NAME) \
106 inline FPrimitiveUniformShaderParametersBuilder& VARIABLE_NAME(INPUT_TYPE In##VARIABLE_NAME) { b##VARIABLE_NAME = In##VARIABLE_NAME; return *this; }
107
115 PRIMITIVE_UNIFORM_BUILDER_FLAG_METHOD(bool, UseSingleSampleShadowFromStationaryLights);
118 PRIMITIVE_UNIFORM_BUILDER_FLAG_METHOD(bool, EvaluateWorldPositionOffset);
125 PRIMITIVE_UNIFORM_BUILDER_FLAG_METHOD(bool, VisibleInRayTracing);
134 PRIMITIVE_UNIFORM_BUILDER_FLAG_METHOD(bool, AllowInstanceCullingOcclusionQueries);
139 PRIMITIVE_UNIFORM_BUILDER_FLAG_METHOD(bool, HasPerClusterDisplacementFallbackRaster);
141
142 PRIMITIVE_UNIFORM_BUILDER_METHOD(uint32, InstanceSceneDataOffset);
143 PRIMITIVE_UNIFORM_BUILDER_METHOD(uint32, NumInstanceSceneDataEntries);
144 PRIMITIVE_UNIFORM_BUILDER_METHOD(uint32, InstancePayloadDataOffset);
145 PRIMITIVE_UNIFORM_BUILDER_METHOD(uint32, InstancePayloadDataStride);
148 PRIMITIVE_UNIFORM_BUILDER_METHOD(int32, PersistentPrimitiveIndex);
155 PRIMITIVE_UNIFORM_BUILDER_METHOD(float, MaterialDisplacementFadeOutSize);
156 PRIMITIVE_UNIFORM_BUILDER_METHOD(FUintVector2, MeshPaintTextureDescriptor);
157 PRIMITIVE_UNIFORM_BUILDER_METHOD(uint32, MaterialCacheDescriptor);
158 PRIMITIVE_UNIFORM_BUILDER_METHOD(float, AnimationMinScreenSize);
159
160#undef PRIMITIVE_UNIFORM_BUILDER_FLAG_METHOD
161#undef PRIMITIVE_UNIFORM_BUILDER_METHOD
162
168
170 {
171 Parameters.MaxWPOExtent = InMaxExtent;
172 return *this;
173 }
174
176 {
177 Parameters.MinMaterialDisplacement = InMinMaxDisplacement.X;
178 Parameters.MaxMaterialDisplacement = InMinMaxDisplacement.Y;
179 return *this;
180 }
181
183 {
184 Parameters.ObjectBoundsX = InObjectBounds.X;
185 Parameters.ObjectBoundsY = InObjectBounds.Y;
186 Parameters.ObjectBoundsZ = InObjectBounds.Z;
187 return *this;
188 }
189
191 {
192 AbsoluteObjectWorldPosition = InWorldBounds.Origin;
193 ObjectRadius = static_cast<float>(InWorldBounds.SphereRadius); //LWC_TODO: Precision loss
194 Parameters.ObjectBoundsX = static_cast<float>(InWorldBounds.BoxExtent.X);
195 Parameters.ObjectBoundsY = static_cast<float>(InWorldBounds.BoxExtent.Y);
196 Parameters.ObjectBoundsZ = static_cast<float>(InWorldBounds.BoxExtent.Z);
197 return *this;
198 }
199
201 {
202 Parameters.LocalObjectBoundsMin = FVector3f(InLocalBounds.GetBoxExtrema(0)); // 0 == minimum //LWC_TODO: Precision loss
203 Parameters.LocalObjectBoundsMax = FVector3f(InLocalBounds.GetBoxExtrema(1)); // 1 == maximum //LWC_TODO: Precision loss
204 return *this;
205 }
206
208 {
209 bHasPreSkinnedLocalBounds = true;
210 Parameters.PreSkinnedLocalBoundsMin = FVector3f(InPreSkinnedLocalBounds.GetBoxExtrema(0)); // 0 == minimum //LWC_TODO: Precision loss
211 Parameters.PreSkinnedLocalBoundsMax = FVector3f(InPreSkinnedLocalBounds.GetBoxExtrema(1)); // 1 == maximum //LWC_TODO: Precision loss
212 return *this;
213 }
214
216 {
217 AbsoluteActorWorldPosition = InActorWorldPosition;
218 return *this;
219 }
220
222 {
223 AbsoluteLocalToWorld = InLocalToWorld;
224 return *this;
225 }
226
228 {
229 bHasInstanceLocalBounds = true;
230 Parameters.InstanceLocalBoundsCenter = InInstanceLocalBounds.GetCenter();
231 Parameters.InstanceLocalBoundsExtent = InInstanceLocalBounds.GetExtent();
232 return *this;
233 }
234
236 {
237 bHasPreviousLocalToWorld = true;
238 AbsolutePreviousLocalToWorld = InPreviousLocalToWorld;
239 return *this;
240 }
241
243 {
244 FColor WireframeColor = InWireframeColor.QuantizeRound();
245 FColor PrimitiveColor = InPrimitiveColor.QuantizeRound();
246 Parameters.WireframeAndPrimitiveColor = FVector2f(FMath::AsFloat(WireframeColor.ToPackedRGBA()), FMath::AsFloat(PrimitiveColor.ToPackedRGBA()));
247 return *this;
248 }
249
251 {
252 // If this primitive has custom primitive data, set it
253 if (InCustomPrimitiveData && !InCustomPrimitiveData->Data.IsEmpty())
254 {
255 // Copy at most up to the max supported number of floats for safety
257 &Parameters.CustomPrimitiveData,
258 InCustomPrimitiveData->Data.GetData(),
259 InCustomPrimitiveData->Data.GetTypeSize() * FMath::Min(InCustomPrimitiveData->Data.Num(),
261 );
262
263 bHasCustomData = true;
264 }
265 else
266 {
267 // Clear to 0
268 FMemory::Memzero(Parameters.CustomPrimitiveData);
269 bHasCustomData = false;
270 }
271
272 return *this;
273 }
274
276 {
277 bHasNaniteImposter = ImposterIndex != INDEX_NONE;
278
279 check(!bHasNaniteImposter || ImposterIndex < NANITE_IMPOSTER_INDEX_MASK);
280 Parameters.PackedNaniteFlags = (Parameters.PackedNaniteFlags & NANITE_FILTER_FLAGS_MASK) | (ImposterIndex & NANITE_IMPOSTER_INDEX_MASK);
281
282 return *this;
283 }
284
286 {
287 check(FilterFlags < (1u << NANITE_FILTER_FLAGS_NUM_BITS));
288 Parameters.PackedNaniteFlags = (FilterFlags << NANITE_IMPOSTER_INDEX_NUM_BITS) | (Parameters.PackedNaniteFlags & NANITE_IMPOSTER_INDEX_MASK);
289
290 return *this;
291 }
292
294 {
295 // Translate the enum to a mask that can be consumed by the GPU with fewer operations
297 switch (StencilWriteMask)
298 {
299 case SM_Default:
300 GPUStencilMask = 0u; // Use zero to mean replace
301 break;
302 case SM_255:
303 GPUStencilMask = 0xFFu;
304 break;
305 default:
306 GPUStencilMask = (1u << uint32(StencilWriteMask - SM_1)) & 0xFFu;
307 break;
308 }
309 Parameters.CustomStencilValueAndMask = (GPUStencilMask << 8u) | StencilValue;
310
311 return *this;
312 }
313
315
317
319
321
323 {
324 const FDFVector3 AbsoluteWorldPosition(AbsoluteLocalToWorld.GetOrigin());
325 const FVector PositionHigh(AbsoluteWorldPosition.High);
326
327 Parameters.PositionHigh = AbsoluteWorldPosition.High;
328
329 {
330 // Inverse on FMatrix44f can generate NaNs if the source matrix contains large scaling, so do it in double precision.
331 // Also use double precision to calculate WorldToPreviousWorld to prevent precision issues at far distances
332
333 FMatrix LocalToRelativeWorld = FDFMatrix::MakeToRelativeWorldMatrixDouble(PositionHigh, AbsoluteLocalToWorld);
334 FMatrix PrevLocalToRelativeWorld = FDFMatrix::MakeClampedToRelativeWorldMatrixDouble(PositionHigh, AbsolutePreviousLocalToWorld);
335
336 FMatrix RelativeWorldToLocal = LocalToRelativeWorld.Inverse();
337
338 Parameters.LocalToRelativeWorld = FMatrix44f(LocalToRelativeWorld);
339 Parameters.RelativeWorldToLocal = FMatrix44f(RelativeWorldToLocal);
340 Parameters.WorldToPreviousWorld = FMatrix44f(RelativeWorldToLocal * PrevLocalToRelativeWorld);
341
342 if (bHasPreviousLocalToWorld)
343 {
344 Parameters.PreviousLocalToRelativeWorld = FMatrix44f(PrevLocalToRelativeWorld);
345 Parameters.PreviousRelativeWorldToLocal = FMatrix44f(PrevLocalToRelativeWorld.Inverse());
346 }
347 else
348 {
349 Parameters.PreviousLocalToRelativeWorld = Parameters.LocalToRelativeWorld;
350 Parameters.PreviousRelativeWorldToLocal = Parameters.RelativeWorldToLocal;
351 }
352 }
353
354 static TConsoleVariableData<int32>* CVarPrimitiveHasTileOffsetData = nullptr;
355 CVarPrimitiveHasTileOffsetData = CVarPrimitiveHasTileOffsetData ? CVarPrimitiveHasTileOffsetData : IConsoleManager::Get().FindTConsoleVariableDataInt(TEXT("r.PrimitiveHasTileOffsetData")); // null at first
356 const bool bPrimitiveHasTileOffsetData = CVarPrimitiveHasTileOffsetData ? (CVarPrimitiveHasTileOffsetData->GetValueOnAnyThread() != 0) : false;
358 {
359 const FLargeWorldRenderPosition AbsoluteActorWorldPositionTO { AbsoluteActorWorldPosition };
360 Parameters.ActorWorldPositionHigh = AbsoluteActorWorldPositionTO.GetTile();
361 Parameters.ActorWorldPositionLow = AbsoluteActorWorldPositionTO.GetOffset();
362 const FLargeWorldRenderPosition ObjectWorldPositionTO { AbsoluteObjectWorldPosition };
363 Parameters.ObjectWorldPositionHighAndRadius = FVector4f(ObjectWorldPositionTO.GetTile(), ObjectRadius);
364 Parameters.ObjectWorldPositionLow = ObjectWorldPositionTO.GetOffset();
365 }
366 else
367 {
368 const FDFVector3 AbsoluteActorWorldPositionDF { AbsoluteActorWorldPosition };
369 Parameters.ActorWorldPositionHigh = AbsoluteActorWorldPositionDF.High;
370 Parameters.ActorWorldPositionLow = AbsoluteActorWorldPositionDF.Low;
371 const FDFVector3 ObjectWorldPosition { AbsoluteObjectWorldPosition };
372 Parameters.ObjectWorldPositionHighAndRadius = FVector4f(ObjectWorldPosition.High, ObjectRadius);
373 Parameters.ObjectWorldPositionLow = ObjectWorldPosition.Low;
374 }
375
376 if (!bHasInstanceLocalBounds)
377 {
378 FRenderBounds InstanceLocalBounds(Parameters.LocalObjectBoundsMin, Parameters.LocalObjectBoundsMax);
379 Parameters.InstanceLocalBoundsCenter = InstanceLocalBounds.GetCenter();
380 Parameters.InstanceLocalBoundsExtent = InstanceLocalBounds.GetExtent();
381 }
382
383 if (!bHasPreSkinnedLocalBounds)
384 {
385 Parameters.PreSkinnedLocalBoundsMin = Parameters.LocalObjectBoundsMin;
386 Parameters.PreSkinnedLocalBoundsMax = Parameters.LocalObjectBoundsMax;
387 }
388
389 Parameters.ObjectOrientation = Parameters.LocalToRelativeWorld.GetUnitAxis(EAxis::Z);
390
391 {
392 // Extract per axis scales from LocalToWorld transform
393 FVector4f WorldX = FVector4f(Parameters.LocalToRelativeWorld.M[0][0], Parameters.LocalToRelativeWorld.M[0][1], Parameters.LocalToRelativeWorld.M[0][2], 0);
394 FVector4f WorldY = FVector4f(Parameters.LocalToRelativeWorld.M[1][0], Parameters.LocalToRelativeWorld.M[1][1], Parameters.LocalToRelativeWorld.M[1][2], 0);
395 FVector4f WorldZ = FVector4f(Parameters.LocalToRelativeWorld.M[2][0], Parameters.LocalToRelativeWorld.M[2][1], Parameters.LocalToRelativeWorld.M[2][2], 0);
396 float ScaleX = FVector3f(WorldX).Size();
397 float ScaleY = FVector3f(WorldY).Size();
398 float ScaleZ = FVector3f(WorldZ).Size();
399 Parameters.NonUniformScale = FVector4f(ScaleX, ScaleY, ScaleZ, FMath::Max3(FMath::Abs(ScaleX), FMath::Abs(ScaleY), FMath::Abs(ScaleZ)));
400 Parameters.InvNonUniformScale = FVector3f(
401 ScaleX > UE_KINDA_SMALL_NUMBER ? 1.0f / ScaleX : 0.0f,
402 ScaleY > UE_KINDA_SMALL_NUMBER ? 1.0f / ScaleY : 0.0f,
403 ScaleZ > UE_KINDA_SMALL_NUMBER ? 1.0f / ScaleZ : 0.0f);
404 }
405
406 // If SingleCaptureIndex is invalid, set it to 0 since there will be a default cubemap at that slot
407 Parameters.SingleCaptureIndex = FMath::Max(Parameters.SingleCaptureIndex, 0);
408
409 Parameters.Flags = 0;
410 Parameters.Flags |= bReceivesDecals ? PRIMITIVE_SCENE_DATA_FLAG_DECAL_RECEIVER : 0u;
411 Parameters.Flags |= bHasRayTracingRepresentation ? PRIMITIVE_SCENE_DATA_FLAG_HAS_RAY_TRACING_REPRESENTATION : 0u;
412 Parameters.Flags |= bHasCapsuleRepresentation ? PRIMITIVE_SCENE_DATA_FLAG_HAS_CAPSULE_REPRESENTATION : 0u;
413 Parameters.Flags |= bUseSingleSampleShadowFromStationaryLights ? PRIMITIVE_SCENE_DATA_FLAG_USE_SINGLE_SAMPLE_SHADOW_SL : 0u;
414 Parameters.Flags |= (bUseVolumetricLightmap && bUseSingleSampleShadowFromStationaryLights) ? PRIMITIVE_SCENE_DATA_FLAG_USE_VOLUMETRIC_LM_SHADOW_SL : 0u;
415 Parameters.Flags |= bOutputVelocity ? PRIMITIVE_SCENE_DATA_FLAG_OUTPUT_VELOCITY : 0u;
416 Parameters.Flags |= bEvaluateWorldPositionOffset ? PRIMITIVE_SCENE_DATA_FLAG_EVALUATE_WORLD_POSITION_OFFSET : 0u;
417 Parameters.Flags |= (Parameters.LocalToRelativeWorld.RotDeterminant() < 0.0f) ? PRIMITIVE_SCENE_DATA_FLAG_DETERMINANT_SIGN : 0u;
418 Parameters.Flags |= bHasCustomData ? PRIMITIVE_SCENE_DATA_FLAG_HAS_PRIMITIVE_CUSTOM_DATA : 0u;
419 Parameters.Flags |= ((LightingChannels & 0x1) != 0) ? PRIMITIVE_SCENE_DATA_FLAG_LIGHTING_CHANNEL_0 : 0u;
420 Parameters.Flags |= ((LightingChannels & 0x2) != 0) ? PRIMITIVE_SCENE_DATA_FLAG_LIGHTING_CHANNEL_1 : 0u;
421 Parameters.Flags |= ((LightingChannels & 0x4) != 0) ? PRIMITIVE_SCENE_DATA_FLAG_LIGHTING_CHANNEL_2 : 0u;
422 Parameters.Flags |= bHasNaniteImposter ? PRIMITIVE_SCENE_DATA_FLAG_HAS_NANITE_IMPOSTER : 0u;
423 Parameters.Flags |= bHasInstanceLocalBounds ? PRIMITIVE_SCENE_DATA_FLAG_HAS_INSTANCE_LOCAL_BOUNDS : 0u;
424 Parameters.Flags |= bCastShadow ? PRIMITIVE_SCENE_DATA_FLAG_CAST_SHADOWS : 0u;
425 Parameters.Flags |= bCastContactShadow ? PRIMITIVE_SCENE_DATA_FLAG_HAS_CAST_CONTACT_SHADOW : 0u;
426 Parameters.Flags |= bHasInstanceDrawDistanceCull ? PRIMITIVE_SCENE_DATA_FLAG_INSTANCE_DRAW_DISTANCE_CULL : 0u;
427 Parameters.Flags |= bHasWPODisableDistance ? PRIMITIVE_SCENE_DATA_FLAG_WPO_DISABLE_DISTANCE : 0u;
428 Parameters.Flags |= bHasAlwaysEvaluateWPOMaterials ? PRIMITIVE_SCENE_DATA_FLAG_HAS_ALWAYS_EVALUATE_WPO_MATERIALS : 0u;
429#if SUPPORT_REVERSE_CULLING_IN_NANITE
430 Parameters.Flags |= bReverseCulling ? PRIMITIVE_SCENE_DATA_FLAG_REVERSE_CULLING : 0u;
431#endif
432 Parameters.Flags |= bHoldout ? PRIMITIVE_SCENE_DATA_FLAG_HOLDOUT : 0u;
433 Parameters.Flags |= bDisableMaterialInvalidations ? PRIMITIVE_SCENE_DATA_FLAG_DISABLE_MATERIAL_INVALIDATIONS : 0u;
434 Parameters.Flags |= bSplineMesh ? PRIMITIVE_SCENE_DATA_FLAG_SPLINE_MESH : 0u;
435 Parameters.Flags |= bSkinnedMesh ? PRIMITIVE_SCENE_DATA_FLAG_SKINNED_MESH : 0u;
436 Parameters.Flags |= bAllowInstanceCullingOcclusionQueries ? PRIMITIVE_SCENE_DATA_FLAG_INSTANCE_CULLING_OCCLUSION_QUERIES: 0u;
437 Parameters.Flags |= bHasPixelAnimation ? PRIMITIVE_SCENE_DATA_FLAG_HAS_PIXEL_ANIMATION : 0u;
438 Parameters.Flags |= bRayTracingFarField ? PRIMITIVE_SCENE_DATA_FLAG_RAYTRACING_FAR_FIELD : 0u;
439 Parameters.Flags |= bRayTracingHasGroupId ? PRIMITIVE_SCENE_DATA_FLAG_RAYTRACING_HAS_GROUPID : 0u;
440 Parameters.Flags |= bHasPerClusterDisplacementFallbackRaster ? PRIMITIVE_SCENE_DATA_FLAG_PER_CLUSTER_DISPLACEMENT_FALLBACK_RASTER : 0u;
441 Parameters.Flags |= bIsFirstPerson ? PRIMITIVE_SCENE_DATA_FLAG_IS_FIRST_PERSON : 0u;
442
443 Parameters.VisibilityFlags = 0;
444 Parameters.VisibilityFlags |= bCastHiddenShadow ? PRIMITIVE_VISIBILITY_FLAG_CAST_HIDDEN_SHADOW : 0u;
445 Parameters.VisibilityFlags |= bVisibleInGame ? PRIMITIVE_VISIBILITY_FLAG_VISIBLE_IN_GAME : 0u;
446 #if WITH_EDITOR
447 Parameters.VisibilityFlags |= bVisibleInEditor ? PRIMITIVE_VISIBILITY_FLAG_VISIBLE_IN_EDITOR : 0u;
448 #endif
449 Parameters.VisibilityFlags |= bVisibleInMainPass ? PRIMITIVE_VISIBILITY_FLAG_VISIBLE_IN_MAIN_PASS : 0u;
450 Parameters.VisibilityFlags |= bVisibleInReflectionCaptures ? PRIMITIVE_VISIBILITY_FLAG_VISIBLE_IN_REFLECTION_CAPTURES : 0u;
451 Parameters.VisibilityFlags |= bVisibleInRealTimeSkyCaptures ? PRIMITIVE_VISIBILITY_FLAG_VISIBLE_IN_REAL_TIME_SKY_CAPTURES : 0u;
452 Parameters.VisibilityFlags |= bVisibleInRayTracing ? PRIMITIVE_VISIBILITY_FLAG_VISIBLE_IN_RAY_TRACING : 0u;
453 Parameters.VisibilityFlags |= bVisibleInLumenScene ? PRIMITIVE_VISIBILITY_FLAG_VISIBLE_IN_LUMEN_SCENE : 0u;
454 Parameters.VisibilityFlags |= bVisibleInSceneCaptureOnly ? PRIMITIVE_VISIBILITY_FLAG_VISIBLE_IN_SCENE_CAPTURE_ONLY : 0u;
455 Parameters.VisibilityFlags |= bHiddenInSceneCapture ? PRIMITIVE_VISIBILITY_FLAG_HIDDEN_IN_SCENE_CAPTURE : 0u;
456 Parameters.VisibilityFlags |= bForceHidden ? PRIMITIVE_VISIBILITY_FLAG_FORCE_HIDDEN : 0u;
457
458 return Parameters;
459 }
460
461private:
463
464 FMatrix AbsoluteLocalToWorld;
465 FMatrix AbsolutePreviousLocalToWorld;
466 FVector AbsoluteObjectWorldPosition;
467 FVector AbsoluteActorWorldPosition;
468
469 float ObjectRadius;
470
471 uint32 LightingChannels : 3;
472 uint32 bReceivesDecals : 1;
473 uint32 bUseSingleSampleShadowFromStationaryLights : 1;
474 uint32 bUseVolumetricLightmap : 1;
475 uint32 bOutputVelocity : 1;
476 uint32 bEvaluateWorldPositionOffset : 1;
477 uint32 bCastShadow : 1;
478 uint32 bCastContactShadow : 1;
479 uint32 bCastHiddenShadow : 1;
480 uint32 bHasRayTracingRepresentation : 1;
481 uint32 bHasCapsuleRepresentation : 1;
482 uint32 bHasPreSkinnedLocalBounds : 1;
483 uint32 bHasInstanceLocalBounds : 1;
484 uint32 bHasCustomData : 1;
485 uint32 bHasPreviousLocalToWorld : 1;
486 uint32 bVisibleInGame : 1;
487 uint32 bVisibleInEditor : 1;
488 uint32 bVisibleInMainPass : 1;
489 uint32 bVisibleInReflectionCaptures : 1;
490 uint32 bVisibleInRealTimeSkyCaptures : 1;
491 uint32 bVisibleInRayTracing : 1;
492 uint32 bVisibleInLumenScene : 1;
493 uint32 bVisibleInSceneCaptureOnly : 1;
494 uint32 bHiddenInSceneCapture : 1;
495 uint32 bForceHidden : 1;
496 uint32 bHasNaniteImposter : 1;
497 uint32 bHasInstanceDrawDistanceCull : 1;
498 uint32 bHasWPODisableDistance : 1;
499 uint32 bHasAlwaysEvaluateWPOMaterials : 1;
500 uint32 bReverseCulling: 1;
501 uint32 bHoldout : 1;
502 uint32 bDisableMaterialInvalidations : 1;
503 uint32 bSplineMesh : 1;
504 uint32 bSkinnedMesh : 1;
505 uint32 bAllowInstanceCullingOcclusionQueries : 1;
506 uint32 bHasPixelAnimation : 1;
507 uint32 bRayTracingFarField : 1;
508 uint32 bRayTracingHasGroupId : 1;
509 uint32 bHasPerClusterDisplacementFallbackRaster : 1;
510 uint32 bIsFirstPerson : 1;
511};
#define check(expr)
Definition AssertionMacros.h:314
@ INDEX_NONE
Definition CoreMiscDefines.h:150
#define TEXT(x)
Definition Platform.h:1272
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
uint8 GetDefaultLightingChannelMask()
Definition EngineTypes.h:592
UE::Math::TIntVector2< uint32 > FUintVector2
Definition MathFwd.h:103
UE::Math::TVector2< float > FVector2f
Definition MathFwd.h:74
UE::Math::TVector< float > FVector3f
Definition MathFwd.h:73
UE::Math::TVector4< float > FVector4f
Definition MathFwd.h:75
UE::Math::TMatrix< float > FMatrix44f
Definition MathFwd.h:77
EStencilMask
Definition RHIDefinitions.h:428
@ SM_255
Definition RHIDefinitions.h:430
@ SM_1
Definition RHIDefinitions.h:431
@ SM_Default
Definition RHIDefinitions.h:429
#define UE_KINDA_SMALL_NUMBER
Definition UnrealMathUtility.h:131
uint8_t uint8
Definition binka_ue_file_header.h:8
uint32_t uint32
Definition binka_ue_file_header.h:6
Definition IConsoleManager.h:1721
T GetValueOnAnyThread(bool bForceGameThread=false) const
Definition IConsoleManager.h:1753
@ Z
Definition Axis.h:15
Definition SplineMeshSceneResources.cpp:56
Definition Color.h:486
UE_FORCEINLINE_HINT uint32 ToPackedRGBA() const
Definition Color.h:735
Definition SceneTypes.h:30
static constexpr int32 NumCustomPrimitiveDataFloats
Definition SceneTypes.h:39
static CORE_API FMatrix MakeToRelativeWorldMatrixDouble(const FVector Origin, const FMatrix &ToWorld)
Definition DoubleFloat.cpp:32
static CORE_API FMatrix MakeClampedToRelativeWorldMatrixDouble(const FVector Origin, const FMatrix &ToWorld)
Definition DoubleFloat.cpp:42
Definition DoubleFloat.h:75
Definition Color.h:48
static constexpr UE_FORCEINLINE_HINT T Max3(const T A, const T B, const T C)
Definition UnrealMathUtility.h:551
static UE_FORCEINLINE_HINT void * Memzero(void *Dest, SIZE_T Count)
Definition UnrealMemory.h:131
static UE_FORCEINLINE_HINT void * Memcpy(void *Dest, const void *Src, SIZE_T Count)
Definition UnrealMemory.h:160
Definition PrimitiveUniformShaderParametersBuilder.h:18
PRIMITIVE_UNIFORM_BUILDER_METHOD(uint32, LightmapDataIndex)
FPrimitiveUniformShaderParametersBuilder & CustomDepthStencil(uint8 StencilValue, EStencilMask StencilWriteMask)
Definition PrimitiveUniformShaderParametersBuilder.h:293
PRIMITIVE_UNIFORM_BUILDER_METHOD(float, AnimationMinScreenSize)
PRIMITIVE_UNIFORM_BUILDER_FLAG_METHOD(bool, RayTracingFarField)
FPrimitiveUniformShaderParametersBuilder & InstanceLocalBounds(const FRenderBounds &InInstanceLocalBounds)
Definition PrimitiveUniformShaderParametersBuilder.h:227
PRIMITIVE_UNIFORM_BUILDER_FLAG_METHOD(bool, VisibleInMainPass)
ENGINE_API FPrimitiveUniformShaderParametersBuilder & InstanceDrawDistance(FVector2f DistanceMinMax)
Definition PrimitiveUniformShaderParameters.cpp:13
const FPrimitiveUniformShaderParameters & Build()
Definition PrimitiveUniformShaderParametersBuilder.h:322
PRIMITIVE_UNIFORM_BUILDER_FLAG_METHOD(bool, HasPerClusterDisplacementFallbackRaster)
PRIMITIVE_UNIFORM_BUILDER_FLAG_METHOD(bool, HasInstanceLocalBounds)
PRIMITIVE_UNIFORM_BUILDER_METHOD(uint32, MaterialCacheDescriptor)
FPrimitiveUniformShaderParametersBuilder & PreSkinnedLocalBounds(const FBoxSphereBounds &InPreSkinnedLocalBounds)
Definition PrimitiveUniformShaderParametersBuilder.h:207
FPrimitiveUniformShaderParametersBuilder & LocalBounds(const FBoxSphereBounds &InLocalBounds)
Definition PrimitiveUniformShaderParametersBuilder.h:200
PRIMITIVE_UNIFORM_BUILDER_METHOD(uint32, InstancePayloadDataOffset)
ENGINE_API FPrimitiveUniformShaderParametersBuilder & PixelProgrammableDistance(float PixelProgrammableDistance)
Definition PrimitiveUniformShaderParameters.cpp:30
FPrimitiveUniformShaderParametersBuilder & Defaults()
Definition PrimitiveUniformShaderParametersBuilder.h:20
ENGINE_API FPrimitiveUniformShaderParametersBuilder & NaniteAssemblyInfo(uint32 TransformOffset, uint32 TransformCount)
Definition PrimitiveUniformShaderParameters.cpp:38
FPrimitiveUniformShaderParametersBuilder & MaxWorldPositionOffsetExtent(float InMaxExtent)
Definition PrimitiveUniformShaderParametersBuilder.h:169
PRIMITIVE_UNIFORM_BUILDER_FLAG_METHOD(bool, UseVolumetricLightmap)
PRIMITIVE_UNIFORM_BUILDER_METHOD(uint32, NaniteRayTracingDataOffset)
PRIMITIVE_UNIFORM_BUILDER_METHOD(uint32, InstancePayloadDataStride)
PRIMITIVE_UNIFORM_BUILDER_METHOD(float, MaterialDisplacementFadeOutSize)
PRIMITIVE_UNIFORM_BUILDER_METHOD(uint32, LightmapUVIndex)
PRIMITIVE_UNIFORM_BUILDER_FLAG_METHOD(bool, ReverseCulling)
PRIMITIVE_UNIFORM_BUILDER_FLAG_METHOD(bool, ForceHidden)
PRIMITIVE_UNIFORM_BUILDER_METHOD(int32, PersistentPrimitiveIndex)
ENGINE_API FPrimitiveUniformShaderParametersBuilder & InstanceWorldPositionOffsetDisableDistance(float WPODisableDistance)
Definition PrimitiveUniformShaderParameters.cpp:21
PRIMITIVE_UNIFORM_BUILDER_FLAG_METHOD(bool, RayTracingHasGroupId)
PRIMITIVE_UNIFORM_BUILDER_FLAG_METHOD(bool, HiddenInSceneCapture)
PRIMITIVE_UNIFORM_BUILDER_FLAG_METHOD(bool, CastContactShadow)
PRIMITIVE_UNIFORM_BUILDER_METHOD(uint32, NaniteResourceID)
PRIMITIVE_UNIFORM_BUILDER_METHOD(int32, SingleCaptureIndex)
FPrimitiveUniformShaderParametersBuilder & EditorColors(const FLinearColor &InWireframeColor, const FLinearColor &InPrimitiveColor)
Definition PrimitiveUniformShaderParametersBuilder.h:242
PRIMITIVE_UNIFORM_BUILDER_FLAG_METHOD(bool, CastHiddenShadow)
PRIMITIVE_UNIFORM_BUILDER_FLAG_METHOD(bool, EvaluateWorldPositionOffset)
PRIMITIVE_UNIFORM_BUILDER_FLAG_METHOD(bool, SkinnedMesh)
PRIMITIVE_UNIFORM_BUILDER_FLAG_METHOD(bool, CastShadow)
PRIMITIVE_UNIFORM_BUILDER_FLAG_METHOD(bool, HasRayTracingRepresentation)
PRIMITIVE_UNIFORM_BUILDER_FLAG_METHOD(bool, VisibleInReflectionCaptures)
PRIMITIVE_UNIFORM_BUILDER_METHOD(uint32, NumInstanceSceneDataEntries)
FPrimitiveUniformShaderParametersBuilder & CustomPrimitiveData(const FCustomPrimitiveData *InCustomPrimitiveData)
Definition PrimitiveUniformShaderParametersBuilder.h:250
FPrimitiveUniformShaderParametersBuilder & NaniteImposterIndex(uint32 ImposterIndex)
Definition PrimitiveUniformShaderParametersBuilder.h:275
PRIMITIVE_UNIFORM_BUILDER_METHOD(uint32, NaniteHierarchyOffset)
PRIMITIVE_UNIFORM_BUILDER_FLAG_METHOD(bool, VisibleInRealTimeSkyCaptures)
PRIMITIVE_UNIFORM_BUILDER_FLAG_METHOD(bool, OutputVelocity)
FPrimitiveUniformShaderParametersBuilder & LightingChannelMask(uint32 InLightingChannelMask)
Definition PrimitiveUniformShaderParametersBuilder.h:163
FPrimitiveUniformShaderParametersBuilder & MinMaxMaterialDisplacement(const FVector2f &InMinMaxDisplacement)
Definition PrimitiveUniformShaderParametersBuilder.h:175
FPrimitiveUniformShaderParametersBuilder & PreviousLocalToWorld(const FMatrix &InPreviousLocalToWorld)
Definition PrimitiveUniformShaderParametersBuilder.h:235
PRIMITIVE_UNIFORM_BUILDER_METHOD(uint32, InstancePayloadExtensionSize)
PRIMITIVE_UNIFORM_BUILDER_FLAG_METHOD(bool, ReceivesDecals)
PRIMITIVE_UNIFORM_BUILDER_FLAG_METHOD(bool, HasAlwaysEvaluateWPOMaterials)
PRIMITIVE_UNIFORM_BUILDER_FLAG_METHOD(bool, VisibleInEditor)
PRIMITIVE_UNIFORM_BUILDER_FLAG_METHOD(bool, IsFirstPerson)
PRIMITIVE_UNIFORM_BUILDER_FLAG_METHOD(bool, VisibleInSceneCaptureOnly)
PRIMITIVE_UNIFORM_BUILDER_METHOD(FUintVector2, MeshPaintTextureDescriptor)
PRIMITIVE_UNIFORM_BUILDER_FLAG_METHOD(bool, HasPixelAnimation)
PRIMITIVE_UNIFORM_BUILDER_FLAG_METHOD(bool, SplineMesh)
PRIMITIVE_UNIFORM_BUILDER_FLAG_METHOD(bool, DisableMaterialInvalidations)
PRIMITIVE_UNIFORM_BUILDER_FLAG_METHOD(bool, UseSingleSampleShadowFromStationaryLights)
PRIMITIVE_UNIFORM_BUILDER_FLAG_METHOD(bool, VisibleInRayTracing)
PRIMITIVE_UNIFORM_BUILDER_FLAG_METHOD(bool, VisibleInGame)
PRIMITIVE_UNIFORM_BUILDER_METHOD(uint32, PrimitiveComponentId)
PRIMITIVE_UNIFORM_BUILDER_FLAG_METHOD(bool, HasCapsuleRepresentation)
PRIMITIVE_UNIFORM_BUILDER_FLAG_METHOD(bool, AllowInstanceCullingOcclusionQueries)
FPrimitiveUniformShaderParametersBuilder & NaniteFilterFlags(uint32 FilterFlags)
Definition PrimitiveUniformShaderParametersBuilder.h:285
FPrimitiveUniformShaderParametersBuilder & ActorWorldPosition(const FVector &InActorWorldPosition)
Definition PrimitiveUniformShaderParametersBuilder.h:215
PRIMITIVE_UNIFORM_BUILDER_METHOD(uint32, InstanceSceneDataOffset)
PRIMITIVE_UNIFORM_BUILDER_FLAG_METHOD(bool, VisibleInLumenScene)
FPrimitiveUniformShaderParametersBuilder & WorldBounds(const FBoxSphereBounds &InWorldBounds)
Definition PrimitiveUniformShaderParametersBuilder.h:190
FPrimitiveUniformShaderParametersBuilder & ObjectBounds(const FVector3f &InObjectBounds)
Definition PrimitiveUniformShaderParametersBuilder.h:182
FPrimitiveUniformShaderParametersBuilder & LocalToWorld(const FMatrix &InLocalToWorld)
Definition PrimitiveUniformShaderParametersBuilder.h:221
Definition RenderTransform.h:272
TConsoleVariableData< int32 > * FindTConsoleVariableDataInt(const TCHAR *Name) const
Definition IConsoleManager.h:1203
static IConsoleManager & Get()
Definition IConsoleManager.h:1270
Definition LargeWorldRenderPosition.h:95
Definition BoxSphereBounds.h:25
TMatrix< T > Inverse() const
Definition Matrix.inl:384
TVector< T > GetOrigin() const
Definition Matrix.inl:641
T Size() const
Definition Vector.h:1716