[Bf-blender-cvs] [a847fa4523d] sculpt-mode-features: added rebuild levelset after grid resampling

Martin Felke noreply at git.blender.org
Sat Apr 13 12:45:12 CEST 2019


Commit: a847fa4523dae102dc9bf24cf91d2b30af7aa3b5
Author: Martin Felke
Date:   Sat Apr 13 12:43:39 2019 +0200
Branches: sculpt-mode-features
https://developer.blender.org/rBa847fa4523dae102dc9bf24cf91d2b30af7aa3b5

added rebuild levelset after grid resampling

but in general, the current grid resampling approach still seems wrong... needs more thinking

===================================================================

M	intern/openvdb/openvdb_capi.cc
M	intern/openvdb/openvdb_capi.h
M	source/blender/modifiers/intern/MOD_remesh.c

===================================================================

diff --git a/intern/openvdb/openvdb_capi.cc b/intern/openvdb/openvdb_capi.cc
index 0d8e178553d..d5ff181c067 100644
--- a/intern/openvdb/openvdb_capi.cc
+++ b/intern/openvdb/openvdb_capi.cc
@@ -306,7 +306,7 @@ void OpenVDBLevelSet_CSG_operation(struct OpenVDBLevelSet *out, struct OpenVDBLe
 
 OpenVDBLevelSet* OpenVDBLevelSet_transform_and_resample(struct OpenVDBLevelSet *level_setA,
                                                         struct OpenVDBLevelSet *level_setB,
-														char sampler)
+														char sampler, float isolevel)
 {
 	openvdb::FloatGrid::Ptr sourceGrid = level_setA->OpenVDB_level_set_get_grid();
 	openvdb::FloatGrid::Ptr targetGrid = level_setB->OpenVDB_level_set_get_grid()->deepCopy();
@@ -355,6 +355,9 @@ OpenVDBLevelSet* OpenVDBLevelSet_transform_and_resample(struct OpenVDBLevelSet *
 		break;
 	}
 
+	targetGrid = openvdb::tools::levelSetRebuild(*targetGrid, isolevel, 1.0f);
+	openvdb::tools::pruneLevelSet(targetGrid->tree());
+
 	OpenVDBLevelSet* level_set = OpenVDBLevelSet_create(false, NULL);
 	level_set->OpenVDB_level_set_set_grid(targetGrid);
 
diff --git a/intern/openvdb/openvdb_capi.h b/intern/openvdb/openvdb_capi.h
index d5e2fd363bc..3e96d072e7a 100644
--- a/intern/openvdb/openvdb_capi.h
+++ b/intern/openvdb/openvdb_capi.h
@@ -182,7 +182,7 @@ void OpenVDBLevelSet_CSG_operation(struct OpenVDBLevelSet *out, struct OpenVDBLe
 
 struct OpenVDBLevelSet *OpenVDBLevelSet_transform_and_resample(struct OpenVDBLevelSet *level_setA,
                                                         struct OpenVDBLevelSet *level_setB,
-                                                        char sampler);
+                                                        char sampler, float isolevel);
 
 
 #ifdef __cplusplus
diff --git a/source/blender/modifiers/intern/MOD_remesh.c b/source/blender/modifiers/intern/MOD_remesh.c
index e73cf1af6d5..26d8e30e2e1 100644
--- a/source/blender/modifiers/intern/MOD_remesh.c
+++ b/source/blender/modifiers/intern/MOD_remesh.c
@@ -251,7 +251,7 @@ static struct OpenVDBLevelSet* csgOperation(struct OpenVDBLevelSet* level_set, C
 
 	if (vcob->sampler != OPENVDB_LEVELSET_GRIDSAMPLER_NONE)
 	{
-		level_set = OpenVDBLevelSet_transform_and_resample(level_set, level_setB, vcob->sampler);
+		level_set = OpenVDBLevelSet_transform_and_resample(level_set, level_setB, vcob->sampler, rmd->isovalue);
 	}
 
 	OpenVDBLevelSet_CSG_operation(level_set, level_set, level_setB, (OpenVDBLevelSet_CSGOperation)vcob->operation );



More information about the Bf-blender-cvs mailing list