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