ベクトルポテンシャルを用いた 3 次元流れ場の編集
A Method for Editing 3D Flow Fields Using Vector Potential
佐藤 周平1

土橋 宜典2Syuhei Sato Yoshinori Dobashi
1

UEI リサーチ

2

楽 詠灝3

岩崎 慶41

Yonghao Yue Kei Iwasaki

北海道大学/JST CREST

3

コロンビア大学

4

西田 友是15
Tomoyuki Nishita

和歌山大学

5

広島修道大学

まえがき

1

近年，CG 技術の発達により写実的な流体映像が映画やゲームなどに多く用いられている．その中でも，煙，水，炎といった非圧縮性流体が多く用いられる．これら映像制作では，所望の映像を作成するために，高コストの流体シミュレーションとパラメータの調整を繰り返し行う．
これは非常に時間のかかる作業である．再度シミュレーションを実行せずに，流体流れ場を編集できれば，このような問題を解決することができる．しかし，単純に流図 1：提案手法の概要

れ場を編集した場合，流体の非圧縮性が保たれず，意図していない場所から流体が湧き出したり，消えたりする．
そこで，本研究では，非圧縮性を保ったまま，流体の流れ場を編集する方法を提案する．非圧縮性の保持は，流体の流れ場をベクトルポテンシャルへ変換し，ベクトルポテンシャル上で編集を行うことで実現する．本稿では，格子法による流体シミュレーションを対象とする．また，編集として，流速の変更，障害物の追加が可能である．
提案手法により，シミュレーションにより生成された単一の流れ場から，様々な流れ場を作成することができる．

提案手法

2

理に従っているため，まずこの分解について説明する．
Helmholtz-Hodge 分解において，任意のベクトル場 w は，次式に示すように divergence-free 成分と curl-free 成分とに分解することができる．

w      ψ(1)

ここで， はスカラーポテンシャルであり，はベクトルポテンシャルである．右辺の第一項目が curl-free 成分(   ( )  0 )であり，第二項目が divergence-free 成分(   (  ψ)  0 )である．Navier-Stokes 方程式を解くこと

提案法では，非圧縮性を保ちつつ局所的に流速を変えにより得られる速度場は，divergence-free 成分のみで構成るなどの編集を行う．そのためにベクトルポテンシャル

さ れ る ． こ れ は ， Navier-Stokes 方 程 式 の 圧 力 項 が ，を利用する．ベクトルポテンシャルと速度場 v とには，Helmholtz-Hodge 分解を用いて計算されるからである．こv=∇×の関係があり，定義から   (  ψ)  0 となるため，の理由の詳細については文献[3]を参照していただきたい．

ベクトルポテンシャルに対し編集を行うことで，常に非そのため，次式のように，速度場をベクトルポテンシャ圧縮性を満たした速度場を得ることができる．

ルのみで表現することができる．

v   ψ

提案手法の概要を図 1 に示す．まず，格子法による流体シミュレーションを用いて，入力速度場 v を作成する．

2.2(2)ベクトルポテンシャルの算出

そして，作成した速度場データをベクトルポテンシャル

次に，速度場からベクトルポテンシャルを算出する方へ変換する．次に，ランタイムにおいて，ユーザが編法について説明する．まず，式(2)の両辺に curl 演算子を集操作を行い，各編集に応じた処理をベクトルポテンシ作用させる．

ャルに対し適用する．最後に，ユーザの編集が適用され

  v    (  ψ)

たベクトルポテンシャルに，curl 演算子(∇×)を作用させ，この式は，ベクトルラプラシアンを用いて以下のように編集後の速度場を生成する．そして，煙の密度などのス書き換えることができる．

カラー量を編集後の速度場に従って移流させ流れを可視化する．以下では，各処理の詳細について説明する．

2.1

Helmholtz-Hodge 分解

上述したように，本手法では流体の速度場をベクトル  v  (  ψ)  2 ψ(3)(4)

ただし，上式では一意にベクトルポテンシャルを求めることができない．一般にベクトル場を一意に求める場合，∇×の値，∇∙の値，境界条件の 3 つが必要である[1]．

ポテンシャルへ変換する．速度場がベクトルポテンシャ

この 3 つのうち，∇×の値は式(2)により決定されており，ルにより表現できることは Helmholtz-Hodge 分解[1]の定境界条件については=0 として設定する．しかし，∇∙の値が，以下に示すように，の自由度∇p により一意に場は定義より，常に非圧縮条件を満たす．

定まっていないため，を一意に求めることができない．

3ψ  Φ  p

実験結果

(5)

図 2 に提案法により作成した結果を示す．シミュレー

ここで，はベクトルポテンシャル，p は任意のスカラーションの格子数は 128x128x128 である．また，すべての場である．この自由度∇p は，curl 演算子を作用させれば例において，毎ステップ一定の割合で煙の密度量を減衰0 となるため，入力速度場 v を求めるのみであれば，一させている．図 2 左が入力速度場により作成された煙の意に求まらなくとも問題はない．しかし，本手法では流結果であり，中央および右の結果は，入力速度場の鉛直速の変更などの編集において，ベクトルポテンシャル方向の上部に対し，流速の変更の編集を行ったものであの値を局所的に増大させるなどの処理を行う．その際，る．中央の結果では流速を増大させているため，上部に∇p が時間的に大きく異なると，編集後の速度場の時間的おいて煙がより大きく広がっているのが確認できる．まコヒーレンスが保たれない場合がある．そこで，式(5)をた，鉛直上向きの流速も増しているため，元と比べ，密に対する Helmholtz-Hodge 分解であると考え，その curl-度が減衰する前に解析空間の上部に達している．右の例

