Fix #106425: Mantaflow guiding with domains is broken #117067

Merged
Philipp Oeser merged 1 commits from lichtwerk/blender:106425_b into main 2024-01-15 12:31:53 +01:00
2 changed files with 12 additions and 12 deletions

View File

@ -60,6 +60,7 @@ MANTA::MANTA(int *res, FluidModifierData *fmd)
mUsingDiffusion = (fds->flags & FLUID_DOMAIN_USE_DIFFUSION) && mUsingLiquid;
mUsingViscosity = (fds->flags & FLUID_DOMAIN_USE_VISCOSITY) && mUsingLiquid;
mUsingMVel = (fds->flags & FLUID_DOMAIN_USE_SPEED_VECTORS) && mUsingLiquid;
mUsingGuiding = (fds->flags & FLUID_DOMAIN_USE_GUIDE);
mUsingDrops = (fds->particle_type & FLUID_DOMAIN_PARTICLE_SPRAY) && mUsingLiquid;
mUsingBubbles = (fds->particle_type & FLUID_DOMAIN_PARTICLE_BUBBLE) && mUsingLiquid;
mUsingFloats = (fds->particle_type & FLUID_DOMAIN_PARTICLE_FOAM) && mUsingLiquid;
@ -69,7 +70,6 @@ MANTA::MANTA(int *res, FluidModifierData *fmd)
mUsingFire = (fds->active_fields & FLUID_DOMAIN_ACTIVE_FIRE) && mUsingSmoke;
mUsingColors = (fds->active_fields & FLUID_DOMAIN_ACTIVE_COLORS) && mUsingSmoke;
mUsingObstacle = (fds->active_fields & FLUID_DOMAIN_ACTIVE_OBSTACLE);
mUsingGuiding = (fds->active_fields & FLUID_DOMAIN_ACTIVE_GUIDE);
mUsingInvel = (fds->active_fields & FLUID_DOMAIN_ACTIVE_INVEL);
mUsingOutflow = (fds->active_fields & FLUID_DOMAIN_ACTIVE_OUTFLOW);

View File

@ -3721,6 +3721,17 @@ static void fluid_modifier_processDomain(FluidModifierData *fmd,
const char *relbase = BKE_modifier_path_relbase_from_global(ob);
BLI_path_abs(fds->cache_directory, relbase);
/* If 'outdated', reset the cache here. */
if (is_startframe && mode == FLUID_DOMAIN_CACHE_REPLAY) {
PTCacheID pid;
BKE_ptcache_id_from_smoke(&pid, ob, fmd);
if (pid.cache->flag & PTCACHE_OUTDATED) {
BKE_ptcache_id_reset(scene, &pid, PTCACHE_RESET_OUTDATED);
BKE_fluid_cache_free_all(fds, ob);
fluid_modifier_reset_ex(fmd, false);
}
}
/* Ensure that all flags are up to date before doing any baking and/or cache reading. */
objs = BKE_collision_objects_create(
depsgraph, ob, fds->fluid_group, &numobj, eModifierType_Fluid);
@ -3735,17 +3746,6 @@ static void fluid_modifier_processDomain(FluidModifierData *fmd,
MEM_freeN(objs);
}
/* If 'outdated', reset the cache here. */
if (is_startframe && mode == FLUID_DOMAIN_CACHE_REPLAY) {
PTCacheID pid;
BKE_ptcache_id_from_smoke(&pid, ob, fmd);
if (pid.cache->flag & PTCACHE_OUTDATED) {
BKE_ptcache_id_reset(scene, &pid, PTCACHE_RESET_OUTDATED);
BKE_fluid_cache_free_all(fds, ob);
fluid_modifier_reset_ex(fmd, false);
}
}
/* Fluid domain init must not fail in order to continue modifier evaluation. */
if (!fds->fluid && !fluid_modifier_init(fmd, depsgraph, ob, scene, mesh)) {
CLOG_ERROR(&LOG, "Fluid initialization failed. Should not happen!");