Files
UnrealEngine/Engine/Shaders/Private/RayTracing/RayTracingDeferredShadingCommon.ush
2025-05-18 13:04:45 +08:00

60 lines
2.3 KiB
HLSL

// Copyright Epic Games, Inc. All Rights Reserved.
#pragma once
#include "../DeferredShadingCommon.ush"
//#dxr-todo: workaround for flickering. UE-87281
FGBufferData GetGBufferDataFromSceneTexturesLoad(uint2 PixelCoord, bool bGetNormalizedNormal = true)
{
float4 GBufferA = GBufferATexture.Load(int3(PixelCoord, 0));
float4 GBufferB = GBufferBTexture.Load(int3(PixelCoord, 0));
float4 GBufferC = GBufferCTexture.Load(int3(PixelCoord, 0));
float4 GBufferD = GBufferDTexture.Load(int3(PixelCoord, 0));
float4 GBufferE = GBufferETexture.Load(int3(PixelCoord, 0));
float4 GBufferF = GBufferFTexture.Load(int3(PixelCoord, 0));
#if GBUFFER_HAS_VELOCITY
float4 GBufferVelocity = GBufferVelocityTexture.Load(int3(PixelCoord, 0));
#else
float4 GBufferVelocity = 0.0f;
#endif
uint CustomStencil = 0;
float CustomNativeDepth = 0;
float DeviceZ = SceneDepthTexture.Load(int3(PixelCoord, 0)).r;;
float SceneDepth = ConvertFromDeviceZ(DeviceZ);
return DecodeGBufferData(GBufferA, GBufferB, GBufferC, GBufferD, GBufferE, GBufferF, GBufferVelocity, CustomNativeDepth, CustomStencil, SceneDepth, bGetNormalizedNormal, CheckerFromPixelPos(PixelCoord));
}
FGBufferData GetGBufferDataFromPayload(in FMaterialClosestHitPayload Payload)
{
FGBufferData GBufferData = (FGBufferData)0;
#if !SUBSTRATE_ENABLED || (SUBSTRATE_ENABLED && SUBTRATE_GBUFFER_FORMAT==0)
GBufferData.Depth = 1.f; // Do not use depth
GBufferData.WorldNormal = Payload.WorldNormal;
GBufferData.BaseColor = Payload.BaseColor;
GBufferData.Metallic = Payload.Metallic;
GBufferData.Specular = Payload.Specular;
GBufferData.Roughness = Payload.Roughness;
GBufferData.CustomData = Payload.CustomData;
GBufferData.GBufferAO = Payload.GBufferAO;
GBufferData.IndirectIrradiance = (Payload.IndirectIrradiance.x + Payload.IndirectIrradiance.y + Payload.IndirectIrradiance.z) / 3.f;
GBufferData.ShadingModelID = Payload.ShadingModelID;
GBufferData.SpecularColor = Payload.SpecularColor;
GBufferData.DiffuseColor = Payload.DiffuseColor;
GBufferData.WorldTangent = Payload.WorldTangent;
GBufferData.Anisotropy = Payload.Anisotropy;
#endif
return GBufferData;
}
FGBufferData GetGBufferDataFromPayload(in FPackedMaterialClosestHitPayload Payload)
{
FRayDesc DummyRay = (FRayDesc)0; // Not needed to unpack GBuffer
return GetGBufferDataFromPayload(UnpackRayTracingPayload(Payload, DummyRay));
}