From ff4190b4e1c93f256f57acee977930cdc8899b46 Mon Sep 17 00:00:00 2001 From: Injazz <43905364+Injazz@users.noreply.github.com> Date: Sun, 23 Jun 2019 16:44:39 +0500 Subject: [PATCH] makes shaders round (#263) --- Resources/Shaders/circlemask.swsl | 24 ++++++++++++--------- Resources/Shaders/gradientcirclemask.swsl | 26 +++++++++++++++++------ 2 files changed, 34 insertions(+), 16 deletions(-) diff --git a/Resources/Shaders/circlemask.swsl b/Resources/Shaders/circlemask.swsl index fa47a61fcb..c8471ec2d0 100644 --- a/Resources/Shaders/circlemask.swsl +++ b/Resources/Shaders/circlemask.swsl @@ -1,13 +1,17 @@ -float circle(in vec2 _st, in float _radius){ - vec2 dist = _st-vec2(0.5); - return smoothstep(_radius-(_radius*0.01), - _radius+(_radius*0.01), - dot(dist,dist)*4.0); +vec4 circle(in vec2 uv, in vec2 pos, float rad, in vec3 color) { + float d = length(pos - uv) - rad; + float t = clamp(d, 0.0, 1.0); + return vec4(color, t); } - void fragment(){ - vec2 st = FRAGCOORD.xy*SCREEN_PIXEL_SIZE.xy; + vec2 uv = FRAGCOORD.xy; + vec2 res_xy = vec2(1.0/SCREEN_PIXEL_SIZE.x, 1.0/SCREEN_PIXEL_SIZE.y); + vec2 center = res_xy*0.5; + float radius = 0.05 * res_xy.y; - COLOR.rgb = vec3(0); - COLOR.a = circle(st,0.05); -} + vec4 layer1 = vec4(vec3(0), 0.0); + + vec4 layer2 = circle(uv, center, radius, vec3(0)); + + COLOR = mix(layer1, layer2, layer2.a); +} \ No newline at end of file diff --git a/Resources/Shaders/gradientcirclemask.swsl b/Resources/Shaders/gradientcirclemask.swsl index 382d8b164c..8eee20fd4c 100644 --- a/Resources/Shaders/gradientcirclemask.swsl +++ b/Resources/Shaders/gradientcirclemask.swsl @@ -1,9 +1,23 @@ -uniform float percentagedistanceshow = 0.1; -uniform float gradientfalloffwidth = 0.2; +uniform float percentagedistanceshow = 0.05; +uniform float gradientfalloffwidth = 3.0; + +vec4 circle(in vec2 uv, in vec2 pos, float rad, in vec3 color) { + float d = length(pos - uv) - rad; + float t = clamp(d, 0.0, 1.0); + return vec4(color, t); +} void fragment() { - float dist = distance(UV, vec2(0.5, 0.5)); - float fromdiskdist = dist - percentagedistanceshow; - COLOR.a = max(0, min(1.0, 2.0*dist/percentagedistanceshow - 2.0)); - COLOR.rgb = vec3(1,1,1) - vec3(fromdiskdist,fromdiskdist,fromdiskdist)/gradientfalloffwidth; + vec2 uv = FRAGCOORD.xy; + vec2 res_xy = vec2(1.0/SCREEN_PIXEL_SIZE.x, 1.0/SCREEN_PIXEL_SIZE.y); + vec2 center = res_xy*0.5; + float radius = percentagedistanceshow * res_xy.y; + + vec4 grad = vec4(0.8 - length( uv - center )/res_xy.y * gradientfalloffwidth); + + vec4 layer1 = vec4(vec3(255.0),0.0); + + vec4 layer2 = circle(uv, center, radius, grad.rgb); + + COLOR = mix(layer1, layer2, layer2.a); }