李媛媛作者H4O编辑

走过半个多世纪,计算机图形学的发展历程告诉你5毛钱的电影特效究竟多难

随着2019年ACM 图灵奖授予计算机图形学的两位学者Patrick M. Hanrahan和Edwin E. Catmull,人们也重新将目光投向了 CGI 领域以及这一领域在印刷媒体、视频游戏、商业广告、互动多媒体等方向上的应用。本文以时间为轴,以皮克斯电影为重心,讲述了自上世纪50年代以来 CGI 的发展历程。

2019 ACM 图灵奖大奖出炉,最终花落计算机图形学专家 Patrick M. Hanrahan 和 Edwin E. Catmull,以表彰他们在概念创新和软硬件方面的贡献,以及对计算机图形学所产生的根本性的影响。而上一次图灵奖颁给图形学领域的科学家,还是在 32 年前——1988 年计算机图形学之父 Ivan Sutherland 凭借其发明的 Sketchpad 而获得图灵奖。这种图形用户界面的早期版本直接影响了计算机的用户交互方式,现在早已在个人计算机中无处不在。它发明了一系列在今天的用户界面中被视为「基本操作」的功能:绘制水平线和垂直的线、将绘制的线组合成不同形状、调整图形大小、旋转图形以及缩放窗口等。

本次获奖的 Patrick M. Hanrahan 和 Edwin E. Catmull,则从另一个角度深刻的改变了我们的生活。作为皮克斯的创始人——Edwin E. Catmull 还曾是华特 · 迪士尼动漫工作室的总裁——他们的贡献主要集中在从计算机图形学发展出的电脑生成图像(Computer-generated imagery,CGI)技术中,他们的研究成果展示了利用计算机来绘制的故事影片能够如何为电影制作赋予新的灵感。

正如 Patrick M. Hanrahan 和 Edwin E. Catmull 本身的兴趣在电影制作上,CGI 最广为人知的应用是在影视作品中创造角色,又称「CGI 动画」,比如迪士尼动画电影中的所有角色都是通过 CGI 技术创造出来的。但 CGI 在印刷媒体、视频游戏、商业广告、互动多媒体等方向也有广泛应用,例如宜家 70% 以上的场景图都是在电脑中建模渲染完成的,并且 CGI 的商业应用还在呈逐年上升的趋势。如果我们跳出 CGI 的定义范围,进入它的父领域计算机图形学(computer graphi,CG),那么应用该技术的研究几乎涉及到我们生活中与计算机有关的方方面面了,比如用户界面设计、渲染、光线跟踪、计算机动画、3D 建模、着色器、GPU 设计等等。

为什么 CGI 应用如此广泛?直观来讲,CGI 的主要目的是提供足够逼真的视觉效果。这种视觉效果,最直接的的作用就是提供更好的感官体验——比如用 CGI 技术为电脑生成的图像加上一些「瑕疵」,使其更贴近我们在现实生活观察到的形象。或者对一些纹理的渲染——毛发、皮肤、布料等,电脑直接生成的图像往往锐度过高并且不具有纹理。在一些现代医学治疗中,由于一些植入产品需要根据患者的情况进行高度定制,CGI 已经成为制定手术计划的一部分,用以对患者的器官进行精准建模。类似地,利用 CGI 生成的 3D 建筑模型比传统图纸更准确,并且可以提供交互式体验,从而为客户提供更好的概览,并且能够对细节、特殊的应用环境进行检测。由于交互式可视化可以动态展现数据,CGI 也可以允许用户从多个角度查看数据,比如对复杂机械结构的可视化。

在过去的半个世纪,CGI 以电影行业为起点,的确悄然无息将其影响力扩散到了电子游戏行业和 VR、AR 等行业,包括数据中心管理和人工智能在内的多个领域。本文接下来的内容中,以皮克斯为中心,走过 CGI 半个世纪的发展,我们将看到 CGI 是如何从一些非常基础的应用,发展到今天这样的规模的

1950 年代-1970 年代

这一阶段是 CGI 的创始发展期,一个「从无到有」的时期。

