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
diff options
context:
space:
mode:
authorSergey Sharybin <sergey.vfx@gmail.com>2014-07-23 15:59:37 +0400
committerSergey Sharybin <sergey.vfx@gmail.com>2014-07-23 16:01:35 +0400
commiteb8f85d8be8a14cbb8e97ba3b91c02cfd0ebbe42 (patch)
treebd197e4fcaeeb00e13ac69426f77cc8907039beb /intern/cycles/render
parent82f16f81fd0e70872b759caa501a116f815bb3f6 (diff)
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.
Diffstat (limited to 'intern/cycles/render')
-rw-r--r--intern/cycles/render/mesh.cpp15
-rw-r--r--intern/cycles/render/object.cpp2
2 files changed, 15 insertions, 2 deletions
diff --git a/intern/cycles/render/mesh.cpp b/intern/cycles/render/mesh.cpp
index 273443034c5..295c934537a 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 1f148d34ea6..027bfd71931 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;