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
path: root/source
diff options
context:
space:
mode:
authorTon Roosendaal <ton@blender.org>2006-03-10 01:50:36 +0300
committerTon Roosendaal <ton@blender.org>2006-03-10 01:50:36 +0300
commit7c23e0827030404863523e7dd61e863992bbf9d4 (patch)
treee9f67f2874f0b04c62ae6a3ed0adeac7efe7a6fa /source
parenta6ed488b745e50c67859aa727ba845f8657d63ff (diff)
Vectorblur fix:
To be able to make good masks, it is important to separate the non moving pixels from the moving ones. With fixes I did 2 weeks ago, a floating point inaccuracy causes speed vectors to be not always zero perfectly... and the masks to get badly shaped. It was clearly visible on moving objects over a non-moving background. Current commit includes minimal threshold to force speed to zero. Images are nice and smooth again. :) Bad: http://www.blender.org/bf/vb1.jpg Good again: http://www.blender.org/bf/vb2.jpg
Diffstat (limited to 'source')
-rw-r--r--source/blender/render/intern/source/convertblender.c15
1 files changed, 10 insertions, 5 deletions
diff --git a/source/blender/render/intern/source/convertblender.c b/source/blender/render/intern/source/convertblender.c
index 41eb707b1b1..30b30a1d0bb 100644
--- a/source/blender/render/intern/source/convertblender.c
+++ b/source/blender/render/intern/source/convertblender.c
@@ -3245,12 +3245,18 @@ static void calculate_speedvectors(Render *re, float *vectors, int startvert, in
/* now map hocos to screenspace, uses very primitive clip still */
if(ver->ho[3]<0.1f) div= 10.0f;
else div= 1.0f/ver->ho[3];
- zco[0]= zmulx*(1.0+ver->ho[0]*div);
- zco[1]= zmuly*(1.0+ver->ho[1]*div);
+ zco[0]= zmulx*(1.0f+ver->ho[0]*div);
+ zco[1]= zmuly*(1.0f+ver->ho[1]*div);
zco[0]= vectors[0] - zco[0];
zco[1]= vectors[1] - zco[1];
+ /* enable nice masks for hardly moving stuff or float inaccuracy */
+ if(zco[0]<0.1f && zco[0]>-0.1f && zco[1]<0.1f && zco[1]>-0.1f ) {
+ zco[0]= 0.0f;
+ zco[1]= 0.0f;
+ }
+
/* maximize speed for image width, otherwise it never looks good */
len= zco[0]*zco[0] + zco[1]*zco[1];
if(len > winsq) {
@@ -3269,7 +3275,6 @@ static void calculate_speedvectors(Render *re, float *vectors, int startvert, in
speed[0]= zco[0];
speed[1]= zco[1];
}
-
}
}
@@ -3375,8 +3380,8 @@ static void copy_dbase_object_vectors(Render *re, ListBase *lb)
if(ver->ho[3]<0.1f) div= 10.0f;
else div= 1.0f/ver->ho[3];
- vec[0]= zmulx*(1.0+ver->ho[0]*div);
- vec[1]= zmuly*(1.0+ver->ho[1]*div);
+ vec[0]= zmulx*(1.0f+ver->ho[0]*div);
+ vec[1]= zmuly*(1.0f+ver->ho[1]*div);
}
}