diff options
Diffstat (limited to 'indra/newview/app_settings/shaders/class1')
6 files changed, 153 insertions, 131 deletions
| diff --git a/indra/newview/app_settings/shaders/class1/deferred/cloudShadowF.glsl b/indra/newview/app_settings/shaders/class1/deferred/cloudShadowF.glsl index d93baa03c6..035e979827 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/cloudShadowF.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/cloudShadowF.glsl @@ -69,53 +69,60 @@ vec4 cloudNoise(vec2 uv)  void main()  { -	// Set variables -	vec2 uv1 = vary_texcoord0.xy; -	vec2 uv2 = vary_texcoord1.xy; -	vec2 uv3 = vary_texcoord2.xy; -	float cloudDensity = 2.0 * (cloud_shadow - 0.25); +    // Set variables +    vec2 uv1 = vary_texcoord0.xy; +    vec2 uv2 = vary_texcoord1.xy; +    vec2 uv3 = vary_texcoord2.xy; +    float cloudDensity = 2.0 * (cloud_shadow - 0.25); -	vec2 uv4 = vary_texcoord3.xy; - -    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 * 0.02);	//large texture, visible density -	uv2 += cloud_pos_density1.xy;	//large texture, self shadow -	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 * cloud_pos_density1.z, 1.); - -	// And smooth -	alpha1 = 1. - alpha1 * alpha1; -	alpha1 = 1. - alpha1 * alpha1;	 - -    if (alpha1 < 0.001f) +    if (cloud_scale >= 0.0001)      { -        discard; +        vec2 uv4 = vary_texcoord3.xy; +     +        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 * 0.02);    //large texture, visible density +        uv2 += cloud_pos_density1.xy;   //large texture, self shadow +        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 * 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 * cloud_pos_density1.z, 1.); +     +        // And smooth +        alpha2 = 1. - alpha2; +        alpha2 = 1. - alpha2 * alpha2;   +     +        frag_color = vec4(alpha1, alpha1, alpha1, 1); +    } +    else +    { +        frag_color = vec4(1);      } - -	// 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.); - -	// And smooth -	alpha2 = 1. - alpha2; -	alpha2 = 1. - alpha2 * alpha2;	 - -    frag_color = vec4(alpha1, alpha1, alpha1, 1);  #if !defined(DEPTH_CLAMP) -	gl_FragDepth = max(post_pos.z/post_pos.w*0.5+0.5, 0.0); +    gl_FragDepth = max(post_pos.z/post_pos.w*0.5+0.5, 0.0);  #endif  } diff --git a/indra/newview/app_settings/shaders/class1/deferred/cloudsF.glsl b/indra/newview/app_settings/shaders/class1/deferred/cloudsF.glsl index fe69233e68..60ccfa64db 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/cloudsF.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/cloudsF.glsl @@ -65,60 +65,65 @@ vec4 cloudNoise(vec2 uv)  void main()  { -	// Set variables -	vec2 uv1 = vary_texcoord0.xy; -	vec2 uv2 = vary_texcoord1.xy; +    // Set variables +    vec2 uv1 = vary_texcoord0.xy; +    vec2 uv2 = vary_texcoord1.xy; -	vec4 cloudColorSun = vary_CloudColorSun; -	vec4 cloudColorAmbient = vary_CloudColorAmbient; -	float cloudDensity = vary_CloudDensity; -	vec2 uv3 = vary_texcoord2.xy; -	vec2 uv4 = vary_texcoord3.xy; +    vec4 cloudColorSun = vary_CloudColorSun; +    vec4 cloudColorAmbient = vary_CloudColorAmbient; +    float cloudDensity = vary_CloudDensity; +    vec2 uv3 = vary_texcoord2.xy; +    vec2 uv4 = vary_texcoord3.xy; + +    if (cloud_scale < 0.001) +    { +        discard; +    }      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 * 0.02);	//large texture, visible density -	uv2 += cloud_pos_density1.xy;	//large texture, self shadow -	uv3 += cloud_pos_density2.xy;	//small texture, visible density -	uv4 += cloud_pos_density2.xy;	//small texture, self shadow +    // Offset texture coords +    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;   //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 +    // 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.); +    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.); -	// And smooth -	alpha1 = 1. - alpha1 * alpha1; -	alpha1 = 1. - alpha1 * alpha1;	 +    // 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 * cloud_pos_density1.z, 1.); +    // 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.); -	// And smooth -	alpha2 = 1. - alpha2; -	alpha2 = 1. - alpha2 * alpha2;	 +    // And smooth +    alpha2 = 1. - alpha2; +    alpha2 = 1. - alpha2 * alpha2;   -	// Combine -	vec4 color; -	color = (cloudColorSun*(1.-alpha2) + cloudColorAmbient); -	color *= 2.; +    // Combine +    vec4 color; +    color = (cloudColorSun*(1.-alpha2) + cloudColorAmbient); +    color *= 2.; -	/// Gamma correct for WL (soft clip effect). -	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); +    /// Gamma correct for WL (soft clip effect). +    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);  } diff --git a/indra/newview/app_settings/shaders/class1/deferred/cloudsV.glsl b/indra/newview/app_settings/shaders/class1/deferred/cloudsV.glsl index 17f425475c..fe336fc3a8 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/cloudsV.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/cloudsV.glsl @@ -58,6 +58,7 @@ uniform float density_multiplier;  uniform float max_y;  uniform vec4 glow; +uniform float sun_up_factor;  uniform vec4 cloud_color; @@ -131,6 +132,8 @@ void main()  	temp2.x = pow(temp2.x, glow.z);  		// glow.z should be negative, so we're doing a sort of (1 / "angle") function +        temp2.x *= sun_up_factor; +  	// Add "minimum anti-solar illumination"  	temp2.x += .25; @@ -170,7 +173,7 @@ void main()  	// Texture coords  	vary_texcoord0 = texcoord0;  	vary_texcoord0.xy -= 0.5; -	vary_texcoord0.xy /= cloud_scale; +	vary_texcoord0.xy /= max(0.001, cloud_scale);  	vary_texcoord0.xy += 0.5;  	vary_texcoord1 = vary_texcoord0; diff --git a/indra/newview/app_settings/shaders/class1/deferred/moonF.glsl b/indra/newview/app_settings/shaders/class1/deferred/moonF.glsl index 8bf4551abc..7265275e36 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/moonF.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/moonF.glsl @@ -45,8 +45,8 @@ VARYING vec2 vary_texcoord0;  void main()   { -	vec4 moonA = texture2D(diffuseMap, vary_texcoord0.xy); -	vec4 moonB = texture2D(altDiffuseMap, vary_texcoord0.xy); +    vec4 moonA = texture2D(diffuseMap, vary_texcoord0.xy); +    vec4 moonB = texture2D(altDiffuseMap, vary_texcoord0.xy);      vec4 c     = mix(moonA, moonB, blend_factor);      // mix factor which blends when sunlight is brighter @@ -58,8 +58,8 @@ void main()      vec3 exp = vec3(1.0 - mix * moon_brightness) * 2.0  - 1.0;      c.rgb = pow(c.rgb, exp); -	frag_data[0] = vec4(c.rgb, c.a); -	frag_data[1] = vec4(0.0); -	frag_data[2] = vec4(0.0f); +    frag_data[0] = vec4(c.rgb, c.a); +    frag_data[1] = vec4(0.0); +    frag_data[2] = vec4(0.0f);  } diff --git a/indra/newview/app_settings/shaders/class1/deferred/moonV.glsl b/indra/newview/app_settings/shaders/class1/deferred/moonV.glsl index 0325ecead9..0a68fc82f7 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/moonV.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/moonV.glsl @@ -36,13 +36,13 @@ void calcAtmospherics(vec3 eye_pos);  void main()  { -	//transform vertex -	vec4 vert = vec4(position.xyz, 1.0); -	vec4 pos = (modelview_matrix * vert); +    //transform vertex +    vec4 vert = vec4(position.xyz, 1.0); +    vec4 pos = (modelview_matrix * vert); -	gl_Position = modelview_projection_matrix*vec4(position.xyz, 1.0); +    gl_Position = modelview_projection_matrix*vec4(position.xyz, 1.0);      calcAtmospherics(pos.xyz); -	 -	vary_texcoord0 = (texture_matrix0 * vec4(texcoord0,0,1)).xy; +     +    vary_texcoord0 = (texture_matrix0 * vec4(texcoord0,0,1)).xy;  } diff --git a/indra/newview/app_settings/shaders/class1/windlight/cloudShadowF.glsl b/indra/newview/app_settings/shaders/class1/windlight/cloudShadowF.glsl index d93baa03c6..69a3c59cb3 100644 --- a/indra/newview/app_settings/shaders/class1/windlight/cloudShadowF.glsl +++ b/indra/newview/app_settings/shaders/class1/windlight/cloudShadowF.glsl @@ -69,53 +69,60 @@ vec4 cloudNoise(vec2 uv)  void main()  { -	// Set variables -	vec2 uv1 = vary_texcoord0.xy; -	vec2 uv2 = vary_texcoord1.xy; -	vec2 uv3 = vary_texcoord2.xy; -	float cloudDensity = 2.0 * (cloud_shadow - 0.25); - -	vec2 uv4 = vary_texcoord3.xy; - -    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 * 0.02);	//large texture, visible density -	uv2 += cloud_pos_density1.xy;	//large texture, self shadow -	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 * cloud_pos_density1.z, 1.); - -	// And smooth -	alpha1 = 1. - alpha1 * alpha1; -	alpha1 = 1. - alpha1 * alpha1;	 - -    if (alpha1 < 0.001f) +    if (cloud_scale >= 0.0001)      { -        discard; +        // Set variables +        vec2 uv1 = vary_texcoord0.xy; +        vec2 uv2 = vary_texcoord1.xy; +        vec2 uv3 = vary_texcoord2.xy; +        float cloudDensity = 2.0 * (cloud_shadow - 0.25); +     +        vec2 uv4 = vary_texcoord3.xy; +     +        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 * 0.02);    //large texture, visible density +        uv2 += cloud_pos_density1.xy;   //large texture, self shadow +        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 * 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 * cloud_pos_density1.z, 1.); +     +        // And smooth +        alpha2 = 1. - alpha2; +        alpha2 = 1. - alpha2 * alpha2;   +     +        frag_color = vec4(alpha1, alpha1, alpha1, 1); +    } +    else +    { +        frag_color = vec4(1);      } - -	// 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.); - -	// And smooth -	alpha2 = 1. - alpha2; -	alpha2 = 1. - alpha2 * alpha2;	 - -    frag_color = vec4(alpha1, alpha1, alpha1, 1);  #if !defined(DEPTH_CLAMP) -	gl_FragDepth = max(post_pos.z/post_pos.w*0.5+0.5, 0.0); +    gl_FragDepth = max(post_pos.z/post_pos.w*0.5+0.5, 0.0);  #endif  } | 
