Merged in davep/DRTVWR-440 (pull request #47)
Fix for class2/softenLightF.glsl not matching class1/softenLightF.glslmeow-7.2.2
commit
c7a2c9564e
|
|
@ -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;
|
||||
|
||||
float scol = 1.0;
|
||||
vec2 scol_ambocc = texture2DRect(lightMap, vary_fragcoord.xy).rg;
|
||||
|
||||
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);
|
||||
|
||||
// clamping to alpha value kills underwater shadows...
|
||||
//scol = max(scol_ambocc.r, diffuse_linear.a);
|
||||
scol = scol_ambocc.r;
|
||||
|
||||
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);
|
||||
|
||||
vec2 scol_ambocc = texture2DRect(lightMap, vary_fragcoord.xy).rg;
|
||||
scol_ambocc = pow(scol_ambocc, vec2(light_gamma));
|
||||
|
||||
float scol = max(scol_ambocc.r, diffuse.a);
|
||||
|
||||
float ambocc = scol_ambocc.g;
|
||||
|
||||
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)
|
||||
|
|
|
|||
Loading…
Reference in New Issue