Changeset View
Changeset View
Standalone View
Standalone View
source/blender/editors/sculpt_paint/sculpt_brush_types.c
| Show First 20 Lines • Show All 314 Lines • ▼ Show 20 Lines | const float fade = SCULPT_brush_strength_factor(ss, | ||||
| vd.fno, | vd.fno, | ||||
| vd.mask ? *vd.mask : 0.0f, | vd.mask ? *vd.mask : 0.0f, | ||||
| vd.vertex, | vd.vertex, | ||||
| thread_id); | thread_id); | ||||
| mul_v3_v3fl(proxy[vd.i], offset, fade); | mul_v3_v3fl(proxy[vd.i], offset, fade); | ||||
| if (vd.mvert) { | if (vd.mvert) { | ||||
| BKE_pbvh_vert_mark_update(ss->pbvh, vd.vertex); | BKE_pbvh_vert_tag_update_normal(ss->pbvh, vd.vertex); | ||||
| } | } | ||||
| } | } | ||||
| BKE_pbvh_vertex_iter_end; | BKE_pbvh_vertex_iter_end; | ||||
| } | } | ||||
| void SCULPT_do_draw_brush(Sculpt *sd, Object *ob, PBVHNode **nodes, int totnode) | void SCULPT_do_draw_brush(Sculpt *sd, Object *ob, PBVHNode **nodes, int totnode) | ||||
| { | { | ||||
| SculptSession *ss = ob->sculpt; | SculptSession *ss = ob->sculpt; | ||||
| ▲ Show 20 Lines • Show All 81 Lines • ▼ Show 20 Lines | const float fade = bstrength * SCULPT_brush_strength_factor(ss, | ||||
| vd.fno, | vd.fno, | ||||
| vd.mask ? *vd.mask : 0.0f, | vd.mask ? *vd.mask : 0.0f, | ||||
| vd.vertex, | vd.vertex, | ||||
| thread_id); | thread_id); | ||||
| mul_v3_v3fl(proxy[vd.i], val, fade); | mul_v3_v3fl(proxy[vd.i], val, fade); | ||||
| if (vd.mvert) { | if (vd.mvert) { | ||||
| BKE_pbvh_vert_mark_update(ss->pbvh, vd.vertex); | BKE_pbvh_vert_tag_update_normal(ss->pbvh, vd.vertex); | ||||
| } | } | ||||
| } | } | ||||
| BKE_pbvh_vertex_iter_end; | BKE_pbvh_vertex_iter_end; | ||||
| } | } | ||||
| void SCULPT_do_fill_brush(Sculpt *sd, Object *ob, PBVHNode **nodes, int totnode) | void SCULPT_do_fill_brush(Sculpt *sd, Object *ob, PBVHNode **nodes, int totnode) | ||||
| { | { | ||||
| SculptSession *ss = ob->sculpt; | SculptSession *ss = ob->sculpt; | ||||
| ▲ Show 20 Lines • Show All 81 Lines • ▼ Show 20 Lines | const float fade = bstrength * SCULPT_brush_strength_factor(ss, | ||||
| vd.fno, | vd.fno, | ||||
| vd.mask ? *vd.mask : 0.0f, | vd.mask ? *vd.mask : 0.0f, | ||||
| vd.vertex, | vd.vertex, | ||||
| thread_id); | thread_id); | ||||
| mul_v3_v3fl(proxy[vd.i], val, fade); | mul_v3_v3fl(proxy[vd.i], val, fade); | ||||
| if (vd.mvert) { | if (vd.mvert) { | ||||
| BKE_pbvh_vert_mark_update(ss->pbvh, vd.vertex); | BKE_pbvh_vert_tag_update_normal(ss->pbvh, vd.vertex); | ||||
| } | } | ||||
| } | } | ||||
| BKE_pbvh_vertex_iter_end; | BKE_pbvh_vertex_iter_end; | ||||
| } | } | ||||
| void SCULPT_do_scrape_brush(Sculpt *sd, Object *ob, PBVHNode **nodes, int totnode) | void SCULPT_do_scrape_brush(Sculpt *sd, Object *ob, PBVHNode **nodes, int totnode) | ||||
| { | { | ||||
| SculptSession *ss = ob->sculpt; | SculptSession *ss = ob->sculpt; | ||||
| ▲ Show 20 Lines • Show All 101 Lines • ▼ Show 20 Lines | const float fade = bstrength * SCULPT_brush_strength_factor(ss, | ||||
| vd.fno, | vd.fno, | ||||
| vd.mask ? *vd.mask : 0.0f, | vd.mask ? *vd.mask : 0.0f, | ||||
| vd.vertex, | vd.vertex, | ||||
| thread_id); | thread_id); | ||||
| mul_v3_v3fl(proxy[vd.i], val, fade); | mul_v3_v3fl(proxy[vd.i], val, fade); | ||||
| if (vd.mvert) { | if (vd.mvert) { | ||||
| BKE_pbvh_vert_mark_update(ss->pbvh, vd.vertex); | BKE_pbvh_vert_tag_update_normal(ss->pbvh, vd.vertex); | ||||
| } | } | ||||
| } | } | ||||
| BKE_pbvh_vertex_iter_end; | BKE_pbvh_vertex_iter_end; | ||||
| } | } | ||||
| float SCULPT_clay_thumb_get_stabilized_pressure(StrokeCache *cache) | float SCULPT_clay_thumb_get_stabilized_pressure(StrokeCache *cache) | ||||
| { | { | ||||
| float final_pressure = 0.0f; | float final_pressure = 0.0f; | ||||
| ▲ Show 20 Lines • Show All 138 Lines • ▼ Show 20 Lines | if (SCULPT_plane_trim(ss->cache, brush, val)) { | ||||
| vd.fno, | vd.fno, | ||||
| vd.mask ? *vd.mask : 0.0f, | vd.mask ? *vd.mask : 0.0f, | ||||
| vd.vertex, | vd.vertex, | ||||
| thread_id); | thread_id); | ||||
| mul_v3_v3fl(proxy[vd.i], val, fade); | mul_v3_v3fl(proxy[vd.i], val, fade); | ||||
| if (vd.mvert) { | if (vd.mvert) { | ||||
| BKE_pbvh_vert_mark_update(ss->pbvh, vd.vertex); | BKE_pbvh_vert_tag_update_normal(ss->pbvh, vd.vertex); | ||||
| } | } | ||||
| } | } | ||||
| } | } | ||||
| BKE_pbvh_vertex_iter_end; | BKE_pbvh_vertex_iter_end; | ||||
| } | } | ||||
| void SCULPT_do_flatten_brush(Sculpt *sd, Object *ob, PBVHNode **nodes, int totnode) | void SCULPT_do_flatten_brush(Sculpt *sd, Object *ob, PBVHNode **nodes, int totnode) | ||||
| { | { | ||||
| ▲ Show 20 Lines • Show All 140 Lines • ▼ Show 20 Lines | const float fade = bstrength * SCULPT_brush_strength_factor(ss, | ||||
| vd.fno, | vd.fno, | ||||
| vd.mask ? *vd.mask : 0.0f, | vd.mask ? *vd.mask : 0.0f, | ||||
| vd.vertex, | vd.vertex, | ||||
| thread_id); | thread_id); | ||||
| mul_v3_v3fl(proxy[vd.i], val, fade); | mul_v3_v3fl(proxy[vd.i], val, fade); | ||||
| if (vd.mvert) { | if (vd.mvert) { | ||||
| BKE_pbvh_vert_mark_update(ss->pbvh, vd.vertex); | BKE_pbvh_vert_tag_update_normal(ss->pbvh, vd.vertex); | ||||
| } | } | ||||
| } | } | ||||
| BKE_pbvh_vertex_iter_end; | BKE_pbvh_vertex_iter_end; | ||||
| } | } | ||||
| void SCULPT_do_clay_brush(Sculpt *sd, Object *ob, PBVHNode **nodes, int totnode) | void SCULPT_do_clay_brush(Sculpt *sd, Object *ob, PBVHNode **nodes, int totnode) | ||||
| { | { | ||||
| SculptSession *ss = ob->sculpt; | SculptSession *ss = ob->sculpt; | ||||
| ▲ Show 20 Lines • Show All 109 Lines • ▼ Show 20 Lines | const float fade = bstrength * SCULPT_brush_strength_factor(ss, | ||||
| vd.fno, | vd.fno, | ||||
| vd.mask ? *vd.mask : 0.0f, | vd.mask ? *vd.mask : 0.0f, | ||||
| vd.vertex, | vd.vertex, | ||||
| thread_id); | thread_id); | ||||
| mul_v3_v3fl(proxy[vd.i], val, fade); | mul_v3_v3fl(proxy[vd.i], val, fade); | ||||
| if (vd.mvert) { | if (vd.mvert) { | ||||
| BKE_pbvh_vert_mark_update(ss->pbvh, vd.vertex); | BKE_pbvh_vert_tag_update_normal(ss->pbvh, vd.vertex); | ||||
| } | } | ||||
| } | } | ||||
| BKE_pbvh_vertex_iter_end; | BKE_pbvh_vertex_iter_end; | ||||
| } | } | ||||
| void SCULPT_do_clay_strips_brush(Sculpt *sd, Object *ob, PBVHNode **nodes, int totnode) | void SCULPT_do_clay_strips_brush(Sculpt *sd, Object *ob, PBVHNode **nodes, int totnode) | ||||
| { | { | ||||
| SculptSession *ss = ob->sculpt; | SculptSession *ss = ob->sculpt; | ||||
| ▲ Show 20 Lines • Show All 183 Lines • ▼ Show 20 Lines | if (do_elastic) { | ||||
| if (vd.mask) { | if (vd.mask) { | ||||
| mul_v3_fl(disp, 1.0f - *vd.mask); | mul_v3_fl(disp, 1.0f - *vd.mask); | ||||
| } | } | ||||
| mul_v3_fl(disp, SCULPT_automasking_factor_get(ss->cache->automasking, ss, vd.vertex)); | mul_v3_fl(disp, SCULPT_automasking_factor_get(ss->cache->automasking, ss, vd.vertex)); | ||||
| copy_v3_v3(proxy[vd.i], disp); | copy_v3_v3(proxy[vd.i], disp); | ||||
| } | } | ||||
| if (vd.mvert) { | if (vd.mvert) { | ||||
| BKE_pbvh_vert_mark_update(ss->pbvh, vd.vertex); | BKE_pbvh_vert_tag_update_normal(ss->pbvh, vd.vertex); | ||||
| } | } | ||||
| } | } | ||||
| BKE_pbvh_vertex_iter_end; | BKE_pbvh_vertex_iter_end; | ||||
| } | } | ||||
| void SCULPT_do_snake_hook_brush(Sculpt *sd, Object *ob, PBVHNode **nodes, int totnode) | void SCULPT_do_snake_hook_brush(Sculpt *sd, Object *ob, PBVHNode **nodes, int totnode) | ||||
| { | { | ||||
| SculptSession *ss = ob->sculpt; | SculptSession *ss = ob->sculpt; | ||||
| ▲ Show 20 Lines • Show All 69 Lines • ▼ Show 20 Lines | const float fade = bstrength * SCULPT_brush_strength_factor(ss, | ||||
| NULL, | NULL, | ||||
| vd.mask ? *vd.mask : 0.0f, | vd.mask ? *vd.mask : 0.0f, | ||||
| vd.vertex, | vd.vertex, | ||||
| thread_id); | thread_id); | ||||
| mul_v3_v3fl(proxy[vd.i], cono, fade); | mul_v3_v3fl(proxy[vd.i], cono, fade); | ||||
| if (vd.mvert) { | if (vd.mvert) { | ||||
| BKE_pbvh_vert_mark_update(ss->pbvh, vd.vertex); | BKE_pbvh_vert_tag_update_normal(ss->pbvh, vd.vertex); | ||||
| } | } | ||||
| } | } | ||||
| BKE_pbvh_vertex_iter_end; | BKE_pbvh_vertex_iter_end; | ||||
| } | } | ||||
| void SCULPT_do_thumb_brush(Sculpt *sd, Object *ob, PBVHNode **nodes, int totnode) | void SCULPT_do_thumb_brush(Sculpt *sd, Object *ob, PBVHNode **nodes, int totnode) | ||||
| { | { | ||||
| SculptSession *ss = ob->sculpt; | SculptSession *ss = ob->sculpt; | ||||
| ▲ Show 20 Lines • Show All 61 Lines • ▼ Show 20 Lines | BKE_pbvh_vertex_iter_begin (ss->pbvh, data->nodes[n], vd, PBVH_ITER_UNIQUE) { | ||||
| sub_v3_v3v3(vec, orig_data.co, ss->cache->location); | sub_v3_v3v3(vec, orig_data.co, ss->cache->location); | ||||
| axis_angle_normalized_to_mat3(rot, ss->cache->sculpt_normal_symm, angle * fade); | axis_angle_normalized_to_mat3(rot, ss->cache->sculpt_normal_symm, angle * fade); | ||||
| mul_v3_m3v3(proxy[vd.i], rot, vec); | mul_v3_m3v3(proxy[vd.i], rot, vec); | ||||
| add_v3_v3(proxy[vd.i], ss->cache->location); | add_v3_v3(proxy[vd.i], ss->cache->location); | ||||
| sub_v3_v3(proxy[vd.i], orig_data.co); | sub_v3_v3(proxy[vd.i], orig_data.co); | ||||
| if (vd.mvert) { | if (vd.mvert) { | ||||
| BKE_pbvh_vert_mark_update(ss->pbvh, vd.vertex); | BKE_pbvh_vert_tag_update_normal(ss->pbvh, vd.vertex); | ||||
| } | } | ||||
| } | } | ||||
| BKE_pbvh_vertex_iter_end; | BKE_pbvh_vertex_iter_end; | ||||
| } | } | ||||
| void SCULPT_do_rotate_brush(Sculpt *sd, Object *ob, PBVHNode **nodes, int totnode) | void SCULPT_do_rotate_brush(Sculpt *sd, Object *ob, PBVHNode **nodes, int totnode) | ||||
| { | { | ||||
| SculptSession *ss = ob->sculpt; | SculptSession *ss = ob->sculpt; | ||||
| ▲ Show 20 Lines • Show All 99 Lines • ▼ Show 20 Lines | BKE_pbvh_vertex_iter_begin (ss->pbvh, data->nodes[n], vd, PBVH_ITER_UNIQUE) { | ||||
| float vdisp[3]; | float vdisp[3]; | ||||
| sub_v3_v3v3(vdisp, final_co, vd.co); | sub_v3_v3v3(vdisp, final_co, vd.co); | ||||
| mul_v3_fl(vdisp, fabsf(fade)); | mul_v3_fl(vdisp, fabsf(fade)); | ||||
| add_v3_v3v3(final_co, vd.co, vdisp); | add_v3_v3v3(final_co, vd.co, vdisp); | ||||
| SCULPT_clip(sd, ss, vd.co, final_co); | SCULPT_clip(sd, ss, vd.co, final_co); | ||||
| if (vd.mvert) { | if (vd.mvert) { | ||||
| BKE_pbvh_vert_mark_update(ss->pbvh, vd.vertex); | BKE_pbvh_vert_tag_update_normal(ss->pbvh, vd.vertex); | ||||
| } | } | ||||
| } | } | ||||
| BKE_pbvh_vertex_iter_end; | BKE_pbvh_vertex_iter_end; | ||||
| } | } | ||||
| void SCULPT_do_layer_brush(Sculpt *sd, Object *ob, PBVHNode **nodes, int totnode) | void SCULPT_do_layer_brush(Sculpt *sd, Object *ob, PBVHNode **nodes, int totnode) | ||||
| { | { | ||||
| SculptSession *ss = ob->sculpt; | SculptSession *ss = ob->sculpt; | ||||
| ▲ Show 20 Lines • Show All 56 Lines • ▼ Show 20 Lines | BKE_pbvh_vertex_iter_begin (ss->pbvh, data->nodes[n], vd, PBVH_ITER_UNIQUE) { | ||||
| else { | else { | ||||
| copy_v3_v3(val, vd.no); | copy_v3_v3(val, vd.no); | ||||
| } | } | ||||
| mul_v3_fl(val, fade * ss->cache->radius); | mul_v3_fl(val, fade * ss->cache->radius); | ||||
| mul_v3_v3v3(proxy[vd.i], val, ss->cache->scale); | mul_v3_v3v3(proxy[vd.i], val, ss->cache->scale); | ||||
| if (vd.mvert) { | if (vd.mvert) { | ||||
| BKE_pbvh_vert_mark_update(ss->pbvh, vd.vertex); | BKE_pbvh_vert_tag_update_normal(ss->pbvh, vd.vertex); | ||||
| } | } | ||||
| } | } | ||||
| BKE_pbvh_vertex_iter_end; | BKE_pbvh_vertex_iter_end; | ||||
| } | } | ||||
| void SCULPT_do_inflate_brush(Sculpt *sd, Object *ob, PBVHNode **nodes, int totnode) | void SCULPT_do_inflate_brush(Sculpt *sd, Object *ob, PBVHNode **nodes, int totnode) | ||||
| { | { | ||||
| Brush *brush = BKE_paint_brush(&sd->paint); | Brush *brush = BKE_paint_brush(&sd->paint); | ||||
| ▲ Show 20 Lines • Show All 42 Lines • ▼ Show 20 Lines | const float fade = bstrength * SCULPT_brush_strength_factor(ss, | ||||
| vd.fno, | vd.fno, | ||||
| vd.mask ? *vd.mask : 0.0f, | vd.mask ? *vd.mask : 0.0f, | ||||
| vd.vertex, | vd.vertex, | ||||
| thread_id); | thread_id); | ||||
| mul_v3_v3fl(proxy[vd.i], cono, fade); | mul_v3_v3fl(proxy[vd.i], cono, fade); | ||||
| if (vd.mvert) { | if (vd.mvert) { | ||||
| BKE_pbvh_vert_mark_update(ss->pbvh, vd.vertex); | BKE_pbvh_vert_tag_update_normal(ss->pbvh, vd.vertex); | ||||
| } | } | ||||
| } | } | ||||
| BKE_pbvh_vertex_iter_end; | BKE_pbvh_vertex_iter_end; | ||||
| } | } | ||||
| void SCULPT_do_nudge_brush(Sculpt *sd, Object *ob, PBVHNode **nodes, int totnode) | void SCULPT_do_nudge_brush(Sculpt *sd, Object *ob, PBVHNode **nodes, int totnode) | ||||
| { | { | ||||
| SculptSession *ss = ob->sculpt; | SculptSession *ss = ob->sculpt; | ||||
| ▲ Show 20 Lines • Show All 77 Lines • ▼ Show 20 Lines | BKE_pbvh_vertex_iter_begin (ss->pbvh, data->nodes[n], vd, PBVH_ITER_UNIQUE) { | ||||
| sculpt_project_v3(spvc, val1, val1); | sculpt_project_v3(spvc, val1, val1); | ||||
| /* Then we draw. */ | /* Then we draw. */ | ||||
| mul_v3_v3fl(val2, offset, fade); | mul_v3_v3fl(val2, offset, fade); | ||||
| add_v3_v3v3(proxy[vd.i], val1, val2); | add_v3_v3v3(proxy[vd.i], val1, val2); | ||||
| if (vd.mvert) { | if (vd.mvert) { | ||||
| BKE_pbvh_vert_mark_update(ss->pbvh, vd.vertex); | BKE_pbvh_vert_tag_update_normal(ss->pbvh, vd.vertex); | ||||
| } | } | ||||
| } | } | ||||
| BKE_pbvh_vertex_iter_end; | BKE_pbvh_vertex_iter_end; | ||||
| } | } | ||||
| void SCULPT_do_crease_brush(Sculpt *sd, Object *ob, PBVHNode **nodes, int totnode) | void SCULPT_do_crease_brush(Sculpt *sd, Object *ob, PBVHNode **nodes, int totnode) | ||||
| { | { | ||||
| SculptSession *ss = ob->sculpt; | SculptSession *ss = ob->sculpt; | ||||
| ▲ Show 20 Lines • Show All 102 Lines • ▼ Show 20 Lines | BKE_pbvh_vertex_iter_begin (ss->pbvh, data->nodes[n], vd, PBVH_ITER_UNIQUE) { | ||||
| add_v3_v3v3(disp_center, x_disp, z_disp); | add_v3_v3v3(disp_center, x_disp, z_disp); | ||||
| if (brush->falloff_shape == PAINT_FALLOFF_SHAPE_TUBE) { | if (brush->falloff_shape == PAINT_FALLOFF_SHAPE_TUBE) { | ||||
| project_plane_v3_v3v3(disp_center, disp_center, ss->cache->view_normal); | project_plane_v3_v3v3(disp_center, disp_center, ss->cache->view_normal); | ||||
| } | } | ||||
| mul_v3_v3fl(proxy[vd.i], disp_center, fade); | mul_v3_v3fl(proxy[vd.i], disp_center, fade); | ||||
| if (vd.mvert) { | if (vd.mvert) { | ||||
| BKE_pbvh_vert_mark_update(ss->pbvh, vd.vertex); | BKE_pbvh_vert_tag_update_normal(ss->pbvh, vd.vertex); | ||||
| } | } | ||||
| } | } | ||||
| BKE_pbvh_vertex_iter_end; | BKE_pbvh_vertex_iter_end; | ||||
| } | } | ||||
| void SCULPT_do_pinch_brush(Sculpt *sd, Object *ob, PBVHNode **nodes, int totnode) | void SCULPT_do_pinch_brush(Sculpt *sd, Object *ob, PBVHNode **nodes, int totnode) | ||||
| { | { | ||||
| SculptSession *ss = ob->sculpt; | SculptSession *ss = ob->sculpt; | ||||
| ▲ Show 20 Lines • Show All 92 Lines • ▼ Show 20 Lines | if (grab_silhouette) { | ||||
| float vno[3]; | float vno[3]; | ||||
| copy_v3_v3(vno, orig_data.no); | copy_v3_v3(vno, orig_data.no); | ||||
| fade *= max_ff(dot_v3v3(vno, silhouette_test_dir), 0.0f); | fade *= max_ff(dot_v3v3(vno, silhouette_test_dir), 0.0f); | ||||
| } | } | ||||
| mul_v3_v3fl(proxy[vd.i], grab_delta, fade); | mul_v3_v3fl(proxy[vd.i], grab_delta, fade); | ||||
| if (vd.mvert) { | if (vd.mvert) { | ||||
| BKE_pbvh_vert_mark_update(ss->pbvh, vd.vertex); | BKE_pbvh_vert_tag_update_normal(ss->pbvh, vd.vertex); | ||||
| } | } | ||||
| } | } | ||||
| BKE_pbvh_vertex_iter_end; | BKE_pbvh_vertex_iter_end; | ||||
| } | } | ||||
| void SCULPT_do_grab_brush(Sculpt *sd, Object *ob, PBVHNode **nodes, int totnode) | void SCULPT_do_grab_brush(Sculpt *sd, Object *ob, PBVHNode **nodes, int totnode) | ||||
| { | { | ||||
| SculptSession *ss = ob->sculpt; | SculptSession *ss = ob->sculpt; | ||||
| ▲ Show 20 Lines • Show All 91 Lines • ▼ Show 20 Lines | if (vd.mask) { | ||||
| mul_v3_fl(final_disp, 1.0f - *vd.mask); | mul_v3_fl(final_disp, 1.0f - *vd.mask); | ||||
| } | } | ||||
| mul_v3_fl(final_disp, SCULPT_automasking_factor_get(ss->cache->automasking, ss, vd.vertex)); | mul_v3_fl(final_disp, SCULPT_automasking_factor_get(ss->cache->automasking, ss, vd.vertex)); | ||||
| copy_v3_v3(proxy[vd.i], final_disp); | copy_v3_v3(proxy[vd.i], final_disp); | ||||
| if (vd.mvert) { | if (vd.mvert) { | ||||
| BKE_pbvh_vert_mark_update(ss->pbvh, vd.vertex); | BKE_pbvh_vert_tag_update_normal(ss->pbvh, vd.vertex); | ||||
| } | } | ||||
| } | } | ||||
| BKE_pbvh_vertex_iter_end; | BKE_pbvh_vertex_iter_end; | ||||
| } | } | ||||
| void SCULPT_do_elastic_deform_brush(Sculpt *sd, Object *ob, PBVHNode **nodes, int totnode) | void SCULPT_do_elastic_deform_brush(Sculpt *sd, Object *ob, PBVHNode **nodes, int totnode) | ||||
| { | { | ||||
| SculptSession *ss = ob->sculpt; | SculptSession *ss = ob->sculpt; | ||||
| ▲ Show 20 Lines • Show All 61 Lines • ▼ Show 20 Lines | const float fade = SCULPT_brush_strength_factor(ss, | ||||
| NULL, | NULL, | ||||
| vd.mask ? *vd.mask : 0.0f, | vd.mask ? *vd.mask : 0.0f, | ||||
| vd.vertex, | vd.vertex, | ||||
| thread_id); | thread_id); | ||||
| mul_v3_v3fl(proxy[vd.i], offset, fade); | mul_v3_v3fl(proxy[vd.i], offset, fade); | ||||
| if (vd.mvert) { | if (vd.mvert) { | ||||
| BKE_pbvh_vert_mark_update(ss->pbvh, vd.vertex); | BKE_pbvh_vert_tag_update_normal(ss->pbvh, vd.vertex); | ||||
| } | } | ||||
| } | } | ||||
| BKE_pbvh_vertex_iter_end; | BKE_pbvh_vertex_iter_end; | ||||
| } | } | ||||
| void SCULPT_do_draw_sharp_brush(Sculpt *sd, Object *ob, PBVHNode **nodes, int totnode) | void SCULPT_do_draw_sharp_brush(Sculpt *sd, Object *ob, PBVHNode **nodes, int totnode) | ||||
| { | { | ||||
| SculptSession *ss = ob->sculpt; | SculptSession *ss = ob->sculpt; | ||||
| ▲ Show 20 Lines • Show All 96 Lines • ▼ Show 20 Lines | SCULPT_VERTEX_NEIGHBORS_ITER_BEGIN (ss, vd.vertex, ni) { | ||||
| madd_v3_v3fl(final_disp, vertex_disp_norm, dot_v3v3(current_disp, vertex_disp)); | madd_v3_v3fl(final_disp, vertex_disp_norm, dot_v3v3(current_disp, vertex_disp)); | ||||
| } | } | ||||
| } | } | ||||
| SCULPT_VERTEX_NEIGHBORS_ITER_END(ni); | SCULPT_VERTEX_NEIGHBORS_ITER_END(ni); | ||||
| mul_v3_v3fl(proxy[vd.i], final_disp, fade); | mul_v3_v3fl(proxy[vd.i], final_disp, fade); | ||||
| if (vd.mvert) { | if (vd.mvert) { | ||||
| BKE_pbvh_vert_mark_update(ss->pbvh, vd.vertex); | BKE_pbvh_vert_tag_update_normal(ss->pbvh, vd.vertex); | ||||
| } | } | ||||
| } | } | ||||
| BKE_pbvh_vertex_iter_end; | BKE_pbvh_vertex_iter_end; | ||||
| } | } | ||||
| void SCULPT_relax_vertex(SculptSession *ss, | void SCULPT_relax_vertex(SculptSession *ss, | ||||
| PBVHVertexIter *vd, | PBVHVertexIter *vd, | ||||
| float factor, | float factor, | ||||
| ▲ Show 20 Lines • Show All 109 Lines • ▼ Show 20 Lines | const float fade = SCULPT_brush_strength_factor(ss, | ||||
| orig_data.no, | orig_data.no, | ||||
| NULL, | NULL, | ||||
| vd.mask ? *vd.mask : 0.0f, | vd.mask ? *vd.mask : 0.0f, | ||||
| vd.vertex, | vd.vertex, | ||||
| thread_id); | thread_id); | ||||
| SCULPT_relax_vertex(ss, &vd, fade * bstrength, false, vd.co); | SCULPT_relax_vertex(ss, &vd, fade * bstrength, false, vd.co); | ||||
| if (vd.mvert) { | if (vd.mvert) { | ||||
| BKE_pbvh_vert_mark_update(ss->pbvh, vd.vertex); | BKE_pbvh_vert_tag_update_normal(ss->pbvh, vd.vertex); | ||||
| } | } | ||||
| } | } | ||||
| BKE_pbvh_vertex_iter_end; | BKE_pbvh_vertex_iter_end; | ||||
| } | } | ||||
| void SCULPT_do_slide_relax_brush(Sculpt *sd, Object *ob, PBVHNode **nodes, int totnode) | void SCULPT_do_slide_relax_brush(Sculpt *sd, Object *ob, PBVHNode **nodes, int totnode) | ||||
| { | { | ||||
| SculptSession *ss = ob->sculpt; | SculptSession *ss = ob->sculpt; | ||||
| ▲ Show 20 Lines • Show All 64 Lines • ▼ Show 20 Lines | BKE_pbvh_vertex_iter_begin (ss->pbvh, data->nodes[n], vd, PBVH_ITER_UNIQUE) { | ||||
| float limit_co[3]; | float limit_co[3]; | ||||
| float disp[3]; | float disp[3]; | ||||
| SCULPT_vertex_limit_surface_get(ss, vd.vertex, limit_co); | SCULPT_vertex_limit_surface_get(ss, vd.vertex, limit_co); | ||||
| sub_v3_v3v3(disp, limit_co, vd.co); | sub_v3_v3v3(disp, limit_co, vd.co); | ||||
| mul_v3_v3fl(proxy[vd.i], disp, fade); | mul_v3_v3fl(proxy[vd.i], disp, fade); | ||||
| if (vd.mvert) { | if (vd.mvert) { | ||||
| BKE_pbvh_vert_mark_update(ss->pbvh, vd.vertex); | BKE_pbvh_vert_tag_update_normal(ss->pbvh, vd.vertex); | ||||
| } | } | ||||
| } | } | ||||
| BKE_pbvh_vertex_iter_end; | BKE_pbvh_vertex_iter_end; | ||||
| } | } | ||||
| void SCULPT_do_displacement_eraser_brush(Sculpt *sd, Object *ob, PBVHNode **nodes, int totnode) | void SCULPT_do_displacement_eraser_brush(Sculpt *sd, Object *ob, PBVHNode **nodes, int totnode) | ||||
| { | { | ||||
| Brush *brush = BKE_paint_brush(&sd->paint); | Brush *brush = BKE_paint_brush(&sd->paint); | ||||
| ▲ Show 20 Lines • Show All 95 Lines • ▼ Show 20 Lines | BKE_pbvh_vertex_iter_begin (ss->pbvh, data->nodes[n], vd, PBVH_ITER_UNIQUE) { | ||||
| mul_v3_fl(interp_limit_surface_disp, 1.0f / weights_accum); | mul_v3_fl(interp_limit_surface_disp, 1.0f / weights_accum); | ||||
| float new_co[3]; | float new_co[3]; | ||||
| add_v3_v3v3(new_co, ss->cache->limit_surface_co[vd.index], interp_limit_surface_disp); | add_v3_v3v3(new_co, ss->cache->limit_surface_co[vd.index], interp_limit_surface_disp); | ||||
| interp_v3_v3v3(vd.co, vd.co, new_co, fade); | interp_v3_v3v3(vd.co, vd.co, new_co, fade); | ||||
| if (vd.mvert) { | if (vd.mvert) { | ||||
| BKE_pbvh_vert_mark_update(ss->pbvh, vd.vertex); | BKE_pbvh_vert_tag_update_normal(ss->pbvh, vd.vertex); | ||||
| } | } | ||||
| } | } | ||||
| BKE_pbvh_vertex_iter_end; | BKE_pbvh_vertex_iter_end; | ||||
| } | } | ||||
| static void do_displacement_smear_store_prev_disp_task_cb_ex( | static void do_displacement_smear_store_prev_disp_task_cb_ex( | ||||
| void *__restrict userdata, const int n, const TaskParallelTLS *__restrict UNUSED(tls)) | void *__restrict userdata, const int n, const TaskParallelTLS *__restrict UNUSED(tls)) | ||||
| { | { | ||||
| ▲ Show 20 Lines • Show All 98 Lines • ▼ Show 20 Lines | BKE_pbvh_vertex_iter_begin (ss->pbvh, data->nodes[n], vd, PBVH_ITER_UNIQUE) { | ||||
| sub_v3_v3v3(val, avg, vd.co); | sub_v3_v3v3(val, avg, vd.co); | ||||
| madd_v3_v3v3fl(val, vd.co, val, fade); | madd_v3_v3v3fl(val, vd.co, val, fade); | ||||
| SCULPT_clip(sd, ss, vd.co, val); | SCULPT_clip(sd, ss, vd.co, val); | ||||
| if (vd.mvert) { | if (vd.mvert) { | ||||
| BKE_pbvh_vert_mark_update(ss->pbvh, vd.vertex); | BKE_pbvh_vert_tag_update_normal(ss->pbvh, vd.vertex); | ||||
| } | } | ||||
| } | } | ||||
| BKE_pbvh_vertex_iter_end; | BKE_pbvh_vertex_iter_end; | ||||
| } | } | ||||
| void SCULPT_bmesh_topology_rake( | void SCULPT_bmesh_topology_rake( | ||||
| Sculpt *sd, Object *ob, PBVHNode **nodes, const int totnode, float bstrength) | Sculpt *sd, Object *ob, PBVHNode **nodes, const int totnode, float bstrength) | ||||
| { | { | ||||
| ▲ Show 20 Lines • Show All 55 Lines • ▼ Show 20 Lines | BKE_pbvh_vertex_iter_begin (ss->pbvh, data->nodes[n], vd, PBVH_ITER_UNIQUE) { | ||||
| if (bstrength > 0.0f) { | if (bstrength > 0.0f) { | ||||
| (*vd.mask) += fade * bstrength * (1.0f - *vd.mask); | (*vd.mask) += fade * bstrength * (1.0f - *vd.mask); | ||||
| } | } | ||||
| else { | else { | ||||
| (*vd.mask) += fade * bstrength * (*vd.mask); | (*vd.mask) += fade * bstrength * (*vd.mask); | ||||
| } | } | ||||
| *vd.mask = clamp_f(*vd.mask, 0.0f, 1.0f); | *vd.mask = clamp_f(*vd.mask, 0.0f, 1.0f); | ||||
| if (vd.mvert) { | |||||
| BKE_pbvh_vert_mark_update(ss->pbvh, vd.vertex); | |||||
| } | |||||
| BKE_pbvh_vertex_iter_end; | BKE_pbvh_vertex_iter_end; | ||||
| } | } | ||||
| } | } | ||||
| void SCULPT_do_mask_brush_draw(Sculpt *sd, Object *ob, PBVHNode **nodes, int totnode) | void SCULPT_do_mask_brush_draw(Sculpt *sd, Object *ob, PBVHNode **nodes, int totnode) | ||||
| { | { | ||||
| Brush *brush = BKE_paint_brush(&sd->paint); | Brush *brush = BKE_paint_brush(&sd->paint); | ||||
| Show All 29 Lines | |||||