[Bf-blender-cvs] [d06b1a5] master: Cycles: Missed some changes in the previous hair motion blur fix

Sergey Sharybin noreply at git.blender.org
Tue Nov 18 22:44:25 CET 2014


Commit: d06b1a5d8bb219c0935373cd5758a9bdacd6ec36
Author: Sergey Sharybin
Date:   Wed Nov 19 02:42:22 2014 +0500
Branches: master
https://developer.blender.org/rBd06b1a5d8bb219c0935373cd5758a9bdacd6ec36

Cycles: Missed some changes in the previous hair motion blur fix

So now cases when object has both hair motion blur and deformation motion blur
vector pass is all correct.

We could get rid of the flag in the future, still need to look deeper into all
the areas trying to find a more clear solution.

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

M	intern/cycles/kernel/geom/geom_primitive.h
M	intern/cycles/kernel/kernel_types.h
M	intern/cycles/render/object.cpp

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

diff --git a/intern/cycles/kernel/geom/geom_primitive.h b/intern/cycles/kernel/geom/geom_primitive.h
index 7079777..207d506 100644
--- a/intern/cycles/kernel/geom/geom_primitive.h
+++ b/intern/cycles/kernel/geom/geom_primitive.h
@@ -173,7 +173,7 @@ ccl_device float4 primitive_motion_vector(KernelGlobals *kg, ShaderData *sd)
 		motion_post = primitive_attribute_float3(kg, sd, elem, offset_next, NULL, NULL);
 
 #ifdef __HAIR__
-		if(is_curve_primitive) {
+		if(is_curve_primitive && (sd->flag & SD_OBJECT_HAS_VERTEX_MOTION) == 0) {
 			object_position_transform(kg, sd, &motion_pre);
 			object_position_transform(kg, sd, &motion_post);
 		}
diff --git a/intern/cycles/kernel/kernel_types.h b/intern/cycles/kernel/kernel_types.h
index 25b13f7..95d38a4 100644
--- a/intern/cycles/kernel/kernel_types.h
+++ b/intern/cycles/kernel/kernel_types.h
@@ -631,6 +631,7 @@ enum ShaderDataFlag {
 	SD_NEGATIVE_SCALE_APPLIED   = (1 << 24),  /* vertices have negative scale applied */
 	SD_OBJECT_HAS_VOLUME        = (1 << 25),  /* object has a volume shader */
 	SD_OBJECT_INTERSECTS_VOLUME = (1 << 26),  /* object intersects AABB of an object with volume shader */
+	SD_OBJECT_HAS_VERTEX_MOTION = (1 << 22),  /* has position for motion vertices */
 
 	SD_OBJECT_FLAGS = (SD_HOLDOUT_MASK|SD_OBJECT_MOTION|SD_TRANSFORM_APPLIED|
 	                   SD_NEGATIVE_SCALE_APPLIED|SD_OBJECT_HAS_VOLUME|
diff --git a/intern/cycles/render/object.cpp b/intern/cycles/render/object.cpp
index 46ddab2..3b2a3ae 100644
--- a/intern/cycles/render/object.cpp
+++ b/intern/cycles/render/object.cpp
@@ -318,6 +318,9 @@ void ObjectManager::device_update_transforms(Device *device, DeviceScene *dscene
 				mtfm_pre = mtfm_pre * itfm;
 				mtfm_post = mtfm_post * itfm;
 			}
+			else {
+				flag |= SD_OBJECT_HAS_VERTEX_MOTION;
+			}
 
 			memcpy(&objects_vector[i*OBJECT_VECTOR_SIZE+0], &mtfm_pre, sizeof(float4)*3);
 			memcpy(&objects_vector[i*OBJECT_VECTOR_SIZE+3], &mtfm_post, sizeof(float4)*3);




More information about the Bf-blender-cvs mailing list