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:
authorBrecht Van Lommel <brechtvanlommel@pandora.be>2011-11-12 18:29:52 +0400
committerBrecht Van Lommel <brechtvanlommel@pandora.be>2011-11-12 18:29:52 +0400
commitfc42a6185ddeb6a24ec92287dfa7b89beb059716 (patch)
treecdd34b01d77f6c104ed38c30719426c11c01a96e /intern/cycles/render/mesh.cpp
parent817b6cb9a8990483a2bfce7a11e690c829e75ddc (diff)
Cycles:
* Fix object scaling update issue with interactive rendering + static BVH. * Fix negative scaling issue with static BVH. * Fix #29217: excessive fireflies in first sample.
Diffstat (limited to 'intern/cycles/render/mesh.cpp')
-rw-r--r--intern/cycles/render/mesh.cpp14
1 files changed, 13 insertions, 1 deletions
diff --git a/intern/cycles/render/mesh.cpp b/intern/cycles/render/mesh.cpp
index 2fef54605a1..19992771c1d 100644
--- a/intern/cycles/render/mesh.cpp
+++ b/intern/cycles/render/mesh.cpp
@@ -42,6 +42,7 @@ Mesh::Mesh()
{
need_update = true;
transform_applied = false;
+ transform_negative_scaled = false;
displacement_method = DISPLACE_BUMP;
bvh = NULL;
@@ -75,6 +76,9 @@ void Mesh::clear()
attributes.clear();
used_shaders.clear();
+
+ transform_applied = false;
+ transform_negative_scaled = false;
}
void Mesh::add_triangle(int v0, int v1, int v2, int shader_, bool smooth_)
@@ -116,6 +120,7 @@ void Mesh::add_face_normals()
/* compute face normals */
size_t triangles_size = triangles.size();
+ bool flip = transform_negative_scaled;
if(triangles_size) {
float3 *verts_ptr = &verts[0];
@@ -128,6 +133,9 @@ void Mesh::add_face_normals()
float3 v2 = verts_ptr[t.v[2]];
fN[i] = normalize(cross(v1 - v0, v2 - v0));
+
+ if(flip)
+ fN[i] = -fN[i];
}
}
}
@@ -150,6 +158,7 @@ void Mesh::add_vertex_normals()
size_t verts_size = verts.size();
size_t triangles_size = triangles.size();
+ bool flip = transform_negative_scaled;
if(triangles_size) {
Triangle *triangles_ptr = &triangles[0];
@@ -159,8 +168,11 @@ void Mesh::add_vertex_normals()
vN[triangles_ptr[i].v[j]] += fN[i];
}
- for(size_t i = 0; i < verts_size; i++)
+ for(size_t i = 0; i < verts_size; i++) {
vN[i] = normalize(vN[i]);
+ if(flip)
+ vN[i] = -vN[i];
+ }
}
void Mesh::pack_normals(Scene *scene, float4 *normal, float4 *vnormal)