[Bf-blender-cvs] [7faeed5] temp-cycles-microdisplacement: Split vertex normals on ngons
Mai Lavelle
noreply at git.blender.org
Fri Jun 24 19:26:47 CEST 2016
Commit: 7faeed57c30d8dd4387972bd9b7488f72f30f4f3
Author: Mai Lavelle
Date: Thu Jun 23 05:47:49 2016 -0400
Branches: temp-cycles-microdisplacement
https://developer.blender.org/rB7faeed57c30d8dd4387972bd9b7488f72f30f4f3
Split vertex normals on ngons
===================================================================
M intern/cycles/blender/blender_mesh.cpp
M intern/cycles/render/mesh.cpp
===================================================================
diff --git a/intern/cycles/blender/blender_mesh.cpp b/intern/cycles/blender/blender_mesh.cpp
index 455668a..cc55b62 100644
--- a/intern/cycles/blender/blender_mesh.cpp
+++ b/intern/cycles/blender/blender_mesh.cpp
@@ -717,9 +717,24 @@ static void create_mesh(Scene *scene,
vi.reserve(n);
for(int i = 0; i < n; i++) {
vi[i] = b_mesh.loops[p->loop_start() + i].vertex_index();
- }
- /* TODO(mai): split vertices if normal is different */
+ /* split vertices if normal is different
+ *
+ * note all vertex attributes must have been set here so we can split
+ * and copy attributes in split_vertex without remapping later */
+ if(use_loop_normals) {
+ float3 loop_N = get_float3(b_mesh.loops[p->loop_start() + i].normal());
+
+ if(N[vi[i]] != loop_N) {
+ int new_vi = mesh->split_vertex(vi[i]);
+
+ /* set new normal and vertex index */
+ N = attr_N->data_float3();
+ N[new_vi] = loop_N;
+ vi[i] = new_vi;
+ }
+ }
+ }
/* create subd faces */
mesh->add_subd_face(&vi[0], n, shader, smooth);
diff --git a/intern/cycles/render/mesh.cpp b/intern/cycles/render/mesh.cpp
index f8e4993..18e3fac 100644
--- a/intern/cycles/render/mesh.cpp
+++ b/intern/cycles/render/mesh.cpp
@@ -267,6 +267,14 @@ int Mesh::split_vertex(int vertex)
}
}
+ foreach(Attribute& attr, subd_attributes.attributes) {
+ if(attr.element == ATTR_ELEMENT_VERTEX) {
+ vector<char> tmp(attr.data_sizeof());
+ memcpy(&tmp[0], attr.data() + tmp.size()*vertex, tmp.size());
+ attr.add(&tmp[0]);
+ }
+ }
+
return verts.size() - 1;
}
More information about the Bf-blender-cvs
mailing list