diff options
-rwxr-xr-x | doc/contributions.txt | 14 | ||||
-rw-r--r-- | indra/newview/app_settings/shaders/class1/deferred/softenLightF.glsl | 29 | ||||
-rw-r--r-- | indra/newview/app_settings/shaders/class2/deferred/softenLightF.glsl | 29 |
3 files changed, 50 insertions, 22 deletions
diff --git a/doc/contributions.txt b/doc/contributions.txt index d1355652e4..c9a382d455 100755 --- a/doc/contributions.txt +++ b/doc/contributions.txt @@ -483,12 +483,14 @@ Geenz Spad STORM-1900 STORM-1905 NORSPEC-229 - BUG-226611 - BUG-226617 - BUG-226618 - BUG-226646 - BUG-226647 - BUG-226648 + BUG-226611 + BUG-226617 + BUG-226618 + BUG-226646 + BUG-226647 + BUG-226648 + OPEN-339 + BUG-226620 Gene Frostbite GeneJ Composer Geneko Nemeth diff --git a/indra/newview/app_settings/shaders/class1/deferred/softenLightF.glsl b/indra/newview/app_settings/shaders/class1/deferred/softenLightF.glsl index e22240727c..e44b441727 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/softenLightF.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/softenLightF.glsl @@ -123,14 +123,27 @@ void main() if (spec.a > 0.0) // specular reflection { - // the old infinite-sky shiny reflection - 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; - col += spec_contrib; + vec3 npos = -normalize(pos.xyz); + + //vec3 ref = dot(pos+lv, norm); + vec3 h = normalize(light_dir.xyz+npos); + float nh = dot(norm.xyz, h); + float nv = dot(norm.xyz, npos); + float vh = dot(npos, h); + float sa = nh; + float fres = pow(1 - dot(h, npos), 5)*0.4+0.5; + + float gtdenom = 2 * nh; + float gt = max(0, min(gtdenom * nv / vh, gtdenom * da / vh)); + + if (nh > 0.0) + { + float scol = fres*texture2D(lightFunc, vec2(nh, spec.a)).r*gt/(nh*da); + vec3 speccol = sun_contrib*scol*spec.rgb; + speccol = max(speccol, vec3(0)); + bloom = dot (speccol, speccol) / 2; + col += speccol; + } } col.rgb += diffuse.a * diffuse.rgb; diff --git a/indra/newview/app_settings/shaders/class2/deferred/softenLightF.glsl b/indra/newview/app_settings/shaders/class2/deferred/softenLightF.glsl index c34bac79dd..7f1d518dd6 100644 --- a/indra/newview/app_settings/shaders/class2/deferred/softenLightF.glsl +++ b/indra/newview/app_settings/shaders/class2/deferred/softenLightF.glsl @@ -136,14 +136,27 @@ void main() if (spec.a > 0.0) // specular reflection { - // the old infinite-sky shiny reflection - float sa = dot(refnormpersp, light_dir.xyz); - vec3 dumbshiny = sunlit*scol*(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; - col += spec_contrib; + vec3 npos = -normalize(pos.xyz); + + //vec3 ref = dot(pos+lv, norm); + vec3 h = normalize(light_dir.xyz+npos); + float nh = dot(norm.xyz, h); + float nv = dot(norm.xyz, npos); + float vh = dot(npos, h); + float sa = nh; + float fres = pow(1 - dot(h, npos), 5)*0.4+0.5; + + 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 speccol = sun_contrib*scontrib*spec.rgb; + speccol = max(speccol, vec3(0)); + bloom += dot (speccol, speccol) / 2; + col += speccol; + } } col.rgb += diffuse.a * diffuse.rgb; |