mirror of
https://github.com/3b1b/manim.git
synced 2025-09-19 04:41:56 +00:00
Rename add_light -> finalize_color and leave room for other color manipulations
This commit is contained in:
parent
889acea380
commit
e98ebfe9e1
7 changed files with 63 additions and 11 deletions
|
@ -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);
|
||||
}
|
42
manimlib/shaders/inserts/finalize_color.glsl
Normal file
42
manimlib/shaders/inserts/finalize_color.glsl
Normal 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);
|
||||
}
|
|
@ -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],
|
||||
|
|
|
@ -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]],
|
||||
|
|
|
@ -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),
|
||||
|
|
|
@ -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),
|
||||
|
|
|
@ -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,
|
||||
|
|
Loading…
Add table
Reference in a new issue