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 渲染篇

相关推荐
一隅论数智14 小时前
OWL(Web Ontology Language)介绍与使用举例(二)
大数据·经验分享·笔记·学习·自然语言处理·学习方法·政务
sunoo-22918 小时前
【嵌入式Linux驱动学习】Day1-Day2 全流程梳理:环境搭建→U-Boot→内核→根文件系统→驱动基础
linux·运维·驱动开发·笔记·学习·阿里云·恩智浦
by2099918 小时前
list:迭代器与资源管理实现的综合叙述(下)
数据结构·c++·笔记·list
wdfk_prog19 小时前
LWIP教程 03:从 `low_level_input()` 到 `pbuf_free()`——`pbuf` 的数据视图、Chain 与引用计数
运维·网络·笔记·学习
yi01119 小时前
Leetcode 49 用 “身份证‘‘巧解
人工智能·笔记·python·算法·leetcode·哈希表
ouynagda19 小时前
嵌入式Linux i.MX6ULL系统移植学习笔记
linux·笔记·学习
yi01120 小时前
DAY22: LeetCode 733:图像渲染——从二维网格开始理解 DFS 和 BFS
数据结构·笔记·python·算法·leetcode·深度优先·宽度优先
sbjdhjd20 小时前
智能体开始“动手”之后:OpenAI越权事件、Anthropic算力资本化与开放权重模型竞逐 | AI与SI行业日报整理(9月29日—10月6日)
大数据·人工智能·经验分享·笔记·ai·chatgpt·开源
上位机妹子20 小时前
从零理解 EF Core:用 Minimal API 给「工作项看板」建模(小白笔记)
笔记
深圳老胡21 小时前
STM32 MCU 国产替代型号简介
笔记·stm32·单片机·代码规范