本书基于原作者开设的一门关于物理建模的课程编写而成,概括地介绍了这一领域的知识,包括对粒子、粒子系统、刚体、约束系统、铰接体、流体等的模拟,还深入介绍了相关的数学知识。本书兼具实用性与理论性,既有丰富的伪代码供读者参考,也有详细的理论推导帮助读者深入地理解相关的概念。
本书适合计算机专业的中高年级本科生、研究生学习,也可供涉足该领域的研究人员、工程师参考。
解密计算机动画技术内幕 || 腾讯游戏资深游戏团队献礼级译作 || 粒子|粒子系统|刚体|流体物理模型全覆盖
译者序
电子游戏、动画和建模等许多行业都会用到物理的知识。虽然之前市面上已经有多种介绍游戏、动画所需的物理知识的图书,但是在译者看来,这本《基于物理的建模与动画》无论从内容的广度还是深度来说,都非常值得一读。这本书覆盖了对粒子和粒子系统、刚体、流体等多种物理模型的建模和模拟,所以译者也相信把这本书翻译成中文,对国内相关领域的工作者会有很大的帮助。
这本书兼具理论性和实用性,既有详尽的理论阐释、公式推导,可以帮助读者建立起正确的概念和知识体系,也有丰富的伪代码,可供读者参考以完成自己的项目。
本书分为五个部分。第 1部分(第 1~3章)讲解了物理建模的基础知识。第 2部分(第 4~8章)介绍了基于粒子的模型,包括粒子系统、可变形网格等内容。第 3部分(第 9~12章)介绍了刚体动力学、碰撞与约束,以及模拟复杂骨骼的铰接体动力学。第 4部分(第 13~15章)介绍了流体的模拟,包括流体力学的基础知识、常用的模拟方法。第 5部分是附录,补充介绍了本书涉及的数学基础知识。
虽然原作者假定读者只需要具备大学一年级的数学知识(基础的微积分和线性代数知识),但是后续章节还是比较深入的。译者在翻译的过程中尽可能地补充了相关的知识,来帮助读者理解,特别是第 11章和第 12章。作者在第 11章中引入了一些通常只有物理专业才会学习的分析力学的知识,译者相应地补充介绍了分析力学的基础概念。读者要理解第 12章的内容需要非常熟悉刚体转动参考系中速度和加速度的变换,译者也补充了一些篇幅介绍了这方面的知识。还需要说明的是,第 12章原作者参考的几个文献,基础符号的约定其实略有差别,译者也专门查阅了这些文献,推导、整理清楚了其中的关系。
从开始翻译,到校对即将出版,陆陆续续也经历近三年的时间。译者在翻译这本书的过程中,也收获了很多。最后,鉴于译者水平有限,错漏之处在所难免,希望读者批评指正。
前言
萌生撰写本书的想法源于 1994年,当时 Donald House在得克萨斯州农工大学给可视化理工硕士开了一门基于物理的建模课程。自那时开始,他每年都会教这门课, 2008年转到克莱门森大学也继续开设这门课。他离开得克萨斯州农工大学后,John Keyser接手教授这门课并延续至今。虽然我们已教授这门课 22年了,但从来没有一本支撑这门课的教科书。本书的所有插图都来自这门课的学生项目,插图标题下都载有学生的名字。
本书包含了我们在教授这门课时所用的材料,以及一些补充内容。我们的目标是对基于物理的建模领域做一个全面概括,为踏入此领域的研究人员提供有用的参考,或者将其作为一本教科书。我们在设计本书的大纲时,想法是提供一些基础性内容,基础到能让读者用代码实践动画项目,同时还要提供你踏足本领域后所需的拓展性的研究文献。如果你想要使用现成的物理模拟套件写代码,或者使用专业工具,如流行动画软件中的物理引擎,本书也会有这方面的讲解,使你知道这些软件在背后做了什么事情。
由于我们希望本书能相对“常青”,因此在写作时不考虑任何编程语言或图形 API,均以伪代码来表示算法,不含示例的源代码。在我们的课程中,学生们使用 C++编程语言并以 OpenGL作为图形 API。选择这个组合是出于性能方面的考虑。但是,若可接受一点性能开销,你在做项目时也可以采用 Java、C#或 Python语言,配合使用任何可用的图形 API,或者也可使用 Processing和 D3等有内建图形功能的套件。
我们的学生报读这门课有着不同的动机,例如想投身于这个领域,或者想在艺术方面应用动画技术。我们有许多学生为未来职业生涯考虑,想成为电影、动画及游戏工业中的视觉特效师,实际上有很多学生后来确实从事了这些工作,有的还成了大制作电影的首席特效师,获得了美国视觉特效协会( VES)的奖项和提名。我们的学生来自不同的学术领域,从工程到艺术都有。他们没有接受相同的训练,但他们有共同的兴趣和爱好。我们这门课会有各种受众,所以这门课不是专为计算机科学和工程专业的学生而设的。这门课假设学生上过最少两学期的微积分课,熟悉微分和积分的概念,也必须是一个称职的程序员并熟悉基本的图形显示技术。
为了适应多元化的学生,我们在课程中安排了必需的数学原理的相关介绍,主要是线性代数方面的知识。我们把这些内容放在 6个附录中。这种编排可以避免在本书的主线中穿插背景知识。老师可以按学生情况把这些内容安排到课程当中。而一些基本概念的复习内容,以及进阶数学概念的讲解内容,则放在正文中。
虽然我们教授的是入门课程,但本书也为向研究人员介绍这个领域而写,所以我们会选择性地在书中加入一些进阶题目,其中包括对高阶数值积分法、加速模拟的方法、稳定性分析、流体模拟技术、刚体模拟中的多接触处理、约束系统,以及铰接体的介绍。这些内容可作为第二门课程的基础,或是作为附加的学习内容。
每一本书都有其局限性,这本书亦然。本书缺少了一些基于物理的动画的重要内容,包括有限元建模(finite element modeling)、带符号距离场(signed distance field)、流体表面模拟及角色动画等。有限元越来越多地用于模拟变形材质。带符号距离场具有多种用途,如追踪流体表面随时间变化的形状,更高效地预测碰撞等。而在很多水体场景中,流体表面经常是我们唯一感兴趣的地方。在这种情况下,最好用高度场和波动的方法,而不是用纳维 –斯托克斯方程。另外,令角色栩栩如生是动画的终极目标,现今的游戏和电影亦如是,其中也越来越多地用到基于物理的动画,如配合动作捕捉制作非常写实的角色动作。若本书获得成功,我们希望这些领域的专家能为第 2版提供相关内容。
我们计划维护一个网站,为本书读者提供长期的支持。首先,这个网站会放每章的部分练习内容、能增强理解的程序示例,以及一些如矩阵和矢量的程序库。本书的勘误表放在 http://www.cs.clemson.edu/ savage/pba/。
此外,我们对不同目标受众提供了 3个课程大纲建议。
中年级计算机科学本科生的课程大纲
这个为期 15周的课程大纲的主题是基于粒子的模拟。作业项目包括三维弹跳球、粒子系统模拟、群集(flocking)系统和基于弹簧的可变形物体。若时间充裕,非常鼓励学生去设计自己的项目并加以实现。我们发现,要求在项目提议书中加入视觉参考资料,对项目的成功起到关键作用。视觉参考资料可以是任何能展示学生想达成的目标的东西。例如,可以是原创的草图或相片,或是网上找到的影像和动画。我们会正式地审核提议书,提出必要的修改建议,最后按学生成功达成提议书目标的程度给予评分。
高年级本科生或第一年研究生的课程大纲
这个为期 15周的课程覆盖粒子模拟更细致的内容,并提供刚体模拟及流体模拟的入门知识。这些内容类似于我们一直以来所教授的课程。除了上述内容,学生可以实现刚体模拟,其中包含与无限平面的碰撞,或者实现二维 SPH流体模拟。经验告诉我们,学生通过自己策划的项目来完成课程,最受欢迎且也最能出现最优秀的成果。我们建议采用与上一课程大纲相同的提议书及评分方法。
具有计算机图形学、线性代数及微分方程背景的研究生课程大纲
我们相信此课程大纲能覆盖整本书的内容,并注重更多进阶题目,包括多刚体碰撞、含摩擦力的接触、约束系统、铰接体及流体模拟的完整内容。老师也可以跨越本书中的内容,例如考虑与以下题目相关的文献:含自碰撞的进阶布料模拟、带符号距离场、有限元方法及角色动画。我们不尝试给这种程度的课程提供建议的教学顺序,而是鼓励老师为课程内容设置一个焦点,设计两三个作业以建立根基,然后让学生设计并实现自己的项目。