[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [51390] trunk/blender/intern/cycles/render : Fix cycles motion blur not working correct with shutter time > 2.0.

Brecht Van Lommel brechtvanlommel at pandora.be
Wed Oct 17 19:27:31 CEST 2012


Revision: 51390
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=51390
Author:   blendix
Date:     2012-10-17 17:27:30 +0000 (Wed, 17 Oct 2012)
Log Message:
-----------
Fix cycles motion blur not working correct with shutter time > 2.0. The soft
limit is 2.0, and anything beyond that is extrapolation which might not work
so well but is still allowed.

Modified Paths:
--------------
    trunk/blender/intern/cycles/render/mesh.cpp
    trunk/blender/intern/cycles/render/object.cpp
    trunk/blender/intern/cycles/render/object.h

Modified: trunk/blender/intern/cycles/render/mesh.cpp
===================================================================
--- trunk/blender/intern/cycles/render/mesh.cpp	2012-10-17 17:20:09 UTC (rev 51389)
+++ trunk/blender/intern/cycles/render/mesh.cpp	2012-10-17 17:27:30 UTC (rev 51390)
@@ -19,6 +19,7 @@
 #include "bvh.h"
 #include "bvh_build.h"
 
+#include "camera.h"
 #include "device.h"
 #include "shader.h"
 #include "light.h"
@@ -722,6 +723,7 @@
 	foreach(Shader *shader, scene->shaders)
 		shader->need_update_attributes = false;
 
+	float shuttertime = scene->camera->shuttertime;
 #ifdef __OBJECT_MOTION__
 	Scene::MotionType need_motion = scene->need_motion(device->info.advanced_shading);
 	bool motion_blur = need_motion == Scene::MOTION_BLUR;
@@ -730,7 +732,7 @@
 #endif
 
 	foreach(Object *object, scene->objects)
-		object->compute_bounds(motion_blur);
+		object->compute_bounds(motion_blur, shuttertime);
 
 	if(progress.get_cancel()) return;
 

Modified: trunk/blender/intern/cycles/render/object.cpp
===================================================================
--- trunk/blender/intern/cycles/render/object.cpp	2012-10-17 17:20:09 UTC (rev 51389)
+++ trunk/blender/intern/cycles/render/object.cpp	2012-10-17 17:27:30 UTC (rev 51390)
@@ -51,7 +51,7 @@
 {
 }
 
-void Object::compute_bounds(bool motion_blur)
+void Object::compute_bounds(bool motion_blur, float shuttertime)
 {
 	BoundBox mbounds = mesh->bounds;
 
@@ -64,7 +64,10 @@
 		/* todo: this is really terrible. according to pbrt there is a better
 		 * way to find this iteratively, but did not find implementation yet
 		 * or try to implement myself */
-		for(float t = 0.0f; t < 1.0f; t += 1.0f/128.0f) {
+		float start_t = 0.5f - shuttertime*0.5f;
+		float end_t = 0.5f - shuttertime*0.5f;
+
+		for(float t = start_t; t < end_t; t += (1.0f/128.0f)*shuttertime) {
 			Transform ttfm;
 
 			transform_motion_interpolate(&ttfm, &decomp, t);
@@ -109,7 +112,7 @@
 
 	if(bounds.valid()) {
 		mesh->compute_bounds();
-		compute_bounds(false);
+		compute_bounds(false, 0.0f);
 	}
 
 	/* tfm is not reset to identity, all code that uses it needs to check the

Modified: trunk/blender/intern/cycles/render/object.h
===================================================================
--- trunk/blender/intern/cycles/render/object.h	2012-10-17 17:20:09 UTC (rev 51389)
+++ trunk/blender/intern/cycles/render/object.h	2012-10-17 17:27:30 UTC (rev 51390)
@@ -59,7 +59,7 @@
 
 	void tag_update(Scene *scene);
 
-	void compute_bounds(bool motion_blur);
+	void compute_bounds(bool motion_blur, float shuttertime);
 	void apply_transform();
 };
 




More information about the Bf-blender-cvs mailing list