1
0
Fork 0

Switch ALS model shaders to light addition in intensity space rather than perception space

This commit is contained in:
Thorsten Renk 2016-08-14 09:21:18 +03:00
parent 192b3a02d9
commit c859fe7f89
4 changed files with 49 additions and 14 deletions

View file

@ -106,6 +106,7 @@ vec3 get_hazeColor(in float lightArg);
vec3 searchlight();
vec3 landing_light(in float offset, in float offsetv);
vec3 filter_combined (in vec3 color) ;
vec3 addLights(in vec3 color1, in vec3 color2);
float light_func (in float x, in float a, in float b, in float c, in float d, in float e)
@ -418,10 +419,17 @@ void main (void)
lightmap_b_factor, lightmap_a_factor);
lightmapFactor = lightmapFactor * lightmapTexel;
if (lightmap_multi > 0 ){
lightmapcolor = lightmap_r_color * lightmapFactor.r +
lightmap_g_color * lightmapFactor.g +
lightmap_b_color * lightmapFactor.b +
lightmap_a_color * lightmapFactor.a ;
//lightmapcolor = lightmap_r_color * lightmapFactor.r +
// lightmap_g_color * lightmapFactor.g +
// lightmap_b_color * lightmapFactor.b +
// lightmap_a_color * lightmapFactor.a ;
lightmapcolor = lightmap_r_color * lightmapFactor.r;
lightmapcolor = addLights(lightmapcolor, lightmap_g_color * lightmapFactor.g);
lightmapcolor = addLights(lightmapcolor, lightmap_b_color * lightmapFactor.b);
lightmapcolor = addLights(lightmapcolor, lightmap_a_color * lightmapFactor.a);
} else {
lightmapcolor = lightmapTexel.rgb * lightmap_r_color * lightmapFactor.r;
}

View file

@ -71,6 +71,7 @@ float alt_factor(in float eye_alt, in float vertex_alt);
float light_distance_fading(in float dist);
float fog_backscatter(in float avisibility);
vec3 addLights(in vec3 color1, in vec3 color2);
vec3 flashlight(in vec3 color, in float radius);
vec3 filter_combined (in vec3 color) ;
@ -209,10 +210,15 @@ void main()
lightmapFactor = lightmapFactor * lightmapTexel;
if (lightmap_multi > 0 )
{
lightmapcolor = lightmap_r_color * lightmapFactor.r +
lightmap_g_color * lightmapFactor.g +
lightmap_b_color * lightmapFactor.b +
lightmap_a_color * lightmapFactor.a ;
//lightmapcolor = lightmap_r_color * lightmapFactor.r +
//lightmap_g_color * lightmapFactor.g +
// lightmap_b_color * lightmapFactor.b +
//lightmap_a_color * lightmapFactor.a ;
lightmapcolor = lightmap_r_color * lightmapFactor.r;
lightmapcolor = addLights(lightmapcolor, lightmap_g_color * lightmapFactor.g);
lightmapcolor = addLights(lightmapcolor, lightmap_b_color * lightmapFactor.b);
lightmapcolor = addLights(lightmapcolor, lightmap_a_color * lightmapFactor.a);
}
else
{

View file

@ -88,3 +88,15 @@ if (angularDist < lightRadius)
else return vec3 (0.0,0.0,0.0);
}
vec3 addLights(in vec3 color1, in vec3 color2)
{
vec3 outcolor;
outcolor.r = 0.14 * log(exp(color1.r/0.14) + exp(color2.r/0.14));
outcolor.g = 0.14 * log(exp(color1.g/0.14) + exp(color2.g/0.14));
outcolor.b = 0.14 * log(exp(color1.b/0.14) + exp(color2.b/0.14));
return outcolor;
}

View file

@ -115,7 +115,7 @@ vec3 rayleigh_out_shift(in vec3 color, in float outscatter);
vec3 get_hazeColor(in float lightArg);
vec3 searchlight();
vec3 landing_light(in float offset, in float offsetv);
vec3 addLights(in vec3 color1, in vec3 color2);
float light_func (in float x, in float a, in float b, in float c, in float d, in float e)
@ -341,7 +341,11 @@ void main (void)
vec3 geo_light = vec3 (geo_light_r, geo_light_g, geo_light_b) * (1.0 - smoothstep(0.5 * geo_light_radius, geo_light_radius, length(geo_light_rel_vec))) * geo_light_incidence;
vec4 Diffuse = light_diffuse * nDotVP;
Diffuse.rgb += secondary_light * light_distance_fading(dist) + geo_light;
//Diffuse.rgb += secondary_light * light_distance_fading(dist) + geo_light;
Diffuse.rgb = addLights(Diffuse.rgb, secondary_light * light_distance_fading(dist));
Diffuse.rgb = addLights(Diffuse.rgb, geo_light);
vec4 Specular = gl_FrontMaterial.specular * light_diffuse * pf + gl_FrontMaterial.specular * light_ambient * pf1;
Specular+= gl_FrontMaterial.specular * pow(max(0.0,-dot(N,normalize(vertVec))),gl_FrontMaterial.shininess) * vec4(secondary_light,1.0);
@ -452,10 +456,15 @@ void main (void)
lightmap_b_factor, lightmap_a_factor);
lightmapFactor = lightmapFactor * lightmapTexel;
if (lightmap_multi > 0 ){
lightmapcolor = lightmap_r_color * lightmapFactor.r +
lightmap_g_color * lightmapFactor.g +
lightmap_b_color * lightmapFactor.b +
lightmap_a_color * lightmapFactor.a ;
//lightmapcolor = lightmap_r_color * lightmapFactor.r +
// lightmap_g_color * lightmapFactor.g +
// lightmap_b_color * lightmapFactor.b +
// lightmap_a_color * lightmapFactor.a ;
lightmapcolor = lightmap_r_color * lightmapFactor.r;
lightmapcolor = addLights(lightmapcolor, lightmap_g_color * lightmapFactor.g);
lightmapcolor = addLights(lightmapcolor, lightmap_b_color * lightmapFactor.b);
lightmapcolor = addLights(lightmapcolor, lightmap_a_color * lightmapFactor.a);
} else {
lightmapcolor = lightmapTexel.rgb * lightmap_r_color * lightmapFactor.r;
}