[Bf-blender-cvs] [8b719fee193] sculpt-dev: Sculpt-dev: Dyntopo Tweaks
Joseph Eagar
noreply at git.blender.org
Sat Mar 12 21:23:08 CET 2022
Commit: 8b719fee19335a6300658704677eea217c37cfa7
Author: Joseph Eagar
Date: Sat Mar 12 12:21:17 2022 -0800
Branches: sculpt-dev
https://developer.blender.org/rB8b719fee19335a6300658704677eea217c37cfa7
Sculpt-dev: Dyntopo Tweaks
* Increased substep count.
* Snake hook now runs dyntopo twice by
inserting it into its commandlist twice,
instead of running over the same nodes and
re-executing it.
===================================================================
M source/blender/blenkernel/intern/brush_engine.c
M source/blender/blenkernel/intern/dyntopo.c
M source/blender/blenkernel/intern/pbvh_bmesh.c
M source/blender/draw/engines/workbench/workbench_engine.c
===================================================================
diff --git a/source/blender/blenkernel/intern/brush_engine.c b/source/blender/blenkernel/intern/brush_engine.c
index 368534d9700..bd83b136cfb 100644
--- a/source/blender/blenkernel/intern/brush_engine.c
+++ b/source/blender/blenkernel/intern/brush_engine.c
@@ -1196,8 +1196,8 @@ void BKE_brush_channel_apply_mapping_flags(BrushChannel *dst,
{
for (int i = 0; i < BRUSH_MAPPING_MAX; i++) {
BrushMapping *mp = dst->mappings + i;
- BrushMapping *cmp = child ? child->mappings + i : NULL;
- BrushMapping *pmp = parent ? parent->mappings + i : NULL;
+ const BrushMapping *cmp = child ? child->mappings + i : NULL;
+ const BrushMapping *pmp = parent ? parent->mappings + i : NULL;
if (!cmp) {
if (pmp) {
@@ -1290,9 +1290,9 @@ void BKE_brush_channelset_set_final_int(BrushChannelSet *child,
}
float old_BKE_brush_channelset_get_final_float(BrushChannelSet *child,
- BrushChannelSet *parent,
- const char *idname,
- BrushMappingData *mapdata)
+ BrushChannelSet *parent,
+ const char *idname,
+ BrushMappingData *mapdata)
{
BrushChannel *parentch, *childch;
BrushChannel *ch = brush_channel_final(child, parent, idname, &childch, &parentch);
@@ -1389,10 +1389,10 @@ int BKE_brush_channel_get_vector(BrushChannel *ch, float out[4], BrushMappingDat
}
int old_BKE_brush_channelset_get_final_vector(BrushChannelSet *child,
- BrushChannelSet *parent,
- const char *idname,
- float r_vec[4],
- BrushMappingData *mapdata)
+ BrushChannelSet *parent,
+ const char *idname,
+ float r_vec[4],
+ BrushMappingData *mapdata)
{
BrushChannel *parentch, *childch;
BrushChannel *ch = brush_channel_final(child, parent, idname, &childch, &parentch);
@@ -1851,8 +1851,15 @@ void BKE_builtin_commandlist_create(Brush *brush,
float radius = BKE_brush_channelset_get_float(chset, "radius", NULL);
- /* build dyntopo command */
- commandlist_add_dyntopo(chset, cl, brush, tool, hard_edge_mode, radius);
+ /* Build dyntopo command. */
+ if (tool == SCULPT_TOOL_SNAKE_HOOK) {
+ /* Add twice for snake hook. */
+ commandlist_add_dyntopo(chset, cl, brush, tool, hard_edge_mode, radius*1.25);
+ commandlist_add_dyntopo(chset, cl, brush, tool, hard_edge_mode, radius * 1.25);
+ }
+ else {
+ commandlist_add_dyntopo(chset, cl, brush, tool, hard_edge_mode, radius);
+ }
/* build main brush command */
cmd = BKE_brush_commandlist_add(cl, chset, true);
diff --git a/source/blender/blenkernel/intern/dyntopo.c b/source/blender/blenkernel/intern/dyntopo.c
index d364a880d63..aea7846185b 100644
--- a/source/blender/blenkernel/intern/dyntopo.c
+++ b/source/blender/blenkernel/intern/dyntopo.c
@@ -4517,14 +4517,14 @@ ATTR_NO_OPT bool BKE_pbvh_bmesh_update_topology(PBVH *pbvh,
int steps[2] = {0, 0};
if ((mode & PBVH_Subdivide) && (mode & PBVH_Collapse)) {
- steps[0] = 1024;
- steps[1] = 128;
+ steps[0] = 4096;
+ steps[1] = 1024;
}
else if (mode & PBVH_Subdivide) {
- steps[0] = 2048;
+ steps[0] = 4096;
}
else if (mode & PBVH_Collapse) {
- steps[0] = 2048;
+ steps[0] = 4096;
}
int edges_size = steps[0];
@@ -4608,7 +4608,7 @@ ATTR_NO_OPT bool BKE_pbvh_bmesh_update_topology(PBVH *pbvh,
} while ((l = l->radial_next) != e->l);
}
- //edges[etot++] = e;
+ // edges[etot++] = e;
break;
}
case PBVH_Collapse: {
diff --git a/source/blender/blenkernel/intern/pbvh_bmesh.c b/source/blender/blenkernel/intern/pbvh_bmesh.c
index 7e9eac99910..a02d5678263 100644
--- a/source/blender/blenkernel/intern/pbvh_bmesh.c
+++ b/source/blender/blenkernel/intern/pbvh_bmesh.c
@@ -2572,11 +2572,6 @@ ATTR_NO_OPT bool BKE_pbvh_bmesh_update_topology_nodes(PBVH *pbvh,
bool modified = false;
PBVHNode **nodes = NULL;
BLI_array_declare(nodes);
- int steps = is_snake_hook ? 1 : 1;
-
- if (is_snake_hook) {
- //radius *= 1.25;
- }
for (int i = 0; i < pbvh->totnode; i++) {
PBVHNode *node = pbvh->nodes + i;
@@ -2592,34 +2587,26 @@ ATTR_NO_OPT bool BKE_pbvh_bmesh_update_topology_nodes(PBVH *pbvh,
}
}
- for (int i = 0; i < steps; i++) {
- for (int j = 0; j < BLI_array_len(nodes); j++) {
- nodes[j]->flag |= PBVH_UpdateCurvatureDir;
- BKE_pbvh_node_mark_topology_update(nodes[j]);
- }
-
- bool modified2 = BKE_pbvh_bmesh_update_topology(pbvh,
- mode,
- center,
- view_normal,
- radius,
- use_frontface,
- use_projected,
- sym_axis,
- updatePBVH && i == steps - 1,
- mask_cb,
- mask_cb_data,
- is_snake_hook ? 40960 : 0,
- disable_surface_relax,
- is_snake_hook);
-
- if (!modified2) {
- break;
- }
-
- modified = true;
+ for (int j = 0; j < BLI_array_len(nodes); j++) {
+ nodes[j]->flag |= PBVH_UpdateCurvatureDir;
+ BKE_pbvh_node_mark_topology_update(nodes[j]);
}
+ modified = BKE_pbvh_bmesh_update_topology(pbvh,
+ mode,
+ center,
+ view_normal,
+ radius,
+ use_frontface,
+ use_projected,
+ sym_axis,
+ updatePBVH,
+ mask_cb,
+ mask_cb_data,
+ 0, //is_snake_hook ? 40960 : 0,
+ disable_surface_relax,
+ is_snake_hook);
+
BLI_array_free(nodes);
return modified;
diff --git a/source/blender/draw/engines/workbench/workbench_engine.c b/source/blender/draw/engines/workbench/workbench_engine.c
index 62580247d38..347359cea50 100644
--- a/source/blender/draw/engines/workbench/workbench_engine.c
+++ b/source/blender/draw/engines/workbench/workbench_engine.c
@@ -96,7 +96,7 @@ static void workbench_cache_sculpt_populate(WORKBENCH_PrivateData *wpd,
color_type, V3D_SHADING_MATERIAL_COLOR, V3D_SHADING_TEXTURE_COLOR);
if (use_single_drawcall) {
- DRWShadingGroup *grp = workbench_material_setup(wpd, ob, 0, color_type, NULL);
+ DRWShadingGroup *grp = workbench_material_setup(wpd, ob, ob->actcol, color_type, NULL);
DRW_shgroup_call_sculpt(grp, ob, false, false);
}
else {
@@ -254,7 +254,6 @@ static eV3DShadingColorType workbench_color_type_get(WORKBENCH_PrivateData *wpd,
eV3DShadingColorType color_type = wpd->shading.color_type;
const Mesh *me = (ob->type == OB_MESH) ? ob->data : NULL;
const CustomData *ldata = (me == NULL) ? NULL : workbench_mesh_get_loop_custom_data(me);
- const CustomData *vdata = (me == NULL) ? NULL : workbench_mesh_get_vert_custom_data(me);
const DRWContextState *draw_ctx = DRW_context_state_get();
const bool is_active = (ob == draw_ctx->obact);
More information about the Bf-blender-cvs
mailing list