diff options
Diffstat (limited to 'indra/newview/app_settings')
21 files changed, 221 insertions, 421 deletions
| diff --git a/indra/newview/app_settings/shaders/class1/deferred/fullbrightF.glsl b/indra/newview/app_settings/shaders/class1/deferred/fullbrightF.glsl index 5d58cc91cd..1de8b25a7d 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/fullbrightF.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/fullbrightF.glsl @@ -35,9 +35,7 @@ in vec3 vary_position;  in vec4 vertex_color;  in vec2 vary_texcoord0; -#ifdef WATER_FOG -vec4 applyWaterFogView(vec3 pos, vec4 color); -#endif +vec4 applyWaterFogViewLinear(vec3 pos, vec4 color);  vec3 srgb_to_linear(vec3 cs);  vec3 linear_to_srgb(vec3 cl); @@ -84,20 +82,16 @@ void main()      vec3 additive;      vec3 atten;      calcAtmosphericVars(pos.xyz, vec3(0), 1.0, sunlit, amblit, additive, atten); + +    color.rgb = srgb_to_linear(color.rgb); + +#ifdef IS_ALPHA +    color.rgb = atmosFragLighting(color.rgb, additive, atten);  #endif -#ifdef WATER_FOG -     -    vec4 fogged = applyWaterFogView(pos, vec4(color.rgb, final_alpha)); +    vec4 fogged = applyWaterFogViewLinear(pos, vec4(color.rgb, final_alpha));      color.rgb = fogged.rgb;      color.a   = fogged.a; -#else -    color.a   = final_alpha; -#endif - -#ifndef IS_HUD -    color.rgb = srgb_to_linear(color.rgb); -    color.rgb = atmosFragLighting(color.rgb, additive, atten);  #endif      frag_color = max(color, vec4(0)); diff --git a/indra/newview/app_settings/shaders/class1/environment/waterFogF.glsl b/indra/newview/app_settings/shaders/class1/environment/waterFogF.glsl index cfdb393b34..140e01cc2a 100644 --- a/indra/newview/app_settings/shaders/class1/environment/waterFogF.glsl +++ b/indra/newview/app_settings/shaders/class1/environment/waterFogF.glsl @@ -30,12 +30,12 @@ uniform vec4 waterFogColor;  uniform float waterFogDensity;  uniform float waterFogKS; -vec3 getPositionEye(); -  vec3 srgb_to_linear(vec3 col);  vec3 linear_to_srgb(vec3 col); -vec4 applyWaterFogView(vec3 pos, vec4 color) +// get a water fog color that will apply the appropriate haze to a color given +// a blend function of (ONE, SOURCE_ALPHA) +vec4 getWaterFogViewNoClip(vec3 pos)  {      vec3 view = normalize(pos);      //normalize view vector @@ -67,38 +67,44 @@ vec4 applyWaterFogView(vec3 pos, vec4 color)      float L = min(t1/t2*t3, 1.0);      float D = pow(0.98, l*kd); + +    return vec4(srgb_to_linear(kc.rgb*L), D); +} + +vec4 getWaterFogView(vec3 pos) +{ +    if (dot(pos, waterPlane.xyz) + waterPlane.w > 0.0) +    { +        return vec4(0,0,0,1); +    } + +    return getWaterFogViewNoClip(pos); +} + +vec4 applyWaterFogView(vec3 pos, vec4 color) +{ +    vec4 fogged = getWaterFogView(pos); -    color.rgb = color.rgb * D + kc.rgb * L; +    color.rgb = color.rgb * fogged.a + fogged.rgb;      return color;  } -vec4 applyWaterFogViewLinearNoClip(vec3 pos, vec4 color, vec3 sunlit) +vec4 applyWaterFogViewLinearNoClip(vec3 pos, vec4 color)  { -    color.rgb = linear_to_srgb(color.rgb); -    color = applyWaterFogView(pos, color); -    color.rgb = srgb_to_linear(color.rgb); +    vec4 fogged = getWaterFogViewNoClip(pos); +    color.rgb *= fogged.a; +    color.rgb += fogged.rgb;      return color;  } -vec4 applyWaterFogViewLinear(vec3 pos, vec4 color, vec3 sunlit) +vec4 applyWaterFogViewLinear(vec3 pos, vec4 color)  {      if (dot(pos, waterPlane.xyz) + waterPlane.w > 0.0)      {          return color;      } -    return applyWaterFogViewLinearNoClip(pos, color, sunlit); -} - -vec4 applyWaterFogViewLinear(vec3 pos, vec4 color) -{ -    return applyWaterFogViewLinear(pos, color, vec3(1)); -} - -vec4 applyWaterFog(vec4 color) -{ -    //normalize view vector -    return applyWaterFogViewLinear(getPositionEye(), color); +    return applyWaterFogViewLinearNoClip(pos, color);  } diff --git a/indra/newview/app_settings/shaders/class1/lighting/lightWaterF.glsl b/indra/newview/app_settings/shaders/class1/lighting/lightWaterF.glsl deleted file mode 100644 index 09b4a6e317..0000000000 --- a/indra/newview/app_settings/shaders/class1/lighting/lightWaterF.glsl +++ /dev/null @@ -1,42 +0,0 @@ -/**  - * @file class1\lighting\lightWaterF.glsl - * - * $LicenseInfo:firstyear=2007&license=viewerlgpl$ - * Second Life Viewer Source Code - * Copyright (C) 2007, Linden Research, Inc. - *  - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; - * version 2.1 of the License only. - *  - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU - * Lesser General Public License for more details. - *  - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA - *  - * Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA - * $/LicenseInfo$ - */ - -out vec4 frag_color; - -in vec4 vertex_color; -in vec2 vary_texcoord0; - -vec3 atmosLighting(vec3 light); -vec4 applyWaterFog(vec4 color); - -void default_lighting_water() -{ -	vec4 color = diffuseLookup(vary_texcoord0.xy) * vertex_color; - -	color.rgb = atmosLighting(color.rgb); - -	frag_color = max(applyWaterFog(color), vec4(0)); -} - diff --git a/indra/newview/app_settings/shaders/class1/lighting/lightWaterNonIndexedF.glsl b/indra/newview/app_settings/shaders/class1/lighting/lightWaterNonIndexedF.glsl deleted file mode 100644 index 4888fa547c..0000000000 --- a/indra/newview/app_settings/shaders/class1/lighting/lightWaterNonIndexedF.glsl +++ /dev/null @@ -1,44 +0,0 @@ -/**  - * @file class1\lighting\lightWaterNonIndexedF.glsl - * - * $LicenseInfo:firstyear=2007&license=viewerlgpl$ - * Second Life Viewer Source Code - * Copyright (C) 2007, Linden Research, Inc. - *  - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; - * version 2.1 of the License only. - *  - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU - * Lesser General Public License for more details. - *  - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA - *  - * Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA - * $/LicenseInfo$ - */ - -out vec4 frag_color; - -in vec4 vertex_color; -in vec2 vary_texcoord0; - -uniform sampler2D diffuseMap; - -vec3 atmosLighting(vec3 light); -vec4 applyWaterFog(vec4 color); - -void default_lighting_water() -{ -	vec4 color = texture(diffuseMap,vary_texcoord0.xy) * vertex_color; - -	color.rgb = atmosLighting(color.rgb); - -	frag_color = max(applyWaterFog(color), vec4(0)); -} - diff --git a/indra/newview/app_settings/shaders/class1/objects/simpleWaterF.glsl b/indra/newview/app_settings/shaders/class1/objects/simpleWaterF.glsl deleted file mode 100644 index 2e87ac5bbc..0000000000 --- a/indra/newview/app_settings/shaders/class1/objects/simpleWaterF.glsl +++ /dev/null @@ -1,33 +0,0 @@ -/**  - * @file simpleWaterF.glsl - * - * $LicenseInfo:firstyear=2007&license=viewerlgpl$ - * Second Life Viewer Source Code - * Copyright (C) 2007, Linden Research, Inc. - *  - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; - * version 2.1 of the License only. - *  - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU - * Lesser General Public License for more details. - *  - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA - *  - * Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA - * $/LicenseInfo$ - */ -  - - -void default_lighting_water(); - -void main()  -{ -	default_lighting_water(); -} diff --git a/indra/newview/app_settings/shaders/class1/windlight/atmosphericsHelpersV.glsl b/indra/newview/app_settings/shaders/class1/windlight/atmosphericsHelpersV.glsl index 6ecbfaecb1..4f88aed765 100644 --- a/indra/newview/app_settings/shaders/class1/windlight/atmosphericsHelpersV.glsl +++ b/indra/newview/app_settings/shaders/class1/windlight/atmosphericsHelpersV.glsl @@ -30,7 +30,6 @@ vec3 getSunlitColor();  vec3 getAmblitColor();  vec3 getAdditiveColor();  vec3 getAtmosAttenuation(); -vec3 getPositionEye();  uniform float scene_light_strength; diff --git a/indra/newview/app_settings/shaders/class1/windlight/atmosphericsV.glsl b/indra/newview/app_settings/shaders/class1/windlight/atmosphericsV.glsl index cc3617ba61..7b59e07243 100644 --- a/indra/newview/app_settings/shaders/class1/windlight/atmosphericsV.glsl +++ b/indra/newview/app_settings/shaders/class1/windlight/atmosphericsV.glsl @@ -42,7 +42,6 @@ void calcAtmosphericVars(vec3 inPositionEye, vec3 light_dir, float ambFactor, ou  void calcAtmospherics(vec3 inPositionEye) {      vec3 P = inPositionEye; -    setPositionEye(P);      vec3 tmpsunlit = vec3(1);      vec3 tmpamblit = vec3(1);      vec3 tmpaddlit = vec3(1); diff --git a/indra/newview/app_settings/shaders/class1/windlight/atmosphericsVarsF.glsl b/indra/newview/app_settings/shaders/class1/windlight/atmosphericsVarsF.glsl index 34669a6796..9d5f60b313 100644 --- a/indra/newview/app_settings/shaders/class1/windlight/atmosphericsVarsF.glsl +++ b/indra/newview/app_settings/shaders/class1/windlight/atmosphericsVarsF.glsl @@ -44,5 +44,5 @@ vec3 getAdditiveColor()  vec3 getAtmosAttenuation()  { -	return vec3(vary_AtmosAttenuation); +	return vary_AtmosAttenuation;  } diff --git a/indra/newview/app_settings/shaders/class1/windlight/atmosphericsVarsV.glsl b/indra/newview/app_settings/shaders/class1/windlight/atmosphericsVarsV.glsl index 1b854d80b3..0617bc9908 100644 --- a/indra/newview/app_settings/shaders/class1/windlight/atmosphericsVarsV.glsl +++ b/indra/newview/app_settings/shaders/class1/windlight/atmosphericsVarsV.glsl @@ -31,7 +31,6 @@ vec3 additive_color;  vec3 atmos_attenuation;  vec3 sunlit_color;  vec3 amblit_color; -vec3 position_eye;  vec3 getSunlitColor()  { @@ -51,16 +50,6 @@ vec3 getAtmosAttenuation()  	return atmos_attenuation;  } -vec3 getPositionEye() -{ -	return position_eye; -} - -void setPositionEye(vec3 v) -{ -	position_eye = v; -} -  void setSunlitColor(vec3 v)  {  	sunlit_color  = v; diff --git a/indra/newview/app_settings/shaders/class1/windlight/atmosphericsVarsWaterF.glsl b/indra/newview/app_settings/shaders/class1/windlight/atmosphericsVarsWaterF.glsl deleted file mode 100644 index 7a6741fe0e..0000000000 --- a/indra/newview/app_settings/shaders/class1/windlight/atmosphericsVarsWaterF.glsl +++ /dev/null @@ -1,50 +0,0 @@ -/**  - * @file class2\wl\atmosphericVarsWaterF.glsl - * - * $LicenseInfo:firstyear=2007&license=viewerlgpl$ - * Second Life Viewer Source Code - * Copyright (C) 2007, Linden Research, Inc. - *  - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; - * version 2.1 of the License only. - *  - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU - * Lesser General Public License for more details. - *  - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA - *  - * Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA - * $/LicenseInfo$ - */ -  -in vec3 vary_PositionEye; -in vec3 vary_AdditiveColor; -in vec3 vary_AtmosAttenuation; - -vec3 getSunlitColor() -{ -	return vec3(0,0,0); -} -vec3 getAmblitColor() -{ -	return vec3(0,0,0); -} -vec3 getAdditiveColor() -{ -	return vary_AdditiveColor; -} -vec3 getAtmosAttenuation() -{ -	return vary_AtmosAttenuation; -} -vec3 getPositionEye() -{ -	return vary_PositionEye; -} - diff --git a/indra/newview/app_settings/shaders/class1/windlight/atmosphericsVarsWaterV.glsl b/indra/newview/app_settings/shaders/class1/windlight/atmosphericsVarsWaterV.glsl deleted file mode 100644 index 23c3aed4d8..0000000000 --- a/indra/newview/app_settings/shaders/class1/windlight/atmosphericsVarsWaterV.glsl +++ /dev/null @@ -1,81 +0,0 @@ -/**  - * @file class2\wl\atmosphericVarsWaterV.glsl - * - * $LicenseInfo:firstyear=2007&license=viewerlgpl$ - * Second Life Viewer Source Code - * Copyright (C) 2007, Linden Research, Inc. - *  - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; - * version 2.1 of the License only. - *  - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU - * Lesser General Public License for more details. - *  - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA - *  - * Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA - * $/LicenseInfo$ - */ -  -out vec3 vary_PositionEye; -out vec3 vary_AdditiveColor; -out vec3 vary_AtmosAttenuation; - -vec3 atmos_attenuation; -vec3 sunlit_color; -vec3 amblit_color; - -vec3 getSunlitColor() -{ -	return sunlit_color; -} -vec3 getAmblitColor() -{ -	return amblit_color; -} - -vec3 getAdditiveColor() -{ -	return vary_AdditiveColor; -} -vec3 getAtmosAttenuation() -{ -	return atmos_attenuation; -} - -vec3 getPositionEye() -{ -	return vary_PositionEye; -} - -void setPositionEye(vec3 v) -{ -	vary_PositionEye = v; -} - -void setSunlitColor(vec3 v) -{ -	sunlit_color  = v; -} - -void setAmblitColor(vec3 v) -{ -	amblit_color = v; -} - -void setAdditiveColor(vec3 v) -{ -	vary_AdditiveColor = v; -} - -void setAtmosAttenuation(vec3 v) -{ -	atmos_attenuation = v; -	vary_AtmosAttenuation = v; -} diff --git a/indra/newview/app_settings/shaders/class2/deferred/alphaF.glsl b/indra/newview/app_settings/shaders/class2/deferred/alphaF.glsl index b63f3b60f9..07fa5cd01c 100644 --- a/indra/newview/app_settings/shaders/class2/deferred/alphaF.glsl +++ b/indra/newview/app_settings/shaders/class2/deferred/alphaF.glsl @@ -65,9 +65,7 @@ uniform vec3 light_diffuse[8];  void waterClip(vec3 pos); -#ifdef WATER_FOG -vec4 applyWaterFogViewLinear(vec3 pos, vec4 color, vec3 sunlit); -#endif +vec4 applyWaterFogViewLinear(vec3 pos, vec4 color);  vec3 srgb_to_linear(vec3 c);  vec3 linear_to_srgb(vec3 c); @@ -270,12 +268,6 @@ void main()      color.rgb *= diffuse_linear.rgb; -    color.rgb = atmosFragLightingLinear(color.rgb, additive, atten); - -#ifdef WATER_FOG -    color = applyWaterFogViewLinear(pos.xyz, color, sunlit_linear); -#endif // WATER_FOG -      vec4 light = vec4(0,0,0,0);     #define LIGHT_LOOP(i) light.rgb += calcPointLightOrSpotLight(light_diffuse[i].rgb, diffuse_linear.rgb, pos.xyz, norm, light_position[i], light_direction[i].xyz, light_attenuation[i].x, light_attenuation[i].y, light_attenuation[i].z, light_attenuation[i].w); @@ -291,6 +283,10 @@ void main()      // sum local light contrib in linear colorspace      color.rgb += light.rgb; +    color.rgb = atmosFragLightingLinear(color.rgb, additive, atten); + +    color = applyWaterFogViewLinear(pos.xyz, color); +  #endif // #else // FOR_IMPOSTOR  #ifdef IS_HUD diff --git a/indra/newview/app_settings/shaders/class2/deferred/pbralphaF.glsl b/indra/newview/app_settings/shaders/class2/deferred/pbralphaF.glsl index 35d752be02..80c1769b15 100644 --- a/indra/newview/app_settings/shaders/class2/deferred/pbralphaF.glsl +++ b/indra/newview/app_settings/shaders/class2/deferred/pbralphaF.glsl @@ -84,9 +84,7 @@ vec3 linear_to_srgb(vec3 c);  void calcAtmosphericVarsLinear(vec3 inPositionEye, vec3 norm, vec3 light_dir, out vec3 sunlit, out vec3 amblit, out vec3 atten, out vec3 additive);  vec3 atmosFragLightingLinear(vec3 color, vec3 additive, vec3 atten); -#ifdef WATER_FOG -vec4 applyWaterFogViewLinear(vec3 pos, vec4 color, vec3 sunlit); -#endif +vec4 applyWaterFogViewLinear(vec3 pos, vec4 color);  void calcHalfVectors(vec3 lv, vec3 n, vec3 v, out vec3 h, out vec3 l, out float nh, out float nl, out float nv, out float vh, out float lightDist);  float calcLegacyDistanceAttenuation(float distance, float falloff); @@ -228,13 +226,6 @@ void main()      color = pbrBaseLight(diffuseColor, specularColor, metallic, v, norm.xyz, perceptualRoughness, light_dir, sunlit_linear, scol, radiance, irradiance, colorEmissive, ao, additive, atten); -    color.rgb = atmosFragLightingLinear(color.rgb, additive, atten); -     -#ifdef WATER_FOG -    vec4 temp = applyWaterFogViewLinear(pos, vec4(color, 0.0), sunlit_linear); -    color = temp.rgb; -#endif -      vec3 light = vec3(0);      // Punctual lights @@ -250,7 +241,11 @@ void main()      color.rgb += light.rgb; +    color.rgb = atmosFragLightingLinear(color.rgb, additive, atten); +    vec4 temp = applyWaterFogViewLinear(pos, vec4(color, 0.0)); +    color = temp.rgb; +      float a = basecolor.a*vertex_color.a;      frag_color = max(vec4(color.rgb,a), vec4(0)); diff --git a/indra/newview/app_settings/shaders/class3/deferred/fullbrightShinyF.glsl b/indra/newview/app_settings/shaders/class3/deferred/fullbrightShinyF.glsl index 5483a4e29c..6446015b03 100644 --- a/indra/newview/app_settings/shaders/class3/deferred/fullbrightShinyF.glsl +++ b/indra/newview/app_settings/shaders/class3/deferred/fullbrightShinyF.glsl @@ -40,6 +40,8 @@ in vec3 vary_position;  uniform samplerCube environmentMap;  vec3 atmosFragLighting(vec3 light, vec3 additive, vec3 atten); +vec4 applyWaterFogViewLinear(vec3 pos, vec4 color); +  void calcAtmosphericVars(vec3 inPositionEye, vec3 light_dir, float ambFactor, out vec3 sunlit, out vec3 amblit, out vec3 additive, out vec3 atten);  vec3 linear_to_srgb(vec3 c); @@ -84,6 +86,7 @@ void main()      applyLegacyEnv(color.rgb, legacyenv, spec, pos, norm, env_intensity);      color.rgb = atmosFragLighting(color.rgb, additive, atten); +    color = applyWaterFogViewLinear(pos.xyz, color);  #endif  	color.a = 1.0; diff --git a/indra/newview/app_settings/shaders/class3/deferred/hazeF.glsl b/indra/newview/app_settings/shaders/class3/deferred/hazeF.glsl new file mode 100644 index 0000000000..e8f7d73f1f --- /dev/null +++ b/indra/newview/app_settings/shaders/class3/deferred/hazeF.glsl @@ -0,0 +1,107 @@ +/** + * @file class3/deferred/hazeF.glsl + * + * $LicenseInfo:firstyear=2023&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2023, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA + * $/LicenseInfo$ + */ + +out vec4 frag_color; + +uniform sampler2D normalMap; + +// Inputs +uniform vec3 sun_dir; +uniform vec3 moon_dir; +uniform int  sun_up_factor; +in vec2 vary_fragcoord; + +vec3 getNorm(vec2 pos_screen); +vec4 getPositionWithDepth(vec2 pos_screen, float depth); +void calcAtmosphericVarsLinear(vec3 inPositionEye, vec3 norm, vec3 light_dir, out vec3 sunlit, out vec3 amblit, out vec3 atten, out vec3 additive); + +float getDepth(vec2 pos_screen); + +vec3 linear_to_srgb(vec3 c); +vec3 srgb_to_linear(vec3 c); + +uniform vec4 waterPlane; + +uniform int cube_snapshot; + +uniform float sky_hdr_scale; + +void main() +{ +    vec2  tc           = vary_fragcoord.xy; +    float depth        = getDepth(tc.xy); +    vec4  pos          = getPositionWithDepth(tc, depth); +    vec4  norm         = texture(normalMap, tc); +    norm.xyz           = getNorm(tc); +    vec3  light_dir   = (sun_up_factor == 1) ? sun_dir : moon_dir; + +    vec3  color = vec3(0); +    float bloom = 0.0; + +    vec3 sunlit; +    vec3 amblit; +    vec3 additive; +    vec3 atten; + +    calcAtmosphericVarsLinear(pos.xyz, norm.xyz, light_dir, sunlit, amblit, additive, atten); + +    vec3 sunlit_linear = srgb_to_linear(sunlit); +     +    // mask off atmospherics below water (when camera is under water) +    bool do_atmospherics = false; +         +    if (dot(vec3(0), waterPlane.xyz) + waterPlane.w > 0.0 || +        dot(pos.xyz, waterPlane.xyz) + waterPlane.w > 0.0) +    { +        do_atmospherics = true; +    } +     + +    vec3  irradiance = vec3(0); +    vec3  radiance  = vec3(0); + +    if (depth >= 1.0) +    { +        //should only be true of WL sky, just port over base color value +        discard; +    } + +   float alpha = 0.0; + +    if (do_atmospherics) +    { +        alpha = atten.r; +        color = srgb_to_linear(additive*2.0); +        color *= sky_hdr_scale; +    } +    else +    { +        color = vec3(0,0,0); +        alpha = 1.0; +    } + +    frag_color.rgb = max(color.rgb, vec3(0)); //output linear since local lights will be added to this shader's results +    frag_color.a = alpha; +} diff --git a/indra/newview/app_settings/shaders/class3/deferred/materialF.glsl b/indra/newview/app_settings/shaders/class3/deferred/materialF.glsl index acff03ec4b..1880f0c870 100644 --- a/indra/newview/app_settings/shaders/class3/deferred/materialF.glsl +++ b/indra/newview/app_settings/shaders/class3/deferred/materialF.glsl @@ -37,9 +37,7 @@  uniform float emissive_brightness;  // fullbright flag, 1.0 == fullbright, 0.0 otherwise  uniform int sun_up_factor; -#ifdef WATER_FOG -vec4 applyWaterFogViewLinear(vec3 pos, vec4 color, vec3 sunlit); -#endif +vec4 applyWaterFogViewLinear(vec3 pos, vec4 color);  vec3 atmosFragLightingLinear(vec3 l, vec3 additive, vec3 atten);  vec3 scaleSoftClipFragLinear(vec3 l); @@ -386,13 +384,6 @@ void main()          glare += cur_glare;      } -    color.rgb = atmosFragLightingLinear(color.rgb, additive, atten);  - -#ifdef WATER_FOG -    vec4 temp = applyWaterFogViewLinear(pos, vec4(color, 0.0), sunlit_linear); -    color = temp.rgb; -#endif -      vec3 npos = normalize(-pos.xyz);      vec3 light = vec3(0, 0, 0); @@ -408,6 +399,11 @@ void main()      color += light; +    color.rgb = atmosFragLightingLinear(color.rgb, additive, atten);  + +    vec4 temp = applyWaterFogViewLinear(pos, vec4(color, 0.0)); +    color = temp.rgb; +      glare *= 1.0-emissive;      glare = min(glare, 1.0);      float al = max(diffcol.a, glare) * vertex_color.a; diff --git a/indra/newview/app_settings/shaders/class3/deferred/softenLightF.glsl b/indra/newview/app_settings/shaders/class3/deferred/softenLightF.glsl index 35e99c5bd2..5e8fe9301a 100644 --- a/indra/newview/app_settings/shaders/class3/deferred/softenLightF.glsl +++ b/indra/newview/app_settings/shaders/class3/deferred/softenLightF.glsl @@ -83,10 +83,6 @@ uniform vec4 waterPlane;  uniform int cube_snapshot; -#ifdef WATER_FOG -vec4 applyWaterFogViewLinear(vec3 pos, vec4 color); -#endif -  uniform float sky_hdr_scale;  void calcHalfVectors(vec3 lv, vec3 n, vec3 v, out vec3 h, out vec3 l, out float nh, out float nl, out float nv, out float vh, out float lightDist); @@ -167,18 +163,6 @@ void main()      vec3 sunlit_linear = srgb_to_linear(sunlit);      vec3 amblit_linear = amblit; -    bool do_atmospherics = false; - -#ifndef WATER_FOG -    // when above water, mask off atmospherics below water -    if (dot(pos.xyz, waterPlane.xyz) + waterPlane.w > 0.0) -    { -        do_atmospherics = true; -    } -#else -    do_atmospherics = true; -#endif -      vec3  irradiance = vec3(0);      vec3  radiance  = vec3(0); @@ -203,11 +187,6 @@ void main()          vec3 v = -normalize(pos.xyz);          color = pbrBaseLight(diffuseColor, specularColor, metallic, v, norm.xyz, perceptualRoughness, light_dir, sunlit_linear, scol, radiance, irradiance, colorEmissive, ao, additive, atten); -         -        if (do_atmospherics) -        { -            color = atmosFragLightingLinear(color, additive, atten); -        }      }      else if (!GET_GBUFFER_FLAG(GBUFFER_FLAG_HAS_ATMOS))      { @@ -273,21 +252,8 @@ void main()          {  // add environment map              applyLegacyEnv(color, legacyenv, spec, pos.xyz, norm.xyz, envIntensity);          } - -         -        if (do_atmospherics) -        { -            color = atmosFragLightingLinear(color, additive, atten); -        }     } -     - -    #ifdef WATER_FOG -        vec4 fogged = applyWaterFogViewLinear(pos.xyz, vec4(color, bloom)); -        color       = fogged.rgb; -    #endif -      frag_color.rgb = max(color.rgb, vec3(0)); //output linear since local lights will be added to this shader's results      frag_color.a = 0.0;  } diff --git a/indra/newview/app_settings/shaders/class1/lighting/lightWaterAlphaMaskF.glsl b/indra/newview/app_settings/shaders/class3/deferred/waterHazeF.glsl index 670b3ddaf1..025bcdaf3e 100644 --- a/indra/newview/app_settings/shaders/class1/lighting/lightWaterAlphaMaskF.glsl +++ b/indra/newview/app_settings/shaders/class3/deferred/waterHazeF.glsl @@ -1,51 +1,49 @@ -/**  - * @file class1\lighting\lightWaterAlphaMaskF.glsl +/** + * @file class3/deferred/waterHazeF.glsl   * - * $LicenseInfo:firstyear=2011&license=viewerlgpl$ + * $LicenseInfo:firstyear=2023&license=viewerlgpl$   * Second Life Viewer Source Code - * Copyright (C) 2011, Linden Research, Inc. - *  + * Copyright (C) 2023, Linden Research, Inc. + *   * This library is free software; you can redistribute it and/or   * modify it under the terms of the GNU Lesser General Public   * License as published by the Free Software Foundation;   * version 2.1 of the License only. - *  + *   * This library is distributed in the hope that it will be useful,   * but WITHOUT ANY WARRANTY; without even the implied warranty of   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU   * Lesser General Public License for more details. - *  + *   * You should have received a copy of the GNU Lesser General Public   * License along with this library; if not, write to the Free Software   * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA - *  + *   * Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA   * $/LicenseInfo$   */  out vec4 frag_color; -uniform float minimum_alpha; +// Inputs +in vec4 vary_fragcoord; -vec3 atmosLighting(vec3 light); -vec4 applyWaterFog(vec4 color); +uniform sampler2D normalMap; -in vec4 vertex_color; -in vec2 vary_texcoord0; +vec4 getPositionWithDepth(vec2 pos_screen, float depth); +float getDepth(vec2 pos_screen); -void default_lighting_water() -{ -	vec4 color = diffuseLookup(vary_texcoord0.xy); - -	if (color.a < minimum_alpha) -	{ -		discard; -	} +vec4 getWaterFogView(vec3 pos); -	color.rgb *= vertex_color.rgb; +void main() +{ +    vec2  tc           = vary_fragcoord.xy/vary_fragcoord.w*0.5+0.5; +    float depth        = getDepth(tc.xy); +    vec4  pos          = getPositionWithDepth(tc, depth); +    vec4  norm         = texture(normalMap, tc); -	color.rgb = atmosLighting(color.rgb); +    vec4 fogged = getWaterFogView(pos.xyz); -	frag_color = max(applyWaterFog(color), vec4(0)); +    frag_color.rgb = max(fogged.rgb, vec3(0)); //output linear since local lights will be added to this shader's results +    frag_color.a = fogged.a;  } - diff --git a/indra/newview/app_settings/shaders/class1/lighting/lightWaterAlphaMaskNonIndexedF.glsl b/indra/newview/app_settings/shaders/class3/deferred/waterHazeV.glsl index 2e5ed57014..16381a5d51 100644 --- a/indra/newview/app_settings/shaders/class1/lighting/lightWaterAlphaMaskNonIndexedF.glsl +++ b/indra/newview/app_settings/shaders/class3/deferred/waterHazeV.glsl @@ -1,55 +1,59 @@ -/**  - * @file class1\lighting\lightWaterAlphaMaskNonIndexedF.glsl +/** + * @file class3/deferred/waterHazeV.glsl   * - * $LicenseInfo:firstyear=2011&license=viewerlgpl$ + * $LicenseInfo:firstyear=2023&license=viewerlgpl$   * Second Life Viewer Source Code - * Copyright (C) 2011, Linden Research, Inc. - *  + * Copyright (C) 2023, Linden Research, Inc. + *   * This library is free software; you can redistribute it and/or   * modify it under the terms of the GNU Lesser General Public   * License as published by the Free Software Foundation;   * version 2.1 of the License only. - *  + *   * This library is distributed in the hope that it will be useful,   * but WITHOUT ANY WARRANTY; without even the implied warranty of   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU   * Lesser General Public License for more details. - *  + *   * You should have received a copy of the GNU Lesser General Public   * License along with this library; if not, write to the Free Software   * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA - *  + *   * Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA   * $/LicenseInfo$   */ -out vec4 frag_color; +in vec3 position; -uniform float minimum_alpha; +uniform vec2 screen_res; -uniform sampler2D diffuseMap; +out vec4 vary_fragcoord; -vec3 atmosLighting(vec3 light); -vec4 applyWaterFog(vec4 color); +// forwards +void setAtmosAttenuation(vec3 c); +void setAdditiveColor(vec3 c); -in vec4 vertex_color; -in vec2 vary_texcoord0; +uniform vec4 waterPlane; -void default_lighting_water() +uniform int above_water; + +uniform mat4 modelview_projection_matrix; + +void main()  { -	vec4 color = texture(diffuseMap,vary_texcoord0.xy); +	//transform vertex +	vec4 pos = vec4(position.xyz, 1.0); -	if (color.a < minimum_alpha) -	{ -		discard; -	} +    if (above_water > 0) +    { +        pos = modelview_projection_matrix*pos; +    } -	color.rgb *= vertex_color.rgb; +    gl_Position = pos;  -	color.rgb = atmosLighting(color.rgb); +    // appease OSX GLSL compiler/linker by touching all the varyings we said we would +    setAtmosAttenuation(vec3(1)); +    setAdditiveColor(vec3(0)); -	color = applyWaterFog(color); -	 -	frag_color = max(color, vec4(0)); +	vary_fragcoord = pos;  } - diff --git a/indra/newview/app_settings/shaders/class3/environment/underWaterF.glsl b/indra/newview/app_settings/shaders/class3/environment/underWaterF.glsl index e99ad5b474..ddb1b79681 100644 --- a/indra/newview/app_settings/shaders/class3/environment/underWaterF.glsl +++ b/indra/newview/app_settings/shaders/class3/environment/underWaterF.glsl @@ -55,7 +55,7 @@ in vec4 littleWave;  in vec4 view;  in vec3 vary_position; -vec4 applyWaterFogViewLinearNoClip(vec3 pos, vec4 color, vec3 sunlit); +vec4 applyWaterFogViewLinearNoClip(vec3 pos, vec4 color);  void main()   { @@ -77,5 +77,7 @@ void main()      vec4 fb = vec4(waterFogColorLinear, 0.0);  #endif -	frag_color = max(applyWaterFogViewLinearNoClip(vary_position, fb, vec3(1)), vec4(0)); +    fb = applyWaterFogViewLinearNoClip(vary_position, fb); + +    frag_color = max(fb, vec4(0));  } diff --git a/indra/newview/app_settings/shaders/class3/environment/waterF.glsl b/indra/newview/app_settings/shaders/class3/environment/waterF.glsl index ddade462be..f53bc2e13e 100644 --- a/indra/newview/app_settings/shaders/class3/environment/waterF.glsl +++ b/indra/newview/app_settings/shaders/class3/environment/waterF.glsl @@ -32,9 +32,8 @@ float sampleDirectionalShadow(vec3 pos, vec3 norm, vec2 pos_screen);  #endif  vec3 scaleSoftClipFragLinear(vec3 l); -vec3 atmosFragLightingLinear(vec3 light, vec3 additive, vec3 atten);  void calcAtmosphericVarsLinear(vec3 inPositionEye, vec3 norm, vec3 light_dir, out vec3 sunlit, out vec3 amblit, out vec3 atten, out vec3 additive); -vec4 applyWaterFogViewLinear(vec3 pos, vec4 color, vec3 sunlit); +vec4 applyWaterFogViewLinear(vec3 pos, vec4 color);  // PBR interface  vec2 BRDF(float NoV, float roughness); @@ -223,9 +222,8 @@ void main()          refPos = getPositionWithNDC(vec3(distort2 * 2.0 - vec2(1.0), depth * 2.0 - 1.0));      } -    fb = applyWaterFogViewLinear(refPos, fb, sunlit);  #else -    vec4 fb = applyWaterFogViewLinear(viewVec*2048.0, vec4(1.0), sunlit_linear); +    vec4 fb = applyWaterFogViewLinear(viewVec*2048.0, vec4(1.0));  #endif      // fudge sample on other side of water to be a tad darker @@ -282,8 +280,6 @@ void main()      color = ((1.0 - f) * color) + fb.rgb; -    color = atmosFragLightingLinear(color, additive, atten); -      float spec = min(max(max(punctual.r, punctual.g), punctual.b), 0.05);      frag_color = max(vec4(color, spec), vec4(0)); | 
