gates-multiplayer/player/model/materials/face_mat.gdshader
2024-03-31 11:20:32 +04:00

40 lines
1.1 KiB
Text

shader_type spatial;
uniform sampler2D face_texture : filter_nearest, repeat_disable;
uniform float intensity = 1.5;
uniform vec4 screen_color : source_color = vec4(1.0);
uniform vec2 screen_red_offset = vec2(0.0);
uniform vec2 screen_green_offset = vec2(0.0);
uniform vec2 screen_blue_offset = vec2(0.0);
uniform float pixel_size = 20.0;
void fragment() {
vec2 scaled_uv = round(UV * pixel_size) / pixel_size;
float face_red = 1.0 - texture(face_texture, screen_red_offset + scaled_uv).x;
float face_green = 1.0 - texture(face_texture, screen_green_offset + scaled_uv).x;
float face_blue = 1.0 - texture(face_texture, screen_blue_offset + scaled_uv).x;
vec2 grid_2d = sin(fract(UV * pixel_size + 0.5) * 3.14);
float grid = grid_2d.x * grid_2d.y;
grid = grid * 0.6 + 0.4;
ALBEDO = vec3(0.0);
SPECULAR = 0.25;
ROUGHNESS = 0.45;
vec3 iris = vec3(0.0);
iris.r = ((screen_color.r * face_red) / 3.0);
iris.g = ((screen_color.g * face_green) / 3.0);
iris.b = ((screen_color.b * face_blue) / 3.0);
iris.rgb *= 1.0 - screen_color.a;
vec3 fill = screen_color.rgb * screen_color.a;
EMISSION = (iris + fill) * grid * intensity;
}