// Copyright Epic Games, Inc. All Rights Reserved. #pragma once #include "CoreTypes.h" #include "BlueNoise.h" #include "LumenTracingUtils.h" #include "ShaderParameterMacros.h" class FLumenScreenSpaceBentNormalParameters; class FViewInfo; struct FEngineShowFlags; class FSceneViewState; enum class ERDGPassFlags : uint16; namespace LumenRadianceCache { class FRadianceCacheInterpolationParameters; class FRadianceCacheMarkParameters; } extern int32 GLumenScreenProbeGatherNumMips; // Must match LumenScreenProbeCommon.ush enum class EScreenProbeIrradianceFormat : uint8 { SH3, Octahedral, MAX }; namespace LumenScreenProbeGather { extern int32 GetTracingOctahedronResolution(const FViewInfo& View); extern int32 IsProbeTracingResolutionSupportedForImportanceSampling(int32 TracingResolution); extern bool UseImportanceSampling(const FViewInfo& View); extern bool UseProbeSpatialFilter(); extern bool UseProbeTemporalFilter(); extern bool UseRadianceCache(); bool UseRadianceCacheSkyVisibility(); bool UseRejectBasedOnNormal(); EScreenProbeIrradianceFormat GetScreenProbeIrradianceFormat(const FEngineShowFlags& ShowFlags); bool UseScreenProbeExtraAO(); bool UseHitLighting(const FViewInfo& View, EDiffuseIndirectMethod DiffuseIndirectMethod); uint32 GetStateFrameIndex(const FSceneViewState* ViewState); uint32 GetRequestedIntegrateDownsampleFactor(); // Must match LumenScreenProbeCommon.ush constexpr uint32 IrradianceProbeRes = 6; constexpr uint32 IrradianceProbeWithBorderRes = (IrradianceProbeRes + 2); } // Must match SetupAdaptiveProbeIndirectArgsCS in usf enum class EScreenProbeIndirectArgs { GroupPerProbe, ThreadPerProbe, TraceCompaction, ThreadPerTrace, ThreadPerGather, ThreadPerGatherWithBorder, Max }; // Must match TILE_CLASSIFICATION_NUM in usf enum class EScreenProbeIntegrateTileClassification { SimpleDiffuse, SupportImportanceSampleBRDF, SupportAll, Num }; BEGIN_SHADER_PARAMETER_STRUCT(FScreenProbeImportanceSamplingParameters, ) SHADER_PARAMETER(uint32, MaxImportanceSamplingOctahedronResolution) SHADER_PARAMETER(uint32, ScreenProbeBRDFOctahedronResolution) SHADER_PARAMETER_RDG_TEXTURE(Texture2D, StructuredImportanceSampledRayInfosForTracing) END_SHADER_PARAMETER_STRUCT() BEGIN_SHADER_PARAMETER_STRUCT(FScreenProbeParameters, ) SHADER_PARAMETER(uint32, ScreenProbeTracingOctahedronResolution) SHADER_PARAMETER(uint32, ScreenProbeGatherOctahedronResolution) SHADER_PARAMETER(uint32, ScreenProbeGatherOctahedronResolutionWithBorder) SHADER_PARAMETER(uint32, ScreenProbeDownsampleFactor) SHADER_PARAMETER(FIntPoint, ScreenProbeViewSize) SHADER_PARAMETER(FIntPoint, ScreenProbeAtlasViewSize) SHADER_PARAMETER(FIntPoint, ScreenProbeAtlasBufferSize) SHADER_PARAMETER(float, ScreenProbeGatherMaxMip) SHADER_PARAMETER(float, RelativeSpeedDifferenceToConsiderLightingMoving) SHADER_PARAMETER(float, ScreenTraceNoFallbackThicknessScale) SHADER_PARAMETER(float, ExtraAOMaxDistanceWorldSpace) SHADER_PARAMETER(float, ExtraAOExponent) SHADER_PARAMETER(float, ScreenProbeInterpolationDepthWeight) SHADER_PARAMETER(float, ScreenProbeInterpolationDepthWeightForFoliage) SHADER_PARAMETER(FVector2f, SampleRadianceProbeUVMul) SHADER_PARAMETER(FVector2f, SampleRadianceProbeUVAdd) SHADER_PARAMETER(FVector2f, SampleRadianceAtlasUVMul) SHADER_PARAMETER(uint32, AdaptiveScreenTileSampleResolution) SHADER_PARAMETER(uint32, NumUniformScreenProbes) SHADER_PARAMETER(uint32, MaxNumAdaptiveProbes) SHADER_PARAMETER(int32, FixedJitterIndex) SHADER_PARAMETER(uint32, ScreenProbeRayDirectionFrameIndex) SHADER_PARAMETER(uint32, bSupportsHairScreenTraces) SHADER_PARAMETER(FVector3f, TargetFormatQuantizationError) SHADER_PARAMETER_RDG_BUFFER_SRV(Buffer, NumAdaptiveScreenProbes) SHADER_PARAMETER_RDG_BUFFER_SRV(Buffer, AdaptiveScreenProbeData) SHADER_PARAMETER_RDG_TEXTURE(Texture2D, ScreenTileAdaptiveProbeHeader) SHADER_PARAMETER_RDG_TEXTURE(Texture2D, ScreenTileAdaptiveProbeIndices) SHADER_PARAMETER_RDG_TEXTURE(Texture2D, TraceRadiance) SHADER_PARAMETER_RDG_TEXTURE(Texture2D, TraceHit) SHADER_PARAMETER_RDG_TEXTURE(Texture2D, ScreenProbeSceneDepth) SHADER_PARAMETER_RDG_TEXTURE(Texture2D, ScreenProbeWorldNormal) SHADER_PARAMETER_RDG_TEXTURE(Texture2D, ScreenProbeWorldSpeed) SHADER_PARAMETER_RDG_TEXTURE(Texture2D, ScreenProbeTranslatedWorldPosition) SHADER_PARAMETER_RDG_TEXTURE_UAV(RWTexture2D, RWTraceRadiance) SHADER_PARAMETER_RDG_TEXTURE_UAV(RWTexture2D, RWTraceHit) SHADER_PARAMETER_STRUCT_INCLUDE(FScreenProbeImportanceSamplingParameters, ImportanceSampling) SHADER_PARAMETER_STRUCT_REF(FBlueNoise, BlueNoise) RDG_BUFFER_ACCESS(ProbeIndirectArgs, ERHIAccess::IndirectArgs) END_SHADER_PARAMETER_STRUCT() BEGIN_SHADER_PARAMETER_STRUCT(FScreenProbeGatherParameters, ) SHADER_PARAMETER_RDG_TEXTURE(Texture2D, ScreenProbeRadiance) SHADER_PARAMETER_RDG_TEXTURE(Texture2D, ScreenProbeRadianceWithBorder) SHADER_PARAMETER_RDG_TEXTURE(Texture2D, ScreenProbeRadianceSHAmbient) SHADER_PARAMETER_RDG_TEXTURE(Texture2D, ScreenProbeRadianceSHDirectional) SHADER_PARAMETER_RDG_TEXTURE(Texture2D, ScreenProbeIrradianceWithBorder) SHADER_PARAMETER_RDG_TEXTURE(Texture2D, ScreenProbeExtraAOWithBorder) SHADER_PARAMETER_RDG_TEXTURE(Texture2D, ScreenProbeMoving) END_SHADER_PARAMETER_STRUCT() BEGIN_SHADER_PARAMETER_STRUCT(FScreenProbeIntegrateParameters, ) SHADER_PARAMETER_RDG_TEXTURE(Texture2D, DownsampledSceneDepth) SHADER_PARAMETER_RDG_TEXTURE(Texture2D, DownsampledSceneWorldNormal) SHADER_PARAMETER(FIntPoint, IntegrateViewMin) SHADER_PARAMETER(FIntPoint, IntegrateViewSize) SHADER_PARAMETER(FVector2f, DownsampledBufferInvSize) SHADER_PARAMETER(uint32, ScreenProbeGatherStateFrameIndex) END_SHADER_PARAMETER_STRUCT() BEGIN_SHADER_PARAMETER_STRUCT(FCompactedTraceParameters, ) SHADER_PARAMETER_RDG_BUFFER_SRV(Buffer, CompactedTraceTexelAllocator) SHADER_PARAMETER_RDG_BUFFER_SRV(Buffer, CompactedTraceTexelData) RDG_BUFFER_ACCESS(IndirectArgs, ERHIAccess::IndirectArgs) END_SHADER_PARAMETER_STRUCT() namespace LumenScreenProbeGather { FCompactedTraceParameters CompactTraces( FRDGBuilder& GraphBuilder, const FViewInfo& View, const FScreenProbeParameters& ScreenProbeParameters, bool bCullByDistanceFromCamera, float CompactionTracingEndDistanceFromCamera, float CompactionMaxTraceDistance, bool bCompactForSkyApply, ERDGPassFlags ComputePassFlags = ERDGPassFlags::Compute); } extern void GenerateBRDF_PDF( FRDGBuilder& GraphBuilder, const FViewInfo& View, const FSceneTextures& SceneTextures, FRDGTextureRef& BRDFProbabilityDensityFunction, FRDGBufferSRVRef& BRDFProbabilityDensityFunctionSH, FScreenProbeParameters& ScreenProbeParameters, ERDGPassFlags ComputePassFlags); extern void GenerateImportanceSamplingRays( FRDGBuilder& GraphBuilder, const FViewInfo& View, const FSceneTextures& SceneTextures, const LumenRadianceCache::FRadianceCacheInterpolationParameters& RadianceCacheParameters, FRDGTextureRef BRDFProbabilityDensityFunction, FRDGBufferSRVRef BRDFProbabilityDensityFunctionSH, FScreenProbeParameters& ScreenProbeParameters, ERDGPassFlags ComputePassFlags); extern void TraceScreenProbes( FRDGBuilder& GraphBuilder, const FScene* Scene, const FViewInfo& View, const FLumenSceneFrameTemporaries& FrameTemporaries, bool bTraceMeshObjects, const FSceneTextures& SceneTextures, FRDGTextureRef LightingChannelsTexture, const LumenRadianceCache::FRadianceCacheInterpolationParameters& RadianceCacheParameters, FScreenProbeParameters& ScreenProbeParameters, FLumenMeshSDFGridParameters& MeshSDFGridParameters, ERDGPassFlags ComputePassFlags); void RenderHardwareRayTracingScreenProbe( FRDGBuilder& GraphBuilder, const FScene* Scene, const FSceneTextureParameters& SceneTextures, FScreenProbeParameters& CommonDiffuseParameters, const FViewInfo& View, const FLumenCardTracingParameters& TracingParameters, FLumenIndirectTracingParameters& DiffuseTracingParameters, const LumenRadianceCache::FRadianceCacheInterpolationParameters& RadianceCacheParameters, ERDGPassFlags ComputePassFlags); extern void RenderHardwareRayTracingShortRangeAO( FRDGBuilder& GraphBuilder, const FScene* Scene, const FSceneTextures& SceneTextures, const FSceneTextureParameters& SceneTextureParameters, const FLumenScreenSpaceBentNormalParameters& BentNormalParameters, const FBlueNoise& BlueNoise, float MaxScreenTraceFraction, const FViewInfo& View, FRDGTextureRef ShortRangeAO, uint32 NumPixelRays); extern void FilterScreenProbes( FRDGBuilder& GraphBuilder, const FViewInfo& View, const FSceneTextures& SceneTextures, const FScreenProbeParameters& ScreenProbeParameters, FScreenProbeGatherParameters& GatherParameters, ERDGPassFlags ComputePassFlags); extern FLumenScreenSpaceBentNormalParameters ComputeScreenSpaceShortRangeAO( FRDGBuilder& GraphBuilder, const FScene* Scene, const FViewInfo& View, const FSceneTextures& SceneTextures, FRDGTextureRef LightingChannelsTexture, const FBlueNoise& BlueNoise, float MaxScreenTraceFraction, float ScreenTraceNoFallbackThicknessScale, ERDGPassFlags ComputePassFlags); namespace LumenScreenProbeGatherRadianceCache { LumenRadianceCache::FRadianceCacheInputs SetupRadianceCacheInputs(const FViewInfo& View); } extern bool CanMaterialRenderInLumenTranslucencyRadianceCacheMarkPass( const FScene& Scene, const FSceneViewFamily& ViewFamily, const FPrimitiveSceneProxy& PrimitiveSceneProxy, const FMaterial& Material); extern bool CanMaterialRenderInLumenFrontLayerTranslucencyGBufferPass( const FScene& Scene, const FSceneViewFamily& ViewFamily, const FPrimitiveSceneProxy& PrimitiveSceneProxy, const FMaterial& Material); extern void LumenTranslucencyReflectionsMarkUsedProbes( FRDGBuilder& GraphBuilder, const FSceneRenderer& SceneRenderer, FViewInfo& View, const FSceneTextures& SceneTextures, const LumenRadianceCache::FRadianceCacheMarkParameters* RadianceCacheMarkParameters);