Files
UnrealEngine/Engine/Plugins/NNE/NNEDenoiser/Shaders/NNEDenoiserShadersDefaultIOProcess.usf
2025-05-18 13:04:45 +08:00

40 lines
1.2 KiB
HLSL

// Copyright Epic Games, Inc. All Rights Reserved.
#include "/Engine/Public/Platform.ush"
#include "/Engine/Private/Common.ush"
int Width;
int Height;
Texture2D InputTexture;
RWTexture2D<float4> OutputTexture;
float3 GetProcessedValue(float3 Value)
{
#if INPUT_KIND_INDEX == 0 // Input color
return clamp(Value, float3(0.0, 0.0, 0.0), float3(MAX_FLT, MAX_FLT, MAX_FLT));
#elif INPUT_KIND_INDEX == 1 // Input albedo
return clamp(Value, float3(0.0, 0.0, 0.0), float3(1.0, 1.0, 1.0));
#elif INPUT_KIND_INDEX == 2 // Input normal
return clamp(Value, float3(-1.0, -1.0, -1.0), float3(1.0, 1.0, 1.0)) * 0.5 + float3(0.5, 0.5, 0.5);
#elif INPUT_KIND_INDEX == 3 // Input flow
// TODO flow texture check for any necessary conversion
return Value;
#else
// INPUT_KIND_INDEX == 4 // Output color
return clamp(Value, float3(0.0, 0.0, 0.0), float3(MAX_FLT, MAX_FLT, MAX_FLT));
#endif
}
[numthreads(THREAD_GROUP_SIZE, THREAD_GROUP_SIZE, 1)]
void IOProcess(in const uint3 DispatchThreadID : SV_DispatchThreadID)
{
if (DispatchThreadID.x >= Width || DispatchThreadID.y >= Height)
{
return;
}
const float4 Color = InputTexture.Load(int3(DispatchThreadID.x, DispatchThreadID.y, 0));
OutputTexture[DispatchThreadID.xy] = float4(GetProcessedValue(Color.rgb), Color.a);
}