首页 > 未分类 > (转)Ogre终于开始改进其对地形渲染的支持
2019
11-29

(转)Ogre终于开始改进其对地形渲染的支持

  Ogre正在开发中的版本,1.7版,引入了新的Terrain Component与Paging Component,Ogre终于开始对地形渲染进行官方的支持了。Ogre官方论坛上sinbad也提到了这个新的Terrain Component的特性及目前的进展,不过他自己也说,虽然他很希望1.7版能在今年发布,但是结果却也很难预测 🙁

  曾几何时,在Ogre中寻求更加完善的地形渲染支持是多少人都在做的事,Ogre源代码库中的Terrain Scene Mananger只能实现最基本的高度图渲染功能,搭配一张普通texture和一张detail texture,根本无法实现出我们想要的真实地形效果。于是,Addon论坛上不少人也开始了为Ogre扩展地形渲染支持的工作,比较有名的是PLSM,这部分代码经过不少的修改,之后也被纳入了Ogre的Octree Scene Manager代码库,不过其依然还是相当的简陋。另外还有一个就是Myrddin,这里是论坛上的介绍页面,在1.7版出来之前,这应该是最好的地形渲染选择了。

 

  所以,之前使用Ogre的游戏要么自己来写地形渲染这一块,要么干脆就不要地形,一切皆mesh,比如最近挺火的火炬之光(Torchlight)。

  其实,一切皆Mesh也并不是不可以,相反,用Mesh能够表现出更加细腻真实的效果,比如场景本来就是由大师的地下城或者陡峭的山脉构成时。就像前几年玩过的“地牢围攻2”。当然,全Mesh场景的问题也是很明显的,其需要渲染的面数太多,所以,这样的游戏也只好采用固定的斜视角,并且打上很近的雾来减少需要渲染的对象数,就如同前面提到过的两个例子,“地牢围攻”和“火炬之光”那样。

 

  从OgreSVN上checkout出来代码,简单看了下相关的代码注释,其特性还是挺让人期待的。

  首先,地形资源有了自己的文件格式,不再是以前的terrain.cfg和terrain.png或terrain.raw了,

  另外,terrain和paging以Component的形式实现,不再依赖于Scene Manager的实现。

  然后,贴图的混合也已基本实现。目前地形渲染的一个pass最多支持6层贴图,地形渲染常用的normal map, light map, colour map,specular map都已经支持,从其提供的几张试验用的截图来看,多层混合、法线以及高光实现的都已经没有问题了。

  另外还有一个额外的特性是支持运行时对地形的修改,并能在后台线程中对地形数据进行加载和保存。

  虽然这个特性在目前的游戏中都不需要,因为地形编辑一般是在场景制作的时候完成,也就是由美术人员在制作地图时就已确定好了,在游戏中只需要将地图文件读出来并渲染到屏幕,游戏进行过程中也不允许对地形数据进行任何破坏和修改。

  其实,从技术上来说,这并不是绝对的限制,地形及场景完全是可以破坏的,可以重建的,比如,可以让一颗炸弹落过的地方永久的留下一个弹坑,让火烧过的地方只留下一片残骸,树木及杂草都被烧毁,另外,城镇与村落也不需要是美术预先编辑好的,玩家完全可以在一块空旷的地方建起一座城来,当然也可以把别人的一座城烧毁掉,等等。

  只是,当地形及场景改变后服务器需要同步大量的数据给客户端,并且,如何保证这些数据的完整性和一致性。这最主要的还是受限于网速的原因,如果网络速度足够快,我们完全可以把游戏做成瘦客户端,甚至无客户端,就像现在的flash web game一样,客户端总是去服务器上取最新的场景数据,这样就不再有问题了。

  但是,另外一个问题可能会稍麻烦一些。当地形和场景改变后,服务器端的AI相关数据会受到很大的影响,比如寻路数据,不论是用nav mesh还是用waypoint,这些数据都要重新构造,而这个构造过程一般来说将会是漫长的,但是地形的重建却可能会是相当频繁的。。。还有AI对象的出生数据,等等,这都需要我们花一些精力去思考。

 

  当然,一切能够想得到的问题都不会是大问题,总会有方法去解决它们。今天觉得不可能做到的事,随着明天硬件环境的提升,新的算法的实现,这也将成为我们在游戏中能够亲眼看到的事实。

最后编辑:
作者:搬运工
这个作者貌似有点懒,什么都没有留下。