Files
bluflame/evoke-64k/ev10/cfg/psblur.txt
2026-04-18 22:31:51 +02:00

60 lines
1.7 KiB
Plaintext

float4 res : register(c0);
float4 glow : register(c31);
sampler2D colorSampler : register(s0);
sampler2D guideSampler : register(s4);
static float2 fGaussianWeights[] = {
float2(-3.0f, 0.015625f),
float2(-2.0f, 0.09375f),
float2(-1.0f, 0.234375f),
float2(0.0f, 0.3125f),
float2(1.0f, 0.234375f),
float2(2.0f, 0.09375f),
float2(3.0f, 0.015625f)
};
float4 ps_blur(float2 t : TEXCOORD0, uniform float2 vDir) : COLOR0
{
float2 vDelta = vDir * res.zw;
float4 fColor = 0.f;
for(int i = 0; i < 7; i++)
fColor += fGaussianWeights[i].y
* tex2D(colorSampler, t + fGaussianWeights[i].x * vDelta);
return fColor;
}
float4 ps_blur_hor(float2 t : TEXCOORD0) : COLOR0 { return ps_blur(t, float2(1.f, 0.f)); }
float4 ps_blur_ver(float2 t : TEXCOORD0) : COLOR0 { return ps_blur(t, float2(0.f, 1.f)); }
float4 ps_blur_bil(float2 t : TEXCOORD0, uniform float2 vDir) : COLOR0
{
float2 vDelta = vDir * res.zw;
float4 fGuide = tex2D(guideSampler, t);
float4 fColor = 0.f;
float fWeight = 0.f;
for(int i = 0; i < 7; i++)
{
float2 to = t + vDelta * fGaussianWeights[i].x;
float4 fSample = tex2D(colorSampler, to);
float fSampleWeight = (1.f - saturate(4.f * (fGuide.w - fSample.w))) * fGaussianWeights[i].y;
fColor += fSample * fSampleWeight;
fWeight += fSampleWeight;
}
return lerp(fGuide, fColor / fWeight, fWeight);
}
float4 ps_blur_bil_hor(float2 t : TEXCOORD0) : COLOR0 { return ps_blur_bil(t, float2(1.f, 0.f)); }
float4 ps_blur_bil_ver(float2 t : TEXCOORD0) : COLOR0 { return ps_blur_bil(t, float2(0.f, 1.f)); }
float4 ps_extract_inv_alpha(float2 t : TEXCOORD0) : COLOR0
{
float4 c = tex2D(colorSampler, t);
c.a = 1.f - c.a;
c.xyz *= c.a;
return c * glow;
}