《代码本色》推荐序
我们在这个行星上已经生活了数十年,虽然不一定对这个世界的自然规律有深入的理解,但肯定已经习以为常。例如在足球比赛中,我们能欣赏到美妙的曲线任意球。如果足球在空中突然直角转向,我们一定会觉得很“不自然”。又例如,我们有时候能看到上千只鸟集体飞翔,它们并不是乱飞一通,而是按照某种规律组成不断变形的群体。如果它们互相碰撞而掉下来,我们很可能会怀疑它们是否生病,做出这些“不自然”的行为。
充满好奇心的人们,可以通过学习物理学、化学、生物学等学科去了解各种自然现象。但对于一些程序员、艺术家,他们除了希望对这些原理有所了解,还希望能在作品中模仿这些自然现象。
模仿、模拟等词汇意味着我们并不是要完整地复制自然世界,而是通过抽象、近似化等方式,获取当中我们认为重要的特性。例如,我们知道水是由水分子所组成,但肉眼看不到这么小的水分子,更常见的是水滴、容器中的水、海洋等。要模仿淋浴花洒的水流动态,我们可考虑以水滴为单位,逐一模拟它们以某初始速度射出,然后受地心引力影响而产生抛物线的移动路径。但要模仿海洋时,我们可能更关注它海面的波浪,而不是海面下巨量溶积的海水。在此情况下,我们可能会模拟海面上一些分布点的垂直运动,做出波浪起伏的效果。
或许读者(及正在考虑阅读本书的人)会问,为什么要用软件模拟这些自然现象呢?抛开职业、学业上的需要,我认为最简单的答案是,用程序编写这些现象本身就是很有趣的事情。编程不单能处理网页请求、计算账目、储存数据,原来还可以创造出富含自然现象的虚拟世界!
若以职业来考虑,游戏、动画、电影特效、视觉艺术等行业都会需要这方面的知识。例如在游戏方面,由于许多游戏都含有一个虚拟世界,这些自然现象的模拟技术可以应用于程序式建模(如地形、植物)、程序式动画(如粒子特效、云层变化)、游戏逻辑(如刚体物理)、人工智能(如非玩家角色的移动)等。在动画方面,虽然不需要能互动的虚拟世界,但为了视觉上的真实性也需要使用计算机实现各种自然现象,例如为了制作《冰雪奇缘》,迪士尼与加州大学洛杉矶分校就研究出一种模拟雪运动的新技术。
虽然本书书名含“代码”二字,却并不是只有程序员才能阅读。在国内游戏行业里有一句俗语:“不会美术的程序员不是好策划。”我们不必为自己的知识技能设限。刚刚在 2014 游戏开发者大会(中国)上,前同事 Ken Wong 就道出自己如何从一位概念美术师(参与作品《爱丽丝:疯狂回归》),退隐一年学习游戏编程及思考游戏设计,然后建立团队创作出获得苹果年度设计大奖的《纪念碑谷》。
这本书作为这个领域的入门书籍,使用了简易的 Processing 编程语言作为例子,非专业程序员也会很容易理解。但如果读者对编程真的完全没有概念,可以先读一些 Processing 入门书籍。由于本书涉猎甚广,若读本书后感到意犹未尽,除了可再读本书的参考文献,Texturing and Modeling, Third Edition: A Procedural Approach 也是一个不错的选择。
叶劲峰
游戏程序员
2014年10月
Milo Yip
MISC