60 lines
2.3 KiB
HLSL
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));
|
|
} |