[Bf-blender-cvs] [aae60f0fecf] blender-v2.91-release: Fix T81752 EEVEE: Camera Motion Blur is not blending steps properly

Clément Foucault noreply at git.blender.org
Thu Nov 5 18:00:37 CET 2020


Commit: aae60f0fecf74c93d8c6e8a5e33ffd4fb6c76a3a
Author: Clément Foucault
Date:   Thu Nov 5 17:57:19 2020 +0100
Branches: blender-v2.91-release
https://developer.blender.org/rBaae60f0fecf74c93d8c6e8a5e33ffd4fb6c76a3a

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.

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

M	source/blender/draw/engines/eevee/eevee_motion_blur.c
M	source/blender/draw/engines/eevee/shaders/effect_velocity_resolve_frag.glsl

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

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;



More information about the Bf-blender-cvs mailing list