Skip to content
Snippets Groups Projects
Commit 4034d57b authored by David Parks's avatar David Parks
Browse files

Merged in davep/DRTVWR-440 (pull request #33)

SL-12233 Fix for disagreement between fullbright implementations with ALM on and off.
parents f840297e 0a0cfcf2
Branches
No related tags found
No related merge requests found
...@@ -44,7 +44,6 @@ void main() ...@@ -44,7 +44,6 @@ void main()
float shadow = 1.0; float shadow = 1.0;
vec4 color = diffuseLookup(vary_texcoord0.xy)*vertex_color; vec4 color = diffuseLookup(vary_texcoord0.xy)*vertex_color;
color.rgb = pow(color.rgb, vec3(2.2));
color.rgb = fullbrightAtmosTransport(color.rgb); color.rgb = fullbrightAtmosTransport(color.rgb);
color.rgb = fullbrightScaleSoftClip(color.rgb); color.rgb = fullbrightScaleSoftClip(color.rgb);
......
...@@ -79,10 +79,8 @@ void main() ...@@ -79,10 +79,8 @@ void main()
color.rgb = fogged.rgb; color.rgb = fogged.rgb;
color.a = fogged.a; color.a = fogged.a;
#else #else
color.rgb = srgb_to_linear(color.rgb);
color.rgb = fullbrightAtmosTransport(color.rgb); color.rgb = fullbrightAtmosTransport(color.rgb);
color.rgb = fullbrightScaleSoftClip(color.rgb); color.rgb = fullbrightScaleSoftClip(color.rgb);
color.rgb = linear_to_srgb(color.rgb);
color.a = final_alpha; color.a = final_alpha;
#endif #endif
......
...@@ -44,6 +44,9 @@ vec4 applyWaterFogView(vec3 pos, vec4 color); ...@@ -44,6 +44,9 @@ vec4 applyWaterFogView(vec3 pos, vec4 color);
vec3 atmosFragLighting(vec3 l, vec3 additive, vec3 atten); vec3 atmosFragLighting(vec3 l, vec3 additive, vec3 atten);
vec3 scaleSoftClipFrag(vec3 l); vec3 scaleSoftClipFrag(vec3 l);
vec3 fullbrightAtmosTransportFrag(vec3 light, vec3 additive, vec3 atten);
vec3 fullbrightScaleSoftClip(vec3 light);
void calcAtmosphericVars(vec3 inPositionEye, vec3 light_dir, float ambFactor, out vec3 sunlit, out vec3 amblit, out vec3 additive, out vec3 atten, bool use_ao); void calcAtmosphericVars(vec3 inPositionEye, vec3 light_dir, float ambFactor, out vec3 sunlit, out vec3 amblit, out vec3 additive, out vec3 atten, bool use_ao);
vec3 srgb_to_linear(vec3 cs); vec3 srgb_to_linear(vec3 cs);
...@@ -323,18 +326,23 @@ void main() ...@@ -323,18 +326,23 @@ void main()
if (emissive_brightness >= 1.0) // fullbright, skip lighting calculations if (emissive_brightness >= 1.0) // fullbright, skip lighting calculations
{ {
// just do atmos attenuation (ad hoc 60% factor to match release viewer) color = fullbrightAtmosTransportFrag(diffuse_srgb.rgb, additive, atten);
color = atmosFragLighting(diffuse_srgb.rgb, additive, atten*0.6); color = fullbrightScaleSoftClip(color);
color = scaleSoftClipFrag(color);
al = diffuse_srgb.a; al = diffuse_srgb.a;
} }
else // not fullbright, calculate lighting else // not fullbright, calculate lighting
{ {
vec3 refnormpersp = normalize(reflect(pos.xyz, norm)); vec3 refnormpersp = normalize(reflect(pos.xyz, norm));
//we're in sRGB space, so gamma correct this dot product so
// lighting from the sun stays sharp
float da = clamp(dot(normalize(norm.xyz), light_dir.xyz), 0.0, 1.0); float da = clamp(dot(normalize(norm.xyz), light_dir.xyz), 0.0, 1.0);
da = pow(da, 1.0 / 1.3); da = pow(da, 1.0 / 1.3);
//darken ambient for normals perpendicular to light vector so surfaces in shadow
// and facing away from light still have some definition to them.
// do NOT gamma correct this dot product so ambient lighting stays soft
float ambient = min(abs(dot(norm.xyz, sun_dir.xyz)), 1.0); float ambient = min(abs(dot(norm.xyz, sun_dir.xyz)), 1.0);
ambient *= 0.5; ambient *= 0.5;
ambient *= ambient; ambient *= ambient;
......
...@@ -49,10 +49,15 @@ vec3 atmosTransport(vec3 light) ...@@ -49,10 +49,15 @@ vec3 atmosTransport(vec3 light)
return atmosTransportFrag(light, getAdditiveColor(), getAtmosAttenuation()); return atmosTransportFrag(light, getAdditiveColor(), getAtmosAttenuation());
} }
vec3 fullbrightAtmosTransport(vec3 light) vec3 fullbrightAtmosTransportFrag(vec3 light, vec3 additive, vec3 atten)
{ {
float brightness = dot(light.rgb * 0.5, vec3(0.3333)) + 0.1; float brightness = dot(light.rgb * 0.5, vec3(0.3333)) + 0.1;
return atmosTransportFrag(light * 0.5, getAdditiveColor() * brightness, getAtmosAttenuation()); return atmosTransportFrag(light * 0.5, additive * brightness, atten);
}
vec3 fullbrightAtmosTransport(vec3 light)
{
return fullbrightAtmosTransportFrag(light, getAdditiveColor(), getAtmosAttenuation());
} }
vec3 fullbrightShinyAtmosTransport(vec3 light) vec3 fullbrightShinyAtmosTransport(vec3 light)
......
...@@ -49,10 +49,15 @@ vec3 atmosTransport(vec3 light) ...@@ -49,10 +49,15 @@ vec3 atmosTransport(vec3 light)
return atmosTransportFrag(light, getAdditiveColor(), getAtmosAttenuation()); return atmosTransportFrag(light, getAdditiveColor(), getAtmosAttenuation());
} }
vec3 fullbrightAtmosTransport(vec3 light) vec3 fullbrightAtmosTransportFrag(vec3 light, vec3 additive, vec3 atten)
{ {
float brightness = dot(light.rgb, vec3(0.33333)); float brightness = dot(light.rgb, vec3(0.33333));
return atmosTransportFrag(light * 0.5, getAdditiveColor() * (brightness * 0.5 + 0.5), getAtmosAttenuation()); return atmosTransportFrag(light * 0.5, additive * (brightness * 0.5 + 0.5), atten);
}
vec3 fullbrightAtmosTransport(vec3 light)
{
return atmosTransportFrag(light, getAdditiveColor(), getAtmosAttenuation());
} }
vec3 fullbrightShinyAtmosTransport(vec3 light) vec3 fullbrightShinyAtmosTransport(vec3 light)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment