xiandie/asset/shader/未使用/SmoothPixel.gdshader
2024-12-23 09:31:10 +08:00

29 lines
744 B
Plaintext

shader_type canvas_item;
render_mode unshaded;
// Texture must have 'Filter'-flag enabled!
// Automatic smoothing
// independent of geometry and perspective
vec4 texturePointSmooth(sampler2D smp, vec2 uv, vec2 pixel_size)
{
vec2 ddx = dFdx(uv);
vec2 ddy = dFdy(uv);
vec2 lxy = sqrt(ddx * ddx + ddy * ddy);
vec2 uv_pixels = uv / pixel_size;
vec2 uv_pixels_floor = round(uv_pixels) - vec2(0.5f);
vec2 uv_dxy_pixels = uv_pixels - uv_pixels_floor;
uv_dxy_pixels = clamp((uv_dxy_pixels - vec2(0.5f)) * pixel_size / lxy + vec2(0.5f), 0.0f, 1.0f);
uv = uv_pixels_floor * pixel_size;
return textureGrad(smp, uv + uv_dxy_pixels * pixel_size, ddx, ddy);
}
void fragment()
{
COLOR = texturePointSmooth(TEXTURE, UV, TEXTURE_PIXEL_SIZE);
}