StableFluids
http://www.dgp.toronto.edu/people/stam/reality/Research/StableFluids/index.html
かなり前のSIGGRAPH論文から。
なんでこの論文かと言うと、GPUで共役勾配法を解くときに、このStableFluidがお題として使われていたから。
まだしっかりと理解はしきれてないんですが、基本的なとき方としては、t=t0でのベクトル分布をW0として、これを以下の処理でW4にすると、それがt=t0+dtでのW0になる、というしくみ。
- add force: W1 = W0 + dt * F
- advect : W2(X) = W1(p(X, -dt))
- transform: W^2 = FFT{W2}
- diffuse : W^3(k) = W^2(k)/(1+v*dt*k*k)
- project : W^4 = W^3(k) - (1/(k*k))*(k*W^3(k))*k
- transform: W4 = IFFT{W^4}
p(X,-dt)というのは、ベクトル場のトレースの結果で、今Xにいる点がdt時間前にいた場所をp(X,-dt)とする。
実際のSIGGRAPHではPDA上で動いていたぐらいなので、かなり軽いルーチンのはず。
JavaApplet版もあった。