Control_Dynamics Houdini 01

**`Dopnetwork`**
:HooudiniFX15.5.673

----
今回はHoudiniを通して
VFXで用いられるSimulationという事を前提にしております。
数値や挙動の正確性が求められる物理simuationとは異なります。

先に言うときますが....
Simulationは難しいです。

ですが...
一つずつ細かく整理していけば案の定、自分いけるやん！！
って感じるようになります。

数学物理の世界になりますのでどうしても
ある程度、自学自習が必要だと僕は思っております。

これからSimulationを用いてFX_artistを目指す方や
とりあえずSimulationFxを勉強したい人向けに記述していこうと思います。

---
VFX_Simulationを実行するAppは
たくさんあります。
Maya,Houdini,C4D,Max...
Plug-inもたくさんあります。

それぞれいい部分と悪い部分があります。
GPU_SimulationもあればCPU_Simulationがあります。

何が言いたいっかていうと
自分が学生の時にSimulationを勉強していた頃に
本当にざっくりした情報しかなくめちゃくちゃ大変でした。
その時にあのPlug-inはいい。あのソフトはダメだという事を
情報として出回っていて、よく混乱を招いていました。

Maya_FluidでもHoudini_Fluidでも結果を求めるアプローチが違うだけで
コアの部分では両者とも同じ事を求めています。

使用するtoolに左右されず
勉学に励んでみてください。

以下の書籍を事前にさらっと読んでおくといいかもです。

CGのための物理シミュレーションの基礎
https://book.mynavi.jp/ec/products/detail/id=24247

ゲーム制作者のための物理シミュレーション　剛体編
http://book.impress.co.jp/books/3282

ちなみに自分のメインオペレーションToolは
HoudiniFX,RealFlowです。

----

さて...
本題に入ります。

**`HoudiniでSimulationする場合はDopを使用します。`**


![Basic_Dop.PNG](https://qiita-image-store.s3.amazonaws.com/0/179218/b520c7c1-4789-3c58-1c47-4d10b7e39c06.png)



DopNetworkはSop内にも呼び出すことができます。
:Tutorial等でも基本的な部分は触れているので基本的な説明は省きます。

**`HoudiniではこういったStream(Data_Flow)でDataを制御していきます。`**
![Basic_Setup.PNG](https://qiita-image-store.s3.amazonaws.com/0/179218/f13caa61-da7d-a253-8741-92be79c4c610.png)

視覚的に分かりやすいですよね。

二つのTargetがあって
一方にはGravityを設定しています。
影響するのは一方だけでってゆう簡単なSystemを構築しています。

基本的な構造はこんな感じですね。

---

`MicroSolverについて`

Dop内でよく使うSolverの拡張機能みたいなモノやと思ってください。
以下はMicroSolver一覧です。

![MicroSolver.PNG](https://qiita-image-store.s3.amazonaws.com/0/179218/7cce9b06-fb8c-e0a7-11ef-30d8792e6de8.png)

以下はMicroSolverの論文です

Controlling Fluid Simulations with Custom Fields in Houdini Master Thesis
https://nccastaff.bournemouth.ac.uk/jmacey/MastersProjects/MSc09/Claes/thesis/PeterClaesThesis.pdf

こちらも参考になります
Art Directed Fluid Flow With Secondary Water Effects
http://www.diva-portal.org/smash/get/diva2:559073/FULLTEXT01.pdf


主に使われるのはVolume Simulationで
`僕自身Fluid_Simulationでゴリゴリ使用しています。`
**以下はMy_method FluidSolverです。**
![My_RnD_MicroSolver.PNG](https://qiita-image-store.s3.amazonaws.com/0/179218/611236d8-21ec-3e1f-0440-038012348ffd.png)

僕はSideFxの開発者ではないので
細かい部分はわかんないので実際の挙動と照らしながら
アルゴリズムを構築していくスタイルをとっています。

---
*`Simulationで扱うGeometryは大きく分けて....`*
:Topology
:Volume
と僕は認識しています。

Rigid,Cloth...
Water,Smoke...
こんな感じでしょう。

アクセスできる最小単位について考えてみましょう。(選択できるDataと考えましょう)
頂点で構成されているモノはpointを選択できるため、扱いが容易なのが分かります。
:色情報をvertexに持たせたり、選択する幅がかなりありますよね。(vertex-point-primitive-detail)

一方で
Volumeを選択したい場合...
最小単位は空間になります。
つまりは場所で選択するということになります。
Houdiniだと位置座標はその空間の中心点を参照してくれます。
空間については書籍等で勉強してください。

一気にざっくりしたDataになりますよね。
空間って...
Volumeになると今までpointやらで制御してきたものとは扱いが
変わりますので、一気にハードルがあがります。

学校とかでもあまり取り扱ってくれないような気がします。

以下はDataを可視化したものです。
![Acsess_type.PNG](https://qiita-image-store.s3.amazonaws.com/0/179218/f194a0db-85f8-d287-64ab-6b2bc0c922ba.png)

HodiniのVolumeはprimitive_levelで制御していきます。

```
@name_density
@density 
```
てな感じです。

前置きが長くなりましたね。

これらの概念がHoudiniのSimulationで非常に重要になってきます。

もう一回いいます
Dataの取捨選択が非常に重要になります。

Sopで色々DataのControlの幅を増やす練習をしてからSimualtionに入るのも賢い手かもしれません。


---

実装していきましょう。

SampleのMicroSolverについては需要があれば公開いたします。 
***`次号に続く`***