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.
This commit is contained in:
@@ -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)
|
||||
|
Reference in New Issue
Block a user