UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
HairStrandsData.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3/*=============================================================================
4 HairRendering.h: Hair rendering implementation.
5=============================================================================*/
6
7#pragma once
8
9#include "CoreMinimal.h"
10#include "RendererInterface.h"
12#include "RHIGPUReadback.h"
13#include "Shader.h"
14#include "ConvexVolume.h"
15#include "HairStrandsDefinitions.h"
17
18class FLightSceneInfo;
20class FViewInfo;
21class FScene;
24struct FMeshBatch;
26
28// HairStrands uniform buffer
29
31 SHADER_PARAMETER(FIntPoint, HairTileCountXY) // Tile count in X/Y
32 SHADER_PARAMETER(uint32, MaxSamplePerPixelCount) // Max number of sample per pixel
33 SHADER_PARAMETER(float, HairDualScatteringRoughnessOverride) // Override the roughness used for dual scattering (for hack/test purpose only)
34 SHADER_PARAMETER(FIntPoint, HairSampleViewportResolution) // Maximum viewport resolution of the sample space
35 SHADER_PARAMETER(uint32, bHairTileValid) // True if tile data are valid
36 SHADER_PARAMETER(FVector4f, HairOnlyDepthHZBParameters) // HZB parameters
37 SHADER_PARAMETER_RDG_TEXTURE(Texture2D<float>, HairCoverageTexture) // Hair pixel's coverage
38 SHADER_PARAMETER_RDG_TEXTURE(Texture2D, HairOnlyDepthTexture) // Depth texture containing only hair depth (not strongly typed for legacy shader code reason)
39 SHADER_PARAMETER_RDG_TEXTURE(Texture2D, HairOnlyDepthClosestHZBTexture) // HZB closest depth texture containing only hair depth (not strongly typed for legacy shader code reason)
40 SHADER_PARAMETER_RDG_TEXTURE(Texture2D, HairOnlyDepthFurthestHZBTexture) // HZB furthest depth texture containing only hair depth (not strongly typed for legacy shader code reason)
42 SHADER_PARAMETER_RDG_TEXTURE(Texture2D<uint>, HairSampleOffset) // Offset & count, for accessing pixel's samples, based on screen pixel position
43 SHADER_PARAMETER_RDG_BUFFER_SRV(StructuredBuffer<uint>, HairSampleCount) // Total count of hair sample, in sample space
44 SHADER_PARAMETER_RDG_BUFFER_SRV(StructuredBuffer<FPackedHairSample>, HairSampleData)// Sample data (coverage, tangent, base color, ...), in sample space // HAIRSTRANDS_TODO: change this to be a uint4 so that we don't have to include the type for generated contant buffer
45 SHADER_PARAMETER_RDG_BUFFER_SRV(Buffer<uint2>, HairSampleCoords) // Screen pixel coordinate of each sample, in sample space
47 SHADER_PARAMETER_RDG_BUFFER_SRV(Buffer<uint>, HairTileCount) // Tile total count (actual number of tiles)
49
50
55
57// Tile data
58
60{
61 enum class ETileType : uint8 { HairAll, HairFull, HairPartial, Other, Count };
62 static const uint32 TileTypeCount = uint32(ETileType::Count);
63
64 FIntPoint BufferResolution = FIntPoint(0, 0);
65 static const uint32 GroupSize = 64;
66 static const uint32 TileSize = 8;
67 static const uint32 TilePerThread_GroupSize = 64;
68 uint32 TileCount = 0;
69 FIntPoint TileCountXY = FIntPoint(0, 0);
70 bool bRectPrimitive = false;
71
72 // Buffers per tile types
73 FRDGBufferSRVRef TileDataSRV[TileTypeCount] = { nullptr, nullptr };
74 FRDGBufferRef TileDataBuffer[TileTypeCount] = { nullptr, nullptr };
75
76 // Buffer shared for all tile types
77 FRDGBufferSRVRef TileCountSRV = nullptr;
78 FRDGBufferRef TileCountBuffer = nullptr;
79
80 FRDGBufferRef TileIndirectDrawBuffer = nullptr;
81 FRDGBufferRef TileIndirectDispatchBuffer = nullptr;
82 FRDGBufferRef TileIndirectRayDispatchBuffer = nullptr;
83 FRDGBufferRef TilePerThreadIndirectDispatchBuffer = nullptr;
84
88
89 bool IsValid() const { return TileCount > 0 && TileDataBuffer[uint32(ETileType::HairAll)] != nullptr; }
90 FRDGBufferRef GetTileBuffer(ETileType Type) const { const uint32 Index = uint32(Type); check(TileDataBuffer[Index] != nullptr); return TileDataBuffer[Index];}
91 FRDGBufferSRVRef GetTileBufferSRV(ETileType Type) const { const uint32 Index = uint32(Type); check(TileDataSRV[Index] != nullptr); return TileDataSRV[Index];}
92};
95
97// Visibility Data
98
100{
107
110
112
113 uint32 MaxSampleCount = 8; // Sample count per pixel
114 uint32 MaxNodeCount = 0; // Total sample count
123
129
131
134
135 // Hair lighting is accumulated within this buffer
136 // Allocated conservatively
137 // User indirect dispatch for accumulating contribution
140};
141
143// Voxel data
144
146{
147 // This is just a placeholder having the correct size. The actual definition is in HairStradsNVoxelPageCommon.ush
149 const static uint32 ComponentCount = 2;
150
151 // Shader View is struct { uint4; uint4; }
156};
157
158// PixelRadiusAtDepth1 shouldn't be stored into this structure should be view independent,
159// but is put here for convenience at the moment since multiple views are not supported
160// at the moment
165 SHADER_PARAMETER(uint32, PageCount)
166 SHADER_PARAMETER(uint32, PageResolution)
172
179
183
188
192
194 SHADER_PARAMETER(FVector3f, TranslatedWorldOffsetStereoCorrection) // PreViewTranslation correction between View0 & View1 when rendering stereo
195
197
200 SHADER_PARAMETER_RDG_BUFFER_SRV(Buffer<uint>, PageIndexCoordBuffer)
201 SHADER_PARAMETER_RDG_BUFFER_SRV(StructuredBuffer<FPackedVirtualVoxelNodeDesc>, NodeDescBuffer) // Packed into 2 x uint4
202
205
207
212
214{
217 FRDGTextureRef PageTexture = nullptr;
218 FRDGBufferRef PageIndexBuffer = nullptr;
219 FRDGBufferRef NodeDescBuffer = nullptr;
220 FRDGBufferRef PageIndexCoordBuffer = nullptr;
221 FRDGBufferRef IndirectArgsBuffer = nullptr;
222 FRDGBufferRef PageIndexGlobalCounter = nullptr;
223
224 const bool IsValid() const { return UniformBuffer != nullptr && PageTexture != nullptr && NodeDescBuffer != nullptr; }
225};
226
227
229// Deep shadow data
230
232{
233 float Primary = 1;
234 float Velocity = 1;
235 float Stable = 1;
236};
237
255
257
259{
260 // Limit the number of atlas slot to 32, in order to create the view info per slot in single compute
261 // This limitation can be alleviate, and is just here for convenience (see FDeepShadowCreateViewInfoCS)
262 static const uint32 MaxAtlasSlotCount = 32u;
263
266
270};
271
273// Cluster data
274
275// A groom component contains one or several HairGroup. These hair group are send to the
276// render as mesh batches. These meshes batches are filtered/culled per view, and regroup
277// into HairMacroGroup for computing voxelization/DOM data, ...
278//
279// The hierarchy of the data structure is as follow:
280// * HairMacroGroup
281// * HairGroup
282// * HairCluster
283
285{
287 FRDGBufferRef MacroGroupAABBsBuffer = nullptr; // Tight bounding boxes
288 FRDGBufferRef MacroGroupVoxelAlignedAABBsBuffer = nullptr; // Contents of MacroGroupAABBsBuffer, but snapped to the voxel page boundaries
290};
291
293
296{
297 static const uint32 MaxMacroGroupCount = 16u; // Needs to be kept consistent with MAX_HAIR_MACROGROUP_COUNT (HairStrandsVisibilityCommon.ush)
298
299 // List of primitive/mesh batch within an instance group
301 {
302 const FMeshBatch* Mesh = nullptr;
307 uint32 Flags = 0; // Hair instance flags
309 bool IsCullingEnable() const;
310 };
312
318 uint32 Flags = 0; // Aggregated flags for all instances from the group
319
320 bool bSupportVoxelization = false; // true if at least one of the Primitive requires voxelization
321};
322
324// Debug data
325
327{
336
345
346 // Plot Data
356
357 struct Sample
358 {
360 float Pdf;
362 float Pad;
363 };
364 static const uint32 MaxShadingPointCount = 32;
365 static const uint32 MaxSampleCount = 1024 * 32;
366
374
379
380 static FPlotData CreatePlotData(FRDGBuilder& GraphBuilder);
381 static void SetParameters(FRDGBuilder& GraphBuilder, const FPlotData& In, FWriteParameters& Out);
382 static void SetParameters(FRDGBuilder& GraphBuilder, const FPlotData& In, FReadParameters& Out);
383
384 // PPLL debug data
391
396
397 // Instance cull data
422
427
428};
429
431
433// View Data
453
454// View State data (i.e., persistent across frame)
456{
457 bool IsInit() const { return PositionsChangedDatas.Num() > 0; }
458 void Init();
459 void Release();
460
461 // Buffer used for reading back the number of allocated voxels on the GPU
463
464 // Buffer used for reading back hair strands position changed on the GPU
473};
474
475namespace HairStrands
476{
480
481 bool HasViewHairStrandsData(const FViewInfo& View);
482 bool HasViewHairStrandsData(const TArray<FViewInfo>& Views);
483 bool HasViewHairStrandsVoxelData(const FViewInfo& View);
484
485 bool HasPositionsChanged(FRDGBuilder& GraphBuilder, const FScene& Scene, const FViewInfo& View);
487 void DrawEditorSelection(FRDGBuilder& GraphBuilder, const FViewInfo& View, const FIntRect& ViewportRect, FRDGTextureRef SelectionDepthTexture);
488
489 // Mesh batch helpers
491 bool IsHairCompatible(const FMeshBatch* Mesh);
492 bool IsHairStrandsVF(const FMeshBatch* Mesh);
493 bool IsHairCardsVF(const FMeshBatch* Mesh);
495
496 // Hair helpers
498 bool HasHairCardsVisible(const TArray<FViewInfo>& Views);
499 bool HasHairStrandsVisible(const TArray<FViewInfo>& Views);
500
501 void AddVisibleShadowCastingLight(const FScene& Scene, TArray<FViewInfo>& Views, const FLightSceneInfo* LightSceneInfo);
502
503 void PostRender(FScene& Scene);
504}
#define FORCEINLINE
Definition AndroidPlatform.h:140
#define check(expr)
Definition AssertionMacros.h:314
FPlatformTypes::TCHAR TCHAR
Either ANSICHAR or WIDECHAR, depending on whether the platform supports wide characters or the requir...
Definition Platform.h:1135
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
void GetHairStrandsInstanceResources(FRDGBuilder &GraphBuilder, const FViewInfo &ViewInfo, const FHairGroupPublicData *HairGroupPublicData, bool bForceRegister, FHairStrandsInstanceResourceParameters &OutResources)
Definition HairStrandsVisibility.cpp:3211
TArray< FHairStrandsMacroGroupData, SceneRenderingAllocator > FHairStrandsMacroGroupDatas
Definition HairStrandsData.h:430
void GetHairStrandsInstanceCulling(FRDGBuilder &GraphBuilder, const FViewInfo &ViewInfo, const FHairGroupPublicData *HairGroupPublicData, bool bCullingEnable, FHairStrandsInstanceCullingParameters &OutCulling)
Definition HairStrandsVisibility.cpp:3240
TArray< FHairStrandsDeepShadowData, SceneRenderingAllocator > FHairStrandsDeepShadowDatas
Definition HairStrandsData.h:256
FHairStrandsInstanceParameters GetHairStrandsInstanceParameters(FRDGBuilder &GraphBuilder, const FViewInfo &ViewInfo, const FHairGroupPublicData *HairGroupPublicData, bool bCullingEnable, bool bForceRegister)
Definition HairStrandsVisibility.cpp:3256
void GetHairStrandsInstanceCommon(FRDGBuilder &GraphBuilder, const FViewInfo &ViewInfo, const FHairGroupPublicData *HairGroupPublicData, FHairStrandsInstanceCommonParameters &OutCommon)
Definition HairStrandsVisibility.cpp:3194
FORCEINLINE uint32 ToIndex(FHairStrandsTiles::ETileType Type)
Definition HairStrandsData.h:93
FInt32Point FIntPoint
Definition MathFwd.h:124
EPixelFormat
Definition PixelFormat.h:16
@ PF_R16F
Definition PixelFormat.h:38
@ PF_R16G16_UINT
Definition PixelFormat.h:66
@ PF_R32G32B32A32_UINT
Definition PixelFormat.h:65
#define SHADER_PARAMETER_RDG_BUFFER_SRV(ShaderType, MemberName)
Definition ShaderParameterMacros.h:1800
#define SHADER_PARAMETER_RDG_TEXTURE(ShaderType, MemberName)
Definition ShaderParameterMacros.h:1752
#define END_GLOBAL_SHADER_PARAMETER_STRUCT
Definition ShaderParameterMacros.h:1669
#define SHADER_PARAMETER_SAMPLER(ShaderType, MemberName)
Definition ShaderParameterMacros.h:1740
#define SHADER_PARAMETER_RDG_BUFFER_UAV(ShaderType, MemberName)
Definition ShaderParameterMacros.h:1812
#define BEGIN_SHADER_PARAMETER_STRUCT(StructTypeName, DllStorage)
Definition ShaderParameterMacros.h:1482
#define BEGIN_GLOBAL_SHADER_PARAMETER_STRUCT
Definition ShaderParameterMacros.h:1663
#define SHADER_PARAMETER_STRUCT_INCLUDE(StructType, MemberName)
Definition ShaderParameterMacros.h:1895
#define END_SHADER_PARAMETER_STRUCT()
Definition ShaderParameterMacros.h:1485
#define SHADER_PARAMETER(MemberType, MemberName)
Definition ShaderParameterMacros.h:1684
uint8_t uint8
Definition binka_ue_file_header.h:8
uint32_t uint32
Definition binka_ue_file_header.h:6
Definition HairStrandsInterface.h:227
Definition InstanceCullingManager.h:45
Definition LightSceneInfo.h:208
Definition PrimitiveSceneProxy.h:296
Definition RenderGraphResources.h:1426
Definition RenderGraphResources.h:1321
Definition RenderGraphBuilder.h:49
Definition RenderGraphResources.h:571
Definition RHIGPUReadback.h:116
Definition ScenePrivate.h:2875
Definition SceneRendering.h:1132
Definition Array.h:670
Definition RenderGraphResources.h:251
Definition RefCounting.h:454
FString ToString(uint16 Value)
Definition PathFollowingComponent.cpp:82
Definition HairStrandsData.h:476
bool HasHairInstanceInScene(const FScene &Scene)
Definition HairStrandsRendering.cpp:367
bool IsHairVisible(const FMeshBatchAndRelevance &MeshBatch, bool bCheckLengthScale)
Definition HairStrandsInterface.cpp:595
bool IsHairCardsVF(const FMeshBatch *Mesh)
Definition HairStrandsInterface.cpp:579
FHairGroupPublicData * GetHairData(const FMeshBatch *In)
Definition HairStrandsInterface.cpp:610
TRDGUniformBufferRef< FVirtualVoxelParameters > BindHairStrandsVoxelUniformParameters(const FViewInfo &View)
Definition HairStrandsRendering.cpp:314
void DrawHitProxies(FRDGBuilder &GraphBuilder, const FScene &Scene, const FViewInfo &View, FInstanceCullingManager &InstanceCullingManager, FRDGTextureRef HitProxyTexture, FRDGTextureRef HitProxyDepthTexture)
Definition HairStrandsVisibility.cpp:4400
void DrawEditorSelection(FRDGBuilder &GraphBuilder, const FViewInfo &View, const FIntRect &ViewportRect, FRDGTextureRef SelectionDepthTexture)
Definition HairStrandsVisibility.cpp:4384
bool HasHairStrandsVisible(const TArray< FViewInfo > &Views)
Definition HairStrandsRendering.cpp:343
bool HasViewHairStrandsVoxelData(const FViewInfo &View)
Definition HairStrandsRendering.cpp:326
TRDGUniformBufferRef< FHairStrandsViewUniformParameters > CreateDefaultHairStrandsViewUniformBuffer(FRDGBuilder &GraphBuilder, FViewInfo &View)
Definition HairStrandsRendering.cpp:304
void AddVisibleShadowCastingLight(const FScene &Scene, TArray< FViewInfo > &Views, const FLightSceneInfo *LightSceneInfo)
Definition HairStrandsInterface.cpp:615
bool HasViewHairStrandsData(const FViewInfo &View)
Definition HairStrandsRendering.cpp:321
bool HasPositionsChanged(FRDGBuilder &GraphBuilder, const FScene &Scene, const FViewInfo &View)
Definition HairStrandsVisibility.cpp:4583
bool IsHairCompatible(const FMeshBatch *Mesh)
Definition HairStrandsInterface.cpp:590
TRDGUniformBufferRef< FHairStrandsViewUniformParameters > BindHairStrandsViewUniformParameters(const FViewInfo &View)
Definition HairStrandsRendering.cpp:309
void PostRender(FScene &Scene)
Definition HairStrandsRendering.cpp:372
bool HasHairCardsVisible(const TArray< FViewInfo > &Views)
Definition HairStrandsRendering.cpp:355
bool IsHairStrandsVF(const FMeshBatch *Mesh)
Definition HairStrandsInterface.cpp:568
U16 Index
Definition radfft.cpp:71
Definition ConvexVolume.h:44
Definition HairStrandsData.h:424
FRDGTextureRef SceneDepthTextureBeforeCompsition
Definition HairStrandsData.h:425
Definition HairStrandsData.h:401
FVector3f Max
Definition HairStrandsData.h:403
FVector3f Min
Definition HairStrandsData.h:402
Definition HairStrandsData.h:407
FMatrix WorldToLight
Definition HairStrandsData.h:408
FMatrix LightToWorld
Definition HairStrandsData.h:409
TArray< uint32 > InstanceIntersection
Definition HairStrandsData.h:415
TArray< FBound > InstanceBoundInLightSpace
Definition HairStrandsData.h:413
FVector3f Center
Definition HairStrandsData.h:410
FVector3f Extent
Definition HairStrandsData.h:411
FConvexVolume ViewFrustumInLightSpace
Definition HairStrandsData.h:412
TArray< FBound > InstanceBoundInWorldSpace
Definition HairStrandsData.h:414
Definition HairStrandsData.h:399
FConvexVolume ViewFrustum
Definition HairStrandsData.h:420
TArray< FLight > DirectionalLights
Definition HairStrandsData.h:419
bool bIsValid
Definition HairStrandsData.h:418
Definition HairStrandsData.h:386
FRDGTextureRef NodeCounterTexture
Definition HairStrandsData.h:387
FRDGTextureRef NodeIndexTexture
Definition HairStrandsData.h:388
FRDGBufferRef NodeDataBuffer
Definition HairStrandsData.h:389
Definition HairStrandsData.h:368
FRDGBufferRef SampleCounter
Definition HairStrandsData.h:372
FRDGBufferRef ShadingPointCounter
Definition HairStrandsData.h:370
FRDGBufferRef ShadingPointBuffer
Definition HairStrandsData.h:369
FRDGBufferRef SampleBuffer
Definition HairStrandsData.h:371
Definition HairStrandsData.h:358
FVector3f Direction
Definition HairStrandsData.h:359
float Pdf
Definition HairStrandsData.h:360
float Pad
Definition HairStrandsData.h:362
FVector3f Weights
Definition HairStrandsData.h:361
Definition HairStrandsData.h:348
FVector3f BaseColor
Definition HairStrandsData.h:349
float Roughness
Definition HairStrandsData.h:350
uint32 SampleCount
Definition HairStrandsData.h:352
float SampleOffset
Definition HairStrandsData.h:354
FVector3f T
Definition HairStrandsData.h:351
FVector3f V
Definition HairStrandsData.h:353
Definition HairStrandsData.h:327
static const uint32 MaxSampleCount
Definition HairStrandsData.h:365
bool IsPlotDataValid() const
Definition HairStrandsData.h:375
static const uint32 MaxShadingPointCount
Definition HairStrandsData.h:364
static FPlotData CreatePlotData(FRDGBuilder &GraphBuilder)
Definition HairStrandsDebug.cpp:67
struct FHairStrandsDebugData::FPPLLData PPLLData
bool IsPPLLDataValid() const
Definition HairStrandsData.h:392
struct FHairStrandsDebugData::FCullData CullData
static void SetParameters(FRDGBuilder &GraphBuilder, const FPlotData &In, FReadParameters &Out)
struct FHairStrandsDebugData::FPlotData PlotData
static void SetParameters(FRDGBuilder &GraphBuilder, const FPlotData &In, FWriteParameters &Out)
struct FHairStrandsDebugData::FCommon Common
Hold deep shadow information for a given light.
Definition HairStrandsData.h:240
FBoxSphereBounds Bounds
Definition HairStrandsData.h:253
uint32 MacroGroupId
Definition HairStrandsData.h:242
uint32 AtlasSlotIndex
Definition HairStrandsData.h:243
FLinearColor LightLuminance
Definition HairStrandsData.h:250
FMinHairRadiusAtDepth1 CPU_MinStrandRadiusAtDepth1
Definition HairStrandsData.h:241
bool bIsLightDirectional
Definition HairStrandsData.h:247
uint32 LightId
Definition HairStrandsData.h:246
FIntPoint AtlasResolution
Definition HairStrandsData.h:245
FVector3f TranslatedLightPosition
Definition HairStrandsData.h:249
float LayerDistribution
Definition HairStrandsData.h:251
FVector3f LightDirection
Definition HairStrandsData.h:248
Definition HairStrandsData.h:259
uint32 TotalAtlasSlotCount
Definition HairStrandsData.h:264
FRDGTextureRef LayersAtlasTexture
Definition HairStrandsData.h:268
FIntPoint AtlasSlotResolution
Definition HairStrandsData.h:265
static const uint32 MaxAtlasSlotCount
Definition HairStrandsData.h:262
FRDGTextureRef DepthAtlasTexture
Definition HairStrandsData.h:267
FRDGBufferRef DeepShadowViewInfoBuffer
Definition HairStrandsData.h:269
Definition HairStrandsData.h:301
uint32 ResourceId
Definition HairStrandsData.h:305
uint32 GroupIndex
Definition HairStrandsData.h:306
uint32 Flags
Definition HairStrandsData.h:307
bool IsCullingEnable() const
Definition HairStrandsMacroGroup.cpp:313
uint32 MaterialId
Definition HairStrandsData.h:304
const FPrimitiveSceneProxy * PrimitiveSceneProxy
Definition HairStrandsData.h:303
FHairGroupPublicData * PublicDataPtr
Definition HairStrandsData.h:308
const FMeshBatch * Mesh
Definition HairStrandsData.h:302
Hair macro group infos.
Definition HairStrandsData.h:296
FBoxSphereBounds Bounds
Definition HairStrandsData.h:315
uint32 MacroGroupId
Definition HairStrandsData.h:317
uint32 Flags
Definition HairStrandsData.h:318
TPrimitiveInfos PrimitivesInfos
Definition HairStrandsData.h:314
static const uint32 MaxMacroGroupCount
Definition HairStrandsData.h:297
FIntRect ScreenRect
Definition HairStrandsData.h:316
bool bSupportVoxelization
Definition HairStrandsData.h:320
FHairStrandsDeepShadowDatas DeepShadowDatas
Definition HairStrandsData.h:313
TArray< PrimitiveInfo, SceneRenderingAllocator > TPrimitiveInfos
Definition HairStrandsData.h:311
Definition HairStrandsData.h:285
FRDGBufferRef MacroGroupVoxelSizeBuffer
Definition HairStrandsData.h:289
uint32 MacroGroupCount
Definition HairStrandsData.h:286
FRDGBufferRef MacroGroupAABBsBuffer
Definition HairStrandsData.h:287
FRDGBufferRef MacroGroupVoxelAlignedAABBsBuffer
Definition HairStrandsData.h:288
Definition HairStrandsData.h:60
static FORCEINLINE uint32 GetIndirectRayDispatchArgOffset(ETileType Type)
Definition HairStrandsData.h:87
ETileType
Definition HairStrandsData.h:61
static FORCEINLINE uint32 GetIndirectDrawArgOffset(ETileType Type)
Definition HairStrandsData.h:85
FRDGBufferRef GetTileBuffer(ETileType Type) const
Definition HairStrandsData.h:90
bool IsValid() const
Definition HairStrandsData.h:89
static FORCEINLINE uint32 GetIndirectDispatchArgOffset(ETileType Type)
Definition HairStrandsData.h:86
FRDGBufferSRVRef GetTileBufferSRV(ETileType Type) const
Definition HairStrandsData.h:91
Definition HairStrandsData.h:449
const FLightSceneInfo * LightInfo
Definition HairStrandsData.h:449
FConvexVolume ViewFrustumInLightSpace
Definition HairStrandsData.h:449
Definition HairStrandsData.h:435
FHairStrandsMacroGroupDatas MacroGroupDatas
Definition HairStrandsData.h:441
FHairStrandsDebugData DebugData
Definition HairStrandsData.h:445
FHairStrandsVisibilityData VisibilityData
Definition HairStrandsData.h:440
bool bIsValid
Definition HairStrandsData.h:437
uint32 Flags
Definition HairStrandsData.h:446
TArray< FDirectionalLightCullData > VisibleShadowCastingDirectionalLights
Definition HairStrandsData.h:451
TRDGUniformBufferRef< FHairStrandsViewUniformParameters > UniformBuffer
Definition HairStrandsData.h:436
FHairStrandsDeepShadowResources DeepShadowResources
Definition HairStrandsData.h:442
FHairStrandsMacroGroupResources MacroGroupResources
Definition HairStrandsData.h:444
TArray< const FLightSceneInfo * > VisibleShadowCastingLights
Definition HairStrandsData.h:450
FHairStrandsVoxelResources VirtualVoxelResources
Definition HairStrandsData.h:443
Definition HairStrandsData.h:466
bool bHasPendingReadback
Definition HairStrandsData.h:468
FRHIGPUBufferReadback * ReadbackBuffer
Definition HairStrandsData.h:467
Definition HairStrandsData.h:456
bool IsInit() const
Definition HairStrandsData.h:457
TArray< FPositionChangedData > PositionsChangedDatas
Definition HairStrandsData.h:472
bool ReadPositionsChanged()
Definition HairStrandsRendering.cpp:286
void Init()
Definition HairStrandsRendering.cpp:244
TRefCountPtr< FRDGPooledBuffer > VoxelFeedbackBuffer
Definition HairStrandsData.h:462
void Release()
Definition HairStrandsRendering.cpp:258
void EnqueuePositionsChanged(FRDGBuilder &GraphBuilder, FRDGBufferRef InBuffer)
Definition HairStrandsRendering.cpp:273
Definition HairStrandsData.h:100
FVector4f HairOnlyDepthHZBParameters
Definition HairStrandsData.h:122
FRDGTextureRef CoverageTexture
Definition HairStrandsData.h:103
uint32 MaxControlPointCount
Definition HairStrandsData.h:125
FHairStrandsTiles TileData
Definition HairStrandsData.h:130
FRDGTextureRef VelocityTexture
Definition HairStrandsData.h:101
FRDGTextureRef ResolveMaskTexture
Definition HairStrandsData.h:102
FRDGTextureRef ViewHairCountUintTexture
Definition HairStrandsData.h:105
uint32 RasterizedInstanceCount
Definition HairStrandsData.h:124
FIntPoint SampleLightingViewportResolution
Definition HairStrandsData.h:138
uint32 MaxSampleCount
Definition HairStrandsData.h:113
static const EPixelFormat CoverageFormat
Definition HairStrandsData.h:133
FRDGBufferSRVRef ControlPointCount
Definition HairStrandsData.h:127
FRDGTextureRef HairOnlyDepthFurthestHZBTexture
Definition HairStrandsData.h:109
FRDGTextureRef NodeIndex
Definition HairStrandsData.h:116
FRDGTextureRef SampleLightingTexture
Definition HairStrandsData.h:139
FRDGBufferRef NodeCount
Definition HairStrandsData.h:115
uint32 NodeGroupSize
Definition HairStrandsData.h:121
FRDGTextureRef LightChannelMaskTexture
Definition HairStrandsData.h:111
FRDGBufferSRVRef ControlPointsSRV
Definition HairStrandsData.h:126
FRDGBufferRef NodeCoord
Definition HairStrandsData.h:119
FRDGBufferRef NodeData
Definition HairStrandsData.h:117
FRDGTextureRef ViewHairCountTexture
Definition HairStrandsData.h:104
FRDGBufferRef NodeIndirectArg
Definition HairStrandsData.h:120
FRDGTextureRef HairOnlyDepthTexture
Definition HairStrandsData.h:106
static const EPixelFormat NodeCoordFormat
Definition HairStrandsData.h:132
FRDGBufferRef NodeVisData
Definition HairStrandsData.h:118
FRDGTextureRef HairOnlyDepthClosestHZBTexture
Definition HairStrandsData.h:108
uint32 MaxNodeCount
Definition HairStrandsData.h:114
FRDGBufferSRVRef ControlPointVelocitySRV
Definition HairStrandsData.h:128
Definition HairStrandsData.h:214
const bool IsValid() const
Definition HairStrandsData.h:224
TRDGUniformBufferRef< FVirtualVoxelParameters > UniformBuffer
Definition HairStrandsData.h:216
FVirtualVoxelParameters Parameters
Definition HairStrandsData.h:215
Definition Color.h:48
Definition SceneManagement.h:1462
Definition MeshBatch.h:371
Definition HairStrandsData.h:232
float Stable
Definition HairStrandsData.h:235
float Velocity
Definition HairStrandsData.h:234
float Primary
Definition HairStrandsData.h:233
Definition HairStrandsData.h:146
FVector3f MaxAABB
Definition HairStrandsData.h:154
static const uint32 ComponentCount
Definition HairStrandsData.h:149
uint32 PageIndexOffset
Definition HairStrandsData.h:155
FVector3f MinAABB
Definition HairStrandsData.h:152
static const EPixelFormat Format
Definition HairStrandsData.h:148
uint32 PackedPageIndexResolution
Definition HairStrandsData.h:153
Definition RHI.h:560
Definition RHI.h:572
Definition BoxSphereBounds.h:25
Definition IntPoint.h:25
static const TIntPoint ZeroValue
Definition IntPoint.h:45
static TVector4< float > Zero()
Definition Vector4.h:179