Control_Dynamics Houdini 02
前回記事はコチラです。
Control_Dynamics Houdini 01
http://qiita.com/ts_bros/items/c8c9ace7863e8b93df4c
今回作っていくのは....
Advect_Solverとでも命名しますか。
移流に関して色々アプローチしていきます。
Lesson01
Advect?ってなんじゃワレェ!!!
超簡単でいいんでサラッと以下のコラム見ておくといいかもです。
パラパラな感じで本当に大丈夫です。
イメージしながら作っていくと理解度が全然違うので、お勧めします。
ソフトウェアクレイドル
流体解析の基礎講座 第1回
http://www.cradle.co.jp/tec/column01/index.html
流体を動かすためには流体の動きを数字やら文字やらで
記述した式が必要です。
はぁ...なんのことやらサッパリすわ
A= B+C*tみたいなノリで
自分がわかりやすい解釈で構いません。
何かしらの答えを求める時は
簡単な式をたてますよね?
コンビニでコーラとポテチを買う時だって計算式を立てています。
お会計 = コーラの値段+ポテチの値段となりますよね?
数学物理の世界でもたくさんの学者さんがあらゆる
日常の現象を数字で表せれないか解明し続けています。
CG/VFXの流体の動きも式で管理されています。
流体の動き=????
ってな感じです。
shelfをポチッと押してSimulationが働き流体が動くのは
Houdiniがこれらの式を計算しているから動くのです。
Advectってのはこの式の一部になります。
移流項
ってやつですね。
流体の速度に沿って移動するっていうData
を記述しています。
Advect
がないと流体が動いてくれません。`
(圧力で密度変化するとか抜きで)
人間が歩くって動作も
方向とスピードがきまってるから動けるわけで
これらが定まっていないと静止したままですよね。
とりあえず流体を動かしたい場合...
以下の様に簡単な式を立ててみましょう。
流体の動き = 流体の速度+進行方向
と記述する事ができます。
Lesson02
Houdiniで実装してみよう
Hip_Fileは以下の置いておきます。
https://www.dropbox.com/s/5fq23867ea1vgkw/ControlFluid.hipnc?dl=0
簡単に作ったモノが用意されていると思います。
移流項は
流体の速度に沿って移動するDataなので
流体がVolumeDataならば...
速度、方向もVolumeDataでなくてはなりません。
え?どうしてって思った方
イメージしてください。
場所で選択しているモノは空間定義になります。
あの場所はDensity=1です。と一緒です。
あの場所が持つ速度は?
あの場所が持つ方向は?
こういう風に考えると分かりやすいですよね。
さて方向や速度を数字で定義するのに
使うのが...
vector Analysisです。
(ベクトル解析)
でできましたね笑
書籍を読んでる人はここで知識のPieceが繋がり始めます。
簡単に式にしてみます。
速度= v
とした場合
速度は定義する事が出来るが...進行方向が分かりません。
そこで3次元空間のデカルト座標を加えて位置情報を作ります。
方向= x+y+z
とします。
なので
方向をさだめた速度 = vel
vel = xv +xy + xz
と定める事ができます。
Houdini的に記述すると
vector vel = set(0,0,0);
となります。
ベクトルの総和や逆ベクトルも簡単に作る事ができますよね。
このベクトルを仮に流速と呼ぶ事にしましょう。
さてあとは動かすだけです。
AdvectのMicroSolverを一つ使います。
:Gas Advectってやつです。
:AdvectさせたいVolume_Fieldは?
:流速のFieldは?(vel)
聞かれているんで
それぞれ指定してあげましょう!
Dopに読み込まれているFieldを参照してください
Simulationを実行してみましょう。
Densityに変化がありましたか?
それなら
おめでとうございます!
変化がないぞ!!
って人は
:参照しているField_Name
:Simulation_Process
を見直してみてください。
これがSolver実装の入門ですね。
ここでおさらいです。
:流体を動かすには、流速が必要。
:動きを表すDataはベクトルを用いて表現される。
:Fieldは空間定義
:Simulationは式で動く
さらに...
気づいた人もいるんじゃないかと思いますが
Field_Nameって別になんでもいいんですよ。
DensityはDensityじゃなきゃダメってゆうのはないす。
StartとGoalさえあっていればOK!
僕なんか、Advectionを更新する時は、Flow,Curl,Grad,Div,Build_Curl
てな具合でガンガン作ってベクトルをカスタマイズしています。
今は、物理モデルを無視した状態でFluid_Solverを実装しています。
これに圧力、摩擦、外力なんか考慮すると
もう立派なSmoke_Solverになっていきます。
これらをBaseに少し複雑なAdvection_Modelを作成していきます。
次号に続く
重要topic
:Advect
:vector Analysis(ベクトル解析)
:流体を動かすには、流速(ベクトル)が必要。
ここ間違っているよぉ等ございましたら、ご連絡頂けると嬉しいです。