1958 年,阿尔弗雷德·希区柯克(Alfred Hitchcock)发布了首部应用 CGI 技术的电影 VERTIGO,在该片中,一个绿色的螺旋动画从一只眼睛中缓缓升起。这个「简单」的特效,是世界上第一个计算机动画。

电影 VERTIGO 截图。来源:youtube

在这一期间最重要的技术之一当属由 N. Konstantinov 领导的一组苏联数学家和物理学家所研发的猫的运动的物理数学计算模型。该算法是在 BESM-4 计算机上编程的,使用时需要用计算机打印出数百帧,以后再转换为胶片。他们使用的模型和其理论形成了今日动画电影和计算机游戏的基础技术之一。

但整体来看,这十几年中有关 CGI 技术 的研究寥寥无几,直到下一个十年的来临。

1970 年代-1980 年代

70 年代,Edwin E. Catmull 等大佬工作逐渐起步。当时还是犹他大学的学生的 Edwin E. Catmull 和 Fred Parke 合作,于 1972 年制作了世界上第一部 3D 多边形动画(polygonal 3D animation):A Computer Animated Hand。这部动画模拟了他自己的左手,被视为 CGI 发展史上的 milestone 之一。

动画 A Computer Animated Hand 截图。来源:youtube

1974 年,Fred Parke 在发表的论文中将他们的工作延伸到了人脸建模领域,这是世界上最早的高仿真人脸 3D 渲染作品之一。这两项工作最终于 1976 年汇集在了电影 future world 中。由于 Edwin E. Catmull 和 Fred Parke 的杰出工作,犹他州立大学计算机图形实验室吸引了来自各地的人,这些人随后散布在各行各业,创造了许多我们意想不到的联结——比如慕名而来的约翰·沃诺克(John Warnock),他之后成立了 Adobe Systems。

电影 future world 海报 来源:https://en.wikipedia.org/w/index.php?curid=5819539

这一时期 CGI 技术发展突飞猛进,大量目前使用的算法的雏形都在这一时期被创造出来,而这之中,最重要的恐怕要数渲染(render)技术在这一时期的突破了。在 CGI 技术之中,一般在图像初步创建之后,就要进行渲染了,渲染效果将会直接决定模型与动画最终显示效果。简单的来说,渲染涉及到如何将 3D 物体投射到 2D 图像中,并尽可能的符合在肉眼情况下我们会观察到的几何效果。

下图给出了一个简单的例子——图左中,可以看到一组已经建模好的 3D 物体,每个物体的位置和形状都由几个顶点定义,在这里顶点之间仅简单的通过直线连接,并形成了多个平面,以组成该物体的表面。很显然,在现实世界中,我们无法直接透视到物体被遮挡的部分。因此,渲染程序首先需要根据定义好的视角来决定哪些表面可以被观察到、哪些则不能,也就是下图中所呈现的效果。随后,渲染程序可以在物体表面上进行着色,来进一步突出其表面纹理、物体位置等信息。在下图右中物体仅被填上了不同程度的灰色,没有涉及更多的步骤。在实际应用中,出于不同的目的,渲染程序可以将重点放在图像的不同特征上——为图片增加更丰富的色彩和亮度、为物体表面增加纹理、为物体表面增加凹凸起伏、模拟光照在不同环境(如雾)中散射的效果、增加阴影、增加反射、调整透明感、增加光的折射效应、模拟间接光源光照的效果、增加景深、运动模糊、不追求真实感而增强图像的艺术性等。

一个简单的渲染示例 来源:http://www.graphics.cornell.edu/online/tutorial/objrender/

更准确的定义的话,渲染是通过计算机程序从 3D 模型生成 2D 图像。在这一定义中,模型是用语言或者数据结构进行严格定义的三维物体或虚拟场景的描述,它包括几何、视点、纹理、照明和阴影等信息。如前文提到的,出于不同的目的,渲染程序可能会侧重不同的角度——被渲染物体本身的质感、纹理、透明度、真实感等。用计算机语言来模拟这些过程,涉及到大量的几何原理、光学原理和数学计算。皮克斯在今天的电影动画中有如此重要的地位,很大程度上也源于他们在渲染领域中做出的突出贡献。

当时,早期使用的光栅化渲染方法主要通过考虑视角和被渲染物体之间的光线连线来确定物体在 2D 图像上的投影,但这种方法没有考虑深度信息,因此无法确定重叠物体的遮挡情况。也就是说,在上例中,我们甚至无法完成从图左到图中的步骤。1974 年,Edwin E. Catmull 博士毕业,在他的毕业论文中,他描述了深度缓冲算法(Z-buffering)用于管理计算机图形学中图像深度坐标的方法。根据他的算法,在进行物体渲染时,程序需要同时生成一个缓冲区用以保存生成的像素的深度。如果之后发现另一个物体所生成的像素与此有所重合,就根据缓冲区中保存的深度进行选择,以达到较近的物体遮挡较远物体的效果。下图给出了深度缓冲算法图例。

深度缓冲算法图示(左):3D 场景(右):深度缓冲表示 图源:https://en.wikipedia.org/wiki/Z-buffering#/media/File:Z_buffer.svg

但带有深度的光栅化渲染方法仍然无法解决物体在光照下应该具有的反射、折射、阴影效果。几经发展后,1979 年,Turner Whitted 提出了极大影响了渲染技术的光线追踪算法(ray tracing)。在这种算法中,当光线从视点发出并撞击到物体上时,会产生最多 3 种类型的光线:反射、折射和阴影。如下图所示,从相机发出的(红色)光线打到了球体上并发生了反射,如果反射光最终反射到了光源,根据光线可逆原理,我们知道该光源可以照亮这个球体。而在球体的另一侧则处于阴影之中,因为在其和光源之间存在球体的其他部位,遮挡住了光源。

光线追踪图解 图源:https://upload.wikimedia.org/wikipedia/commons/8/83/Ray_trace_diagram.svg

光线追踪算法在今天也是一个十分活跃的研究领域,一个主要原因是光线追踪的计算复杂度极高,一般都需要利用蒙特卡洛方法等求近似解。在游戏等产品上应用实时光线追踪直到几年前都是一个挑战,今年在英伟达 GTC GPU Technology Conference 上仍然有好几个 session 的主题是如何对光线追踪计算进行加速。

1980 年代-2000 年代

从 80 年代开始,越来越多的电影参与进了 CGI 技术的使用中,其中今天我们耳熟能详的经典电影多到令人目不暇接,这种繁荣在一定程度上也反哺了 CGI 技术的发展。1982 年,在著名电影星际迷航 II 中,「创世纪效应」(Genesis Effect)大放异彩——在电影中,Carol Marcus 博士解释道创世纪项目是一种计算机模拟的项目,旨在将不宜居住的世界转化或重塑为郁郁葱葱的天堂。

为在电影中实现这种视觉效应,电影首次使用了当时还在卢卡斯影业旗下的皮克斯创造的 32 位 RGBA 绘画软件,并使用了分形生成的景观(fractal-generated landscape)和颗粒效果进行渲染。其实在当时,勇于应用 CGI 技术的电影除了科幻片以外,还有很多恐怖片——这倒也很合理,毕竟这两者都需要丰富的想象力,需要创造更多的「异形」,只不过当时使用 CGI 拍摄的恐怖电影中流传到今天成为经典的较少。

电影著名电影星际迷航 II 中「创世纪效应」截图 图源:https://www.youtube.com/watch?v=QXbWCrzWJo4

光线追踪算法的提出,使 CGI 生成图像的真实感大大增加,因为它本质上是在试图模拟自然界中光线传播的过程。在此基础上,为了更进一步增强 CGI 生成的某些类型的图像的真实感,Hanrahan 于 1988 年提出了立体渲染技术(volume rendering)。其背后的思想主要是在自然界中有一些物质本身就是以一定体积存在的——如云、火、雾——用前文提到的那些几何渲染方法很难取得逼真的效果。立体渲染技术仍然致力于如何将 3D 物体投射到 2D 图像中,但更关注如何在体素(voxel)而非像素(pixel)水平上实现这种渲染,以及如何保证物体纹理质感的呈现,比如生成一副伤口的图像需要关注如何真实的表示肌肉的走向、纹理等。

