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對象的出生數據,等等,這都需要我們花一些精力去思考。
當然,一切能夠想得到的問題都不會是大問題,總會有方法去解決它們。今天覺得不可能做到的事,隨著明天硬件環境的提升,新的算法的實現,這也將成為我們在游戲中能夠親眼看到的事實。