沒有辦法WOW太經典,當自己碰到問題的時候再回頭研究wow發現wow盡然沒有問題,暴雪的游戲制作經驗讓wow一開始就設計的如此講究,不得不感嘆國內游戲同世界設計方面的差異。
由于沒有wow的源代碼,所有的分析想法都來自與wowmapview這個開源的wow地圖察看器,wowmapview的代碼寫的很凌亂,但很容易理解,好了,我們開始吧!Gogo
wow場景是由一系列MapTile組成,這些MapTile的大小是1600/3 ≈ 533.33m,而每個MapTile又是由 16x16 個MapChunk組成,由此可以計算出每個MapChunk≈33.33m,如圖:
在wow中,一個MapTile是有由一個adt文件描述。
比如World\Maps\AhnQiraj\AhnQiraj_29_48.adt文件就描述在xz(29,48)位置的MapTile,每個MapTile都包含了該tile內使用的貼圖(引用外部)、模型(引用外部)、wmo(MapObject)、模型實例、wmo實例,所謂模型實例就是相同模型在tile內不同擺放位置、大小、角度的說明信息,在wow引擎中的術語是doodad,即可以隨意擺放的小東西,wmo實例類似。為了節省文件尺寸,模式實例、wmo實例是通過index模型、wmo的方式保存的,同頂點索引類似。
每個MapChunk又由9x9+8x8個地形頂點高度,法線,若干貼圖層(一般為4層),水面,Alpha貼圖層(用于控制地表貼圖的混合比例,一般為3張,尺寸64x64)和一層shadow map(64x64)組成。如圖,由此可推算出wow的地面精度≈2m
Wow的地表是非常精細的,這與它使用了alpha貼圖控制地表混合比例有關,而一般的引擎則把地表貼圖的混合比例放在地表頂點中記錄,這樣地表的精度將同頂點密度保持一致。
Wow使用固定方向光照,所以可以使用shadow map來模擬樹、房子等在地表透射的陰影,shadow map的尺寸也是64x64,可見陰影的精度也是非常高的。
這樣的地形頂點分布是wow在最高地表精度下的高度頂點布局,當相機遠離MapChunk時,這個高度頂點的布局可能是這樣:
此時,地表的精度≈4m。
Wow的地表是支持挖洞的,有意思的是為了節省空間,其標示挖洞的信息數據就是一個int,通過使用位運算來得到一個4x4精度的挖洞信息,我們不放把這種4x4的洞叫做holeChunk,每個holeChunk支持4種狀態來標示其內部2x2的洞分布狀況,由此可見wow在數據結構方面已經發揮到了極致:對于需要精密表現的地表好不吝嗇的使用64x64混合貼圖,而對于hole這種只需要粗略(一半還不使用的東西)的記錄一個int。