SL-11406 Fix fullbright to better match non-EEP. Minor optimization cleanup.

meow-7.2.2
Michael Pohoreski (Ptolemy Linden) 2019-11-21 05:25:18 +00:00
parent 4b205db468
commit e1ea2c2b1e
1 changed files with 20 additions and 7 deletions

View File

@ -264,8 +264,7 @@ void main()
tnorm = vary_normal;
#endif
norm.xyz = tnorm;
norm.xyz = normalize(norm.xyz);
norm.xyz = normalize(tnorm.xyz);
vec2 abnormal = encode_normal(norm.xyz);
@ -277,7 +276,20 @@ void main()
final_color.a = max(final_color.a, emissive_brightness);
vec4 final_normal = vec4(abnormal, env_intensity, 0.0);
// SL-11406 Fullbright: Object > Texture > Shininess > Environment Intensity = 1
// NOTE: There are two shaders that are used depending on the EI byte value:
// EI = 0 fullbright
// EI > 0 .. 255 material
// When it is passed to us it is normalized.
// We can either modify the output environment intensity
// OR
// adjust the final color via:
// final_color *= 0.666666;
// We remap the environment intensity to closely simulate what non-EEP is doing.
// At midnight the brightness is exact.
// At midday the brightness is very close.
float ei = env_intensity*0.5 + 0.5;
vec4 final_normal = vec4(abnormal, ei, 0.0);
vec4 final_specular = spec;
final_specular.a = specular_color.a;
@ -316,11 +328,11 @@ void main()
vec3 refnormpersp = normalize(reflect(pos.xyz, norm.xyz));
float da = dot(normalize(norm.xyz), normalize(light_dir.xyz));
da = clamp(da, -1.0, 1.0);
float da = dot(norm.xyz, normalize(light_dir.xyz));
// Dot product is guaranteed to be in -1 <= da <= +1 range for normalized vectors
// da = clamp(da, -1.0, 1.0);
float final_da = da;
final_da = clamp(final_da, 0.0, 1.0);
float final_da = clamp(da, 0.0, 1.0);
float ambient = da;
ambient *= 0.5;
@ -458,3 +470,4 @@ vec3 post_atmo = color.rgb;
#endif
}