HOUDINI
HoudiniDay 21

Mantis_Volume_Simulatorで遊ぼう

Mantis_Volume_Simulator1.0

praying-mantis (1).png


情報共有もろもろ含め
β版として...1.0verをリリースしました。

Uiも雑だし
Cache_CTRL&Render_Pipelineも考慮してないですけど...

とりあえずパフォーマンスから...
Mantis_Sim_Performance Shape
https://youtu.be/k4kXgieko8A
:右がSmoke_Solver 左がMantis
Mantis_Sim_ Turbulence_Flow
https://youtu.be/sIuOo28nzk8

Performance Surface_Based_Turburance
https://youtu.be/t-EFE49FMzA


Common Setting

Grid_Size {5,15,5}
Grid Res {0.1}
Voxels {[50,150,50]}
Voxel_TotalCounts {375,000}
Sim_time 200f


Simple_SmokeSolver

Screenshot from 2017-12-17 21-35-37.png

Sim_Time 31.424s
Total_Time 51.408s

Simple_SmokeSolver OpenCL

Screenshot from 2017-12-17 21-53-59.png

Sim_Time 14.669s
Total_Time 29.561s

Mantis_Volume_Simulator

Screenshot from 2017-12-17 21-45-33.png

Total_Time 27.196s

研究中Mantis_Volume_Simulator2.0
Screenshot from 2017-12-17 22-05-48.png

Sim_Time 11.649s
Total_Time 21.417s


How to Use
1:Download HDA_file for DropBox
https://www.dropbox.com/s/0vicodoaxh77pba/Mantis_Volume_Simulator1.0_blackbox.hdanc?dl=0

2:Seting HDA File (Non-Commercial Edition(BlackBOX)で作成しています)
HDAはHelpを参照することをおすすめします。

3:Build確認
Screenshot from 2017-12-17 22-16-38.png
OpenCLがうまく動作していれば普通に使えます。

4:Setting Parms&edit Volume_Shapes
Screenshot from 2017-12-17 22-28-48.png

5:ひたすら遊ぶ...


学習出来るジャンル
Parameter_CTRLでの
Grid Control
Volume Velosity
Viscosity Sim
Turbulence_Flow

マイクロソルバーのウンタラカンタラやる前に
まずは触ってみるのが一番です。

複雑なSimulationを構築する前にまずは全体像をガッチリと掴みましょう。


Tec Tips
OpenCL Based Simulator
Divergenceを見直しています。
Dissipationを見直しています。

使用FieldはDensity,Vel
その他はtemporary_Fieldとして扱っています。


DissipateはH_OpenCL&VEXで記述してみました

以下Source_Code
GAS_OPENCL

#include "interpolate.h" 
float lerpConstant( constant float * in, int size, float pos);

kernel void dissipate( 
                 int stride_x, 
                 int stride_y, 
                 int stride_z, 
                 int stride_offset, 
                 float timeinc, 
                 float time, 
                 float  eva_parm ,
                 global float * density 
)
{
 int idx = stride_offset +
            get_global_id(0) * stride_x +
            get_global_id(1) * stride_y +
            get_global_id(2) * stride_z;

            //Create Evapolate 
            float Invert_eva = -eva_parm;
                  Invert_eva +=1;
            float clp_min = 0;
            float clp_max =1;

            float evaporate = pow(clamp(Invert_eva,clp_min,clp_max),timeinc);

          density[idx] *=evaporate;



}

GAS Field Wrangle

float parm_eva = chf("parm_eva");


float Invert_eva =-parm_eva;
      Invert_eva +=1;

float evaporate = pow(clamp(Invert_eva,0,1),@TimeInc);

@density *=evaporate;

Setting_Sample

test_01
Screenshot from 2017-12-17 22-54-23.png

test_02
Screenshot from 2017-12-17 22-56-10.png


気づいている人はお分かりだと思うんですけど...
名前はManta_Flowのパクリです笑
自分は
もっとアーティスティックに表現したいんですけど
難しい....

DOPアセットの作成練習も兼ねたり
Openclコーディングに計算の一部分を落としこんでみたり
色々してみました。
F○MEとかP○○enixのような操作性をHoudiniにも落とし込めたら...

アルゴリズムの簡単なTec Reportは勉強会とかセミナーとかで共有できたらいいですね。

学習のリソースにお役立てくださいませ。
学習用ですよ...笑

Let`s Thinking(^ _ ^)

追伸
HDKむずかしい...