关于流体特效模拟算法的简单描述,前提部分。

目前动画领域内的流体模拟主要是拉格朗日法无网格法和欧拉网格法,两种方法更有利弊。

我研究的主要是拉格朗日法中的SPH模型,即光滑粒子流体动力学模型。

粒子方法非常适合模拟大形变流体、液滴飞溅等复杂场景。

现今SPH算法已经有了很多改进,包括对流体真实感、时间复杂度以及并行方案的改进等,在去年的SIGGRAPH,清华大学发表了一篇关于SPH流固耦合的文章,时至今日SPH已经在很多领域进行了研究和应用。

我准备实现的是PCISPH(Predictive-Corrective Incompressible SPH),但是,在此之前,先进行了WCSPH(Weakly compressible SPH for free surface flows)的实现。

实现过程参考论文:Weakly compressible SPH for free surface flows . Markus Becker Matthias Teschner . 2007

算法如下(出自PCISPH论文):

SPH算法主要在于计算每个粒子的状态,如密度、压力、粘性力等,然后根据计算的合力以及牛顿第二定律推出粒子加速度,进而求出粒子在当前时间步下的位移。

由于粒子是离散的,流体是连续的,所以SPH使用插值核函数进行粒子状态的估算,针对不同参数可以选择适合的核函数:

对于密度可以使用poly6核函数:

压强使用spiky核函数及其梯度方程:

粘性力使用polynomial核函数及其拉普拉斯形式:

WCSPH在实现时需要注意时间步长,如果过大会导致粒子爆炸。

在实现时,可以使用OpenGL进行视图的显示,效果如下:

PCISPH对WCSPH的最大根据就是迭代的时间步,其总体计算效率可以高出WCSPH一个数量级。

这里关于SPH进行了一些简单叙述,不过仅仅作为笔记,以备之后的深入研究。

液面重构部分会在之后提及。

SPH流体模拟及液面重构问题的更多相关文章

  1. SPH液面重构过程中的问题

    使用粒子方法进行流体特效模拟需要进行液面重构,构造出流体的自由表面,液面重构方法也是一个独立的研究方向,针对其的研究已经有了很多成果,包括液面的平滑度.精度和并行效率等. 在这里,主要是记录一下我在液 ...

  2. 【算法】混合流体模拟demo

    展示一个流体模拟算法的实现 地址:http://www.iqiyi.com/w_19rzs1anol.html 采用C++编写,Blender渲染. 截图 参考文献 REN, B., LI, C., ...

  3. PhoenixFD插件流体模拟——UI布局【Output】详解

    Liquid Output 流体输出  本文主要讲解Output折叠栏中的内容.原文地址:https://docs.chaosgroup.com/display/PHX3MAX/Liquid+Outp ...

  4. PhoenixFD插件流体模拟——UI布局【Simulation】详解

    前言 之前使用RealFlow做流体模拟,但是总得和3ds导来导去,略显麻烦,特意学习PhoenixFD插件,直接在3ds中进行流体模拟.若读者有更好的流体模拟方法,欢迎在评论区交流. 原文地址:ht ...

  5. PhoenixFD插件流体模拟——UI布局【Dynamics】详解

    流体动力学 本文主要讲解Dynamics折叠栏中的内容.原文地址:https://docs.chaosgroup.com/display/PHX3MAX/Liquid+Dynamics 主要内容 Ov ...

  6. PhoenixFD插件流体模拟——UI布局【Rendering】详解

    Liquid Rendering 流体渲染  本文主要讲解Rendering折叠栏中的内容.原文地址:https://docs.chaosgroup.com/display/PHX3MAX/Liqui ...

  7. PhoenixFD插件流体模拟——UI布局【Preview】详解

    Liquid Preview 流体预览  本文主要讲解Preview折叠栏中的内容.原文地址:https://docs.chaosgroup.com/display/PHX3MAX/Liquid+Pr ...

  8. PhoenixFD插件流体模拟——UI布局【Input】详解

    Liquid Input 流体输入 本文主要讲解Input折叠栏中的内容.原文地址:https://docs.chaosgroup.com/display/PHX3MAX/Liquid+Input 主 ...

  9. PhoenixFD插件流体模拟——UI布局【Splash | Mist】详解

    液体飞溅 | 水雾 本文主要讲解Splash | Mist折叠栏中的内容.原文地址:https://docs.chaosgroup.com/display/PHX3MAX/Liquid+Splash+ ...

随机推荐

  1. vue 移动端在div上绑定click事件 失效

    在.vue的文件中使用了better-scroll,在div标签上绑定click事件后,无效. 原因:使用了better-scroll,默认它会阻止touch事件.所以在配置中需要加上click: t ...

  2. PHP-FPM 远程代码执行漏洞(CVE-2019-11043)的简单复现学习

    1.概述 漏洞主要由于 PHP-FPM 中 sapi/ fpm/ fpm/ fpm_main.c 文件内的 env_path_info 下溢导致,攻击者可以使用换行符 %0a 破坏 Nginx 中 f ...

  3. 通过自己实现接口来加深理解SpringMVC的执行流程

    功能介绍 上篇文章[从源码角度了解SpringMVC的执行流程]通过接口源码向大家介绍了SpringMVC的执行流程,主要偏重于源码.这篇文件我们来自己实现那几个关键接口,来真实体验下SpringMV ...

  4. cogs 647. [Youdao2010] 有道搜索框 Trie树 字典树

    647. [Youdao2010] 有道搜索框 ★☆   输入文件:youdao.in   输出文件:youdao.out   简单对比时间限制:1 s   内存限制:128 MB [问题描述] 在有 ...

  5. 【X86】---X86处理器大小端的数据存储验证

    之前也关注过大小端的存储,可能时间久了,加之又之前的电脑抽象换成了当前的处理器寄存器的值判断,导致自己总是有点蒙圈.看Spec手册的时候,有时会无法与手册中某个Bit的值与RU/RW工具读出来的对应上 ...

  6. spark storm 反压

    因特殊业务场景,如大促.秒杀活动与突发热点事情等业务流量在短时间内剧增,形成巨大的流量毛刺,数据流入的速度远高于数据处理的速度,对流处理系统构成巨大的负载压力,如果不能正确处理,可能导致集群资源耗尽最 ...

  7. excel中为什么不显示单引号

    解决:打两个就可以了!因为:一个单引号表示该单元格为文本属性.

  8. Elastcisearch.Nest 7.x 系列`伪`官方翻译:通过 NEST 来快捷试用 Elasticsearch

    本系列已经已经全部完成,完整版可见:https://blog.zhuliang.ltd/categories/Elasticsearch/ 本系列博文是"伪"官方文档翻译(更加本土 ...

  9. linux DNS 服务器 配置

    1:named.conf 2:正向区域配置文件 3:反向域名解析文件

  10. c#数字图像处理(十)图像缩放

    图像几何变换(缩放.旋转)中的常用的插值算法 在图像几何变换的过程中,常用的插值方法有最邻近插值(近邻取样法).双线性内插值和三次卷积法. 最邻近插值: 这是一种最为简单的插值方法,在图像中最小的单位 ...