Files
ToriaAssets/Imports/Beautify/URP/Runtime/Resources/Shaders/BeautifyAA.hlsl
T

30 lines
1.4 KiB
HLSL

#ifndef BEAUTIFY_AA_FX
#define BEAUTIFY_AA_FX
float4 _AntialiasData;
#define ANTIALIAS_STRENGTH _AntialiasData.x
#define ANTIALIAS_THRESHOLD _AntialiasData.y
#define ANTIALIAS_DEPTH_ATTEN _AntialiasData.z
#define ANTIALIAS_CLAMP _AntialiasData.w
float3 ApplyEdgeAA(float2 uv, float3 rgbM, float dDepth, float depthCenter, float lumaN, float lumaS, float lumaW, float lumaE, float minLuma, float maxLuma, float2 texelSize) {
float2 gradient = float2(lumaN - lumaS, lumaW - lumaE);
float2 absGradient = abs(gradient);
float gradientAmp = max(absGradient.x, absGradient.y) + 1e-5;
float2 dir = gradient / gradientAmp;
float sampleRadius = min(gradientAmp * ANTIALIAS_STRENGTH, ANTIALIAS_CLAMP);
float2 n = dir * sampleRadius;
float antialiasDepthAtten = 1.0 - saturate(depthCenter * ANTIALIAS_DEPTH_ATTEN);
n *= texelSize * antialiasDepthAtten;
float3 rgbA = SAMPLE_TEXTURE2D_X(_MainTex, sampler_LinearClamp, uv - n * 0.166667).rgb + SAMPLE_TEXTURE2D_X(_MainTex, sampler_LinearClamp, uv + n * 0.166667).rgb;
float3 rgbB = 0.25 * (rgbA + SAMPLE_TEXTURE2D_X(_MainTex, sampler_LinearClamp, uv - n * 0.5).rgb + SAMPLE_TEXTURE2D_X(_MainTex, sampler_LinearClamp, uv + n * 0.5).rgb);
float lumaB = getLuma(rgbB);
if (lumaB < minLuma || lumaB > maxLuma) rgbB = rgbA * 0.5;
return rgbB;
}
#endif