Renderware是由Criterion Software开发的
3D游戏引擎。美国艺电于2004年8月将Criterion Software收购,也获得了Renderware的软件许可证。
前言
作为目前游戏开发界的一款流行的
3D引擎工具,Renderware支持了在多个游戏平台上的许多优秀3D游戏的诞生,在下表中你可以找到那些获得过若干荣誉的游戏,他们都是基于Renderware开发的。
游戏列表
…………………………………………还有其他游戏,不一一列举。
粗看一下读者也许会很疑惑,Renderware居然在各种游戏平台上都被广泛的应用,而且还涉及RCG(
赛车游戏)/ RPG(角色扮演)/SPG(
体育游戏)/ACT(动作游戏)/FTG(格斗游戏)等多种游戏类型。Renderware为何如此强大?为什么各大游戏开发商都对它如此倾心?本文将详细介绍Renderware各个系统的特点,希望能给国内的游戏开发人员一些帮助。
笔者撰写本文的目的是向读者介绍Renderware的大致特性,并非专门介绍Renderware的3D算法及编程语法,因篇幅所限,所以本文对此不做详细解释,若有机会日后笔者会单独撰文对此进行介绍。目前国内游戏公司在项目开发中都会考虑采用成熟的
游戏引擎,Renderware作为业界知名的引擎,有许多令人称道的特性,但也有很多不足之处,希望本文能为开发人员在项目初期考察引擎提供一些参考,让大家可以结合项目需求考察引擎特性,评价是否Renderware是否适合用于自己的项目。
平台
Renderware最为人称道的优势就是跨平台特性(这与EA的产品线路如出一辙,难怪EA一定要把Renderware收归旗下),使得开发者可以忽略平台差异利用Renderware接口,高效的开发上层功能,但同时,Renderware也提供了针对不同平台的优化接口使其对硬件管线的利用达到最优状态。
目前Renderware支持的平台有索尼PlayStation2、Playstation3、微软Xbox、Xbox360、任天堂Game Cube、Wii、微软Windows(Direct3D),、微软Windows(OpenGL)和苹果MacOS(OpenGL)。
为了支持多平台特性,Renderware采用C语言编写,这是因为C在各个平台上都有统一的标准库,而且编译也十分方便。而相较之下,C++有太多的新特性和新支持库,这些新东西并非在所有的平台上都能获得支持。同时Renderware利用结构体进行了类C++的封装,使其具有
面向对象的特性,所以大部分C++程序员对引擎的语法结构都不会感到陌生。
Renderware引擎的功能采用插件定制的概念,相对独立的功能都以插件的形式提供(大多数是静态链接库LIB的形式),而这些插件的契合度很低(除了底层的核心插件)。一方面,游戏开发者可以根据项目需求有选择的包含插件,降低代码规模;另一方面,针对某些平台的特殊模块也能够包装到插件中,Renderware的多平台特性不会因为增加新功能而受到破坏;最后,插件的设计是开放的,开发者可以自己实现新功能并以同样的插件形式运用到项目工程中。
Renderware作为一款强大的3D引擎,支持OpenGL和DirectX8.0及以上版本,对3D程序员来说,不管你以前是在OpenGL还是Direct3D下开发,用起Renderware来都会感觉得心应手。
Renderware 3.7 SDK中附带3ds Max5.0、3ds Max6.0、Maya4.0、Maya5.0的导出插件,可以区分不同平台导出场景、模型、骨骼和蒙皮动画、变形动画、
贝塞尔曲线等。
总体来说,使用Renderware开发的游戏,在平台移植上有先天的优势,因此,在PC游戏市场和视频游戏市场百家争鸣,Xbox和PS杀得难解难分时,开发商既然猜不出谁会最终成为一统天下的游戏平台,那么采用在任何平台都能运行的引擎,无疑是最明智的选择。
创造世界
Renderware没有大规模室外场景管理的功能,因此,用Renderware作MMORPG游戏似乎不是一个很好的选择,原因可能是Renderware更倾向于支持专用视频游戏主机平台上的单机游戏开发,而这部分开发对室外场景的需求不大,因此Renderware在室内场景的管理和渲染部分更有优势,本节将对此作一介绍。
Renderware的场景基本只能从美术编辑工具中导出(3ds Max或者Maya)中直接导出,如果想自己生成地形或者编辑场景,都需要开发人员按项目需求开发
编辑器,Renderware并没有专门的地图编辑器。
Renderware在导出时,首先会做BSP分割,之后,场景会根据分割数据被划分为若干立方体区域。在Renderware中,它被称作WorldSector,这些立方体有以下作用:
1.渲染时,只有能被看到的WorldSector才会送入下一级检测。
2.在
碰撞检测中,也只检测能被看到的WorldSector中的碰撞。
3.所有的物件和灯光都会绑定到各自的WorldSector,只有能看到的WorldSector所连接的物件才会被处理。
此外,开发者还可以对场景进行PVS(Potentially Visible Sets)预处理,针对竞速类游戏,还可以预先定义摄像机轨道,然后再对这条轨道进行PVS预处理。
最后Renderware还具备对场景做入口检测(Portal Culling)处理的工具。
我们可以看到,Renderware对室内场景尽可能的提供各种优化措施,而且这些优化都是预处理过程,这代表着Renderware能够高效的管理和渲染场景。
创造生物
Renderware的动画部分可能是最为强大的部分,这也是很多动作/格斗/体育类游戏青睐它的原因,Renderware可以导出刚体动画、蒙皮动画、变形动画并且可以实现复杂的角色
骨骼系统。
Renderware骨骼动画的实时数据是以时间为参数从关键帧的插值得到的,这个插值过程是以骨骼的运动插值为依据,因此是非线性的,不会引起模型变形。而变形动画是操作每个顶点的移动,这种动画的实时数据是通过顶点线性移动的插值得到的。变形动画可以很好的表现骨骼动画难以描述的动作(比如面部肌肉变形产生的表情动画)。
相对来说,骨骼蒙皮在游戏中运用的比较多,Renderware的骨骼插件提供以下功能:
1.动作间的平滑过渡:利用骨骼动画插值器,角色从一个动作变化到另一个动作时,可以根据过渡时间给两个动作赋予不同的权值,使过渡过程看起来非常平滑。
2.骨骼系统的拆分:可以把角色的骨骼再细分为更小的子骨骼系统,分别读取各自的动作文件。这样一来,各部位分别独立,组合起来的动作就会显得非常丰富。
3.动作融合:其原理与动作过渡一样,角色可以同时进行两个动作。按权值组合。比如角色
中枪的动画和跑步的动画融合,看起来就是在跑动中中枪。
4.可以重载插值方式得到自定义的插值数据。
5.可以压缩骨骼数据,压缩骨骼数据可以节省大量的内存,但解压缩有额外的时间开销。
要有光
Renderware的光照分为两类:静态和动态。
动态光照包括方向灯、点光源、环境灯、射灯、这些动态灯与DirectX中的灯没什么区别,动态灯光能够有效的模拟动态光源和运动物体在灯光下的表现,而且使用简单,但无法体现光源遮挡和阴影等细致的光影效果,因此表现力不佳。同时,由于硬件的限制,这些动态灯的数量也是有限的。动态灯会对效率有较大的影响。
Renderware的静态灯包括两种,一种是顶点色记录光照信息,美术人员可以事先在工具中调整物件和场景的顶点色,用来模拟光照。这种方法简单、速度快,编程人员几乎不需要做任何工作就可以得到静态光照效果。但对于顶点数较少的墙面等几何物体,如果顶点间的距离太大,顶点色之间的插值融合会形成明显的硬边,效果很不自然。
静态光照的另一个办法是LightMap,LightMap预计算静态光照对材质的影响,将光照信息保存到一张或多张纹理图上,利用多层纹理渲染场景,得到静态光照效果。
它的优点是:
1.速度快。
2.与光照模型独立,可以在此基础上应用不同的光照模型。
3.由于光照图记录的光照信息是以像素为单位,而光照图的大小和精度又可以自由控制,因此效果很好。
缺点:
1.多次纹理渲染的消耗。
2.纹理所占内存的消耗。
3.不能应用在动态光源和运动物体上。
4.由于需要两次贴图,与Renderware的一些纹理特效可能不兼容。
Renderware生成LightMap有两种方法,一是在程序中设置若干动态灯光,然后使用LightMap插件对场景光照预计算,这种方法生成的LightMap边缘不够柔和,而且计算时间也比较长。
另一种方法是直接在3ds Max中进行材质烘焙,把静态光照产生的LightMap先生成出来,然后在渲染时再加载这些光照图。
总体来说,Renderware的光照系统并没有十分特别之处,应该说是比较薄弱的环节。
材质特效
Renderware的材质特效包括环境映射、凹凸贴图、双重纹理映射、纹理动画。这些材质特效都是在RpMatFX插件中提供的,使用非常简单。
使用这些材质特效的步骤如下:
1.首先绑定RpMatFX插件。
2.如果有蒙皮动画的模型,那么蒙皮动画的包含库要替换为支持RpMatFX的库。
3.将需要材质特效的原子设置到指定的渲染管线。
4.为指定材质设置特效。
5.读取材质特效所需要的附加信息(环境映射纹理、凹凸纹理、第二层纹理、纹理动画数据等)。
6.渲染该物件。、
同一物件的不同材质,可以对应不同的材质特效。因此,上述纹理特效对一个物件来说是可以并存的,也就是说,我们可以得到一个既有凹凸贴图,又有环境映射的物件。
卡通渲染
相对来说,Renderware 3.7这个版本比较吸引开发者的是快速、方便的卡通渲染功能,开发者不需要了解卡通渲染的算法和原理,只需做简单的设置就可以实现卡通渲染的效果。而且Renderware3.7提供了方便的卡通渲染编辑器,可以灵活的对卡通渲染的轮廓线、光照纹理进行编辑。
在Renderware附加的特效包中提供了卡通渲染插件RpToon,这个特效包还包括粒子插件RpPTank和体育游戏角色渲染插件RpTeam、RpCrow。从这些插件的功能可以看出,它们都是采用可编程渲染管线进行渲染的。在Renderware中,原子的渲染管线可以指定为普通、纹理特效、卡通渲染三种之一,由于有部分可编程渲染管线和蒙皮动画的计算相关,因此Renderware被迫为蒙皮动画插件RpSkin分别提供了三种渲染管线的三个插件。要使用卡通渲染,就必须加载卡通渲染所对应的RpSkin插件。
使用Renderware的卡通渲染插件,可以按照以下步骤进行:
1.在3ds Max导出插件的选项中要勾选卡通渲染选项,导出时插件会预计算卡通渲染需要的数据。
2.在Renderware提供的卡通渲染编辑工具里导入这些初始模型,对轮廓线和卡通光照图进行编辑。
3.在主程序中绑定RpToon卡通渲染插件。
4.如果有蒙皮动画,蒙皮动画的包含库要替换为支持RpToon的库。
5.将每个待渲染的原子的渲染管线设置为卡通渲染。
6.加载事先编辑好的轮廓线和卡通光照图数据文件。
7.渲染此物件。
其他信息
Renderware Graphic还具有以下特性:
1.高效的粒子系统
2.模型动态LOD
3.支持FLASH文件的2D界面系统
4.高效的基于面和包围盒的碰撞检测系统
5.提供支持PS/VS的接口
另外,Renderware组件中除了Graphic而外,还有Renderware Audio、RenderWare A.I、RenderWare Physics、RenderWare dPVS等其他模块,利用他们可以有效的缩短游戏项目的开发周期。
未来展望
Renderware Graphic提供了完善的3D模块,几乎所有常用的3D功能都能很简便的被调用,但它也有许多不足之处:
1.没有室外场景管理,不适合大型MMORPG类型网游。
2.光照系统薄弱,表现力不高。
4.无法扩展底层,源码非公开。
5.不支持HLSL。
6.定制的渲染管线只支持两层纹理融合(可能是考虑到平台一致性)。
笔者认为,Renderware更适合在专用游戏平台上进行开发,适合于射击、体育、动作类的游戏类型,适合于项目周期短,3D技术储备薄弱的开发公司。
目前Renderware 对外的版本是3.7,但有消息称EA公司最新的Renderware版本已经到了4.5,这个版本更开放了可编程管线的接口,支持HLSL语言,灵活性更大。希望Renderware这款有辉煌战绩的老引擎能在新东家那里成长得更好,走得更远。
在国内
目前号称全球最大华人游戏公司的大宇,就最常使用这一游戏引擎。其公司旗下的三大品牌,大富翁系列,
仙剑奇侠传系列,
轩辕剑系列,目前均在使用此引擎。最新推出的《仙剑奇侠传五前传》也继续沿用这一引擎。