free 成分である∇p を 0，すなわち∇∙=0 とすることで∇∙では流速を減少させているので，入力と比べ上の部分のの値を定め，一意にを求める．これを式(4)に適用し，広がりがなく，より直線的な流れ場が生成できる．また，最終的に本手法では以下のポアソン方程式を解くことで，鉛直上向きの速度も小さくなっているため，元よりも煙ベクトルポテンシャルを求める．の上昇を遅くすることができる．加えて上昇を遅くして  v  2 ψ(6)上式により算出されたベクトルポテンシャルに対し，次節の編集操作を行い，所望の流れ場を生成する．

2.3

いるので，元と比べ空間の上部に達する前に煙の密度が減衰する．これまで述べたように，提案法では，ベクトルポテンシャルに対し編集を行っているため，生成される速度場は常に非圧縮条件を満たす．

ベクトルポテンシャルの編集

前節で求めたベクトルポテンシャルに対し，所望の流次に，速度場に直接編集を加えた場合との比較を図 3れ場が得られるよう，ユーザが編集を行う．編集要素とに示す．上段左の入力に対し，図 2 の中央の結果と同様しては，流速の変更，障害物の追加を行うことができる．の編集を，速度場，ベクトルポテンシャルに対して行っこれらの編集処理には，文献[2]の方法を用いている．流たものが，それぞれ図 3(b)，(c)である．また，(b)の一部

速の変更では，ベクトルポテンシャルに対し，次式のよを拡大した画像を(d)に，図 3(b)，(c)の速度場について，発散を計算し，奥行き方向の中央のスライスのみを可視

うに滑らかな関数 A を作用させる．

ψ(x)  ( A(x)  1)ψ(x)(7)

ここで， ψ  は編集後のベクトルポテンシャルであり，xは速度場中の位置座標を表す．本稿では，A(x)として，ユーザが指定した流れ場中の任意の位置 xc を中心としたガウス関数 A(x)=exp(|x-xc|)を用いる．>0 の場合流速を増大させ，0>>-1 の場合は流速が小さくなる．次に，障害物の追加では，以下の式により，編集後のポテンシャルを設定する．

ψ(x)   (r)ψ(x)  (1   (r))n(n  ψ(x))

化したものを図 3(e)，(f)にそれぞれ示す．また，図 3(e)，(f)の色は赤が 1.0，緑が 0.0，青が-1.0 を表し，中間色はそれぞれの値の間をとる．速度場を直接編集した場合，(e)に示すように，発散が 0 ではない箇所が多数確認できる．また，(d)に示すように，煙にノイズが発生しているのがわかる．これは(e)において，発散が正や負の箇所が入り乱れて存在していることから，煙の湧き出しや消失が一定の範囲に多数発生し，ノイズのような結果となったと思われる．このノイズは特に，アニメーションを行(8)

ここで，n は追加された障害物上の頂点の法線を表し，位置 x において最も近い頂点の法線が選択される．また，

(r)は上記で選択された頂点の位置と x との距離 r に応じった際に顕著に表れる．一方提案法では，(f)に示すように発散が 0 であるため，そのようなノイズは発生しない．

4

まとめと今後の課題
本稿では，流体の非圧縮性を保ったまま，所望の流れて変化する係数で，障害物を構成する頂点に近い位置ほ場を作成する手法を提案した．また，編集に適したベク

ど 0 に近くなり，障害物から遠い位置では 1 となる．もトルポテンシャルを一意に求めるための方法も提案した．

し，障害物の付近のみ ψ(x)  n(n  ψ(x)) とした場合，元提案法により，流体シミュレーションにより得られた速のと ψ  が設定された領域間に不連続が発生する．この度場をベクトルポテンシャルへ変換し，ベクトルポテン

場合最終的に生成される速度場にも不連続が発生するた

シャルに対して編集処理を行うことで，流体の非圧縮性め，式(8)のように設定する必要がある

を保持しつつ流れ場を編集することが可能である．

最後に，編集されたベクトルポテンシャルに curl 演算を行うことで，編集後の速度場を得る．生成される速度

今後の課題としては，非圧縮性に加え，エネルギー保存則も考慮した編集を行うことが挙げられる．

参考文献[1] Bhatia, H., Norgard, G., Pascucci, V., and Bremer, P. T.
2013. The Helmholtz-Hodge Decomposition — A Survey.
IEEE Transactions on Visualization and Computer
Graphics, Vol. 19, 8, 1386-1404.

[2] Bridson, R., Hourihan, J., and Nordenstam, M. 2007. Curlnoise for procedural fluid flow. ACM Transactions onGraphics 26, 3, Article 46.
[3] Stam, J. 1999. Stable fluids. In Proceedings of ACM
SIGGRAPH 1999, Annual Conference Series, 121–128.

図 2：実験結果（左：入力，中央・右：提案法）(a)入力(b)速度場を直接変形(c)提案手法(d)(b)の一部拡大(e)(b)の発散(e)(c)の発散

図 3：比較結果