» 您尚未登录:请 登录 | 注册 | 标签 | 帮助 | 小黑屋 |


发新话题
打印

[业评] NEXT GENERATION游戏未来:光线追踪距离现实还有多远?



近期,一则“Xbox One或将在未来引入实时光线追踪技术”的消息流传于网络,对于普通玩家来说,次时代主机的意义在于更好的画面。而在游戏开发者看来,次时代主机的最大意义就是释放他们身上的枷锁,让他们能够在更高的硬件机能上自由地进行创作。实际上,这里的“光线追踪”最为一种渲染技术,早已在电影CG工业中被大量运用,它对光线反射、漫射的逼真还原使得图像在光照品质上几可乱真。

但目前为止,由于其算法所需的海量运算力,实时光线追踪依然是高不可攀的领域,不过为了让视频游戏与娱乐迈入下一个纪元,包括英特尔、英伟达和AMD等在内的多家行业公司也都在其中投入巨大的努力。那么究竟何谓“光线追踪(Ray Tracing)”技术?它又与目前已经被广泛应用的“光栅化(Rasterization)”渲染技术之间有着怎样的区别?

以假乱真:模拟真实的光线路径

既然要探讨“光线追踪”的问题,那么我们首先应该了解一下这项技术到底是什么。“光线追踪”又称为光迹追踪或光线追迹,是来自于几何光学的一项通用技术,它通过追踪与光学表面发生交互作用的光线从而得到光线经过路径的模型。其实这很好理解,这项技术就是通过特殊的算法在虚拟世界中模拟出真实世界里的光影效果,以呈现更加贴近真实的画面。



基础光学理论曾告诉我们,自然光在投射到物体表面时会出现三种情况,分别是光线吸收、光线反射和光线折射。根据物体表面材质的不同,光线在投射到物体表面后会产生不同情况的被吸收现象,光谱也将随之改变。最后经由多次的反射和折射后,光线就会进入人眼并被我们所感知。“光线追踪”其实就是计算出当光线发出后经过一系列衰减并最终进入人眼的过程,换句话说利用这种技术所计算出的结果则是高度贴近于真实世界实际情况的。

事实上,光线追踪技术的应用领域在目前来看已经相当广泛,不过这些领域大多与我们日常生活的联系并不紧密,不过有一个我们最为熟知和喜爱的行业早在上世纪末就曾经广泛应用该项技术,没错,它就是被人们称之为“第七艺术”的电影工业。例如领衔整个业界的皮克斯动画工作室就在其2006年上映的动画长片《赛车总动员》中广泛地运用该技术来表现片中的车身上反光和街道倒影。在3DS Max、Maya还很初级的年代,皮克斯就开发出自己的3D制作渲染器——RenderMan。凭借在当时强大快速的REYES渲染算法和对电影工业的量身制作,Renderman刚问世就引起了业界轰动。



例如在去年公映的第14部动画长片《怪兽大学》中,皮克斯就想要对照明技术做出一定的改变,但通常像这样的大制作动画,一个镜头可能包含上百种光线,这些光线的设置都必须具有艺术性才能体现真实感,所以技术人员的工作就好像绘画一样需要精雕细琢。设置照明的工作不仅量大而且复杂,这种情况使得皮克斯的工作者们思考能不能用一种新技术来自动反射出现实化的光线,于是基于光线追踪技术的全局照明(Global Illumination)便应运而生。这项技术具体地说,就像在片场的天花板上放置灯泡,让每个场景的光线和阴影都呈现得像真实世界一般,运用海量的云计算能力,缩减原本设计光线的复杂度,让每一秒中不断变化的光线随着场景的更换与角色的走位而改变。

硬件难题:光线追踪游戏化的首次尝试

既然光线追踪能够为我们带来更具真实感的光影效果,并且已被电影行业广泛应用,那为什么游戏界迟迟没有引入这项技术呢? 原因很简单,那就是光线追踪需要非常庞大的运算量,而目前的主流硬件水平还远远无法满足它的运算需求。电影之所以能用上光线追踪,是因为它可以利用离线渲染(Offline Rendering)的方式来进行制作。

