阅读新闻

--《英雄本色》(Max payne)图像技术分析

[日期:2006-05-09] 来源:大众软件  作者: [字体: ]
         
注:本文摘自《大众软件》

相信玩过《英雄本色》的朋友都会叹服于游戏画面的逼真细腻,可能有些朋友已经从其它媒体上了解到了游戏所使用的MAX-FX引擎。这是一部怎样的引擎?它在游戏中起着怎样的作用?它对今后3D游戏的发展会造成怎样的影响?这正是本文所试图向大家介绍的。
赛车试如何驱动的?
要想对3D游戏作深入的考察,首先必须了解关于3D引擎的一些基本知识。
根据《游戏大词典0.1版》(还有这种词典?)的解释,“引擎”(Engine)是指“用于控制所有游戏的主程序,从计算碰撞,物理系统和物体的相对位置,到接受玩家的输入,以及按照正确的音量输出声音等等。游戏引擎将游戏的所有元素捆绑在一起,指挥它们同时,由序地进行。这段庞大的程序代码通常是由首席程序师负责的。”
用一个形象点的比喻,我们可以把游戏引擎比作赛车引擎。大家都知道,引擎试赛车的心脏,决定着赛车的性能和稳定性,因此对于生产商来说,不仅要确保它拥有强大的马力,还必须保证它具有应付比赛中出现的各种复杂情况的能力。至于赛车的外观,操纵感等特点,则是为找引擎而产生的,可被车手直接感知的外在特性,这些外在特性实际上可以看作介于引擎和车手之间的一层“界面”。
游戏引擎也是如此,大家通过游戏所直接体验到的剧情、关卡、美工、音乐等内容,都是围绕游戏引擎而加入的外在特性。在这里,引擎扮演着核心发动机的角色,支持并协调着各单位的工作,它所产生的结果有的是我们能够直接观察到的,而更多则是在后台完成的。下面简单介绍一下一部标准的3D引擎具备的几个基本功能。
在所有功能当中我们最容易观察到的是游戏的光影效果,即场景中的光源将如何影响到其它的人或物,这是由引擎所决定的,一些基本的光学原理,如折射、反射等,都是通过引擎的不同编程技术实现的。以动态光影(Dynamic Lightning)为例,动态光源下的游戏场景会随光源的变化而变化,例如向走廊里发射一枚火箭,在火箭通过后这些区域则会重新恢复为初始状态。除视觉效果外,动态光源对游戏的玩法也会产生一定的影响,例如在某些隐秘风格的游戏中,你可以人为地制造一些阴影区域以藏匿其中。
引擎的另一个重要功能是为游戏提供基本的物理系统(Physics System),即“控制物体运动模式的一套规则”,例如,当角色跳起的时候,系统内定的重力值将决定他能跳多高,以及他下落的速度是多快。当然,这个物理系统无需严格遵守牛顿定律(事实上,大部分动作游戏中的动作都是违反牛顿定律的),除非你希望追求高拟真度,如飞行模拟游戏。
物理系统的核心部分是碰撞探测(Collision Detection),这是“游戏中用于探测物体的物理边缘的一种技术。当两个3D物体碰撞在一起的时候,碰撞探测技术会防止它们互相穿过而重叠在一起”。当一个物体在场景中运动的时候,碰撞探测会不断检查该物体是否撞上了其它动,如果没有,则重复最初的动作。这就确保了当你撞在墙上的时候,不会穿墙而过,也不会把墙撞到,因为碰撞探测会根据你和墙之间的特性确定两者的位置和互相的作用关系。
引擎的另一职责是负责玩家与电脑之间的交互,处理来自键盘、鼠标、摇杆和其它外设的信号。如果游戏支持脸网特性,则这部分代码夜会被集成在引擎当中,用于管理客户端与服务器之间的通信。
此外,引擎还负责游戏图形处理的一些具体任务,如动画系统。目前游戏所使用的动画系统一般有两种,一是骨骼动画系统,一是模型动画系统,两者从技术上看完全不同,前者是用内置的骨骼带动物体产生运动,后者则是在模型的基础上直接进行变形。游戏引擎将这两种动画系统预先值入游戏,以便动画师为角色各种动作。
引擎最直观也最重要的功能是--渲染,渲染所涉及的技术内容同光影效果一样复杂,有兴趣的朋友可以参考相关的技术文档,此处不再叙述。我们只需要知道,在3D世界中,所有模型,包括人物,武器,场景都是由多边形构成的;建筑完成后,美工把材质贴图按不同的面赋予这些模型,就像为骨骼蒙上一层皮肤,例如,把木纹贴图赋予3D桌子,这张桌子就会车呈现为木质,赋予其铁皮材质,则会变成铁皮桌;最后再由渲染引擎通过计算,合成入其它信息,在游戏的运行过程中把这些教过实时渲染在玩家面前。渲染引擎在引擎的所有部件中是最复杂的,它的强大与否直接决定着最终的输出质量。
以下是Epic游戏公司开发的《虚幻》(Unreal)引擎所包含的主要部件,共分为三大系统,每一系统又可分出许多小的组件:
1、渲染引擎:
*场景模型渲染 *动态物体渲染
*光影渲染 *粒子系统渲染
*音效
2、游戏服务:
*文件管理和保存
*游戏组件管理(关卡、角色)
*网络 *物体系统
*碰撞 *控制台
*输入管理(鼠标/键盘/摇杆)
3、编辑工具
*关卡编辑器
*模型输入/输入插件(3dmax and maya)
从上面的介绍我们可以知道,游戏引擎实际上相当于游戏的一个整体框架,框架打好后,关卡设计师,建模师、动画师只需往里填充内容即可。引擎的制作往往会占用最多的时间,比如《英雄本色》的MAX-FX引擎,从最初的雏形Final Reality引擎到最终的成品,共花了四年的时间。万家抱怨游戏开发了这么久却只有这么短的剧情,其实从某种意义上来说,《英雄本色》并非一款真正的游戏,它更像是一段引子,或者说是一段用于演示MAX-FX引擎的特点的技术演示程序。据说《英雄本色2》仍将采用MAX-FX引擎制作,相信它的开发周期决不会像前作那样漫长。
正式考虑到从头编写引擎的复杂性,因此大部分制作者都会选择购买现成的引擎的使用权,然后再按自己的要求对其进行修改。目前比较有名的引擎除了MAX-FX外,还有大家所熟悉的《QUAKE》引擎,《虚幻锦标赛》引擎,LITHTECH引擎(代表作《博得之门》),OMEN引擎(代表作《孤胆抢手2》)等。
事实上,除了开发中的《DOOM3》引擎外,目前的这些引擎很难分出高下(我认为世界FPS游戏3大引擎是:QUAKE3、UNREAL、HALFLIFE,其中hl的引擎画质最惨),它们各有特点,适用于不同的风格,有的在处理光影方面表现不错,有的在渲染开阔长境时效果较好,有的则性价比较高,笔者将在今后对这些引擎的特点作为别介绍。
麦克斯是如何成名的?
了解游戏引擎的基本知识后,在阅读MAX-FX的技术资料时我们就可以做到心中有数。下面我们一起来看看MAX-FX引擎的主要特点。
根据Remedy公司提供的光放介绍,“MAX-FX的核心部分是一个只支持硬件加速的渲染引擎(注:E2引擎),支持Directx 7的主流3D加速卡作了优化。MAX-FX引擎包含有多种编辑器和基层程序库(注:由硬件商提供的程序库,相当于硬件与游戏之间的一层界面,开发者可以通过它直接调用影键的各项功能)。内置有粒子系统、骨骼动画系统、辐射关影系统和基于出口的图像优化等特性。引擎可以支持数量极高的多边形,以便开发者绘制更为细腻的场景和角色。”
分析一下这段话,我们大致可以把MAX-FX的特点总结为以下几个部分:
1、渲染技术。这里主要是指辐射光影系统(Radiosity Lighting),它可以结合物体表面的所有光源效果,准确地计算出每个点的折射率和反射率,让光线以更自然的方式传播去,为物体营造出十分逼真的光影效果。它比常见的光影系统更为精确。据我所知,《英雄本色》是第一部采用辐射光影渲染技术的游戏,这种技术用辐射光影渲染技术的游戏,这种技术以只在一些高级的建筑设计软件中出现过。
2、优化技术。主要指“出口优化(Exit Optimization)”。大家都知道,电脑游戏中最令人头痛的问题就是如何在保证流畅帧速的前提下,达到最理想的细节度。《英雄本色》采用的这种“出口优化”技术使电脑只绘出玩家看得见的部分,而不去理会那些被遮掩住的物体。例如,当你站在一条狭窄的走廊上的时候,只有两边的墙以及前方视夜内的物体会被渲染出来,而墙背后的物体则会被忽略不计。这一技术类似于传统的“剪切”技术(Clipping),即“讲那些处于3D场景或可是范围(屏幕画面)以外的物体(包括2D图片和3D物体)剪切掉,以加快游戏的运行速度”。
MAX-FX引擎采用的另一优化技术是“细节等级”系统(Level of Detail)。通过自动降低远端物体的细节度(例如减少多边形数量,降低贴图分辨率),以实现运行速度和图像品质的平衡。这一技术类似于我们通常所说的阶层式贴图(Mip-Mapping)。
3、贴图技术。主要是指“多层材质贴图(Multiteturing)”,“这一贴图技术允许开发者在单一物体表面加入更多的通道,以产生更复杂的效果,如反射、彩色光线、烧焦的痕迹等。例如一面砖墙,如果你适用单一材质的话,只能表示出砖的效果,而是用多层材质贴图之后,就可以在砖墙的材质上再叠加海报的贴图,油气的材质、弹坑的凹凸材质,聚光灯的光照效果等”。在《英雄本色》的场景当中,我们可以大量见到这类贴图。此外游戏还采用了衣裳贴图,技术,这一技术可以产生衣裳飘飘的感觉,使衣裳不再如贴版一块死死地贴在角色身上,大家可以注意观察一下麦克斯身上那件标志性的黑色风衣。
4、子弹时间(Bullet Time)。“Bullet Time”这一称谓源自电影《黑客帝国》,实际就是指特定场合下的慢动作状态,例如开场时女主角分起踢腿的360度旋转画面。之所以被赋予“Bullet Time”的名字,是因为在慢动状态下子弹的飞行轨迹可以看的一清二楚。许多媒体把《英雄本色》同《黑客帝国》相比,认为《英雄本色》的Bullet Time”源自《黑客帝国》,其实不然。MAX-FX引擎已经开发了4年多时间,早在1998年Remedy就已经加入了这一特性,而《黑客帝国》直到1999年才大红大紫起来。如果说什么影响到话,那就是在《黑客帝国》成果之后,Remedy更注重了这一手段的运用。
MAX-FX引擎在其它的一些方面,如用于创建烟雾、火焰、水和爆炸场景等特效的粒子系统,可以保证人物动作自然流畅且不出现错误变形的骨骼动动画系统,以及对被称为代表着3D图像之未来的硬件转换与光源处理(T&L)技术的支持,对3D音效和力反馈控制的支持,都表现得相当出色。另外,可支持多边形数量的多少,也是衡量引擎的马力。尽管Remedy小组并未透露MAX-FX引擎可之词和多边形数量的具体数字,但从“极高”二字我们也可以猜测到这一数字必定比目前市场上的其它游戏引擎要高。
除了图像的逼真度、细腻度以及运行的速度和稳定性外,3D引擎还有两个很重要的性能指标--开放性和灵活性,这两个指标是相辅相成的。MAX-FX引擎提供有一套完成的辅助工具--MAX-ED干卡编辑器,它的核心组件是MAX-ED关卡编辑器,此外还包括用于编辑和修改由喜中的粒子特效和粒子编辑器ParticleFX,用于更换角色的外貌,服饰等的角色编辑器ActorFX等。强大、开放的编辑功能使玩家可以自由地对游戏进行改装,目前《英雄本色》已由一宽以中国功夫为主题的改装版问世。也正是由于其开放性,使MAX-FX引擎可以适用于包括赛车游戏在内的不同类型的游戏,以及游戏以为的不同用途,如建筑设计、军事模拟、人工智能和网络应用等。
尽管MAX-FX引擎在视觉效果上的成就有目共睹,但公正地说,它还算不上是最优秀的游戏引擎。MAX-FX引擎的最大缺陷在于它没有集成联网功能,并且在一些细节上也有欠雕琢,例如没有境面反射效果,大家在游戏中所见的镜子只是一层简单的贴图而已。其实境面反射特性早在《毁灭公爵》(DUCK 3D)里就已经出现了,大家或许还记得对镜子开火的傻事。Remedy没有给游戏加入经面反射,或许是考虑到它所耗用的资源过多。
至于为什么MadOnio.com把Max-FX作为其权威3D测试软件3DMark 2001的专用引擎,并非因为MAX-FX是最优秀的3D引擎,而是因为REmedy在开发MAX-FX引擎的过程中一直同MadOnion.com的合作关系,他们在为MadOnion.com提供源代码的同时,利用3dMark测试自己的引擎,并根据测试结果对引擎进行修改。双方是一种互赢互利的关系。
前面已经介绍过,引擎只是游戏的框架,如够没有具体的素材,在强大的引擎也将无从表现。据说在制作过程中,Remedy曾对纽约作了实地考察,并带回5500多张照片和长达12小时的录像,其中包括纽约的地铁、色情旅馆和贫民窟等大家所熟悉的游戏场景。
除了真实的复制外,《英雄本色》在图像方面的另一成功之处在于大量借鉴了电影的表现手法,其主要借鉴对象包括东方的武打动作片和西方的悲情侦探片。喜爱电影的朋友可以从游戏中明显地看出吴宇森式的动作风格,《盗亦有盗》、《低俗小说》和《虎胆龙威》等经典影片以及《七宗罪》、《普通嫌疑犯》等现代恐怖片的痕迹。
下面就以游戏中最长的一段过场动画为例,谈谈电影手法对这部游戏的影响。这段过场发生在第一章的地铁走廊中,麦克斯约了药品管制局(DEA)的头头亚历克斯会面,没想到在他们如约相见的时候,一名杀手当着买麦克斯的面从背后射杀了亚历克斯,而麦克斯只能绝望地看着亚历克斯倒下,因为他们之间被一道紧锁的铁门隔开着。
当时制作人员花了近两天时间设计了这段场景,其中大部分片断均已就绪,唯独亚利克斯中弹倒下的镜头无法取得令人满意的效果。最初的方案受技术限制而无法实现,于是,从最简单的视角到最奇怪的视角,设计师试验了无数死亡场景,结果无一适用。由于这是游戏中很重要的一段动画,它标志着麦克斯孤独之旅的开始,因此必须做到精彩。
最后设计师终于从吴克贝松的成名作《这个杀手不太冷》中获得了灵感,他们把这段镜头做成了正部游戏重的唯一一处以主观视角演绎的片段。当亚历克斯中弹跌倒的时候,玩家通过亚力克斯自己的眼睛记录下死亡前所见到的一切,直至陷入一片白光。最后的效果非常出色,Leon迷们一下子就认出了这段熟悉的镜头。
另为值得一提的是游戏中衔接关卡所用的200多幅以“连环画+配音/音效”形式出现的过场画面,这种电子小说式的风格给人以耳目一新的感觉,在压缩成本的同时,也为玩家保留了想象的空间。
你的游戏是否好玩?
从上面的介绍我们可以看出,《英雄本色》在逼真度方面的确达到了一个空前的高度,这种帧时代给我们的是强烈的视觉冲击。那么,今后的3D动作游戏是否会以追求更高的真实度为其发展目标呢?
毫无疑问,随着电脑系统的越来越强大,许多以往无法实现的想法将被一一付诸实践,我们将看到由越来越多的多边形构成的场景和角色模型,越来越接近显示的光影效果,越来越绚丽的特技效果,人物的表情、动作会同真人毫无二致,过去的种种限制也将被逐渐取消。在《红色派系》中,我们已经领教到了Geo-Mod引擎的威力,这款号称“第一个实时的、可以任意改变几何体形状的3D引擎”允许玩及使用武器在墙壁、建筑物或任何坚固的物体上炸开一个缺口,桥可以被炸断,墙上可以被炸开一个缺口,你甚至可以在平地上炸出一个坑,跳进去作掩体,这种真实度在以往是难以想象的。然而,图像和物力方面的高度真实是否一定代表着3D游戏的未来呢?我并不这么认为。
对于游戏来说,真实性只是一种手段而非目的,游戏的目的在于寻找乐趣。许多科幻/奇幻风格的游戏不需要也不可能依靠真实性而产生的产品绝不是游戏,而是一种引擎和机器的工具,没有任何实质意义。
最后还是让我们用《无人永生》开发小组的一段话来结束全文:“基于显示世界的游戏将继续模糊虚拟宇显示之间的界限,开发者无疑会进一步挖掘,提高游戏引擎在全市性方面的潜力。不过,未来必定会有更多的游戏建立在超越现实,超越真实性的基础上,他们将为玩家带去各种各样不可思议的动作体验。所有问题最终都会归结为一点--你的游戏是否好玩?”


阅读:
录入:admin

评论 】 【 推荐 】 【 打印
上一篇:第三章渲染2D精灵
下一篇:在Visual C++中使用内联汇编
相关新闻      
本文评论       全部评论
发表评论
字数
姓名:

  • 尊重网上道德,遵守中华人民共和国的各项有关法律法规
  • 承担一切因您的行为而直接或间接导致的民事或刑事法律责任
  • 本站管理人员有权保留或删除其管辖留言中的任意内容
  • 本站有权在网站内转载或引用您的评论
  • 参与本评论即表明您已经阅读并接受上述条款