[Bf-blender-cvs] [7a4c99de5a6] master: Fix T66292: Alpha Blend transparency glitches with volume

Clément Foucault noreply at git.blender.org
Mon Jul 1 14:44:04 CEST 2019


Commit: 7a4c99de5a637c87c03151cd671b347590140c17
Author: Clément Foucault
Date:   Mon Jul 1 14:43:44 2019 +0200
Branches: master
https://developer.blender.org/rB7a4c99de5a637c87c03151cd671b347590140c17

Fix T66292: Alpha Blend transparency glitches with volume

===================================================================

M	source/blender/draw/engines/eevee/eevee_private.h
M	source/blender/draw/engines/eevee/eevee_volumes.c
M	source/blender/draw/engines/eevee/shaders/bsdf_common_lib.glsl
M	source/blender/draw/engines/eevee/shaders/volumetric_resolve_frag.glsl

===================================================================

diff --git a/source/blender/draw/engines/eevee/eevee_private.h b/source/blender/draw/engines/eevee/eevee_private.h
index 166e8ac7473..152b8fa5d0a 100644
--- a/source/blender/draw/engines/eevee/eevee_private.h
+++ b/source/blender/draw/engines/eevee/eevee_private.h
@@ -653,11 +653,11 @@ typedef struct EEVEE_CommonUniformBuffer {
   float ao_offset, ao_bounce_fac, ao_quality, ao_settings; /* vec4 */
   /* Volumetric */
   /* -- 16 byte aligned -- */
-  int vol_tex_size[3], pad3;         /* ivec3 */
-  float vol_depth_param[3], pad4;    /* vec3 */
-  float vol_inv_tex_size[3], pad5;   /* vec3 */
-  float vol_jitter[3], pad6;         /* vec3 */
-  float vol_coord_scale[2], pad7[2]; /* vec2 */
+  int vol_tex_size[3], pad3;       /* ivec3 */
+  float vol_depth_param[3], pad4;  /* vec3 */
+  float vol_inv_tex_size[3], pad5; /* vec3 */
+  float vol_jitter[3], pad6;       /* vec3 */
+  float vol_coord_scale[4];        /* vec4 */
   /* -- 16 byte aligned -- */
   float vol_history_alpha; /* float */
   float vol_light_clamp;   /* float */
diff --git a/source/blender/draw/engines/eevee/eevee_volumes.c b/source/blender/draw/engines/eevee/eevee_volumes.c
index 9c8ec6e52a4..f85c30044a9 100644
--- a/source/blender/draw/engines/eevee/eevee_volumes.c
+++ b/source/blender/draw/engines/eevee/eevee_volumes.c
@@ -178,6 +178,8 @@ void EEVEE_volumes_init(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata)
 
   common_data->vol_coord_scale[0] = viewport_size[0] / (float)(tile_size * tex_size[0]);
   common_data->vol_coord_scale[1] = viewport_size[1] / (float)(tile_size * tex_size[1]);
+  common_data->vol_coord_scale[2] = 1.0f / viewport_size[0];
+  common_data->vol_coord_scale[3] = 1.0f / viewport_size[1];
 
   /* TODO compute snap to maxZBuffer for clustered rendering */
   if ((common_data->vol_tex_size[0] != tex_size[0]) ||
diff --git a/source/blender/draw/engines/eevee/shaders/bsdf_common_lib.glsl b/source/blender/draw/engines/eevee/shaders/bsdf_common_lib.glsl
index 3a31afc0224..274269846bc 100644
--- a/source/blender/draw/engines/eevee/shaders/bsdf_common_lib.glsl
+++ b/source/blender/draw/engines/eevee/shaders/bsdf_common_lib.glsl
@@ -915,8 +915,7 @@ void main()
 #    endif
 
 #    if defined(USE_ALPHA_BLEND)
-  /* XXX fragile, better use real viewport resolution */
-  vec2 uvs = gl_FragCoord.xy / vec2(2 * textureSize(maxzBuffer, 0).xy);
+  vec2 uvs = gl_FragCoord.xy * volCoordScale.zw;
   vec3 transmittance, scattering;
   volumetric_resolve(uvs, gl_FragCoord.z, transmittance, scattering);
   fragColor.rgb = cl.radiance * transmittance + scattering;
diff --git a/source/blender/draw/engines/eevee/shaders/volumetric_resolve_frag.glsl b/source/blender/draw/engines/eevee/shaders/volumetric_resolve_frag.glsl
index 757eb59eaa1..1ff7e848c40 100644
--- a/source/blender/draw/engines/eevee/shaders/volumetric_resolve_frag.glsl
+++ b/source/blender/draw/engines/eevee/shaders/volumetric_resolve_frag.glsl
@@ -2,9 +2,7 @@
 /* Based on Frosbite Unified Volumetric.
  * https://www.ea.com/frostbite/news/physically-based-unified-volumetric-rendering-in-frostbite */
 
-/* Step 4 : Apply final integration on top of the scene color.
- * Note that we do the blending ourself instead of relying
- * on hardware blending which would require 2 pass. */
+/* Step 4 : Apply final integration on top of the scene color. */
 
 uniform sampler2D inSceneDepth;



More information about the Bf-blender-cvs mailing list