关于id Tech5的MegaTexture技术
最近因为在搞游戏地形的关系,又想起id Tech5的地形技术,以前就看过了一些视频,知道了大概,但一直不是很清楚其基本的实现原理,于是搜索一番,还是有些收获的
首先,来看看wikipedia上面对于MegaTexture的定义:
http://en.wikipedia.org/wiki/MegaTexture
MegaTexture refers to a texture allocation technique facilitating the use of a single extremely large texture rather than repeating multiple smaller textures. It is featured in Splash Damage's game, Enemy Territory: Quake Wars and was developed by id Software technical director John Carmack.[citation needed]
MegaTexture employs a single large texture space for static terrain. The texture is stored on removable mediaor the hard drive and streamed as needed, allowing large amounts of detail and variation over a large area with comparatively little RAM usage.[citation needed]
Then during rendering, required parts of the texture space are streamed inside dynamically (re-)allocated textures in video memory, scaled to the correct mipmap level(s) depending on the polygon size. This allows the engine to reduce the number of texels in VRAM/number of pixels on the screen ratio (the goal being getting closer to 1), saving memory.
The upcoming games Doom 4 and Rage, powered by the id Tech 5 engine, use textures that measure up to 128000×128000 pixels[1].
id Tech 6 will use a more advanced technique that virtualizes further both the geometry and the texels (texture points): Voxel Spare Octree (VSO). This works by not using geometries anymore (triangles and textures) but by instead storing colored 3d points in an octree. The goal being to be able to stream parts of the octree, going further down along the tree for nearby objects to give them more details, and to use higher level, larger voxels for further objects, which give an automatic level of detail system for both the geometry and the texture space at the same time. Despite most Voxel rendering tests end using very large amount of memory (up to several Gb), John Carmack claimed he's able to compress such VSO to 1 byte per voxel.
翻译的大意:
MegaTexture使用一张贴图来表现整个地表的像素外观,通过动态定位和载入所需的该贴图的局部的合适mipmap,来节约显存开支(这里说到选择mipmap level是基于polygon size的,不是很清楚实际的做法,估计可能是基于地形自身的polygon,但考虑上地形polygon可能会有的LOD,情况就比较复杂)
Doom4和Rage都将使用最大为128000x128000的MegaTexture(这说明Doom4可能会有大量的室外场景?)
id Tech6会使用一种叫做VSO的更为先进的技术,同时虚拟场景几何和图素(关于VSO,完全不懂鸟),这意味着将不再使用传统的场景几何(三角形+贴图),而是通过octree储存彩色化3D点(这句话我自己也无从了解,所以翻译仅供参考了),目标就是动态载入octree的局部,对近处的物体,沿着此树往下以获得更多细节,而对于远处的物体,则使用更高级别、更粗大的voxels(现查,voxels即volumetric pixels,可以理解为三维像素),这样就给场景几何和贴图同时提供了LOD系统。尽管多数的Voxel渲染测试都反映需要很大量的显存(几个G),卡马克表示他已经能够把每个三维像素压缩到1字节
注:下面提到的姚勇的pdf里面,说到Doom3里已经有MegaTexture的实现了(没有另外去查询考证),尺寸最大32768x32768,不使用传统LOD和地形的Geometry Morphing,可见卡马克同学还是比较“激进”的,那么多年前就已经搞这个,和UE3(地形LOD+Morphing)果然是截然不同的思路阿
通过google搜索,发现了另一篇好文,作者是姚勇(很多人应该知道的八):
http://blog.csdn.net/puzzy3d/archive/2007/08/16/1746589.aspx
点这个页面里的pdf连接
这个pdf写得很好啊,我这样的小白一看就基本明白MegaTexture背后的实现原理了,就是基于一种叫做clipmap的技术,clipmap顾名思义,就是把map的一部分clip下来用,每次更新需要的局部
关于clipmap,据说是SGI在1998年的时候最先发表的(我没去考证),这里有SGI关于此技术的文章一枚:
这文章前半段还可以看看,对于非图形程序员的普通群众来说,看起来恐怕都会和我一样累
如果不愿意看这篇文章,你还可以去下载SGI当年那篇文章的pdf:
另外,clipmap这类原理的技术,在3d虚拟和大规模地形系统上(比如google earth),好像也颇为有用,关于google earth,最近找到一篇很赞的文章,打算花点功夫翻译出来(希望还没人干过这件事情)
特地又重看了一下Tech 5的引擎演示, 这次的感觉就和以前不一样了,MegaTexture如果只是一个换了名字的clipmap,那其实也没啥好说的,Doom3里面也有,但没见id以前怎么力推过。之所以tech 5要主推MegaTexture,还是因为有了一套为其配合的高效制作工具。
其实clipmap技术和传统基于tiling的技术注定要在制作上走两条完全不同的路子。tiling技术的思路就是,我只做局部,然后让局部不断重复产生出整体,EPIC到UE3这一代为止,就是努力贯彻这种思路,所以不光是贴图可以tiling,连模型也强调模块化和拼接(当然模块化的涵盖比tiling要大一些)。这种思路的优点就是制作效率高、资源利用率高、资源存储节约,缺点么,就是视觉上容易重复,制作上需要考虑避免突兀和不均匀(尤其是贴图,tiling贴图往往会导致趋向于均匀和缺乏反差从而无从表现个性化细节),在动态载入和LOD上,只能用一些较土的手段,总体就是不适合做富有变化的大规模地形。而clipmap,说白了,就是每一个像素都可以特殊处理,都不会因此而影响运行效率,且天生对动态载入和LOD有很棒的支持,对内存和显存的消耗还好,对外存的需求就很大了,但毕竟外存的容量发展比较快。但clipmap的问题是,如果每一个像素都要制作,那么制作上的工作量就极大,所以使用此类技术的游戏,应该都会想办法开发一些减轻工作量的工具,据Porky同学说WIC是“先用地形系统根据高度坡度等生成自然贴图和lightmap, 公路和deco会往上投射公路和爆炸坑等贴图,然后导出到PS里手画其他一些东西,比如平地上的沙坑啥的”,用PS画是一种方式,但问题是毕竟导进导出麻烦且不直观,而tech 5的工具所提供的,就是一套内嵌的"PS",让美工直接在场景里面绘制,那些stamp,其实很像PS里面的各种不同造型的笔刷,然后tech 5编辑器还提供这些“笔刷”绘制后的互相的叠加效果(这其实就是PS里面图层之间的混合模式),所以,tech 5的MegaTexture,好玩就好玩在这里,感觉在编辑器层面,那个“大贴图”就是一个巨大的PSD文件阿
所以id和EPIC的确是个性很不一样的公司,我特期待EPIC会把UE4设计成什么样子
作者:麒麟子
出处:http://www.cnblogs.com/qilinzi/
蛮牛专栏:麒麟子
简介:麒麟子,编程15年,科技创始人,技术作家。
09年进入游戏行业,16年创立成都幼麟科技有限公司。十年从业经验练就了游戏全栈技能,目前专注于手机游戏领域。
版权声明:本文版权归作者和博客园共有,欢迎转载。转载必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。