summaryrefslogtreecommitdiff
path: root/indra/newview/app_settings/shaders/class1/deferred/cloudsF.glsl
diff options
context:
space:
mode:
authorGraham Linden <graham@lindenlab.com>2018-10-09 18:44:43 +0100
committerGraham Linden <graham@lindenlab.com>2018-10-09 18:44:43 +0100
commitf8aac192378462b5824d28808ed84833e2cbfe0f (patch)
tree8b2cfff19afd6fce5e514471e59d3c1496653191 /indra/newview/app_settings/shaders/class1/deferred/cloudsF.glsl
parent8c4258009b09f16751437d0549067ab2950e725a (diff)
SL-1289
add cloud_variance control for randomized perturbance of clouds to break up tiling monotony
Diffstat (limited to 'indra/newview/app_settings/shaders/class1/deferred/cloudsF.glsl')
-rw-r--r--indra/newview/app_settings/shaders/class1/deferred/cloudsF.glsl13
1 files changed, 9 insertions, 4 deletions
diff --git a/indra/newview/app_settings/shaders/class1/deferred/cloudsF.glsl b/indra/newview/app_settings/shaders/class1/deferred/cloudsF.glsl
index c1a9a6f454..caedd25221 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/cloudsF.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/cloudsF.glsl
@@ -44,6 +44,8 @@ uniform float blend_factor;
uniform vec4 cloud_pos_density1;
uniform vec4 cloud_pos_density2;
uniform vec4 gamma;
+uniform float cloud_scale;
+uniform float cloud_variance;
VARYING vec2 vary_texcoord0;
VARYING vec2 vary_texcoord1;
@@ -73,16 +75,19 @@ 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);
+
// Offset texture coords
- uv1 += cloud_pos_density1.xy; //large texture, visible density
+ uv1 += cloud_pos_density1.xy + disturbance; //large texture, visible density
uv2 += cloud_pos_density1.xy; //large texture, self shadow
- uv3 += cloud_pos_density2.xy; //small texture, visible density
+ uv3 += cloud_pos_density2.xy + disturbance; //small texture, visible density
uv4 += cloud_pos_density2.xy; //small texture, self shadow
// 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. * cloud_pos_density1.z, 1.);
+ alpha1 = min(max(alpha1 + cloudDensity, 0.) * (10. + disturbance.y) * cloud_pos_density1.z, 1.);
// And smooth
alpha1 = 1. - alpha1 * alpha1;
@@ -96,7 +101,7 @@ void main()
// 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 * cloud_pos_density1.z, 1.);
+ alpha2 = min(max(alpha2 + cloudDensity, 0.) * (2.5 + disturbance.x) * cloud_pos_density1.z, 1.);
// And smooth
alpha2 = 1. - alpha2;