[转载]我也来分析魔兽世界--场景组织

转自: http://www.sineysoft.com/post/52

没有办法WOW太经典,当自己碰到问题的时候再回头研究wow发现wow尽然没有问题,暴雪的游戏制作经验让wow一开始就设计的如此讲究,不得不感叹国内游戏同世界设计方面的差异。

由于没有wow的源代码,所有的分析想法都来自与wowmapview这个开源的wow地图察看器,wowmapview的代码写的很凌乱,但很容易理解,好了,我们开始吧!Gogo

wow场景是由一系列MapTile组成,这些MapTile的大小是1600/3 ≈ 533.33m,而每个MapTile又是由 16×16 个MapChunk组成,由此可以计算出每个MapChunk≈33.33m,如图:

在wow中,一个MapTile是有由一个adt文件描述。

比如WorldMapsAhnQirajAhnQiraj_29_48.adt文件就描述在xz(29,48)位置的MapTile,每个 MapTile都包含了该tile内使用的贴图(引用外部)、模型(引用外部)、wmo(MapObject)、模型实例、wmo实例,所谓模型实例就是 相同模型在tile内不同摆放位置、大小、角度的说明信息,在wow引擎中的术语是doodad,即可以随意摆放的小东西,wmo实例类似。为了节省文件 尺寸,模式实例、wmo实例是通过index模型、wmo的方式保存的,同顶点索引类似。

每个MapChunk又由9×9+8×8个地形顶点高度,法线,若干贴图层(一般为4层),水面,Alpha贴图层(用于控制地表贴图的混合比例,一般为3张,尺寸64×64)和一层shadow map(64×64)组成。如图,由此可推算出wow的地面精度≈2m

Wow的地表是非常精细的,这与它使用了alpha贴图控制地表混合比例有关,而一般的引擎则把地表贴图的混合比例放在地表顶点中记录,这样地表的精度将同顶点密度保持一致。

Wow使用固定方向光照,所以可以使用shadow map来模拟树、房子等在地表透射的阴影,shadow map的尺寸也是64×64,可见阴影的精度也是非常高的。

这样的地形顶点分布是wow在最高地表精度下的高度顶点布局,当相机原理MapChunk时,这个高度顶点的布局可能是这样:

此时,地表的精度≈4m。

Wow的地表是支持挖洞的,有意思的是为了节省空间,其标示挖洞的信息数据就是一个int,通过使用位运算来得到一个4×4精度的挖洞信息,我们不妨把这种4×4的洞叫做holeChunk,每个holeChunk支持4种状态来标示其内部2×2的洞分布状况,由此可见wow在数据结构方面已经发挥 到了极致:对于需要精密表现的地表好不吝啬的使用64×64混合贴图,而对于hole这种只需要粗略(一半还不使用的东西)的记录一个int。

原文地址:https://www.cnblogs.com/shines77/p/3414898.html