目前的画面渲染可以分为两种,一是3D游戏里的实时渲染(Real-Time Rendering),二就是动画电影用到的离线渲染,前者因为需要保证速度而不得不在画质上做出妥协,后者则可以为了追求真实感而不计成本,即使每一帧可能都需要庞大的工作站集群计算数小时才能生成。而这样的方式显然不能套用在游戏产业,游戏需要的是实时渲染并输出,全部计算工作都在用户本地的硬件上完成。试想,拥有成千上万CPU、GPU的计算集群尚需数小时才能完成1帧应用光线追踪画面的计算量,我们当前的硬件又怎么可能实现实时渲染呢?

2004年,一位名为Daniel Pohl的德国大学生就曾大胆地对光线追踪引入PC游戏进行尝试并取得成功。为达成这一目标,Daniel Pohl联系上正在开发OpenRT光线追踪引擎的德国萨尔兰大学计算机图形小组,提出将OpenRT引擎移植到电脑游戏中的想法,希望获得他们的帮助。得益于OpenRT引擎开源的政策,他顺利地展开移植工作,而移植的目标就是当时最火爆的游戏《雷神之锤3(Quake III)》。出人意料的是,移植工作竟然并不复杂,他在短时间内就完成了在渲染核心中完整加入OpenRT引擎的全部工作,让本作的画面质量得到显著提升。



本作在PC平台上的成功运行也在当时引发许多关注,使得Daniel Pohl一举成名,成为光线追踪游戏化领域最知名的开拓者,他本人也在2007年被英特尔收归门下。不过值得注意的是,他的成功也并不意味着光线追踪引入游戏已进入到实用化阶段。首先,他在《Quake III:Ray Tracing》中引入的只是光线追踪的雏形,模型相对简单、光线数量也并不多。即使是这样,本作对运算资源的消耗也足以用恐怖来形容。就算是拥有20颗Athlon XP 1800+的计算集群,也仅能在512×512分辨率、4xAA的设定下勉强使其运行在20帧左右,甚至都达不到流畅标准。可见光线追踪要想真正应用到游戏中并走向实用化,还有很长的路要走。

光栅化渲染为何难以达到光线追踪效果

要想回答这个问题,我们就需要先来简单了解一下现在主流的3D成像渲染算法——光栅化渲染技术。这项技术简单来看就是现代GPU处理3D图形并将其转化成屏幕上像素的全过程,它主要由三大步骤组成:几何处理、光栅化和像素处理。

通俗来说,任何3D物体的形成首先都需要“建模”,而几何处理就是建模的过程。CPU将目标物体的顶点坐标交给GPU后,GPU的几何单元就开始根据顶点坐标进行“画”点操作。点“画”好后,要想确定物体的外形并将它变成立体,就需要连线,而这就是Setup单元的工作。连线后的一个个多边形就组成了物体的外形,如果不需要进行顶点调整(如人物的动作就是由顶点调整而产生的),就将进入蒙皮和打光阶段。GPU会按照需求访问材质库,为整个模型附上带基本光照信息的底层纹理。



不过在计算机的3D图形处理流程中,给目标物体“上色”之前还需要进行一个操作,这就是光栅化。由于我们的显示器只能输出平面图像,所以图形处理过程中需要有一个步骤将几何处理生成的3D模型变为2D才能够最终输出。我们可以简单理解为,光栅化步骤就是要将几何处理步骤生成的3D模型“压扁”,并让它与屏幕像素点对应,以便进行“上色”操作。这一步骤由GPU中的光栅器完成,它会对目标物体进行必要的前后判断,然后进行Z轴压缩操作,将物体被遮挡部分的顶点删除掉。

在3D图像符合平面输出的要求之后,就开始“上色”。在这个过程中,GPU会先利用纹理贴图单元进行映射工作,也就是给多边形表面贴上相应的图片,然后会进入到像素处理阶段。像素处理是真正的“上色”阶段,这个阶段主要由GPU中的像素着色器负责。不过要想将颜色“上”正确其实并不容易,毕竟在自然界中,一个物体的颜色会受到很多因素的影响,一般GPU会将光照信息交由着色器进行一系列复杂的运算过程,最终生成与屏幕坐标对应的像素影响程度结果。