1993 年,Hanrahan 还开发了利用次表面散射(subsurface scattering)描绘皮肤和头发、利用蒙特卡罗光线追踪来渲染复杂照明效果的技术。次表面散射模拟的是光在穿透半透明物体时以不规则的角度在物体内部反射多次,然后再从不同角度离开物体表面的效果。这种现象在大理石、皮肤、蜡等类型的材质上非常常见,因此要逼真的渲染这种材料,首先必须模拟光的这种传播机制,下图左中给出了一个现实生活中的例子——当光穿透手指时,会产生一种半透明、光亮、毛茸茸的质感,图右则给出了计算机根据次表面散射算法渲染的图像。

人手的次表面散射现象。图源:By Davepoo2014 - Own work, CC BY-SA 4.0, https://commons.wikimedia.org/w/index.php?curid=39205630

计算机渲染的次表面散射现象图源:By Piotrek Chwała - Own work, CC BY-SA 3.0, https://commons.wikimedia.org/w/index.php?curid=7615927

也是在这一时期,3D 建模技术开始初露头角。通过专用软件在三个维度上进行数学表示,3D 建模可以对被建模对象的任何表面进行建模。具体来说,3D 模型使用 3D 空间中的点集合表示实体,点与点之间由三角形、直线(Polygonal modeling)、曲面(Curve modeling)等进行连接。这个点集可以由使用者手动创建、根据已有算法创建、或者通过扫描实体创建。初步建模完成后,再通过纹理映射(texture mapping)技术,对建模的物体表面进行优化。纹理映射——又是 Edwin E. Catmull 对 CGI 领域一个重要贡献,由他在自己的博士论文中最早提出——主要是为物体表面着色的一种方法

现实世界中的物体一般都具有非常丰富的颜色,即便是黑色的物体也不可能具有同一的黑色,要令电脑生成的图像足够逼真,为图像上的物体添加这些多样的颜色必不可少,有无纹理的物体对比见下图所示。然而,如果程序要为图像中的每一个像素制定颜色,效率就太低了。纹理映射要做的,简单来说,就是找到选择一个纹理/图像,然后将它「贴」到图像中制定的物体上。

图(1)没有纹理的 3D 模型(2)有纹理的 3D 模型图源:By Anynobody - Own work, CC BY-SA 4.0,https://commons.wikimedia.org/w/index.php?curid=3441137

立体渲染技术 + 3D 建模 + 纹理映射,为电影业带来了新的革命。1995 年,皮克斯(首映电影)与迪斯尼制片厂合作制作出了玩具总动员,这无疑也是对 CGI 技术影响最大的电影。这是第一部完全由计算机动画(CG)制作的长篇电影,也是全 3D 动画。在当时的电脑计算能力下,每帧需要 4 到 13 个小时才能完成。在这部电影发行之前,计算机图形(CG)通常用于短片或具有特殊效果的真人电影的补充,直到在 1990 年代中期,人们多少都认为用计算机制作整个数字电影是不切实际的。

在此片出现后,CGI 展示了其巨大的潜力,计算机动画电影或多或少已成为新规范,并取代了传统的手绘动画电影。皮克斯在这部电影的制作中使用的自家软件 RenderMan 负责 3D 建模和动画应用程序与渲染引擎之间的通信,到今天,RenderMan 无疑成为了好莱坞工业中的标准工具。据统计,在 47 部被提名了奥斯卡最佳艺术特效的电影中,44 部使用了这一工具。

电影玩具总动员 图源:https://zh.wikipedia.org/wiki/玩具总动员 #/media/File:Movie_poster_toy_story.jpg

在电影行业之外,CGI 技术的影响也逐渐扩展到了视频游戏中。1992 年,在 Sega Model 1 街机系统板上运行的 Virtua Racing 奠定了全 3D 赛车游戏和在更广泛的受众中普及实时 3D 多边形图形的基础。

