diff options
-rw-r--r-- | source/blender/blenkernel/BKE_mesh_remesh_voxel.h | 3 | ||||
-rw-r--r-- | source/blender/blenkernel/intern/mesh_remesh_voxel.c | 13 | ||||
-rw-r--r-- | source/blender/blenkernel/intern/shrinkwrap.c | 1 | ||||
-rw-r--r-- | source/blender/editors/object/object_remesh.c | 7 |
4 files changed, 20 insertions, 4 deletions
diff --git a/source/blender/blenkernel/BKE_mesh_remesh_voxel.h b/source/blender/blenkernel/BKE_mesh_remesh_voxel.h index cc4a3a01892..86c094b8a6d 100644 --- a/source/blender/blenkernel/BKE_mesh_remesh_voxel.h +++ b/source/blender/blenkernel/BKE_mesh_remesh_voxel.h @@ -43,7 +43,8 @@ struct Mesh *BKE_mesh_remesh_voxel_ovdb_volume_to_mesh_nomain(struct OpenVDBLeve struct Mesh *BKE_mesh_remesh_voxel_fix_poles(struct Mesh *mesh); struct Mesh *BKE_mesh_remesh_voxel_to_mesh_nomain(struct Mesh *mesh, float voxel_size, - float adaptivity); + float adaptivity, + float isovalue); struct Mesh *BKE_mesh_remesh_quadriflow_to_mesh_nomain(struct Mesh *mesh, int target_faces, int seed, diff --git a/source/blender/blenkernel/intern/mesh_remesh_voxel.c b/source/blender/blenkernel/intern/mesh_remesh_voxel.c index 8419a72f97e..b93fe157f2a 100644 --- a/source/blender/blenkernel/intern/mesh_remesh_voxel.c +++ b/source/blender/blenkernel/intern/mesh_remesh_voxel.c @@ -295,7 +295,10 @@ Mesh *BKE_mesh_remesh_quadriflow_to_mesh_nomain(Mesh *mesh, return new_mesh; } -Mesh *BKE_mesh_remesh_voxel_to_mesh_nomain(Mesh *mesh, float voxel_size, float adaptivity) +Mesh *BKE_mesh_remesh_voxel_to_mesh_nomain(Mesh *mesh, + float voxel_size, + float adaptivity, + float isovalue) { Mesh *new_mesh = NULL; #ifdef WITH_OPENVDB @@ -304,7 +307,7 @@ Mesh *BKE_mesh_remesh_voxel_to_mesh_nomain(Mesh *mesh, float voxel_size, float a OpenVDBTransform_create_linear_transform(xform, (double)voxel_size); level_set = BKE_mesh_remesh_voxel_ovdb_mesh_to_level_set_create(mesh, xform); new_mesh = BKE_mesh_remesh_voxel_ovdb_volume_to_mesh_nomain( - level_set, 0.0, (float)adaptivity, false); + level_set, (double)isovalue, (double)adaptivity, false); OpenVDBLevelSet_free(level_set); OpenVDBTransform_free(xform); #else @@ -444,6 +447,12 @@ struct Mesh *BKE_mesh_remesh_voxel_fix_poles(struct Mesh *mesh) } BM_mesh_elem_hflag_disable_all(bm, BM_VERT | BM_EDGE | BM_FACE, BM_ELEM_SELECT, false); + BM_mesh_elem_hflag_enable_all(bm, BM_FACE, BM_ELEM_TAG, false); + BMO_op_callf(bm, + (BMO_FLAG_DEFAULTS & ~BMO_FLAG_RESPECT_HIDE), + "recalc_face_normals faces=%hf", + BM_ELEM_TAG); + BM_mesh_elem_hflag_disable_all(bm, BM_VERT | BM_EDGE | BM_FACE, BM_ELEM_TAG, false); Mesh *result = BKE_mesh_from_bmesh_nomain(bm, (&(struct BMeshToMeshParams){ diff --git a/source/blender/blenkernel/intern/shrinkwrap.c b/source/blender/blenkernel/intern/shrinkwrap.c index 797ae0f0a8a..28f552cec2e 100644 --- a/source/blender/blenkernel/intern/shrinkwrap.c +++ b/source/blender/blenkernel/intern/shrinkwrap.c @@ -1516,6 +1516,7 @@ void BKE_shrinkwrap_remesh_target_project(Mesh *src_me, Mesh *target_me, Object ssmd.shrinkType = MOD_SHRINKWRAP_TARGET_PROJECT; ssmd.shrinkMode = MOD_SHRINKWRAP_ON_SURFACE; ssmd.keepDist = 0.0f; + ssmd.projLimit = target_me->remesh_voxel_size; float(*vertexCos)[3] = BKE_mesh_vert_coords_alloc(src_me, &totvert); diff --git a/source/blender/editors/object/object_remesh.c b/source/blender/editors/object/object_remesh.c index a395a7013fe..35762c5861e 100644 --- a/source/blender/editors/object/object_remesh.c +++ b/source/blender/editors/object/object_remesh.c @@ -117,8 +117,13 @@ static int voxel_remesh_exec(bContext *C, wmOperator *op) ED_sculpt_undo_geometry_begin(ob); } + float isovalue = 0.0f; + if (mesh->flag & ME_REMESH_REPROJECT_VOLUME) { + isovalue = mesh->remesh_voxel_size * 0.3f; + } + new_mesh = BKE_mesh_remesh_voxel_to_mesh_nomain( - mesh, mesh->remesh_voxel_size, mesh->remesh_voxel_adaptivity); + mesh, mesh->remesh_voxel_size, mesh->remesh_voxel_adaptivity, isovalue); if (!new_mesh) { return OPERATOR_CANCELLED; |