《gamebyro引擎介绍》由会员分享,可在线阅读,更多相关《gamebyro引擎介绍(16页珍藏版)》请在金锄头文库上搜索。
1、 GameByro引擎介绍引言:GameByro是一款成熟的商业引擎,已经被许多成功的商业项目所使用,不仅包括文明4、上古卷轴4,辐射3等跨平台知名单机游戏,还有EA的大型3DMMORPG战锤online。GameByro完全基于面对对象设计,结构清晰,便于使用和扩展。灵活的可编程渲染架构使它比较容易支持最新的图形技术。另一方面,由于强调通用性,GameByro并没有对上层应用做太多的支持,其工具和插件大多仅具有一些通用功能,所以它更像是一个游戏开发套件而不是一个完整的FrameWork。引擎特性概览: 跨平台(PC,XBOX360,PS3) 场景图表现为层次化的结构 同目前主要的建模工具集成
2、(插件支持) 高效的可视性裁剪 在所有的平台上支持高级3D硬件加速 高级纹理和着色效果 动态碰撞检测 细节分级表现(LOD) 灵活的渲染,排序和裁剪算法对象系统:GameByro的对象系统的使用遍及整个引擎,其主要实现如对象管理,引用计数,对象生存期等功能。可以通过对几个基类的继承来使用对象系。其主要特性主要有:1. 智能指针(引用计数)2. 运行时类识别(RTTI)3. 场景对象复制4. 序列化(对象文档化)5. 对象命名6. 对象扩展数据的管理7. 定时器(主要用于动画)8. 多线程操作驱动层:GameByro对图形接口进行了封装,将图形API从引擎的渲染系统中剥离出来,在PC系统上,Ga
3、meByro同时支持DX9和DX10两种接口。 DX9渲染器特性:l GameByro不允许多个DX9Renderer对象同时存在,且不能与DX10Renderer共存。但在同一帧内,GameByro的DX9Renderer可以同时渲染多个窗口。l GameByro的DX9渲染器支持对资源的多线程访问,同时也支持对资源的预载,但是多线程的操作仍然受到严格的限制。l DX9Renderer的固定管线蒙皮操作最少支持4块骨骼(矩阵),同时基于shader的蒙皮操作支持30块骨骼。l DX9Renderer通过对后台缓冲的多重采样支持全屏抗锯齿,范围在2倍到4倍之间。l 大多数硬件在DX9下对几何体
4、的一个单一的piece所能接受的光照数量都有一定的限制(指渲染的一个批),如果超过这个限制,GameByro会根据距离或者是影响因子放弃一些光照。正因如此,在应用程序中,当8个以上的逐顶点光照作用于同一对象时,就会有一些被抛弃。l DX9Renderer提供了视口的左右反向功能,用于实现后视镜、立方体贴图表面绘制等功能。l DX9Renderer支持顶点雾,可以通过相关接口设置雾的最大值。l DX9Renderer完全支持DX的纹理格式。应用程序可以将自己的Direct3D textures提供给GameByro,引擎会自动将其封装到自己的材质对象中并允许添加属性和特效。通过提供自己的DX的纹
5、理格式,GameByro能够正确的使用自并非天然支持的纹理格式。l 纹理相关特性和限制:DX9Renderer需要显卡支持在同一pass中至少使用两个纹理,否则渲染器则不会创建成功。此外受限于硬件的功能还有:1. Cube Mapping(立方体纹理)2. Specular Bump Mapping(凹凸镜面贴图)3. Diffuse Bump Mapping(凹凸反射贴图)4. Non-Power-of-Two Texture Size(编长非二整数幂的纹理):使用这种纹理有如下限制:纹理寻址模式必须设置为clamp,Mipmapping不能使用。5. Texture Downsizing(
6、纹理精度缩减)6. Texture Compression(压缩纹理),DX9Renderer支持载入经过压缩的纹理格式,并提供了纹理即时压缩的功能。如果硬件支持压缩纹理,DX9Renderer可以将经过压缩的纹理数据直接交给硬件处理,否则DX9Renderer会自动将数据解压后再交给硬件。7. Texture Apply Modes Supported:DX9Renderer不支持APPLY_DECAL纹理应用模式。8. Texture Format Requests(纹理格式要求):精确的纹理像素映射依赖于目标硬件和显示器像素位宽。9. Palettized Texture Formats
7、(调色板纹理格式的支持)。10. Sphere Mapping(球面映射):GameByro中所有的渲染器都支持世界空间中的球面映射。11. DX9Renderer支持加载包括DDS、TGA、BMP格式的文件。Cube textures和volume textures都能被正确的加载,但是只能通过三维坐标寻址。12. GameByro的编辑器支持导出DX原格式的纹理,并在加载的时候不进行格式转换。将DX格式的纹理直接交给DX处理。引擎渲染系统分析GameByro的渲染是由帧渲染系统(Frame Rendering System) 控制的,帧渲染系统封装了每一个批次的绘制过程,这样可以方便的控制
8、整个渲染流程。阴影系统:GameByro的阴影系统是使用帧渲染系统的典范,通过对已有的类以继承的方式进行功能扩展,实现了灵活的阴影渲染功能。GameByro自身支持三种光源的阴影图生成,分别为点光源(全方向光)、平行光、聚光灯。阴影系统统一由一个管理器负责控制。阴影的算法被封装成了一个个类对象中。系统中同时存在着几种阴影技术,即可以选择使用,也可以同时使用几种阴影技术作用于同一几何体。阴影系统会自动裁剪掉那些没有阴影接受体的光源,同时在计算每个光源所产生的阴影时,会裁剪掉那些不受此光源影响的几何体,达到性能优化的目的。用户很容易对阴影系统进行扩展,实现自己的阴影算法。GameByro的阴影主要
9、是基于shadowMap技术,点光源使用了立方体阴影图,软阴影则使用了方差阴影图技术(VSM)。GameByro的阴影系统集成到了场景编辑器中,可以在编辑器中直接为光源指定阴影效果,所见即所得,提高了开发效率。(如图所示,在编辑器中同时使用点光源阴影和方向光产生的软阴影)地形系统:GameByro的terrain是简单易用的,并且方便为其扩展,用以满足项目的其他功能需求。地形系统由以下几部分组成:1. NiTerrainComponent:是整个地形系统的入口,通过Terrain Interactor可以像访问容器一样访问NiTerrainComponent所有的sub-component。2
10、. Terrain Interactor 地形迭代器,通过Terrain Interactor可以启动所有的数据查询,比如简单的碰撞检测,meta-data查询,高度图导入和文件加载。几乎所有基于terrain系统的操作都是通过Terrain Interactor完成的。3. NiTerrainSectorComponent 的内部主要包含一个负责组织地形数据块的四叉树。此对象负责从磁盘加载执行物体与地形的射线相交查询,转换地形几何体,管理内部资源(包括共享的顶点流和shader)。同时NiTerrainSectorComponent还负责进行四叉树的遮挡查询和生成可见集。4. Data Le
11、aves and Blocks 四叉树的切分等级是通过NiTerrainComponent设置的,四叉树的每个节点都包含一个地形块,块的边长必须是2的整数幂。四叉树的根节点等级为N,叶节点为0,由高到底细节依次增加,等级为0的叶节点所包含的地形块拥有最高的细节。5. Material Layers:地形系统通过掩码图来为地形指定材质。掩码的数据指定了地表的每个部分所对应的材质。同一地表最多支持四种材质,根据各自的权重进行混合,权重数据也是通过掩码来获得。材质在地形的渲染系统中扮演着很特殊的角色,可以通过对材质指定meta-data来附载其他的信息(比如在雪地行走的声音),同时也可以通过对材质的
12、纹理贴图为地表增加顶点或像素着色程序。此外每种材质可以包含如下指定类型的纹理贴图:l Diffuse/Base Map 反射贴图,通过3或4个通道决定反射光的颜色。l Detail Map 细节贴图,为反射贴图提供Alpha值。l Normal Map 法线贴图。l Parallax Map 视差贴图,用来保存表面像素的高度偏移信息。此外GameByro还提供了简单的地形射线追踪和水面渲染。地形射线追踪目前的实现很简单,就是用一个射线查询地表的三角形,以后会与Physics进行集成,支持通过物理引擎l实现物体与地表的碰撞检测。水面渲染主要是用两张纹理动画混合而成,通过凹凸贴图来表现水波。引擎为
13、水面所在的地表生成一个灰度图,保存地表距离水面的高度。这里预先定义了两种颜色,深水颜色和浅水颜色,如果水面以下没有地表就直接使用深水颜色。再像素着色器中可以对高度图进行采样,从而得出当前像素的水深,然后根据这个深度在深色和浅色之间进行差值,得到最终水的颜色。不过这个效果并不是很理想,如需更好的效果,还需要对其进行扩展,比如说,增加反射和折射等。材质:GameByro的材质主要是通过3DMAX的插件进行编辑的,并提供了标准的材质节点。(在GameByro中,材质节点的主要作用是负责根据着色过程生成相应的shader代码)这个节点一共有9个通道,并提供了大量可供调整的参数,这样就可以让美术方便的使
14、用逐像素光照、视差贴图、环境体贴图这些效果,在游戏中,GameByro通过不同的材质属性和不同的光照环境编译出不同的shader代码,以二进制的形式保存在磁盘上,下次启动时载入内存,这样就不用重复编译,但在第一次进入游戏中时会有些延迟。灵活强大的材质是次世代引擎的重要特征,GameByro在这方面做到了灵活,但是美术仍然不能通过可视化工具控制材质的处理过程,只能编辑资源和修改参数,编辑性还不够强大。 Shader:GameByro提供了一个极具扩展性的shader系统,并将它与艺术创作工具紧密结合。GameByro定义了自己的shader格式,基于文本的.NSF文件和基于二进制的.NSB文件,
15、.NSF文件编译后生成.NSB文件,这个过程即可以在开发时完成,也可以在运行时进行。 .NSF文件使用的是GameByro自定义的语法,并使用自己的语法分析器将其编译成相关平台的代码。实际上,GameByro的shader系统在应用程序和GPU程序之间做了一层封装,屏蔽了不同平台之间的差异,使得应用程序可以用相同的接口来与GPU之间进行交互,而GPU程序最终还是通过cg或hlsl来实现的,这样做的好处是,当平台发生改变时,只需要根据具体的平台来编写相应的shader程序,而不需要去修改应用程序。当然,shader系统也直接支持cg和hlsl格式的文件,使用方法同NSF、NSB文件相似。GameByro的Shader系统提供了一套完整的查错机制,方便使用者对程序进行debug。GameByro的shader系统集成到了所有的配套开发工具中,这样就实现了所见即所得,美术在工具中就可以直接看到资源在游戏中的效果,从而提高了开发效率。GameByro通过引入自己的shader文件格式为跨平台提供了方便,同时也增加了系统的复杂性,使用起来稍微有点繁琐,开发人员又不得不去熟悉它的语法,如果开发中不考虑跨平台的话,想要自己开发特效,也可以不使用NSF文件,直接使用fx格式的文件。引擎自带的特殊材质:AdditiveLightMapsM