#version 450 // Fragment shader per a línies vectorials. // // Antialias geomètric: rebem `frag_edge_dist` interpolat (±1 als laterals del // quad, 0 a l'eix central). Apliquem un smoothstep d'1 píxel d'amplada perquè // el gruix nominal (els |edge_dist| < threshold) quedi totalment opac i només // el píxel extruit als laterals faci la transició suau. // // La línia ja ve extruïda amb thickness + 1px a CPU; el threshold equival a // (thickness)/(thickness+1), però no el coneixem aquí per vèrtex. En el cas // general (línies fines), fade lineal entre 0.0 i 1.0 dóna prou bon resultat // visualment sense necessitat d'un uniform per línia. layout(location = 0) in vec4 frag_color; layout(location = 1) in float frag_edge_dist; layout(location = 0) out vec4 out_color; void main() { // |edge_dist|=0 → totalment opac; |edge_dist|=1 → totalment transparent. // smoothstep dóna un fade Hermite C¹ que evita banding. float d = abs(frag_edge_dist); float alpha = 1.0 - smoothstep(0.7, 1.0, d); out_color = vec4(frag_color.rgb, frag_color.a * alpha); }