Switch ALS model shaders to light addition in intensity space rather than perception space
This commit is contained in:
parent
192b3a02d9
commit
c859fe7f89
4 changed files with 49 additions and 14 deletions
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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
|
||||
{
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue