LoginSignup
6
0

More than 5 years have passed since last update.

Mantis_Volume_Simulatorで遊ぼう

Last updated at Posted at 2017-12-20

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むずかしい...

6
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
0