用了一段时间Gamebryo了

    用了一段时间Gamebryo了——做了2个月的demo,由于一些不可抗拒的因素,demo被迫喊停,我和另外一个同事被调到了项目组,做了2个月的东西完全被否决掉,心头总是有些失落的。最近在反思的同时也想把使用Gamebryo的感受记录下来。

   首先说明,在3D方面我就是一打酱油的,也就知道那么点基础概念,所以这篇文章的内容和所表达的观点可能会有一些偏差。

   首先,Gamebryo是一个成熟的3D商业引擎,已经有不少的游戏公司在采用它作为引擎开发3D项目,具体的项目可以到GB 的Wiki上去找。GB的应用方式,大致有2种,一种是基于2.6版本的,直接使用Core Runtime,另外就是截至目前发布的最新lightspeed。直接使用Core Runtime的方式应该是lightspeed出来之前的应用方式,它和lightspeed很大的区别在于2个方面,1是lightspeed自身具备更高层的框架封装,2是拥有一个很强大的工具Toolbench。

   Toolbench应该是GB的工具开发战略:所有的功能都能依靠插件集成到Toolbench中,Toolbench本身是一个开放式的工具框架,目前发布的lightspeed版本中,Toolbench自带3个插件:world builder ,script debugger,Entity Modeling Tool。world builder是世界编辑器,有点类似于场景编辑器,script debugger是脚本调试器,目前支持lua和python两种脚本语言,这里顺便提一下,Toolbench的脚本系统非常方便,它集成了swig,可以在很短的时间就能搭建一个脚本模块,调试器虽然功能还不是很丰富,但也还算方便(缺少某些很好用,实现起来也很简单的功能,就连查看一个变量值都只能输入到watch窗口查看),另外它的脚本编辑器就不敢恭维了,非常难用。Entity Modeling Tool是建模工具,可以在里面拖拉几个model,然后定制其行为和属性,很自然就和脚本系统联系上了。

   lightspeed的另一个特点是高层的框架封装,比如在这个框架下,要实现摄像机,只需要写一个具备摄像机功能的CameraService,然后add到ServiceManager里面就行了,同样如果需要实现天气系统,写一个WeatherService add到ServiceManager即可。这样的设计是正交的。

   GB对美术的考虑是采用3dmax,maya等工具的插件方式,让美术直接在这些他们经常使用的工具中编辑。美术工作的流程大概是这样的,首先在max中编辑好物件,然后使用GB的插件导出成相应的格式(Nif或kfm等),然后视具体应用加入到scene designer等工具中编辑。

   由于公司是购买的source版本,所以可以看到代码,总的来说,代码很规范,设计思路也很明确,典型的OO设计,到目前为止没看到啥意料之外的代码(因为代码看的很少:D)。大部分工具GUI采用C#编写,逻辑采用C++/CLI编写,其实也就是接口那层使用。我想,这样设计有2个好处:其一,C#的优势是开发效率高,有庞大的.net类库支持,也能做出一些复杂的界面,其二,可以强制分离界面和逻辑,因为这样设计的话通常是需要做接口把c#和c++代码结合起来,做界面的人不参与逻辑,做逻辑的人不参与界面。

   物理方面,GB整合了PhysX,这个就不多说了。GB里面自带了一些PhysX的demo。

   工具方面,除了Max插件 和Toolbench之外,GB还有scene designer,animation tool,assert viewer等几个工具

   再说说文档,文档的内容很丰富,但错误很多,我们就发现好几处,很花了一些时间来解决,遗憾的是没有记录下来。对文档错误我还是比较能够理解的,编写文档是一项细致的工作,而且各个版本不同升级和修订,都会对文档维护工作带来很多麻烦。在用GB正是开始做项目之前,建议团队里面最好有人能通读一遍文档,在遇到问题的时候脑袋里有那么一点点印象,能够很快的定位到文档。很荣幸我们公司里面有这么一个人:D

   最后谈谈目前我们遇到的一些问题,首先是特效编辑这块,GB的方案是在max中制作,然后导出成Nif等文件,然而美术对这种工作方式有较大的意见,主要体现在效率太低,据美术的经验,在max中编辑特性和专用工具相比,可能会有5倍左右的效率差距,这是一个不小的数据,基于这种情况,应该有必要专门开发一个特效编辑器。另外一个问题是地形方面的,GB的场景最多只支持一个Terrian(据说下个版本会支持多个),并且地表贴图只能支持4层(同样是据说,有人改到了支持16层,貌似不太困难),总来的来说,感觉地形方面还比较薄弱。

   最最后,纪念一下我们的demo——supersonic,已完成的功能有以下几点,计划最近能整理到blog中。
     全3D视角摄像机,包括俯仰,旋转,摄像机和地形及物件的碰撞
     地形,物件pick
     脚本控制角色动画
     投影纹理
     碰撞检测:Walkable & Non-walkable
     粒子方面:天气系统,雨雪天气的实现
     shader:水面效果

真的是最后了,再次重申以上是打酱油的观点和经验,由于使用时间太短,其他方面接触也不深,就不谈了。

你可能感兴趣的:(用了一段时间Gamebryo了)