光线追踪与物理加速
- 来源:微型计算机 smarty:if $article.tag?>
- 关键字:光线追踪 smarty:/if?>
- 发布时间:2010-06-24 16:40
Fermi的出台意味着通用计算成为GPU未来的关键,利用GPU来执行高并行浮点运算的话题为业界津津乐道,几乎所有的超级计算机厂商都对此兴奋异常,希望借助GPU的力量制造出更强大、更廉价的超级电脑。这股风潮几乎令业界漠视了GPU本源的使命,那就是更快地渲染出更真实的3D场景。
或许“真实”这个字眼颇为老调,那么我们来看看前不久热映的电影《阿凡达》—抛开老套的剧情不谈,影片中的画面全出自于计算机的渲染,但所有观众都无法意识到这一点,影片看上去就是摄影机对着真实场面在拍摄。要实时渲染出这样的效果,GPU或许还需要超过十年的发展,但这并不影响图形业界对真实效果的追求。如你所见,DirectX 11带来了如Tessellation这样的新功能,但这些都是无足轻重的小伎俩,对画质的影响较为有限。在未来的十年中,GPU真正可倚赖的视觉技术,只有光线追踪(Ray Tracing)与物理计算,前者可实现流光溢彩的表面效果,后者则实现物体动作的真实展现。
真实再现:光线追踪完美模拟人眼视觉首先我们需要了解,光线追踪究竟可以用来做什么。要回答这个问题,我们同样需要从好莱坞电影谈起—光线追踪是一项可以大幅增加场面真实感的渲染技术。准确地说,它可以利用计算机构建出以假乱真的视觉画面,当好莱坞开始利用计算机来制作特效画面时,光线追踪技术就被引入。从12年前的《泰坦尼克号》到《魔戒》三部曲,再到现在的《阿凡达》,光线追踪技术都被大范围地使用,可以这么说,如果离开光线追踪技术,那么电影工业将受到重创(图1)。
光线追踪技术之所以具备这样的能力,在于它本身就是对真实光线传递的仿真。不妨做个简单的类比:我们假设屏幕内的世界是真实的,显示器或显示屏只是一个完全透明的框框,那么屏幕内世界里应该有哪些光线会透过屏幕投入人的眼睛呢?光线追踪技术正是为了解决这个问题而存在。在数学层面上,这项技术就是追踪与物体表面发生交互作用的光线,得到光线经过路径的模型—光线的数量越多,得到的视觉信号就越多,意味着构建的场景越逼真。
但是,要对光线系统进行数学化的仿真,是一个非常艰难的任务。因为在光线跟踪中,每一个光线的路径都是由多重直线组成,几乎总是包含从原点到场景的反射、折射和阴影效应。而在动作画面中,每一束光线的位置和方向总是在不断变化,这样每一条光线都必须用一个数学方程式来表示,并定义光线的空间路径(Y轴)-时间(X轴)的函数。此外,我们还需根据光线的照射目标进行颜色分配—到达不同的表面,光线将产生不同的颜色,这也就是Z轴参数。在这套系统中,屏幕的每一个视觉像素,都对应着一条可追踪的光线,也就对应着一套函数组,通过这个函数组,屏幕的任何一个像素,在某个时刻都可以产生正确的亮度和颜色,也就是产生视觉效果。
如果我们能稍稍深入理解,不难获知光线追踪是最高级的3D渲染艺术。我们可以简单地认为:这项技术直接操控屏幕的背光,让每个像素都对应真实场景的光反射—你可以反过来理解:就是把显示屏幕当作一个空白的方框,方框内的场景都是绝对真实,而非虚构渲染的。如果从人眼的角度来看,光线追踪与真实视觉的原理相同,区别仅在于真实视觉系统中,光线的数量可以分解为无穷大,而计算机的光线追踪系统中,光线的数量是有限的—不过当光线的数量达到一定临界点时,人眼就无法再加以区分,而认为所见到的都是“真实的拍摄画面”,这也是好莱坞电影工业广泛运用这项技术的根本原因。
光线追踪技术的数学化最早可回溯到20世纪60年代,在一个叫数学应用组的组织中,一些科学家对光线追踪的艺术化感兴趣,他们为此建立了一个动画摄影工作室,并利用光线追踪原理来制作3D肖像和动画—当然在那个时代,这项技术更多停留在数学界。直到90年代好莱坞开始引入计算机渲染来制作特效,光线追踪技术才得到广泛的应用,以至于到现在任何一部提供特效的电影都无法离开它。而我们可以预见,未来也不会有哪一项技术会取代它的地位,除非上帝改变了人眼产生视觉的基本原理。
光线追踪导入PC:Daniel Pohl的宝贵实践
当3dfx制造出Voodoo卡的时候,他们并没有将目光放在光线追踪技术上。十年之后,NVIDIA虽然带来了G80架构,但却同样没能看到这项技术—3D图形业界似乎对这么一项关键技术熟视无睹。
此种情况看似有悖常理,但绝不是毫无理由的。光线追踪在电影制作中被广泛运用,将其引入到PC游戏界根本不具技术可行性。原因在于,光线追踪所需的运算量极其庞大:电影工业每制作出一帧光线追踪画面,都需要庞大的计算机集群经过数小时的计算,而PC游戏要求实时渲染,这两者的鸿沟宛如天堂与地狱。任何一位有理智的工程师都知道,桌面计算机的CPU根本不可能提供如此巨量的运算力。既然如此,图形厂商当然就不会有什么浪漫主义的想法了。
大约在2 0 04 年,德国埃尔兰根- 纽伦堡(Erlangern)大学一位名叫Daniel Pohl的学生开始他的研究课题(图2),选择了之前无人涉足的光线追踪游戏化的工作,即尝试将这项技术引入到PC游戏中,从而获得更出色的视觉效果。Daniel Pohl的想法很单纯,只是想把光线追踪技术的雏形引入到某款游戏中,证明这在技术上也是可行的,从而漂亮地完成自己的毕业课题,至于商用化问题则没有考虑得那么长远。不过DanielPohl所没有想到的是,他无意中成为这个领域中最知名的开拓者。Daniel Pohl首先要面对的问题就是找到一套光线追踪数学模型—这个模型必须要比好莱坞影业所开发的引擎简单,这样可以不需要那么大的计算量,追踪的光线数量也可以少一些。幸运的是,Daniel Pohl不必从零开始编制算法,当时德国萨尔兰大学的计算机图形小组正在开发OpenRT光线追踪引擎,Daniel Pohl寻求到他们的帮助,并参与其中并成为一位关键开发者。DanielPohl希望将OpenRT移植到某款电脑游戏中,使得该游戏能够支持光线追踪效果。由于卡马克的开源政策,当时非常流行的游戏《QuakeⅢ》(雷神之锤3)是个非常好的改造对象—这个工作出奇的简单,例如每个像素的动态和实时阴影中仅需要10行左右的代码指令就可以引入光线追踪模型。在较短的时间内,Daniel Pohl就在《QuakeⅢ》的渲染核心中完整地加入OpenRT引擎,《QuakeⅢ:Ray Tracing》就此诞生。
接下来,Daniel Pohl和其他研究成员一起见证了历史时刻:支持光线追踪的《QuakeⅢ:Ray Tracing》在PC平台上获得成功运行,尽管这个光线追踪模型相对简单,光线数量也不是太多,但游戏的画面质量获得非常显著的提升,光线追踪的优点一览无遗。可是另一方面,《QuakeⅢ:RayTracing》对资源的消耗也极为可怕,这个演示平台居然是动用搭载了20个Athlon XP 1800+处理器的计算机集群进行运作,CPU频率总计达到36GHz。当时游戏的分辨率只有区区512×512,开启最基础的4x FSAA反锯齿特效,即便如此也只能得到20f ps的帧速——面对此种情形,稍有理智的计算机人员都知道光线追踪技术的商用化不过是空谈。
Daniel Pohl的研究成果充分表明:将光线追踪技术导入到PC游戏中在技术上是可行的,所带来的效果也同样震撼人心(图3)。同时它也留下了一个问题:光线追踪必须以超出现时的强大硬件为基础。《QuakeⅢ:RayTracing》项目完成之后,Daniel Pohl继续进行《Quake 4》的改造工作,同样在OpenRT的帮助下,《Quake 4:Ray Tracing》顺利地出台,改造后的《Quake 4: Ray Tracing》展现出超一流的视觉效果,远远超过它本来的表现,但同样《Quake 4: Ray Tracing》的资源耗用非常夸张,只有数十枚处理器的计算集群才能勉强拖动它。
2007年4月,Daniel Pohl完成了他的课程,从学校毕业,他非常希望能够进入图形业界,继续从事这项自己所感兴趣的研究。此时,筹划进入高端图形领域的Intel求贤若渴,很顺利地将Daniel Pohl收归旗下,成为Larrabee开发团队中的一员。Larrabee也因为吸纳Daniel Pohl的加盟而令外界寄以厚望,外界普遍预测Lar rabee将成为第一款能在光线追踪领域有所建树的处理器—虽然后来的发展与当时人们的意料大相径庭。
OpenRT引擎与RPU:高度可行的光线追踪方案
在PC导入光线追踪技术的旅程中,Daniel Pohl并不是单枪匹马完成这个任务,真正承担关键工作的是德国萨尔兰大学(University of Saarland)的计算机图形小组(SaarCOR小组)—SaarCOR设计了光线追踪算法,并开发出一套包括完整函数库的OpenRT引擎,为游戏开发者带来API解决方案。不仅如此,SaarCOR甚至还设计出专门的光线追踪处理器,即RPU(Ray ProcessingUnit)的雏形,将光线追踪的实用化向前推进了一大步。
我们先来看SaarCOR制定的OpenRT引擎。它实际上是一组特定算法的光线追踪函数库,具体包括以下几个部分:一个高效的光线追踪处理引擎、类似OpenGL的语法定义以及OpenRT-API应用程序接口,其中光线追踪引擎负责模型的构建和运算,OpenRT-API则是一套软件接口,游戏开发者通过这套接口就可以实现相应的光线追踪效果支持。我们可以通过一个实例来说明OpenRT引擎的工作原理(图4)。第127页的9个讲解步骤就是OpenRT针对一个物体进行光线追踪的具体实例,从中我们可了解到光线追踪的实现原理。有必要指出的是,上述实例只是针对单独的物体,且以单束光线作为分析元素—在3D游戏世界中,一个运动物体总是由大量的像素构成,每一个像素都须对应一条监察光线,那么所需的监察光线数量就会非常多,这也是为何实时光线追踪计算对硬件要求苛刻的重要原因。而对此Daniel Pohl有过深切的体会,在《Quake 4: RayTracing》演示中,当时最强悍的4核心“Kentsfield ”酷睿2平台也只能在256×256分辨率下勉强“实时演算”;而在这个分辨率下要提供较高质量的画面,计算机每秒至少要计算10亿束光线—平均每帧画面,每个像素大约需要30束不同的光线,分别用来计算着色、光照以及其它各种特效。按照这个算式,在1024×768的入门级分辨率下,一共有786432个像素,乘以每像素30束光线以及每秒60帧,那么计算机系统总共就必须提供要每秒141.5亿束光线的计算能力—极度不幸的是,即便是目前最强的六核心、十二线程的Core i7处理器,每秒也仅能提供1千万束左右的光线,二者存在巨大的鸿沟。
不过,这个看似不可能的任务却有一个极简单的解决办法:利用专用的加速硬件来处理光线追踪,可以比通用化的CPU高效百倍。在2005年的SIGGRAPH(计算机图形学年度会议)上,SaarCOR展示了第一款基于OpenRT引擎的光线追踪加速硬件(图5)—RPU(Ray Processing Unit)。RPU的概念与之前的GPU、PPU(物理处理器)类似,采用专用设计,由于算法单一,硬件的效率就可以做到最优。Sa a rCOR的RPU方案可以支持高速光线跟踪算法跟递归函数调用,对于递归光线追踪算法同样行之有效。而为提高执行效率,RPU引入了多线程技术,计算时通常将4束光线打包处理,这样有利于硬件资源的高效利用。
R P U的实际性能令人激动,Sa arCOR所展示的芯片原型非常简单,虽然核心频率仅有66MHz,内存带宽也只有区区350MB/s,但它在光线追踪运算方面的性能足以媲美Pentium 42.6GHz。如果采用高端半导体芯片的设计和制作工艺,RPU芯片的工作频率可以提升数十倍,加上光线追踪计算本身处于可高度并行化的浮点处理,大量的RPU单元可直接集成在一起,这就意味着可以获得数千上万倍于Pentium4 2.6GHz的性能,将光线追踪导入PC的构想完全可以成为现实。
商用化序幕:NVIDIA祭出Optix引擎与“Fermi”
对真实视觉的完美仿真是光线追踪的致命诱惑,对硬件不切实际的高要求又让它成为毒药。好莱坞工业之所以用计算集群来渲染,是因为他们财大气粗,只要效果不顾成本和时间。而要进行PC游戏的实时渲染就意味着他们必须另辟蹊径—RPU概念的出现让这一切成为可能。如果我们回溯图形业以往的发展历程,便会发现GPU、PPU概念的出现,其实都是重复这条道路,即以专用的硬件代替CPU,从而获得理想的效能。
在开发出R P U 原型之后,Sa arCOR的研发人员却没有继续进行,他们接触了I BM德国的技术人员,获得了一部拥有一枚CELL处理器的工程样机。CELL处理器具有高频率以及高并行浮点计算能力的特点,是光线追踪处理的另一个选择。
SaarCOR的尝试获得良好回报,在IBM技术人员的协助下,SaarCOR在短短的两周内就在这部样机上实现了全屏的实时光线追踪渲染效果—这个实验充分说明,利用高并行的计算器件来执行OpenRT光线追踪是可行的。
作为大学研究机构,SaarCOR的成果不可能直接进入商用化,但我们却会很快在市场上看到相应的产品—这是因为当SaarCOR开始研究项目时,NVIDIA就开始秘密的资金赞助,之前的FPGA RPU原型芯片就是在NVIDIA的资助下完成的,我们有足够的理由推断,NVIDIA是这个项目的主要推手,也将成为关键的受益者。
Fe rmi的发布让这一切变得明朗化。NVIDIA不惜冒着难产的风险重构了全新一代GPU,这个怪兽级的处理器具有高度并行化的设计,同时每一个基本单元CU DACore又专为浮点计算而生,而每八个CUDA Core又共享着64KB的可配置内存—这套架构专为所有高并行度的浮点运算而生,同时又具有灵活的可编程性。在Fermi的所有能力中,NVIDIA将光线追踪应用提高到战略性的高度(图6)。
其实早在2009年4月,于美国新奥尔良举行的计算机图形行业展会SIGGRAPH 2009上,NVIDIA就发布了一款名为OptiX的光线追踪引擎。在功能上,Optix引擎与前面介绍的OpenRT类似,都是一组光线追踪的函数库,NVIDIA在介绍中说OptiX引擎基于CUDA架构,开发者可以使用C语言编程,创造出基于GPU运算的光线追踪应用。我们有足够的理由相信,Opt iX所用的光线追踪模型,极有可能与SaarCOR的OpenRT引擎相同,或者说OptiX只是OpenRT的NVIDIA商用化版本。
这样的消息对于游戏工业来说绝对是天大好事。Op t i x引擎的出现,意味着PC游戏导入光线追踪的时机正式成熟,NVIDIA提供了完善的API和硬件,为新游戏的到来做好所有的准备!而对于这样的静悄悄行动,NVIDIA的竞争对手都将感受到巨大压力。
另一个战场:物理计算尘埃落定光线追踪技术毋庸置疑将成为未来图形工业的重点,假如我们回到两年前,那么图形业的热点就是物理计算。事实上,这两者具有惊人的相似性。
我们知道,光线追踪在塑造场景真实度方面具有不可替代的优势,不过它所针对的是物体表面的光影效果,而不是物体本身的行为—控制物体行为的数学计算,也就是我们所说的物理计算。当场景中运动物体数量较单一时,CPU就可以应付,但在爆炸、雪崩这样的场面中,存在大量不同的运动物体,CPU就难以承担这样的计算量,在2005年,一家名为AGEIA的企业(成立于2002年)发布了PPU物理处理器及相应的软件平台,带来一股“物理计算”的旋风,也将图形业带进了一个新战场。
最初,NVIDIA与ATI/AMD都采用GPU加速的方式,借助了Havok公司(成立于1998年,爱尔兰)推出的API,不过这套方案虽然也能创建出场面震撼的爆炸场面,但却无法实现游戏的交互性,比如在真实世界中,爆炸的弹片一旦击中人或动物,那么目标必然负伤倒下甚至死亡。传统的CPU运算方案可以模拟这一点,AGEIA的PPU方案同样也能做到,但当时的GPU作为单纯的浮点处理硬件,并不具备这样的交互能力,因此只能展现出视觉效果,而无法构建真正逼真的游戏环境。不过相比AEGIA的PPU方案,Havo k方案更为廉价,GPU平台本身也更为成熟,NVIDIA和AMD在当时都大肆发展多显卡平台,将其中一块显卡作为物理计算之用,而游戏厂商的支持同样非常热烈。
2007年9月,Intel突然宣布收购Havok,将GPU物理加速技术掌握在手中。此时,Havok引擎已经在150多种游戏中获得应用,包括《生化奇兵》、《枪神》、《Ha lo 2》、《Ha l fLi f e 2》、《上古卷轴4之战栗孤岛(The Elder Scrolls IV:Oblivion)》、《失落的星球:极点危机》、《摩托风暴》、《哈里·波特与凤凰社》等游戏。
假如没有Intel的收购,我们可以预见Havok的发展将顺风顺水。不幸的是,当Intel拥有Havok之后,Havok也在事实上被宣判了死刑—作为直接的竞争对手,AMD不太可能对这项技术饱含热情,NVIDIA与Intel素来心存芥蒂,更何况那时Intel正在夸夸其谈自己的Larrabee。2008年2月,财大气粗的NVIDIA对Intel还以颜色,高调将AGEIA收入囊中—AMD也参与了这场竞购,但收购ATI已让它元气大伤无奈放弃。此时,AGEIA的PhysX物理引擎已经被超过140款游戏采用,PS3、Xbox 360和Wii三大游戏主机都具有支持该引擎的游戏出现,PhysX方案在技术上的优越性获得业界公认。这项收购让NVIDIA一举获得AGEIA PhysX引擎和PPU处理器技术,这两者都迅速地融合入NVIDIA的CUDA开发平台和GeForce处理器中。尤其是GeForce整合PPU功能之后,PhysX方案高成本的缺点就不复存在,加上它在技术上的原本优势和Havok的衰落,PhysX在短短时间内就成为物理计算领域的主导。
到今天为止,物理效果已经成为动作游戏的标准配备,NVIDIA PhysX引擎也成为事实性的标准,技术争端宣告结束,物理效果也被真正纳入3D游戏体系。
在AGEIA首度带来物理计算的概念时,我们都惊讶于物理计算所需要的巨大运算量,现在如果将它与光线追踪比较,便会发现小巫见大巫。实际上,物理计算与光线追踪在数学模型方面非常类似,物理计算针对的是实体的运动、碰撞、反射,同时需要考虑到介质阻力、万有引力的影响,而光线追踪则反映光线的入射、折射和反射,数学上较为单一;但是物理计算一般只需要涉及几千到几万个物体,而光线追踪需要针对数以亿计的光线一一加以计算。
游戏工业现在很享受物理计算的成熟应用,《蝙蝠侠:阿甘疯人院》、《黑暗虚空》等跨PS3、Xbox 360和PC平台的新作都将P h y sX物理效果支持作为宣传重点。如在《蝙蝠侠:阿甘疯人院》中,玩家可通过PhysX技术在大量烟雾弥漫的阴暗走廊中摸索,烟雾会随着蝙蝠侠的动作而改变(体现了交互性),蜘蛛网也会因蝙蝠侠走过而被扯断,而且蝙蝠侠与小丑党羽的逼真打斗场景,不论是对小丑党成员挥出的一拳一脚,以及随之而起漫天飞舞的纸张、饮料罐和垃圾,都充满了震撼力。
而在《黑暗虚空》游戏中,玩家的喷气背包喷出的火焰会形成包含超过10万个离子的涡流,多种武器的攻击效果也都加入了物理特效,比如一款名为Disintegrator(粉碎机) 的武器能将敌人轰成3万片碎片— 这些物理效果非常消耗资源,当Phy sX特效设为最高时,即便是Co r e i7-920@3.5GHz+ GeFo r c e GTX260-216显卡这样的高端平台,也只能达到20fps的低帧速,显然,NVIDIA要求专用物理卡的说法并不夸张。
倘若再加上光线追踪技术,即便是Fermi这样的怪兽,恐怕也无力一手对付物理计算,一手对付光线追踪,因此双芯片或双卡平台显得非常必要。
前瞻:正确的道路你可以在本文中明显地看到偏向NVIDIA,但我们只是纯粹从技术的角度探讨。复杂、庞大、历经波折的Fe rmi令外界认为NVIDIA这次发了神经,而假如你真正深入地了解图形技术,就会发现真正找对路的是NVIDIA和Intel—Intel的Lar rabee曾雄心万丈地想要创建这样的未来,但它失败了。Fermi经过屡次难产,但这一切非常值得,我们可以理解黄仁勋本人对于Fermi的激动之情,因为任何一个技术狂热者都会对这种能影响未来的产品寄以厚望。
如果你想要寻求图形工业未来的答案,那么不妨回过头来观察一个简单的事实:今天图形技术里有无数多种渲染手段,各种各样的新技术,每一个版本的DirectX或OpenGL都会带来这样那样的新功能—换个角度思考,这些新技术新功能其实都只是投机取巧,尽一切努力来降低硬件开销。好莱坞影业则使用最笨的方法,他们基本没有什么花里胡哨的渲染手段,只是大量动用光线追踪技术搞出了真实场景,虽然极度消耗硬件的方法看来有些笨。
假如未来的PC系统要渲染出接近电影的画面,那么光线追踪是唯一的途径;假如游戏开发者想要创建和真实无异的爆炸、雪崩、万箭齐发的宏伟场面,那么物理计算是唯一的途径。与这两者相比,其它所有的视觉特效都显得苍白无力。
NVIDIA Fermi架构富有远见,它囊括了光线追踪、物理计算以及传统的图形渲染,顺便能高效地应对各种高并行计算,这套架构令NVIDIA今后的道路变得非常宽敞。然而,技术上的远见并不意味着产品就一定会成功,务实的玩家们总得关注眼前:如果Fermi过于昂贵,或者它是电老虎,并且散热不佳,这些外在的问题足以让NVIDIA陷入泥潭。至少在目前,AMD在DirectX 11道路上稳居优势,它与微软的关系也更为良好,而NVIDIA现在看来决意打造自己的CUDA平台—或者说,你可以将它看作另一种DirectX。
……
或许“真实”这个字眼颇为老调,那么我们来看看前不久热映的电影《阿凡达》—抛开老套的剧情不谈,影片中的画面全出自于计算机的渲染,但所有观众都无法意识到这一点,影片看上去就是摄影机对着真实场面在拍摄。要实时渲染出这样的效果,GPU或许还需要超过十年的发展,但这并不影响图形业界对真实效果的追求。如你所见,DirectX 11带来了如Tessellation这样的新功能,但这些都是无足轻重的小伎俩,对画质的影响较为有限。在未来的十年中,GPU真正可倚赖的视觉技术,只有光线追踪(Ray Tracing)与物理计算,前者可实现流光溢彩的表面效果,后者则实现物体动作的真实展现。
真实再现:光线追踪完美模拟人眼视觉首先我们需要了解,光线追踪究竟可以用来做什么。要回答这个问题,我们同样需要从好莱坞电影谈起—光线追踪是一项可以大幅增加场面真实感的渲染技术。准确地说,它可以利用计算机构建出以假乱真的视觉画面,当好莱坞开始利用计算机来制作特效画面时,光线追踪技术就被引入。从12年前的《泰坦尼克号》到《魔戒》三部曲,再到现在的《阿凡达》,光线追踪技术都被大范围地使用,可以这么说,如果离开光线追踪技术,那么电影工业将受到重创(图1)。
光线追踪技术之所以具备这样的能力,在于它本身就是对真实光线传递的仿真。不妨做个简单的类比:我们假设屏幕内的世界是真实的,显示器或显示屏只是一个完全透明的框框,那么屏幕内世界里应该有哪些光线会透过屏幕投入人的眼睛呢?光线追踪技术正是为了解决这个问题而存在。在数学层面上,这项技术就是追踪与物体表面发生交互作用的光线,得到光线经过路径的模型—光线的数量越多,得到的视觉信号就越多,意味着构建的场景越逼真。
但是,要对光线系统进行数学化的仿真,是一个非常艰难的任务。因为在光线跟踪中,每一个光线的路径都是由多重直线组成,几乎总是包含从原点到场景的反射、折射和阴影效应。而在动作画面中,每一束光线的位置和方向总是在不断变化,这样每一条光线都必须用一个数学方程式来表示,并定义光线的空间路径(Y轴)-时间(X轴)的函数。此外,我们还需根据光线的照射目标进行颜色分配—到达不同的表面,光线将产生不同的颜色,这也就是Z轴参数。在这套系统中,屏幕的每一个视觉像素,都对应着一条可追踪的光线,也就对应着一套函数组,通过这个函数组,屏幕的任何一个像素,在某个时刻都可以产生正确的亮度和颜色,也就是产生视觉效果。
如果我们能稍稍深入理解,不难获知光线追踪是最高级的3D渲染艺术。我们可以简单地认为:这项技术直接操控屏幕的背光,让每个像素都对应真实场景的光反射—你可以反过来理解:就是把显示屏幕当作一个空白的方框,方框内的场景都是绝对真实,而非虚构渲染的。如果从人眼的角度来看,光线追踪与真实视觉的原理相同,区别仅在于真实视觉系统中,光线的数量可以分解为无穷大,而计算机的光线追踪系统中,光线的数量是有限的—不过当光线的数量达到一定临界点时,人眼就无法再加以区分,而认为所见到的都是“真实的拍摄画面”,这也是好莱坞电影工业广泛运用这项技术的根本原因。
光线追踪技术的数学化最早可回溯到20世纪60年代,在一个叫数学应用组的组织中,一些科学家对光线追踪的艺术化感兴趣,他们为此建立了一个动画摄影工作室,并利用光线追踪原理来制作3D肖像和动画—当然在那个时代,这项技术更多停留在数学界。直到90年代好莱坞开始引入计算机渲染来制作特效,光线追踪技术才得到广泛的应用,以至于到现在任何一部提供特效的电影都无法离开它。而我们可以预见,未来也不会有哪一项技术会取代它的地位,除非上帝改变了人眼产生视觉的基本原理。
光线追踪导入PC:Daniel Pohl的宝贵实践
当3dfx制造出Voodoo卡的时候,他们并没有将目光放在光线追踪技术上。十年之后,NVIDIA虽然带来了G80架构,但却同样没能看到这项技术—3D图形业界似乎对这么一项关键技术熟视无睹。
此种情况看似有悖常理,但绝不是毫无理由的。光线追踪在电影制作中被广泛运用,将其引入到PC游戏界根本不具技术可行性。原因在于,光线追踪所需的运算量极其庞大:电影工业每制作出一帧光线追踪画面,都需要庞大的计算机集群经过数小时的计算,而PC游戏要求实时渲染,这两者的鸿沟宛如天堂与地狱。任何一位有理智的工程师都知道,桌面计算机的CPU根本不可能提供如此巨量的运算力。既然如此,图形厂商当然就不会有什么浪漫主义的想法了。
大约在2 0 04 年,德国埃尔兰根- 纽伦堡(Erlangern)大学一位名叫Daniel Pohl的学生开始他的研究课题(图2),选择了之前无人涉足的光线追踪游戏化的工作,即尝试将这项技术引入到PC游戏中,从而获得更出色的视觉效果。Daniel Pohl的想法很单纯,只是想把光线追踪技术的雏形引入到某款游戏中,证明这在技术上也是可行的,从而漂亮地完成自己的毕业课题,至于商用化问题则没有考虑得那么长远。不过DanielPohl所没有想到的是,他无意中成为这个领域中最知名的开拓者。Daniel Pohl首先要面对的问题就是找到一套光线追踪数学模型—这个模型必须要比好莱坞影业所开发的引擎简单,这样可以不需要那么大的计算量,追踪的光线数量也可以少一些。幸运的是,Daniel Pohl不必从零开始编制算法,当时德国萨尔兰大学的计算机图形小组正在开发OpenRT光线追踪引擎,Daniel Pohl寻求到他们的帮助,并参与其中并成为一位关键开发者。DanielPohl希望将OpenRT移植到某款电脑游戏中,使得该游戏能够支持光线追踪效果。由于卡马克的开源政策,当时非常流行的游戏《QuakeⅢ》(雷神之锤3)是个非常好的改造对象—这个工作出奇的简单,例如每个像素的动态和实时阴影中仅需要10行左右的代码指令就可以引入光线追踪模型。在较短的时间内,Daniel Pohl就在《QuakeⅢ》的渲染核心中完整地加入OpenRT引擎,《QuakeⅢ:Ray Tracing》就此诞生。
接下来,Daniel Pohl和其他研究成员一起见证了历史时刻:支持光线追踪的《QuakeⅢ:Ray Tracing》在PC平台上获得成功运行,尽管这个光线追踪模型相对简单,光线数量也不是太多,但游戏的画面质量获得非常显著的提升,光线追踪的优点一览无遗。可是另一方面,《QuakeⅢ:RayTracing》对资源的消耗也极为可怕,这个演示平台居然是动用搭载了20个Athlon XP 1800+处理器的计算机集群进行运作,CPU频率总计达到36GHz。当时游戏的分辨率只有区区512×512,开启最基础的4x FSAA反锯齿特效,即便如此也只能得到20f ps的帧速——面对此种情形,稍有理智的计算机人员都知道光线追踪技术的商用化不过是空谈。
Daniel Pohl的研究成果充分表明:将光线追踪技术导入到PC游戏中在技术上是可行的,所带来的效果也同样震撼人心(图3)。同时它也留下了一个问题:光线追踪必须以超出现时的强大硬件为基础。《QuakeⅢ:RayTracing》项目完成之后,Daniel Pohl继续进行《Quake 4》的改造工作,同样在OpenRT的帮助下,《Quake 4:Ray Tracing》顺利地出台,改造后的《Quake 4: Ray Tracing》展现出超一流的视觉效果,远远超过它本来的表现,但同样《Quake 4: Ray Tracing》的资源耗用非常夸张,只有数十枚处理器的计算集群才能勉强拖动它。
2007年4月,Daniel Pohl完成了他的课程,从学校毕业,他非常希望能够进入图形业界,继续从事这项自己所感兴趣的研究。此时,筹划进入高端图形领域的Intel求贤若渴,很顺利地将Daniel Pohl收归旗下,成为Larrabee开发团队中的一员。Larrabee也因为吸纳Daniel Pohl的加盟而令外界寄以厚望,外界普遍预测Lar rabee将成为第一款能在光线追踪领域有所建树的处理器—虽然后来的发展与当时人们的意料大相径庭。
OpenRT引擎与RPU:高度可行的光线追踪方案
在PC导入光线追踪技术的旅程中,Daniel Pohl并不是单枪匹马完成这个任务,真正承担关键工作的是德国萨尔兰大学(University of Saarland)的计算机图形小组(SaarCOR小组)—SaarCOR设计了光线追踪算法,并开发出一套包括完整函数库的OpenRT引擎,为游戏开发者带来API解决方案。不仅如此,SaarCOR甚至还设计出专门的光线追踪处理器,即RPU(Ray ProcessingUnit)的雏形,将光线追踪的实用化向前推进了一大步。
我们先来看SaarCOR制定的OpenRT引擎。它实际上是一组特定算法的光线追踪函数库,具体包括以下几个部分:一个高效的光线追踪处理引擎、类似OpenGL的语法定义以及OpenRT-API应用程序接口,其中光线追踪引擎负责模型的构建和运算,OpenRT-API则是一套软件接口,游戏开发者通过这套接口就可以实现相应的光线追踪效果支持。我们可以通过一个实例来说明OpenRT引擎的工作原理(图4)。第127页的9个讲解步骤就是OpenRT针对一个物体进行光线追踪的具体实例,从中我们可了解到光线追踪的实现原理。有必要指出的是,上述实例只是针对单独的物体,且以单束光线作为分析元素—在3D游戏世界中,一个运动物体总是由大量的像素构成,每一个像素都须对应一条监察光线,那么所需的监察光线数量就会非常多,这也是为何实时光线追踪计算对硬件要求苛刻的重要原因。而对此Daniel Pohl有过深切的体会,在《Quake 4: RayTracing》演示中,当时最强悍的4核心“Kentsfield ”酷睿2平台也只能在256×256分辨率下勉强“实时演算”;而在这个分辨率下要提供较高质量的画面,计算机每秒至少要计算10亿束光线—平均每帧画面,每个像素大约需要30束不同的光线,分别用来计算着色、光照以及其它各种特效。按照这个算式,在1024×768的入门级分辨率下,一共有786432个像素,乘以每像素30束光线以及每秒60帧,那么计算机系统总共就必须提供要每秒141.5亿束光线的计算能力—极度不幸的是,即便是目前最强的六核心、十二线程的Core i7处理器,每秒也仅能提供1千万束左右的光线,二者存在巨大的鸿沟。
不过,这个看似不可能的任务却有一个极简单的解决办法:利用专用的加速硬件来处理光线追踪,可以比通用化的CPU高效百倍。在2005年的SIGGRAPH(计算机图形学年度会议)上,SaarCOR展示了第一款基于OpenRT引擎的光线追踪加速硬件(图5)—RPU(Ray Processing Unit)。RPU的概念与之前的GPU、PPU(物理处理器)类似,采用专用设计,由于算法单一,硬件的效率就可以做到最优。Sa a rCOR的RPU方案可以支持高速光线跟踪算法跟递归函数调用,对于递归光线追踪算法同样行之有效。而为提高执行效率,RPU引入了多线程技术,计算时通常将4束光线打包处理,这样有利于硬件资源的高效利用。
R P U的实际性能令人激动,Sa arCOR所展示的芯片原型非常简单,虽然核心频率仅有66MHz,内存带宽也只有区区350MB/s,但它在光线追踪运算方面的性能足以媲美Pentium 42.6GHz。如果采用高端半导体芯片的设计和制作工艺,RPU芯片的工作频率可以提升数十倍,加上光线追踪计算本身处于可高度并行化的浮点处理,大量的RPU单元可直接集成在一起,这就意味着可以获得数千上万倍于Pentium4 2.6GHz的性能,将光线追踪导入PC的构想完全可以成为现实。
商用化序幕:NVIDIA祭出Optix引擎与“Fermi”
对真实视觉的完美仿真是光线追踪的致命诱惑,对硬件不切实际的高要求又让它成为毒药。好莱坞工业之所以用计算集群来渲染,是因为他们财大气粗,只要效果不顾成本和时间。而要进行PC游戏的实时渲染就意味着他们必须另辟蹊径—RPU概念的出现让这一切成为可能。如果我们回溯图形业以往的发展历程,便会发现GPU、PPU概念的出现,其实都是重复这条道路,即以专用的硬件代替CPU,从而获得理想的效能。
在开发出R P U 原型之后,Sa arCOR的研发人员却没有继续进行,他们接触了I BM德国的技术人员,获得了一部拥有一枚CELL处理器的工程样机。CELL处理器具有高频率以及高并行浮点计算能力的特点,是光线追踪处理的另一个选择。
SaarCOR的尝试获得良好回报,在IBM技术人员的协助下,SaarCOR在短短的两周内就在这部样机上实现了全屏的实时光线追踪渲染效果—这个实验充分说明,利用高并行的计算器件来执行OpenRT光线追踪是可行的。
作为大学研究机构,SaarCOR的成果不可能直接进入商用化,但我们却会很快在市场上看到相应的产品—这是因为当SaarCOR开始研究项目时,NVIDIA就开始秘密的资金赞助,之前的FPGA RPU原型芯片就是在NVIDIA的资助下完成的,我们有足够的理由推断,NVIDIA是这个项目的主要推手,也将成为关键的受益者。
Fe rmi的发布让这一切变得明朗化。NVIDIA不惜冒着难产的风险重构了全新一代GPU,这个怪兽级的处理器具有高度并行化的设计,同时每一个基本单元CU DACore又专为浮点计算而生,而每八个CUDA Core又共享着64KB的可配置内存—这套架构专为所有高并行度的浮点运算而生,同时又具有灵活的可编程性。在Fermi的所有能力中,NVIDIA将光线追踪应用提高到战略性的高度(图6)。
其实早在2009年4月,于美国新奥尔良举行的计算机图形行业展会SIGGRAPH 2009上,NVIDIA就发布了一款名为OptiX的光线追踪引擎。在功能上,Optix引擎与前面介绍的OpenRT类似,都是一组光线追踪的函数库,NVIDIA在介绍中说OptiX引擎基于CUDA架构,开发者可以使用C语言编程,创造出基于GPU运算的光线追踪应用。我们有足够的理由相信,Opt iX所用的光线追踪模型,极有可能与SaarCOR的OpenRT引擎相同,或者说OptiX只是OpenRT的NVIDIA商用化版本。
这样的消息对于游戏工业来说绝对是天大好事。Op t i x引擎的出现,意味着PC游戏导入光线追踪的时机正式成熟,NVIDIA提供了完善的API和硬件,为新游戏的到来做好所有的准备!而对于这样的静悄悄行动,NVIDIA的竞争对手都将感受到巨大压力。
另一个战场:物理计算尘埃落定光线追踪技术毋庸置疑将成为未来图形工业的重点,假如我们回到两年前,那么图形业的热点就是物理计算。事实上,这两者具有惊人的相似性。
我们知道,光线追踪在塑造场景真实度方面具有不可替代的优势,不过它所针对的是物体表面的光影效果,而不是物体本身的行为—控制物体行为的数学计算,也就是我们所说的物理计算。当场景中运动物体数量较单一时,CPU就可以应付,但在爆炸、雪崩这样的场面中,存在大量不同的运动物体,CPU就难以承担这样的计算量,在2005年,一家名为AGEIA的企业(成立于2002年)发布了PPU物理处理器及相应的软件平台,带来一股“物理计算”的旋风,也将图形业带进了一个新战场。
最初,NVIDIA与ATI/AMD都采用GPU加速的方式,借助了Havok公司(成立于1998年,爱尔兰)推出的API,不过这套方案虽然也能创建出场面震撼的爆炸场面,但却无法实现游戏的交互性,比如在真实世界中,爆炸的弹片一旦击中人或动物,那么目标必然负伤倒下甚至死亡。传统的CPU运算方案可以模拟这一点,AGEIA的PPU方案同样也能做到,但当时的GPU作为单纯的浮点处理硬件,并不具备这样的交互能力,因此只能展现出视觉效果,而无法构建真正逼真的游戏环境。不过相比AEGIA的PPU方案,Havo k方案更为廉价,GPU平台本身也更为成熟,NVIDIA和AMD在当时都大肆发展多显卡平台,将其中一块显卡作为物理计算之用,而游戏厂商的支持同样非常热烈。
2007年9月,Intel突然宣布收购Havok,将GPU物理加速技术掌握在手中。此时,Havok引擎已经在150多种游戏中获得应用,包括《生化奇兵》、《枪神》、《Ha lo 2》、《Ha l fLi f e 2》、《上古卷轴4之战栗孤岛(The Elder Scrolls IV:Oblivion)》、《失落的星球:极点危机》、《摩托风暴》、《哈里·波特与凤凰社》等游戏。
假如没有Intel的收购,我们可以预见Havok的发展将顺风顺水。不幸的是,当Intel拥有Havok之后,Havok也在事实上被宣判了死刑—作为直接的竞争对手,AMD不太可能对这项技术饱含热情,NVIDIA与Intel素来心存芥蒂,更何况那时Intel正在夸夸其谈自己的Larrabee。2008年2月,财大气粗的NVIDIA对Intel还以颜色,高调将AGEIA收入囊中—AMD也参与了这场竞购,但收购ATI已让它元气大伤无奈放弃。此时,AGEIA的PhysX物理引擎已经被超过140款游戏采用,PS3、Xbox 360和Wii三大游戏主机都具有支持该引擎的游戏出现,PhysX方案在技术上的优越性获得业界公认。这项收购让NVIDIA一举获得AGEIA PhysX引擎和PPU处理器技术,这两者都迅速地融合入NVIDIA的CUDA开发平台和GeForce处理器中。尤其是GeForce整合PPU功能之后,PhysX方案高成本的缺点就不复存在,加上它在技术上的原本优势和Havok的衰落,PhysX在短短时间内就成为物理计算领域的主导。
到今天为止,物理效果已经成为动作游戏的标准配备,NVIDIA PhysX引擎也成为事实性的标准,技术争端宣告结束,物理效果也被真正纳入3D游戏体系。
在AGEIA首度带来物理计算的概念时,我们都惊讶于物理计算所需要的巨大运算量,现在如果将它与光线追踪比较,便会发现小巫见大巫。实际上,物理计算与光线追踪在数学模型方面非常类似,物理计算针对的是实体的运动、碰撞、反射,同时需要考虑到介质阻力、万有引力的影响,而光线追踪则反映光线的入射、折射和反射,数学上较为单一;但是物理计算一般只需要涉及几千到几万个物体,而光线追踪需要针对数以亿计的光线一一加以计算。
游戏工业现在很享受物理计算的成熟应用,《蝙蝠侠:阿甘疯人院》、《黑暗虚空》等跨PS3、Xbox 360和PC平台的新作都将P h y sX物理效果支持作为宣传重点。如在《蝙蝠侠:阿甘疯人院》中,玩家可通过PhysX技术在大量烟雾弥漫的阴暗走廊中摸索,烟雾会随着蝙蝠侠的动作而改变(体现了交互性),蜘蛛网也会因蝙蝠侠走过而被扯断,而且蝙蝠侠与小丑党羽的逼真打斗场景,不论是对小丑党成员挥出的一拳一脚,以及随之而起漫天飞舞的纸张、饮料罐和垃圾,都充满了震撼力。
而在《黑暗虚空》游戏中,玩家的喷气背包喷出的火焰会形成包含超过10万个离子的涡流,多种武器的攻击效果也都加入了物理特效,比如一款名为Disintegrator(粉碎机) 的武器能将敌人轰成3万片碎片— 这些物理效果非常消耗资源,当Phy sX特效设为最高时,即便是Co r e i7-920@3.5GHz+ GeFo r c e GTX260-216显卡这样的高端平台,也只能达到20fps的低帧速,显然,NVIDIA要求专用物理卡的说法并不夸张。
倘若再加上光线追踪技术,即便是Fermi这样的怪兽,恐怕也无力一手对付物理计算,一手对付光线追踪,因此双芯片或双卡平台显得非常必要。
前瞻:正确的道路你可以在本文中明显地看到偏向NVIDIA,但我们只是纯粹从技术的角度探讨。复杂、庞大、历经波折的Fe rmi令外界认为NVIDIA这次发了神经,而假如你真正深入地了解图形技术,就会发现真正找对路的是NVIDIA和Intel—Intel的Lar rabee曾雄心万丈地想要创建这样的未来,但它失败了。Fermi经过屡次难产,但这一切非常值得,我们可以理解黄仁勋本人对于Fermi的激动之情,因为任何一个技术狂热者都会对这种能影响未来的产品寄以厚望。
如果你想要寻求图形工业未来的答案,那么不妨回过头来观察一个简单的事实:今天图形技术里有无数多种渲染手段,各种各样的新技术,每一个版本的DirectX或OpenGL都会带来这样那样的新功能—换个角度思考,这些新技术新功能其实都只是投机取巧,尽一切努力来降低硬件开销。好莱坞影业则使用最笨的方法,他们基本没有什么花里胡哨的渲染手段,只是大量动用光线追踪技术搞出了真实场景,虽然极度消耗硬件的方法看来有些笨。
假如未来的PC系统要渲染出接近电影的画面,那么光线追踪是唯一的途径;假如游戏开发者想要创建和真实无异的爆炸、雪崩、万箭齐发的宏伟场面,那么物理计算是唯一的途径。与这两者相比,其它所有的视觉特效都显得苍白无力。
NVIDIA Fermi架构富有远见,它囊括了光线追踪、物理计算以及传统的图形渲染,顺便能高效地应对各种高并行计算,这套架构令NVIDIA今后的道路变得非常宽敞。然而,技术上的远见并不意味着产品就一定会成功,务实的玩家们总得关注眼前:如果Fermi过于昂贵,或者它是电老虎,并且散热不佳,这些外在的问题足以让NVIDIA陷入泥潭。至少在目前,AMD在DirectX 11道路上稳居优势,它与微软的关系也更为良好,而NVIDIA现在看来决意打造自己的CUDA平台—或者说,你可以将它看作另一种DirectX。
