[Bf-blender-cvs] [c63d6e3698f] temp-sculpt-normals-masking: Merge branch 'master' into temp-sculpt-normals-masking
Joseph Eagar
noreply at git.blender.org
Thu Sep 29 02:19:39 CEST 2022
Commit: c63d6e3698f89e310db91f72e3920a8be18e451c
Author: Joseph Eagar
Date: Wed Sep 28 17:19:29 2022 -0700
Branches: temp-sculpt-normals-masking
https://developer.blender.org/rBc63d6e3698f89e310db91f72e3920a8be18e451c
Merge branch 'master' into temp-sculpt-normals-masking
===================================================================
===================================================================
diff --cc release/scripts/startup/bl_ui/properties_paint_common.py
index 34e93966b19,a4a328fce1a..72a87703bd5
--- a/release/scripts/startup/bl_ui/properties_paint_common.py
+++ b/release/scripts/startup/bl_ui/properties_paint_common.py
@@@ -943,26 -943,22 +943,39 @@@ def brush_settings_advanced(layout, con
# boundary edges/face sets automasking
col.prop(brush, "use_automasking_boundary_edges", text="Mesh Boundary")
col.prop(brush, "use_automasking_boundary_face_sets", text="Face Sets Boundary")
- col.prop(brush, "automasking_boundary_edges_propagation_steps")
-
+ col.prop(brush, "use_automasking_cavity", text="Cavity")
+ col.prop(brush, "use_automasking_cavity_inverted", text="Cavity (Inverted)")
+ col.prop(brush, "use_automasking_start_normal", text="Area Normal")
+ col.prop(brush, "use_automasking_view_normal", text="View Normal")
+ col.separator()
+ col.prop(brush, "automasking_boundary_edges_propagation_steps")
+
+ sculpt = context.tool_settings.sculpt
+
+ if brush.use_automasking_start_normal:
+ col.separator()
+
+ col.prop(sculpt, "automasking_start_normal_limit")
+ col.prop(sculpt, "automasking_start_normal_falloff")
+
+ if brush.use_automasking_view_normal:
+ col.separator()
+
+ col.prop(brush, "use_automasking_view_occlusion", text="Occlusion")
+ col.prop(sculpt, "automasking_view_normal_limit")
+ col.prop(sculpt, "automasking_view_normal_falloff")
+
+ if brush.use_automasking_cavity or brush.use_automasking_cavity_inverted:
+ col.separator()
+
+ col.prop(brush, "automasking_cavity_factor", text="Cavity Factor")
+ col.prop(brush, "automasking_cavity_blur_steps", text="Cavity Blur")
+ col.prop(brush, "use_automasking_custom_cavity_curve", text="Use Curve")
+
+ if brush.use_automasking_custom_cavity_curve:
+ col.template_curve_mapping(brush, "automasking_cavity_curve")
+
layout.separator()
# sculpt plane settings
diff --cc release/scripts/startup/bl_ui/space_view3d.py
index 7518e7171a8,fcf00ee80f6..ada2993a16f
--- a/release/scripts/startup/bl_ui/space_view3d.py
+++ b/release/scripts/startup/bl_ui/space_view3d.py
@@@ -5493,8 -5495,8 +5495,10 @@@ class VIEW3D_MT_sculpt_automasking_pie(
pie.prop(sculpt, "use_automasking_face_sets", text="Face Sets")
pie.prop(sculpt, "use_automasking_boundary_edges", text="Mesh Boundary")
pie.prop(sculpt, "use_automasking_boundary_face_sets", text="Face Sets Boundary")
+ pie.prop(sculpt, "use_automasking_cavity", text="Cavity")
+ pie.prop(sculpt, "use_automasking_cavity_inverted", text="Cavity (Inverted)")
+ pie.prop(sculpt, "use_automasking_start_normal", text="Area Normal")
+ pie.prop(sculpt, "use_automasking_view_normal", text="View Normal")
class VIEW3D_MT_sculpt_face_sets_edit_pie(Menu):
diff --cc release/scripts/startup/bl_ui/space_view3d_toolbar.py
index 74017b2e1be,153bce78ec2..f0c2bca96a9
--- a/release/scripts/startup/bl_ui/space_view3d_toolbar.py
+++ b/release/scripts/startup/bl_ui/space_view3d_toolbar.py
@@@ -971,22 -971,29 +971,44 @@@ class VIEW3D_PT_sculpt_options(Panel, V
col.prop(sculpt, "use_automasking_face_sets", text="Face Sets")
col.prop(sculpt, "use_automasking_boundary_edges", text="Mesh Boundary")
col.prop(sculpt, "use_automasking_boundary_face_sets", text="Face Sets Boundary")
+ col.prop(sculpt, "use_automasking_cavity", text="Cavity")
+ col.prop(sculpt, "use_automasking_cavity_inverted", text="Cavity (Inverted)")
+ col.prop(sculpt, "use_automasking_start_normal", text="Area Normal")
+ col.prop(sculpt, "use_automasking_view_normal", text="View Normal")
+
+ if sculpt.use_automasking_start_normal:
+ col.separator()
+
+ col.prop(sculpt, "automasking_start_normal_limit")
+ col.prop(sculpt, "automasking_start_normal_falloff")
+
+ if sculpt.use_automasking_view_normal:
+ col.separator()
+
+ col.prop(sculpt, "use_automasking_view_occlusion", text="Occlusion")
+ col.prop(sculpt, "automasking_view_normal_limit")
+ col.prop(sculpt, "automasking_view_normal_falloff")
+ col.separator()
+ col.prop(sculpt.brush, "automasking_boundary_edges_propagation_steps")
+
+ if sculpt.use_automasking_cavity or sculpt.use_automasking_cavity_inverted:
+ col.separator()
+
+ col2 = col.column()
+ props = col2.operator("sculpt.mask_from_cavity", text="Mask From Cavity")
+ props.use_automask_settings = True
+
+ col2 = col.column()
+
+ col2.prop(sculpt, "automasking_cavity_factor", text="Cavity Factor")
+ col2.prop(sculpt, "automasking_cavity_blur_steps", text="Cavity Blur")
+
+ col2.prop(sculpt, "use_automasking_custom_cavity_curve", text="Use Curve")
+
+ if sculpt.use_automasking_custom_cavity_curve:
+ col2.template_curve_mapping(sculpt, "automasking_cavity_curve")
+
class VIEW3D_PT_sculpt_options_gravity(Panel, View3DPaintPanel):
bl_context = ".sculpt_mode" # dot on purpose (access from topbar)
diff --cc source/blender/blenkernel/BKE_paint.h
index 66d1a294029,386fecfd278..ed7ef5d5efd
--- a/source/blender/blenkernel/BKE_paint.h
+++ b/source/blender/blenkernel/BKE_paint.h
@@@ -548,13 -554,13 +549,13 @@@ typedef struct SculptAttributePointers
/* Precomputed auto-mask factor indexed by vertex, owned by the auto-masking system and
* initialized in #SCULPT_automasking_cache_init when needed. */
SculptAttribute *automasking_factor;
+ SculptAttribute *automasking_occlusion; /* CD_PROP_INT8. */
++ SculptAttribute *automasking_stroke_id;
++ SculptAttribute *automasking_cavity;
/* BMesh */
SculptAttribute *dyntopo_node_id_vertex;
SculptAttribute *dyntopo_node_id_face;
--
-- SculptAttribute *stroke_id;
- SculptAttribute *cavity;
} SculptAttributePointers;
typedef struct SculptSession {
@@@ -741,13 -747,14 +742,16 @@@
*/
bool sticky_shading_color;
++ uchar stroke_id;
++
/**
* Last used painting canvas key.
*/
char *last_paint_canvas_key;
-
+ float last_normal[3];
- uchar stroke_id;
+
- uchar stroke_id;
+ int last_automasking_settings_hash;
- uchar last_cavity_stroke_id;
++ uchar last_automask_stroke_id;
} SculptSession;
void BKE_sculptsession_free(struct Object *ob);
diff --cc source/blender/editors/sculpt_paint/sculpt.c
index bd3bafd2773,ac77e007081..50e9759f397
--- a/source/blender/editors/sculpt_paint/sculpt.c
+++ b/source/blender/editors/sculpt_paint/sculpt.c
@@@ -3549,6 -3548,11 +3550,11 @@@ static void do_brush_action(Sculpt *sd
SCULPT_bmesh_topology_rake(sd, ob, nodes, totnode, brush->topology_rake_factor);
}
- if (!SCULPT_tool_can_reuse_cavity_mask(brush->sculpt_tool) || (ss->cache->supports_gravity && sd->gravity_factor > 0.0f)) {
++ if (!SCULPT_tool_can_reuse_automask(brush->sculpt_tool) || (ss->cache->supports_gravity && sd->gravity_factor > 0.0f)) {
+ /* Clear cavity mask cache. */
+ ss->last_automasking_settings_hash = 0;
+ }
+
/* The cloth brush adds the gravity as a regular force and it is processed in the solver. */
if (ss->cache->supports_gravity && !ELEM(brush->sculpt_tool,
SCULPT_TOOL_CLOTH,
@@@ -4236,8 -4240,9 +4242,7 @@@ static void sculpt_update_cache_invaria
int mode;
ss->cache = cache;
- ss->stroke_id++;
- cache->stroke_id = ss->stroke_id;
-
/* Set scaling adjustment. */
max_scale = 0.0f;
for (int i = 0; i < 3; i++) {
@@@ -5402,6 -5411,8 +5411,9 @@@ static bool sculpt_stroke_test_start(bC
SCULPT_undo_push_begin_ex(ob, sculpt_tool_name(sd));
}
+ SCULPT_stroke_id_next(ob);
++ ss->cache->stroke_id = ss->stroke_id;
+
return true;
}
return false;
@@@ -6000,79 -6011,23 +6012,90 @@@ void SCULPT_fake_neighbors_free(Object
sculpt_pose_fake_neighbors_free(ss);
}
+void SCULPT_automasking_node_begin(Object *ob,
+ const SculptSession *ss,
+ AutomaskingCache *automasking,
+ AutomaskingNodeData *node_data,
+ PBVHNode *node)
+{
+ if (!automasking) {
+ memset(node_data, 0, sizeof(*node_data));
+ return;
+ }
+
+ node_data->node = node;
+ node_data->have_orig_data = automasking->settings.flags &
+ (BRUSH_AUTOMASKING_BRUSH_NORMAL | BRUSH_AUTOMASKING_VIEW_NORMAL);
+
+ if (node_data->have_orig_data) {
+ SCULPT_orig_vert_data_init(&node_data->orig_data, ob, node, SCULPT_UNDO_COORDS);
+ }
+ else {
+ memset(&node_data->orig_data, 0, sizeof(node_data->orig_data));
+ }
+}
+
+void SCULPT_automasking_node_update(SculptSession *ss,
+ AutomaskingNodeData *automask_data,
+ PBVHVertexIter *vd)
+{
+ if (automask_data->have_orig_data) {
+ SCULPT_orig_vert_data_update(&automask_data->orig_data, vd);
+ }
+}
+
+bool SCULPT_vertex_is_occluded(SculptSession *ss, PBVHVertRef vertex, bool original)
+{
+ float ray_start[3], ray_end[3], ray_normal[3], face_normal[3];
+ float co[3];
+
+ copy_v3_v3(co, SCULPT_vertex_co_get(ss, vertex));
+ float mouse[2];
+
+ ED_view3d_project_float_v2_m4(ss->cache->vc->region, co, mouse, ss->cache->projection_mat);
+
+ int depth = SCULPT_raycast_init(ss->cache->vc, mouse, ray_end, ray_start, ray_normal, original);
+
+ negate_v3(ray_normal);
+
+ copy_v3_v3(ray_start, SCULPT_vertex_co_get(ss, vertex));
+ madd_v3_v3fl(ray_start, ray_normal, 0.002);
+
+ SculptRaycastData srd = {0};
+ srd.original = original;
+ srd.ss = ss;
+ srd.hit = false;
+ srd.ray_start = ray_start;
+ srd.ray_normal = ray_normal;
+ srd.
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list