Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSebastián Barschkis <sebbas@sebbas.org>2020-01-24 19:12:35 +0300
committerSebastián Barschkis <sebbas@sebbas.org>2020-01-24 19:23:50 +0300
commit7a9f102537c1d4d6db7f4d994baf8dcd35cfcb04 (patch)
tree7e70ee4d0dc09a70bb2c1da8c59417823df25723 /source/blender/blenkernel
parent64b152c2547e3da80c52347a89d6c1f71d3287bc (diff)
Fix T72975: [Mantaflow] Mesh generation bug
The initial value for phi was too high.
Diffstat (limited to 'source/blender/blenkernel')
-rw-r--r--source/blender/blenkernel/intern/fluid.c25
1 files changed, 14 insertions, 11 deletions
diff --git a/source/blender/blenkernel/intern/fluid.c b/source/blender/blenkernel/intern/fluid.c
index 1b483960c91..51e6039f86f 100644
--- a/source/blender/blenkernel/intern/fluid.c
+++ b/source/blender/blenkernel/intern/fluid.c
@@ -85,6 +85,9 @@
/** Time step default value for nice appearance. */
#define DT_DEFAULT 0.1f
+/** Max value for phi initialization */
+#define PHI_MAX 9999.0f
+
static void BKE_fluid_modifier_reset_ex(struct FluidModifierData *mmd, bool need_lock);
#ifdef WITH_FLUID
@@ -927,10 +930,10 @@ static void update_obstacles(Depsgraph *depsgraph,
/* Use big value that's not inf to initialize levelset grids. */
if (phi_obs_in) {
- phi_obs_in[z] = FLT_MAX;
+ phi_obs_in[z] = PHI_MAX;
}
if (phi_guide_in) {
- phi_guide_in[z] = FLT_MAX;
+ phi_guide_in[z] = PHI_MAX;
}
if (num_obstacles) {
num_obstacles[z] = 0;
@@ -1551,7 +1554,7 @@ static void update_mesh_distances(int index,
float surface_thickness,
int use_plane_init)
{
- float min_dist = FLT_MAX;
+ float min_dist = PHI_MAX;
/* Ensure that planes get initialized correctly. */
if (use_plane_init) {
@@ -1585,12 +1588,12 @@ static void update_mesh_distances(int index,
/* Count for ray misses (no face hit) and cases where ray direction matches face normal
* direction. */
int miss_cnt = 0, dir_cnt = 0;
- min_dist = FLT_MAX;
+ min_dist = PHI_MAX;
for (int i = 0; i < ray_cnt; i++) {
BVHTreeRayHit hit_tree = {0};
hit_tree.index = -1;
- hit_tree.dist = FLT_MAX;
+ hit_tree.dist = PHI_MAX;
normalize_v3(ray_dirs[i]);
BLI_bvhtree_ray_cast(tree_data->tree,
@@ -1640,7 +1643,7 @@ static void update_mesh_distances(int index,
BVHTreeRayHit hit_tree = {0};
hit_tree.index = -1;
- hit_tree.dist = FLT_MAX;
+ hit_tree.dist = PHI_MAX;
normalize_v3(ray);
BLI_bvhtree_ray_cast(
@@ -1695,7 +1698,7 @@ static void sample_mesh(FluidFlowSettings *mfs,
float sample_str = 0.0f;
hit.index = -1;
- hit.dist = FLT_MAX;
+ hit.dist = PHI_MAX;
nearest.index = -1;
nearest.dist_sq = mfs->surface_distance *
mfs->surface_distance; /* find_nearest uses squared distance */
@@ -1717,7 +1720,7 @@ static void sample_mesh(FluidFlowSettings *mfs,
* point is at least surrounded by two faces */
negate_v3(ray_dir);
hit.index = -1;
- hit.dist = FLT_MAX;
+ hit.dist = PHI_MAX;
BLI_bvhtree_ray_cast(tree_data->tree,
ray_start,
@@ -2779,10 +2782,10 @@ static void update_flowsfluids(struct Depsgraph *depsgraph,
/* Grid reset before writing again */
for (z = 0; z < mds->res[0] * mds->res[1] * mds->res[2]; z++) {
if (phi_in) {
- phi_in[z] = FLT_MAX;
+ phi_in[z] = PHI_MAX;
}
if (phiout_in) {
- phiout_in[z] = FLT_MAX;
+ phiout_in[z] = PHI_MAX;
}
if (density_in) {
density_in[z] = 0.0f;
@@ -2862,7 +2865,7 @@ static void update_flowsfluids(struct Depsgraph *depsgraph,
else if (mfs->behavior == FLUID_FLOW_BEHAVIOR_GEOMETRY && !is_first_frame) {
apply_inflow_fields(mfs,
0.0f,
- FLT_MAX,
+ PHI_MAX,
d_index,
density_in,
density,