start
This commit is contained in:
44
toon_fragment.glsl
Normal file
44
toon_fragment.glsl
Normal file
@@ -0,0 +1,44 @@
|
||||
#version 330 core
|
||||
|
||||
out vec4 FragColor;
|
||||
|
||||
in vec3 FragPos;
|
||||
in vec3 Normal;
|
||||
|
||||
uniform vec3 lightPos;
|
||||
uniform vec3 viewPos;
|
||||
|
||||
void main()
|
||||
{
|
||||
// Toon shader (мультяшный стиль)
|
||||
vec3 lightColor = vec3(1.0, 1.0, 1.0);
|
||||
vec3 objectColor = vec3(0.3, 0.6, 0.9);
|
||||
|
||||
// Ambient
|
||||
float ambientStrength = 0.3;
|
||||
vec3 ambient = ambientStrength * lightColor;
|
||||
|
||||
// Diffuse с дискретными уровнями
|
||||
vec3 norm = normalize(Normal);
|
||||
vec3 lightDir = normalize(lightPos - FragPos);
|
||||
float diff = max(dot(norm, lightDir), 0.0);
|
||||
|
||||
// Квантуем освещение на 4 уровня
|
||||
if (diff > 0.95) diff = 1.0;
|
||||
else if (diff > 0.5) diff = 0.7;
|
||||
else if (diff > 0.25) diff = 0.4;
|
||||
else diff = 0.2;
|
||||
|
||||
vec3 diffuse = diff * lightColor;
|
||||
|
||||
// Specular с четким бликом
|
||||
vec3 viewDir = normalize(viewPos - FragPos);
|
||||
vec3 reflectDir = reflect(-lightDir, norm);
|
||||
float spec = pow(max(dot(viewDir, reflectDir), 0.0), 32);
|
||||
|
||||
vec3 specular = vec3(0.0);
|
||||
if (spec > 0.5) specular = vec3(1.0); // Четкий блик
|
||||
|
||||
vec3 result = (ambient + diffuse + specular * 0.3) * objectColor;
|
||||
FragColor = vec4(result, 1.0);
|
||||
}
|
||||
Reference in New Issue
Block a user