[Bf-blender-cvs] [eaea5c8904b] master: Workbench: Fix depth of field background being glitchy

Clément Foucault noreply at git.blender.org
Thu Feb 13 01:55:46 CET 2020


Commit: eaea5c8904bee569384598cc96af10f7f55a9be8
Author: Clément Foucault
Date:   Thu Feb 13 01:54:59 2020 +0100
Branches: master
https://developer.blender.org/rBeaea5c8904bee569384598cc96af10f7f55a9be8

Workbench: Fix depth of field background being glitchy

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

M	source/blender/draw/engines/workbench/shaders/workbench_effect_dof_frag.glsl
M	source/blender/draw/engines/workbench/workbench_effect_dof.c

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

diff --git a/source/blender/draw/engines/workbench/shaders/workbench_effect_dof_frag.glsl b/source/blender/draw/engines/workbench/shaders/workbench_effect_dof_frag.glsl
index bd16189db32..0efcfb35929 100644
--- a/source/blender/draw/engines/workbench/shaders/workbench_effect_dof_frag.glsl
+++ b/source/blender/draw/engines/workbench/shaders/workbench_effect_dof_frag.glsl
@@ -251,7 +251,7 @@ void main()
   ivec2 texel = ivec2(uv * size);
 
   vec4 color = vec4(0.0);
-  float tot = 1e-4;
+  float tot = 0.0;
 
   float coc = decode_coc(texelFetch(inputCocTex, texel, 0).rg);
   float max_radius = coc;
@@ -272,7 +272,12 @@ void main()
     tot += weight;
   }
 
-  blurColor = color / tot;
+  if (tot > 0.0) {
+    blurColor = color / tot;
+  }
+  else {
+    blurColor = textureLod(halfResColorTex, uv, 0.0);
+  }
 }
 #endif
 
@@ -385,7 +390,9 @@ void main()
  * ----------------- STEP 4 ------------------
  */
 #ifdef RESOLVE
-out vec4 finalColor;
+
+layout(location = 0) out vec4 finalColorAdd;
+layout(location = 1) out vec4 finalColorMul;
 
 void main()
 {
@@ -398,7 +405,8 @@ void main()
   float zdepth = linear_depth(depth);
   float coc = calculate_coc(zdepth);
 
-  finalColor = texture(halfResColorTex, uv);
-  finalColor.a = smoothstep(1.0, 3.0, abs(coc));
+  float blend = smoothstep(1.0, 3.0, abs(coc));
+  finalColorAdd = texture(halfResColorTex, uv) * blend;
+  finalColorMul = vec4(1.0 - blend);
 }
 #endif
diff --git a/source/blender/draw/engines/workbench/workbench_effect_dof.c b/source/blender/draw/engines/workbench/workbench_effect_dof.c
index 169b91a6474..3709c5600e6 100644
--- a/source/blender/draw/engines/workbench/workbench_effect_dof.c
+++ b/source/blender/draw/engines/workbench/workbench_effect_dof.c
@@ -181,11 +181,11 @@ void workbench_dof_engine_init(WORKBENCH_Data *vedata, Object *camera)
 #endif
 
   DRW_texture_ensure_2d(
-      &txl->dof_source_tx, size[0], size[1], GPU_R11F_G11F_B10F, DRW_TEX_FILTER | DRW_TEX_MIPMAP);
+      &txl->dof_source_tx, size[0], size[1], GPU_RGBA16F, DRW_TEX_FILTER | DRW_TEX_MIPMAP);
   DRW_texture_ensure_2d(
       &txl->coc_halfres_tx, size[0], size[1], GPU_RG8, DRW_TEX_FILTER | DRW_TEX_MIPMAP);
   wpd->dof_blur_tx = DRW_texture_pool_query_2d(
-      size[0], size[1], GPU_R11F_G11F_B10F, &draw_engine_workbench_solid);
+      size[0], size[1], GPU_RGBA16F, &draw_engine_workbench_solid);
 #if 0
   wpd->coc_temp_tx = DRW_texture_pool_query_2d(
       shrink_h_size[0], shrink_h_size[1], GPU_RG8, &draw_engine_workbench_solid);
@@ -299,7 +299,7 @@ void workbench_dof_create_pass(WORKBENCH_Data *vedata,
   psl->dof_blur1_ps = DRW_pass_create("DoF Blur 1", DRW_STATE_WRITE_COLOR);
   psl->dof_blur2_ps = DRW_pass_create("DoF Blur 2", DRW_STATE_WRITE_COLOR);
   psl->dof_resolve_ps = DRW_pass_create("DoF Resolve",
-                                        DRW_STATE_WRITE_COLOR | DRW_STATE_BLEND_ALPHA);
+                                        DRW_STATE_WRITE_COLOR | DRW_STATE_BLEND_CUSTOM);
 
   {
     DRWShadingGroup *grp = DRW_shgroup_create(e_data.effect_dof_prepare_sh, psl->dof_down_ps);



More information about the Bf-blender-cvs mailing list