51testing 发表于 2008-1-9 11:25:01

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

《功夫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引擎。

firemonth 发表于 2008-4-11 17:14:12

原帖由 51testing 于 2008-1-9 11:25 发表 http://bbs.51testing.com/images/common/back.gif
不知道是不是游戏程序员都有重写一切的欲望

bluesky3044 发表于 2009-5-7 11:20:20

你是这游戏的研发成员么??还是转载??

你是这游戏的研发成员么??还是转载??
页: [1]
查看完整版本: 《功夫世界》3D引擎开发总结