2021-01-09 18:52:54 -08:00
|
|
|
///// INSERT COLOR_MAP FUNCTION HERE /////
|
|
|
|
|
|
|
|
vec4 add_light(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
|
|
|
|
if(gloss == 0.0 && shadow == 0.0) return color;
|
2020-06-02 16:18:44 -07:00
|
|
|
|
2020-06-05 11:12:52 -07:00
|
|
|
// TODO, do we actually want this? It effectively treats surfaces as two-sided
|
2020-06-03 17:10:33 -07:00
|
|
|
if(unit_normal.z < 0){
|
2021-01-09 18:52:54 -08:00
|
|
|
unit_normal *= -1;
|
2020-06-03 17:10:33 -07:00
|
|
|
}
|
|
|
|
|
2021-01-09 18:52:54 -08:00
|
|
|
// TODO, read this in as a uniform?
|
|
|
|
float camera_distance = 6;
|
2020-06-02 16:18:44 -07:00
|
|
|
// 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));
|
2020-06-04 17:17:38 -07:00
|
|
|
float shine = gloss * exp(-3 * pow(1 - dot_prod, 2));
|
2020-06-04 15:41:20 -07:00
|
|
|
float dp2 = dot(normalize(to_light), unit_normal);
|
2020-06-06 16:55:56 -07:00
|
|
|
float darkening = mix(1, max(dp2, 0), shadow);
|
2020-06-02 16:18:44 -07:00
|
|
|
return vec4(
|
2021-01-09 18:52:54 -08:00
|
|
|
darkening * mix(color.rgb, vec3(1.0), shine),
|
|
|
|
color.a
|
2020-06-02 16:18:44 -07:00
|
|
|
);
|
2021-01-09 22:11:38 -08:00
|
|
|
}
|
|
|
|
|
|
|
|
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);
|
2020-06-02 16:18:44 -07:00
|
|
|
}
|