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),
|
darkening * mix(color.rgb, vec3(1.0), shine),
|
||||||
color.a
|
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 vec2 frame_shape;
|
||||||
uniform float focal_distance;
|
uniform float focal_distance;
|
||||||
uniform float is_fixed_in_frame;
|
uniform float is_fixed_in_frame;
|
||||||
// Needed for add_light
|
// Needed for finalize_color
|
||||||
uniform vec3 light_source_position;
|
uniform vec3 light_source_position;
|
||||||
uniform float gloss;
|
uniform float gloss;
|
||||||
uniform float shadow;
|
uniform float shadow;
|
||||||
|
@ -35,11 +35,11 @@ out float bezier_degree;
|
||||||
#INSERT quadratic_bezier_geometry_functions.glsl
|
#INSERT quadratic_bezier_geometry_functions.glsl
|
||||||
#INSERT get_gl_Position.glsl
|
#INSERT get_gl_Position.glsl
|
||||||
#INSERT get_unit_normal.glsl
|
#INSERT get_unit_normal.glsl
|
||||||
#INSERT add_light.glsl
|
#INSERT finalize_color.glsl
|
||||||
|
|
||||||
|
|
||||||
void emit_vertex_wrapper(vec3 point, int index){
|
void emit_vertex_wrapper(vec3 point, int index){
|
||||||
color = add_light(
|
color = finalize_color(
|
||||||
v_color[index],
|
v_color[index],
|
||||||
point,
|
point,
|
||||||
v_global_unit_normal[index],
|
v_global_unit_normal[index],
|
||||||
|
|
|
@ -52,7 +52,7 @@ const float PI = 3.141592653;
|
||||||
#INSERT quadratic_bezier_geometry_functions.glsl
|
#INSERT quadratic_bezier_geometry_functions.glsl
|
||||||
#INSERT get_gl_Position.glsl
|
#INSERT get_gl_Position.glsl
|
||||||
#INSERT get_unit_normal.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){
|
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.
|
// 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);
|
||||||
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]],
|
v_color[index_map[i]],
|
||||||
xyz_coords,
|
xyz_coords,
|
||||||
v_global_unit_normal[index_map[i]],
|
v_global_unit_normal[index_map[i]],
|
||||||
|
|
|
@ -10,10 +10,10 @@ in vec4 v_color;
|
||||||
|
|
||||||
out vec4 frag_color;
|
out vec4 frag_color;
|
||||||
|
|
||||||
#INSERT add_light.glsl
|
#INSERT finalize_color.glsl
|
||||||
|
|
||||||
void main() {
|
void main() {
|
||||||
frag_color = add_light(
|
frag_color = finalize_color(
|
||||||
v_color,
|
v_color,
|
||||||
xyz_coords,
|
xyz_coords,
|
||||||
normalize(v_normal),
|
normalize(v_normal),
|
||||||
|
|
|
@ -14,7 +14,7 @@ in float v_opacity;
|
||||||
|
|
||||||
out vec4 frag_color;
|
out vec4 frag_color;
|
||||||
|
|
||||||
#INSERT add_light.glsl
|
#INSERT finalize_color.glsl
|
||||||
|
|
||||||
const float dark_shift = 0.2;
|
const float dark_shift = 0.2;
|
||||||
|
|
||||||
|
@ -30,7 +30,7 @@ void main() {
|
||||||
color = mix(dark_color, color, alpha);
|
color = mix(dark_color, color, alpha);
|
||||||
}
|
}
|
||||||
|
|
||||||
frag_color = add_light(
|
frag_color = finalize_color(
|
||||||
color,
|
color,
|
||||||
xyz_coords,
|
xyz_coords,
|
||||||
normalize(v_normal),
|
normalize(v_normal),
|
||||||
|
|
|
@ -12,7 +12,7 @@ in vec2 point;
|
||||||
|
|
||||||
out vec4 frag_color;
|
out vec4 frag_color;
|
||||||
|
|
||||||
#INSERT add_light.glsl
|
#INSERT finalize_color.glsl
|
||||||
|
|
||||||
void main() {
|
void main() {
|
||||||
vec2 diff = point - center;
|
vec2 diff = point - center;
|
||||||
|
@ -22,7 +22,7 @@ void main() {
|
||||||
discard;
|
discard;
|
||||||
}
|
}
|
||||||
vec3 normal = vec3(diff / radius, sqrt(1 - (dist * dist) / (radius * radius)));
|
vec3 normal = vec3(diff / radius, sqrt(1 - (dist * dist) / (radius * radius)));
|
||||||
frag_color = add_light(
|
frag_color = finalize_color(
|
||||||
color,
|
color,
|
||||||
vec3(point.xy, 0.0),
|
vec3(point.xy, 0.0),
|
||||||
normal,
|
normal,
|
||||||
|
|
Loading…
Add table
Reference in a new issue