当这一切最终完成时,将由光栅化引擎负责最终像素的输出,每一帧渲染完成的画面会被送到显存的帧缓冲区中,然后经由D/A转换输出到显示设备上。而值得注意的是,光栅化渲染流程中的“光照信息”是人为定义的。也就是说,开发者只能根据经验判断哪里该有光,哪里才能有光,这就存在很大的局限性,无论开发者运用多么先进的技术去“制造”光影效果,都很难与自然界真实的物理光照特性相符。

满载负荷:光线追踪究竟需要多大的运算力

对于这个问题,英特尔和Daniel Pohl曾就此给出答案:“要想通过光线追踪算法渲染出达到现代游戏的画面质量,同时跑出可流畅运行的帧数,每妙需要计算约10亿束光线。这包括每帧每像素大概需要30束不同的光线用以分别计算着色、光照和其他特效。如此推算,入门级的1024×768分辨率一共有786432个像素,乘以每像素30束光线以及每秒60帧,我们就需要每秒能计算14.1亿束光线的硬件。而英特尔双路四核心处理器每秒也不过只能处理830万束光线。”就算将每秒帧率降为30帧,也需要170颗四核处理器的运算量,如果将分辨率提升为现在主流的1920×1080,那所需要的运算量将不可想象。由此来看,短期内要想通过现有的硬件架构来实现光线追踪游戏的实时渲染,基本不可能。



与此同时,随着GPU单元的不断进步,光栅化渲染也正逐渐缩短与光线追踪之间的差距。诸如前文提到的“全局照明”效果早在09年发布的DirectX 10.1引入批量立方体纹理技术之时,就可以通过辐射度算法实现类似的视觉效果。另外,任何技术都存在其缺陷,光线追踪也不例外。目前光线追踪技术的问题在于只能做即时演算,原本光栅化下许多可以大量节省不必要硬件开销的预渲染技术在光线追踪下完全不可用,这对于宝贵硬件资源来说将造成不可估量的损耗。



回望到刚刚进入第八世代的家用主机平台,隶属于索尼电脑娱乐的第一方游戏工作室Guerrilla Games在其独占于PS4平台的FPS科幻大作——《杀戮地带:暗影坠落(Killzone Shadow Fall)》中就运用基于材质的2.5D光线追踪系统。不过Guerrilla Games所采用的计算处理方式,需要对场景的光源环境进行大量的预处理,才能将最终素材放到游戏里。工作室技术总监Michael Valient坦言,为此他们将整个公司变成了一个巨大的渲染运算集群,每位员工下班的时候,就会被问要不要加入渲染组,如果不回应的话,他的电脑就默认参与到渲染运算中。那么到了晚上,整个公司就变成了一个渲染运算集群,并需要三名员工负责手动处理。

难道想要实现桌面级的光线追踪实时渲染就真的没有可能吗?也不是,前文中提到的萨尔兰大学SaarCOR小组不仅设计了光线追踪算法并开发出一套包含完整函数库的引擎,还设计出一款基于OpenRT引擎的光线追踪加速硬件——RPU(Ray Processing Unit)。它与用于物理加速计算的PPU非常类似,采用专用设计并且算法单一,由此做到了硬件效率的最优化。为了提高执行效率,RPU中加入了多线程技术,计算时一般将4束光线打包处理,以便让硬件被高效利用。RPU的核心频率仅为66MHz,内存带宽也只有350MB/s,但它的实际性能却令人惊讶,足以与2.6GHz的处理器比肩,这充分体现出RPU在处理光线追踪上的高效性。这些行业上的发展让我们看到其广泛应用的曙光,相信随着随着英特尔、AMD和英伟达等等这些通用处理器制造厂商的努力,终有一天光线追踪技术会走进游戏,让虚幻成为现实。


TOP

发新话题
     
官方公众号及微博