diff options
author | Ton Roosendaal <ton@blender.org> | 2006-03-10 01:50:36 +0300 |
---|---|---|
committer | Ton Roosendaal <ton@blender.org> | 2006-03-10 01:50:36 +0300 |
commit | 7c23e0827030404863523e7dd61e863992bbf9d4 (patch) | |
tree | e9f67f2874f0b04c62ae6a3ed0adeac7efe7a6fa /source | |
parent | a6ed488b745e50c67859aa727ba845f8657d63ff (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.c | 15 |
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); } } |