51 lines
No EOL
1.6 KiB
Text
51 lines
No EOL
1.6 KiB
Text
#version 150 compatibility
|
|
|
|
uniform bool smooth_points = true;
|
|
uniform int illumination_mode = 1;
|
|
uniform vec4 halo_color;
|
|
|
|
in vec3 normal;
|
|
in vec2 uv;
|
|
in vec4 color;
|
|
in vec3 position;
|
|
in vec2 position_pixel;
|
|
in float percentual_outline_start;
|
|
in float percentual_halo_start;
|
|
in float percentual_pixel_extent;
|
|
in float percentual_splat_size;
|
|
flat in int side;
|
|
|
|
//layout pixel_center_integer in vec4 gl_FragCoord;
|
|
|
|
vec4 doLighting(vec3 position, vec3 normal, vec4 diffuseMaterial);
|
|
vec4 doTwoSidedLighting(vec3 position, vec3 normal, vec4 diffuseMaterial, int side);
|
|
|
|
void main()
|
|
{
|
|
|
|
float l = length(uv);
|
|
|
|
if (smooth_points && (l > percentual_splat_size))
|
|
discard;
|
|
|
|
float pixel_scale = 1.0 / percentual_pixel_extent;
|
|
float outline_width = percentual_splat_size - percentual_outline_start - percentual_pixel_extent;
|
|
if (outline_width < 0.01) {
|
|
outline_width = 0.01;
|
|
}
|
|
|
|
float lambda_in = clamp(pixel_scale*(percentual_outline_start + percentual_pixel_extent - l), 0.0, 1.0);
|
|
float lambda_out = clamp(pixel_scale*(l - percentual_splat_size), 0.0, 1.0);
|
|
float lambda_line = clamp((percentual_splat_size - 0.5*percentual_pixel_extent - l)/outline_width, 0.0, 1.0);
|
|
|
|
// illumination
|
|
vec4 color_in = color;
|
|
if (l > percentual_halo_start)
|
|
color_in = halo_color;
|
|
switch (illumination_mode) {
|
|
case 1: color_in.rgb = doLighting(position, normal, color_in).rgb; break;
|
|
case 2: color_in.rgb = doTwoSidedLighting(position, normal, color_in, side).rgb; break;
|
|
}
|
|
vec4 color_line = vec4(color_in.rgb, lambda_line*color_in.a);
|
|
gl_FragColor = lambda_in * color_in + (1.0 - lambda_out - lambda_in) * color_line;
|
|
} |