動的な障害物と流体のインタラクションを実現するには(1)

完全な動的なシーンへの対応と言うことであれば、単なる遮蔽だけでなく、3Dオブジェクトの移動やアニメーションが流体物理シミュレーションに影響を及ぼすという処理にまで対応させる必要がある。

左は動かない遮蔽物との単なる合成。右は羽ばたく羽根が煙を掻き乱している様子。これを実装する

とても高度な物のように思えるが、1つ1つ基本的なことから考えてみる。

最初に取りあげるのは、流体が遮蔽物に衝突した場合への配慮だ。

流体物が遮蔽物に衝突することに対応する

この処理については、シミュレーション計算の際に「流体は障害物に侵入できない」「移動する障害物は流体に運動量を与える」といった「境界条件」を加えることで対処していく。

密度の境界条件は「障害物の内部に移流しない」ということ。

圧力の境界条件は「障害物の隣接する流体への圧力変化はない」ということ。

これらは現実世界での出来事を想像するとイメージがしやすいだろう。

密度の境界条件

圧力の境界条件

やや難しいのが障害物が流体の速度に及ぼす影響についての境界条件。

動く境界はその法線方向の速度成分がそのまま流体に与えられる(実質コピーされる)として処理する。

例えば障害物が11時方向に移動し、流体が2時方向に移動しているときを考える(図a)。この流体に対する境界面の法線方向の速度成分は9時方向に少しあるのでこれを、流体側の法線方向の速度にコピーする(図b)。最終的に流体の新しい速度は10時方向になる(図c)。

障害物が押すようなときにはこれはイメージしやすい。障害物が引くようなときには流体がついてくる、というようなイメージになるだろうか。

(図a)…速度の境界条件

(図b)…障害物の法線方向の速度が流体に伝搬する

(図c)…流体の新しい速度ベクトルの完成