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

36 lines
880 B
HLSL

// Copyright Epic Games, Inc. All Rights Reserved.
#include "../Common.ush"
// Used for storing normal and shading info history data and used by:
// * LumenScreenProbeGather
// * MegaLightDenoiserTemporal
struct FNormalAndShadingInfo
{
float3 Normal;
bool bIsHair;
bool bHasBackfaceDiffuse;
};
float4 PackNormalAndShadingInfo(FNormalAndShadingInfo In)
{
// Storage format 10:10:10:2
const float3 PackedN = In.Normal * 0.5 + 0.5;
uint PackedA = In.bIsHair ? 0x1 : 0;
PackedA |= In.bHasBackfaceDiffuse ? 0x2 : 0;
return float4(PackedN, (PackedA + 0.5f) / 4.0f);
}
FNormalAndShadingInfo UnpackNormalAndShadingInfo(float4 In)
{
uint PackedA = In.w * 3.0f + 0.5f;
// Storage format 10:10:10:2
FNormalAndShadingInfo Out;
Out.Normal = In.xyz * 2 - 1;
Out.bIsHair = PackedA & 0x1 ? true : false;
Out.bHasBackfaceDiffuse = PackedA & 0x2 ? true : false;
return Out;
}