diff options
author | Clément Foucault <foucault.clem@gmail.com> | 2018-10-31 02:45:57 +0300 |
---|---|---|
committer | Clément Foucault <foucault.clem@gmail.com> | 2018-10-31 02:46:08 +0300 |
commit | 4e23c69bfa6d835e270cb1098c03b3adfb4c9d9c (patch) | |
tree | ee74c3bdf6b5de5a257cbc8b85d265aaeef43227 | |
parent | d86e77ac16203e68d834d02c05221fc83674a1fa (diff) |
Workbench: Attenuate dithering effect when using viewport render
Quick hack to get rid of most of the noise when doing a viewport render in
xray or wireframe mode.
-rw-r--r-- | source/blender/draw/engines/workbench/shaders/workbench_checkerboard_depth_frag.glsl | 3 | ||||
-rw-r--r-- | source/blender/draw/engines/workbench/workbench_forward.c | 7 |
2 files changed, 9 insertions, 1 deletions
diff --git a/source/blender/draw/engines/workbench/shaders/workbench_checkerboard_depth_frag.glsl b/source/blender/draw/engines/workbench/shaders/workbench_checkerboard_depth_frag.glsl index 7027543f5a9..94fa5d51229 100644 --- a/source/blender/draw/engines/workbench/shaders/workbench_checkerboard_depth_frag.glsl +++ b/source/blender/draw/engines/workbench/shaders/workbench_checkerboard_depth_frag.glsl @@ -9,6 +9,7 @@ const vec4 dither_mat[4] = vec4[4]( ); uniform float threshold = 0.5; +uniform float offset = 0.0; /* Noise dithering pattern * 0 - Bayer matrix @@ -24,7 +25,7 @@ void main() #elif NOISE == 1 /* Interlieved gradient noise by Jorge Jimenez * http://www.iryoku.com/next-generation-post-processing-in-call-of-duty-advanced-warfare */ - float noise = fract(52.9829189 * fract(0.06711056 * gl_FragCoord.x + 0.00583715 * gl_FragCoord.y)); + float noise = fract(offset + 52.9829189 * fract(0.06711056 * gl_FragCoord.x + 0.00583715 * gl_FragCoord.y)); #else #error #endif diff --git a/source/blender/draw/engines/workbench/workbench_forward.c b/source/blender/draw/engines/workbench/workbench_forward.c index bd9dbd5ae17..d8de253c8eb 100644 --- a/source/blender/draw/engines/workbench/workbench_forward.c +++ b/source/blender/draw/engines/workbench/workbench_forward.c @@ -363,8 +363,14 @@ void workbench_forward_engine_init(WORKBENCH_Data *vedata) /* Checker Depth */ { + static float noise_offset = 0.0f; float blend_threshold = 0.0f; + if (DRW_state_is_image_render()) { + /* TODO: Should be based on the number of samples used for render. */ + noise_offset = fmodf(noise_offset + 1.0f/8.0f, 1.0f); + } + if (wpd->shading.flag & XRAY_FLAG(wpd)) { blend_threshold = 0.75f - XRAY_ALPHA(wpd) * 0.5f; } @@ -379,6 +385,7 @@ void workbench_forward_engine_init(WORKBENCH_Data *vedata) grp = DRW_shgroup_create(e_data.checker_depth_sh, psl->checker_depth_pass); DRW_shgroup_call_add(grp, DRW_cache_fullscreen_quad_get(), NULL); DRW_shgroup_uniform_float_copy(grp, "threshold", blend_threshold); + DRW_shgroup_uniform_float_copy(grp, "offset", noise_offset); } } |