太傻

szlongmanblog@126.com 江山笑 烟雨遥 涛浪淘尽红尘俗事几多骄

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
  43 随笔 :: 0 文章 :: 346 评论 :: 13万 阅读
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

        电影魔戒首部曲前一刻钟中有这么一幕:111岁的Bilbo与魔法师甘道夫正谈论着烟草,突然Bilbo吐出一个大烟圈,而甘道夫更是了得,笑着吹出一艘美丽的帆船,航行穿过了Bilbo烟圈。接着镜头便转向了一个巨大的焰火宴会。美国的电影特技公司是如何实现这一效果的,不得而知。不过SIGGRAPH2004中的一篇文章“Target-Driven Smoke Animation”却是公开了一种烟雾动画控制技术(smoke animation control),达到了与电影中类似的效果。此论文是以色列人撰写的(The Hebrew University of Jerusalem),SIGGRAPH2003中“Keyframe control of smoke simulations”引起了他们对此方向的兴趣,提出了新的思想,方法不复杂,但是最后的结果倒是出奇的好。通过查阅文献,最初公开发表研究"烟雾动画控制技术"的论文是个中国留学生(Object Modeling and Animation with Smoke),Lin Shi,复旦的本科,现在美国读博士,成果累累。中国的精英在国外有许多,一旦有了吸引这些有真才实学的学者回国的机制,我想实现科技的腾飞是指日可待的。
      原文的实现全部使用了CPU,运用精度很高的二阶偏微分数值解法,时间步长也较小,因此最后形成的动画图像非常细腻。我使用了GPU(ATI 9600),采用了大步长,一阶隐含数值解法,能实时实现二维的烟雾动画(比如一个图像遵循流体的运动定律演化为另一种图像),当然从视觉效果上要比论文上的差很多。原来一直打算找时间写三维形式烟的模拟,可是自从看到那论文后,心里就开始构思如何实现文中的算法,只是碰到点编程上的BUG,徘徊了好多天。现在总算有了个雏形,心中还是比较开心的。只是有时候,晚上调程序,睡不着,看看电视放松一下脑子,结果那几天影响了一位室友的睡眠,在此表示歉意。
      
-------------------------------

    这阵子还看了两本科普书,一本是许峰雄写的“深蓝揭密”,一本是沃森写的“双螺旋”,都是在买到后,一个晚上一口气读完的。两本书有一个共同的特点,都是科学家撰写自己亲身的科研历程,披露了很多国外一流大学学习生活的细节。沃森在他25岁时就发现了DNA的双螺旋结构,以此成果荣膺了日后的诺贝尔奖。他在一本书中自述:故事开始的时候我25岁,还没有结婚,考虑女孩(girls)多于基因(genes)。表述很大胆也很有意思。
        ......

        又过了好多天,一直想对上面那个DEMO做优化,但是好象没了那股精气神,结果一点也没进展。两三天前的一个晚上,看了会电视,喝了杯价值一块钱的咖啡,突然来了精神,把想到的优化方法付诸实现了。用了浮点数纹理,精度一下子提高了,从效果上接近原论文一阶微分数值解法的视频。昨日晚上又将GRID SIZE加到256,图像品质大为改善。

改进版DEMO(“Target-Driven Smoke Animation”的GPU实现)下载:
http://pan.baidu.com/s/1mgnzola


可以改变源与目标的图片(在/images目录下),以观察到不同的效果
比如:在Source Image Filename框中录入“char.jpg”,在Target Image Filename框中录入“char1.jpg”;
然后按一下“Inverse Start”会看到一个中文的“图”字以烟雾状化为另一个中文字“画”;
再按一下“Inverse Start”会看到一个中文的“画”字以烟雾状化为另一个中文字“图”。

这些DEMO均使用“October 2005 DirectX SDK Update”,要求GPU支持PS2.0





 

posted on   太傻  阅读(2649)  评论(21编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
· AI Agent开发,如何调用三方的API Function,是通过提示词来发起调用的吗
点击右上角即可分享
微信分享提示