切入正题之前,先胡说八道几句.
    据说爱因斯坦讲过:关于这个世界最难以理解的就是它是可以被理解的。人类在很长的时间里,都无法认知周围变幻莫测的世界,只能编造出无数的神祗来掌控世上万物的运行。到了近代,才逐渐出现了突破。伽利略发现了主宰物体下坠的拋物线定律。牛顿被誉为人类历史上最伟大的科学家之一。他发明了微积分,用万有引力定律在人类历史上第一次把天上的运动和地上的运动统一了起来。麦克斯韦建立了描述电场与磁场的四个方程,系统而完整地概括了电磁场的基本规律,并预言了电磁波的存在......于是科学家认为数学是用来解释自然世界的工具。

物理世界与数学如此的吻合,激发了进一步的联想。宇宙学家马克斯·塔马克在《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的更多相关文章

  1. 小球自由落体动态模拟(Position Based Simulation)

    在过去的几十年中,基于物理的三维物体动态模拟成为了计算机图形学的研究热点,其中最常见的方法是基于力(force-based)的模拟方法,比如弹簧质点模型,它把物体抽象成一系列质点以及连接这些质点的弹簧 ...

  2. Java基础之扩展GUI——高亮元素、上下文菜单、移动旋转元素、自定义颜色(Sketcher 10)

    窗口应用程序. 本例在上一版的基础上实现了高亮元素.移动元素.上下文菜单.旋转元素.设置自定义颜色. 1.自定义常量包: // Defines application wide constants p ...

  3. PID控制器(比例-积分-微分控制器)- I

    形象解释PID算法 小明接到这样一个任务: 有一个水缸点漏水(而且漏水的速度还不一定固定不变),要求水面高度维持在某个位置,一旦发现水面高度低于要求位置,就要往水缸里加水. 小明接到任务后就一直守在水 ...

  4. Rebound动画框架简单介绍

    Rebound动画框架简单介绍 Android菜鸟一枚,有不对的地方希望大家指出,谢谢. 最近在接手了一个老项目,发现里面动画框架用的是facebook中的Rebound框架,由于以前没听说过,放假时 ...

  5. 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 ...

  6. 为什么要在游戏开发中使用ECS模式

    http://www.richardlord.net/blog/why-use-an-entity-framework Why use an entity system framework for g ...

  7. DataTable to Excel(使用NPOI、EPPlus将数据表中的数据读取到excel格式内存中)

    /// <summary> /// DataTable to Excel(将数据表中的数据读取到excel格式内存中) /// </summary> /// <param ...

  8. 【Windows编程】系列第十篇:文本插入符

    大家知道,在使用微软的编程环境创建工程时会让你选择是控制台模式还是Windows应用程序.如果选择控制台的console模式,就会在运行时出现一个黑洞洞的字符模式窗口,里面就有等待输入一闪一闪的插入符 ...

  9. 为现有图像处理程序添加读写exif的功能

    为现有图像处理程序添加读取exif的功能 exif是图片的重要参数,在使用过程中很关键的一点是exif的数据能够和图片一起存在.exif的相关功能在操作系统中就集成了,在csharp中也似乎有了实现. ...

随机推荐

  1. 基于RequireJS和JQuery的模块化编程——常见问题解析

    由于js的代码逻辑越来越重,一个js文件可能会有上千行,十分不利于开发与维护.最近正在把逻辑很重的js拆分成模块,在一顿纠结是使用requirejs还是seajs的时候,最终还是偏向于requirej ...

  2. document对象操作:浏览器页面文件

    //找元素 1.根据id找 <div id="d1" cs="ceshi"><span>document对象</span>& ...

  3. Linux Buffers和Cached的区别(转)

    在linux下使用free命令查看内存使用情况,有buffers和cached两项,以下是它们的区别: buffers是为块设备设计的缓冲.比如磁盘读写,把分散的写操作集中进行,减少磁盘I/O,从而提 ...

  4. Revit API 获取某墙上洞口的尺寸和位置

    [Transaction(TransactionMode.Manual)] [Regeneration(RegenerationOption.Manual)] public class cmd2012 ...

  5. C#中Math.Round()实现中国式四舍五入

    C#中Math.Round()实现中国式四舍五入 C#中的Math.Round()并不是使用的"四舍五入"法.其实在VB.VBScript.C#.J#.T-SQL中Round函数都 ...

  6. Windows 8.1/Server 2012 R2/Embedded 8.1 with Update 3(MSDN最新版)

    微软于12月16日更新了包含Update 3的ISO,此次更新并不会明显改善用户的界面体验,下载后请校验MD5.我整理了中.英文的8.1/服务器版/嵌入式版本/多国语言包. 1,Windows 8.1 ...

  7. android 开发 简单的页面布局

    package com.example.test; import android.app.Activity; import android.os.Bundle; import android.view ...

  8. 创建一个Table View

    在本课程中,您将创建应用程序FoodTracker的主屏幕.您将创建第二个,表视图为主场景,列出了用户的菜谱.你会设计定制表格单元格显示每一个菜谱,它是这样的: 学习目标 在课程结束时,你将能够: 创 ...

  9. nodejs 的安全

    1.connect中间件csrf 原理:在express框架中csrf 是通过connect 模块的中间件来解决的.其原理是在前端构造一个隐藏的表单域“_csrf” ,后端生成一个值,作为该表单域,然 ...

  10. .NET分布式事务--TransactionScop

    一.开启DTC服务 方式一 计算机—管理—服务—Distributed Transaction Coordinator—属性—开启 方式二 CMD命令子界面输入:net start msdtc 二.设 ...