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:
Diffstat (limited to 'source/blender/modifiers')
-rw-r--r--source/blender/modifiers/intern/MOD_bevel.c51
-rw-r--r--source/blender/modifiers/intern/MOD_weighted_normal.c6
2 files changed, 37 insertions, 20 deletions
diff --git a/source/blender/modifiers/intern/MOD_bevel.c b/source/blender/modifiers/intern/MOD_bevel.c
index 152fee9eb77..f1dc73436ee 100644
--- a/source/blender/modifiers/intern/MOD_bevel.c
+++ b/source/blender/modifiers/intern/MOD_bevel.c
@@ -110,7 +110,9 @@ static void bevel_set_weighted_normal_face_strength(BMesh *bm, Scene *scene)
}
}
-static void bevel_mod_harden_normals(BevelModifierData *bmd, BMesh *bm, const float hn_strength, const int hnmode, MDeformVert *dvert, int vgroup)
+static void bevel_mod_harden_normals(
+ BevelModifierData *bmd, BMesh *bm, const float hn_strength,
+ const int hnmode, MDeformVert *dvert, int vgroup)
{
if (bmd->res > 20 || bmd->value == 0)
return;
@@ -128,13 +130,16 @@ static void bevel_mod_harden_normals(BevelModifierData *bmd, BMesh *bm, const fl
BMIter fiter;
GHash *faceHash = bmd->clnordata.faceHash;
+ /* Iterate throught all loops of a face */
BM_ITER_MESH(f, &fiter, bm, BM_FACES_OF_MESH) {
l_cur = l_first = BM_FACE_FIRST_LOOP(f);
do {
- if ((!BM_elem_flag_test(l_cur->e, BM_ELEM_TAG) || (!BM_elem_flag_test(l_cur, BM_ELEM_TAG) &&
- BM_loop_check_cyclic_smooth_fan(l_cur)))) {
+ if ((!BM_elem_flag_test(l_cur->e, BM_ELEM_TAG)) ||
+ (!BM_elem_flag_test(l_cur, BM_ELEM_TAG) && BM_loop_check_cyclic_smooth_fan(l_cur)))
+ {
+ /* previous and next edge is sharp, accumulate face normals into loop */
if (!BM_elem_flag_test(l_cur->e, BM_ELEM_TAG) && !BM_elem_flag_test(l_cur->prev->e, BM_ELEM_TAG)) {
const int loop_index = BM_elem_index_get(l_cur);
short *clnors = BM_ELEM_CD_GET_VOID_P(l_cur, cd_clnors_offset);
@@ -151,8 +156,8 @@ static void bevel_mod_harden_normals(BevelModifierData *bmd, BMesh *bm, const fl
e_next = lfan_pivot->e;
BLI_SMALLSTACK_DECLARE(loops, BMLoop *);
float cn_wght[3] = { 0.0f, 0.0f, 0.0f };
- int recon_face_count = 0; /* Reconstructed face */
- BMFace *recon_face = NULL;
+ int recon_face_count = 0; /* Counts number of reconstructed faces current vert is connected to */
+ BMFace *recon_face = NULL; /* Reconstructed face */
while (true) {
lfan_pivot_next = BM_vert_step_fan_loop(lfan_pivot, &e_next);
@@ -169,12 +174,12 @@ static void bevel_mod_harden_normals(BevelModifierData *bmd, BMesh *bm, const fl
int weight = BM_elem_float_data_get(&bm->edata, lfan_pivot->f, CD_BWEIGHT);
if (weight) {
if (hnmode == MOD_BEVEL_HN_FACE) {
- float cur[3];
+ float cur[3]; //Add area weighted face normals
mul_v3_v3fl(cur, lfan_pivot->f->no, BM_face_calc_area(lfan_pivot->f));
add_v3_v3(cn_wght, cur);
}
else
- add_v3_v3(cn_wght, lfan_pivot->f->no);
+ add_v3_v3(cn_wght, lfan_pivot->f->no); //Else simply add face normals
}
else
add_v3_v3(cn_wght, lfan_pivot->f->no);
@@ -182,7 +187,9 @@ static void bevel_mod_harden_normals(BevelModifierData *bmd, BMesh *bm, const fl
}
else if (bmd->lim_flags & MOD_BEVEL_VGROUP) {
const bool has_vgroup = dvert != NULL;
- const bool vert_of_group = has_vgroup && defvert_find_index(&dvert[BM_elem_index_get(l->v)], vgroup) != NULL;
+ const bool vert_of_group = has_vgroup &&
+ (defvert_find_index(&dvert[BM_elem_index_get(l->v)], vgroup) != NULL);
+
if (vert_of_group && hnmode == MOD_BEVEL_HN_FACE) {
float cur[3];
mul_v3_v3fl(cur, lfan_pivot->f->no, BM_face_calc_area(lfan_pivot->f));
@@ -214,18 +221,22 @@ static void bevel_mod_harden_normals(BevelModifierData *bmd, BMesh *bm, const fl
const int l_index = BM_elem_index_get(l);
short *clnors = BM_ELEM_CD_GET_VOID_P(l, cd_clnors_offset);
+ /* If vertex is edge vert with 1 reconnected face */
if (recon_face_count == 1 || do_normal_to_recon) {
- BKE_lnor_space_custom_normal_to_data(bm->lnor_spacearr->lspacearr[l_index], recon_face->no, clnors);
+ BKE_lnor_space_custom_normal_to_data(bm->lnor_spacearr->lspacearr[l_index], recon_face->no,
+ clnors);
}
else if (vertex_only == false || recon_face_count == 0) {
copy_v3_v3(n_final, l->f->no);
mul_v3_fl(n_final, 1.0f - hn_strength);
add_v3_v3(n_final, cn_wght);
normalize_v3(n_final);
- BKE_lnor_space_custom_normal_to_data(bm->lnor_spacearr->lspacearr[l_index], n_final, clnors);
+ BKE_lnor_space_custom_normal_to_data(bm->lnor_spacearr->lspacearr[l_index], n_final,
+ clnors);
}
- else if(BLI_ghash_haskey(faceHash, l->f))
- BKE_lnor_space_custom_normal_to_data(bm->lnor_spacearr->lspacearr[l_index], l->v->no, clnors);
+ else if (BLI_ghash_haskey(faceHash, l->f))
+ BKE_lnor_space_custom_normal_to_data(bm->lnor_spacearr->lspacearr[l_index], l->v->no,
+ clnors);
}
}
}
@@ -261,6 +272,8 @@ static void bevel_fix_normal_shading_continuity(BevelModifierData *bmd, BMesh *b
if (f_b)
has_f_b = BLI_ghash_haskey(faceHash, f_b);
if (has_f_a ^ has_f_b) {
+ /* If one of both faces is present in faceHash then we are at a border
+ * between new vmesh created and reconstructed face */
for (int i = 0; i < 2; i++) {
BMVert *v = (i == 0) ? e->v1 : e->v2;
@@ -291,12 +304,14 @@ static void bevel_fix_normal_shading_continuity(BevelModifierData *bmd, BMesh *b
}
}
}
- else if(has_f_a == true && has_f_b == true) {
+ else if (has_f_a == true && has_f_b == true) {
+ /* Else if both faces are present we assign clnor corresponding
+ * to vert normal and face normal */
for (int i = 0; i < 2; i++) {
BMVert *v = (i == 0) ? e->v1 : e->v2;
BM_ITER_ELEM(l, &liter, v, BM_LOOPS_OF_VERT) {
- if(l->f == f_a || l->f == f_b) {
+ if (l->f == f_a || l->f == f_b) {
const int l_index = BM_elem_index_get(l);
short *clnors = BM_ELEM_CD_GET_VOID_P(l, cd_clnors_offset);
float n_final[3], cn_wght[3];
@@ -417,9 +432,9 @@ static Mesh *applyModifier(ModifierData *md, const ModifierEvalContext *ctx, Mes
if (bmd->hnmode != BEVEL_HN_FIX_SHA && bmd->hnmode != MOD_BEVEL_HN_NONE) {
bevel_mod_harden_normals(bmd, bm, bmd->hn_strength, bmd->hnmode, dvert, vgroup);
}
- if(bmd->hnmode == BEVEL_HN_FIX_SHA)
+ if (bmd->hnmode == BEVEL_HN_FIX_SHA)
bevel_fix_normal_shading_continuity(bmd, bm);
- if(set_wn_strength)
+ if (set_wn_strength)
bevel_set_weighted_normal_face_strength(bm, scene);
result = BKE_bmesh_to_mesh_nomain(bm, &(struct BMeshToMeshParams){0});
@@ -429,7 +444,7 @@ static Mesh *applyModifier(ModifierData *md, const ModifierEvalContext *ctx, Mes
bm->ftoolflagpool == NULL); /* make sure we never alloc'd these */
BM_mesh_free(bm);
- if(bmd->clnordata.faceHash)
+ if (bmd->clnordata.faceHash)
BLI_ghash_free(bmd->clnordata.faceHash, NULL, NULL);
result->runtime.cd_dirty_vert |= CD_MASK_NORMAL;
@@ -450,7 +465,7 @@ ModifierTypeInfo modifierType_Bevel = {
/* flags */ eModifierTypeFlag_AcceptsMesh |
eModifierTypeFlag_SupportsEditmode |
eModifierTypeFlag_EnableInEditmode |
- eModifierTypeFlag_AcceptsCVs,
+ eModifierTypeFlag_AcceptsCVs,
/* copyData */ modifier_copyData_generic,
diff --git a/source/blender/modifiers/intern/MOD_weighted_normal.c b/source/blender/modifiers/intern/MOD_weighted_normal.c
index a2ace1aadc4..3e788db9c00 100644
--- a/source/blender/modifiers/intern/MOD_weighted_normal.c
+++ b/source/blender/modifiers/intern/MOD_weighted_normal.c
@@ -217,7 +217,8 @@ static void apply_weights_vertex_normal(WeightedNormalModifierData *wnmd, Weight
num_items = lnors_spacearr.num_spaces;
items_data = MEM_calloc_arrayN((size_t)num_items, sizeof(*items_data), __func__);
- /* In this first loop, we assign each WeightedNormalDataAggregateItem to its smooth fan of loops (aka lnor space). */
+ /* In this first loop, we assign each WeightedNormalDataAggregateItem
+ * to its smooth fan of loops (aka lnor space). */
MPoly *mp;
int mp_index;
int item_index;
@@ -572,7 +573,8 @@ static Mesh *applyModifier(ModifierData *md, const ModifierEvalContext *ctx, Mes
.mpoly = mpoly,
.polynors = polynors,
- .poly_strength = CustomData_get_layer_named(&result->pdata, CD_PROP_INT, MOD_WEIGHTEDNORMALS_FACEWEIGHT_CDLAYER_ID),
+ .poly_strength = CustomData_get_layer_named(&result->pdata, CD_PROP_INT,
+ MOD_WEIGHTEDNORMALS_FACEWEIGHT_CDLAYER_ID),
.dvert = dvert,
.defgrp_index = defgrp_index,