diff options
| author | Graham Linden <graham@lindenlab.com> | 2018-11-19 10:49:14 -0800 | 
|---|---|---|
| committer | Graham Linden <graham@lindenlab.com> | 2018-11-19 10:49:14 -0800 | 
| commit | 30606a564db3dd3755ed6dc1c30cdacc8c35b40b (patch) | |
| tree | 2faa782f1d16b21d3a45b4ad9ececfd74761a1d9 /indra/newview/app_settings/shaders | |
| parent | 5a8e633ece6bcab3b5c2a01b8e31b49ba12714a8 (diff) | |
SL-10032
Plug more holes through which env ambient terms were finding their way into lighting calcs for HUDs.
Fix up mismatched indenting (tabs v spaces) on several shaders.
Diffstat (limited to 'indra/newview/app_settings/shaders')
8 files changed, 119 insertions, 111 deletions
| diff --git a/indra/newview/app_settings/shaders/class1/windlight/atmosphericsF.glsl b/indra/newview/app_settings/shaders/class1/windlight/atmosphericsF.glsl index c1cc3679a7..8b7c4f2ecf 100644 --- a/indra/newview/app_settings/shaders/class1/windlight/atmosphericsF.glsl +++ b/indra/newview/app_settings/shaders/class1/windlight/atmosphericsF.glsl @@ -32,7 +32,7 @@ vec3 atmosFragAmbient(vec3 light, vec3 sunlit)  vec3 atmosFragLighting(vec3 light, vec3 additive, vec3 atten)  {      /* stub function for fallback compatibility on class1 hardware */ -	return light; +    return light;  }  vec3 atmosFragAffectDirectionalLight(float light, vec3 sunlit) @@ -43,11 +43,11 @@ vec3 atmosFragAffectDirectionalLight(float light, vec3 sunlit)  vec3 atmosLighting(vec3 light)  {      /* stub function for fallback compatibility on class1 hardware */ -	return light; +    return light;  }  void calcFragAtmospherics(vec3 inPositionEye, float ambFactor, out vec3 sunlit, out vec3 amblit, out vec3 atten, out vec3 additive)  { -	/* stub function for fallback compatibility on class1 hardware */ +    /* stub function for fallback compatibility on class1 hardware */  } diff --git a/indra/newview/app_settings/shaders/class1/windlight/atmosphericsHelpersF.glsl b/indra/newview/app_settings/shaders/class1/windlight/atmosphericsHelpersF.glsl index c16e3d50a2..10407eeb02 100644 --- a/indra/newview/app_settings/shaders/class1/windlight/atmosphericsHelpersF.glsl +++ b/indra/newview/app_settings/shaders/class1/windlight/atmosphericsHelpersF.glsl @@ -25,25 +25,27 @@  uniform vec4 sunlight_color;  uniform vec4 light_ambient; +uniform int no_atmo;  vec3 atmosAmbient(vec3 light)  { -	return light + light_ambient.rgb; +    if (no_atmo == 1) return light + vec3(0.66); +    return light + light_ambient.rgb;  }  vec3 atmosAffectDirectionalLight(float lightIntensity)  { -	return sunlight_color.rgb * lightIntensity; +    return sunlight_color.rgb * lightIntensity;  }  vec3 atmosGetDiffuseSunlightColor()  { -	return sunlight_color.rgb; +    return sunlight_color.rgb;  }  vec3 scaleDownLight(vec3 light)  { -	/* stub function for fallback compatibility on class1 hardware */ -	return light; +    /* stub function for fallback compatibility on class1 hardware */ +    return light;  } diff --git a/indra/newview/app_settings/shaders/class1/windlight/atmosphericsHelpersV.glsl b/indra/newview/app_settings/shaders/class1/windlight/atmosphericsHelpersV.glsl index 89b6a52909..14034bccae 100644 --- a/indra/newview/app_settings/shaders/class1/windlight/atmosphericsHelpersV.glsl +++ b/indra/newview/app_settings/shaders/class1/windlight/atmosphericsHelpersV.glsl @@ -25,31 +25,33 @@  uniform vec4 sunlight_color;  uniform vec4 light_ambient; +uniform int no_atmo;  vec3 atmosAmbient(vec3 light)  { -	return light + light_ambient.rgb; +    if (no_atmo == 1) return light + vec3(0.66); +    return light + light_ambient.rgb;  }  vec3 atmosAffectDirectionalLight(float lightIntensity)  { -	return sunlight_color.rgb * lightIntensity; +    return sunlight_color.rgb * lightIntensity;  }  vec3 atmosGetDiffuseSunlightColor()  { -	return sunlight_color.rgb; +    return sunlight_color.rgb;  }  vec3 scaleDownLight(vec3 light)  { -	/* stub function for fallback compatibility on class1 hardware */ -	return light; +    /* stub function for fallback compatibility on class1 hardware */ +    return light;  }  vec3 scaleUpLight(vec3 light)  { -	/* stub function for fallback compatibility on class1 hardware */ -	return light; +    /* stub function for fallback compatibility on class1 hardware */ +    return light;  } diff --git a/indra/newview/app_settings/shaders/class1/windlight/atmosphericsV.glsl b/indra/newview/app_settings/shaders/class1/windlight/atmosphericsV.glsl index 76d7d5059d..b749e1a7a2 100644 --- a/indra/newview/app_settings/shaders/class1/windlight/atmosphericsV.glsl +++ b/indra/newview/app_settings/shaders/class1/windlight/atmosphericsV.glsl @@ -29,7 +29,7 @@ void setPositionEye(vec3 v);  void calcAtmospherics(vec3 inPositionEye)  { -	/* stub function for fallback compatibility on class1 hardware */ -	setPositionEye(inPositionEye); +    /* stub function for fallback compatibility on class1 hardware */ +    setPositionEye(inPositionEye);  } diff --git a/indra/newview/app_settings/shaders/class2/windlight/atmosphericsF.glsl b/indra/newview/app_settings/shaders/class2/windlight/atmosphericsF.glsl index 3f33eeb8d8..2a629f4f42 100644 --- a/indra/newview/app_settings/shaders/class2/windlight/atmosphericsF.glsl +++ b/indra/newview/app_settings/shaders/class2/windlight/atmosphericsF.glsl @@ -51,9 +51,9 @@ vec3 atmosFragLighting(vec3 light, vec3 additive, vec3 atten)      {          return light;      } -	light *= atten.r; -	light += additive; -	return light * 2.0; +    light *= atten.r; +    light += additive; +    return light * 2.0;  }  vec3 atmosLighting(vec3 light) @@ -63,84 +63,84 @@ vec3 atmosLighting(vec3 light)  void calcFragAtmospherics(vec3 inPositionEye, float ambFactor, out vec3 sunlit, out vec3 amblit, out vec3 additive, out vec3 atten) { -	vec3 P = inPositionEye; -	 -	vec3 tmpLightnorm = lightnorm.xyz; - -	vec3 Pn = normalize(P); -	float Plen = length(P); - -	vec4 temp1 = vec4(0); -	vec3 temp2 = vec3(0); -	vec4 blue_weight; -	vec4 haze_weight; -	vec4 sunlight = sunlight_color; -	vec4 light_atten; - -	//sunlight attenuation effect (hue and brightness) due to atmosphere -	//this is used later for sunlight modulation at various altitudes -	light_atten = (blue_density + vec4(haze_density * 0.25)) * (density_multiplier * max_y); -		//I had thought blue_density and haze_density should have equal weighting, -		//but attenuation due to haze_density tends to seem too strong - -	temp1 = blue_density + vec4(haze_density); -	blue_weight = blue_density / temp1; -	haze_weight = vec4(haze_density) / temp1; - -	//(TERRAIN) compute sunlight from lightnorm only (for short rays like terrain) -	temp2.y = max(0.0, tmpLightnorm.y); -	temp2.y = 1. / temp2.y; -	sunlight *= exp( - light_atten * temp2.y); - -	// main atmospheric scattering line integral -	temp2.z = Plen * density_multiplier; - -	// Transparency (-> temp1) -	// ATI Bugfix -- can't store temp1*temp2.z*distance_multiplier in a variable because the ati -	// compiler gets confused. -	temp1 = exp(-temp1 * temp2.z * distance_multiplier); - -	//final atmosphere attenuation factor -	atten = temp1.rgb; -	 -	//compute haze glow -	//(can use temp2.x as temp because we haven't used it yet) -	temp2.x = dot(Pn, tmpLightnorm.xyz); -	temp2.x = 1. - temp2.x; -		//temp2.x is 0 at the sun and increases away from sun -	temp2.x = max(temp2.x, .03);	//was glow.y -		//set a minimum "angle" (smaller glow.y allows tighter, brighter hotspot) -	temp2.x *= glow.x; -		//higher glow.x gives dimmer glow (because next step is 1 / "angle") -	temp2.x = pow(temp2.x, glow.z); -		//glow.z should be negative, so we're doing a sort of (1 / "angle") function - -	//add "minimum anti-solar illumination" -	temp2.x += .25; -	 -	//increase ambient when there are more clouds -	vec4 tmpAmbient = ambient + (vec4(1.) - ambient) * cloud_shadow * 0.5; -	 -	/*  decrease value and saturation (that in HSV, not HSL) for occluded areas -	 * // for HSV color/geometry used here, see http://gimp-savvy.com/BOOK/index.html?node52.html -	 * // The following line of code performs the equivalent of: -	 * float ambAlpha = tmpAmbient.a; -	 * float ambValue = dot(vec3(tmpAmbient), vec3(0.577)); // projection onto <1/rt(3), 1/rt(3), 1/rt(3)>, the neutral white-black axis -	 * vec3 ambHueSat = vec3(tmpAmbient) - vec3(ambValue); -	 * tmpAmbient = vec4(RenderSSAOEffect.valueFactor * vec3(ambValue) + RenderSSAOEffect.saturationFactor *(1.0 - ambFactor) * ambHueSat, ambAlpha); -	 */ -	tmpAmbient = vec4(mix(ssao_effect_mat * tmpAmbient.rgb, tmpAmbient.rgb, ambFactor), tmpAmbient.a); - -	//haze color +    vec3 P = inPositionEye; +     +    vec3 tmpLightnorm = lightnorm.xyz; + +    vec3 Pn = normalize(P); +    float Plen = length(P); + +    vec4 temp1 = vec4(0); +    vec3 temp2 = vec3(0); +    vec4 blue_weight; +    vec4 haze_weight; +    vec4 sunlight = sunlight_color; +    vec4 light_atten; + +    //sunlight attenuation effect (hue and brightness) due to atmosphere +    //this is used later for sunlight modulation at various altitudes +    light_atten = (blue_density + vec4(haze_density * 0.25)) * (density_multiplier * max_y); +        //I had thought blue_density and haze_density should have equal weighting, +        //but attenuation due to haze_density tends to seem too strong + +    temp1 = blue_density + vec4(haze_density); +    blue_weight = blue_density / temp1; +    haze_weight = vec4(haze_density) / temp1; + +    //(TERRAIN) compute sunlight from lightnorm only (for short rays like terrain) +    temp2.y = max(0.0, tmpLightnorm.y); +    temp2.y = 1. / temp2.y; +    sunlight *= exp( - light_atten * temp2.y); + +    // main atmospheric scattering line integral +    temp2.z = Plen * density_multiplier; + +    // Transparency (-> temp1) +    // ATI Bugfix -- can't store temp1*temp2.z*distance_multiplier in a variable because the ati +    // compiler gets confused. +    temp1 = exp(-temp1 * temp2.z * distance_multiplier); + +    //final atmosphere attenuation factor +    atten = temp1.rgb; +     +    //compute haze glow +    //(can use temp2.x as temp because we haven't used it yet) +    temp2.x = dot(Pn, tmpLightnorm.xyz); +    temp2.x = 1. - temp2.x; +        //temp2.x is 0 at the sun and increases away from sun +    temp2.x = max(temp2.x, .03);    //was glow.y +        //set a minimum "angle" (smaller glow.y allows tighter, brighter hotspot) +    temp2.x *= glow.x; +        //higher glow.x gives dimmer glow (because next step is 1 / "angle") +    temp2.x = pow(temp2.x, glow.z); +        //glow.z should be negative, so we're doing a sort of (1 / "angle") function + +    //add "minimum anti-solar illumination" +    temp2.x += .25; +     +    //increase ambient when there are more clouds +    vec4 tmpAmbient = ambient + (vec4(1.) - ambient) * cloud_shadow * 0.5; +     +    /*  decrease value and saturation (that in HSV, not HSL) for occluded areas +     * // for HSV color/geometry used here, see http://gimp-savvy.com/BOOK/index.html?node52.html +     * // The following line of code performs the equivalent of: +     * float ambAlpha = tmpAmbient.a; +     * float ambValue = dot(vec3(tmpAmbient), vec3(0.577)); // projection onto <1/rt(3), 1/rt(3), 1/rt(3)>, the neutral white-black axis +     * vec3 ambHueSat = vec3(tmpAmbient) - vec3(ambValue); +     * tmpAmbient = vec4(RenderSSAOEffect.valueFactor * vec3(ambValue) + RenderSSAOEffect.saturationFactor *(1.0 - ambFactor) * ambHueSat, ambAlpha); +     */ +    tmpAmbient = vec4(mix(ssao_effect_mat * tmpAmbient.rgb, tmpAmbient.rgb, ambFactor), tmpAmbient.a); + +    //haze color          additive = -		vec3(blue_horizon * blue_weight * (sunlight*(1.-cloud_shadow) + tmpAmbient) -     	          + (haze_horizon * haze_weight) * (sunlight*(1.-cloud_shadow) * temp2.x -		  + tmpAmbient)); +        vec3(blue_horizon * blue_weight * (sunlight*(1.-cloud_shadow) + tmpAmbient) +                  + (haze_horizon * haze_weight) * (sunlight*(1.-cloud_shadow) * temp2.x +          + tmpAmbient)); -	//brightness of surface both sunlight and ambient -	sunlit = vec3(sunlight * .5); -	amblit = vec3(tmpAmbient * .25); +    //brightness of surface both sunlight and ambient +    sunlit = vec3(sunlight * .5); +    amblit = vec3(tmpAmbient * .25);      additive  = normalize(additive); -	additive *= vec3(1.0 - exp(-temp2.z * distance_multiplier)) * 0.5; +    additive *= vec3(1.0 - exp(-temp2.z * distance_multiplier)) * 0.5;  } diff --git a/indra/newview/app_settings/shaders/class2/windlight/atmosphericsHelpersF.glsl b/indra/newview/app_settings/shaders/class2/windlight/atmosphericsHelpersF.glsl index 63c683c99e..86743dc306 100644 --- a/indra/newview/app_settings/shaders/class2/windlight/atmosphericsHelpersF.glsl +++ b/indra/newview/app_settings/shaders/class2/windlight/atmosphericsHelpersF.glsl @@ -26,19 +26,21 @@  // Output variables  uniform float scene_light_strength; +uniform int no_atmo;  vec3 atmosFragAmbient(vec3 light, vec3 amblit)  { -	return amblit + light / 2.0; +    if (no_atmo == 1) return light; +    return amblit + light / 2.0;  }  vec3 atmosFragAffectDirectionalLight(float lightIntensity, vec3 sunlit)  { -	return sunlit * lightIntensity; +    return sunlit * lightIntensity;  }  vec3 scaleDownLightFrag(vec3 light)  { -	return (light / scene_light_strength ); +    return (light / scene_light_strength );  } diff --git a/indra/newview/app_settings/shaders/class2/windlight/atmosphericsHelpersV.glsl b/indra/newview/app_settings/shaders/class2/windlight/atmosphericsHelpersV.glsl index 62a034ce05..95b4a76880 100644 --- a/indra/newview/app_settings/shaders/class2/windlight/atmosphericsHelpersV.glsl +++ b/indra/newview/app_settings/shaders/class2/windlight/atmosphericsHelpersV.glsl @@ -33,29 +33,31 @@ vec3 getAtmosAttenuation();  vec3 getPositionEye();  uniform float scene_light_strength; +uniform int no_atmo;  vec3 atmosAmbient(vec3 light)  { -	return getAmblitColor() + light / 2.0; +    if (no_atmo == 1) return light + vec3(0.66); +    return getAmblitColor() + light / 2.0;  }  vec3 atmosAffectDirectionalLight(float lightIntensity)  { -	return getSunlitColor() * lightIntensity; +    return getSunlitColor() * lightIntensity;  }  vec3 atmosGetDiffuseSunlightColor()  { -	return getSunlitColor(); +    return getSunlitColor();  }  vec3 scaleDownLight(vec3 light)  { -	return (light / scene_light_strength ); +    return (light / scene_light_strength );  }  vec3 scaleUpLight(vec3 light)  { -	return (light * scene_light_strength); +    return (light * scene_light_strength);  } diff --git a/indra/newview/app_settings/shaders/class2/windlight/transportF.glsl b/indra/newview/app_settings/shaders/class2/windlight/transportF.glsl index 1ef345d79b..df731662e8 100644 --- a/indra/newview/app_settings/shaders/class2/windlight/transportF.glsl +++ b/indra/newview/app_settings/shaders/class2/windlight/transportF.glsl @@ -36,11 +36,11 @@ vec3 atmosTransportFrag(vec3 light, vec3 additive, vec3 atten)  {      if (no_atmo == 1)      { -	    return light; +        return light;      }      light *= atten.r; -	light += additive * 2.0; -	return light; +    light += additive * 2.0; +    return light;  }  vec3 fullbrightAtmosTransportFrag(vec3 light, vec3 additive, vec3 atten) @@ -49,8 +49,8 @@ vec3 fullbrightAtmosTransportFrag(vec3 light, vec3 additive, vec3 atten)      {          return light;      } -	float brightness = dot(light.rgb, vec3(0.33333)); -	return mix(atmosTransportFrag(light.rgb, additive, atten), light.rgb + additive.rgb, brightness * brightness); +    float brightness = dot(light.rgb, vec3(0.33333)); +    return mix(atmosTransportFrag(light.rgb, additive, atten), light.rgb + additive.rgb, brightness * brightness);  }  vec3 fullbrightShinyAtmosTransportFrag(vec3 light, vec3 additive, vec3 atten) { @@ -58,8 +58,8 @@ vec3 fullbrightShinyAtmosTransportFrag(vec3 light, vec3 additive, vec3 atten) {      {          return light;      } -	float brightness = dot(light.rgb, vec3(0.33333)); -	return mix(atmosTransportFrag(light.rgb, additive, atten), (light.rgb + additive.rgb) * (2.0 - brightness), brightness * brightness); +    float brightness = dot(light.rgb, vec3(0.33333)); +    return mix(atmosTransportFrag(light.rgb, additive, atten), (light.rgb + additive.rgb) * (2.0 - brightness), brightness * brightness);  }  vec3 atmosTransport(vec3 light) | 
