Files
bluflame/hgplus/ShaderMinifier/tests/real/extatique/lambert2.fs
2026-04-18 22:31:51 +02:00

92 lines
2.1 KiB
GLSL

varying vec3 N;
varying vec3 pos;
varying vec3 l1_pos;
varying vec3 l2_pos;
varying vec3 l3_pos;
uniform vec3 light1Color;
uniform vec3 light2Color;
uniform vec3 light3Color;
uniform vec3 ambientColor;
uniform float light1Specular;
uniform float light2Specular;
uniform float light3Specular;
uniform float light1Diffuse;
uniform float light2Diffuse;
uniform float light3Diffuse;
const float linAtt = 0.30;
const float quadAtt = 0.2;
const float fogNear = 1.0;
const float fogFar = 5.0;
uniform sampler2D noise;
uniform sampler2D tex;
vec3 desaturate(vec3 c, float s)
{
return mix( c, vec3(dot(vec3(0.3), c)), s);
}
void main()
{
vec2 p = gl_TexCoord[0].xy;
vec3 perturb = vec3(texture2D(noise, p + vec2(0.13,0.46)).x, texture2D(noise, p).x, texture2D(noise, p + vec2(-0.33,0.14)).x);
vec4 texColor = texture2D(tex,p);
perturb = (perturb - vec3(0.5)) * 10.0;
vec3 nml = normalize(N + perturb);
vec3 l1dist = l1_pos - pos;
vec3 l2dist = l2_pos - pos;
vec3 l3dist = l3_pos - pos;
float dist1 = length(l1dist);
float dist2 = length(l2dist);
float dist3 = length(l3dist);
vec3 lv1 = l1dist / dist1;
vec3 lv2 = l2dist / dist2;
vec3 lv3 = l3dist / dist3;
vec3 eye = normalize(-pos);
vec3 re1 = reflect(lv1, N);
vec3 re2 = reflect(lv2, N);
vec3 re3 = reflect(lv3, N);
float diffl1 = max(0.0, dot(nml,lv1) );
float diffl2 = max(0.0, dot(nml,lv2) );
float diffl3 = max(0.0, dot(nml,lv3) );
float specl1 = light1Specular * pow(max(0.0, dot(eye, re1)), 10.0);
float specl2 = light2Specular * pow(max(0.0, dot(eye, re2)), 10.0);
float specl3 = light3Specular * pow(max(0.0, dot(eye, re3)), 10.0);
float ql1 = (diffl1 + specl1) / (1.0 + dist1 * (linAtt + quadAtt * dist1));
float ql2 = (diffl2 + specl2) / (1.0 + dist2 * (linAtt + quadAtt * dist2));
float ql3 = (diffl3 + specl3) / (1.0 + dist3 * (linAtt + quadAtt * dist3));
vec3 light = ambientColor + light1Color * vec3(ql1) + light2Color * vec3(ql2) + light3Color * vec3(ql3);
float fogAmount = clamp( (pos.z - fogNear) / (fogFar - fogNear) , 0.0, 1.0);
vec3 lightAO = desaturate(light , fogAmount);
gl_FragColor = texColor * gl_Color * vec4(lightAO, 1.0);
}