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:
-rw-r--r--intern/cycles/kernel/geom/geom_triangle.h5
-rw-r--r--intern/cycles/kernel/kernel_types.h1
-rw-r--r--intern/cycles/render/mesh.cpp15
-rw-r--r--intern/cycles/render/object.cpp2
4 files changed, 16 insertions, 7 deletions
diff --git a/intern/cycles/kernel/geom/geom_triangle.h b/intern/cycles/kernel/geom/geom_triangle.h
index f4e53be5429..6fffbc7f782 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 cfd72e1476b..164df41fc09 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 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;