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

101 lines
4.2 KiB
C++

// Copyright Epic Games, Inc. All Rights Reserved.
#pragma once
#include "RHIDefinitions.h"
#include "RendererInterface.h"
#include "ShaderParameterMacros.h"
#include "LumenRadianceCacheInterpolation.h"
#include "LumenFrontLayerTranslucency.h"
#include "BlueNoise.h"
#include "HZB.h"
DECLARE_UNIFORM_BUFFER_STRUCT(FSceneTextureUniformParameters, ENGINE_API);
class FSceneTextureParameters;
struct FLumenSceneFrameTemporaries;
class FLumenCardTracingParameters;
class FLumenTranslucencyGIVolume
{
public:
LumenRadianceCache::FRadianceCacheInterpolationParameters RadianceCacheInterpolationParameters;
FRDGTextureRef Texture0 = nullptr;
FRDGTextureRef Texture1 = nullptr;
FRDGTextureRef HistoryTexture0 = nullptr;
FRDGTextureRef HistoryTexture1 = nullptr;
FVector GridZParams = FVector::ZeroVector;
uint32 GridPixelSizeShift = 0;
FIntVector GridSize = FIntVector::ZeroValue;
};
// Used by translucent BasePass
BEGIN_SHADER_PARAMETER_STRUCT(FLumenTranslucencyLightingParameters, )
SHADER_PARAMETER_STRUCT_INCLUDE(LumenRadianceCache::FRadianceCacheInterpolationParameters, RadianceCacheInterpolationParameters)
SHADER_PARAMETER_STRUCT_INCLUDE(FLumenFrontLayerTranslucencyReflectionParameters, FrontLayerTranslucencyReflectionParameters)
SHADER_PARAMETER_RDG_TEXTURE(Texture3D, TranslucencyGIVolume0)
SHADER_PARAMETER_RDG_TEXTURE(Texture3D, TranslucencyGIVolume1)
SHADER_PARAMETER_RDG_TEXTURE(Texture3D, TranslucencyGIVolumeHistory0)
SHADER_PARAMETER_RDG_TEXTURE(Texture3D, TranslucencyGIVolumeHistory1)
SHADER_PARAMETER_SAMPLER(SamplerState, TranslucencyGIVolumeSampler)
SHADER_PARAMETER(FVector3f, TranslucencyGIGridZParams)
SHADER_PARAMETER(uint32, TranslucencyGIGridPixelSizeShift)
SHADER_PARAMETER(FIntVector, TranslucencyGIGridSize)
END_SHADER_PARAMETER_STRUCT()
// Used by VolumetricFog and HeterogeneousVolumes
BEGIN_GLOBAL_SHADER_PARAMETER_STRUCT(FLumenTranslucencyLightingUniforms, )
SHADER_PARAMETER_STRUCT_INCLUDE(FLumenTranslucencyLightingParameters, Parameters)
END_GLOBAL_SHADER_PARAMETER_STRUCT()
extern FLumenTranslucencyLightingParameters GetLumenTranslucencyLightingParameters(
FRDGBuilder& GraphBuilder,
const FLumenTranslucencyGIVolume& LumenTranslucencyGIVolume,
const FLumenFrontLayerTranslucency& LumenFrontLayerTranslucency
);
// Used by Translucency Lighting pipeline shaders
BEGIN_SHADER_PARAMETER_STRUCT(FLumenTranslucencyLightingVolumeParameters, )
SHADER_PARAMETER_STRUCT_REF(FBlueNoise, BlueNoise)
SHADER_PARAMETER(FVector3f, TranslucencyGIGridZParams)
SHADER_PARAMETER(uint32, TranslucencyGIGridPixelSizeShift)
SHADER_PARAMETER(FIntVector, TranslucencyGIGridSize)
SHADER_PARAMETER(int32, FroxelDirectionJitterFrameIndex)
SHADER_PARAMETER(FVector3f, FrameJitterOffset)
SHADER_PARAMETER(FMatrix44f, UnjitteredClipToTranslatedWorld)
SHADER_PARAMETER(uint32, TranslucencyVolumeTracingOctahedronResolution)
SHADER_PARAMETER(float, HZBMipLevel)
SHADER_PARAMETER(float, GridCenterOffsetFromDepthBuffer)
SHADER_PARAMETER(float, GridCenterOffsetThresholdToAcceptDepthBufferOffset)
SHADER_PARAMETER_STRUCT_INCLUDE(FHZBParameters, HZBParameters)
END_SHADER_PARAMETER_STRUCT()
BEGIN_SHADER_PARAMETER_STRUCT(FLumenTranslucencyLightingVolumeTraceSetupParameters, )
SHADER_PARAMETER(float, StepFactor)
SHADER_PARAMETER(float, MaxTraceDistance)
SHADER_PARAMETER(float, VoxelTraceStartDistanceScale)
SHADER_PARAMETER(float, MaxRayIntensity)
END_SHADER_PARAMETER_STRUCT()
namespace Lumen
{
extern bool UseHardwareRayTracedTranslucencyVolume(const FSceneViewFamily& ViewFamily);
extern bool UseLumenTranslucencyRadianceCacheReflections(const FSceneViewFamily& ViewFamily);
}
extern void HardwareRayTraceTranslucencyVolume(
FRDGBuilder& GraphBuilder,
const FViewInfo& View,
const FLumenCardTracingParameters& TracingParameters,
LumenRadianceCache::FRadianceCacheInterpolationParameters RadianceCacheParameters,
FLumenTranslucencyLightingVolumeParameters VolumeParameters,
FLumenTranslucencyLightingVolumeTraceSetupParameters TraceSetupParameters,
FRDGTextureRef VolumeTraceRadiance,
FRDGTextureRef VolumeTraceHitDistance,
ERDGPassFlags ComputePassFlags
);
namespace LumenTranslucencyVolumeRadianceCache
{
extern LumenRadianceCache::FRadianceCacheInputs SetupRadianceCacheInputs(const FViewInfo& View);
};