二维图像引擎
二维图像引擎(以下简称引擎)是主要使用在二维游戏中,绘制图像,并向外部表达图像的系统。在三维游戏中,亦有使用二维引擎来绘制游戏界面以及一些二维元素。
历史
概述
一般来说,一套引擎可以使用在多个不同的游戏中,即“可重用性”,由于引擎研发的投资较大,一个商业公司往往开发一款引擎,反复用于多款游戏,从而获得较高利润。如大宇公司的《轩辕剑系列》其正传和外传就是采用同一款引擎开发。也有本身不制作游戏,专门开发引擎并出售的公司。这样的引擎也称作“商业引擎”。出于游戏开发周期和开发成本的考虑,一些商业游戏公司更愿意购买“商业引擎”。
游戏引擎的程序基础是建立在使用图形API函数基础之上的,而不是直接控制显卡,主要适用于2D图像的API是DirectX,而纯2D图形API往往不能提供更丰富的图像操作支持,一些引擎也使用用于3D图像的API如OpenGL,Direct3D等来模拟2D。
引擎组成
由于二维游戏的图像都是平面结构,所以图像引擎在显示图像之前也往往只对图像本身进行处理,而不像三维游戏那样还要处理图像周围的环境。这种处理一般是将图像伸缩,变形,色彩处理,图像合成等。图像引擎还可分为以下几个部分。
角色图像
在二维游戏中,角色的动作是靠一系列由美工预先设计好的图像,按照一定的速率连续显示来实现。就像播放电影的方法一样。而考虑到角色移动带有方向性,角色的一种动作往往要以不同的方向绘制许多组。在早期DOS游戏中,为了节约资源,角色动作往往只有四个方向,而后来的RPG游戏则往往是八个方向,或十二个方向。方向的多少影响着角色动作的流畅度,也极大的影响游戏占用资源的多少。一种缓和的办法是采用“纸娃娃系统”。
场景地图
场景地图是承载全部游戏内容的场所。引擎对付地图的办法大致可分为两种:整版式和贴图式。前者是直接将整张图像作为地图来显示,这样的好处是美工可以针对不同的场景单独绘制不同的地图,但由于地图的不可拆分性,整版式地图也是最占用资源的。后者贴图式则正是针对前者的劣势,在贴图式地图中,美工并不直接绘制地图,而是绘制许多细小的地图元素,如一块草地,一个池塘,一棵树等,并在此之后,将数量一定的元素组合并接成完整地图。这种解决办法的劣势就是场景变化度不高,容易出现完全相同的区域。
在贴图式场景地图系统中,每个地图都是由一个贴图方阵组成,根据单个贴图的形状,可以将贴图式地图分为90°和45°和30°地图三种。90°的贴图单元成矩形,一些早期DOS游戏都是这种;45°的贴图单元成正方形,一些早期RPG多用此种,如《网络创世纪》;30°则是菱形,是时下比较流行的一种。三者相比起来,30°表现的场景最为自然。然而一些采用90°贴图的游戏有意将建筑,设施等图像倾斜绘制,模拟30°贴图的画面效果,如《传奇》。
一般,引擎习惯将角色固定在屏幕正中央,并移动场景来实现角色行动的效果。这种效果也称“地图卷动”。
动态&光影
在二维游戏中,或多或少的会使用一些特殊的效果,如图像的淡入淡出,颜色的加强等。游戏引擎中,一般有专门的系统负责处理图像,由于这部分代码比较常用且运算量大,好的引擎多用ASM语言书写代码。
此外,游戏中的特效,如火焰,魔法技能,流水等都是引擎需要处理的内容。
其他技术
脏矩形技术(Dirty Rectangle)
在2D游戏中,每次更新屏幕,都将会将整个屏幕上的图像重新绘制一遍,而更新的内容往往不是很多,甚至只是一个小区域,强制重绘带来了很大的资源浪费,尤其是在一些休闲游戏、桌面游戏中体现明显。脏矩形技术正是利用只更新变化区域来达到提高引擎效率的目的。[1]在脏矩形系统中,屏幕上更新的区域被称为“脏矩形”,引擎仅仅将脏矩形部分重绘,而其他部分保持原样。
alpha混合
由于2D游戏的平面性,导致一个物体对另一个物体时有覆盖的情况。被覆盖的物体则不可见,可能给玩家带来不便。通常,游戏开发者会将一部分被遮盖的物体进行透明化处理。[2]这种透明化算法被称为“alpha混合”,混合的对象主要是角色图像,以便让玩家知道被遮挡的角色身在何处。
此外,引擎在处理一些火焰,流水时,也常常使用透明化算法,使之更为真实。
图像压缩
在2D游戏中,图像是游戏中最大的资源,而开发者为了压缩游戏所占的空间大小,往往在图像压缩上大作文章。被压缩后的图像,经过归类,被放置在一个个“打包文件”中,通常,这些文件以.lib .pak作为文件名后缀。