Files
UnrealEngine/Engine/Source/Runtime/Renderer/Private/Lumen/LumenTracingUtils.h
2025-05-18 13:04:45 +08:00

208 lines
9.3 KiB
C++

// Copyright Epic Games, Inc. All Rights Reserved.
#pragma once
#include "RHIDefinitions.h"
#include "DistanceFieldLightingShared.h"
#include "LumenSceneData.h"
#include "IndirectLightRendering.h"
#include "ReflectionEnvironment.h"
#include "FogRendering.h"
#include "SceneView.h"
#include "HZB.h"
DECLARE_UNIFORM_BUFFER_STRUCT(FSceneUniformParameters, RENDERER_API)
class FLumenCardUpdateContext;
namespace LumenRadianceCache { class FRadianceCacheInputs; }
class FHemisphereDirectionSampleGenerator
{
public:
TArray<FVector4f> SampleDirections;
float ConeHalfAngle = 0;
int32 Seed = 0;
int32 PowerOfTwoDivisor = 1;
bool bFullSphere = false;
bool bCosineDistribution = false;
void GenerateSamples(int32 TargetNumSamples, int32 InPowerOfTwoDivisor, int32 InSeed, bool bInFullSphere = false, bool bInCosineDistribution = false);
void GetSampleDirections(const FVector4f*& OutDirections, int32& OutNumDirections) const
{
OutDirections = SampleDirections.GetData();
OutNumDirections = SampleDirections.Num();
}
};
BEGIN_SHADER_PARAMETER_STRUCT(FLumenCardTracingParameters, )
SHADER_PARAMETER_STRUCT_REF(FViewUniformShaderParameters, View)
SHADER_PARAMETER_RDG_UNIFORM_BUFFER(FSceneUniformParameters, Scene)
SHADER_PARAMETER_RDG_UNIFORM_BUFFER(FReflectionUniformParameters, ReflectionStruct)
SHADER_PARAMETER_RDG_UNIFORM_BUFFER(FLumenCardScene, LumenCardScene)
SHADER_PARAMETER(float, DiffuseColorBoost)
SHADER_PARAMETER(FVector3f, SkylightLeakingColor)
SHADER_PARAMETER(float, ReflectionSkylightLeakingAverageAlbedo)
SHADER_PARAMETER(float, SkylightLeakingRoughness)
SHADER_PARAMETER(float, InvFullSkylightLeakingDistance)
SHADER_PARAMETER(float, CachedLightingPreExposure)
SHADER_PARAMETER(float, OneOverCachedLightingPreExposure)
SHADER_PARAMETER(uint32, SampleHeightFog)
SHADER_PARAMETER_RDG_UNIFORM_BUFFER(FFogUniformParameters, FogUniformParameters)
SHADER_PARAMETER_RDG_BUFFER_UAV(RWStructuredBuffer<uint>, RWCardPageLastUsedBuffer)
SHADER_PARAMETER_RDG_BUFFER_UAV(RWStructuredBuffer<uint>, RWCardPageHighResLastUsedBuffer)
SHADER_PARAMETER_RDG_BUFFER_UAV(RWStructuredBuffer<uint>, RWSurfaceCacheFeedbackBufferAllocator)
SHADER_PARAMETER_RDG_BUFFER_UAV(RWStructuredBuffer<uint2>, RWSurfaceCacheFeedbackBuffer)
SHADER_PARAMETER(uint32, SurfaceCacheFeedbackBufferSize)
SHADER_PARAMETER(uint32, SurfaceCacheFeedbackBufferTileWrapMask)
SHADER_PARAMETER(FIntPoint, SurfaceCacheFeedbackBufferTileJitter)
SHADER_PARAMETER(float, SurfaceCacheFeedbackResLevelBias)
SHADER_PARAMETER(uint32, SurfaceCacheUpdateFrameIndex)
SHADER_PARAMETER_RDG_TEXTURE(Texture2D, DirectLightingAtlas)
SHADER_PARAMETER_RDG_TEXTURE(Texture2D, IndirectLightingAtlas)
SHADER_PARAMETER_RDG_TEXTURE(Texture2D, FinalLightingAtlas)
SHADER_PARAMETER_RDG_TEXTURE(Texture2D, AlbedoAtlas)
SHADER_PARAMETER_RDG_TEXTURE(Texture2D, OpacityAtlas)
SHADER_PARAMETER_RDG_TEXTURE(Texture2D, NormalAtlas)
SHADER_PARAMETER_RDG_TEXTURE(Texture2D, EmissiveAtlas)
SHADER_PARAMETER_RDG_TEXTURE(Texture2D, DepthAtlas)
SHADER_PARAMETER_RDG_BUFFER_SRV(Buffer<uint4>, TileShadowDownsampleFactorAtlasForResampling)
SHADER_PARAMETER_RDG_BUFFER_SRV(StructuredBuffer<float4>, GlobalDistanceFieldPageObjectGridBuffer)
SHADER_PARAMETER(uint32, NumGlobalSDFClipmaps)
END_SHADER_PARAMETER_STRUCT()
extern void GetLumenCardTracingParameters(
FRDGBuilder& GraphBuilder,
const FViewInfo& View,
const FLumenSceneData& LumenSceneData,
const FLumenSceneFrameTemporaries& FrameTemporaries,
bool bSurfaceCacheFeedback,
FLumenCardTracingParameters& TracingParameters);
BEGIN_SHADER_PARAMETER_STRUCT(FLumenMeshSDFTracingParameters, )
SHADER_PARAMETER_STRUCT_INCLUDE(FDistanceFieldObjectBufferParameters, DistanceFieldObjectBuffers)
SHADER_PARAMETER_STRUCT_INCLUDE(FDistanceFieldAtlasParameters, DistanceFieldAtlas)
SHADER_PARAMETER(float, MeshSDFNotCoveredExpandSurfaceScale)
SHADER_PARAMETER(float, MeshSDFNotCoveredMinStepScale)
SHADER_PARAMETER(float, MeshSDFDitheredTransparencyStepThreshold)
END_SHADER_PARAMETER_STRUCT()
BEGIN_SHADER_PARAMETER_STRUCT(FLumenMeshSDFGridParameters, )
SHADER_PARAMETER_STRUCT_INCLUDE(FLumenMeshSDFTracingParameters, TracingParameters)
SHADER_PARAMETER_RDG_BUFFER_SRV(Buffer<uint>, NumGridCulledMeshSDFObjects)
SHADER_PARAMETER_RDG_BUFFER_SRV(Buffer<uint>, GridCulledMeshSDFObjectStartOffsetArray)
SHADER_PARAMETER_RDG_BUFFER_SRV(Buffer<uint>, GridCulledMeshSDFObjectIndicesArray)
SHADER_PARAMETER(uint32, CardGridPixelSizeShift)
SHADER_PARAMETER(FVector3f, CardGridZParams)
SHADER_PARAMETER(FIntVector, CullGridSize)
// Heightfield data
SHADER_PARAMETER_RDG_BUFFER_SRV(Buffer<uint>, NumCulledHeightfieldObjects)
SHADER_PARAMETER_RDG_BUFFER_SRV(Buffer<uint>, CulledHeightfieldObjectIndexBuffer)
SHADER_PARAMETER_RDG_BUFFER_SRV(Buffer<uint>, NumGridCulledHeightfieldObjects)
SHADER_PARAMETER_RDG_BUFFER_SRV(Buffer<uint>, GridCulledHeightfieldObjectStartOffsetArray)
SHADER_PARAMETER_RDG_BUFFER_SRV(Buffer<uint>, GridCulledHeightfieldObjectIndicesArray)
END_SHADER_PARAMETER_STRUCT()
BEGIN_SHADER_PARAMETER_STRUCT(FLumenIndirectTracingParameters, )
SHADER_PARAMETER(float, StepFactor)
SHADER_PARAMETER(float, CardTraceEndDistanceFromCamera)
SHADER_PARAMETER(float, DiffuseConeHalfAngle)
SHADER_PARAMETER(float, TanDiffuseConeHalfAngle)
SHADER_PARAMETER(float, MinSampleRadius)
SHADER_PARAMETER(float, MinTraceDistance)
SHADER_PARAMETER(float, MaxTraceDistance)
SHADER_PARAMETER(float, MaxMeshSDFTraceDistance)
SHADER_PARAMETER(float, SurfaceBias)
SHADER_PARAMETER(float, CardInterpolateInfluenceRadius)
SHADER_PARAMETER(float, SpecularFromDiffuseRoughnessStart)
SHADER_PARAMETER(float, SpecularFromDiffuseRoughnessEnd)
SHADER_PARAMETER(int32, HeightfieldMaxTracingSteps)
END_SHADER_PARAMETER_STRUCT()
BEGIN_SHADER_PARAMETER_STRUCT(FLumenDiffuseTracingParameters, )
SHADER_PARAMETER_STRUCT_INCLUDE(HybridIndirectLighting::FCommonParameters, CommonDiffuseParameters)
SHADER_PARAMETER_STRUCT_INCLUDE(FLumenIndirectTracingParameters, IndirectTracingParameters)
SHADER_PARAMETER(float, SampleWeight)
SHADER_PARAMETER_RDG_TEXTURE(Texture2D, DownsampledDepth)
SHADER_PARAMETER_RDG_TEXTURE(Texture2D, DownsampledNormal)
END_SHADER_PARAMETER_STRUCT()
BEGIN_SHADER_PARAMETER_STRUCT(FLumenHZBScreenTraceParameters, )
SHADER_PARAMETER_RDG_TEXTURE_SRV(Texture2D, PrevSceneColorTexture)
SHADER_PARAMETER_RDG_TEXTURE(Texture2D, HistorySceneDepth)
SHADER_PARAMETER_STRUCT_INCLUDE(FHZBParameters, HZBParameters)
SHADER_PARAMETER(FVector2f, PrevSceneColorBilinearUVMin)
SHADER_PARAMETER(FVector2f, PrevSceneColorBilinearUVMax)
SHADER_PARAMETER(FVector4f, PrevScreenPositionScaleBias)
SHADER_PARAMETER(FVector4f, PrevScreenPositionScaleBiasForDepth)
SHADER_PARAMETER(float, PrevSceneColorPreExposureCorrection)
END_SHADER_PARAMETER_STRUCT()
BEGIN_SHADER_PARAMETER_STRUCT(FLumenScreenSpaceBentNormalParameters, )
SHADER_PARAMETER_RDG_TEXTURE(Texture2D<UNORM float>, ShortRangeAOTexture)
SHADER_PARAMETER_RDG_TEXTURE(Texture2D, DownsampledSceneDepth)
SHADER_PARAMETER_RDG_TEXTURE(Texture2D, DownsampledSceneWorldNormal)
SHADER_PARAMETER(FIntPoint, ShortRangeAOViewMin)
SHADER_PARAMETER(FIntPoint, ShortRangeAOViewSize)
SHADER_PARAMETER(uint32, ShortRangeAOMode)
END_SHADER_PARAMETER_STRUCT()
extern void CullHeightfieldObjectsForView(
FRDGBuilder& GraphBuilder,
const FScene* Scene,
const FViewInfo& View,
const FLumenSceneFrameTemporaries& FrameTemporaries,
float MaxMeshSDFInfluenceRadius,
float CardTraceEndDistanceFromCamera,
FRDGBufferRef& NumCulledObjects,
FRDGBufferRef& CulledObjectIndexBuffer);
extern void CullMeshObjectsToViewGrid(
const FViewInfo& View,
const FScene* Scene,
const FLumenSceneFrameTemporaries& FrameTemporaries,
float MaxMeshSDFInfluenceRadius,
float CardTraceEndDistanceFromCamera,
int32 GridPixelsPerCellXY,
int32 GridSizeZ,
FVector ZParams,
FRDGBuilder& GraphBuilder,
FLumenMeshSDFGridParameters& OutGridParameters,
ERDGPassFlags ComputePassFlags = ERDGPassFlags::Compute);
extern void CullForCardTracing(
FRDGBuilder& GraphBuilder,
const FScene* Scene,
const FViewInfo& View,
const FLumenSceneFrameTemporaries& FrameTemporaries,
const FLumenIndirectTracingParameters& IndirectTracingParameters,
FLumenMeshSDFGridParameters& MeshSDFGridParameters,
ERDGPassFlags ComputePassFlags = ERDGPassFlags::Compute);
extern void SetupLumenDiffuseTracingParameters(float MaxTraceDistance, float OrthoMaxDimension, FLumenIndirectTracingParameters& OutParameters);
extern void SetupLumenDiffuseTracingParametersForProbe(float MaxTraceDistance, float OrthoMaxDimension, FLumenIndirectTracingParameters& OutParameters, float DiffuseConeHalfAngle);
extern void SetupLumenDiffuseTracingParameters(const FViewInfo& View, FLumenIndirectTracingParameters& OutParameters);
extern void SetupLumenDiffuseTracingParametersForProbe(const FViewInfo& View, FLumenIndirectTracingParameters& OutParameters, float DiffuseConeAngle);
extern void SetupLumenMeshSDFTracingParameters(FRDGBuilder& GraphBuilder, const FScene* Scene, const FViewInfo& View,FLumenMeshSDFTracingParameters& OutParameters);
extern FLumenHZBScreenTraceParameters SetupHZBScreenTraceParameters(
FRDGBuilder& GraphBuilder,
const FViewInfo& View,
const FSceneTextures& SceneTextures);
extern int32 GLumenIrradianceFieldGather;
namespace LumenIrradianceFieldGather
{
LumenRadianceCache::FRadianceCacheInputs SetupRadianceCacheInputs();
}
namespace LumenDiffuseIndirect
{
bool IsAllowed();
bool UseAsyncCompute(const FViewFamilyInfo& ViewFamily, EDiffuseIndirectMethod DiffuseIndirectMethod);
}