// 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; }