Rename add_light -> finalize_color and leave room for other color manipulations

This commit is contained in:
Grant Sanderson 2021-01-09 22:11:38 -08:00
parent 889acea380
commit e98ebfe9e1
7 changed files with 63 additions and 11 deletions

View file

@ -30,4 +30,14 @@ vec4 add_light(vec4 color,
darkening * mix(color.rgb, vec3(1.0), shine),
color.a
);
}
vec4 finalize_color(vec4 color,
vec3 point,
vec3 unit_normal,
vec3 light_coords,
float gloss,
float shadow){
// Put insertion here instead
return add_light(color, point, unit_normal, light_coords, gloss, shadow);
}

View file

@ -0,0 +1,42 @@
///// INSERT COLOR_MAP FUNCTION HERE /////
vec4 add_light(vec4 color,
vec3 point,
vec3 unit_normal,
vec3 light_coords,
float gloss,
float shadow){
if(gloss == 0.0 && shadow == 0.0) return color;
// TODO, do we actually want this? It effectively treats surfaces as two-sided
if(unit_normal.z < 0){
unit_normal *= -1;
}
// TODO, read this in as a uniform?
float camera_distance = 6;
// Assume everything has already been rotated such that camera is in the z-direction
vec3 to_camera = vec3(0, 0, camera_distance) - point;
vec3 to_light = light_coords - point;
vec3 light_reflection = -to_light + 2 * unit_normal * dot(to_light, unit_normal);
float dot_prod = dot(normalize(light_reflection), normalize(to_camera));
float shine = gloss * exp(-3 * pow(1 - dot_prod, 2));
float dp2 = dot(normalize(to_light), unit_normal);
float darkening = mix(1, max(dp2, 0), shadow);
return vec4(
darkening * mix(color.rgb, vec3(1.0), shine),
color.a
);
}
vec4 finalize_color(vec4 color,
vec3 point,
vec3 unit_normal,
vec3 light_coords,
float gloss,
float shadow){
///// INSERT COLOR FUNCTION HERE /////
// The line above may be replaced by arbitrary code snippets, as per
// the method Mobject.set_color_by_code
return add_light(color, point, unit_normal, light_coords, gloss, shadow);
}

View file

@ -9,7 +9,7 @@ uniform float anti_alias_width;
uniform vec2 frame_shape;
uniform float focal_distance;
uniform float is_fixed_in_frame;
// Needed for add_light
// Needed for finalize_color
uniform vec3 light_source_position;
uniform float gloss;
uniform float shadow;
@ -35,11 +35,11 @@ out float bezier_degree;
#INSERT quadratic_bezier_geometry_functions.glsl
#INSERT get_gl_Position.glsl
#INSERT get_unit_normal.glsl
#INSERT add_light.glsl
#INSERT finalize_color.glsl
void emit_vertex_wrapper(vec3 point, int index){
color = add_light(
color = finalize_color(
v_color[index],
point,
v_global_unit_normal[index],

View file

@ -52,7 +52,7 @@ const float PI = 3.141592653;
#INSERT quadratic_bezier_geometry_functions.glsl
#INSERT get_gl_Position.glsl
#INSERT get_unit_normal.glsl
#INSERT add_light.glsl
#INSERT finalize_color.glsl
void flatten_points(in vec3[3] points, out vec2[3] flat_points){
@ -254,7 +254,7 @@ void main() {
// Apply some lighting to the color before sending out.
// vec3 xyz_coords = vec3(corners[i], controls[index_map[i]].z);
vec3 xyz_coords = vec3(corners[i], controls[index_map[i]].z);
color = add_light(
color = finalize_color(
v_color[index_map[i]],
xyz_coords,
v_global_unit_normal[index_map[i]],

View file

@ -10,10 +10,10 @@ in vec4 v_color;
out vec4 frag_color;
#INSERT add_light.glsl
#INSERT finalize_color.glsl
void main() {
frag_color = add_light(
frag_color = finalize_color(
v_color,
xyz_coords,
normalize(v_normal),

View file

@ -14,7 +14,7 @@ in float v_opacity;
out vec4 frag_color;
#INSERT add_light.glsl
#INSERT finalize_color.glsl
const float dark_shift = 0.2;
@ -30,7 +30,7 @@ void main() {
color = mix(dark_color, color, alpha);
}
frag_color = add_light(
frag_color = finalize_color(
color,
xyz_coords,
normalize(v_normal),

View file

@ -12,7 +12,7 @@ in vec2 point;
out vec4 frag_color;
#INSERT add_light.glsl
#INSERT finalize_color.glsl
void main() {
vec2 diff = point - center;
@ -22,7 +22,7 @@ void main() {
discard;
}
vec3 normal = vec3(diff / radius, sqrt(1 - (dist * dist) / (radius * radius)));
frag_color = add_light(
frag_color = finalize_color(
color,
vec3(point.xy, 0.0),
normal,