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

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

Fix for class2/softenLightF.glsl not matching class1/softenLightF.glsl
parents 5e7271cc 9e0cf3ed
No related branches found
No related tags found
No related merge requests found
......@@ -84,7 +84,8 @@ void main()
vec3 light_dir = (sun_up_factor == 1) ? sun_dir : moon_dir;
float da = clamp(dot(norm.xyz, light_dir.xyz), 0.0, 1.0);
//da = pow(da, 1.0/1.3);
float light_gamma = 1.0/1.3;
da = pow(da, light_gamma);
vec4 diffuse = texture2DRect(diffuseRect, tc);
......
......@@ -22,7 +22,7 @@
* Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
#extension GL_ARB_texture_rectangle : enable
#extension GL_ARB_shader_texture_lod : enable
......@@ -80,63 +80,55 @@ void main()
vec4 pos = getPositionWithDepth(tc, depth);
vec4 norm = texture2DRect(normalMap, tc);
float envIntensity = norm.z;
norm.xyz = getNorm(tc); // unpack norm
vec3 light_dir = (sun_up_factor == 1) ? sun_dir : moon_dir;
norm.xyz = getNorm(tc);
vec3 light_dir = (sun_up_factor == 1) ? sun_dir : moon_dir;
float da = clamp(dot(norm.xyz, light_dir.xyz), 0.0, 1.0);
float light_gamma = 1.0/1.3;
da = pow(da, light_gamma);
vec4 diffuse = texture2DRect(diffuseRect, tc);
vec4 spec = texture2DRect(specularRect, vary_fragcoord.xy);
float scol = 1.0;
vec2 scol_ambocc = texture2DRect(lightMap, vary_fragcoord.xy).rg;
scol_ambocc = pow(scol_ambocc, vec2(light_gamma));
float da = clamp(dot(normalize(norm.xyz), light_dir.xyz), 0.0, 1.0);
da = pow(da, 1.0/1.3);
vec4 diffuse_srgb = texture2DRect(diffuseRect, tc);
vec4 diffuse_linear = vec4(srgb_to_linear(diffuse_srgb.rgb), diffuse_srgb.a);
float scol = max(scol_ambocc.r, diffuse.a);
// clamping to alpha value kills underwater shadows...
//scol = max(scol_ambocc.r, diffuse_linear.a);
scol = scol_ambocc.r;
float ambocc = scol_ambocc.g;
vec4 spec = texture2DRect(specularRect, vary_fragcoord.xy);
vec3 color = vec3(0);
float bloom = 0.0;
{
float ambocc = scol_ambocc.g;
vec3 sunlit;
vec3 amblit;
vec3 additive;
vec3 atten;
calcAtmosphericVars(pos.xyz, light_dir, ambocc, sunlit, amblit, additive, atten, true);
color.rgb = amblit;
float ambient = min(abs(dot(norm.xyz, sun_dir.xyz)), 1.0);
ambient *= 0.5;
ambient *= ambient;
ambient = (1.0 - ambient);
vec3 sun_contrib = min(scol, da) * sunlit;
#if !defined(AMBIENT_KILL)
color.rgb = amblit;
color.rgb *= ambient;
#endif
vec3 post_ambient = color.rgb;
vec3 sun_contrib = min(da, scol) * sunlit;
#if !defined(SUNLIGHT_KILL)
color.rgb += sun_contrib;
#endif
vec3 post_sunlight = color.rgb;
color.rgb *= diffuse_srgb.rgb;
vec3 post_diffuse = color.rgb;
color.rgb *= diffuse.rgb;
vec3 refnormpersp = normalize(reflect(pos.xyz, norm.xyz));
if (spec.a > 0.0) // specular reflection
{
#if 1 //EEP
vec3 npos = -normalize(pos.xyz);
//vec3 ref = dot(pos+lv, norm);
......@@ -149,73 +141,60 @@ vec3 post_diffuse = color.rgb;
float gtdenom = 2 * nh;
float gt = max(0, min(gtdenom * nv / vh, gtdenom * da / vh));
if (nh > 0.0)
{
float scontrib = fres*texture2D(lightFunc, vec2(nh, spec.a)).r*gt/(nh*da);
vec3 sp = sun_contrib*scontrib / 6.0;
sp = clamp(sp, vec3(0), vec3(1));
bloom += dot(sp, sp) / 4.0;
#if !defined(SUNLIGHT_KILL)
color += sp * spec.rgb;
#endif
}
#else //PRODUCTION
float sa = dot(refnormpersp, light_dir.xyz);
vec3 dumbshiny = sunlit*(texture2D(lightFunc, vec2(sa, spec.a)).r);
// add the two types of shiny together
vec3 spec_contrib = dumbshiny * spec.rgb;
bloom = dot(spec_contrib, spec_contrib) / 6;
color.rgb += spec_contrib;
#endif
}
vec3 post_spec = color.rgb;
color.rgb = mix(color.rgb, diffuse_srgb.rgb, diffuse_srgb.a);
color.rgb = mix(color.rgb, diffuse.rgb, diffuse.a);
if (envIntensity > 0.0)
{ //add environmentmap
vec3 env_vec = env_mat * refnormpersp;
vec3 reflected_color = textureCube(environmentMap, env_vec).rgb;
#if !defined(SUNLIGHT_KILL)
color = mix(color.rgb, reflected_color, envIntensity*0.75); // MAGIC NUMBER SL-12574; ALM: On, Quality >= High
#endif
color = mix(color.rgb, reflected_color, envIntensity);
}
vec3 post_env = color.rgb;
if (norm.w < 0.5)
{
#if !defined(SUNLIGHT_KILL)
vec3 p = normalize(pos.xyz);
color = mix(atmosFragLighting(color, additive, atten), fullbrightAtmosTransportFrag(color, additive, atten), diffuse_srgb.a);
color = mix(scaleSoftClipFrag(color), fullbrightScaleSoftClip(color), diffuse_srgb.a);
#endif
color = mix(atmosFragLighting(color, additive, atten), fullbrightAtmosTransportFrag(color, additive, atten), diffuse.a);
color = mix(scaleSoftClipFrag(color), fullbrightScaleSoftClip(color), diffuse.a);
}
vec3 post_atmo = color.rgb;
#ifdef WATER_FOG
vec4 fogged = applyWaterFogView(pos.xyz,vec4(color, bloom));
color = fogged.rgb;
bloom = fogged.a;
#endif
// srgb colorspace debuggables
//color.rgb = amblit;
//color.rgb = sunlit;
//color.rgb = post_ambient;
//color.rgb = sun_contrib;
//color.rgb = post_sunlight;
//color.rgb = diffuse_srgb.rgb;
//color.rgb = post_diffuse;
//color.rgb = post_spec;
//color.rgb = post_env;
//color.rgb = post_atmo;
}
// linear debuggables
//color.rgb = vec3(final_da);
//color.rgb = vec3(ambient);
//color.rgb = vec3(scol);
//color.rgb = diffuse_linear.rgb;
//color.rgb = diffuse_srgb.rgb;
//output linear RGB as lights are summed up in linear space and then gamma corrected prior to the
//post deferred passes
// convert to linear as fullscreen lights need to sum in linear colorspace
// and will be gamma (re)corrected downstream...
frag_color.rgb = srgb_to_linear(color.rgb);
frag_color.a = bloom;
}
......@@ -46,8 +46,8 @@ vec3 atmosTransport(vec3 light)
vec3 fullbrightAtmosTransportFrag(vec3 light, vec3 additive, vec3 atten)
{
float brightness = dot(light.rgb * 0.5, vec3(0.3333)) + 0.1;
return mix(atmosTransport(light.rgb), light.rgb + additive, brightness * brightness);
float brightness = dot(light.rgb * 0.5, vec3(0.3333)) + 0.1;
return mix(atmosTransportFrag(light.rgb, additive, atten), light.rgb + additive, brightness * brightness);
}
vec3 fullbrightAtmosTransport(vec3 light)
......
......@@ -52,7 +52,8 @@ vec3 atmosTransport(vec3 light)
vec3 fullbrightAtmosTransportFrag(vec3 light, vec3 additive, vec3 atten)
{
float brightness = dot(light.rgb, vec3(0.33333));
return atmosTransportFrag(light * 0.5, additive * (brightness * 0.5 + 0.5), atten);
return vec3(1,0,1);
//return atmosTransportFrag(light * 0.5, additive * (brightness * 0.5 + 0.5), atten);
}
vec3 fullbrightAtmosTransport(vec3 light)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment