本文摘自雷锋网,原文链接:https://www.leiphone.com/category/academic/0bPFDI35Udy7CYNV.html,侵删。
整理 | 李梅、王玥
Pat Hanrahan,皮克斯动画工作室创始人之一,现任斯坦福大学计算机图形学实验室教授。他在皮克斯动画工作室主导了 RenderMan 界面规范和 RenderMan 着色语言的设计,并参与了《玩具总动员》等皮克斯经典作品的制作。凭借在渲染方面的杰出工作,他曾 3 次获得奥斯卡金像奖。
Edwin Catmull,著名计算机科学家,皮克斯动画工作室联合创始人及前总裁,曾参与创办纽约理工学院(NYIT)计算机图形实验室,该实验室被称为现代视觉特效的起源地。他将自身对于动画的热爱与计算机图形学融合,依靠自身技术先后 9 次获得奥斯卡金奖。
2019 年,为表彰他们对 3D 计算机图形学的贡献,以及对电影制作和计算机生成图像 (CGI) 等应用的革命性影响,Hanrahan 和 Catmull 这两位计算机图形学的奠基者被共同授予图灵奖。
在本次演讲中,Hanrahan 通过他在皮克斯和斯坦福的图形学研究经历,展示了自上世纪 80 年代以来渲染系统、着色语言、GPU 等的发展历程。他认为,图形学的发展带来了计算机体系结构的黄金时代,使得我们可以构建不同类型的计算机来优化不同的任务。
而 Edwin Catmull 讲述了自己入门计算机图形学、为了图形学发展而奔走求职,再到创立 Lucas 影业计算机图形学部门的传奇经历,而这个部门正是皮克斯的前身。Catmull 回忆道,在那段时间里,自己与身边的创作者们在各自的领域突破限制,将各种不可能变为现实,那是一个激动人心的时代。
获得图灵奖实在是荣幸之至。第一位在计算机图形学领域获得图灵奖的人是计算机图形学之父 Ivan Sutherland(1988年)。Edwin 是 Ivan 的学生,而我在皮克斯动画工作室工作,所以这是两代研究者共同的荣誉。在我之前的一整代计算机图形学学者为这个领域奠定了基础,在早期的职业生涯中给了我很多启发。
我因为在电影行业的计算机图像生成作品受到赞誉,我就首先从这方面讲起。下面这张著名的虚拟图像是由 George Lucas 的电影公司 Industrial Light and Magic(简称“工业光魔”)制作的,名为“The Road to Point Reyes”。Point Reyes是北加州的一个海滨,制作这张图像旨在让 Lucas 相信计算机图形学可以为想象中的世界绘制逼真的画面,可以创造出我们在世界上看到的多样性,并展示出令人信服的细节和复杂性。
被授予图灵奖后,我意识到,更大的计算机科学界实际上并不太了解计算机图形学或制作电影所需的知识。 他们认为这很神奇,的确很神奇,我不得不向人们解释计算机图形学是什么,以及制作电影需要什么样的图形学知识。我们需要开发模型和算法来为我们周围的一切创建图片,整个 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 图形终端,我整日坐在那里编写软件来实现各种算法。
这是我写的第一篇论文,题目是“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, 设计这种语言并告诉他们自己去做他们想让我做的所有事情,所以这在很大程度上是一种权宜之计。
当我 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 年写过一个基金申请。我写道,我想做超出我们现在可以做的事情,下一步该做什么非常明显,那就是光线追踪、全局照明。并不难做出这样的预测,因为我们可以想象摩尔定律的向前发展,并将我们已经想出的方法应用到硬件中。
我想强调的是,采用我们在软件中开发的技术并构建实现相应的硬件并非易事。这产生了一个非常重要、而且到如今我们仍然在使用的方法,即 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。
图形学带来计算机架构的黄金时代
我现在主要从事的是硬件设计,我正在自己制造芯片,我认为现在是构建芯片的一个很好的时期。我为什么会对此感兴趣呢?我们都听过摩尔定律的终结,对于依赖摩尔定律的图形学领域的研究者来说,它的结束就像是一种生存威胁。如果摩尔定律消失了,那就意味着我快退休了,可能也是时候退休了。
你可能认为摩尔定律的终结带来的是世界末日,但在 2017 年 Hennessy 和 Patterson 的图灵奖演讲中,他们实际上认为这将是计算机体系结构的黄金时代。他们的基本论点很简单,即我们过去只有一种计算机,比如 ARM 计算机或 x 86 计算机,而现在我们建造的是各种专门的计算机。这就像生物学,想象一下寒武纪大爆发,我们从只存在少数生物体发展到了一个布满生命的星球。我们现在拥有各种有趣的计算设备。
我们都知道苹果的 M1 Max 芯片,它上面有编解码器、压缩芯片、安全芯片,有8个普通核,还有高性能核,2个做 I/O 的低性能核,还有 2 个核心 GPU。要注意,GPU 比 CPU 更大,从计算能力的角度来看更是要大得多。第一个 GPU 有 1700 万个晶体管,而该芯片上有 570 亿个晶体管。
所以现在人们正在使用和构建许多不同类型的计算机来优化不同的任务,这就是我所称的“domain-specific architecture”。
最后,我想说的是,图形学确实改变了计算机系统的构建方式。目前世界上性能最高的计算机是 GPUs,因为我们可以利用无限量的计算和计算机图形。动画和强化学习方面的工作只是一个开始,未来还会消耗更多的周期。这不仅是我们使用特定领域语言和架构的方式,也是其他人构建他们的系统的方式,比如机器学习系统。
所以,当下可能是计算领域最激动人心的时刻,我希望未来有更多的人加入图形学社区。
很高兴能够参与这个活动。SIGGRAPH 是我 40 多年来的家,我在这里有很多回忆和朋友。在我的职业生涯中,这个领域一开始发展比较缓慢,但随着这个领域反过来改变了其他行业,我们便经历了一场不断加速的彻底变革。我想谈谈这些变化对我个人带来的强烈冲击。
年轻时,我想成为一名动画师,但坦白地说,我的能力不够强。所以我转学了物理。就读犹他大学的时候,临近毕业时,我选修了一门由 Alan Kay 教授的计算机科学课程。他的课程打开了我走进新世界的大门。所以我又进入犹他大学的研究生院学习计算机科学。我上的第一节课是 Ivan Sutherland 教的。可以说我的运气很好,Alan Kay 和 Ivan Sutherland 这两位老师对我有极深远的影响,后来他们都获得了图灵奖。
我在很早的时候就掌握了几个基本法则。第一个法则来自 Alan。Alan Kay 告诉我们一个不太直观的想法:人应该随着指数增长去理解其增长的意义,去看到现实以外的东西,从而去设计未来。
在1969年,我目睹了一件对我来说毫无意义的事。当时是在一场 ACM 会议上,Alan 在演讲中说,计算机会越来越快,越来越小,有一天笔记本电脑将变为现实。要知道当时的计算机还很庞大,需要放在好多个机架上。Alan 放出一张幻灯片,幻灯片上展示了计算机未来可能的样子。那张图上的计算机看起来非常像多年后出现的一台 HT 笔记本电脑。那台“未来计算机模型”是折叠式的,屏幕上展示着一张 ACG图片。
相关阅读 >>
windows media player新功能:引入专辑细节视图
消息称apple silicon macbook会在2022上半年减产
更多相关阅读请进入《新闻资讯》频道 >>