Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

流体表現に磨きをかける

More than 1 year has passed since last update.

この記事は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

ts_bros
FX Supervisor at POLYGON PICTURES :Skill share Simulation Fluid Dynamics 2D Animation
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away