Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorClément Foucault <foucault.clem@gmail.com>2020-11-05 19:57:19 +0300
committerClément Foucault <foucault.clem@gmail.com>2020-11-05 20:00:27 +0300
commitaae60f0fecf74c93d8c6e8a5e33ffd4fb6c76a3a (patch)
treeea3d92528c40431d6a70cc678c4a64948eabca30 /source/blender/draw/engines
parent15eec7f8b985852219e842ef434f80b6cf9ed165 (diff)
Fix T81752 EEVEE: Camera Motion Blur is not blending steps properly
This was due to improper calculation of velocity factor and an error in the camera data swapping between two steps.
Diffstat (limited to 'source/blender/draw/engines')
-rw-r--r--source/blender/draw/engines/eevee/eevee_motion_blur.c2
-rw-r--r--source/blender/draw/engines/eevee/shaders/effect_velocity_resolve_frag.glsl15
2 files changed, 10 insertions, 7 deletions
diff --git a/source/blender/draw/engines/eevee/eevee_motion_blur.c b/source/blender/draw/engines/eevee/eevee_motion_blur.c
index f60c2661cb0..fe3705f1fbb 100644
--- a/source/blender/draw/engines/eevee/eevee_motion_blur.c
+++ b/source/blender/draw/engines/eevee/eevee_motion_blur.c
@@ -490,7 +490,7 @@ void EEVEE_motion_blur_swap_data(EEVEE_Data *vedata)
BLI_assert((effects->enabled_effects & EFFECT_MOTION_BLUR) != 0);
/* Camera Data. */
- effects->motion_blur.camera[MB_PREV] = effects->motion_blur.camera[MB_CURR];
+ effects->motion_blur.camera[MB_PREV] = effects->motion_blur.camera[MB_NEXT];
/* Object Data. */
for (BLI_ghashIterator_init(&ghi, effects->motion_blur.object);
diff --git a/source/blender/draw/engines/eevee/shaders/effect_velocity_resolve_frag.glsl b/source/blender/draw/engines/eevee/shaders/effect_velocity_resolve_frag.glsl
index 145939cefb2..9182171bab4 100644
--- a/source/blender/draw/engines/eevee/shaders/effect_velocity_resolve_frag.glsl
+++ b/source/blender/draw/engines/eevee/shaders/effect_velocity_resolve_frag.glsl
@@ -13,16 +13,19 @@ void main()
{
/* Extract pixel motion vector from camera movement. */
ivec2 texel = ivec2(gl_FragCoord.xy);
- vec2 uv = gl_FragCoord.xy / vec2(textureSize(depthBuffer, 0).xy);
+ vec2 uv_curr = gl_FragCoord.xy / vec2(textureSize(depthBuffer, 0).xy);
float depth = texelFetch(depthBuffer, texel, 0).r;
- vec3 world_position = project_point(currViewProjMatrixInv, vec3(uv, depth) * 2.0 - 1.0);
- vec2 uv_prev = project_point(prevViewProjMatrix, world_position).xy * 0.5 + 0.5;
- vec2 uv_next = project_point(nextViewProjMatrix, world_position).xy * 0.5 + 0.5;
+ uv_curr = uv_curr * 2.0 - 1.0;
+ depth = depth * 2.0 - 1.0;
- outData.xy = uv_prev - uv;
- outData.zw = uv_next - uv;
+ vec3 world_position = project_point(currViewProjMatrixInv, vec3(uv_curr, depth));
+ vec2 uv_prev = project_point(prevViewProjMatrix, world_position).xy;
+ vec2 uv_next = project_point(nextViewProjMatrix, world_position).xy;
+
+ outData.xy = uv_prev - uv_curr;
+ outData.zw = uv_next - uv_curr;
/* Encode to unsigned normalized 16bit texture. */
outData = outData * 0.5 + 0.5;