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

126 lines
3.8 KiB
C++

// Copyright Epic Games, Inc. All Rights Reserved.
#pragma once
#include "RenderGraph.h"
#include "SceneView.h"
#include "ScreenSpaceDenoise.h"
#include "IndirectLightRendering.h"
#include "HZB.h"
class FViewInfo;
class FSceneTextureParameters;
enum class ESSRQuality
{
VisualizeSSR,
Low,
Medium,
High,
Epic,
MAX
};
struct FTiledReflection
{
FRDGBufferRef DrawIndirectParametersBuffer;
FRDGBufferRef DispatchIndirectParametersBuffer;
FRDGBufferRef DispatchClearIndirectParametersBuffer;
FRDGBufferRef DispatchDownsampledIndirectParametersBuffer;
FRDGBufferSRVRef TileListDataBufferSRV;
FRDGBufferSRVRef ClearTileListDataBufferSRV;
FRDGBufferSRVRef DownsampledTileListDataBufferSRV;
uint32 TileSize;
};
BEGIN_SHADER_PARAMETER_STRUCT(FCommonScreenSpaceRayParameters, )
SHADER_PARAMETER_STRUCT_INCLUDE(HybridIndirectLighting::FCommonParameters, CommonDiffuseParameters)
SHADER_PARAMETER(FVector4f, ColorBufferScaleBias)
SHADER_PARAMETER(FVector2f, ReducedColorUVMax)
SHADER_PARAMETER(FVector2f, FullResPixelOffset)
SHADER_PARAMETER(float, PixelPositionToFullResPixel)
SHADER_PARAMETER(int32, bRejectUncertainRays)
SHADER_PARAMETER(int32, bTerminateCertainRay)
SHADER_PARAMETER_RDG_TEXTURE(Texture2D, ColorTexture)
SHADER_PARAMETER_SAMPLER(SamplerState, ColorTextureSampler)
SHADER_PARAMETER_RDG_TEXTURE(Texture2D, AlphaTexture)
SHADER_PARAMETER_SAMPLER(SamplerState, AlphaTextureSampler)
SHADER_PARAMETER_STRUCT_INCLUDE(FHZBParameters, HZBParameters)
SHADER_PARAMETER_STRUCT_REF(FViewUniformShaderParameters, ViewUniformBuffer)
SHADER_PARAMETER_RDG_TEXTURE_UAV(RWTexture2D<float4>, DebugOutput)
SHADER_PARAMETER_RDG_TEXTURE_UAV(RWTexture2D<float4>, ScreenSpaceRayTracingDebugOutput)
END_SHADER_PARAMETER_STRUCT()
namespace ScreenSpaceRayTracing
{
BEGIN_SHADER_PARAMETER_STRUCT(FPrevSceneColorMip, )
SHADER_PARAMETER_RDG_TEXTURE(Texture2D, SceneColor)
SHADER_PARAMETER_RDG_TEXTURE(Texture2D<float>, SceneAlpha)
END_SHADER_PARAMETER_STRUCT()
bool ShouldKeepBleedFreeSceneColor(const FViewInfo& View);
bool ShouldRenderScreenSpaceReflections(const FViewInfo& View);
bool ShouldRenderScreenSpaceReflectionsWater(const FViewInfo& View);
void ProcessForNextFrameScreenSpaceRayTracing(
FRDGBuilder& GraphBuilder,
const FSceneTextureParameters& SceneTextures,
const FRDGTextureRef CurrentSceneColor,
const FViewInfo& View);
void GetSSRQualityForView(const FViewInfo& View, ESSRQuality* OutQuality, IScreenSpaceDenoiser::FReflectionsRayTracingConfig* OutRayTracingConfigs);
bool IsSSRTemporalPassRequired(const FViewInfo& View);
int32 GetSSGIRayCountPerTracingPixel();
FPrevSceneColorMip ReducePrevSceneColorMip(
FRDGBuilder& GraphBuilder,
const FSceneTextureParameters& SceneTextures,
const FViewInfo& View);
void RenderScreenSpaceReflections(
FRDGBuilder& GraphBuilder,
const FSceneTextureParameters& SceneTextures,
const FRDGTextureRef CurrentSceneColor,
const FViewInfo& View,
ESSRQuality SSRQuality,
bool bDenoiser,
IScreenSpaceDenoiser::FReflectionsInputs* DenoiserInputs,
bool bSingleLayerWater = false,
FTiledReflection* TiledScreenSpaceReflection = nullptr);
bool IsScreenSpaceDiffuseIndirectSupported(const FViewInfo& View);
IScreenSpaceDenoiser::FDiffuseIndirectInputs CastStandaloneDiffuseIndirectRays(
FRDGBuilder& GraphBuilder,
const HybridIndirectLighting::FCommonParameters& CommonParameters,
const FPrevSceneColorMip& PrevSceneColor,
const FViewInfo& View);
void SetupCommonScreenSpaceRayParameters(
FRDGBuilder& GraphBuilder,
const FSceneTextureParameters& SceneTextures,
const ScreenSpaceRayTracing::FPrevSceneColorMip& PrevSceneColor,
const FViewInfo& View,
FCommonScreenSpaceRayParameters* OutParameters);
FLinearColor ComputeSSRParams(const FViewInfo& View, ESSRQuality SSRQuality, bool bEnableDiscard);
} // namespace ScreenSpaceRayTracing