summaryrefslogtreecommitdiff
path: root/indra/newview/app_settings/shaders
diff options
context:
space:
mode:
Diffstat (limited to 'indra/newview/app_settings/shaders')
-rw-r--r--indra/newview/app_settings/shaders/class1/deferred/pbralphaF.glsl2
-rw-r--r--indra/newview/app_settings/shaders/class1/deferred/pbralphaV.glsl32
-rw-r--r--indra/newview/app_settings/shaders/class1/deferred/pbrglowF.glsl4
-rw-r--r--indra/newview/app_settings/shaders/class1/deferred/pbrglowV.glsl12
-rw-r--r--indra/newview/app_settings/shaders/class1/deferred/pbropaqueF.glsl8
-rw-r--r--indra/newview/app_settings/shaders/class1/deferred/pbropaqueV.glsl36
-rw-r--r--indra/newview/app_settings/shaders/class1/deferred/postDeferredGammaCorrect.glsl3
-rw-r--r--indra/newview/app_settings/shaders/class1/deferred/textureUtilV.glsl35
-rw-r--r--indra/newview/app_settings/shaders/class1/interface/reflectionmipF.glsl20
-rw-r--r--indra/newview/app_settings/shaders/class2/deferred/pbralphaF.glsl8
-rw-r--r--indra/newview/app_settings/shaders/class2/deferred/reflectionProbeF.glsl10
-rw-r--r--indra/newview/app_settings/shaders/class3/deferred/materialF.glsl12
-rw-r--r--indra/newview/app_settings/shaders/class3/deferred/reflectionProbeF.glsl49
-rw-r--r--indra/newview/app_settings/shaders/class3/environment/waterF.glsl25
14 files changed, 122 insertions, 134 deletions
diff --git a/indra/newview/app_settings/shaders/class1/deferred/pbralphaF.glsl b/indra/newview/app_settings/shaders/class1/deferred/pbralphaF.glsl
index 3f3c11517e..2ccd3fd962 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/pbralphaF.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/pbralphaF.glsl
@@ -30,4 +30,4 @@ out vec4 frag_color;
void main()
{
frag_color = vec4(1.0, 0, 0.5, 0.5);
-} \ No newline at end of file
+}
diff --git a/indra/newview/app_settings/shaders/class1/deferred/pbralphaV.glsl b/indra/newview/app_settings/shaders/class1/deferred/pbralphaV.glsl
index 24faf1763f..e9515a9187 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/pbralphaV.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/pbralphaV.glsl
@@ -44,10 +44,10 @@ uniform mat4 modelview_matrix;
out vec3 vary_position;
-uniform mat3 texture_basecolor_matrix;
-uniform mat3 texture_normal_matrix;
-uniform mat3 texture_metallic_roughness_matrix;
-uniform mat3 texture_emissive_matrix;
+uniform vec4[2] texture_base_color_transform;
+uniform vec4[2] texture_normal_transform;
+uniform vec4[2] texture_metallic_roughness_transform;
+uniform vec4[2] texture_emissive_transform;
out vec3 vary_fragcoord;
@@ -59,7 +59,7 @@ in vec3 normal;
in vec4 tangent;
in vec2 texcoord0;
-out vec2 basecolor_texcoord;
+out vec2 base_color_texcoord;
out vec2 normal_texcoord;
out vec2 metallic_roughness_texcoord;
out vec2 emissive_texcoord;
@@ -70,7 +70,7 @@ out vec3 vary_tangent;
flat out float vary_sign;
out vec3 vary_normal;
-vec2 texture_transform(vec2 vertex_texcoord, mat3 khr_gltf_transform, mat4 sl_animation_transform);
+vec2 texture_transform(vec2 vertex_texcoord, vec4[2] khr_gltf_transform, mat4 sl_animation_transform);
void main()
@@ -89,10 +89,10 @@ void main()
vary_fragcoord.xyz = vert.xyz + vec3(0,0,near_clip);
- basecolor_texcoord = texture_transform(texcoord0, texture_basecolor_matrix, texture_matrix0);
- normal_texcoord = texture_transform(texcoord0, texture_normal_matrix, texture_matrix0);
- metallic_roughness_texcoord = texture_transform(texcoord0, texture_metallic_roughness_matrix, texture_matrix0);
- emissive_texcoord = texture_transform(texcoord0, texture_emissive_matrix, texture_matrix0);
+ base_color_texcoord = texture_transform(texcoord0, texture_base_color_transform, texture_matrix0);
+ normal_texcoord = texture_transform(texcoord0, texture_normal_transform, texture_matrix0);
+ metallic_roughness_texcoord = texture_transform(texcoord0, texture_metallic_roughness_transform, texture_matrix0);
+ emissive_texcoord = texture_transform(texcoord0, texture_emissive_transform, texture_matrix0);
#ifdef HAS_SKIN
vec3 n = (mat*vec4(normal.xyz+position.xyz,1.0)).xyz-pos.xyz;
@@ -125,19 +125,19 @@ uniform mat4 modelview_matrix;
out vec3 vary_position;
-uniform mat3 texture_basecolor_matrix;
-uniform mat3 texture_emissive_matrix;
+uniform vec4[2] texture_base_color_transform;
+uniform vec4[2] texture_emissive_transform;
in vec3 position;
in vec4 diffuse_color;
in vec2 texcoord0;
-out vec2 basecolor_texcoord;
+out vec2 base_color_texcoord;
out vec2 emissive_texcoord;
out vec4 vertex_color;
-vec2 texture_transform(vec2 vertex_texcoord, mat3 khr_gltf_transform, mat4 sl_animation_transform);
+vec2 texture_transform(vec2 vertex_texcoord, vec4[2] khr_gltf_transform, mat4 sl_animation_transform);
void main()
@@ -147,8 +147,8 @@ void main()
gl_Position = vert;
vary_position = vert.xyz;
- basecolor_texcoord = texture_transform(texcoord0, texture_basecolor_matrix, texture_matrix0);
- emissive_texcoord = texture_transform(texcoord0, texture_emissive_matrix, texture_matrix0);
+ base_color_texcoord = texture_transform(texcoord0, texture_base_color_transform, texture_matrix0);
+ emissive_texcoord = texture_transform(texcoord0, texture_emissive_transform, texture_matrix0);
vertex_color = diffuse_color;
}
diff --git a/indra/newview/app_settings/shaders/class1/deferred/pbrglowF.glsl b/indra/newview/app_settings/shaders/class1/deferred/pbrglowF.glsl
index 8dc9e02f7a..1c36aa6b50 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/pbrglowF.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/pbrglowF.glsl
@@ -37,7 +37,7 @@ out vec4 frag_color;
in vec3 vary_position;
in vec4 vertex_emissive;
-in vec2 basecolor_texcoord;
+in vec2 base_color_texcoord;
in vec2 emissive_texcoord;
uniform float minimum_alpha; // PBR alphaMode: MASK, See: mAlphaCutoff, setAlphaCutoff()
@@ -47,7 +47,7 @@ vec3 srgb_to_linear(vec3 c);
void main()
{
- vec4 basecolor = texture2D(diffuseMap, basecolor_texcoord.xy).rgba;
+ vec4 basecolor = texture2D(diffuseMap, base_color_texcoord.xy).rgba;
if (basecolor.a < minimum_alpha)
{
diff --git a/indra/newview/app_settings/shaders/class1/deferred/pbrglowV.glsl b/indra/newview/app_settings/shaders/class1/deferred/pbrglowV.glsl
index bcad1c1ceb..82a50a115c 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/pbrglowV.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/pbrglowV.glsl
@@ -34,20 +34,20 @@ uniform mat4 modelview_projection_matrix;
uniform mat4 texture_matrix0;
-uniform mat3 texture_basecolor_matrix;
-uniform mat3 texture_emissive_matrix;
+uniform vec4[2] texture_base_color_transform;
+uniform vec4[2] texture_emissive_transform;
in vec3 position;
in vec4 emissive;
in vec2 texcoord0;
-out vec2 basecolor_texcoord;
+out vec2 base_color_texcoord;
out vec2 emissive_texcoord;
out vec4 vertex_emissive;
-vec2 texture_transform(vec2 vertex_texcoord, mat3 khr_gltf_transform, mat4 sl_animation_transform);
+vec2 texture_transform(vec2 vertex_texcoord, vec4[2] khr_gltf_transform, mat4 sl_animation_transform);
void main()
{
@@ -64,8 +64,8 @@ void main()
gl_Position = modelview_projection_matrix * vec4(position.xyz, 1.0);
#endif
- basecolor_texcoord = texture_transform(texcoord0, texture_basecolor_matrix, texture_matrix0);
- emissive_texcoord = texture_transform(texcoord0, texture_emissive_matrix, texture_matrix0);
+ base_color_texcoord = texture_transform(texcoord0, texture_base_color_transform, texture_matrix0);
+ emissive_texcoord = texture_transform(texcoord0, texture_emissive_transform, texture_matrix0);
vertex_emissive = emissive;
}
diff --git a/indra/newview/app_settings/shaders/class1/deferred/pbropaqueF.glsl b/indra/newview/app_settings/shaders/class1/deferred/pbropaqueF.glsl
index c4c5a7872b..6659e67a7a 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/pbropaqueF.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/pbropaqueF.glsl
@@ -47,7 +47,7 @@ in vec3 vary_normal;
in vec3 vary_tangent;
flat in float vary_sign;
-in vec2 basecolor_texcoord;
+in vec2 base_color_texcoord;
in vec2 normal_texcoord;
in vec2 metallic_roughness_texcoord;
in vec2 emissive_texcoord;
@@ -62,7 +62,7 @@ uniform mat3 normal_matrix;
void main()
{
- vec4 basecolor = texture2D(diffuseMap, basecolor_texcoord.xy).rgba;
+ vec4 basecolor = texture2D(diffuseMap, base_color_texcoord.xy).rgba;
if (basecolor.a < minimum_alpha)
{
discard;
@@ -121,7 +121,7 @@ out vec4 frag_color;
in vec3 vary_position;
in vec4 vertex_color;
-in vec2 basecolor_texcoord;
+in vec2 base_color_texcoord;
in vec2 emissive_texcoord;
uniform float minimum_alpha; // PBR alphaMode: MASK, See: mAlphaCutoff, setAlphaCutoff()
@@ -131,7 +131,7 @@ vec3 srgb_to_linear(vec3 c);
void main()
{
- vec4 basecolor = texture2D(diffuseMap, basecolor_texcoord.xy).rgba;
+ vec4 basecolor = texture2D(diffuseMap, base_color_texcoord.xy).rgba;
if (basecolor.a < minimum_alpha)
{
discard;
diff --git a/indra/newview/app_settings/shaders/class1/deferred/pbropaqueV.glsl b/indra/newview/app_settings/shaders/class1/deferred/pbropaqueV.glsl
index f0e3d4f034..e2c23ac8f0 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/pbropaqueV.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/pbropaqueV.glsl
@@ -38,10 +38,10 @@ uniform mat4 modelview_projection_matrix;
#endif
uniform mat4 texture_matrix0;
-uniform mat3 texture_basecolor_matrix;
-uniform mat3 texture_normal_matrix;
-uniform mat3 texture_metallic_roughness_matrix;
-uniform mat3 texture_emissive_matrix;
+uniform vec4[2] texture_base_color_transform;
+uniform vec4[2] texture_normal_transform;
+uniform vec4[2] texture_metallic_roughness_transform;
+uniform vec4[2] texture_emissive_transform;
in vec3 position;
in vec4 diffuse_color;
@@ -49,7 +49,7 @@ in vec3 normal;
in vec4 tangent;
in vec2 texcoord0;
-out vec2 basecolor_texcoord;
+out vec2 base_color_texcoord;
out vec2 normal_texcoord;
out vec2 metallic_roughness_texcoord;
out vec2 emissive_texcoord;
@@ -60,7 +60,7 @@ out vec3 vary_tangent;
flat out float vary_sign;
out vec3 vary_normal;
-vec2 texture_transform(vec2 vertex_texcoord, mat3 khr_gltf_transform, mat4 sl_animation_transform);
+vec2 texture_transform(vec2 vertex_texcoord, vec4[2] khr_gltf_transform, mat4 sl_animation_transform);
void main()
{
@@ -78,10 +78,10 @@ void main()
gl_Position = modelview_projection_matrix * vec4(position.xyz, 1.0);
#endif
- basecolor_texcoord = texture_transform(texcoord0, texture_basecolor_matrix, texture_matrix0);
- normal_texcoord = texture_transform(texcoord0, texture_normal_matrix, texture_matrix0);
- metallic_roughness_texcoord = texture_transform(texcoord0, texture_metallic_roughness_matrix, texture_matrix0);
- emissive_texcoord = texture_transform(texcoord0, texture_emissive_matrix, texture_matrix0);
+ base_color_texcoord = texture_transform(texcoord0, texture_base_color_transform, texture_matrix0);
+ normal_texcoord = texture_transform(texcoord0, texture_normal_transform, texture_matrix0);
+ metallic_roughness_texcoord = texture_transform(texcoord0, texture_metallic_roughness_transform, texture_matrix0);
+ emissive_texcoord = texture_transform(texcoord0, texture_emissive_transform, texture_matrix0);
#ifdef HAS_SKIN
vec3 n = (mat*vec4(normal.xyz+position.xyz,1.0)).xyz-pos.xyz;
@@ -106,29 +106,29 @@ uniform mat4 modelview_projection_matrix;
uniform mat4 texture_matrix0;
-uniform mat3 texture_basecolor_matrix;
-uniform mat3 texture_normal_matrix;
-uniform mat3 texture_metallic_roughness_matrix;
-uniform mat3 texture_emissive_matrix;
+uniform vec4[2] texture_base_color_transform;
+uniform vec4[2] texture_normal_transform;
+uniform vec4[2] texture_metallic_roughness_transform;
+uniform vec4[2] texture_emissive_transform;
in vec3 position;
in vec4 diffuse_color;
in vec2 texcoord0;
-out vec2 basecolor_texcoord;
+out vec2 base_color_texcoord;
out vec2 emissive_texcoord;
out vec4 vertex_color;
-vec2 texture_transform(vec2 vertex_texcoord, mat3 khr_gltf_transform, mat4 sl_animation_transform);
+vec2 texture_transform(vec2 vertex_texcoord, vec4[2] khr_gltf_transform, mat4 sl_animation_transform);
void main()
{
//transform vertex
gl_Position = modelview_projection_matrix * vec4(position.xyz, 1.0);
- basecolor_texcoord = texture_transform(texcoord0, texture_basecolor_matrix, texture_matrix0);
- emissive_texcoord = texture_transform(texcoord0, texture_emissive_matrix, texture_matrix0);
+ base_color_texcoord = texture_transform(texcoord0, texture_base_color_transform, texture_matrix0);
+ emissive_texcoord = texture_transform(texcoord0, texture_emissive_transform, texture_matrix0);
vertex_color = diffuse_color;
}
diff --git a/indra/newview/app_settings/shaders/class1/deferred/postDeferredGammaCorrect.glsl b/indra/newview/app_settings/shaders/class1/deferred/postDeferredGammaCorrect.glsl
index f0e940eb5f..cc77712347 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/postDeferredGammaCorrect.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/postDeferredGammaCorrect.glsl
@@ -134,6 +134,7 @@ vec3 toneMap(vec3 color)
color *= exposure;
#ifdef TONEMAP_ACES_NARKOWICZ
+ color *= 0.8;
color = toneMapACES_Narkowicz(color);
#endif
@@ -145,7 +146,7 @@ vec3 toneMap(vec3 color)
// boost exposure as discussed in https://github.com/mrdoob/three.js/pull/19621
// this factor is based on the exposure correction of Krzysztof Narkowicz in his
// implemetation of ACES tone mapping
- color /= 0.6;
+ color *= 0.85/0.6;
color = toneMapACES_Hill(color);
#endif
diff --git a/indra/newview/app_settings/shaders/class1/deferred/textureUtilV.glsl b/indra/newview/app_settings/shaders/class1/deferred/textureUtilV.glsl
index b146c665f9..71f7ec52c4 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/textureUtilV.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/textureUtilV.glsl
@@ -23,6 +23,31 @@
* $/LicenseInfo$
*/
+// This shader code is taken from the sample code on the KHR_texture_transform
+// spec page page, plus or minus some sign error corrections (I think because the GLSL
+// matrix constructor is backwards?):
+// https://github.com/KhronosGroup/glTF/tree/main/extensions/2.0/Khronos/KHR_texture_transform
+// Previously (6494eed242b1), we passed in a single, precalculated matrix
+// uniform per transform into the shaders. However, that was found to produce
+// small-but-noticeable discrepancies with the GLTF sample model
+// "TextureTransformTest", likely due to numerical precision differences. In
+// the interest of parity with other renderers, calculate the transform
+// directly in the shader. -Cosmic,2023-02-24
+vec2 khr_texture_transform(vec2 texcoord, vec2 scale, float rotation, vec2 offset)
+{
+ mat3 scale_mat = mat3(scale.x,0,0, 0,scale.y,0, 0,0,1);
+ mat3 offset_mat = mat3(1,0,0, 0,1,0, offset.x, offset.y, 1);
+ mat3 rotation_mat = mat3(
+ cos(rotation),-sin(rotation), 0,
+ sin(rotation), cos(rotation), 0,
+ 0, 0, 1
+ );
+
+ mat3 transform = offset_mat * rotation_mat * scale_mat;
+
+ return (transform * vec3(texcoord, 1)).xy;
+}
+
// vertex_texcoord - The UV texture coordinates sampled from the vertex at
// runtime. Per SL convention, this is in a right-handed UV coordinate
// system. Collada models also have right-handed UVs.
@@ -33,20 +58,18 @@
// animations, available through LSL script functions such as
// LlSetTextureAnim. It assumes a right-handed UV coordinate system.
// texcoord - The final texcoord to use for image sampling
-vec2 texture_transform(vec2 vertex_texcoord, mat3 khr_gltf_transform, mat4 sl_animation_transform)
+vec2 texture_transform(vec2 vertex_texcoord, vec4[2] khr_gltf_transform, mat4 sl_animation_transform)
{
vec2 texcoord = vertex_texcoord;
+ // Apply texture animation first to avoid shearing and other artifacts
+ texcoord = (sl_animation_transform * vec4(texcoord, 0, 1)).xy;
// Convert to left-handed coordinate system. The offset of 1 is necessary
// for rotations to be applied correctly.
- // In the future, we could bake this coordinate conversion into the uniform
- // that khr_gltf_transform comes from, since it's applied immediately
- // before.
texcoord.y = 1.0 - texcoord.y;
- texcoord = (khr_gltf_transform * vec3(texcoord, 1.0)).xy;
+ texcoord = khr_texture_transform(texcoord, khr_gltf_transform[0].xy, khr_gltf_transform[0].z, khr_gltf_transform[1].xy);
// Convert back to right-handed coordinate system
texcoord.y = 1.0 - texcoord.y;
- texcoord = (sl_animation_transform * vec4(texcoord, 0, 1)).xy;
// To make things more confusing, all SL image assets are upside-down
// We may need an additional sign flip here when we implement a Vulkan backend
diff --git a/indra/newview/app_settings/shaders/class1/interface/reflectionmipF.glsl b/indra/newview/app_settings/shaders/class1/interface/reflectionmipF.glsl
index 9f7706fe36..45267e4403 100644
--- a/indra/newview/app_settings/shaders/class1/interface/reflectionmipF.glsl
+++ b/indra/newview/app_settings/shaders/class1/interface/reflectionmipF.glsl
@@ -26,29 +26,11 @@
out vec4 frag_color;
uniform sampler2D diffuseRect;
-uniform sampler2D depthMap;
-
-uniform float resScale;
-uniform float znear;
-uniform float zfar;
in vec2 vary_texcoord0;
-// get linear depth value given a depth buffer sample d and znear and zfar values
-float linearDepth(float d, float znear, float zfar);
-
void main()
{
- float depth = texture(depthMap, vary_texcoord0.xy).r;
- float dist = linearDepth(depth, znear, zfar);
-
- // convert linear depth to distance
- vec3 v;
- v.xy = vary_texcoord0.xy / 512.0 * 2.0 - 1.0;
- v.z = 1.0;
- v = normalize(v);
- dist /= v.z;
-
vec3 col = texture(diffuseRect, vary_texcoord0.xy).rgb;
- frag_color = vec4(col, dist/256.0);
+ frag_color = vec4(col, 0.0);
}
diff --git a/indra/newview/app_settings/shaders/class2/deferred/pbralphaF.glsl b/indra/newview/app_settings/shaders/class2/deferred/pbralphaF.glsl
index 987b0ca1d5..2a093827cb 100644
--- a/indra/newview/app_settings/shaders/class2/deferred/pbralphaF.glsl
+++ b/indra/newview/app_settings/shaders/class2/deferred/pbralphaF.glsl
@@ -54,7 +54,7 @@ in vec3 vary_fragcoord;
in vec3 vary_position;
-in vec2 basecolor_texcoord;
+in vec2 base_color_texcoord;
in vec2 normal_texcoord;
in vec2 metallic_roughness_texcoord;
in vec2 emissive_texcoord;
@@ -168,7 +168,7 @@ void main()
waterClip(pos);
- vec4 basecolor = texture(diffuseMap, basecolor_texcoord.xy).rgba;
+ vec4 basecolor = texture(diffuseMap, base_color_texcoord.xy).rgba;
basecolor.rgb = srgb_to_linear(basecolor.rgb);
#ifdef HAS_ALPHA_MASK
if (basecolor.a < minimum_alpha)
@@ -267,7 +267,7 @@ out vec4 frag_color;
in vec3 vary_position;
-in vec2 basecolor_texcoord;
+in vec2 base_color_texcoord;
in vec2 emissive_texcoord;
in vec4 vertex_color;
@@ -286,7 +286,7 @@ void main()
vec3 pos = vary_position;
- vec4 basecolor = texture(diffuseMap, basecolor_texcoord.xy).rgba;
+ vec4 basecolor = texture(diffuseMap, base_color_texcoord.xy).rgba;
basecolor.rgb = srgb_to_linear(basecolor.rgb);
#ifdef HAS_ALPHA_MASK
if (basecolor.a < minimum_alpha)
diff --git a/indra/newview/app_settings/shaders/class2/deferred/reflectionProbeF.glsl b/indra/newview/app_settings/shaders/class2/deferred/reflectionProbeF.glsl
index f1ee4b4681..5fa53c374b 100644
--- a/indra/newview/app_settings/shaders/class2/deferred/reflectionProbeF.glsl
+++ b/indra/newview/app_settings/shaders/class2/deferred/reflectionProbeF.glsl
@@ -34,7 +34,7 @@ uniform mat3 env_mat;
vec3 srgb_to_linear(vec3 c);
void sampleReflectionProbes(inout vec3 ambenv, inout vec3 glossenv,
- vec2 tc, vec3 pos, vec3 norm, float glossiness, bool errorCorrect)
+ vec2 tc, vec3 pos, vec3 norm, float glossiness)
{
ambenv = vec3(reflection_probe_ambiance * 0.25);
@@ -43,11 +43,11 @@ void sampleReflectionProbes(inout vec3 ambenv, inout vec3 glossenv,
glossenv = srgb_to_linear(textureCube(environmentMap, env_vec).rgb);
}
-void sampleReflectionProbes(inout vec3 ambenv, inout vec3 glossenv,
- vec2 tc, vec3 pos, vec3 norm, float glossiness)
+void sampleReflectionProbesWater(inout vec3 ambenv, inout vec3 glossenv,
+ vec2 tc, vec3 pos, vec3 norm, float glossiness)
{
- sampleReflectionProbes(ambenv, glossenv,
- tc, pos, norm, glossiness, false);
+ sampleReflectionProbes(ambenv, glossenv, tc, pos, norm, glossiness);
+ glossenv *= 8.0;
}
vec4 sampleReflectionProbesDebug(vec3 pos)
diff --git a/indra/newview/app_settings/shaders/class3/deferred/materialF.glsl b/indra/newview/app_settings/shaders/class3/deferred/materialF.glsl
index b00a6ed757..49529860be 100644
--- a/indra/newview/app_settings/shaders/class3/deferred/materialF.glsl
+++ b/indra/newview/app_settings/shaders/class3/deferred/materialF.glsl
@@ -382,11 +382,6 @@ void main()
color.rgb = mix(atmosFragLightingLinear(color.rgb, additive, atten), fullbrightAtmosTransportFragLinear(color, additive, atten), emissive);
color.rgb = scaleSoftClipFragLinear(color.rgb);
-#ifdef WATER_FOG
- vec4 temp = applyWaterFogView(pos, vec4(color, 0.0));
- color = temp.rgb;
-#endif
-
vec3 npos = normalize(-pos.xyz);
vec3 light = vec3(0, 0, 0);
@@ -400,11 +395,18 @@ void main()
LIGHT_LOOP(6)
LIGHT_LOOP(7)
+ light *= 1.0-emissive;
color += light;
+ glare *= 1.0-emissive;
glare = min(glare, 1.0);
float al = max(diffcol.a, glare) * vertex_color.a;
+#ifdef WATER_FOG
+ vec4 temp = applyWaterFogView(pos, vec4(color, 0.0));
+ color = temp.rgb;
+#endif
+
frag_color = vec4(color, al);
#else // mode is not DIFFUSE_ALPHA_MODE_BLEND, encode to gbuffer
diff --git a/indra/newview/app_settings/shaders/class3/deferred/reflectionProbeF.glsl b/indra/newview/app_settings/shaders/class3/deferred/reflectionProbeF.glsl
index 24539c3c3a..23c6f4d5ae 100644
--- a/indra/newview/app_settings/shaders/class3/deferred/reflectionProbeF.glsl
+++ b/indra/newview/app_settings/shaders/class3/deferred/reflectionProbeF.glsl
@@ -542,7 +542,7 @@ vec3 tapIrradianceMap(vec3 pos, vec3 dir, out float w, out float dw, vec3 c, int
}
}
-vec3 sampleProbes(vec3 pos, vec3 dir, float lod, bool errorCorrect)
+vec3 sampleProbes(vec3 pos, vec3 dir, float lod)
{
float wsum[2];
wsum[0] = 0;
@@ -573,29 +573,7 @@ vec3 sampleProbes(vec3 pos, vec3 dir, float lod, bool errorCorrect)
{
- if (errorCorrect && refIndex[i].w >= 0)
- { // error correction is on and this probe is a sphere
- //take a sample to get depth value, then error correct
- refcol = tapRefMap(pos, dir, w, dw, vi, wi, abs(lod + 2), refSphere[i].xyz, i);
-
- //adjust lookup by distance result
- float d = length(vi - wi);
- vi += dir * d;
-
- vi -= refSphere[i].xyz;
-
- vi = env_mat * vi;
-
- refcol = textureLod(reflectionProbes, vec4(vi, refIndex[i].x), lod).rgb;
-
- // weight by vector correctness
- vec3 pi = normalize(wi - pos);
- w *= max(dot(pi, dir), 0.1);
- }
- else
- {
- refcol = tapRefMap(pos, dir, w, dw, vi, wi, lod, refSphere[i].xyz, i);
- }
+ refcol = tapRefMap(pos, dir, w, dw, vi, wi, lod, refSphere[i].xyz, i);
col[p] += refcol.rgb*w;
wsum[p] += w;
@@ -684,7 +662,7 @@ vec3 sampleProbeAmbient(vec3 pos, vec3 dir)
}
void sampleReflectionProbes(inout vec3 ambenv, inout vec3 glossenv,
- vec2 tc, vec3 pos, vec3 norm, float glossiness, bool errorCorrect)
+ vec2 tc, vec3 pos, vec3 norm, float glossiness)
{
// TODO - don't hard code lods
float reflection_lods = max_probe_lod;
@@ -695,13 +673,12 @@ void sampleReflectionProbes(inout vec3 ambenv, inout vec3 glossenv,
ambenv = sampleProbeAmbient(pos, norm);
float lod = (1.0-glossiness)*reflection_lods;
- glossenv = sampleProbes(pos, normalize(refnormpersp), lod, errorCorrect);
+ glossenv = sampleProbes(pos, normalize(refnormpersp), lod);
#if defined(SSR)
if (cube_snapshot != 1 && glossiness >= 0.9)
{
vec4 ssr = vec4(0);
- //float w = tapScreenSpaceReflection(errorCorrect ? 1 : 4, tc, pos, norm, ssr, sceneMap);
float w = tapScreenSpaceReflection(1, tc, pos, norm, ssr, sceneMap);
glossenv = mix(glossenv, ssr.rgb, w);
@@ -709,6 +686,12 @@ void sampleReflectionProbes(inout vec3 ambenv, inout vec3 glossenv,
#endif
}
+void sampleReflectionProbesWater(inout vec3 ambenv, inout vec3 glossenv,
+ vec2 tc, vec3 pos, vec3 norm, float glossiness)
+{
+ sampleReflectionProbes(ambenv, glossenv, tc, pos, norm, glossiness);
+}
+
void debugTapRefMap(vec3 pos, vec3 dir, float depth, int i, inout vec4 col)
{
vec3 origin = vec3(0,0,0);
@@ -749,14 +732,6 @@ vec4 sampleReflectionProbesDebug(vec3 pos)
return col;
}
-void sampleReflectionProbes(inout vec3 ambenv, inout vec3 glossenv,
- vec2 tc, vec3 pos, vec3 norm, float glossiness)
-{
- sampleReflectionProbes(ambenv, glossenv,
- tc, pos, norm, glossiness, false);
-}
-
-
void sampleReflectionProbesLegacy(inout vec3 ambenv, inout vec3 glossenv, inout vec3 legacyenv,
vec2 tc, vec3 pos, vec3 norm, float glossiness, float envIntensity)
{
@@ -770,12 +745,12 @@ void sampleReflectionProbesLegacy(inout vec3 ambenv, inout vec3 glossenv, inout
if (glossiness > 0.0)
{
float lod = (1.0-glossiness)*reflection_lods;
- glossenv = sampleProbes(pos, normalize(refnormpersp), lod, false);
+ glossenv = sampleProbes(pos, normalize(refnormpersp), lod);
}
if (envIntensity > 0.0)
{
- legacyenv = sampleProbes(pos, normalize(refnormpersp), 0.0, false);
+ legacyenv = sampleProbes(pos, normalize(refnormpersp), 0.0);
}
#if defined(SSR)
diff --git a/indra/newview/app_settings/shaders/class3/environment/waterF.glsl b/indra/newview/app_settings/shaders/class3/environment/waterF.glsl
index 631d2c04d0..a87682affb 100644
--- a/indra/newview/app_settings/shaders/class3/environment/waterF.glsl
+++ b/indra/newview/app_settings/shaders/class3/environment/waterF.glsl
@@ -122,11 +122,8 @@ vec3 transform_normal(vec3 vNt)
return normalize(vNt.x * vT + vNt.y * vB + vNt.z * vN);
}
-void sampleReflectionProbes(inout vec3 ambenv, inout vec3 glossenv,
- vec2 tc, vec3 pos, vec3 norm, float glossiness);
-
-void sampleReflectionProbes(inout vec3 ambenv, inout vec3 glossenv,
- vec2 tc, vec3 pos, vec3 norm, float glossiness, bool errorCorrect);
+void sampleReflectionProbesWater(inout vec3 ambenv, inout vec3 glossenv,
+ vec2 tc, vec3 pos, vec3 norm, float glossiness);
vec3 getPositionWithNDC(vec3 ndc);
@@ -219,16 +216,16 @@ void main()
fb = applyWaterFogViewLinear(refPos, fb, sunlit);
#else
- vec4 fb = applyWaterFogViewLinear(viewVec*2048.0, vec4(0.5), sunlit);
+ vec4 fb = applyWaterFogViewLinear(viewVec*2048.0, vec4(1.0), sunlit);
#endif
float metallic = 0.0;
- float perceptualRoughness = 0.1;
+ float perceptualRoughness = 0.05;
float gloss = 1.0 - perceptualRoughness;
vec3 irradiance = vec3(0);
vec3 radiance = vec3(0);
- sampleReflectionProbes(irradiance, radiance, distort2, pos.xyz, wave_ibl.xyz, gloss);
+ sampleReflectionProbesWater(irradiance, radiance, distort2, pos.xyz, wave_ibl.xyz, gloss);
irradiance = vec3(0);
@@ -265,10 +262,18 @@ void main()
f *= 0.9;
f *= f;
+ // incoming scale is [0, 1] with 0.5 being default
+ // shift to 0.5 to 1.5
+ f *= (fresnelScale - 0.5)+1.0;
+
+ // incoming offset is [0, 1] with 0.5 being default
+ // shift from -1 to 1
+ f += (fresnelOffset - 0.5) * 2.0;
+
f = clamp(f, 0, 1);
- //fb.rgb *= 1.;
-
+
color = mix(color, fb.rgb, f);
+
float spec = min(max(max(punctual.r, punctual.g), punctual.b), 0.05);
frag_color = vec4(color, spec); //*sunAngle2);