summaryrefslogtreecommitdiff
path: root/indra/newview/app_settings
diff options
context:
space:
mode:
authorGraham Linden <graham@lindenlab.com>2018-10-30 15:56:08 +0100
committerGraham Linden <graham@lindenlab.com>2018-10-30 15:56:08 +0100
commit56355cf35412589b0a171f33b7962fd3800c734a (patch)
tree5b1f806798e843f2bf364ddea55bd6303000c7d2 /indra/newview/app_settings
parent769be699a960610b3804392ad98c31870c642547 (diff)
SL-9966
Port over transport, gamma, atmospherics shader stub updates for per-fragment atmospherics. Fix bindings of current/next noise map when current and next are the same (select only one and force blend factor to 0).
Diffstat (limited to 'indra/newview/app_settings')
-rw-r--r--indra/newview/app_settings/shaders/class1/windlight/atmosphericsF.glsl21
-rw-r--r--indra/newview/app_settings/shaders/class1/windlight/gammaF.glsl21
-rw-r--r--indra/newview/app_settings/shaders/class1/windlight/transportF.glsl25
-rw-r--r--indra/newview/app_settings/shaders/class2/windlight/cloudsF.glsl32
4 files changed, 75 insertions, 24 deletions
diff --git a/indra/newview/app_settings/shaders/class1/windlight/atmosphericsF.glsl b/indra/newview/app_settings/shaders/class1/windlight/atmosphericsF.glsl
index 584bd568c5..bf0a9048f0 100644
--- a/indra/newview/app_settings/shaders/class1/windlight/atmosphericsF.glsl
+++ b/indra/newview/app_settings/shaders/class1/windlight/atmosphericsF.glsl
@@ -23,16 +23,29 @@
* $/LicenseInfo$
*/
+vec3 atmosFragAmbient(vec3 light, vec3 sunlit)
+{
+ return light;
+}
-
-vec3 atmosLighting(vec3 light)
+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)
+{
+ return light * sunlit;
+}
-void calcFragAtmospherics(vec3 inPositionEye, float ambFactor) {
+vec3 atmosLighting(vec3 light)
+{
+ return atmosFragLighting(light, vec3(0), vec3(1.0));
+}
+
+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 */
}
diff --git a/indra/newview/app_settings/shaders/class1/windlight/gammaF.glsl b/indra/newview/app_settings/shaders/class1/windlight/gammaF.glsl
index 62f4e51449..b7f117fc5f 100644
--- a/indra/newview/app_settings/shaders/class1/windlight/gammaF.glsl
+++ b/indra/newview/app_settings/shaders/class1/windlight/gammaF.glsl
@@ -23,17 +23,28 @@
* $/LicenseInfo$
*/
-
-
+uniform int no_atmo;
uniform vec4 gamma;
-/// Soft clips the light with a gamma correction
-vec3 scaleSoftClip(vec3 light) {
+vec3 scaleFragSoftClip(vec3 light)
+{
// For compatibility with lower cards. Do nothing.
return light;
}
+/// Soft clips the light with a gamma correction
+vec3 scaleSoftClip(vec3 light)
+{
+ // For compatibility with lower cards. Do nothing.
+ return scaleFragSoftClip(light);
+}
+
+vec3 fullbrightScaleSoftClipFrag(vec3 light, vec3 atten)
+{
+ return (no_atmo == 1) ? light : mix(scaleFragSoftClip(light.rgb), light.rgb, atten);
+}
+
vec3 fullbrightScaleSoftClip(vec3 light) {
- return scaleSoftClip(light);
+ return fullbrightScaleSoftClipFrag(light, vec3(1));
}
diff --git a/indra/newview/app_settings/shaders/class1/windlight/transportF.glsl b/indra/newview/app_settings/shaders/class1/windlight/transportF.glsl
index 7c95ecdb14..c3c8329017 100644
--- a/indra/newview/app_settings/shaders/class1/windlight/transportF.glsl
+++ b/indra/newview/app_settings/shaders/class1/windlight/transportF.glsl
@@ -22,25 +22,40 @@
* Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
-
+uniform int no_atmo;
-vec3 atmosTransport(vec3 light)
+vec3 atmosFragTransport(vec3 light, vec3 atten, vec3 additive)
{
/* stub function for fallback compatibility on class1 hardware */
return light;
}
-vec3 fullbrightAtmosTransport(vec3 light)
+vec3 fullbrightFragAtmosTransport(vec3 light, vec3 atten, vec3 additive)
{
/* stub function for fallback compatibility on class1 hardware */
return light;
}
+vec3 fullbrightFragShinyAtmosTransport(vec3 light, vec3 atten, vec3 additive)
+{
+ /* stub function for fallback compatibility on class1 hardware */
+ return light;
+}
-vec3 fullbrightShinyAtmosTransport(vec3 light)
+vec3 atmosTransport(vec3 light)
{
/* stub function for fallback compatibility on class1 hardware */
- return light;
+ return atmosFragTransport(light, vec3(1), vec3(0));
+}
+
+vec3 fullbrightAtmosTransport(vec3 light)
+{
+ return fullbrightFragAtmosTransport(light, vec3(1), vec3(0));
+}
+
+vec3 fullbrightShinyAtmosTransport(vec3 light)
+{
+ return fullbrightFragShinyAtmosTransport(light, vec3(1), vec3(0));
}
diff --git a/indra/newview/app_settings/shaders/class2/windlight/cloudsF.glsl b/indra/newview/app_settings/shaders/class2/windlight/cloudsF.glsl
index cdd84faba9..e3fa431ddf 100644
--- a/indra/newview/app_settings/shaders/class2/windlight/cloudsF.glsl
+++ b/indra/newview/app_settings/shaders/class2/windlight/cloudsF.glsl
@@ -22,11 +22,13 @@
* Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
-
+
+/*[EXTRA_CODE_HERE]*/
+
#ifdef DEFINE_GL_FRAGCOLOR
-out vec4 frag_color;
+out vec4 frag_data[3];
#else
-#define frag_color gl_FragColor
+#define frag_data gl_FragData
#endif
/////////////////////////////////////////////////////////////////////////
@@ -74,28 +76,37 @@ void main()
vec2 uv3 = vary_texcoord2.xy;
vec2 uv4 = vary_texcoord3.xy;
- vec2 disturbance = vec2(cloudNoise(uv1 / 16.0f).x, cloudNoise((uv3 + uv1) / 16.0f).x) * cloud_variance * (1.0f - cloud_scale * 0.25f);
+ vec2 disturbance = vec2(cloudNoise(uv1 / 8.0f).x, cloudNoise((uv3 + uv1) / 16.0f).x) * cloud_variance * (1.0f - cloud_scale * 0.25f);
+ vec2 disturbance2 = vec2(cloudNoise((uv1 + uv3) / 4.0f).x, cloudNoise((uv4 + uv2) / 8.0f).x) * cloud_variance * (1.0f - cloud_scale * 0.25f);
// Offset texture coords
- uv1 += cloud_pos_density1.xy + disturbance; //large texture, visible density
+ uv1 += cloud_pos_density1.xy + (disturbance * 0.02); //large texture, visible density
uv2 += cloud_pos_density1.xy; //large texture, self shadow
- uv3 += cloud_pos_density2.xy + disturbance; //small texture, visible density
+ uv3 += cloud_pos_density2.xy; //small texture, visible density
uv4 += cloud_pos_density2.xy; //small texture, self shadow
+ float density_variance = min(1.0, (disturbance.x* 2.0 + disturbance.y* 2.0 + disturbance2.x + disturbance2.y));
+
+ cloudDensity *= 1.0 - (density_variance * density_variance);
// Compute alpha1, the main cloud opacity
float alpha1 = (cloudNoise(uv1).x - 0.5) + (cloudNoise(uv3).x - 0.5) * cloud_pos_density2.z;
- alpha1 = min(max(alpha1 + cloudDensity, 0.) * (10. + disturbance.y) * cloud_pos_density1.z, 1.);
+ alpha1 = min(max(alpha1 + cloudDensity, 0.) * 10 * cloud_pos_density1.z, 1.);
// And smooth
alpha1 = 1. - alpha1 * alpha1;
alpha1 = 1. - alpha1 * alpha1;
+ if (alpha1 < 0.001f)
+ {
+ discard;
+ }
+
// Compute alpha2, for self shadowing effect
// (1 - alpha2) will later be used as percentage of incoming sunlight
float alpha2 = (cloudNoise(uv2).x - 0.5);
- alpha2 = min(max(alpha2 + cloudDensity, 0.) * (2.5 + disturbance.x) * cloud_pos_density1.z, 1.);
+ alpha2 = min(max(alpha2 + cloudDensity, 0.) * 2.5 * cloud_pos_density1.z, 1.);
// And smooth
alpha2 = 1. - alpha2;
@@ -107,7 +118,8 @@ void main()
color *= 2.;
/// Gamma correct for WL (soft clip effect).
- frag_color.rgb = scaleSoftClip(color.rgb);
- frag_color.a = alpha1;
+ frag_data[0] = vec4(scaleSoftClip(color.rgb), alpha1);
+ frag_data[1] = vec4(0.0,0.0,0.0,0.0);
+ frag_data[2] = vec4(0,0,1,0);
}