diff options
| author | Rye Mutt <rye@alchemyviewer.org> | 2024-04-21 20:40:13 -0400 | 
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-04-21 19:40:13 -0500 | 
| commit | f1b7e806eb30a343876036eff5caef7c03309aa6 (patch) | |
| tree | 7c84e5e1d44e4df2fb3ebf1dfa28ceb54c78390d /indra/newview/app_settings/shaders/class1/deferred | |
| parent | e361671018068000a8b63b3cdc2ad87468def9a3 (diff) | |
Fix sampling normals from gbuffer and cleanup redundant gbuffer samples (#1294)
* Fix sampling normals from gbuffer and cleanup redundant gbuffer samples
* Allow negative normals in gbuffer to fix broken material rendering
Diffstat (limited to 'indra/newview/app_settings/shaders/class1/deferred')
4 files changed, 9 insertions, 20 deletions
diff --git a/indra/newview/app_settings/shaders/class1/deferred/blurLightF.glsl b/indra/newview/app_settings/shaders/class1/deferred/blurLightF.glsl index 08baf98686..8627ab1852 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/blurLightF.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/blurLightF.glsl @@ -40,12 +40,12 @@ uniform float kern_scale;  in vec2 vary_fragcoord;  vec4 getPosition(vec2 pos_screen); -vec3 getNorm(vec2 pos_screen); +vec4 getNorm(vec2 pos_screen);  void main()   {      vec2 tc = vary_fragcoord.xy; -    vec3 norm = getNorm(tc); +    vec4 norm = getNorm(tc);      vec3 pos = getPosition(tc).xyz;      vec4 ccol = texture(lightMap, tc).rgba; diff --git a/indra/newview/app_settings/shaders/class1/deferred/deferredUtil.glsl b/indra/newview/app_settings/shaders/class1/deferred/deferredUtil.glsl index 065fcec45a..f6696e270c 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/deferredUtil.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/deferredUtil.glsl @@ -141,31 +141,20 @@ vec2 getScreenCoordinate(vec2 screenpos)      return sc - vec2(1.0, 1.0);  } -vec3 getNorm(vec2 screenpos) +vec4 getNorm(vec2 screenpos)  { -    return texture(normalMap, screenpos.xy).rgb; -} - -vec3 getNormalFromPacked(vec4 packedNormalEnvIntensityFlags) -{ -   vec2 enc = packedNormalEnvIntensityFlags.xy; -   vec2 fenc = enc*4-2; -   float f = dot(fenc,fenc); -   float g = sqrt(1-f/4); -   vec3 n; -   n.xy = fenc*g; -   n.z = 1-f/2; -   return normalize(n); // TODO: Is this normalize redundant? +    return texture(normalMap, screenpos.xy);  }  // return packedNormalEnvIntensityFlags since GBUFFER_FLAG_HAS_PBR needs .w  // See: C++: addDeferredAttachments(), GLSL: softenLightF  vec4 getNormalEnvIntensityFlags(vec2 screenpos, out vec3 n, out float envIntensity)  { -    n = texture(normalMap, screenpos.xy).rgb; +    vec4 norm = texture(normalMap, screenpos.xy); +    n = norm.xyz;      envIntensity = texture(emissiveRect, screenpos.xy).r; -    return vec4(n, envIntensity); +    return norm;  }  // get linear depth value given a depth buffer sample d and znear and zfar values diff --git a/indra/newview/app_settings/shaders/class1/deferred/pbropaqueF.glsl b/indra/newview/app_settings/shaders/class1/deferred/pbropaqueF.glsl index 55fc94b7f5..1d5f810cf3 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/pbropaqueF.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/pbropaqueF.glsl @@ -109,7 +109,7 @@ void main()      // See: C++: addDeferredAttachments(), GLSL: softenLightF      frag_data[0] = max(vec4(col, 0.0), vec4(0));                                                   // Diffuse      frag_data[1] = max(vec4(spec.rgb,vertex_color.a), vec4(0));                                    // PBR linear packed Occlusion, Roughness, Metal. -    frag_data[2] = max(vec4(tnorm, GBUFFER_FLAG_HAS_PBR), vec4(0)); // normal, environment intensity, flags +    frag_data[2] = vec4(tnorm, GBUFFER_FLAG_HAS_PBR); // normal, environment intensity, flags      frag_data[3] = max(vec4(emissive,0), vec4(0));                                                // PBR sRGB Emissive  } diff --git a/indra/newview/app_settings/shaders/class1/deferred/pbrterrainF.glsl b/indra/newview/app_settings/shaders/class1/deferred/pbrterrainF.glsl index 025ecb64df..de4745c1c4 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/pbrterrainF.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/pbrterrainF.glsl @@ -341,7 +341,7 @@ void main()  #endif      frag_data[0] = max(vec4(mix.col.xyz, 0.0), vec4(0));                                                   // Diffuse      frag_data[1] = max(vec4(orm.rgb, base_color_factor_alpha), vec4(0));                                    // PBR linear packed Occlusion, Roughness, Metal. -    frag_data[2] = max(vec4(tnorm, GBUFFER_FLAG_HAS_PBR), vec4(0)); // normal, flags +    frag_data[2] = vec4(tnorm, GBUFFER_FLAG_HAS_PBR); // normal, flags      frag_data[3] = max(vec4(emissive,0), vec4(0));                                                // PBR sRGB Emissive  }  | 
