基于八叉树空间划分的游戏引擎开发计划

来源:互联网 发布:sftp 端口 编辑:程序博客网 时间:2024/05/17 23:06
     目前我正计划开发一个第一人称游戏引擎。经过几个月的学习和分析,决定采用八叉树场景空间划分方法,使用目前流行的一些渲染技术,结合AI和物理仿真引擎开发一个完整的游戏引擎。总体概要    渲染部分:此部分包括对场景的渲染和光照。引擎的场景事先由场景编辑器创建,并进行一般的八叉树分割,存储在一个二进制文件内。运行时,从文件读入八叉树和其他场景数据。将采用机遇屏幕空间的Occlusion Culling 方法进行遮挡剔除,在执行Occlusion Culling 之前还须先进行物体包围盒 - View frustum的相交检测。对于场景中的特殊物体,如水面、公告版等进行进一步处理。光照方面,将基于Per Pixel Lighting技术构建一个动态光照模型,为了与Per Pixel Lighting 很好地结合,初步决定使用Shadow Map方法产生阴影,并在Shader中模糊Shadow Map以产生柔和阴影。    物理引擎:物理引擎包括碰撞检测、动力学仿真等内容。目前初步计划使用ODE引擎。    人工智能:此部分将放在最后考虑。人工智能模块将涉及行为选择,寻路和追踪等内容。技术分析一、渲染系统  1.场景编辑器    场景编辑器用于组合模型和特殊对象到一个场景当中。该编辑器将包括模型的导入和放置、虚拟特殊对象的放置(如脚本运行区域、怪物产生区域等)。场景编辑器还将产生一个用于运行时渲染的八叉树场景文件。  2.模型剔除    运行时渲染系统将负责模型剔除。模型剔除分两步进行:Object-View Frustum Culling 和 Occlusion Culling。使用Occlusion Culling 的原因是它得到了当前图形硬件的普遍支持。由于使用了Occlusion Culling,就要求场景中作为Occluder的部分要尽量简单,并且Occluder应该是不透明的。为了解决这一问题,制作者应该为作为Occluder的模型提供"Occluder Mesh"。Occluder Mesh是一个包含很少的多边形,但足以描述整个Occluder模型外观的多边形网格。使用这样的办法,可以一次性绘制场景中的全部或大部分Occluder Mesh到深度缓冲中用于即将进行的遮挡测试。选择Occluder Mesh的函数将依据最大Occluder Triangle的数目对Occluder Mesh 进行选择。绘制完Occluder Mesh之后,依次绘制所有在View Frustum中的物体的包围框,当通过Depth Test的像素数目小于某个值时标记该物体为不可见。一个可能加速这一过程的办法是,在检测物体的包围盒的可见性之前,检测Octree中该节点包围盒的可见性,一旦Octree的某个节点不可见,抛弃它所包含的所有子节点或模型。  3.光照系统     光照系统采用Per Pixel Lighting方法,对场景进行全局的Phong光照。与此同时进行阴影比较,确定某一个像素的亮度。进行阴影比较时,先对深度图进行一定程度的模糊,以模拟柔和阴影。当确认一个像素处于阴影区当中时,并不是取消该光源的光照效应,而是进一步削弱光照效果。这样可以模拟一定程度的辐射光。光照系统将要求材质中包含:Ambient,Diffuse,Specular,镜面指数,表面帖图,Normal Map, Brass Map。  4.特殊效果的渲染    此部分包括水面、火焰、公告版、粒子、光晕(和丁达尔效应)的渲染。由于这些景物具有特殊性,渲染系统将根据需要采用不同的渲染流程。  5. HUD和GUI    将建立一个完善的UI系统,使此UI能够被打包成窗体资源文件,并对外提供函数接口。 二、物理引擎  1.碰撞检测    碰撞检测同样使用渲染系统中的场景八叉树:对于移动的物体,检测八叉树中规定范围内的物体与该物体的相交情况。对于游戏来说,精确的碰撞检测没有太大的必要。因此,此引擎将仅采用基于OBB树的广义碰撞检测。当OBB树深入到一定层次时,采用OBB的碰撞点作为物体的碰撞点。因此,此过程可以分为两步进行:首先是八叉树中的遍历,此步将剔除绝大多数物体,其次是在两物体间的OBB树中进行搜索,得到一个近似的碰撞结果。  2.动力学仿真    场景中的每个动态物体都将包含质量、重心、线速度、角速度(旋转轴*角速度)、线动量、角动量等物理信息。仿真通过给物体一个或多个力或力矩来进行。首先,将多个力或力矩进行合成,得到一个力矩和该力的冲量,并计算得到物体因此获得的线动量和角动量,进一步就能得到线速度和角速度。当物体发生移动时,执行碰撞检测,一旦发生碰撞,进一步引发碰撞物体的仿真。  3.玩家/视角仿真    视角的仿真主要包括玩家的碰撞检测和碰撞反应,当玩家受到外界作用力时,计算视角因此而产生的偏移。三、人工智能    人工智能主要包括行为选择和寻路追踪技术。此部分内容将放在最后讨论。这里暂时不作计划。引擎结构设计    整个引擎将完全采用面向对象(Object Oriented)的方法进行设计。初步的总体规划图如下。 引擎框架总图
原创粉丝点击