diff options
author | Clément Foucault <foucault.clem@gmail.com> | 2020-02-13 03:54:59 +0300 |
---|---|---|
committer | Clément Foucault <foucault.clem@gmail.com> | 2020-02-13 03:55:08 +0300 |
commit | eaea5c8904bee569384598cc96af10f7f55a9be8 (patch) | |
tree | 1249b4dd79d1833e463ed0dd955fd4f50954fea8 /source/blender/draw/engines | |
parent | 10b04fa3162c4e1c1036d6c4837cff27134e3f11 (diff) |
Workbench: Fix depth of field background being glitchy
Diffstat (limited to 'source/blender/draw/engines')
-rw-r--r-- | source/blender/draw/engines/workbench/shaders/workbench_effect_dof_frag.glsl | 18 | ||||
-rw-r--r-- | source/blender/draw/engines/workbench/workbench_effect_dof.c | 6 |
2 files changed, 16 insertions, 8 deletions
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); |