From 694c0547c21aa3a5087c0dd4323624358135f4ef Mon Sep 17 00:00:00 2001 From: Jacques Lucke Date: Thu, 23 Apr 2020 15:10:20 +0200 Subject: Fix T73680: Scene and fluid modifier gravity are scaled differently Reviewers: sebbas Differential Revision: https://developer.blender.org/D7483 --- source/blender/blenkernel/BKE_blender_version.h | 2 +- source/blender/blenkernel/intern/fluid.c | 13 ++++++++----- source/blender/blenloader/intern/versioning_280.c | 15 +++++++++++++++ 3 files changed, 24 insertions(+), 6 deletions(-) (limited to 'source') diff --git a/source/blender/blenkernel/BKE_blender_version.h b/source/blender/blenkernel/BKE_blender_version.h index cc029a3cbf9..c9b70d681f4 100644 --- a/source/blender/blenkernel/BKE_blender_version.h +++ b/source/blender/blenkernel/BKE_blender_version.h @@ -27,7 +27,7 @@ * \note Use #STRINGIFY() rather than defining with quotes. */ #define BLENDER_VERSION 283 -#define BLENDER_SUBVERSION 14 +#define BLENDER_SUBVERSION 15 /** Several breakages with 280, e.g. collections vs layers. */ #define BLENDER_MINVERSION 280 #define BLENDER_MINSUBVERSION 0 diff --git a/source/blender/blenkernel/intern/fluid.c b/source/blender/blenkernel/intern/fluid.c index 83a431306f4..d4f54daa773 100644 --- a/source/blender/blenkernel/intern/fluid.c +++ b/source/blender/blenkernel/intern/fluid.c @@ -489,23 +489,26 @@ static void manta_set_domain_from_mesh(FluidDomainSettings *mds, static void manta_set_domain_gravity(Scene *scene, FluidDomainSettings *mds) { - float gravity[3] = {0.0f, 0.0f, -1.0f}; - float gravity_mag; + const float normalization_factor = 1.0f / 9.81f; /* Use global gravity if enabled. */ if (scene->physics_settings.flag & PHYS_GLOBAL_GRAVITY) { + float gravity[3]; copy_v3_v3(gravity, scene->physics_settings.gravity); /* Map default value to 1.0. */ - mul_v3_fl(gravity, 1.0f / 9.810f); + mul_v3_fl(gravity, normalization_factor); /* Convert gravity to domain space. */ - gravity_mag = len_v3(gravity); + float gravity_mag = len_v3(gravity); mul_mat3_m4_v3(mds->imat, gravity); normalize_v3(gravity); mul_v3_fl(gravity, gravity_mag); copy_v3_v3(mds->gravity, gravity); } + else { + mul_v3_fl(mds->gravity, normalization_factor); + } mul_v3_fl(mds->gravity, mds->effector_weights->global_gravity); } @@ -4839,7 +4842,7 @@ void BKE_fluid_modifier_create_type_data(struct FluidModifierData *mmd) mmd->domain->flags = FLUID_DOMAIN_USE_DISSOLVE_LOG | FLUID_DOMAIN_USE_ADAPTIVE_TIME; mmd->domain->gravity[0] = 0.0f; mmd->domain->gravity[1] = 0.0f; - mmd->domain->gravity[2] = -1.0f; + mmd->domain->gravity[2] = -9.81f; mmd->domain->active_fields = 0; mmd->domain->type = FLUID_DOMAIN_TYPE_GAS; mmd->domain->boundary_width = 1; diff --git a/source/blender/blenloader/intern/versioning_280.c b/source/blender/blenloader/intern/versioning_280.c index 329767ef202..d246eadb381 100644 --- a/source/blender/blenloader/intern/versioning_280.c +++ b/source/blender/blenloader/intern/versioning_280.c @@ -40,6 +40,7 @@ #include "DNA_constraint_types.h" #include "DNA_curve_types.h" #include "DNA_curveprofile_types.h" +#include "DNA_fluid_types.h" #include "DNA_freestyle_types.h" #include "DNA_genfile.h" #include "DNA_gpencil_modifier_types.h" @@ -5037,6 +5038,20 @@ void blo_do_versions_280(FileData *fd, Library *UNUSED(lib), Main *bmain) } } + /* Match scale of fluid modifier gravity with scene gravity. */ + if (!MAIN_VERSION_ATLEAST(bmain, 283, 15)) { + for (Object *ob = bmain->objects.first; ob; ob = ob->id.next) { + for (ModifierData *md = ob->modifiers.first; md; md = md->next) { + if (md->type == eModifierType_Fluid) { + FluidModifierData *fmd = (FluidModifierData *)md; + if (fmd->domain != NULL) { + mul_v3_fl(fmd->domain->gravity, 9.81f); + } + } + } + } + } + /** * Versioning code until next subversion bump goes here. * -- cgit v1.2.3