[Bf-blender-cvs] [eb8f85d] master: Fix T41116: Motion Blur causes random black surfaces on rigged models Fix T41115: Motion Blur renders Objects Black - But not in Viewport Preview

Sergey Sharybin noreply at git.blender.org
Wed Jul 23 14:01:56 CEST 2014


Commit: eb8f85d8be8a14cbb8e97ba3b91c02cfd0ebbe42
Author: Sergey Sharybin
Date:   Wed Jul 23 17:59:37 2014 +0600
Branches: master
https://developer.blender.org/rBeb8f85d8be8a14cbb8e97ba3b91c02cfd0ebbe42

Fix T41116: Motion Blur causes random black surfaces on rigged models
Fix T41115: Motion Blur renders Objects Black - But not in Viewport Preview

This actually extends previous fix to normals and makes it all much nicer now.

Worth doing some intense testing, quick one worked just fine but there always
could be some corner cases.

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

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

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

diff --git a/intern/cycles/kernel/geom/geom_triangle.h b/intern/cycles/kernel/geom/geom_triangle.h
index f4e53be..6fffbc7 100644
--- a/intern/cycles/kernel/geom/geom_triangle.h
+++ b/intern/cycles/kernel/geom/geom_triangle.h
@@ -127,10 +127,7 @@ ccl_device_inline float3 triangle_normal(KernelGlobals *kg, ShaderData *sd)
 	float3 v2 = float4_to_float3(kernel_tex_fetch(__tri_verts, __float_as_int(tri_vindex.z)));
 	
 	/* return normal */
-	if(sd->flag & SD_NEGATIVE_SCALE_APPLIED)
-		return normalize(cross(v2 - v0, v1 - v0));
-	else
-		return normalize(cross(v1 - v0, v2 - v0));
+	return normalize(cross(v1 - v0, v2 - v0));
 }
 
 /* point and normal on triangle  */
diff --git a/intern/cycles/kernel/kernel_types.h b/intern/cycles/kernel/kernel_types.h
index cfd72e1..164df41 100644
--- a/intern/cycles/kernel/kernel_types.h
+++ b/intern/cycles/kernel/kernel_types.h
@@ -593,7 +593,6 @@ enum ShaderDataFlag {
 	SD_HOLDOUT_MASK = 524288,			/* holdout for camera rays */
 	SD_OBJECT_MOTION = 1048576,			/* has object motion blur */
 	SD_TRANSFORM_APPLIED = 2097152,		/* vertices have transform applied */
-	SD_NEGATIVE_SCALE_APPLIED = 4194304,	/* vertices have negative scale applied */
 
 	SD_OBJECT_FLAGS = (SD_HOLDOUT_MASK|SD_OBJECT_MOTION|SD_TRANSFORM_APPLIED)
 };
diff --git a/intern/cycles/render/mesh.cpp b/intern/cycles/render/mesh.cpp
index 2734430..295c934 100644
--- a/intern/cycles/render/mesh.cpp
+++ b/intern/cycles/render/mesh.cpp
@@ -341,6 +341,13 @@ void Mesh::add_vertex_normals()
 				vN[i] = -vN[i];
 		}
 	}
+	else if(flip) {
+		Attribute *attr_vN = attributes.find(ATTR_STD_VERTEX_NORMAL);
+		float3 *vN = attr_vN->data_float3();
+		for(size_t i = 0; i < verts_size; i++) {
+			vN[i] = -vN[i];
+		}
+	}
 
 	/* motion vertex normals */
 	Attribute *attr_mP = attributes.find(ATTR_STD_MOTION_VERTEX_POSITION);
@@ -375,6 +382,14 @@ void Mesh::add_vertex_normals()
 			}
 		}
 	}
+	else if(has_motion_blur() && attr_mN && flip) {
+		for(int step = 0; step < motion_steps - 1; step++) {
+			float3 *mN = attr_mN->data_float3() + step*verts.size();
+			for(size_t i = 0; i < verts_size; i++) {
+				mN[i] = -mN[i];
+			}
+		}
+	}
 }
 
 void Mesh::pack_normals(Scene *scene, float *tri_shader, float4 *vnormal)
diff --git a/intern/cycles/render/object.cpp b/intern/cycles/render/object.cpp
index 1f148d3..027bfd7 100644
--- a/intern/cycles/render/object.cpp
+++ b/intern/cycles/render/object.cpp
@@ -449,8 +449,6 @@ void ObjectManager::apply_static_transforms(DeviceScene *dscene, Scene *scene, u
 				}
 
 				object_flag[i] |= SD_TRANSFORM_APPLIED;
-				if(object->mesh->transform_negative_scaled)
-					object_flag[i] |= SD_NEGATIVE_SCALE_APPLIED;
 			}
 			else
 				have_instancing = true;




More information about the Bf-blender-cvs mailing list