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驱动的烟的游戏:
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的力的分布情况有几种描述,包括
lagrangian效果还可以,但是明显maccormack的那个更好,而且更适合并行计算。
更新每个grid的立场分布就靠他们了。
3,更新速度:依据力场更新速度:
v = v - delta(p);p是统一到一起的力。
4,加上外力和阻挡物,就可以做出turbulence:
接下来是render engineering部分,particle的dynamicbuffer,instancing,gpu translucency sort,volume lighting。
效果的确赞啊。