一、Gamebryo的基本构成及其工作流程 Gamebryo是一款便捷且易上手的开放式跨平台游戏开发引擎,他整合了多家当今的成熟技术。图01说明了Gamebryo的基本构成和技术特点。我们随后对其中的主要技术特点做简单的介绍。
Gamebryo的基本构成和技术特点
那么,Gamebryo中的技术是如何在开发游戏中发挥作用的呢?图02演示了使用Gamebryo的工作流程。
Gamebryo的工作流程
从图中可看出,Gamebryo为当今主要的DCC工具(MAX、Maya、XSI),它都提供了游戏所需资源的导出插件。这些导出插件的用户界面简单、方便且易使用。美术人员可轻而易举地设置导出环境。从而导出游戏所需的数据:• NIF文件包含与几何模型有关的数据;
• KF文件包含动画数据;
• KFM文件包含定义一个角色所需的NIF和KF以及动画序列间的默认转换方式。 在上图中,我们还看到Gamebryo所提供的三个主要工具:• 资源观察器(AssetViewer)
这个工具可直接从DCC工具中启动。美术人员可以在导出数据前用它对DCC中的导出物件、人物设置、场景效果等进行观察以便在导出前进行修改。当然也可用来对已经导出的NIF进行观察。• 动画工具(Animation Tool)
此工具可以设置导出的动画序列之间的转换,建立多层动画组合。它所产生KFM文件定义了一个完整的角色。• 场景编辑器(Scene Designer)
顾名思义此工具是美术和策划用来创建游戏场景的。2.5版增加的地形编辑功能使得场景编辑器更上一层楼。从DCC工具中导出的物件、人物可以通过此编辑器加到场景中。也可方便地设置场景中的灯光、相机等。使用者也可以通过写插件的方式拓展编辑器的功能。场景编辑器产生的GSA文件是XML格式,可被直接加载到游戏中。 上述三个主要工具的使用在Gamebryo文档中都有详细的描述,参考网站:www.gamebryo101.com可以通过看录像的方式了解如何使用Gamebryo DCC插件以及如何使用Gamebryo所带的三个主要工具。二、Gamebryo的主要技术特点 前面讲到了在使用Gamebryo工作流程中,我们有了游戏中所需的资源。现在该是谈谈Gamebryo技术特点的时候了。正是这些优秀的技术才使得这些资源高效高质量地展现在游戏玩家的面前。那么,Gamebryo的主要技术包括哪些呢?笔者在下文中做简单介绍。场景图结构(Scene Graph)
Gamebryo的场景图是一张从场景的根节点起单向非循环的层级结构图表。这张图代表了听得见摸得着的三维世界,是Gamebryo的场景数据库的基础。图03是一张代表从3DS MAX中导出的直升机的场景图。
从3DS MAX中导出的直升机的场景图
图中右边即为代表直升机的场景图。“SceneNode”为此场景图的根节点。在这种结构下,场景可以有效地以深度优先的方式计算所有物体在世界坐标下的转换矩阵以及包围球(Bounding Sphere)。场景图中的所有节点的类(class)都继承于NiAVObject。渲染系统(Frame Rendering)
【图04:Gamebryo渲染系统的架构】
• Render Frame(NiRenderFrame)
这是Gamebryo渲染系统中的最上层界面。它代表一个完整的渲染过程。从图中可知,这一过程是由一系列的Render Step来完成的。• Render Step (NiRenderStep)
Render Step是一个独立的渲染过程。它既可完成主场景的渲染,又可完成一个特效的渲染过程(比如HDR,DOF等)。一个独立的渲染操作过程可能由一个或几个Render Click来完成。• Render Click (NiRenderClick)
Render Click是一个针对单一渲染目标(Render Target Group)的独立的渲染操作。• Render View (NiRenderView)
Render View直接对参与渲染的物体进行处理(如剪切、Alpha排序等)。一个Render View可以参与不同Render Click的渲染操作。 这一架构使得Gamebryo渲染系统的建立与管理更为方便灵活。使用者可以根据渲染的需要来安排Render Step、Render Click和Render View的顺序。同时,NiRenderFrame、NiRenderStep、NiRenderClick都可以靠设置Callback来完成渲染前以及渲染后使用者需要做的事情。材质系统(Material/Shader/Texture) Gamebryo的材质系统是一种机制。这种机制有效地为基于参与渲染的几何模型状态的着色器(Shader)提供服务。在这样的机制下,美术人员可在DCC工具中轻松地设置材质即可。而Gamebryo的材质系统会产生所需的Shader,并储存在缓冲存储器中。Gamebryo有自己的Shader文件格式(即NSF格式),同时也支持其它格式(如FX)。在Gamebryo中,对于在高端机器上运行的游戏,一般会采用标准材质(Standard Material)。而对低端机器来讲,会用到固定管线(fix-pipeline)。多线程管理系统(Floodgate) Floodgate系统是一个跨平台的多线程管理系统(也可说是一个数据流处理器管理系统)。在Gamebryo中,几何模型的变形、粒子系统的模拟计算、人物模型的蒙皮计算等都由Floodgate系统来完成。图05显示Floodgate在系统中的工作流程。其中一片云的部分就是Floodgate系统。主线程把任务交给Floodgate系统,它完成之后再返回主线程。
Floodgate在系统中的工作流程
有了Floodgate系统,Gamebryo的用户在处理与多线程有关的程序时就不必再写底层代码了。只要建立所要完成的任务(Task),并把它交给Floodgate系统就可以了。我们在这里仅仅提到了这个系统。今后有机会再详细介绍。
几何模型系统(NiMesh)
新的几何系统(NiMesh)是由数据流组成的。上面讲到几何模型的计算是由NiMeshModifier通过Floodgate系统来完成的。图06显示了几何系统与Floodgate系统之间的关系。NiMeshModifier会把任务交给Floodgate系统,并等待它完成任务返回。对这方面的编程方法感兴趣的朋友可以参照Gamebryo所带的例子MeshCreation。
几何系统与Floodgate系统之间的关系
与模型系统的处理方式一样,Gamebryo所带的强大、灵活且可拓展的粒子特效的模拟计算也是通过Floodgate系统来完成的。动画系统(Animation)• Gamebryo不仅支持人物模型的细节等级,也支持骨胳的细节等级。等级之间的切换由游戏系统的逻辑来完成。这部分逻辑是要由游戏开发者自己来写的。
• 支持骨胳动画、面部动画、层级动画(Layered Animation)
• 支持动画序列与动画序列,动画与物理模拟结果的混合。动画序列之间的混和方式可由动画工具(Animation Tool)来设定。
• 支持动画序列之间的同步处理。
• 支持人物根节点的动画累加。
• 具有响应动画驱动事件的功能。物理系统(Physics) 在Gamebryo中,物理系统使用的是NVidia公司的PhysX系统。Emergent已经完整地把PhysX系统整合到Gamebryo中了。使用者要做的只是拿到NVidia公司的PhysX SDK及其DCC工具的插件。导出带有物理属性的物体或人物并加载到游戏中。在游戏程序中,首先对物理系统初始,再在更新过程中使Gamebryo系统和物理系统能顺利地交换数据。这个交换过程是这样完成的,首先由Gamebryo系统向物理系统传递数据,物理系统完成模拟计算后再把结果返还给Gamebryo系统。其工作流程如图07所示。
Gamebryo物理系统的工作流程
图片:GameDesignPipeline.png