SPH流体模拟及液面重构问题
关于流体特效模拟算法的简单描述,前提部分。
目前动画领域内的流体模拟主要是拉格朗日法无网格法和欧拉网格法,两种方法更有利弊。
我研究的主要是拉格朗日法中的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流体模拟及液面重构问题的更多相关文章
- SPH液面重构过程中的问题
使用粒子方法进行流体特效模拟需要进行液面重构,构造出流体的自由表面,液面重构方法也是一个独立的研究方向,针对其的研究已经有了很多成果,包括液面的平滑度.精度和并行效率等. 在这里,主要是记录一下我在液 ...
- 【算法】混合流体模拟demo
展示一个流体模拟算法的实现 地址:http://www.iqiyi.com/w_19rzs1anol.html 采用C++编写,Blender渲染. 截图 参考文献 REN, B., LI, C., ...
- PhoenixFD插件流体模拟——UI布局【Output】详解
Liquid Output 流体输出 本文主要讲解Output折叠栏中的内容.原文地址:https://docs.chaosgroup.com/display/PHX3MAX/Liquid+Outp ...
- PhoenixFD插件流体模拟——UI布局【Simulation】详解
前言 之前使用RealFlow做流体模拟,但是总得和3ds导来导去,略显麻烦,特意学习PhoenixFD插件,直接在3ds中进行流体模拟.若读者有更好的流体模拟方法,欢迎在评论区交流. 原文地址:ht ...
- PhoenixFD插件流体模拟——UI布局【Dynamics】详解
流体动力学 本文主要讲解Dynamics折叠栏中的内容.原文地址:https://docs.chaosgroup.com/display/PHX3MAX/Liquid+Dynamics 主要内容 Ov ...
- PhoenixFD插件流体模拟——UI布局【Rendering】详解
Liquid Rendering 流体渲染 本文主要讲解Rendering折叠栏中的内容.原文地址:https://docs.chaosgroup.com/display/PHX3MAX/Liqui ...
- PhoenixFD插件流体模拟——UI布局【Preview】详解
Liquid Preview 流体预览 本文主要讲解Preview折叠栏中的内容.原文地址:https://docs.chaosgroup.com/display/PHX3MAX/Liquid+Pr ...
- PhoenixFD插件流体模拟——UI布局【Input】详解
Liquid Input 流体输入 本文主要讲解Input折叠栏中的内容.原文地址:https://docs.chaosgroup.com/display/PHX3MAX/Liquid+Input 主 ...
- PhoenixFD插件流体模拟——UI布局【Splash | Mist】详解
液体飞溅 | 水雾 本文主要讲解Splash | Mist折叠栏中的内容.原文地址:https://docs.chaosgroup.com/display/PHX3MAX/Liquid+Splash+ ...
随机推荐
- 使用iview遇到问题记录总结
1.iview设置日期不可用,设置开始开始时间早于结束时间 官网示例,设置今天之前不可选,但是不能识别thisdisabledDate (date) { return date && ...
- 【X86】---X86处理器大小端的数据存储验证
之前也关注过大小端的存储,可能时间久了,加之又之前的电脑抽象换成了当前的处理器寄存器的值判断,导致自己总是有点蒙圈.看Spec手册的时候,有时会无法与手册中某个Bit的值与RU/RW工具读出来的对应上 ...
- eclipse反编译插件 jadclipse jad
eclipse常用反编译插件jadclipse.jad 1.下载jadclipse:net.sf.jadclipse_3.3.0.jar,放到eclipse-plugins 2.下载jad.exe,放 ...
- Springboot + 持久层框架JOOQ
简介 官网链接 JOOQ是一套持久层框架,主要特点是: 逆向工程,自动根据数据库结构生成对应的类 流式的API,像写SQL一样 提供类型安全的SQL查询,JOOQ的主要优势,可以帮助我们在写SQL时就 ...
- msi通过powershell安装、卸载
function install_msi($url) { $telemetry = @{ DisplayName = "Telemetry Service"; filename = ...
- Flask路由+视图补充
一.路由设置的两种方法 1.装饰器 @app.route('/index/') def index(): return 'Hello World!' 2.源码 route->decorator- ...
- 我的开源权限管理项目BeCore (基于.net core开发)
首先 谢谢大家还记得我.. 新年快乐 祝大家工作顺利 事事顺心 人见人爱 车见车载 冬不寒 下雨有伞 全身哪都不疼 就是有人疼 ~~ Github地址:https://github.com/baby8 ...
- .net core mysql CodeFirst
创建两个项目 1.网站 2.Model层 引用DLL Microsoft.EntityFrameworkCore Microsoft.EntityFrameworkCore.Design Micros ...
- 在eclipse里用jdbc连接MySQL
进入MySQL控制台, 输入密码, 新建数据库test1并给用户授权,用户名“jaovo”, 创建表,id主键自增, 下载jdbc驱动包(jar文件) 把它放进tomcat的安装目录lib文件夹下(我 ...
- java面试|精选基础(1)
以下题目是从面试经历和常考面试题中选出有点儿意思的题目,参考答案如有错误,请联系小编指正,感谢! 1.反射 1.1定义 JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法 ...