Fix T43220, T47551: collider scaling or rotation causes smoke to explode.
authorAlexander Gavrilov <angavrilov@gmail.com>
Mon, 18 Jul 2016 16:03:05 +0000 (19:03 +0300)
committerAlexander Gavrilov <angavrilov@gmail.com>
Tue, 2 Aug 2016 16:47:31 +0000 (19:47 +0300)
commitf5933330998dc6c1aff9dc9fca32469717bf4dc3
treebe136e68c4c63a46af81147d5eb7ce47e0f69ecf
parentae9e9700c28f70db98359c98f5b29d4454cc9a56
Fix T43220, T47551: collider scaling or rotation causes smoke to explode.

The problem happens because smoke collides only with the surface of the
collider and uses incompressible fluid solver. This means that scaling
the collider tries to compress or decompress fluid within the volume of
the collider, which can't be handled by the simulation. Fast rotation
likely also causes transient scaling due to emulation of arcs by chords.

This can be fixed by finding compartments completely isolated by obstacles
from the rest of the domain, and forcing total divergence within each one
to be zero so that equations are solvable. Physical validity is somewhat
dubious, but without this the solver simply breaks down.

From the physics point of view, the effect of the correction should be
similar to opening a hole from every cell to another dimension that lets
an equal amount of air to pass through to balance the change in volume.

Reviewers: miikah, lukastoenne

Reviewed By: lukastoenne

Subscribers: dafassi, scorpion81, #physics

Maniphest Tasks: T43220, T47551

Differential Revision: https://developer.blender.org/D2112
intern/smoke/intern/FLUID_3D.cpp
intern/smoke/intern/FLUID_3D.h