Fluid Simulation–Driven Effects in Dark Void

http://www.microsoft.com/downloads/details.aspx?familyid=707038c1-f5d6-4b18-8659-cba0795effe6&displaylang=en

 

gamefest2010的一篇文章。

主要是讲fluid simulation驱动的一些东西,这里不只是液体了,更多的是smoke,叶子等这些数量更少离散度更高的东西,有理论有engineering,赞。

 


 

simulation部分随着多核和做通用计算的gpu的发展越来越进入研究热点。

而且rendering的确走的是比较快,渲染的真实度已经很高了,但是东西一动起来就感觉不是那么好,资源向这块倾斜可以解决短板,很不错。

 

 


 

开篇讲了历史,2003年fluid simulation算法已经比较到位,但是硬件实在不行,小打小闹的弄一点实在没意思。

 

然后列了下有fuild simulation驱动的烟的游戏:

  • hellgate 
  • batman
  • stalker
  • cryostasis----这个孤陋寡闻了,没听过,用的physx fuild simulation,就上它的图吧,效果还是挺好的呃:

 

 


 

fluid simulation数学基础是Navier Stokes Equation,细节wikipedia看吧

http://en.wikipedia.org/wiki/Navier%E2%80%93Stokes_equations

通篇的数学很华丽,看过之后就觉得engineer真的也就是魔法师(数学家)那里要个魔法药水到处耍的小屁孩。

NavierStokesEquation可以描述水体气流之外还能描述银河系的恒星分布,可以帮助建设power station, 研究污染,还能研究磁力。。。

崇拜,仰慕。

这个公式基于牛顿第二定律,主要是动量守恒部分,

简单来讲就是描述了速度对时间的偏导与压强(p),水的弹力(T),外力(f)之间的关系,之后就是可以互相推导了。

 

落实到gamedev的engineering部分,老规矩,离散化----particle based or grid based。

各有利弊,但是总体来讲grid base更好一些,毕竟这样是更加稳定可控的离散化的一种方式,比起完全看情况的particle是要好多了。

 

grid base要做的事情基本如下:

1, flexible grid : 不可能全场景去建立grid然后simulate,performance不允许。

但是一个有限大小的static grid又不对。

所以就弄个可以移动的grid,grid内部的smoke就fluid simulate,出去了就自生自灭。

 

2,建立“力场”,就是在grid上分布的力。

每个grid有个力的数值,所有grid的力的分布情况有几种描述,包括

  • Basic semi-Lagrangian advection
  • MacCormack scheme

lagrangian效果还可以,但是明显maccormack的那个更好,而且更适合并行计算。

更新每个grid的立场分布就靠他们了。

 

3,更新速度:依据力场更新速度:

v = v - delta(p);p是统一到一起的力。

 

4,加上外力和阻挡物,就可以做出turbulence:

Fluid Simulation–Driven Effects in Dark Void_第1张图片

 


接下来是render engineering部分,particle的dynamicbuffer,instancing,gpu translucency sort,volume lighting。

效果的确赞啊。

 

 

 

 

你可能感兴趣的:(Fluid Simulation–Driven Effects in Dark Void)