Terrain 算法整理。基本常識。

Terrain 算法整理。基本常識。

在這裏插入圖片描述
製作地形的方法大致分爲 Voxel, Height map, Mesh 這幾種,會根據使用的技術有各自的長短處,常識上的長短處如下。Unity 用的是高度圖,所以說明下這個方式。在這裏插入圖片描述

高度圖地形的構成大概有4種,內存管理系統最重要也很難。

(1) 用高度圖貼圖製作的Mesh ( CPU -> 變成 GPU )
(2) Splitting 畫出的貼圖 ( 跟着 GPU 的發達,算法也在持續發達 )
(3) 內存管理系統 ( Stamp 單一 -> Tiled ,變成很多個 )
(4) 地圖上的物體管理系統 ( group LOD )

以前的方式裏地形的 Mesh 數據在世界座標上以網格分 Chunk 管理。 LOD 離鏡頭越近每 Chunk 的 detail 越高,離鏡頭越遠每Chunk的detail越低。 調 detail 叫做 ROAM 方式, cpu 會把 LOD 等級有變化的 Chunk 的 vertex buffer 和 Index buffer 都進行更新。

Unity 會把一個 Chunk 用四分樹預先做好 detail LOD。然後根據 LOD 等級選擇畫自己還是畫預先生成的精緻的4個子 Chunk 進行渲染。
因爲邏輯方式的問題,受 LOD 影響的 Chunk 每個階段會增加4倍的Drawcalla。因爲會佔內存,不適合做大地圖。

之後的 GPU 方式算法 geometry clipmaps 是2004年出的,實際上是 dx9 上市後可以從 vertex shader 讀取貼圖數據後開始使用的。
這個算法跟以前的不一樣,不是以世界爲中心(World Space) 而是以鏡頭爲中心(Camera Space or View Space )畫出預先做好的地形Chunk。高度和法線是在 vertex shader 階段從貼圖讀取計算的。
Vertex Buffer的結構是越靠近中心渲染的精緻度更高,越遠相對越低,因爲是鏡頭爲中心的地域座標(Local coordinate ),所以不需要 Mesh LOD。
現在是在 Unreal landscape,2018年新出的 Unity 新地形系統裏使用的。

在這裏插入圖片描述

最後一種方法是使用 Geometry Shader 和 Tessellation ,因爲需要 Shader model 5.0 硬件所以沒有正式選擇的引擎,所以不提取這種方式了。( <= 這基本是 voxel 和 height map 的混合方式)

然後是畫在地形上的貼圖。

地形跟普通的Mesh不一樣,多個貼圖根據製作人員做出的權重 Weight 隨着 Layer混合,所以沒什麼可說的。
主要是怎麼混合,以前的方式是根據 Weight 乘與 Linear 進行 Blending ,最近是用各種算法加 Weight value 可以更好的混合。
另外,使用 opengl es3.0 和 dx10 添加的 texture2DArray 會管理起來更方便。

以前地形是一個,但是現在地圖越來越大還出現了無縫地圖,所以用一張圖已經駕馭不了。 所以做出了拼接多個地圖實時儲存加載的功能 Tiled 。
概念上雖然只是拼接,但實際上需要費很大精力管理。
在 Back-end 持續跟着鏡頭的移動讀取和解除進行 LOD 不是一件容易的事情。
2018 將上市的新地形系統上是支持的。

我想說下最重要的一項工作 - 管理地圖上的物體。 簡單來講都是 LOD,以組爲單位的 LOD 到最下面 Mesh 爲單位都需要管理。
但是隨着越來越大,要不要渲染,Mesh要用哪個,有沒有遮蓋,Lightmap是不是烘焙過的,有沒有GI信息 等等,從上面說過的可以做 Tiled 的系統開始會非常複雜。
比起 LOD, 把用在 LOD 的各個階段資源在 back-end level 讀取和解除做管理會更難。
爲了完成這種工作制作了 Mega texture ,也出現了 Sparse texture ,這方面的工作在持續發展。 這些操作都是用非同步 streaming 讀取和解除的。
現在還沒有提供一個完美的系統的引擎。
這就意味着這部分都是要製作的;;;

Reference.

https://developer.nvidia.com/gpugems/GPUGems2/gpugems2_chapter02.html
https://docs.unity3d.com/2018.1/Documentation/Manual/SparseTextures.html
https://www.khronos.org/registry/OpenGL/extensions/EXT/EXT_sparse_texture.txt
https://en.wikipedia.org/wiki/ROAM

About JP

鏈接: Website.
在這裏插入圖片描述
在這裏插入圖片描述
出生在韓國的TA。
1997年開始從事電腦圖形視覺化工作後,在這個行業已經有21年經驗了。
在多個網絡遊戲公司引領過美術團隊,之前在allegorithmic擔任TA負責人,在中國網易盤古工作室擔任TA總監,現在是巨人網絡TA部門的總負責人。
懶惰的人才有創意”是他堅信並執行的哲學道理。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章