GPU PRO 5 - 1.4 Simple Rasterization-Based Liquids 笔记

本笔记仅为个人的理解,如果有误欢迎指出。

Simple Rasterization-Based Liquids

基于光栅化的简单液体模拟

流体的建模方式可以分为强不可压缩模型和弱不可压缩模型。文章的背景是为了解决弱不可压缩模型下光滑粒子流体动力学(SPH)里模拟粒子行为时需要查找旁边粒子来计算作用力这个形式。

文章表示液体模拟是逐个计算粒子与粒子之间的相互作用力实现的,主打一个力大飞转。这种模拟方式需要对粒子做空间排序以方便查找周边粒子,而这篇文章则将每个粒子的属性投射到网格上,通过在网格上求解粒子间的动力学来简单模拟液体,因此免去了排序步骤也不需要去寻找邻接粒子。

实现这个流程分为三个阶段:

1,将粒子上的信息映射成网格。

2,在网格计算动力学完成粒子运动模拟。

3,将计算好的结果反馈回粒子上调整粒子。

1,将粒子上的信息映射成网格:

这个操作在文章里被称为Splatting(散射 / 投射),在几何着色器上渲染粒子的时候会创建一个四边形,粒子的原始坐标为中心Xp,四个角的坐标为Xi ,每个角都会存储这个粒子的部分密度信息和速度信息,公式如下:

d 代表边角到中心的距离。

2,在网格计算动力学完成粒子运动模拟。

在网格计算的时候每一次迭代计算都更新网格上的记录的速度信息

公式如下:

t代表时间。

x代表空间分辨率,这里不是很了解,大概是指四个坐标的平均计算

3,将计算好的结果反馈回粒子上调整粒子。

文章中他们结合了PIC和FLIP方法来更新粒子的位置和速度。这里的核心想法是:不是直接从网格上计算出新的值赋值给粒子,而是计算一个变化量给粒子。

更新粒子速度,计算公式如下:

更新粒子位置的计算公式如下:

参考资料:

[GPU Pro5] 渲染篇

相关推荐
许长安5 分钟前
RingBuffer:面向网络编程的环形缓冲区实现
服务器·网络·c++·经验分享·笔记·缓存
坐望云起5 分钟前
机器学习笔记 - 基于C++的深度学习 四、实现梯度下降
笔记·深度学习·机器学习
码途漫谈8 分钟前
把笔记变成可生长的知识系统:Obsidian 技术介绍
笔记·ai·obsidian
東隅已逝,桑榆非晚28 分钟前
深⼊理解指针(3)
c语言·数据结构·笔记·算法·排序算法
薛定e的猫咪11 小时前
因果推理研究方向综述笔记
人工智能·笔记·深度学习·算法
AOwhisky11 小时前
虚拟化技术学习笔记
linux·运维·笔记·学习·虚拟化技术
一只机电自动化菜鸟11 小时前
一建机电备考笔记(33) 机电专业技术(起重技术-吊装方案)(含考频+题型)
经验分享·笔记·学习·职场和发展·课程设计
小陈phd13 小时前
多模态大模型学习笔记(四十)——从“看字”到“懂结构”:版面分析与表格解析技术全解
笔记·学习
xuhaoyu_cpp_java13 小时前
SpringMVC学习(二)
java·经验分享·笔记·学习·spring
噜噜噜阿鲁~14 小时前
python学习笔记 | 9.2、模块-安装第三方模块
笔记·python·学习