3D引擎是将现实中的物质抽象为多边形或者各种曲线等表现形式,在计算机中进行相关计算并输出最终图像的算法实现的集合。 3D引擎就像是在
计算机内建立一个“真实的世界”
分类
3D引擎根据是否能够被主流计算机即时计算出结果分为即时3D引擎和离线3D引擎。
PC机及游戏机上的即时3D画面就是用即时3D引擎运算生成的,而电影中应用的3D画面则是用离线3D引擎来实现以达到以假乱真的效果。
3D引擎对物质的抽象主要分为多边形和
NURBS两种。在即时引擎中多边形实现已经成为了事实上的标准,因为任何多边形都可以被最终分解为容易计算和表示的三角形。而在离线引擎中为了追求最好的视觉效果会使用大量的NURBS曲线来实现多边形很难表现出的细节和灵活性。
定义
3D引擎作为一个名词已经存在了很多年,但即使是一些专业的引擎设计师,也很难就它的定义达成一个共识。通常来说,3D引擎作为一种底层工具支持着高层的图形软件开发。你可以把它看成是对3D API的封装,对一些图形通用算法的封装,对一些底层工具的封装。我无法准确的定义3D引擎的含义和作用,因为针对不同的用户和开发项目,3D引擎完成的功能可能都有不同。因此,我将从功能的角度来定义3D引擎,这种定义法也许能更确切的表达出一个3D引擎的真实含义。
功能
3D引擎最基本的功能应该包括:
数据管理
这里的
数据管理是一个比较广泛的定义,不同的3D引擎也许会拥有其中一个或多个功能。这些功能包括:场景管理,对象系统,
序列化,数据与外部工具的交互,底层3维数据的组织和表示。
场景管理:这个名称相信对3D引擎有一定认识的朋友都很熟悉了。通常它和SceneGraph同时存在于一些架构方面的资料中。由于3D引擎可能会用来管理一些庞大的3D世界,在这个世界中物体与物体之间通常存在一些 相关/从属/影响与被影响关系,如何组织这些关系,并确切的将这些关系与3D引擎的其他功能联系起来,就是场景管理需要完成的工作。常有朋友问我场景管理是用的哪种算法。从我的理解来讲,场景管理是一种设计模式,而不是一个具体的算法,也许你会最终选择BSP/QuadTree/Portal/...作为场景管理树的结构,但是这些已经是实现层面的东西了,而且它们也远远不是场景管理的全部。因此我认为Scene Manager 和Scene Graph manager 这两个概念还是分开理解比较好。
场景管理首先需要考虑如果表达场景中物体的关联关系,这部分通常是由场景图来实现的。通过一个一对多的树形结构已经可以满足要求,当然考虑到数据层的共享和维护,允许子树进行
Clone也是前期设计时需要考虑的一个方面。再此之后,就需要考虑物体之间材质的继承关系,
动态环境如何嵌入到你选择的场景图中。在一个考虑到交互和触发机制的引擎中,还需要考虑物体之间如何发送消息。(比如一个结合了
物理引擎的场景)。实际上在整个引擎中你所涉及到的各种算法和设计,都或多或少的会和场景管理发生联系。比如在一个实现动态光影的引擎中,物体之间如何实现相互遮挡,光源的影响范围如何在场景图上继承,都是在设计时需要考虑的问题。
渲染器
之所以要说是合理的渲染器,是因为一个引擎的渲染能力是由多方面决定的。比如一款以实时游戏作为目标的游戏,会选择基于
光栅化的渲染算法。在这种设计前提下,几何体一级的数据不会过于详细,例如物体表面的
BRDF,折射率,纹理
坐标空间的变化率,切线空间的变化率(当然随着硬件能力的提升和Shader能力的发展,这些数据也会出现在一些比较高级的游戏引擎中),这时候即使你在设计初期就考虑到这些数据需求,并将它们表现在了Render中,最后也不会有任何意义。
交互能力
简单的说,就是开发工具。任何一款3D引擎如果没有开发工具都不能称为是完整的。这些开发工具可能是一些文件转换器,场景编辑器,脚本编辑器,粒子编辑器....
有了上面3种功能,就可以称为3D引擎了。当然,如果要开发一款功能强大的引擎,那还有很多很多的功能需要满足,其中一些功能将在后面的章节中有详细的描述。
发展历程
引擎诞生
1992年,3D Realms公司/Apogee公司发布了一款只有2兆多的小游戏——《
德军司令部》(Wolfenstein 3D),稍有资历的玩家可能都还记得初接触它时的兴奋心情,用“革命”这一极富煽动色彩的词语也无法形容出它在整个电脑游戏发展史上占据的重要地位。这部游戏开创了第一人称射击游戏的先河,更重要的是,它在X轴和Y轴的基础上增加了一根Z轴,在由宽度和高度构成的平面上增加了一个向前向后的纵深空间,这根Z轴对那些看惯了2D游戏的玩家造成的巨大冲击可想而知。 Wolfenstein 3D引擎的作者是大名鼎鼎的
约翰·卡马克,这位id Software公司的首席程序师正是凭借这款Wolfenstein 3D引擎在游戏圈里站稳了脚跟。事实上,《
德军司令部》并非第一款采用第一人称视角的游戏,在它发售前的几个月,
Origin公司就已经推出了一款第一人称视角的角色扮演游戏——《创世纪:地下世界》(Ultima Underworld),这款角游戏采用了类似的技术,但它与Wolfenstein 3D引擎之间有着相当大的差别,举例来说,《地下世界》的引擎支持斜坡,地板和天花板可以有不同的高度,分出不同的层次,玩家可以在游戏中跳跃,可以抬头低头,这些特性Wolfenstein 3D引擎都无法做到,而且从画面上看,《德军司令部》更接近漫画风格而不是传统的像素画面。 尽管从技术细节上看,Wolfenstein 3D引擎比不上《创世纪:地下世界》的引擎,但它却更好地利用了第一人称视角的特点,快速火爆的游戏节奏使人们一下子记住了“第一人称射击游戏”这个单词,而不是“第一人称角色扮演游戏”。《
德军司令部》后来还发布过一款名义上的续集——《三元的崛起》(Rise of the Triad),这款游戏在Wolfenstein 3D引擎的基础上增加了许多重要特性,包括跳跃和抬头低头等动作。 引擎诞生初期的另一部重要游戏同样是出自id Software公司的一款非常成功的第一人称射击游戏——《毁灭战士》(
Doom)。Doom引擎在技术上大大超越了Wolfenstein 3D引擎,《
德军司令部》中的所有物体大小都是固定的,所有路径之间的角度都是直角,也就是说你只能笔直地前进或后退,这些局限在《毁灭战士》中都得到了突破。尽管游戏的关卡还是维持在2D平面上进行制作,没有“楼上楼”的概念,但墙壁的厚度可以为任意,并且路径之间的角度也可以为任意,这使得楼梯、
升降平台、塔楼和户外等各种场景成为可能。 由于
Doom引擎本质上依然是二维的,因此可以做到同时在屏幕上显示大量角色而不影响游戏的运行速度,这一特点为游戏创造出了一种疯狂刺激的动作风格,在这方面迄今为止大约只有《
英雄萨姆》(Serious Sam)系列能与之相比,除此之外还没有哪款3D引擎能在大批敌人向你涌来的时候依然保持游戏的流畅,这也是为什么如今市面上的大部分第一人称射击游戏都在积极地培养玩家的战术运用能力、提高玩家的射击准确率而拒绝滥砍滥杀的主要原因之一。值得一提的是,尽管Doom引擎缺乏足够的细节度,但开发者仍然在《毁灭战士》中表现出了惊人的环境效果,其纯熟的设计技巧实在令人赞叹。 不过更值得纪念的是,Doom引擎是第一个被用于授权的引擎。1993年底,Raven公司采用改进后的
Doom引擎开发了一款名为《投影者》(ShadowCaster)的游戏,这是游戏史上第一例成功的嫁接手术。1994年Raven公司采用Doom引擎开发《异教徒》(Heretic),为引擎增加了飞行的特性,成为跳跃动作的前身。1995年Raven公司采用Doom引擎开发《
毁灭巫师》(Hexen),加入了新的音效技术、脚本技术以及一种类似集线器的关卡设计,使你可以在不同关卡之间自由移动。Raven公司与id Software公司之间的一系列合作充分说明了引擎的授权无论对于使用者还是开发者来说都是大有裨益的,只有把自己的引擎交给更多的人去使用才能使引擎不断地成熟起来。 《毁灭战士》系列本身就相当成功,大约卖了350万套,而授权费又为id Software公司带来了一笔可观的收入。在此之前引擎只是作为一种自产自销的开发工具,从来没有哪家游戏商考虑过依靠引擎赚钱,Doom引擎的成功无疑为人们打开了一片新的市场。
引擎转变
在引擎的进化过程中,肯·西尔弗曼于1994年为3D Realms公司开发的Build引擎是一个重要的里程碑,Build引擎的“肉身”就是那款家喻户晓的《
毁灭公爵》(Duke Nukem 3D)。《毁灭公爵》已经具备了今天第一人称射击游戏的所有标准内容,如跳跃、360度环视以及下蹲和游泳等特性,此外还把《异教徒》里的飞行换成了喷气背包,甚至加入了角色缩小等令人耳目一新的内容。在Build引擎的基础上先后诞生过14款游戏,例如《农夫也疯狂》(Redneck Rampage)、《阴影武士》(Shadow Warrior)和《血兆》(Blood)等,还有台湾艾生资讯开发的《七侠五义》,这是当时(至今依然是)国内不多的几款3D射击游戏之一。Build引擎的授权业务大约为3D Realms公司带来了一百多万美元的额外收入,3D Realms公司也由此而成为了引擎授权市场上的第一个“暴发户”。不过从总体来看,Build引擎并没有为3D引擎的发展带来任何质的变化,突破的任务最终由id Software公司的《
雷神之锤》(
Quake)完成了。 《雷神之锤》紧跟在《
毁灭公爵》之后发售,两者孰优孰劣一时之间成为玩家的热门话题。从内容的精彩程度来看《毁灭公爵》超过《雷神之锤》不少,但从技术的先进与否来看,《雷神之锤》是毫无疑问的赢家。Quake引擎是当时第一款完全支持多边形模型、动画和粒子特效的真正意义上的3D引擎,而不是
Doom、Build那样的2.5D引擎。此外Quake引擎还是连线游戏的始作俑者,尽管几年前的《毁灭战士》也能通过调制解调器连线对战,但最终把网络游戏带入大众的视野之中的是《雷神之锤》,是它促成了
电子竞技产业的发展。 一年之后,id Software公司推出《雷神之锤2》,一举确定了自己在3D引擎市场上的霸主地位。《雷神之锤2》采用了一套全新的引擎,可以更充分地利用3D加速和OpenGL技术,在图像和网络方面与前作相比有了质的飞跃,Raven公司的《异教徒2》(Heretic II)和《军事冒险家》(Soldier of Fortune)、Ritual公司的《原罪》(Sin)、Xatrix娱乐公司的《首脑:犯罪生涯》(Kingpin:Life of Crime)以及
离子风暴工作室去年夏天刚刚发布的《安纳克朗诺克斯》(Anachronox)都采用了Quake II引擎。 Quake II引擎的授权模式大致如下:基本许可费从40万美元到100万美元不等,版税金视基本许可费的多少而定,40万美元的许可费大约需提取10%以上的版税金,100万美元的许可费则提取很少一部分版税金。这样算下来,《雷神之锤2》通过引擎授权所获得的收入至少有一千万美元,尽管游戏本身的销售业绩比起《毁灭战士》来要差很多,大约卖了110多万套,收入在4500万美元左右,但在授权金这一块它所获得的盈利显然要远远高于《毁灭战士》,此时的引擎已经从一种单纯的工具变成了一块令人垂涎欲滴的肥肉。 俗话说“
一个巴掌拍不响”,没有实力相当的竞争者,任何市场都无法发展起来的。正当Quake II独霸整个引擎市场的时候,Epic Megagames公司(即现在的Epic游戏公司)的《虚幻》(
Unreal)问世了。毫不夸张,第一次运行这款游戏的时候,我的确被眼前的画面惊呆了,尽管当时只是在300x200的分辨率下运行的这款游戏(四大悲事之一:玩游戏机器不够劲)。除了精致的建筑物外,游戏中的许多特效即便在今天看来依然很出色,荡漾的水波,美丽的天空,庞大的关卡,逼真的火焰、烟雾和力场等效果。从单纯的画面效果来看,《虚幻》是当之无愧的佼佼者,其震撼力完全可以与人们第一次见到《
德军司令部》时的感受相比。 Unreal引擎可能是使用最广的一款引擎,在推出后的两年之内就有18款游戏与Epic公司签订了许可协议,这还不包括Epic公司自己开发的《虚幻》资料片《重返纳帕利》,其中比较近的几部作品如第三人称动作游戏《北欧神符》(Rune)、角色扮演游戏《
杀出重围》(Deus Ex)以及永不上市的第一人称射击游戏《
永远的毁灭公爵》(Duke Nukem Forever),这些游戏都曾经或将要获得不少好评。 Unreal引擎的应用范围不限于
游戏制作,还涵盖了教育、建筑等其它领域。Digital Design公司曾与
联合国教科文组织的
世界文化遗产分部合作采用
Unreal引擎制作过巴黎圣母院的内部虚拟演示,Zen Tao公司采用Unreal引擎为空手道选手制作过武术训练软件,另一家软件开发商Vito Miliano公司也采用Unreal引擎开发了一套名为“Unrealty”的建筑设计软件,用于房地产的演示。 这款与《雷神之锤2》同时代的引擎经过不断的更新,至今依然活跃在游戏市场上,丝毫没有显出老迈的迹象,实属难得。
授权方式
3D引擎有之分,商业的游戏引擎需要支付一定的费用才能使用。而开源游戏引擎可以将源代码拿来开发自己的游戏。
商业游戏引擎的费用一般由以下一项或者几项组成:
(1) 基本的费用:引擎开发者购买引擎时,价格可能随着引擎的版本的不同而不同。
(2) 基于卖出游戏数量的版税(royalty)。尤其是那些中间件公司,例如:EPIC公司,引擎费用由两种支付方式:一种是相对低廉的购买引擎的费用加上你卖出产品数量的版权费,另一种是较高的购买引擎的费用而不用支付附加的版权费。
(3) 支持多平台(Linux、
PS2、Xbox)功能的费用。游戏要想支持的平台越多,你要支付的费用就越多。 (4) 依据有多少个开发者来使用这个游戏引擎开发工具来收费。有些引擎创作者要求购买引擎的公司依据将要使用这个引擎开发环境的开发者的个数来支付费用。
(5)引擎的更新或者服务产生的费用。
(6) 有些引擎需要特定的昂贵的其他软件的支持。例如KA3D需要非常昂贵的
3D建模工具3DSMax来产生游戏的Level。另一个例子是,
虚幻引擎只提供商业软件的3DS Max 和 Maya的导出工具。
(7) 有些引擎本身是免费的,但是当结合FMod(sound library)其他的库使用时,当你进行商业游戏的开发,你将支付库的开发者2000美元。