六七十年代,当时为了阻止在台湾的蒋介石反攻大陆,为了应付严峻的国际形势,全国都在响应“深挖洞”的号召。那会我爸正在一个海岛上修地下坑道,负责采暖、通风设计,说起当年指挥工程队按图施工,他总是流露出一种自豪的神情。第一次听说有“流体力学”这个词,就是从我爸的口中得知的,那个时候我上初中。我曾经好多次去翻过爸从部队里带回的一大堆旧书,可是从来没有发现有关“流体力学”的书,倒是意外找到一本国家领导人李瑞环五十年代写的木工书。
真正开始接触“流体力学”,还是从去年才开始。是“stable fluids”,“Visual Simulation of Smoke”, mark harris的博士论文“Real-Time Cloud Simulation and Rendering”等文章给了我深刻的启迪。才明白,数学原来是可以这样运用的。
前几个星期,我一同事新买了辆私家车,闲来无事,喊上我等几人一起驾车出游。目的地是郊外的花山,此山树木菇郁,浓可蔽日,青松翠柏夹径,甚是幽静,到此有超然世外之感。花山历史悠久,自古以来就受到名人雅士和文人墨客的垂青。山腰处本有始建于宋朝的花山大殿,用金山石柱为梁,是建筑史上的一大奇迹。大殿内有铁佛、铜钟、石门槛,并称花山三绝。可惜花山大殿在“文革”时遭人为破坏,建筑全部被夷为平地,现在只剩下形影孤单地耸立着12根石柱,仿佛在述说着它们的不幸,也让游人依稀想起它们曾经的辉煌。花山最高处为莲花峰,欲登顶必经五十三个台阶,高峻而又宽阔。相传当时康熙帝南巡,欲登莲花峰,而山路陡峭难攀,需找一条捷足便道。寺中高僧不敢有误,连夜发动僧众百人从一块整石上凿出五十三个台阶。此处称为“五十三参”,取佛经中“五十三参,参参见佛”之意。我们拾级而上,刚登上五十三参顶,即看到高耸的一面石壁,表面褶皱,宛如老妇人饱经苍桑般的皮肤,上刻形象缭绕的象形文字(见下图)。我等几人,驻足而视,纷纷猜想此字是何意。我本是一直在琢磨流体的绘制,见此象形字,我马上就反映出这不就是遵循Navier-Stokes方程的流体表现出来的基本形态嘛。真是很有意思,脑中想什么,往往就会在现实生活中看到同样的东西,就不吝是这次登上最值回味的一件事。后来,我翻看旅游手册,才知此石壁为“秀屏”,上刻文字是“云”,屏上还刻有乾隆帝游山诗一首,历历可辩。
游山的经历促使我尽快实现了一个用GPU计算二维流体的实时模拟程序(使用D3D)。在分析公式推导后,觉得做一个粗糙的三维的烟雾也并不困难,只是还需要点时间。
DEMO1(未加上 Vorticoty Confinement)下载:
http://pan.baidu.com/s/1gdGFF5T
视频: http://pan.baidu.com/s/1hqsXaG8
(DEMO1的动画捕捉,由于使用工具的原因,帧速会降低)
DEMO2(加上 Vorticoty Confinement)下载:
http://pan.baidu.com/s/1o68ZO5k
视频: http://pan.baidu.com/s/1nt0oyud
(DEMO2的动画捕捉,由于使用工具的原因,帧速会降低)
DEMO3(使用 Vectorized Jacobi)下载:
http://pan.baidu.com/s/1qWJflX6
使用 Vectorized Jacobi方法, 速度可提高60%。DEMO2在ATI9600上跑是45帧左右,DEMO3在同样精度下可达到70帧(按F2,关闭垂直同步的限制)。
这些DEMO均使用“October 2005 DirectX SDK Update”,要求GPU支持PS2.0
此图还未加上 Vorticoty Confinement(GPU为ATI 9600,程序还未做优化)
苏州花山一处景观:"秀屏",上刻形象缭绕的"云"字