电影玩具总动员 图源:https://zh.wikipedia.org/wiki/玩具总动员 https://en.wikipedia.org/w/index.php?curid=60308343

渲染一直是对计算资源要求很高的一类算法,很难不认为渲染技术的发展对电脑的计算资源的发展没有起到推动作用,两者至少一直是紧密结合的。也是在 90 年代,在目前深度学习中最为重要计算资源的 GPU 开始流行,并将这一趋势持续到了今天。90 年底后期,Hanrahan 和他的学生扩展了 Renderman 着色语言,使得其可以在当时刚打入市场的 GPU 上实时运行。Hanrahan 和他的学生为 GPU 开发的编程语言带动了商业版着色语言的开发(包括 OpenGL),从而彻底改变了电子游戏的程序编写

1999 年,英伟达发布了具有开创性的 GeForce 256,这是第一张被称为图形处理单元或 GPU 的家庭视频卡,计算机使用通用的图形处理框架——例如 DirectX 和 OpenGL——的惯例也是在那时建立起来。正是由于功能更强大的图形硬件和 3D 建模软件,计算机图形才变得更加详细和逼真。这十年中,AMD 占据的市场份额也不断增加,最终形成了我们今天所熟悉的「双寡头」市场。

2000 年代至今

进入千禧年后,CGI 技术的发展仍然非常快,其中不乏图形处理单元的持续增长和日益成熟带来的推动力——到了此时,3D 图形 GPU、3D 渲染功能已成为台式计算机的标准配置。CGI 开始变得无处不在——CGI 电影激增,诸如冰河世纪和马达加斯加等传统动画动画片电影以及诸如《海底总动员》等众多皮克斯产品在该领域的票房中占据主导地位;在视频游戏中,索尼 PlayStation 2 和 3,Microsoft Xbox 系列游戏机以及 Nintendo 的产品(例如 GameCube)和 Windows PC 都吸引了大量的追随者,诸如超级侠盗猎车手,刺客信条,最终幻想,生化奇兵,王国之心,镜之边缘。CGI 在这两个领域的成功发展将计算机图形学的影响力传播到了主流领域,并逐渐引入其他领域,比如电视广告。

软件方面,OpenGL 也变得更成熟,它与 DirectX 有了很大的改进。在这一十年中,第二代着色器语言 HLSL 和 GLSL 开始流行。

电影冰河世纪。图源:合理使用, https://zh.wikipedia.org/w/index.php?curid=294080

游戏最终幻想。图源:合理使用,https://zh.wikipedia.org/w/index.php?curid=3621086

这一时期,在电影制作中大量应用了另一非常重要的技术:动作捕捉(motion capture)。运动捕获,又称运动捕捉或运动捕捉,是记录物体或人的运动的过程。最早在 1978 年的电影指环王中其实就有用到,但由于当时的技术限制,还不能做到对演员的表情等细节进行捕捉。2009 年,阿凡达(Avatar)以使用运动捕捉技术为其角色进行动画而不是使用软件来手工绘制/创建角色而闻名。另外,阿凡达(Avatar)是最早使用「Simulcam」的电影之一。这款特殊的摄像机能够将 CGI 动画图像叠加在实时拍摄的实时图像之上(Outlaw)。

电影阿凡达。图源:By Source, Fair use, https://en.wikipedia.org/w/index.php?curid=23732044

到了 2010 年后,CGI 在视频中几乎无处不在,预渲染的图形在科学上几乎是真实照片级的。这时期的工作主要集中在集成更复杂的多阶段的图像生成。纹理映射也已经发展为一个复杂的多阶段过程,使用着色器(shader)将纹理渲染、反射技术等多种算法集成到一个渲染引擎中的操作并不少见。

