从在瓦片块背景上显示彩色精灵图的日子到现代游戏中沉浸式3D环境,这真是一段漫长的旅程。过去,这项工作由一名游戏创作者完成,而现在已发展成为一项多方面的制作,需要各个创意学科的工作人员参与。下一代游戏机和家用电脑硬件将带来可用计算能力的革命性飞跃;商用硬件将提供每秒万亿次浮点运算(teraflop)或更高的性能。这种性能的飞跃将带来消费者和创意专业人士期望的飞跃。
当前这场革命的种子很久以前就已播下。我们在游戏中做的一切都始于讲述一个简单的故事:人与人,人与自然,人与自身。一个孩子坐在电视机前,抵挡一波又一波相同的入侵者,这些入侵者正朝着他防御不足的基地进军;在20世纪80年代,这个故事被讲述了数百万次,就像孩子们讲述自己的故事一样:“我得了8000分的高分,这是我的首字母缩写!”
讲述故事不仅仅是这些简单的场景,技术始终在其中发挥着作用。每次我们的故事变得更好时,我们都需要更好的硬件。我们需要更多的颜色,更多的内存,更好的声音,更好的控制器——而且我们需要更快的处理器。
在早期,角色被表示为简单的位图图像,称为精灵图(见图1)。今天,游戏角色不再是简单的像素化图像。一个主要角色通常由1,500到10,000个几何图元组成,并使用大约100千字节到几兆字节的纹理。角色具有复杂的动画绑定,包括驱动骨骼、约束、附着点、物理设置和数百个独特的动画(见图2)。
在早期,我们关注在名为SIGGRAPH(1973)的新兴会议上展示的作品,我们心想,“总有一天我们会做到那样。”当游戏机从16位处理器跃升到32位处理器时,事情真的开始发生变化。在那之前,机器在移动精灵图和背景方面变得越来越好;平面视图进入平面世界,呈现出越来越精致的角色和互动。一些备受瞩目的游戏机将这种范式推向了极致,移动、旋转、缩放和合成大量的巨大精灵图。
最终,这些游戏机都惨遭失败,原因在于竞争对手的一项创新:硬件加速3D。用于PC的廉价显卡和第一代索尼 PlayStation 中的专用多边形硬件宣告了旧范式的终结。我们终于解放了相机,全方位地展示我们的角色和场景。我们回顾了10年前的SIGGRAPH会议记录,心想:“你知道吗?我们可以做到那样。”我们过去常常以我们落后SIGGRAPH多少年来衡量我们的进步;今天,这种差距已经缩小:我们现在为SIGGRAPH撰写论文。
下一代消费硬件即将到来。它的特点将是超级计算机性能。多个CPU将共同提供每秒万亿次浮点运算;将会有专用的多处理GPU(图形处理器)——也以大约每秒万亿次浮点运算的速度运行;浮点像素将实现卓越的图像合成。这些系统的性能将比当前一代游戏机强大100倍。今天的游戏系统平均每个顶点消耗大约10个GPU周期;下一代将能够消耗100个或更多。每个像素如此大的处理量将允许实现像特效丰富的电影或皮克斯工作室等制作的动画电影中看到的复杂着色效果。
当前一代游戏系统的角色和场景总负载平均以数万个三角形衡量;下一代将把如此多的复杂性用于单个角色,并为环境投入更多。我们将看到多处理渲染管线、复杂的材质,以及实景拍摄或预渲染序列与交互式内容之间几乎无缝的切换。
我们的故事将有可能达到如今在电影或电视节目中所期望的相同深度和复杂性。在游戏中,我们为聚会带来了一些新的东西,即我们能够影响故事的展开、修改视角,并以新的方式选择性地重新体验特别吸引我们的序列——甚至可能以原始体验创作者未曾预见的方式。
本文探讨了图形革命以及一些将我们带入下一代游戏系统的概念。我研究了电影级实时渲染的影响、高级光照技术和高动态范围图像的前景、渲染管线的用途,以及基于多处理器的渲染和高级几何体的未来。
逼真图像的创作有着悠久的历史,从Jim Blinn和其他先驱的最早渲染开始,稳步发展到《星球大战》(乔治·卢卡斯,1977年、1980年、1983年、1999年、2002年)的像素完美渲染,以及《指环王》(彼得·杰克逊,2001年、2002年、2003年)的宏大场景。实时渲染的进步也紧随其后。不久前,电影级质量的渲染需要数小时才能完成;随着下一代游戏系统的出现,接近该质量的图像将以每秒60帧的速度生成。
物体的外观取决于形状和着色。形状是指物体的几何或程序描述。着色是指光、阴影(如阴影)、纹理和颜色的组合,它决定了物体的外观。1 一个设计良好的渲染程序在涉及物体形状和变换的几何处理与涉及光的传输和过滤的光学处理之间提供了清晰的接口。
场景的最终外观是通过元素的合成或分层实现的。元素可以预渲染为拍摄的照片(称为底板)、着色形状、特效通道(如大气和烟火效果)以及标题组件。电影界早就认识到,有些图像无法一次性捕捉。自电影特效诞生以来,背景画、遮罩抠像、多次曝光以及在曝光图像上绘制效果一直被用于创作富有想象力的场景。在有限的程度上,这些效果已在实时计算机图形中得到利用;大多数电脑游戏几乎普遍以三个图层渲染:天空穹顶、场景几何体和抬头显示器(HUD)。
现代实时架构早在1982年就被提出。2 Turner Whitted和David Weimer提出了使用一组根据所需渲染特性选择的着色器。下一个重大步骤是一个模型,它将光照、表面属性和大气效果分离,由Robert L. Cook、Loren Carpenter和Edwin Catmull在1987年描述。3 从那时起,已经取得了许多渐进式进展,但基本概念没有重大修订。
最早的着色器仅提供在单一表面类型上运行的固定着色器。该着色器通常使用朗伯照明模型,影响照明的简单衰减,因为表面背离光源。物体的可见性使用简单的算法确定,例如二叉空间分割,其中物体递归地分组在半空间中,并通过测试半空间是否对相机可见来确定可见性。下一个发展是提供一系列着色器,这些着色器可以通过改变参数来创建不同的表面外观。表格是下一个重大创新。图像贴图编码表面参数;纹理贴图、环境贴图、位移贴图、凹凸贴图和许多其他贴图很常见。图像贴图可以改变着色器方程中的任何参数。
值得注意的是,Id Software的Quake III将着色置于脚本控制之下。Quake III着色器系统允许控制纹理绑定、混合模式、纹理坐标生成和OpenGL状态机的其他方面,但它不够广泛,不能被认为是完整的着色语言。
当时的着色系统尽可能多地将内容硬塞进单个着色器的参数中,导致了一种一刀切的方法。这种方法限制了可以实现的效果,并限制了性能,因为即使是最简单的着色器也需要携带一些开销来支持更复杂的情况。着色树和着色语言的引入为着色器引入了灵活且方便的概念模型。着色树引入了用于着色计算的数据流网络的概念;着色语言提供了编程模型。自定义着色器可以进行优化,以封装特定元素所需的唯一数据和代码。4
当前着色语言的领导者是皮克斯的RenderMan。James Kajiya将渲染公式化为一个光传输问题。5 RenderMan根据Kajiya的公式定义了三类着色器
1. 光源着色器。计算照明项,即从光源在特定方向发射的光的颜色和强度。
2. 表面着色器。计算双向反射分布函数与入射光分布的积分。
3. 体积着色器。计算通过参与介质(如尘土飞扬的空气、咸水、雾和烟雾)的散射效果。其他参与介质包括半透明材质,如大理石、皮肤和植物。6
当前一代硬件着色器与RenderMan有着根本的不同;RenderMan关注的是着色器和光照的描述,而硬件着色器则显式地公开了像素和顶点处理器。尽管如此,Mark Peercy及其同事已经演示了皮克斯RenderMan着色器系统的硬件加速。7 他们描述的方法是创新的;OpenGL架构被视为通用SIMD(单指令流多数据流)计算机,编译器将RenderMan翻译成OpenGL命令——本质上是将OpenGL视为汇编语言。着色器的计算直接在帧缓冲中执行,使用帧缓冲混合复制操作作为超标量计算。Eric Chan及其同事有另一种方法,使用一种方法直接从RenderMan等着色语言翻译到多通道硬件着色器。8
商用图形硬件中提供了各种像素和顶点着色技术。OpenGL 1.4着色器语言GLslang、nVidia的Cg(图形C)和微软的DirectX 9高级着色语言都属于此类。高级光照和着色系统将定义下一代游戏图形技术,并且对于实现实时电影级渲染的目标绝对至关重要。
直到最近,合成、抗锯齿、运动模糊、景深、软阴影和面光源都是通过硬件中的专用缓冲区实现的。有限的缓冲区精度大大复杂化了这个问题。图像的标准表示一直是红色、绿色、蓝色和Alpha各8位——构成每个像素的颜色分量。每个合成到输出缓冲区中的像素都会降低结果的精度。例如,将红色值140添加到红色值180会产生最终结果320,这需要9位来表示。由于帧缓冲对于红色只有8位,因此该值将被截断为255。结果是颜色饱和至浑浊值。这种饱和度限制了可以容纳的图层数量和可以应用的后期处理量,从而限制了最终图像的复杂性和质量。
每通道8位定点图像表示现在被称为LDRI(低动态范围图像)。HDRI(高动态范围图像)是一项至关重要的新发展。最近的硬件可容纳16位或32位浮点值;这些HDRI表示有望迅速成为常态。回想起来,很明显,真实世界中照明的范围和精度远远超过了定点帧缓冲中可能的范围和精度。HDRI由Paul Debevec等研究人员率先开发,并通过Industrial Light and Magic的OpenEXR等倡议推广。9 下一代显卡和游戏机将完全有能力在实时中使用HDRI,许多显卡将本地支持OpenEXR格式。
HDRI场景通过内核或其他传递函数(称为色调映射)进行渲染。色调映射在调整图像以获得感知效果后,将HDRI转换为适合帧缓冲和数模转换器的格式。10 图像的曝光和其他光学特性可以像胶片源的控制一样进行控制。HDRI还为感知效果(如辉光和绽放)打开了大门,其中图像的饱和或明亮区域溢出到相邻区域。
为了利用HDRI,下一代游戏将需要抛弃旧的光照模型,转而采用全局照明技术和光源反射。一种将变得越来越普遍的高级光照技术是基于图像的照明。环境中的辐射能量和反射分量在某个位置进行采样,然后应用于物体。如图3中的茶壶所示,物体看起来与场景完美融合。
许多其他技术在新硬件上将成为可能——例如,传统光线追踪、光子映射(其中光子在场景中离散模拟)11 以及球谐函数编码的辐射传递。阴影尚未得到逼真处理;它们在游戏中通常表示为硬边轮廓或简单的模糊斑点。
渲染管线管理着将着色器、图像、光照和几何体转换为最终合成图像的过程(见图4)。该管线有两种主要类型的API(应用程序接口)
• 立即模式API,例如OpenGL,按需工作,将几何碎片和着色指令放置在管线中,以便按照应用程序确定的顺序执行。
• 保留模式API实现场景图或其他组织范式。场景图在图结构中编码场景的空间或逻辑关系和层次结构。
保留模式API相对于立即模式API在交互式渲染方面具有显著优势,因为它们为并行化和管线优化提供了众多机会。皮克斯的硬件加速RenderMan将编译器优化技术应用于场景图,以获得重大的性能提升。艺电图形管线是另一个极好的例子:分析场景图以序列化渲染指令以最大化吞吐量,并且合成与渲染协同工作以生成最终场景。12
渲染管线将场景的描述转换为帧缓冲中的像素。遍历几何体数据库——并且剔除相机不可见的对象,因为无需将资源用于不可见的事物。要渲染的单个对象作为图元提交,以便变换到齐次空间。几何体的顶点被变换和光照,然后转换为图元,如三角形和线段。硬件光栅化和插值图元,将其转换为称为片段的像素游程。片段中的像素会发生进一步的操作,如色调和混合(这是像素着色器运行时),并且生成的像素被写入帧缓冲。中间帧缓冲被合成为可见帧缓冲以进行显示。
延迟和帧率是令人满意的实时渲染体验中最重要的两个因素。帧率是已完成图像的呈现率。延迟是提交渲染数据与最终显示结果图像之间的延迟。为了获得看上去稳定的显示,除非在难以实现的条件下(涉及精确计时以击败显示器的刷新),否则渲染不能发生在可见帧缓冲上。因此,渲染必须发生在不可见缓冲区上,并且要么必须将该缓冲区复制到可见缓冲区,要么显示刷新必须在两个绘制缓冲区之间交替,因为渲染已完成。这样的系统具有一帧的延迟;换句话说,可见帧比当前帧落后一帧。
为了在没有互锁处理器的情况下运行,现代游戏机多处理渲染。为了实现这一点,不仅必须将显示缓冲区与不可见缓冲区交替,而且由游戏应用程序线程构建的渲染列表也必须与GPU正在执行的渲染列表交替。结果是,可见帧比当前正在计算的帧落后两帧。当使用第三个处理器来构建用于渲染的数据(如布料或肉体模拟)时,一些现代渲染管线甚至具有更大的三帧延迟。
这种延迟突显了帧率的重要性,因此也突显了对强大硬件的需求。电影早期的闪烁融合研究认为24赫兹的帧率令人满意。事实上,24赫兹不足以表示快速移动的物体,例如在飞行模拟或快速移动的游戏中可能观察到的物体。如果显示比游戏玩法延迟三帧,并且帧率为30赫兹,则用户将在输入后近十分之一秒看到输入结果。十分之一秒对大多数人来说是可以感知的,并且这种感知延迟是游戏玩家在快速移动相机的场景中有时会感到恶心的来源之一。逻辑上推断,帧率越高,延迟越低,用户体验越好。
直到最近,渲染都是由CPU管理的串行处理处理的。渲染图元被移交给GPU,CPU可以执行其他任务,然后再次为GPU提供更多数据。事情已经取得了显著进步。如今,PC程序员必须应对CPU和显卡的并行性,而游戏机程序员必须应对多核CPU和图形处理器的并行性。在不久的将来的程序员将不得不处理多个同构CPU和大量并行图形单元。当前的管线范式在这种架构下表现不佳。
大多数现代实时渲染管线都基于将对象串行处理到帧缓冲中。对象可以以任意顺序提交,但必须在光栅化之前的最后一步进行排序。这种排序有两个目的:透明对象的分层和渲染速度。由于对象是累积地绘制到帧缓冲中的,因此透明对象需要从后往前绘制,以便使透明对象后面的事物能够透过显示;如果先绘制透明对象,则场景将具有明显的孔洞。更改GPU上的状态——上传纹理、打开和关闭光照等——可能会非常昂贵。通过将所有相似状态一起排序(所有具有相同纹理的事物、已光照的事物等),您可以最大限度地减少状态更改,并且GPU花费最少的时间来渲染场景。
一般来说,基于多处理器的并行管线在多个处理器之间分配几何体,其结果最终必须汇集到帧缓冲中,如图5所示。
有三种类型的基于多处理器的架构:先排序、中间排序和后排序。13 它们的区别在于图元排序的时间,即在提交给几何处理器之前、在提交给光栅处理器之前,或在合成到帧缓冲期间——如图6所示。
先排序将帧缓冲细分为瓦片,这些瓦片映射到可用的处理器。几何处理器与光栅化器一一耦合,形成完整的渲染单元。首先,几何体被变换到屏幕空间,然后变换后的图元被分派到适当的渲染单元。先排序架构可以利用帧到帧的连贯性,仅当图元在屏幕区域之间移动时才将它们重新分配给处理器。先排序容易受到负载不均衡的影响,因为屏幕的某些部分可能比其他部分有更多的事物要渲染。
中间排序也将帧缓冲细分为瓦片。几何体被排序并在几何处理器之间分配。这是一个全局操作,因为任何对象都可能占据屏幕的任何区域。这也是一个高带宽操作,因为必须在每一帧中在处理器之间传输整个数据集的描述。图元被变换、按屏幕区域排序,并从几何处理器路由到光栅化器。光栅化器渲染其屏幕区域,然后片段被收集并组装到帧缓冲中。
中间排序的优势在于几何体可以在处理器之间分配,而无需考虑屏幕的细分。但是,它有许多缺点。它具有较差的负载分配,因为屏幕的某些区域可能相对没有几何体填充。存在延迟问题,因为所有处理器必须在最终图像可以合成之前完成。顺序相关的图元(如透明对象)难以适应,因为片段以非确定性顺序到达以进行处理。带宽是性能的最终限制因素。
后排序渲染器将几何体和光栅处理配对,就像在先排序中一样;但是,后排序渲染器负责使用其共享的图元渲染全屏图像。部分图像被合成在一起,考虑到每层中每个像素到相机的距离,这保证了各个渲染器的结果被正确分层。后排序的主要优势在于不需要对图元进行排序或重新分配;每个渲染器都计算其图像,就好像它是系统中唯一的渲染器一样。
高效合成是后排序渲染器的关键,它使用Thomas Porter和Tom Duff描述的像素代数。14 每个合成元素都有一个关联的遮罩,其中包含指定元素中形状的覆盖信息。Porter和Duff推导出一整套合成操作,定义了二元和一元运算。像素代数是结合性的,使得可以进行并行优化。多个元素的合成可以描述为一棵树,其中终端节点是要合成的图像,内部节点是像素运算符。认识到这样的树类似于解析树,可以使用编译器优化技术来将复合操作最佳地匹配到硬件。15 在优化树以最小化操作后,可以以在空间上分区的方式对其进行分区,以便负载均衡多个处理器。最终合成通道收集分区子树的输出并将其分层到帧缓冲中。
随着处理器添加到系统中,后排序架构比先排序或中间排序更好地扩展。16 后排序架构最有可能最适合下一代硬件。后排序的主要缺点是它需要高带宽图像合成器。
到目前为止,几何体具有固定的复杂性和拓扑结构。这是必要的,因为为硬件渲染准备几何体涉及缓慢处理,以最佳地排序图元、最大化纹理重用等。最近的游戏已经看到了动态生成的地形,仅在可见的地方创建复杂性。下一代平台将这项技术提升到新的水平,因为处理能力将可用于将程序化几何体应用于场景中更多对象。
粒子系统是程序化几何体的一种类型,用于渲染随时间变化的现象,如云、烟和火,这些现象难以建模为表面。卢卡斯影业的William Reeves在1983年首次将它们形式化,作为继Jim Blinn早期关于灰尘和云渲染的工作之后的工作。17 到目前为止,粒子系统相当有限,由数十到数百个粒子组成。在即将到来的硬件上,这个数字应该增加一百倍,从而实现我们至今一直回避的密集体积和环境效果。
细分曲面(见图7)已成为光滑表面片或NURBS(CAD应用中使用的非均匀有理B样条)的主要替代方案,并且在许多应用中大多已取代NURBS。许多游戏都附带了简单的固定细分方案。这是一种强大的方法论,并且随着更快的硬件即将到来,更复杂的细分方案是可能的。细分模型不会遭受补丁固有的许多问题。这些问题包括折痕、接缝、撕裂、裂缝、无法定位细节以及拓扑问题,例如价数和连续性限制。细分模型的拓扑结构不限于矩形或三角形拓扑结构。细分模型是分层可编辑的;表面可以以不同的分辨率编辑。最近在细分公式方面的进展允许硬件加速。18
细分建模方法涉及简单、低多边形建模工作流程,包括倒角、挤压、塌陷和一些其他基本操作。细分模型以更少的美术师工作量实现更精细的表面分辨率,并且最终模型的复杂性可以调整以匹配场景和性能条件。
即将到来的图形革命将是一场创造性的革命;当前的工作方法过于劳动密集,无法扩展到我们需要创建以支持媒介的数据量。我们将需要新的制作方法,融合游戏、电影和电视的技术。这些新技术将协同地反馈到它们的来源,并打开新的创作窗口,将故事讲述提升到我们尚未见过的水平。问
1. Hanrahan, P. 和 Lawson, J. 用于着色和光照计算的语言。计算机图形学 24, 4(1990年8月),289–298。
2. Whitted, T. 和 Weimer, D. M. 用于开发3D光栅图形系统的软件测试平台。 Transactions on Graphics,1,1(1982年1月),44–58。
3. Cook, R. L.,Carpenter, L. 和 Catmull, E. Reyes图像渲染架构。计算机图形学,21,4(1987年7月),95–102。
4. Abram, G. D. 和 Whitted, T. 构建模块着色器。计算机图形学 24, 4(1990年8月),283–288。
5. Kajiya, J. T. 渲染方程。计算机图形学 20, 3(1986年8月),143–149。
6. Henrik W. 使用光子映射的逼真图像合成。AK Peters,Natick:MA,2001年。
7. Peercy, M. S.,Olano, M.,Airey, J. 和 Ungar, J. 交互式多通道可编程着色。 SIGGRAPH会议记录(2000年),425–432。
8. Chan, E.,Ng, R.,Sen, P.,Proudfoot, K. 和 Hanrahan, P. 用于可编程图形硬件上的多通道渲染的片段着色器的有效分区。SIGGRAPH/EUROGRAPHICS图形硬件会议记录(2002年),69–78。
9. OpenEXR(来自Industrial Light and Magic):http://www.openexr.org。
10. Debevec, P. HDRI和基于图像的光照。课程19,SIGGRAPH 2003。
11. 参见参考文献6。
12. Lalonde, P. 和 Schenk, E. 渲染资产的着色器驱动编译。 Transactions on Graphics 21, 3(2002年7月),713–720;参见:http://www.cs.brown.edu/~tor/sig2002/ea-shader.pdf。
13. Molnar, S. 实时图像生成的图像合成架构。博士论文,北卡罗来纳大学教堂山分校,1991年。
14. Porter, T. 和 Duff, T. 合成数字图像。计算机图形学 18, 3(1984年7月),253–259。
15. Ramakrishnan, C.R.,Silva, C. T. BSP树排序下后排序合成的最佳处理器分配。SPIE电子成像,视觉数据探索和分析IV,1999年。
16. 参见参考文献13。
17. Reeves, W. T. 粒子系统——一种用于建模一类模糊对象的技术。 SIGGRAPH会议记录 17, 3(1983年7月),359–375。
18. Schaefer, S. 和 Warren, J. 关于C2三角形/四边形细分。莱斯大学,预印本(2003年)。
NICK PORCINO 自1981年以来一直从事游戏、计算机图形、人工智能和机器人技术方面的工作。他的经历包括从事自主潜水器、东京的机器人玩具、行业早期以来的游戏机以及迪士尼互动和卢卡斯艺的游戏。最近,他领导团队创建了R2,卢卡斯艺的高性能实时渲染引擎。他是 SIGGRAPH的成员,也是IGDA(国际游戏开发者协会)人工智能接口标准工作组的指导委员会成员。
© 2004 1542-7730/04/0400 $5.00
最初发表于Queue杂志第2卷第2期——
在数字图书馆中评论本文
Walker White, Christoph Koch, Johannes Gehrke, Alan Demers - 更好的脚本,更好的游戏
2007年,视频游戏产业收入达到88.5亿美元,几乎与电影在票房的收入相当。这部分收入的大部分来自大型团队创作的热门大作。尽管大型开发团队在软件行业中并不罕见,但游戏工作室往往拥有独特的开发者群体。软件工程师在游戏开发团队中只占相对较小的部分,而团队的大部分由内容创作者组成,例如艺术家、音乐家和设计师。
Jim Waldo - 游戏和虚拟世界的扩展
我曾经是一名系统程序员,从事银行、电信公司和其他工程师使用的基础设施工作。我从事操作系统工作。我从事分布式中间件工作。我从事编程语言工作。我编写工具。我做了硬核系统程序员所做的一切。
马克·卡洛、保罗·比尔多、大卫·布里顿 - 大型游戏,小型屏幕
在创建和分发移动 3D 游戏时,一件立即显而易见的事情是,手机市场与更传统的游戏市场(如游戏机和掌上游戏设备)之间存在根本差异。其中最显著的差异是交付平台的数量;设备的严格限制,包括可以改变方向的小屏幕;有限的输入控制;需要处理其他任务;非物理交付机制;以及手机性能和输入能力的差异。
迪恩·马克里 - 可扩展性问题
回到 1990 年代中期,我曾为一家开发多媒体信息亭演示的公司工作。我们最大的客户是英特尔,我们经常制作出现在新 PC 上的演示,这些 PC 位于主要电脑零售商(如 CompUSA)的端头货架上。那时,从商业到消费者,所有应用类别都对性能有需求。我们制作的演示展示了,例如,在新的处理器上,电子表格的重新计算速度(那时您必须手动执行此操作)比前一年的处理器快多少。即使是随便的观察者也能立即注意到这些差异 - 而且这很重要。