Fix T73680: Scene and fluid modifier gravity are scaled differently

Reviewers: sebbas

Differential Revision: https://developer.blender.org/D7483
This commit is contained in:
Jacques Lucke 2020-04-23 15:10:20 +02:00
parent 6524aaf685
commit 694c0547c2
Notes: blender-bot 2023-02-14 05:53:42 +01:00
Referenced by issue #73680, Gravity in fluid simulation
3 changed files with 24 additions and 6 deletions

View File

@ -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

View File

@ -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;

View File

@ -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.
*