(1)流体力学领域经典著作。
(2)从开发者视角解释流体动画中的核心算法
(3)提供实用且具体的代码框架
(4)帮助读者学习流体动力学并编写自己的引擎
本书围绕基础数学理论问题展开讨论,介绍了粒子法、网格法,以及混合方法的基本概念,以及它们在动画引擎开发过程中的代码实践。本书的一大特色是为读者提供了面向代码的方法,便于读者上手动画引擎的开发基础。本书兼具实用性和理论性,不仅有详细的理论介绍帮助读者深入理解相关的概念,还提供丰富的代码,以及持续更新的GitHub仓库供读者参考。本书适合人工智能相关专业、计算机专业、计算数学专业的高年级本科生、研究生学习,也可供涉足该领域的研究人员、工程师参考。
第1章 基础 1
1.1 你好,流体模拟 1
1.1.1 定义状态 2
1.1.2 计算运动 3
1.1.3 边界处理 5
1.1.4 可视化 6
1.1.5 最终结果 13
1.2 如何阅读本书 13
1.2.1 获取代码 13
1.2.2 阅读代码 14
1.2.3 阅读数学表达式 21
1.3 数学 21
1.3.1 坐标系 22
1.3.2 向量 22
1.3.3 矩阵 34
1.3.4 线性方程组 38
1.3.5 场 43
1.3.6 插值 57
1.4 几何 64
1.4.1 几何表面 64
1.4.2 隐式表面 68
1.4.3 从隐式表面到显式表面 71
1.4.4 从显式表面到隐式表面 72
1.5 动画 73
1.6 基于物理的动画 78
1.6.1 基础入门 78
1.6.2 物理动画示例 80
1.7 流体动画 93
1.7.1 重力 94
1.7.2 压力 95
1.7.3 黏性力 97
1.7.4 密度约束 98
第2章 基于粒子的模拟方法 100
2.1 像修拉一样看世界 100
2.2 数据结构 101
2.2.1 粒子系统数据 101
2.2.2 粒子系统案例 104
2.2.3 邻居搜索 110
2.3 光滑粒子法 117
2.3.1 基础 118
2.3.2 动力学 132
2.3.3 结果和局限性 139
2.4 具有较大时间步长的不可压缩SPH 141
2.4.1 预测与校正 142
2.4.2 实现 142
2.4.3 结果 149
2.5 处理 151
2.6 讨论和延伸阅读 157
第3章 基于网格的模拟方法 159
3.1 像素化世界 159
3.2 数据结构 160
3.2.1 网格类型 161
3.2.2 网格系统数据 169
3.3 微分算子 172
3.3.1 有限差分 172
3.3.2 梯度 174
3.3.3 散度 176
3.3.4 旋度 178
3.3.5 拉普拉斯算子 181
3.4 流体模拟 182
3.4.1 碰撞处理 184
3.4.2 对流 190
3.4.3 重力 201
3.4.4 黏性力 201
3.4.5 压力与不可压性 214
3.5 烟雾模拟 223
3.5.1 浮力 224
3.5.2 对流与耗散 225
3.6 带界面的流体 226
3.6.1 在网格上定义界面 226
3.6.2 自由界面流动 233
3.6.3 结果 243
3.7 讨论和延伸阅读 245
第4章 混合求解器 246
4.1 为什么要混合 246
4.2 胞中粒子法 246
4.2.1 从粒子到网格的转换 249
4.2.2 从网格到粒子的转换 250
4.2.3 移动粒子 251
4.2.4 结果 252
4.3 流体隐式粒子法 253
4.4 其他方法 256
4.4.1 粒子水平集法 256
4.4.2 涡旋粒子法 257
4.5 讨论和延伸阅读 257
附录A 基础知识增补 259
A.1 共轭梯度和预条件共轭梯度的实现 259
A.2 自适应时间步长 264
附录B 基于粒子的模拟方法增补 266
B.1 SPH核函数 266
B.2 PCISPH推导 267
附录C 基于网格的模拟方法增补 271
C.1 网格上的向量与矩阵 271
C.2 迭代求解器 274
C.2.1 雅可比方法 274
C.2.2 高斯-赛德尔方法 276
C.2.3 共轭梯度法 277