diff options
-rw-r--r-- | release/scripts/startup/bl_ui/properties_data_mesh.py | 1 | ||||
-rw-r--r-- | release/scripts/startup/bl_ui/space_view3d_toolbar.py | 1 | ||||
-rw-r--r-- | source/blender/blenkernel/BKE_mesh_remesh_voxel.h | 4 | ||||
-rw-r--r-- | source/blender/blenkernel/intern/mesh.c | 1 | ||||
-rw-r--r-- | source/blender/blenkernel/intern/mesh_remesh_voxel.c | 5 | ||||
-rw-r--r-- | source/blender/editors/object/object_remesh.c | 5 | ||||
-rw-r--r-- | source/blender/makesdna/DNA_mesh_defaults.h | 1 | ||||
-rw-r--r-- | source/blender/makesdna/DNA_mesh_types.h | 3 | ||||
-rw-r--r-- | source/blender/makesrna/intern/rna_mesh.c | 11 |
9 files changed, 26 insertions, 6 deletions
diff --git a/release/scripts/startup/bl_ui/properties_data_mesh.py b/release/scripts/startup/bl_ui/properties_data_mesh.py index 906969e9af4..51f24007271 100644 --- a/release/scripts/startup/bl_ui/properties_data_mesh.py +++ b/release/scripts/startup/bl_ui/properties_data_mesh.py @@ -476,6 +476,7 @@ class DATA_PT_remesh(MeshButtonsPanel, Panel): col = layout.column() if (mesh.remesh_mode == 'VOXEL'): col.prop(mesh, "remesh_voxel_size") + col.prop(mesh, "remesh_voxel_adaptivity") col.prop(mesh, "remesh_fix_poles") col.prop(mesh, "remesh_smooth_normals") col.prop(mesh, "remesh_preserve_volume") diff --git a/release/scripts/startup/bl_ui/space_view3d_toolbar.py b/release/scripts/startup/bl_ui/space_view3d_toolbar.py index 03788ed410a..3aee14e0239 100644 --- a/release/scripts/startup/bl_ui/space_view3d_toolbar.py +++ b/release/scripts/startup/bl_ui/space_view3d_toolbar.py @@ -1235,6 +1235,7 @@ class VIEW3D_PT_sculpt_voxel_remesh(Panel, View3DPaintPanel): col = layout.column() mesh = context.active_object.data col.prop(mesh, "remesh_voxel_size") + col.prop(mesh, "remesh_voxel_adaptivity") col.prop(mesh, "remesh_fix_poles") col.prop(mesh, "remesh_smooth_normals") col.prop(mesh, "remesh_preserve_volume") diff --git a/source/blender/blenkernel/BKE_mesh_remesh_voxel.h b/source/blender/blenkernel/BKE_mesh_remesh_voxel.h index 16c22baf9b0..cc4a3a01892 100644 --- a/source/blender/blenkernel/BKE_mesh_remesh_voxel.h +++ b/source/blender/blenkernel/BKE_mesh_remesh_voxel.h @@ -41,7 +41,9 @@ struct Mesh *BKE_mesh_remesh_voxel_ovdb_volume_to_mesh_nomain(struct OpenVDBLeve #endif 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); +struct Mesh *BKE_mesh_remesh_voxel_to_mesh_nomain(struct Mesh *mesh, + float voxel_size, + float adaptivity); 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.c b/source/blender/blenkernel/intern/mesh.c index 05d6f2c5ddf..ba139c654d3 100644 --- a/source/blender/blenkernel/intern/mesh.c +++ b/source/blender/blenkernel/intern/mesh.c @@ -666,6 +666,7 @@ void BKE_mesh_copy_settings(Mesh *me_dst, const Mesh *me_src) me_dst->flag = me_src->flag; me_dst->smoothresh = me_src->smoothresh; me_dst->remesh_voxel_size = me_src->remesh_voxel_size; + me_dst->remesh_voxel_adaptivity = me_src->remesh_voxel_adaptivity; me_dst->remesh_mode = me_src->remesh_mode; /* Copy texture space. */ diff --git a/source/blender/blenkernel/intern/mesh_remesh_voxel.c b/source/blender/blenkernel/intern/mesh_remesh_voxel.c index 92e180601d7..c92bc25d943 100644 --- a/source/blender/blenkernel/intern/mesh_remesh_voxel.c +++ b/source/blender/blenkernel/intern/mesh_remesh_voxel.c @@ -295,7 +295,7 @@ 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) +Mesh *BKE_mesh_remesh_voxel_to_mesh_nomain(Mesh *mesh, float voxel_size, float adaptivity) { Mesh *new_mesh = NULL; #ifdef WITH_OPENVDB @@ -303,7 +303,8 @@ Mesh *BKE_mesh_remesh_voxel_to_mesh_nomain(Mesh *mesh, float voxel_size) struct OpenVDBTransform *xform = OpenVDBTransform_create(); 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, 0.0, false); + new_mesh = BKE_mesh_remesh_voxel_ovdb_volume_to_mesh_nomain( + level_set, 0.0, (float)adaptivity, false); OpenVDBLevelSet_free(level_set); OpenVDBTransform_free(xform); #else diff --git a/source/blender/editors/object/object_remesh.c b/source/blender/editors/object/object_remesh.c index c2616c792e9..2c05ae14f2e 100644 --- a/source/blender/editors/object/object_remesh.c +++ b/source/blender/editors/object/object_remesh.c @@ -111,13 +111,14 @@ static int voxel_remesh_exec(bContext *C, wmOperator *op) ED_sculpt_undo_geometry_begin(ob); } - new_mesh = BKE_mesh_remesh_voxel_to_mesh_nomain(mesh, mesh->remesh_voxel_size); + new_mesh = BKE_mesh_remesh_voxel_to_mesh_nomain( + mesh, mesh->remesh_voxel_size, mesh->remesh_voxel_adaptivity); if (!new_mesh) { return OPERATOR_CANCELLED; } - if (mesh->flag & ME_REMESH_FIX_POLES) { + if (mesh->flag & ME_REMESH_FIX_POLES && mesh->remesh_voxel_adaptivity <= 0.0f) { new_mesh = BKE_mesh_remesh_voxel_fix_poles(new_mesh); BKE_mesh_calc_normals(new_mesh); } diff --git a/source/blender/makesdna/DNA_mesh_defaults.h b/source/blender/makesdna/DNA_mesh_defaults.h index a4354232cf7..f605827d120 100644 --- a/source/blender/makesdna/DNA_mesh_defaults.h +++ b/source/blender/makesdna/DNA_mesh_defaults.h @@ -34,6 +34,7 @@ .smoothresh = DEG2RADF(30), \ .texflag = ME_AUTOSPACE, \ .remesh_voxel_size = 0.1f, \ + .remesh_voxel_adaptivity = 0.0f, \ .flag = ME_REMESH_FIX_POLES | ME_REMESH_REPROJECT_VOLUME, \ } diff --git a/source/blender/makesdna/DNA_mesh_types.h b/source/blender/makesdna/DNA_mesh_types.h index 1e7c12e97bc..fb9e522dfa9 100644 --- a/source/blender/makesdna/DNA_mesh_types.h +++ b/source/blender/makesdna/DNA_mesh_types.h @@ -190,8 +190,9 @@ typedef struct Mesh { short totcol; float remesh_voxel_size; + float remesh_voxel_adaptivity; char remesh_mode; - char _pad1[7]; + char _pad1[3]; /** Deprecated multiresolution modeling data, only keep for loading old files. */ struct Multires *mr DNA_DEPRECATED; diff --git a/source/blender/makesrna/intern/rna_mesh.c b/source/blender/makesrna/intern/rna_mesh.c index ce2911cbb01..d5fc422a9f9 100644 --- a/source/blender/makesrna/intern/rna_mesh.c +++ b/source/blender/makesrna/intern/rna_mesh.c @@ -2995,6 +2995,17 @@ static void rna_def_mesh(BlenderRNA *brna) "values preserve finer details"); RNA_def_property_update(prop, 0, "rna_Mesh_update_draw"); + prop = RNA_def_property(srna, "remesh_voxel_adaptivity", PROP_FLOAT, PROP_DISTANCE); + RNA_def_property_float_sdna(prop, NULL, "remesh_voxel_adaptivity"); + RNA_def_property_range(prop, 0.0f, 1.0f); + RNA_def_property_ui_range(prop, 0.0f, 1.0f, 0.01, 4); + RNA_def_property_ui_text( + prop, + "Adaptivity", + "Reduces the final face count by simplifying geometry where detail is not needed, " + "generating triangles. A value greater than 0 disables Fix Poles"); + RNA_def_property_update(prop, 0, "rna_Mesh_update_draw"); + prop = RNA_def_property(srna, "remesh_smooth_normals", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "flag", ME_REMESH_SMOOTH_NORMALS); RNA_def_property_ui_text(prop, "Smooth Normals", "Smooth the normals of the remesher result"); |