3月6日晚,皮克斯动画工作室的资深科学家托尼克斯瑞斯(Tony DeRose)在纽约市的数学博物馆(The Museum of Mathematics)做了一场演讲,分享电影中的数学。果壳网编译了网络科技媒体“The Verge”的资深主笔兼记者Tim Carmody发回的现场笔记,并做了评注。致我们所爱的电影和游戏里的数学。
托尼克斯德瑞斯穿了件花哨的皮克斯T-shirt,缓步在纽约的数学博物馆演讲厅的座席间,乍眼一看,他横竖也不像个科学家。他频频向坐在位子上的未来小技术宅致意,以及向随这些小技术宅同来的各位家长和老师问好。听众中也不乏年长的数学死宅及其基友。
还有个二十几岁的哥们,他曾经是《汽车总动员2》的龙套演员(他的动作捕捉被作为制作动画的蓝本)。他带来了他娘,因为他老娘想见识下这些幕后的电影工作者是怎么把他儿子的动作搬上荧幕的。
托尼·德瑞斯开始发话:“看到男女老少都来听这个讲座真好。”随即他问:“你们都看过皮克斯的电影吗?”可以预料的是,全场的人都举起了手。
他接着问:“看过3部的举手。5部呢?全部的呢?”最后演讲厅里面几乎1/4的观众举起了手。托尼克斯德瑞斯赞叹道:“牛啊。”
他一边向全场观众微笑,一边在心里想:“集(Gig)会在此,无比(bit)赞也。”(译注:原文为“This gig is not a bit bad”,相当有水平的双关使用。gig本是现场表演的意思,直译“这次演出一点也不赖”,但同时gig也是Gigabyte/Gigabit平时在英文中的简写,对技术宅来说这句话就是“这一个G一个bit的坏道都没有”。)
托尼·德瑞斯今天的演讲题目是“电影中的数学”(Math in the Movies),主题就是他的工作——怎么把代数和几何融入软件之中,从而渲染出各式各样的物体,或者驱动复杂的物理引擎。
托尼解释说,这套流程,全世界的电脑动画工作室和电子游戏制作者都在用。他来这里演讲的目的之一,就是告诉大家,动画师和游戏设计师若有大志,那么数学功底一定要过硬。
身为皮克斯的资深科学家,托尼·德瑞斯数学功底何止过硬,简直是太硬——美国加州大学伯克利分校的计算机博士,专攻计算物理学,然后又在华盛顿大学当了十多年的计算机工程的教授。
托尼·德瑞斯的这场演讲,是数学博物馆在曼哈顿新园区开设的 “数学奇遇记” 系列演讲的第一场。在这之前,他已经做过多次类似的演讲,每次都会带来皮克斯的科学家如何让技术更进一步的故事,以及大家喜闻乐见的电影制作秘闻。
在计算机制作的动画中,头发、衣服、流体和气状物(比如云、烟、火),都有自己专属的物理引擎,而到了具体的电影中,这每一大类的专属模拟引擎又会根据情况得到进一步增强,表现出更加炫目的效果。
托尼·德瑞斯说:“模拟水很简单;难点在于,用什么方法模拟出来的水,怎样才像真的水,能被引导往某个方向流动。”(译注:在欧拉坐标系下水流模拟需要的计算机资源太多,而使用拉格朗日坐标系进行的追踪每个格点的模拟需要资源较少,但实际上是在模拟黏性不大不可压缩的固体。)
托尼·德瑞斯举了《勇敢传说》(Brave)里面的例子:梅莉达一头蓬松卷曲的红发,便是用了全新的物理引擎模拟出来的。(译注:传统的头发模拟是使用类似浆糊的体积模拟,而不是一丝一丝的进行碰撞模拟,浆糊里面每一个点的波动会传播到周围的点,并且有一定的传播速度和衰减程度,最后这一大块浆糊被赋予头发的丝状材质,而梅莉达的蓬松卷发则更类似于多体的弹性和非弹性碰撞,故而传统的头发模拟引擎派不上用场。)
托尼·德瑞斯和皮克斯动画师团队绞尽脑汁,终于制作出来梅莉达那一头得比真的还真、极具表现力的秀发模型——当然,这头秀发的模拟计算量还要我们的超级计算机能承受。
托尼·德瑞斯继续解释:“真实世界里面,头发无时无刻都在彼此发生着碰撞。梅莉达的头发有10万个单独的有限元,而n个物体在下一时刻有n2种碰撞可能,10万个元就会有100亿种可能。如何制作一个能快速模拟出100亿种碰撞可能的引擎?这里,我们使用了特别的数据结构,使得这些碰撞可能性被去粗取精,没用的碰撞可能性就被剔掉了。打个比方来说,如果对比‘傻而快’的MP3或者JPEG压缩算法,我们创造的则是头发模拟界的FLAC或者PNG的压缩算法。”
(译者:主流MP3的压缩算法通过删除掉高频率的声波减少数据量。JPEG压缩算法和MP3类似,首先进行空间到频率域上的变换,再削掉高频部分,高对比度的边缘被平滑后产生的色块便是压缩的痕迹。FLAC的压缩则是在频率分离之后进行线性预测,简单说来,就是声音有多少频率,就把多少频率吸纳进来,再进行Colomb码的进一步数字层面的压缩;这种过程是可逆的,所以产生的压缩是无损的。)
皮克斯动画《勇敢传说》海报,女主角的一头红发包含了10万个单独的有限元,可以100亿种可能的方式碰撞
再来一张梅莉达的近照,重点看那圆脸——哦,不——看那比真实更真的头发
卷发丝模拟中用弹簧弯曲对比不用弹簧弯曲,在受力之后3帧的区别
托尼·德瑞斯又提到,CG动画制作经常需要模拟超大规模、尺度精细的物理模型,较之物理学家平时所需的科学计算是有过之而无不及。托尼·德瑞斯的工作,就是为这些物理模拟寻找更优的算法,保证模拟之尺度的同时又不失微小细节。
德瑞斯风趣的说:“导演总是说‘这些都是小问题啦’。这里我负责地告诉大家——导演都撒谎了。”
如果哪天皮克斯的导演突然有了新点子,导致片中角色或者其相关的物体的物理性质发生了根本改变,电影的物理模拟需要重新来过,那皮克斯全部4个团队一起干,都别想一年制作出一部片来。
曲面细分法
托尼·德瑞斯对CG动画制作界最为重要的贡献,就是引入了高还原度的曲线/曲面的生成算法:如何将复杂的形状分解成电脑可以生成的多边形。
多年以来,电脑动画和电子游戏制作都在致力于用多边形来表示一个真实世界的三维物体,但是,使用多边形的问题就在于,仔细一看,还是看得出来多边形的棱角的。CG业界的趋势是用“平滑”曲面代替多边形,这些“平滑”曲面会经过原来多边形顶点所在的位置。数学家针对此方,发明了各种快速生成“经过固定点的‘平滑’曲面”的方法。
例如曲面细分,将原本一个多边形按照曲面的曲率拆解成多个多边形,并且不断重复该过程直到达到允许的自由度上限。从曲线的角度来看,连接曲线经过的始点和终点的线段是对曲线的“模拟”,如果细分的话,加入曲线上的中点,分别连接始点和终点成为两条线段,这是对该曲线更好的“模拟”,而这个过程可以不断进行下去。(译注:原文说“平滑”曲面可以做到任意放大仍然光滑,实际上计算机是做不到这点的,只能达到人眼解析度没法分辨的程度。)
曲面细分第一次在皮克斯制作动画时被大量使用,可追溯到1997年的奥斯卡最佳短片《棋逢敌手》(Geri's Game)。这部电影相对于以往基于粗网格多边形的动画,那简直就是惊天地泣鬼神的飞跃,一举奠定“皮克斯风格”。
1997年奥斯卡最佳短片奖《棋逢敌手》(Geri's Game)。皮克斯在制作该片时首次大量应用了曲面细分算法,精致的细节模拟开创了“皮克斯风格”
《棋逢敌手》的主人公Geri头部的三维曲面细分
托尼·德瑞斯当时将他在学术界的研究成果和多维曲面上的小波计算,应用到皮克斯的曲面生成算法中(译者注:小波变换的一大优势,在于可进行多尺度多分辨率的计算分析)。
《棋逢敌手》中Geri鼻子的复杂几何曲面,还有随风飘动的衣褶;几年后《超人总动员》(The Incredibles)里,每一个建筑、每一扇窗户,所有物体的所有细节都是曲面细分的产物。现在几乎每个皮克斯动画制作项目都会用到曲面细分。从计算几何的学术界到个别的动画短片尝试,而今曲面细分算法已然成为PC游戏、CG动画的行业标准。
托尼·德瑞斯和他的研究团队制作电影同时,仍然不忘在学术界灌水论文,并且关注学术界最新进展,方能将最新的成果用到皮克斯的动画渲染引擎中来,不过,现在皮克斯的研发部门和渲染软件已经不像几年前那样领先业界数个身位了。
以前,一个角色模型的光照和着色,还有定义各种动作的参数首先是数学上的难题,接着是写代码上的难题;但现在,像Blender一样的开源软件,也能比肩皮克斯自主研发的软件。
2012年夏天,皮克斯发扬互联网的分享精神,将他们的曲面细分代码库开源,放到了网站GitHub上。对于这一举动,托尼·德瑞斯解释说:“我们曾经领先业界十年,不过现在更得益于让大家来一起参与开发。”
皮克斯最大的竞争优势,在于其超卓之驾驭新科技的能力,这些新科技又是基于最新的数学研究,不但能更好得模拟出物理,渲染出更漂亮的图形,也为更好得讲故事服务。
托尼·德瑞斯和皮克斯并没有满足于现在的成就,他告诉讲堂里未来的技术宅小朋友:“世界的某个角落,肯定有天才技术宅儿童和宅友正在摆弄着类似Blender一样的工具,而他们,将是下一个皮克斯。”