Commit: b9ea6fbb301f264110b5b0ab0ace021079434e69 Author: Campbell Barton Date: Wed Apr 15 20:52:51 2015 +1000 Branches: master https://developer.blender.org/rBb9ea6fbb301f264110b5b0ab0ace021079434e69
BMesh: dyntopo used lopsided normals Normals from subdivided edges were only taken from the edges first vertex. Interpolate between the two to give more even results. =================================================================== M source/blender/blenkernel/intern/pbvh_bmesh.c =================================================================== diff --git a/source/blender/blenkernel/intern/pbvh_bmesh.c b/source/blender/blenkernel/intern/pbvh_bmesh.c index 630f3ab..ce405e8 100644 --- a/source/blender/blenkernel/intern/pbvh_bmesh.c +++ b/source/blender/blenkernel/intern/pbvh_bmesh.c @@ -330,8 +330,7 @@ static PBVHNode *pbvh_bmesh_node_lookup(PBVH *bvh, void *key) static BMVert *pbvh_bmesh_vert_create( PBVH *bvh, int node_index, - const float co[3], - const BMVert *example, + const float co[3], const float no[3], const int cd_vert_mask_offset) { PBVHNode *node = &bvh->nodes[node_index]; @@ -340,9 +339,12 @@ static BMVert *pbvh_bmesh_vert_create( BLI_assert((bvh->totnode == 1 || node_index) && node_index <= bvh->totnode); /* avoid initializing customdata because its quite involved */ - v = BM_vert_create(bvh->bm, co, example, BM_CREATE_SKIP_CD); + v = BM_vert_create(bvh->bm, co, NULL, BM_CREATE_SKIP_CD); CustomData_bmesh_set_default(&bvh->bm->vdata, &v->head.data); + /* This value is logged below */ + copy_v3_v3(v->no, no); + BLI_gset_insert(node->bm_unique_verts, v); BM_ELEM_CD_SET_INT(v, bvh->cd_vert_node_offset, node_index); @@ -879,17 +881,19 @@ static void pbvh_bmesh_split_edge(EdgeQueueContext *eq_ctx, PBVH *bvh, BMEdge *e, BLI_Buffer *edge_loops) { BMVert *v_new; - float mid[3]; + float co_mid[3], no_mid[3]; int i, node_index; /* Get all faces adjacent to the edge */ pbvh_bmesh_edge_loops(edge_loops, e); /* Create a new vertex in current node at the edge's midpoint */ - mid_v3_v3v3(mid, e->v1->co, e->v2->co); + mid_v3_v3v3(co_mid, e->v1->co, e->v2->co); + mid_v3_v3v3(no_mid, e->v1->no, e->v2->no); + normalize_v3(no_mid); node_index = BM_ELEM_CD_GET_INT(e->v1, eq_ctx->cd_vert_node_offset); - v_new = pbvh_bmesh_vert_create(bvh, node_index, mid, e->v1, eq_ctx->cd_vert_mask_offset); + v_new = pbvh_bmesh_vert_create(bvh, node_index, co_mid, no_mid, eq_ctx->cd_vert_mask_offset); /* update paint mask */ if (eq_ctx->cd_vert_mask_offset != -1) { _______________________________________________ Bf-blender-cvs mailing list Bf-blender-cvs@blender.org http://lists.blender.org/mailman/listinfo/bf-blender-cvs