From 474c0ad01638a484dcf5fb18dc624341a6f65111 Mon Sep 17 00:00:00 2001 From: Job Talle Date: Tue, 30 May 2023 16:35:05 +0200 Subject: [PATCH] Simplified anti aliasing implementation --- README.md | 11 ++--------- js/gl/shaderPreview.js | 2 +- 2 files changed, 3 insertions(+), 10 deletions(-) diff --git a/README.md b/README.md index cffe853..252408c 100644 --- a/README.md +++ b/README.md @@ -36,16 +36,9 @@ vec4 color = vec4(pixel.rgb, step(0.5, pixel.a)); This example sets alpha to either `0` or `1`. Edges can also be anti aliased using the following GLSL snippet: ``` glsl -const float epsilon = 0.000001; - vec4 pixel = texture(source, uv); -float distance = fwidth(pixel.a) * .5; -float lower = .5 - distance; -float upper = .5 + distance; -float alpha = clamp((pixel.a - lower) / (upper - lower), 0., 1.)); - -vec4 color = vec4(pixel.rgb, alpha); +vec4 color = vec4(pixel.rgb, clamp(0.5 - pixel.a * 2.0 / fwidth(pixel.a), 0., 1.))); ``` -This example interpolates alpha from `0` to `1`, creating smooth anti aliased edges. \ No newline at end of file +This example interpolates alpha from `0` to `1` using standard derivatives, creating smooth anti aliased edges. \ No newline at end of file diff --git a/js/gl/shaderPreview.js b/js/gl/shaderPreview.js index 10d43de..79e0d95 100644 --- a/js/gl/shaderPreview.js +++ b/js/gl/shaderPreview.js @@ -31,7 +31,7 @@ export class ShaderPreview extends Shader { mix( vec3(0.), pixel.rgb, - clamp((pixel.a - lower) / (upper - lower), 0., 1.)), + clamp(.5 - pixel.a * 2. / fwidth(pixel.a), 0., 1.)), 1. - clamp((length(delta) - radius) * radiusPixels, 0., 1.)); } `;