燕良@游戏开发

-- 长风破浪会有时,直挂云帆济沧海。

用户操作
[即时聊天] [发私信] [加为好友]
房燕良ID:yanonsoftware
88909次访问,排名1063好友0人,关注者12
从大学出来后一直工作在游戏开发的第一线,主要做品有《仙剑奇侠传3》(上海软星,主程序),《功夫世界》(北京腾武,技术总监)
yanonsoftware的文章
原创 66 篇
翻译 0 篇
转载 1 篇
评论 41 篇
燕良的公告
最近评论
qpzkzp:Wow gold
qpzkzp:Wow gold
qpzkzp:Wow gold
qizhenwei_1:怎么才能联系上你啊 ,我现在也在研究Ogre,不过是2D部分的,我有些问题想请教你,我的QQ是354257900.
ccanan:挑战在于如何高效实现
文章分类
收藏
    相册
    代表作品
    收藏
    链接
    CSDN游戏技术圈
    My Google page
    My Shaders
    存档
    软件项目交易
    订阅我的博客
    XML聚合  FeedSky
    订阅到鲜果
    订阅到Google
    订阅到抓虾
    订阅到BlogLines
    订阅到Yahoo
    订阅到GouGou
    订阅到飞鸽
    订阅到Rojo
    订阅到newsgator
    订阅到netvibes

    原创 《功夫online》3D引擎开发总结收藏

    新一篇: C++0x不一定是利好,仅仅掌握C++已经不够了 | 旧一篇: ShaderSimpler(7) : 实现类似魔兽世界的“全屏泛光”

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

    发表于 @ 2007年02月09日 11:01:00|评论(loading...)|编辑

    新一篇: C++0x不一定是利好,仅仅掌握C++已经不够了 | 旧一篇: ShaderSimpler(7) : 实现类似魔兽世界的“全屏泛光”

    评论

    #qrn_1982 发表于2007-02-28 16:58:00  IP: 218.80.229.*
    你好,我最近在研究texture splatting,但是看了gamedev上的
    bloom的文章后还是很不理解,这个技术具体是怎样应用到大型地形上去的?是不是:把地形分成tile,然后像贴瓷砖似的把多种贴图贴到地形上的tile上去,每个tile只能贴一张,然后再通过alpha图混合起来?而且alpha图需要多种组合,或是实时计算alpha并混合?我看unreal 3的引擎特性里也有splatting.请赐教!
    #yanonsoftware 发表于2007-02-28 20:32:05  IP: 221.218.204.*
    是实时Alpha混合上去的;贴图不必每个tile一张,一个贴图可以覆盖多个tile。gamedev上的文章讲的比较清楚,建议你再仔细看看。其实是很简单的实现,只不过现在显卡的填充率高了,才能实现。
    #52program 发表于2007-03-01 16:45:44  IP: 219.239.35.*
    请教一下何为fly weight模式??
    #yanonsoftware 发表于2007-03-02 09:24:25  IP: 219.239.35.*
    中文译作“享元”,google一下,有很多介绍。
    #fxwwang 发表于2007-04-22 17:59:25  IP: 58.217.133.*
    做的不错,感觉打击感要比乱舞天下要好点,就不知道在网络lag的情况下会如何.
    我觉得重写引擎比较浪费时间,尽量只增加不翻盘.
    #zdl1016 发表于2007-05-11 12:26:28  IP: 202.104.97.*
    向楼主学习.
    初学3D开发的softer.
    #kafly 发表于2007-07-22 10:28:36  IP: 59.35.78.*
    7. 资源管理系统的池机制,使得第二次地图可能很快(竟然有人说这是BUG,说是内存泄漏,还有人问为什么第一次进入这么慢,唉。。。);

    不知道做了主管后有没有时间再来照顾自己的blog,暂且写到这里吧。

    一个地图得占下多少内存啊,过的图多了会不会把物理内存用光了?很怀疑!
    #qizhenwei_1 发表于2007-12-21 14:10:27  IP: 218.79.91.*
    怎么才能联系上你啊 ,我现在也在研究Ogre,不过是2D部分的,我有些问题想请教你,我的QQ是354257900.
    发表评论  


    当前用户设置只有注册用户才能发表评论。如果你没有登录,请点击登录
    Csdn Blog version 3.1a
    Copyright © 燕良