惊涛怪浪(double dam-break) -- position based fluids
切入正题之前,先胡说八道几句.
据说爱因斯坦讲过:关于这个世界最难以理解的就是它是可以被理解的。人类在很长的时间里,都无法认知周围变幻莫测的世界,只能编造出无数的神祗来掌控世上万物的运行。到了近代,才逐渐出现了突破。伽利略发现了主宰物体下坠的拋物线定律。牛顿被誉为人类历史上最伟大的科学家之一。他发明了微积分,用万有引力定律在人类历史上第一次把天上的运动和地上的运动统一了起来。麦克斯韦建立了描述电场与磁场的四个方程,系统而完整地概括了电磁场的基本规律,并预言了电磁波的存在......于是科学家认为数学是用来解释自然世界的工具。
物理世界与数学如此的吻合,激发了进一步的联想。宇宙学家马克斯·塔马克在《Our Mathematical Universe》一书中认为宇宙中的一切事物,当然也包括人类在内都是一种数学结构。物理世界可能只是数学世界的映射。数学结构也是一种独立存在的实体。想象一下,如果记载勾股定理的全部文献都消失了,勾股定理其实还是存在的,她等着下一次被发现。生命估计是一种能感知自己存在的一种数学结构,只是我们目前还不知道具体形式。近二十年来计算机图形学的蓬勃发展,进一步让人觉得眼睛感受到的一切都是数学的投影。
-------------------------------
平滑粒子流体力学(Smoothed Particle Hydrodynamics)起源于二十世纪七十年代末,当时一些宇宙学家用这类方法研究天体形成。我曾看到过一篇文章介绍了一个使用SPH模拟技术的玩具程序,在万有引力的牵引下,将散落在各处的宇宙尘埃汇聚成一个球体。图形学中大量使用SPH技术是以2003年的“Particle-Based Fluid Simulation for Interactive Applications”为开端。该文标志性的视频内容是:实时模拟绘制了一股水流从上慢慢倒入到底下透明的杯子中。SPH技术容易实现,但要求时间步长非常小。步长稍大,效果就会比较粗糙甚至发生“爆炸”现象。如果亲手调试过SPH程序,就会明白“爆炸”的含义(瞬时所有的粒子都消失了)。另外,常规SPH的参数比较多,调整相对比较困难。
流体是否逼真,与流体模拟技术中不可压缩的实现密切相关。传统的SPH基于粒子技术,只能依靠小步长、大压强来实现流体的不可压缩性,非常慢无法做到真实感流体的实时模拟。2009年“Predictive-corrective incompressible SPH”使用迭代技术有效地加大了时间步长,同时保证了流体不可压缩的性质。在接下来几年,此文启发了很多人。特别是SIGGRAPH 2013中的"position based fluids",文章很短,但是实现了令人感到惊艳的实时效果。
学习了该论文后,目前仅实现了半篇内容。使用了"position based fluids"的SPH模拟技术,但是渲染使用的是离线方式(用mitsuba,刚刚用了几天,水质不是太好)。下面的视频(http://pan.baidu.com/s/1c0kXzaw)(http://pan.baidu.com/s/1jG67KeM)和图片模拟的是:经典场景double dam,看看有没有点"惊涛怪浪"的感受?
惊涛怪浪(double dam-break) -- position based fluids的更多相关文章
- 小球自由落体动态模拟(Position Based Simulation)
在过去的几十年中,基于物理的三维物体动态模拟成为了计算机图形学的研究热点,其中最常见的方法是基于力(force-based)的模拟方法,比如弹簧质点模型,它把物体抽象成一系列质点以及连接这些质点的弹簧 ...
- Java基础之扩展GUI——高亮元素、上下文菜单、移动旋转元素、自定义颜色(Sketcher 10)
窗口应用程序. 本例在上一版的基础上实现了高亮元素.移动元素.上下文菜单.旋转元素.设置自定义颜色. 1.自定义常量包: // Defines application wide constants p ...
- PID控制器(比例-积分-微分控制器)- I
形象解释PID算法 小明接到这样一个任务: 有一个水缸点漏水(而且漏水的速度还不一定固定不变),要求水面高度维持在某个位置,一旦发现水面高度低于要求位置,就要往水缸里加水. 小明接到任务后就一直守在水 ...
- Rebound动画框架简单介绍
Rebound动画框架简单介绍 Android菜鸟一枚,有不对的地方希望大家指出,谢谢. 最近在接手了一个老项目,发现里面动画框架用的是facebook中的Rebound框架,由于以前没听说过,放假时 ...
- pymssql.connect(server='.', user='', password='', database='', timeout=0, login_timeout=60, charset='UTF-8', as_dict=False, host='', appname=None, port='1433', conn_properties, autocommit=False, tds_
http://pymssql.org/en/stable/ref/pymssql.html """ This is an effort to convert the py ...
- 为什么要在游戏开发中使用ECS模式
http://www.richardlord.net/blog/why-use-an-entity-framework Why use an entity system framework for g ...
- DataTable to Excel(使用NPOI、EPPlus将数据表中的数据读取到excel格式内存中)
/// <summary> /// DataTable to Excel(将数据表中的数据读取到excel格式内存中) /// </summary> /// <param ...
- 【Windows编程】系列第十篇:文本插入符
大家知道,在使用微软的编程环境创建工程时会让你选择是控制台模式还是Windows应用程序.如果选择控制台的console模式,就会在运行时出现一个黑洞洞的字符模式窗口,里面就有等待输入一闪一闪的插入符 ...
- 为现有图像处理程序添加读写exif的功能
为现有图像处理程序添加读取exif的功能 exif是图片的重要参数,在使用过程中很关键的一点是exif的数据能够和图片一起存在.exif的相关功能在操作系统中就集成了,在csharp中也似乎有了实现. ...
随机推荐
- Spirng quartz 整合
以下是资料来源: quartz maven confighttp://quartz-scheduler.org/downloads Spring 定时器(Timer,Quartz)http://sup ...
- 使用轻量级ORM Dapper进行增删改查
项目背景 前一段时间,开始做一个项目,在考虑数据访问层是考虑技术选型,考虑过原始的ADO.NET.微软的EF.NH等.再跟经理讨论后,经理强调不要用Ef,NH做ORM,后期的sql优化不好做,公司 ...
- paip.uapi 获取网络url内容html 的方法java php ahk c++ python总结.
paip.uapi 获取网络url内容html 的方法java php ahk c++ python总结. 各种语言总结比较,脚本php.python果然是方便.简短,实用. uapi : get_w ...
- NodeJS-图片上传(Express)
文件上传是每个网站不可避免的,最近需要做些上传图片的功能,主要解决两个问题,一个是文件上传样式和服务端路径保存,功能很简单,做起来倒是没那么简单,先从最简单的页面的上传页面的样式开始. 页面样式 Ht ...
- Python核心编程(切片索引的更多内容)
# coding=utf8 s = 'abcde' i = -1 for i in range(-1, -len(s), -1): print(s[:i]) # 结果 ''' abcd abc ab ...
- windows必备,命令行工具cmder
下载cmder并安装! 64位可下,亲测: http://www.wmzhe.com/soft-31133.html 创建文件夹并进入文件夹命令: mkdir web-server && ...
- SAP Business One SAP B1功能概述
SAP Business One SAP B1功能概述 SAP B One配有易于使用的软件界面,是一款全面的,多功能的业务管理解决方案,贵企业可以将其用作主要的企业资源(ERP)应用程序. 该解决方 ...
- python一个简单的登录
文件目录下有两个文件 user_name.txt lock_file.txt 实际中可以读数据库里的信息 代码如下 #encoding = utf-8 import sys user_file = ' ...
- HTML解析组件HtmlAgilityPack使用
HtmlAgilityPack是一个开源的解析HTML元素的类库,最大的特点是可以通过XPath来解析HMTL,如果您以前用C#操作过XML,那么使用起HtmlAgilityPack也会得心应手.目前 ...
- jquery easyui 插件开发
(function($) { /** * 插件定义 */ $.fn.resquery = function(options, param) { if (typeof options == " ...