8 月 8 日至 11 日,计算机图形学国际顶级会议 SIGGRAPH 在加拿大温哥华举办。2019 年图灵奖和多次奥斯卡奖「双料得主」Pat Hanrahan 和 Ed Catmull 在大会上亮相,作了一场题为“Shading Languages and the Emergence of Programmable Graphics Systems”(着色语言与可编程图形系统的出现)的报告。
Pat Hanrahan,皮克斯动画工作室创始人之一,现任斯坦福大学计算机图形学实验室教授。他在皮克斯动画工作室主导了 RenderMan 界面规范和 RenderMan 着色语言的设计,并参与了《玩具总动员》等皮克斯经典作品的制作。凭借在渲染方面的杰出工作,他曾 3 次获得奥斯卡金像奖。
Edwin Catmull,著名计算机科学家,皮克斯动画工作室联合创始人及前总裁,曾参与创办纽约理工学院(NYIT)计算机图形实验室,该实验室被称为现代视觉特效的起源地。他将自身对于动画的热爱与计算机图形学融合,依靠自身技术先后 9 次获得奥斯卡金奖。
2019 年,为表彰他们对 3D 计算机图形学的贡献,以及对电影制作和计算机生成图像 (CGI) 等应用的革命性影响,Hanrahan 和 Catmull 这两位计算机图形学的奠基者被共同授予图灵奖。
在本次演讲中,Hanrahan 通过他在皮克斯和斯坦福的图形学研究经历,展示了自上世纪 80 年代以来渲染系统、着色语言、GPU 等的发展历程。他认为,图形学的发展带来了计算机体系结构的黄金时代,使得我们可以构建不同类型的计算机来优化不同的任务。
而 Edwin Catmull 讲述了自己入门计算机图形学、为了图形学发展而奔走求职,再到创立 Lucas 影业计算机图形学部门的传奇经历,而这个部门正是皮克斯的前身。Catmull 回忆道,在那段时间里,自己与身边的创作者们在各自的领域突破限制,将各种不可能变为现实,那是一个激动人心的时代。
Pat Hanrahan
获得图灵奖实在是荣幸之至。第一位在计算机图形学领域获得图灵奖的人是计算机图形学之父 Ivan Sutherland(1988 年)。Edwin 是 Ivan 的学生,而我在皮克斯动画工作室工作,所以这是两代研究者共同的荣誉。在我之前的一整代计算机图形学学者为这个领域奠定了基础,在早期的职业生涯中给了我很多启发。
▲1988 年图灵奖得主 Ivan Sutherland
我因为在电影行业的计算机图像生成作品受到赞誉,我就首先从这方面讲起。下面这张著名的虚拟图像是由 George Lucas 的电影公司 Industrial Light and Magic(简称“工业光魔”)制作的,名为“The Road to Point Reyes”。Point Reyes 是北加州的一个海滨,制作这张图像旨在让 Lucas 相信计算机图形学可以为想象中的世界绘制逼真的画面,可以创造出我们在世界上看到的多样性,并展示出令人信服的细节和复杂性。
▲The Road to Point Reyes
被授予图灵奖后,我意识到,更大的计算机科学界实际上并不太了解计算机图形学或制作电影所需的知识。他们认为这很神奇,的确很神奇,我不得不向人们解释计算机图形学是什么,以及制作电影需要什么样的图形学知识。我们需要开发模型和算法来为我们周围的一切创建图片,整个 SIGGRAPH 圈都在为此共同努力。多年来,我们弄清楚了如何制作人的照片,如何渲染人、地点、事物、茶壶、兔子、山、腿、溪流、云、彩虹、光晕、光环、布料。我还研究头发和皮肤。不仅仅是 Edwin 和我,整个图形学圈子提出了几百上千个超酷的想法,使得制作电影成为可能。
这张照片只是早期用图形学能制作出虚拟图像的一个例子。我们在卢卡斯电影公司时,Lucas 主要为他的电影做特效,目标是创建可以无缝融合到实景中的计算机图形。
下图是早期的一个应用:1985 年工业光魔发行的电影“Young Sherlock Holmes”(《少年福尔摩斯》)。你可以看到教堂里的彩色玻璃人物。
▲电影《少年福尔摩斯》
计算机图形学的早期目标是制作逼真的图像,这也是我们的第一个目标。
渲染系统
我们当时有一个叫做 Reyes 的渲染系统。Reyes 是 “render everything you ever saw” (渲染你所见过的一切)的有趣缩写。我们的目标是模拟视觉世界的多样性,眼睛能看到什么事物,我们就要做到能对此进行建模。我们想要实现完全不同层次的几何和视觉复杂性;想要没有伪影的、能与实景结合的高质量图像;我们想让这个渲染系统一直能在硬件中高效工作。
大家应该读过 Robert Cook、Loren Carpenter 以及 Ed Catmull 合著的这篇关于 Reyes 的图像渲染架构的伟大论文。当我到达目的地时,他们已经完成了所有这些令人惊叹的创新工作。
我在 1986 年到皮克斯的时候,我们有一个硬件方面的目标。我们要渲染一个具有 8000 万个微多边形的场景,而在当时,如果你购买一个硬件,它可能只能够渲染 40000 个多边形。我们需要的计算总量远远超出了我们用现有机器所能做的事情。所以,除非我们构建硬件来加速过程,否则我们不可能做到这一点。
以 Monsters University (《怪兽大学》)这部电影为例,它需要 1 亿小时的 CPU 时来计算,这大约比我们的目标高出 100 万倍。1983 年到 2013 年,30 年来,在摩尔定律下,计算能力每 5 年增加大约 10 倍。所有的一切都是通过计算能力的提高来实现的。
我的工作是在渲染质量中处理着色语言。下图是 1983 年的我,当时我是一个非常快乐的研究生,那是我发现计算机图形学大约 1 年后,我花了 1 年时间自学如何用 C 语言和 unix 编程,我以前不知道如何编程。我决定学习编程是因为我想学习计算机图形学并创作一些东西。我努力实现每篇论文,我工作的实验室里有一个 STC 图形终端,我整日坐在那里编写软件来实现各种算法。
▲1983 年的 Pat Hanrahan
这是我写的第一篇论文,题目是“Procedures for Parallel Array Processing on a Pipelined Display Terminal”。事实上,当时我的导师 Lenn Yore 对神经网络非常痴迷,他主要研究计算机视觉和硬件。这些为硬件构建硬件和语言的想法,自从我开始从事图形学以来就一直存在于我的生活中。
在我加入皮克斯之后,我读到了两篇很棒的论文,其中一篇是 1984 年 Robert Cook 发表的“Shade Trees”,是当时 Render Advance System 项目的一部分,另一篇是 1985 年 Ken Perlin 发表的“An Image Synthesizer”。他们的想法是,如果你有一个渲染系统,你应该为它构建某种语言或某种扩展它的某种方式。
这是我当时写的语言。除了我,没有人喜欢这张被腐蚀了的茶壶的照片,我以前一直用它作为我的测试示例。
茶壶上的凹凸不平是由 Ken Perlin 提出的噪声函数产生的,你只需将六个分形杂色(fractal noise)相加,就可以创建这种随机的凹凸纹理,然后再用它来对表明进行扰动。最后,计算表面法线(surface normals),对事物进行着色。这就是一个典型的 RenderMan 着色器。所以实际上,我的贡献只是在 Robert 所做的事情基础上,构建了一门完整的语言,并弄清楚了如何在软件中有效地实现它。
这是早期阶段我们在 80 年代做这件事的时候。老实说,我做这个研究的主要原因是懒惰。我的用户都非常苛刻,他们对渲染系统的用途有 100 万个想法,他们想让我做的事情太多了,我当时主要在做 Reyes,设计这种语言并告诉他们自己去做他们想让我做的所有事情,所以这在很大程度上是一种权宜之计。
大约在同一时期,图形处理单元(graphics processing units,GPU)和图形工作站 (graphics workstations)出现。kurt Akeley 在 1982 年硕士毕业后到硅谷图形公司(Silicon Graphics,SGI)与 Jim Clark 一起工作。我最喜欢他的一篇论文是“RealityEngine Graphics”。在 1984 年,工作站所能做的就是画线框;在 1988 年,可以绘制阴影多边形;到了 1992 年,你可以得到完整的纹理映射(texture mapping)。这中间花了 8 年。摩尔定律在同时发生作用,但这项技术并非一夜之间发明的。
OpenGL 架构
当我 1995 年到斯坦福工作后,兴起了一股 GPU 热潮。在某种程度上,英伟达在 1999 年命名了 GPU(Graphics Processing Unit)这个术语。他们第一次使用 GPU 这个名称,在单个芯片实现了完整的图形管道。而在此之前,芯片可以做光栅化 (rasterization)、可以画三角形、画线,但无法在光照方面做转换。
这个 GPU 是用 1700 万个晶体管制成的,如今 GPU 中的晶体管数量实际上是其数千倍,但在当时,得到整个图形是一个相当大的工程奇迹。以前的图形管道比如一个 SGI 机器是由多块芯片构成的,而这个 GPU 在单个芯片上实现了全部,这是一个真正的突破。
我认为 Kurt 最重要的工作之一,是开发了 OpenGL 架构,这里只是示意性地绘制了一个简化的视图。那个时候,皮克斯和 SGI 决定共同开发一个 3D 界面,Kurt 代表 SGI,我代表皮克斯,我们每周都要一起开会。
最后,我们分道扬镳了,我们完全尊重彼此的所作所为。我记得他有一天向我解释过,为一个工作站或者交互计算机开发一个图形库,跟为一个渲染系统开发图形库非常不同。事实上我认为 OpenGL 和比 RenderMan 更有影响力,因为前者实际上可以在我们的每一台计算机上运行。
关于 OpenGL 真正有趣和重要的是,它是一个架构,这样的架构规范意味着它独立于任何特定的实现。我们都知道 IBM 360 系统之父 Fred brooks,他获得了 1999 年图灵奖,但不是因为他在计算机图形学方面的工作,而是因为计算机架构方面的工作。架构规范只是提供了一个构建方式的蓝图,有了它你就可以通过多种不同方式去实现它。
这个架构实际上与 CPU 指令架构的设计非常相似。因此,在某种意义上,它为图形芯片奠定了基础。多年过去,已经又出现了不少进步,比如 DX 9 和 DX 10 等,已经超出了 Kurt 一开始所做的。
我离开皮克斯之后还继续在做语言和架构这两件事。我在 1995 年写过一个基金申请。我写道,我想做超出我们现在可以做的事情,下一步该做什么非常明显,那就是光线追踪、全局照明。并不难做出这样的预测,因为我们可以想象摩尔定律的向前发展,并将我们已经想出的方法应用到硬件中。
实时可编程着色语言
在那之后,人们试图提出实时可编程着色语言。北卡罗来纳大学教堂山分校的 Henry Fuchs 和其他人领导的团队开发了 Pixel Planes 和 Pixel Flow 架构。最早的实时着色语言之一是由 Mark Olano 和 Anselmo Lastra 在 1998 年开发的,还有 Mark Peercy 在 2001 年开发的一个系统。我们在 2001 年开发了一种称为“Real-time Shading Language”的着色语言。之后到 2003 年,Bill mark 和 Kurt Akeley 以及其他在英伟达工作的人做了 CG。后来,HLSL / GLSL 也都在那个时候被创造出来。
我想强调的是,采用我们在软件中开发的技术并构建实现相应的硬件并非易事。这产生了一个非常重要、而且到如今我们仍然在使用的方法,即 Multipass Algorithms。你可以使用渲染系统运行一次,再运行一次,在这个过程中积累图像,然后再次运行,你可以清晰地增强图像,添加细节,添加阴影。这是一个通过图形系统运行六次不同通道来制作保龄球瓶的示例。这是 Mark Peercy 和 Mark Olano、Airey、Ungar 在“Interactive Muti-Pass Programmable Shading”这篇论文中提出的方法,你可以将其看作是一个帧缓冲(framebuffer),就像寄存器或累加器一样。
你只需在它上面运行一些操作,然后添加一些内容,如 C 代表来自你正在渲染的三角形的颜色。T 代表纹理。一遍又一遍地重复这个过程,这看起来是在运行一个程序,你只是在执行这些指令,制作帧缓冲区,并计算出你想要的。这是一个非常有吸引力的想法,能够用它完全实现一种着色语言。
而与此同时,所有图形供应商都开始提出一种着色器程序(Shader Programs)的方法。这与 Multipass Algorithms 不同,它并非像运行一个非常简单的指令那样,向帧缓冲区添加一些东西,而是有一个完整的运行程序,可能是一个有 128 条指令的小程序,但它会接受来自光栅化阶段的输入,在它上面运行这个程序,然后存储、输出。
结果证明,这是一个非常重要的见解。可以这样理解它,如果你使用 Multipass,就像是你在做简单的向量运算;而如果你使用着色器程序,那你就是在对输入进行非常复杂的操作。后者的好处是,与你花费的带宽量相比,你需要做更多的算术运算。要知道,内存带宽始终是一个限制因素。事实证明,这是一项非常重要的创新,并且它对于开发程序至关重要,更多的图形系统采用了这种着色器程序的方法,我们称之为 “arithmetic intensity” (算术强度),即你必须做大量的计算。
这个难题的最后一小块拼图,是 GPUPU。GPUPU 并不是一个新想法,关于这方面的研究可以追溯到计算时代的起始点,是在我的研究生时期。人们多年来一直在建造并行计算机,并实现了这样一种简单的数据并行编程模型,我曾对使用该并行程序的机器进行了编程。关于这种并行程序的问题已经全部得到了解决。
在这种并行程序中,初始部分是一个 map (映射),它把一个函数应用到一个集合上,就像你对三角形生成的所有片段运行着色器编程,你可以将一个函数应用于片段集合。此外,还有一个 filter(过滤器),如果你有一堆东西,你可以删除其中的一些。接着是 gather(收集),给内存分配一整套地址,然后将其全部收集起来。
但是还有另外两个 GPU 不擅长的东西,即 scatter 和 reduce,是指写入一些东西到随机位置上,分散了所有的内存并缩减,这类似于对一个向量进行加和。这两个事情是相当简单的,我们可以稍微调整一下 GPU 就能做到这些事情,并进而实现一个通用的并行计算机。
这就带来了 Brooke 系统的问世,它由我的学生 Ian Buck 在 2004 年推出,后来他去了英伟达,担任 CUDA 的首席架构师。这的确只是一个很简单的想法:把 GPU 变成数据并行虚拟机,即使你不是一个图形学程序员也可以使用它。此前,人们尝试在 GPUs 上运行不同的算法,必须得是一个图形学程序员才行,要想运行一个运行程序,你得渲染三角形,得学习如何使用 OpenGL 或或者 DX 之类的。
这或许就是最后一步,我们总是非常需要周期。我们需要构建并行计算机,并经过几年的时间,逐渐把它们成为通用的计算机。
另外两个我认为很重要的方面,一是特定领域的语言(domain-specific languages)。我们可以将 OpenGL 看做是一个库,就像下图中所显示的一个简单的 OpenGL 程序。
但我们也可以将 OpenGL 看做是一种具有某种语法的语言。这里我写了一份关于 OpenGL 的语法。即使它只是一个库,它也很像嵌入在 C 语言中的一门小语言。如果你不遵守这个语法,它就会给你报错,甚至给你蓝屏。所以 OpenGL 实际上是一种嵌入式的、特定领域的语言。
这意味着什么呢?我教授图形学,我可以在一周或两周内就能教会人们使用 OpenGL 系统。所以它非常容易使用,你无需了解任何有关英伟达硬件的知识,而且超级便携,能在每个人的 GPU 上运行,且速度非常快,渲染速度也快得令人难以置信。
使用 OpenGL 作为编程图形的语言所带来的改变,是我们鼓励在该领域进行令人惊叹的创新。它得以让当时的 ATI 、英伟达以及其他公司在不改变编程模型的情况下探索完全不同的硬件实现。这是构建 CPUs 的人从未有过的优势,因为他们总是用 C 语言和汇编语言进行编程,不可能在不惹恼所有程序员的情况下更改架构,因为一旦更改工具将不再有效。所以,这是一件非常伟大的事情,我认为现在这种使用特定领域语言来引入新架构的理念是值得鼓励的,有很多遵循这种路径的系统,比如 Haylight。
图形学带来计算机架构的黄金时代
另一个非常相似且重要的想法是特定领域的架构(domain-specific architectures)。
我现在主要从事的是硬件设计,我正在自己制造芯片,我认为现在是构建芯片的一个很好的时期。我为什么会对此感兴趣呢?我们都听过摩尔定律的终结,对于依赖摩尔定律的图形学领域的研究者来说,它的结束就像是一种生存威胁。如果摩尔定律消失了,那就意味着我快退休了,可能也是时候退休了。
你可能认为摩尔定律的终结带来的是世界末日,但在 2017 年 Hennessy 和 Patterson 的图灵奖演讲中,他们实际上认为这将是计算机体系结构的黄金时代。他们的基本论点很简单,即我们过去只有一种计算机,比如 ARM 计算机或 x 86 计算机,而现在我们建造的是各种专门的计算机。这就像生物学,想象一下寒武纪大爆发,我们从只存在少数生物体发展到了一个布满生命的星球。我们现在拥有各种有趣的计算设备。
我们都知道苹果的 M1 Max 芯片,它上面有编解码器、压缩芯片、安全芯片,有 8 个普通核,还有高性能核,2 个做 I / O 的低性能核,还有 2 个核心 GPU。要注意,GPU 比 CPU 更大,从计算能力的角度来看更是要大得多。第一个 GPU 有 1700 万个晶体管,而该芯片上有 570 亿个晶体管。
所以现在人们正在使用和构建许多不同类型的计算机来优化不同的任务,这就是我所称的“domain-specific architecture”。
最后,我想说的是,图形学确实改变了计算机系统的构建方式。目前世界上性能最高的计算机是 GPUs,因为我们可以利用无限量的计算和计算机图形。动画和强化学习方面的工作只是一个开始,未来还会消耗更多的周期。这不仅是我们使用特定领域语言和架构的方式,也是其他人构建他们的系统的方式,比如机器学习系统。
所以,当下可能是计算领域最激动人心的时刻,我希望未来有更多的人加入图形学社区。
Edwin Catmull
构想图形学的未来
很高兴能够参与这个活动。SIGGRAPH 是我 40 多年来的家,我在这里有很多回忆和朋友。在我的职业生涯中,这个领域一开始发展比较缓慢,但随着这个领域反过来改变了其他行业,我们便经历了一场不断加速的彻底变革。我想谈谈这些变化对我个人带来的强烈冲击。
年轻时,我想成为一名动画师,但坦白地说,我的能力不够强。所以我转学了物理。就读犹他大学的时候,临近毕业时,我选修了一门由 Alan Kay 教授的计算机科学课程。他的课程打开了我走进新世界的大门。所以我又进入犹他大学的研究生院学习计算机科学。我上的第一节课是 Ivan Sutherland 教的。可以说我的运气很好,Alan Kay 和 Ivan Sutherland 这两位老师对我有极深远的影响,后来他们都获得了图灵奖。
▲2003 年图灵奖得主 Alan Kay
我在很早的时候就掌握了几个基本法则。第一个法则来自 Alan。Alan Kay 告诉我们一个不太直观的想法:人应该随着指数增长去理解其增长的意义,去看到现实以外的东西,从而去设计未来。
在 1969 年,我目睹了一件对我来说毫无意义的事。当时是在一场 ACM 会议上,Alan 在演讲中说,计算机会越来越快,越来越小,有一天笔记本电脑将变为现实。要知道当时的计算机还很庞大,需要放在好多个机架上。Alan 放出一张幻灯片,幻灯片上展示了计算机未来可能的样子。那张图上的计算机看起来非常像多年后出现的一台 HT 笔记本电脑。那台“未来计算机模型”是折叠式的,屏幕上展示着一张 ACG 图片。
在他的演讲后,听众们一个接一个地问问题,其中一个提问的人是当时的 ACM 主席。他批评 Alan,说 Alan 不应该做出这么荒谬的预测,而且把 ACG 图片放到模型的屏幕上也很扯。我不明白当时他为何那么气愤,但是我因此知道了,即使是有经验的人也很难去思考指数增长的含义,而且这个现象到如今仍然如此。
从那以后我便告诉自己,一定不能对这样的变化视而不见。“思考变化”成了我的一条基本法则,并且贯穿了我之后的职业生涯。
在研究生院里,Ivan 又教给了我另一套法则。当时他在麻省理工学院已经在图形学方面打下了基础,又在哈佛大学建立了第一个虚拟现实和增强现实系统,然后和 Dave Evans 在犹他大学建立了计算机图形学程序。他描绘了计算机图形学的愿景,然后建立了一个循序渐进的程序,准备以这个愿景为目标去解决问题。
最初,计算机图像还在多边形方面受到了非常大的限制。我们一次只能处理一行扫描线。而 Ivan 和团队发明的程序的第一步就是开发确定图像中可见多边形的算法。创建可见多边形算法的人中有一个叫做 John Warnock,他后来创办了 Adobe。另一名学生开发了一种算法,可以用于创建实时渲染多边形的硬件。
在动画电影中寻找生机
下一步目标是让物体看起来平滑,但其轮廓仍然是多边形的,这时我意识到,我可以将我对动画的热爱与计算机图形这个新领域结合起来。
我做过一个课堂项目,是给我的左手制作一个多边形模型。我很喜欢这个项目,也想要为计算机图形学的进步增添一份我自己的力量。所以 Ivan 建议我想想方法,看看如何能弯曲多边形的轮廓。经过大量思考后,我认为这种方法很明显有根本上的缺陷。我需要的是渲染补丁,我需要的是直接渲染曲线,但这要求的内存比当时计算机的可用内存多得多。我唯一能做的就是把整个图像和 Z 缓冲区放在内存中。由于操作在那个时代不支持分页,所以我写了一个页面来将图像块移进和移出内存。我甚至弄坏了其中一个磁盘文件,因为它在磁盘上到处嘎嘎作响。这些磁盘在当时都是很大的。
但是我被 Alan 的思想所启发,那就是我们在模拟未来时应该怀有“我所想的会变成现实”的信心。哪怕这种发展很缓慢。我现在有一个数学定义良好的表面可以使用,所以我可以渲染 B 样条补丁达到纹理映射。这些图像是向前迈出的一大步,而其他随后的研究则继续在这一发展的链条上添砖加瓦。我们开发的算法受到我们现有机器的启发和限制。这似乎是旧时代的说法,比如内存有多少,机器有多慢之类的,但它并不能真正限制一门学科的发展。在艺术领域也是如此。我们知道自己能做的工作是受到限制的,而我们要挑战的是超越极限。当挑战成功后,原有的限制边界便向外扩展,我们面临的挑战也变成了突破下一个限制。
在犹他大学时,还有一个令我自豪的项目。大学赞助了关于曲面数学的研讨会,而我花了很多时间思考曲线。我知道使用预先准备好的补丁网络会有问题。网格的拓扑结构不适用于像人手这样的自然物体,因此我通过逆向工程,将 B 样条的数学转化为一组几何运算来解决这个问题。这些操作可以作为递归细分网格的规则应用于非预见网格。我用基本的高中几何证明了这点,并且觉得这是个很好的想法。我将这个想法展示给一位教授,曲线补丁正是他的专长。他几乎没看我 18 页的手写证明就直接说:Ed,这是什么鬼东西?我被伤到了,便把这个想法搁置一旁。过了一阵子,我把这个想法拿给 Jim Clark 看。他实现了这个想法,我们为此写了一篇论文。多年以后,Tony DeRose 把这个想法推进到了下一个阶段。我们又将其开源,随着时间的推移,这个想法最终成为了如今电影产业中主要使用的表面补丁。
早在上大学的时候,我就相信这个想法是有可能得到应用的。这是一个我可以为之长期努力的目标。我一直支持这个愿景,并试图在迪士尼和大学之间建立一个交流项目,因此我去到了伯班克。我到了迪士尼,见到那些制作了我童年记忆里动画的电影制作人,能真是太棒了。
▲位于伯班克的迪士尼工作室总部
可惜迪士尼对交流项目没有兴趣,他们只是想招募相关人才来帮助设计佛罗里达的新项目,可是我没有兴趣。迪士尼已经是游戏产业中唯一有可能对计算机图像学感兴趣的工作室,而我发现他们其实对此毫无兴趣。所以我想,追求自己梦想最好的地方应该是在大学里。
但是当时有一个问题,那就是计算机图形学被认为与计算机科学无关,只被认为是一个有趣的边缘学科。很少有大学课程对计算机图形感兴趣,而唯二的两间对此感兴趣的大学,康奈尔大学和俄亥俄州立大学,计算机图形学的课程甚至都不在他们的计算机科学系里。
当我在面试大学的岗位时,我试图向面试官解释图形学未来的巨大潜力。但没一个人听进去,我也因此没能在大学里找到工作。1974 年底,我接到 NYIT 院长的电话。他不懂技术,但他想制作动画电影,而且他相信计算机图形学前程远大。这对我来说是好消息。但坏消息是,他认为计算机科学家将取代艺术家。NYIT 愿意购买两个全彩色的可磨损缓冲器,一个价格是 13 万美元。我们准备好开始工作了。Alvy Ray Smith 是继我之后第二个加入团队的人,之前他在施乐帕罗奥多研究中心工作,但是那里对于颜色的观点很奇怪,他为此感到沮丧,于是离开了原工作地。
开始工作后,我在几个 3D 渲染系统中编写了一个 2D 动画系统。我们还从世界各地召集了志同道合的人。我是管理方面的新手,所以想复制我在犹他大学的经历,通过让大家分享和支持同一个愿景,同一种文化而将大家集合起来,这将是一个漫长的一步一步来的过程。我认为对于我们的研究进展不应该保密,所以我认为最好的办法是加入 SIGGRAPH,招募比我聪明的人,把我们研究的一切都发表出来。事实证明,这是我做过的最好的决定之一。
在 NYIT 工作 5 年后,我们意识到团队的最大弱点是缺少电影创作者。就算创造出了好用的工具,可是没有能使用这种工具的人,我们就不可能成功。于是我们开始拜访各种电影工作室,向他们展示我们的工作,但对方都没什么兴趣。而一部电影的出现改变了一切,这部电影就是《星球大战》。星球大战的导演 Lucas 不懂技术,但是他看到了工业光魔公司做出的特效,并深深相信计算机技术将成为电影制作中重要的一部分。电影行业中终于有一个有头有脸的人物愿意投资我们了。
▲科幻片《星球大战》
1979 年,我离开 NYIT,在工业光魔开始搭建计算机部门。Lucas 吸引了很多对这个行业感兴趣的人,他野心勃勃,想要改变电影制作的三大板块:视觉特效、视频剪辑和数字音效。于是我们便在这三大板块里进行深耕。他的公司位于旧金山北部,这意味着我们可以坐车一小时到硅谷,或者乘飞机一小时到好莱坞。旧金山是一个很好的地点,因为我们可以快速到达硅谷和好莱坞,而其本身又相对偏远。
幸运的是,George 支持我们要把成果发布到更大的圈子里去的决定。当时我们的一个竞争对手买了一台价值 1000 万美元的 Cray-1 超级计算机,于是我们讨论了“制作一部未来水平高质量的电影需要什么”并进行了一番计算。最后得出的结果是,我们需要 100 台 Cray-1 的计算能力,但只能付得起 1/10 的价格。按照计算速度指数曲线来看,我们还需要 14 到 15 年。所以我们最好把时间和资源花在我们现在看到的许多问题上。
如果我们要设定一些疯狂的目标,就需要先明确问题是什么以及我们需要采取什么行动。巧合的是,当我们在 15 年后完成《玩具总动员》的故事时,我们已经非常接近曾经对于计算能力的估计。在未来变化的影响下工作的过程是非常需要重视的,要处理电影分辨率的图像,就需要我们设计并构建一个系统来在计算机中保存整个填充分辨率图像。而这就需要更多在工作站里可用的并行处理,于是图像计算机应运而生。
在渲染方面,Lauren Carpenter 开发了一种可以处理高复杂性的新渲染方式。正如 Pat 所说,我们在灯光和阴影方面取得重大进展后,Rob 加入了我们。我们三个人在我办公室的白板前碰面,讨论我们的未来的大目标应该是什么。
当时 SOTA 的渲染多边形数量大约是四万个,我们通过 Pat 的计算得出我们的目标是八千万个。我不知道为什么我们没有四舍五入到 1 亿,这个结果是计算中突然蹦出来的。这是满足工业光魔公司高标准的条件,也是我们的目标。我们对于复杂性、运动模糊和景深的追求高到疯狂。我们想要树立并追求一个高到离谱的目标,所以逼迫自己以一种完全不同的方式来思考这个问题。这导致了一系列新想法的诞生,也改变了从 Lawrence 架构开始的渲染复杂性。与我们一起工作的硬件设计师 Rodney Stock 建议我们考虑点采样方式,其做法类似于印刷中使用的抖色(dithering)方式。Rob 做了这个实验并尝试了各种不同的方法来进行样本的蒙特卡洛分布,最终他想出了一个很好的方法来实现样本分布。而 Tom porter 提出了一个很关键的想法,他将样本随时间分散,这解决了运动模糊的问题。
然后 Rob 重新编写了一个面向对象的清晰架构,使得软件能够随着新技术的开发而进化。我们知道,除非计算能力至少提高 100 倍,否则这是不现实的,但我们也知道,或迟或早,我们的想法终将变成现实。我构思了一个短片来展示了我们在 Lucas 影业所做的工作,而这个短片就是 Andre & Wally B。John Lasseter 加入了我们并创造了动画角色,并赋予了角色只有一个真正的好动画师才能给予的生命。那是一个激动人心的时代,在那时,极具创造力的人们在各自的领域纷纷挣脱桎梏,突破界限。
不过,工业光魔公司的情况出现了变化,到了 1984 年底,George Lucas 发现有必要把计算机部门卖出去。最终 Steve Jobs 买下了这个部门。尽管 George 告诉他我们一心想做动画,但皮克斯公司还是诞生了。
于是我们开始从事制造和销售特殊用途计算机的业务,这是我从来没有预料到的,包括 Steve 在内的所有人都没有任何制造、销售高端硬件的经验,所以我们犯了很多错误。我们雇了制造人员,为客户编写软件,迪士尼就是我们的其中一个客户,他们希望我们为手绘单元格上色。
令我惊讶的是,当我们开始制造时,我学到了很多东西。我以前认为制造是相当平庸的一件事,但我错了。尽管我们失败了,但这些失败是企业进行多次调整的结果,而不是真的做错了什么。我们无法与不断加速的摩尔定律竞争,这种垂死挣扎的潜在动力带来了很多变化,是时候退出硬件业务、专注于软件业务了。因为我们希望保持迪士尼对我们的信任,但我们为他们编写的软件只能在我们的硬件中运行,所以我们将硬件业务卖给了另一家公司,让别人制作图像。
我们与迪士尼签订了另一份合同把软件转移给 SGI。犹他大学毕业生 Jim Clark 使用几何引擎 (Geometry Engine) 和 GPUs 的前身创建了 SGI。
此时,做工作站的公司之间还没有很激烈的竞争。图片渲染质量很好,但都很难用。Jim 找到我,建议我们应该共同为行业设计一个渲染界面。最后共有 19 家公司参与了这一过程。我感到很自豪的一个决定是我们邀请 Pat Hanrahan 做我们的设计架构师。Pat 赢得了所有人的信任,他是一个聆听者,同时也是一个伟大的设计师。Pat 的设计非常简洁,他在 Robert 的概念基础上构建了复杂的着色语言。他所做的这些工作都是为了让人们更容易获得渲染,这就是 RenderMan 界面的故事。
电影 / 游戏 + GPU
在 SIGGRAPH 圈子里,每年大家都会发表新的研究进展。很多年以来,圣杯都属于逼真图像的制作,但图形学研究已经扩展到建模、仿真和复杂性。如何建模和渲染水流、布料或头发的波动?如何模拟自然现象?非常重要的一点是,如何控制仿真以满足故事的需求?这些问题都十分吸引人。
然后,特效行业开始与计算机图形学融合。以工业光魔公司为起点的特效行业对行事方法没有任何教条观念,他们并不专注于所掌握的东西,而只是关心他们能在屏幕上得到什么。只要有好的想法,他们就会使用。1991 年是最为关键的一年,那年发行了电影《终结者 2》,主角正是由 CG 制作的;那年也发行了 3D 版《美女与野兽》,同时皮克斯与迪士尼达成合作,开始制作《玩具总动员》。
前进的步伐随着计算机速度的增长而加快。1993 年,《侏罗纪公园》上映,这向电影业发出了一切即将改变的信号,随后是 1995 年的《玩具总动员》。91 到 95 年,行业经历了技术接受度发生重大变化的转折阶段。
同期,游戏行业开始兴起。当时的 3D 游戏还很粗糙,但已经能给人留下深刻印象。John Carmack 推动了在 PC 上实现 3D 游戏。
英伟达在 1993 年成立后开始制造芯片。他们在 6 个月内设计和制造了一款芯片,并开始它以每 6 个月发布一款新芯片为目标的英伟达文化,这种发布周期是前所未有的。AMD 是增强 GPU 性能快速循环的一个竞争对手。同时,SIGGRAPH 在算法、光照模拟方面也有大量研究,这些都是游戏行业想要的。英伟达从所有现存事物中汲取灵感,试图满足不断发展的图形学行业对于速度和真实感的无限渴望。SIGGRAPH 以及其他学术和娱乐行业的规模都不再有能力制造专门的芯片,但游戏行业可以。
GPUs 被用到工作站中,为图形学研究人员提供了更快的算法开发机器,发表了更多 SIGGRAPH 论文。游戏、GPU 公司和 SIGGRAPH 圈之间形成了一个极佳的循环,这个循环带来了计算性能的提高,并在几年内一直保持着摩尔定律。这是一个无人可以操纵的虚拟循环。
在 2009 年到 2012 年左右,GPUs 开始显示出在游戏以外的领域的用处。那些模拟所需的矩阵乘法多年来一直很有用,所以人们开始在科学应用中使用这些乘法。
神经网络的构思出现在 50 多年前,当其逐步走向实用,便给我们带来了深度学习,并对许多行业产生了重大影响。正如神经网络与深度学习的奇妙关系,GPU 、游戏与学术界之间的循环也产生了完全出乎人意料的惊喜。计算机图形学一开始被边缘化,然后经历了前所未有的疯狂过山车,从边缘学科转而成为许多行业和计算机科学的重要支柱,而这种变化将继续下去。很难预测最终我们会走到何处,但我们还需要继续努力。