描述
开 本: 128开纸 张: 胶版纸包 装: 平装-胶订是否套装: 否国际标准书号ISBN: 9787121477195
流体力学领域经典著作
从开发者视角解释流体动画中的核心算法
提供实用且具体的代码框架
帮助读者学习流体动力学并编写自己的引擎
本书围绕人工智能中的基础数学理论问题展开讨论,介绍了粒子法、网格法,以及混合方法的基本概念,以及它们在动画引擎开发过程中的代码实践。本书的一大特色是为读者提供了面向代码的方法,便于读者上手动画引擎的开发基础。本书兼具实用性和理论性,不仅有详细的理论介绍帮助读者深入理解相关的概念,还提供丰富的代码,以及持续更新的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
流体动画是一个复杂的问题。求解流体动力学被认为是数学中最具挑战性的问题之一,与此同时,其复杂性之美吸引了许多开发人员和研究人员,涵盖视觉效果在故事片中的运用、互动游戏、AR/VR应用程序,甚至媒体艺术等各个领域。然而,流体动力学的复杂性常常让新手不知所措;即使是具有出色的编程技能和数学知识的人也常常会迷失在方程式中,不知道从哪里入手。
本书的目标是为新手构建流体模拟引擎提供一个全新的起点。本书的主要读者是视觉效果工程师、游戏开发人员、媒体艺术家,以及缺乏数据分析或计算流体动力学深厚知识和经验的学生或计算机领域爱好者。本书涵盖最经典和最常用的技术和代码,以帮助感兴趣的读者学习流体动力学并编写自己的引擎。读者一旦理解了流体模拟的本质,就能够扩展代码库以处理更加复杂和独特的问题。
大多数核心算法都将从开发者角度进行解释,将提供实用和具体的代码示例,而不是抽象的理论。基本的数学不会被省略,如有必要,将解释更深入的细节。读完本书,读者将能够了解引擎的各个部分是如何工作的,并能编写出一个可以工作的流体模拟引擎。然而,本书并不是代码段的集合,也不是API文档。这种对开发人员友好的呈现旨在以尽可能轻松的方式传达流体引擎算法的本质,而不仅仅是提供一个黑盒。
本书共4章。第1章介绍基础知识,解释编写模拟代码的主要步骤,例如向量和矩阵运算及物理动画的概念。第2章和第3章分别介绍模拟流体的两大范式——粒子和网格。这两种方法具有鲜明的特点和明显的优缺点,我们将在这两章结合各种模型和求解器讨论这些主题。第4章介绍结合这两种方法的思路及不同的混合方法。
希望本书能激发读者的灵感,使其构建自己的流体引擎或将随附的代码库用于各类应用程序。即使在本书出版后,源码也会随着更多特性的添加和改进不断发展。希望作者的代码库成为读者互动和分享想法的地方。
本书是一本独特的流体模拟指南。它以清晰的结构和详细的解释,使得复杂的概念变得易于理解,详解了工程实现的每一个步骤,同时保持了足够的深度。它将引导初学者和专业人士一起探索流体动力学的奥秘。本书既是一个完美的学习工具,同时也是科研和工业应用中不可或缺的参考资料。
——蒋陈凡夫,加州大学洛杉矶分校(UCLA)副教授
这是一本非常有意思的流体模拟指南。作者首先循序渐进地梳理了流体模拟中用到的数学、物理知识,然后分别系统地介绍了基于粒子和基于网格两种模拟方法及二者的混合方法。本书不但有详细的代码介绍,帮助读者体验流体模拟的魅力,还提供了作者关于各类方法的讨论,帮助读者延伸思考。相信无论是初学者还是专业人士,都能从阅读本书中获益。
——胡光辉,澳门大学数学系副教授
评论
还没有评论。