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

263 lines
9.8 KiB
C++

// 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<uint>, 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<uint>, NumAdaptiveScreenProbes)
SHADER_PARAMETER_RDG_BUFFER_SRV(Buffer<uint>, 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<float3>, RWTraceRadiance)
SHADER_PARAMETER_RDG_TEXTURE_UAV(RWTexture2D<uint>, 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<float3>, ScreenProbeRadianceSHAmbient)
SHADER_PARAMETER_RDG_TEXTURE(Texture2D<float4>, ScreenProbeRadianceSHDirectional)
SHADER_PARAMETER_RDG_TEXTURE(Texture2D<float3>, ScreenProbeIrradianceWithBorder)
SHADER_PARAMETER_RDG_TEXTURE(Texture2D<float3>, ScreenProbeExtraAOWithBorder)
SHADER_PARAMETER_RDG_TEXTURE(Texture2D<float>, ScreenProbeMoving)
END_SHADER_PARAMETER_STRUCT()
BEGIN_SHADER_PARAMETER_STRUCT(FScreenProbeIntegrateParameters, )
SHADER_PARAMETER_RDG_TEXTURE(Texture2D<float>, DownsampledSceneDepth)
SHADER_PARAMETER_RDG_TEXTURE(Texture2D<UNORM float3>, 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<uint>, CompactedTraceTexelAllocator)
SHADER_PARAMETER_RDG_BUFFER_SRV(Buffer<uint>, 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);