阻碍 CGI 技术,特别是渲染技术,发展的一大瓶颈仍然是计算,在深度学习、人工智能火爆的今天,AI 也为 CGI 在这方面的突破助了一臂之力。几天前英伟达发布的 DLSS 2.0(deep learning super sampling),根据官方宣传,可以保证渲染程序在较低分辨率下对游戏画面进行实时光线追踪,而 DLSS 2.0 则会将渲染后的画面进行 4 倍超采样,从而保证细节与帧率的兼顾。也就是说,在 DLSS 2.0 下,要运行实时 4k 游戏,渲染程序只需要在 1080k 的分辨率下进行计算。「要在游戏中的每一帧上运行一个神经网络」,像这样疯狂的想法还有很多,很难想象 AI 和渲染结合起来将会把 CGI 生成图像带到什么方向上。

至此,CGI 技术从一开始只能对一些简单的形状进行建模的研究,逐渐发展成了一个子研究极度丰富的复合学科,其对其他计算机科学领域的影响数不胜数,涉及到 CGI 的跨学科领域也屡见不鲜。正如 ACM 主席 Cherri M. Pancake 所说:「Hanrahan 和 Catmull 做出的贡献表明,计算机某个专业领域的进展能够对领域内其他学科产生深远影响」。

在这一小苗成长为一颗参天大树的过程中,始终有 Patrick M. Hanrahan 和 Edwin E. Catmull 的参与,他们也因此获得了 ACM 大奖。Patrick M. Hanrahan 和 Edwin E. Catmull 的成功对所有正在从事自己所热爱的工作的人都是一个巨大的鼓励,因为他们证明了个人在自己的研究领域内的坚持和贡献,不仅可以推动该单个领域的进步,甚至还可以改变世界。我们所生活的世界真正由我们的双手亲自创造。颁奖典礼预期 6 月在美国旧金山举行,Patrick M. Hanrahan 和 Edwin E. Catmull 将分享 100 万美元奖金。可见,五毛钱的特效可能随处可见,但好的特效,不仅费时费力,还很值钱。

作者介绍:李媛媛,几次转行,本科国际贸易,研究生转向统计,毕业后留在比利时,选择从事农用机械研发工作,主要负责图像处理,实现计算机视觉算法的落地。欣赏一切简单、优雅但有效地算法,试图在深度学习的簇拥者和怀疑者之间找到一个平衡。我追求生活的宽度,这也是为什么在工作之外,我也是机器之心的一名技术分析师。希望在这里和大家分享自己对于技术的理解,通过思想的碰撞拓宽思路和眼界。

机器之心技术分析师专栏
机器之心技术分析师专栏

由来自世界各地的专业分析师为你解读前沿进展,技术热点和经典论文。我们的分析师团队由来自于各大名校的硕士和博士,以及一线研究机构的研究员组成。

产业计算机图形动画特效计算机图形学
4
相关数据
计算机图形技术

图像数据处理、计算机图像(英语:Computer Graphics)是指用计算机所创造的图形。更具体的说,就是在计算机上用专门的软件和硬件用来表现和控制图像数据。

光线追踪技术

在计算机图形学中,光线跟踪是一种渲染技术,用于通过将光的路径跟踪为图像平面中的像素并模拟虚拟对象对光线的接收效果来生成图像。 该技术能够产生非常高的视觉真实感,通常高于典型扫描线渲染方法,但计算成本更高。

映射技术

映射指的是具有某种特殊结构的函数,或泛指类函数思想的范畴论中的态射。 逻辑和图论中也有一些不太常规的用法。其数学定义为:两个非空集合A与B间存在着对应关系f,而且对于A中的每一个元素x,B中总有有唯一的一个元素y与它对应,就这种对应为从A到B的映射,记作f:A→B。其中,y称为元素x在映射f下的象,记作:y=f(x)。x称为y关于映射f的原象*。*集合A中所有元素的象的集合称为映射f的值域,记作f(A)。同样的,在机器学习中,映射就是输入与输出之间的对应关系。

图像生成技术

图像生成(合成)是从现有数据集生成新图像的任务。

图像处理技术

图像处理是指对图像进行分析、加工和处理,使其满足视觉、心理或其他要求的技术。 图像处理是信号处理在图像领域上的一个应用。 目前大多数的图像均是以数字形式存储,因而图像处理很多情况下指数字图像处理。

暂无评论
暂无评论~