Ogre正在開發(fā)中的版本,1.7版,引入了新的Terrain Component與Paging Component,Ogre終于開始對地形渲染進行官方的支持了。Ogre官方論壇上sinbad也提到了這個新的Terrain Component的特性及目前的進展,不過他自己也說,雖然他很希望1.7版能在今年發(fā)布,但是結(jié)果卻也很難預測 :(
曾幾何時,在Ogre中尋求更加完善的地形渲染支持是多少人都在做的事,Ogre源代碼庫中的Terrain Scene Mananger只能實現(xiàn)最基本的高度圖渲染功能,搭配一張普通texture和一張detail texture,根本無法實現(xiàn)出我們想要的真實地形效果。于是,Addon論壇上不少人也開始了為Ogre擴展地形渲染支持的工作,比較有名的是PLSM,這部分代碼經(jīng)過不少的修改,之后也被納入了Ogre的Octree Scene Manager代碼庫,不過其依然還是相當?shù)暮喡A硗膺€有一個就是Myrddin,這里是論壇上的介紹頁面,在1.7版出來之前,這應該是最好的地形渲染選擇了。
所以,之前使用Ogre的游戲要么自己來寫地形渲染這一塊,要么干脆就不要地形,一切皆mesh,比如最近挺火的火炬之光(Torchlight)。
其實,一切皆Mesh也并不是不可以,相反,用Mesh能夠表現(xiàn)出更加細膩真實的效果,比如場景本來就是由大師的地下城或者陡峭的山脈構(gòu)成時。就像前幾年玩過的“地牢圍攻2”。當然,全Mesh場景的問題也是很明顯的,其需要渲染的面數(shù)太多,所以,這樣的游戲也只好采用固定的斜視角,并且打上很近的霧來減少需要渲染的對象數(shù),就如同前面提到過的兩個例子,“地牢圍攻”和“火炬之光”那樣。
從OgreSVN上checkout出來代碼,簡單看了下相關(guān)的代碼注釋,其特性還是挺讓人期待的。
首先,地形資源有了自己的文件格式,不再是以前的terrain.cfg和terrain.png或terrain.raw了,
另外,terrain和paging以Component的形式實現(xiàn),不再依賴于Scene Manager的實現(xiàn)。
然后,貼圖的混合也已基本實現(xiàn)。目前地形渲染的一個pass最多支持6層貼圖,地形渲染常用的normal map, light map, colour map,specular map都已經(jīng)支持,從其提供的幾張試驗用的截圖來看,多層混合、法線以及高光實現(xiàn)的都已經(jīng)沒有問題了。
另外還有一個額外的特性是支持運行時對地形的修改,并能在后臺線程中對地形數(shù)據(jù)進行加載和保存。
雖然這個特性在目前的游戲中都不需要,因為地形編輯一般是在場景制作的時候完成,也就是由美術(shù)人員在制作地圖時就已確定好了,在游戲中只需要將地圖文件讀出來并渲染到屏幕,游戲進行過程中也不允許對地形數(shù)據(jù)進行任何破壞和修改。
其實,從技術(shù)上來說,這并不是絕對的限制,地形及場景完全是可以破壞的,可以重建的,比如,可以讓一顆炸彈落過的地方永久的留下一個彈坑,讓火燒過的地方只留下一片殘骸,樹木及雜草都被燒毀,另外,城鎮(zhèn)與村落也不需要是美術(shù)預先編輯好的,玩家完全可以在一塊空曠的地方建起一座城來,當然也可以把別人的一座城燒毀掉,等等。
只是,當?shù)匦渭皥鼍案淖兒蠓掌餍枰酱罅康臄?shù)據(jù)給客戶端,并且,如何保證這些數(shù)據(jù)的完整性和一致性。這最主要的還是受限于網(wǎng)速的原因,如果網(wǎng)絡速度足夠快,我們完全可以把游戲做成瘦客戶端,甚至無客戶端,就像現(xiàn)在的flash web game一樣,客戶端總是去服務器上取最新的場景數(shù)據(jù),這樣就不再有問題了。
但是,另外一個問題可能會稍麻煩一些。當?shù)匦魏蛨鼍案淖兒螅掌鞫说腁I相關(guān)數(shù)據(jù)會受到很大的影響,比如尋路數(shù)據(jù),不論是用nav mesh還是用waypoint,這些數(shù)據(jù)都要重新構(gòu)造,而這個構(gòu)造過程一般來說將會是漫長的,但是地形的重建卻可能會是相當頻繁的。。。還有AI對象的出生數(shù)據(jù),等等,這都需要我們花一些精力去思考。
當然,一切能夠想得到的問題都不會是大問題,總會有方法去解決它們。今天覺得不可能做到的事,隨著明天硬件環(huán)境的提升,新的算法的實現(xiàn),這也將成為我們在游戲中能夠親眼看到的事實。