《功夫online》3D引擎开发总结

    技术2022-05-11  61

        【《功夫online》正在公测:http://www.gongfu.com.cn】     《功夫online》也公测一段时间了,早就想抽时间写点关于功夫开发的东西,可一直无法静下心,现在终于可以松一口气了。功夫的开发始于2004年6月,至今将近3年啦。功夫是我全程参与的第二个大型游戏项目了,抛开运营、市场等外在因素,单就游戏本身来说,我认为这个产品是成功的。 在前几年,完成第一个项目的时候,我就认为一个项目的成功必须包含几个方面:1产生出高质量的产品;2在技术上有一定的积累;3团队有所成长。就这三个角度来讲,我对功夫项目都还比较满意。功夫这个项目最大的问题就是道路走的太曲折了。功夫的游戏系统先后历经数次大的修改,在最后半年时间更是几乎推翻重来!就是在这半年里,大家表现出了很高的热情,游戏得以今天的面貌,这半年的辛苦是可想而知的!感谢这些与我一起战斗的兄弟们啊。 游戏、项目的话题如果摊开了说,那范围太广了,只谈谈功夫的3D引擎的吧。功夫的3D引擎是在公司成立之初完全从头开始写的。在这之前,有一段时间在家赋闲的时候,已经写了两个原型,都不满意。功夫项目大部分时间都在赶工游戏系统,真正给3D引擎的开发时间只有半年,在项目后期又化了一些时间优化。这套3D引擎开发代号为F3D,它吸收了我之前使用过的3D引擎的优点,并参考了开源引擎OGRE。 F3D的核心系统包括: 1.    一套简洁的RTTI系统,并支持对象序列化; 2.    虚拟文件系统; 3.    对外提供SceneGraph接口,内部使用QuadTree管理大型室外场景; 4.    单独的后台线程,整个场景都可以异步调入; 5.    SceneGraph与渲染系统分离,可以实现多渲染系统; 6.    面向美术的材质系统,在运行时将材质定义编译为面向3D API的数据; 7.    Terrain,支持texture splatting; 8.    动画系统支持顶点动画、骨骼动画,后者支持简单的动作混合; 9.    支持LOD; 10.    Sky Dome,Sky Box,Sun lens flare,并支持昼夜平滑变化和天气变化; 11.    资源管理系统,支持引用计数、资源池管理方式; 12.    2D渲染接口,主要用来渲染界面; 13.    插件管理,编辑器接口; 14.    特效系统,支持除粒子系统之外的十余种特效元素,可以组合成丰富的特效; 15.    PostProcess 在工具方面: 1.    支持Max导出,包括静态模型,顶点动画,骨骼动画,蒙皮,对Max的材质进行了尽可能的支持; 2.    编辑器框架使用插件结构,可以将所有编辑器整合为一个完整的游戏内容开发工具,每个编辑器是一个独立的工程,很好的封装了复杂度; 3.    地形编辑器; 4.    特效编辑器 5.    地图编辑器; 下面是我认为比较成功的方面: 1.    设计思路清楚,尽量使用直接、简单的思路,结果是引擎代码只有十万行出头! 2.    RTTI结合序列化的概念,使得复杂对象的存盘读盘代码都极为简单; 3.    代码进行了良好的文档化注释,并可以使用Doxygen来生成文档; 4.    动画系统技术比较成熟,特别是3DS Max导出插件出现的bug很少,文件格式几乎没有改动过; 5.    Terrain系统,采用了texture splatting的技术,证明是正确的选择。最终实现的效果非常精细,贴图容量占用也很小,填充率占用略大; 6.    特效系统表现力很强,无论是场景元素,还是功夫招式都可以给美术足够的发挥空间,最终的画面效果我很满意,很多特效我的都想像不出是怎么做出来的; 7.    资源管理系统的池机制,使得第二次地图可能很快(竟然有人说这是BUG,说是内存泄漏,还有人问为什么第一次进入这么慢,唉。。。); 8.    编辑器很重要,地形编辑器和特效编辑器写的很认真,效果也不错; 9.    对配置要求低!在经过优化之后,我测试了一下Geforce2 MX 400,游戏还是比较流畅的! 下面是一些不足的地方: 1.    引擎提供的接口,对于C++来说还算可以,如果想提供给一种脚本语言,就显得不够干净了; 2.    代码书写整洁,风格统一; 3.    在异步资源调入方面,出现几个严重的线程同步问题,显示出这块设计的不足; 4.    有兄弟质疑序列化的效率,比直接读取整块数据要慢,这是个需要考虑的问题; 5.    特效的管理上还不够完善,未能象普通动画那样应用fly weight模式; 6.    2D画图接口在最初实现时对效率考虑不够,后来发现,游戏有上千个控件,不得不再进行优化; 7.    一开始制作的地形的精度,贴图精度都太高了,后来降低了精度发现效果也不错,而视野可以成倍的增加,这个教训要吸取; 8.    没有考虑室内渲染技术,如果有机会的话,还是很想做一个室内/室外无缝连接的引擎啊; 9.    地图编辑器写的不好,使用不方便。 原来设想的很好,一直没时间完成的一些东西: 1.    多渲染系统――本来计划实现一套Fixed function用于低配置显卡,对于支持Shader Model 2.0的卡单独实现一套渲染系统,结果只做了前者; 2.    遮挡剪裁如果做了,效率还能再提高; 3.    计划在基于shader的渲染系统中实现一种室外场景光照模型; 4.    C#接口,这样游戏层可以用C#写,希望开发效率能提高。 做为第一个完全由自己设计的3D引擎,成功的完成了一个大型MMORPG项目,还是略有成就感的。不过,不知道是不是游戏程序员都有重写一切的欲望,如果再有机会,我还是希望能从头设计、实现一个3D引擎。  

    最新回复(0)