36 lines
880 B
HLSL
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;
|
|
} |