【基於dx或gl】怎麼用兩張地圖(heightmap和colormap)實現高解析度的地形?
圖片像素5632x2048,出自遊戲《歐陸風雲4》,想問一下它是怎麼做到如此高解析度的三維地形
沒玩過大明風雲4,但玩過同引擎(Clausewitz Engine)的肛鐵雄心4...
Heightmap的解析度不足可以通過插值來美化,Clausewitz Engine貌似對Heightmap直接採用線性插值,題主可以試試平滑插值,此外,遊戲中的法線貼圖(對應world_normal.bmp)也對提高地形細節起到很重要的作用,儘管它的解析度比Heightmap還小 - 只有後者的四分之一.
至於地形紋理,實際上Clausewitz Engine還是採用了Tilemap作為地形紋理,對應遊戲數據中的atlasX.bmp,地形的Tile是通過terrain.bmp來決定,題主提到的colormap實際上有兩個作用,其一是渲染遠景(鏡頭拉到最遠)時作為地形紋理;其二是在渲染近景時用做Tintmap,簡單地說,Tintmap就是對地形的顏色修正,比如同樣是沙漠,老版本中能讓義大利玩家累到吐血的撒哈拉沙漠就要比新疆的沙漠顏色偏黃一些. (不過在遊戲中只有在遠景下效果最明顯,近景時由於遊戲有色彩校正(與Tintmap不同,Tintmap是對地形模型上的顏色修正,說白了就是一層多重紋理...而色彩校正是針對全屏幕的後處理效果)所以看到的效果有偏差)
圖:鋼4的terrain.bmp,其中一種顏色對應一種地形,一或多種地形對應一種Tile
圖:鋼4的皋清Tilemap,你以為僅憑一張colormap就能繪製出皋清地形嗎? na?ve!
圖:鋼4中的colormap的一部分,很明顯左下方讓無數義大利玩家打到懷疑人生的黑非洲的沙漠顏色要比右上方新疆的沙漠顏色偏黃很多.
圖:然而在terrain.bmp中,兩者都是同樣的地形(沙漠)
圖s:不過在遊戲中是可以明顯看出兩者有差異的,這便是colormap在近景時的作用.
不夠明顯? 那就換個更明顯一些的栗子,以一個mod中的地形舉例,下圖所示的陸地都是採用一種草地地形,差異只有高度圖、法線和colormap.
圖:mod中的colormap
圖:實際遊戲中拉到中遠距離時的效果,此時colormap的顏色仍佔主導,可以看到colormap中偏左側的荒地在地形上形成的偏黃色區域.
圖:當拉到近景時,可以清楚看到Tilemap的痕迹,以及colormap在近景地形上留下的效果.
那麼遊戲中有沒有用Tilemap穿幫(讓玩家看出明顯的重複性地形)的時候呢? 非常少...首先遊戲製作者竭力避免大片相同的Tile堆積在一個區域,能明顯看出大量Tile重複的只有西伯利亞和加拿大東北,然而那些地方被製作者們用地形的凹凸掩飾住了,前文提到的colormap提供的Tintmap功能也有很大的貢獻,這兩者雙管齊下,基本很難找到穿幫的地方. 你說那片粉色和深綠色的東西? 呃其是那是雨林和樹林...
圖:以亞馬遜雨林為例,在中遠距離上Tilemap痕迹還是很明顯的.
然而一旦拉近了就會被樹林刷屏,因此除非有意否則很難留意到Tilemap的痕迹.
所以...僅憑一個低清colormap繪製皋清地形有些難,要麼換個更高清的colormap,要麼就用高清tilemap+低清tintmap修正顏色吧. (逃
沒玩過不清楚細節,但灰度圖成模型取決於模型網格數,顏色圖只生成基礎顏色,凹凸細節可用小貼圖重複,正常來說大模型和貼圖都是按攝像機裁剪分區載入。
高解析度的地形是指地形網格還是地形的紋理。
如果是網格,取決於你生成的頂點的間距。(你應該不會把整個地形都一次生成吧)
如果是紋理。與你生成頂點時賦予它的紋理坐標,以及如何採樣紋理都有關係。我仔細看了一下,高度圖heightmap.bmp和色彩圖terrain.bmp圖片像素都是5632x2048,我曾經試過一張32768x10032的世界地形地圖,大小1.2G,像素數3.2億,放大以後發現解析度遠遠劣於eu4的地圖
我認為p社是先使用heightmap.bmp構建3d模型;
再使用terrain.bmp給模型粗略地上色。如尼羅河河谷、德國森林的深綠,撒哈拉的金黃等等;
再使用反光、材質有關的world_normal.bmp進行細化和修飾。其中材質應該是同一的,例如北京和倫敦使用同樣的材質;
最後通過rivers.bmp和trees.bmp的分布放置平面的河和面片樹(甚至就是一個2D的樹,因為視角不能旋轉)
把地形的tile細分到足夠小
如果你說的是地形的三維複雜度,那是因為高度圖(即第二張灰度圖)的解析度本來就足夠高,包含的高度信息足夠生成這樣的地形細節。
至於地面貼圖什麼的看起來解析度高,就跟這兩張圖沒什麼關係了。
camera拉的足夠遠,別忘了調整near plane哦
你沒搞懂,高度圖是用於軟體中由平面生成凹凸地圖的。
做這樣的地圖,和做普通模型一樣的,靠的是低面數的低模,法線貼圖或者置換貼圖,高光貼圖,最後才是色彩貼圖。推薦閱讀:
※如何在遊戲中模擬一片沙漠?
※如何從零開始寫一個簡單的遊戲引擎?
※為什麼遊戲裡面人物的動作那麼的僵硬?
※使一個3D引擎實現基於物理渲染(PBR)的材質的流程是怎樣的?
※MOBA類遊戲是如何解決網路延遲同步的?