LoginSignup
4
3

More than 5 years have passed since last update.

流体表現に磨きをかける

Last updated at Posted at 2018-12-28

この記事はHoudiniAdventCalender2018 12月17日の記事です
loading_spy.gif


皆様こんにちは
今年もAdventCalenderに参加できて光栄です。

蒸留水さんありがとうございます。

僕のネタは流体表現!!
ちょっとしたクリスマスプレゼント?になればうれしいです。


まず...
VFX流体の基礎として最低限抑えておきたい箇所を共有します(free)
https://drive.google.com/open?id=1zmmr_yaVmU2pRnpmsyvr4Txhbs5fPCho

Animationの基礎が分かっている前提で作成しています。
気になる部分があったら各自で調べるのをお勧めします。

ChristmasGift(HipFIle) はこちら
https://drive.google.com/open?id=15Zd1bI3qAyF9E5E5UngpqGSdp4S9hfag


さて...

Animationを考えた時に流体の動きのコントロールは何処でプログラム(管理)されているのか
掴んでおきましょう。

基本的なAnimation(lagrange)
Pos = currentPosiotn + velocity

simpleAnimation.C

int main
{
   for (int i; iterate>= i; i++;)
  {
   vector Pos = currentPos;
   vector v = (velocity*TimeInterval)*i;
   //i = dt 
   @P = Pos +v;
   }
}

pointPostionに直接変化量を待たせて、更新する。

基本的なAnimation(Euler)
Pos = currentPosiotn + velocity

simpleAnimation.C

int main
{
   for (int i; iterate>= i; i++;)
  {
   vector Pos = currentPos;
   vector v = (voxel_Velocity * TimeInterval)*i;
   //voxel_Velocity = Sampling current_VelocityData
   //i = dt 
   @P = Pos +v;
   }
}

voxelに変化量を待たせて、それらを参照し更新する。


HoudiniのFluid_Dynamics_Systemにも同様に当てはめることが出来ます。

voxelAnimationParticleANimationの求め方の違いを握っておきましょう。


次にVolumeDisplacementについてです
以下を参照してください。
https://drive.google.com/open?id=13r1GNWwifSjvVBrFq513QF84Egr0-ZWP

VolumeDisplacement.C

int main
{
   vector idxPos = dnesityPosition;
   vector directiornalVector = normalize(gradient(density))*(amount*lengthnormalize(gradient(density)));
   vector pushUp = idxPos + directiornalVector

   float density = voxelTrace_density(pushUp);

   return density;

}

SurfaceDisplacementとVolumeDisplacementの違いをしっかりと復習しておきましょう


WaveletTurbulence & GridRessAdvection

Technical Paper
Wavelet Turbulence
https://www.cs.cornell.edu/~tedkim/WTURB/wavelet_turbulence.pdf

Gridress Advection
https://www.aps.org/units/dfd/meetings/upload/dfd2010-tessendorf.pdf

Other
https://people.cs.clemson.edu/~jtessen/papers_files/RIV.pdf


さっぱりな方は
これを...
https://drive.google.com/open?id=1x6lbRMJAqoUk2XbOTkiuPW7os21J4KdE

それでも分からない方は...

がんばってください

CameraSpaceAdvect.C

int main
{
   vector Pos = dnesityPosition;
   vector advectvelocity = cross(getvoxelvelocity,CameraSpace_Turbulence) *(1/FPS)*Timestep;
   vector PositionSample_A =  advectvelocity+ Pos;

   vector PositionSample_B =(getvoxelvelocity(PositionSample_A) *(1/FPS)*Timestep;

   Pos +=  PositionSample_B;

   density = voxelTrace_density(Pos);
   return density;
}

Hipfileを見ながら、AdventCalenderネタを閲覧していただけるといいと思います。

これらの式や考え方をhoudiniに落とし込んでいき
実際のプロジェクトにラスタライズしていき
最終的にtoolとしてリリースします。

質問や意見などありましたら
気軽に聞いてください。

いいね!と思ったらGoodボタン...
じゃなくて

ソーシャルに拡散していただけるとうれしいです。

ぼくにも皆さんの気持ち(クリスマスプレゼント)頂けるとうれしいなぁー

PATREON
https://www.patreon.com/Nerv_lol

では
皆様
お元気で~~~~~~~~~


PS: 告知忘れましたがHoudiniHive2018 Tokyoでプレゼンしたので良かったら見てやってください。
https://vimeo.com/305069852

4
3
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
4
3