[Bf-blender-cvs] [29b405a3278] master: Overlay: Add antialiasing to particle sprites

Clément Foucault noreply at git.blender.org
Mon Mar 9 17:09:44 CET 2020


Commit: 29b405a32784f260d81d4acb1e154a17f4ccc155
Author: Clément Foucault
Date:   Mon Mar 9 17:09:01 2020 +0100
Branches: master
https://developer.blender.org/rB29b405a32784f260d81d4acb1e154a17f4ccc155

Overlay: Add antialiasing to particle sprites

===================================================================

M	source/blender/draw/engines/overlay/overlay_shader.c
M	source/blender/draw/engines/overlay/shaders/particle_frag.glsl

===================================================================

diff --git a/source/blender/draw/engines/overlay/overlay_shader.c b/source/blender/draw/engines/overlay/overlay_shader.c
index 86d5f58957e..d5509c7f56b 100644
--- a/source/blender/draw/engines/overlay/overlay_shader.c
+++ b/source/blender/draw/engines/overlay/overlay_shader.c
@@ -1246,7 +1246,7 @@ GPUShader *OVERLAY_shader_particle_dot(void)
                                  datatoc_common_view_lib_glsl,
                                  datatoc_particle_vert_glsl,
                                  NULL},
-        .frag = (const char *[]){datatoc_particle_frag_glsl, NULL},
+        .frag = (const char *[]){datatoc_common_view_lib_glsl, datatoc_particle_frag_glsl, NULL},
         .defs = (const char *[]){sh_cfg->def, "#define USE_DOTS\n", NULL},
     });
   }
diff --git a/source/blender/draw/engines/overlay/shaders/particle_frag.glsl b/source/blender/draw/engines/overlay/shaders/particle_frag.glsl
index a087aae2b2b..06197f63658 100644
--- a/source/blender/draw/engines/overlay/shaders/particle_frag.glsl
+++ b/source/blender/draw/engines/overlay/shaders/particle_frag.glsl
@@ -6,7 +6,8 @@ layout(location = 1) out vec4 lineOutput;
 
 void main()
 {
-  float dist = length(gl_PointCoord - vec2(0.5));
+  vec2 uv = gl_PointCoord - vec2(0.5);
+  float dist = length(uv);
 
   if (dist > 0.5) {
     discard;
@@ -15,5 +16,11 @@ void main()
   float intensity = sqrt(1.0 - dist * 2.0) * 0.5 + 0.5;
   fragColor = finalColor * vec4(intensity, intensity, intensity, 1.0);
 
-  lineOutput = vec4(0.0);
+  /* The default value of GL_POINT_SPRITE_COORD_ORIGIN is GL_UPPER_LEFT. Need to reverse the Y. */
+  uv.y = -uv.y;
+  /* Subtract distance to outer edge of the circle. (0.75 is manually tweaked to look better) */
+  vec2 edge_pos = gl_FragCoord.xy - uv * (0.75 / (dist + 1e-9));
+  vec2 edge_start = edge_pos + vec2(-uv.y, uv.x);
+
+  lineOutput = pack_line_data(gl_FragCoord.xy, edge_start, edge_pos);
 }



More information about the Bf-blender-cvs mailing list