《功夫世界》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引擎。 原帖由 51testing 于 2008-1-9 11:25 发表 http://bbs.51testing.com/images/common/back.gif
不知道是不是游戏程序员都有重写一切的欲望
顶
你是这游戏的研发成员么??还是转载??
你是这游戏的研发成员么??还是转载??
页:
[1]