33 lines
943 B
Python
33 lines
943 B
Python
|
$input v_color0, v_color1, v_texcoord0, v_texcoord1
|
||
|
|
||
|
#include "../../common/common.sh"
|
||
|
|
||
|
SAMPLERCUBE(s_texColor, 0);
|
||
|
|
||
|
uniform vec4 u_params;
|
||
|
|
||
|
#define u_distanceMultiplier u_params.y
|
||
|
#define u_outlineWidth u_params.w
|
||
|
|
||
|
void main()
|
||
|
{
|
||
|
vec4 color = textureCube(s_texColor, v_texcoord0.xyz);
|
||
|
|
||
|
int index = int(v_texcoord0.w*4.0 + 0.5);
|
||
|
float rgba[4];
|
||
|
rgba[0] = color.z;
|
||
|
rgba[1] = color.y;
|
||
|
rgba[2] = color.x;
|
||
|
rgba[3] = color.w;
|
||
|
float distance = rgba[index];
|
||
|
|
||
|
float smoothing = 16.0 * length(fwidth(v_texcoord0.xyz)) / sqrt(2.0) * u_distanceMultiplier;
|
||
|
|
||
|
float outlineWidth = u_outlineWidth * smoothing;
|
||
|
float outerEdgeCenter = 0.5 - outlineWidth;
|
||
|
float alpha = smoothstep(outerEdgeCenter - smoothing, outerEdgeCenter + smoothing, distance);
|
||
|
float border = smoothstep(0.5 - smoothing, 0.5 + smoothing, distance);
|
||
|
vec4 sdfColor = vec4( mix(v_color1.xyz, v_color0.xyz, border), alpha * v_color0.w );
|
||
|
gl_FragColor = sdfColor;
|
||
|
}
|