precision mediump float; varying vec3 v_color; void main() { // Create a circular particle with soft edges vec2 center = gl_PointCoord - vec2(0.5); float dist = length(center); if (dist > 0.5) { discard; } float alpha = 1.0 - smoothstep(0.0, 0.5, dist); gl_FragColor = vec4(v_color, alpha * 0.3); // Subtle opacity }