最近因為在搞游戲地形的關(guān)系,又想起id Tech5的地形技術(shù),以前就看過了一些視頻,知道了大概,但一直不是很清楚其基本的實現(xiàn)原理,于是搜索一番,還是有些收獲的
首先,來看看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使用一張貼圖來表現(xiàn)整個地表的像素外觀,通過動態(tài)定位和載入所需的該貼圖的局部的合適mipmap,來節(jié)約顯存開支(這里說到選擇mipmap level是基于polygon size的,不是很清楚實際的做法,估計可能是基于地形自身的polygon,但考慮上地形polygon可能會有的LOD,情況就比較復(fù)雜)
Doom4和Rage都將使用最大為128000x128000的MegaTexture(這說明Doom4可能會有大量的室外場景?)
id Tech6會使用一種叫做VSO的更為先進的技術(shù),同時虛擬場景幾何和圖素(關(guān)于VSO,完全不懂鳥),這意味著將不再使用傳統(tǒng)的場景幾何(三角形+貼圖),而是通過octree儲存彩色化3D點(這句話我自己也無從了解,所以翻譯僅供參考了),目標(biāo)就是動態(tài)載入octree的局部,對近處的物體,沿著此樹往下以獲得更多細(xì)節(jié),而對于遠(yuǎn)處的物體,則使用更高級別、更粗大的voxels(現(xiàn)查,voxels即volumetric pixels,可以理解為三維像素),這樣就給場景幾何和貼圖同時提供了LOD系統(tǒng)。盡管多數(shù)的Voxel渲染測試都反映需要很大量的顯存(幾個G),卡馬克表示他已經(jīng)能夠把每個三維像素壓縮到1字節(jié)
注:下面提到的姚勇的pdf里面,說到Doom3里已經(jīng)有MegaTexture的實現(xiàn)了(沒有另外去查詢考證),尺寸最大32768x32768,不使用傳統(tǒng)LOD和地形的Geometry Morphing,可見卡馬克同學(xué)還是比較“激進”的,那么多年前就已經(jīng)搞這個,和UE3(地形LOD+Morphing)果然是截然不同的思路阿
通過google搜索,發(fā)現(xiàn)了另一篇好文,作者是姚勇(很多人應(yīng)該知道的八):
http://blog.csdn.net/puzzy3d/archive/2007/08/16/1746589.aspx
點這個頁面里的pdf連接
這個pdf寫得很好啊,我這樣的小白一看就基本明白MegaTexture背后的實現(xiàn)原理了,就是基于一種叫做clipmap的技術(shù),clipmap顧名思義,就是把map的一部分clip下來用,每次更新需要的局部
關(guān)于clipmap,據(jù)說是SGI在1998年的時候最先發(fā)表的(我沒去考證),這里有SGI關(guān)于此技術(shù)的文章一枚:
http://techpubs.sgi.com/library/tpl/cgi-bin/getdoc.cgi?coll=0650&db=bks&srch=&fname=/SGI_Developer/Perf_PG/sgi_html/ch15.html
這文章前半段還可以看看,對于非圖形程序員的普通群眾來說,看起來恐怕都會和我一樣累
如果不愿意看這篇文章,你還可以去下載SGI當(dāng)年那篇文章的pdf:
The Clipmap:A Virtual Mipmap
另外,clipmap這類原理的技術(shù),在3d虛擬和大規(guī)模地形系統(tǒng)上(比如google earth),好像也頗為有用,關(guān)于google earth,最近找到一篇很贊的文章,打算花點功夫翻譯出來(希望還沒人干過這件事情)
特地又重看了一下Tech 5的引擎演示, 這次的感覺就和以前不一樣了,MegaTexture如果只是一個換了名字的clipmap,那其實也沒啥好說的,Doom3里面也有,但沒見id以前怎么力推過。之所以tech 5要主推MegaTexture,還是因為有了一套為其配合的高效制作工具。
其實clipmap技術(shù)和傳統(tǒng)基于tiling的技術(shù)注定要在制作上走兩條完全不同的路子。tiling技術(shù)的思路就是,我只做局部,然后讓局部不斷重復(fù)產(chǎn)生出整體,EPIC到UE3這一代為止,就是努力貫徹這種思路,所以不光是貼圖可以tiling,連模型也強調(diào)模塊化和拼接(當(dāng)然模塊化的涵蓋比tiling要大一些)。這種思路的優(yōu)點就是制作效率高、資源利用率高、資源存儲節(jié)約,缺點么,就是視覺上容易重復(fù),制作上需要考慮避免突兀和不均勻(尤其是貼圖,tiling貼圖往往會導(dǎo)致趨向于均勻和缺乏反差從而無從表現(xiàn)個性化細(xì)節(jié)),在動態(tài)載入和LOD上,只能用一些較土的手段,總體就是不適合做富有變化的大規(guī)模地形。而clipmap,說白了,就是每一個像素都可以特殊處理,都不會因此而影響運行效率,且天生對動態(tài)載入和LOD有很棒的支持,對內(nèi)存和顯存的消耗還好,對外存的需求就很大了,但畢竟外存的容量發(fā)展比較快。但clipmap的問題是,如果每一個像素都要制作,那么制作上的工作量就極大,所以使用此類技術(shù)的游戲,應(yīng)該都會想辦法開發(fā)一些減輕工作量的工具,據(jù)Porky同學(xué)說WIC是“先用地形系統(tǒng)根據(jù)高度坡度等生成自然貼圖和lightmap, 公路和deco會往上投射公路和爆炸坑等貼圖,然后導(dǎo)出到PS里手畫其他一些東西,比如平地上的沙坑啥的”,用PS畫是一種方式,但問題是畢竟導(dǎo)進導(dǎo)出麻煩且不直觀,而tech 5的工具所提供的,就是一套內(nèi)嵌的"PS",讓美工直接在場景里面繪制,那些stamp,其實很像PS里面的各種不同造型的筆刷,然后tech 5編輯器還提供這些“筆刷”繪制后的互相的疊加效果(這其實就是PS里面圖層之間的混合模式),所以,tech 5的MegaTexture,好玩就好玩在這里,感覺在編輯器層面,那個“大貼圖”就是一個巨大的PSD文件阿
所以id和EPIC的確是個性很不一樣的公司,我特期待EPIC會把UE4設(shè)計成什么樣子
http://lichong.blogbus.com/tag/clipmap/