使用Covermap實現地形細節

Gb16978發表於2022-07-15

一、Covermap的實現

1、對Covermap的理解

常見的地形制作都是使用Heightmap+Splatmap來實現地形和紋理層混合的效果。

2、Covermap的Shader實現

由於草的本身不受其他光照影響,它的著色基本上就是一個diffusecolor,所以,以草的Shader為例來介紹一下Covermap的Shader實現。

  • Covermap的引數

我們需要宣告兩個引數,一個引數  _Covermap用於紋理的取樣,預設顏色為“gray”灰色。將預設顏色定義為灰色,是因為可以在灰色的基礎上進行疊亮或減暗。

另一個引數  _CoverMappingRect是為了設定Covermap的對映範圍,方便在世界座標中做對齊。預設為(0,0,512,512),如果我們建立的地形大小為512,座標在[0,0,0],那麼Covermap的紋理會準確的對映在地形上。如果地形有偏移,我們需要將偏移的值設定給_CoverMappingRect引數。

在返回顏色值時,只需要簡單的乘上Covermap紋理的顏色,也就是  *_Covermap_var.rgb*2。這裡的乘2是為了將灰色轉為1,預設的Covermap顏色為灰,即*_Covermap_var.rgb*2 = 1,不會對最終效果有任何影響。如果Covermap紋理貼圖上的顏色值>0.5,那麼最後顯示的顏色會變亮,<0.5,最後顯示的顏色會變暗。建議Covermap在Gamma空間下製作,線上性空間使用時勾選sRGB。

  • Covermap的開銷

從上面的實現來看,Covermap在Shader裡的運算很簡單,它的開銷就在於對Covermap紋理貼圖的取樣,和兩次乘法運算。Covermap紋理貼圖的精度不超過1024的情況下,一般不會有太大的效能影響。

二、Covermap的美術製作流程

Covermap的原理和技術實現都很簡單,我們將它應用於遊戲的效果表現中,最重要的還是美術流程上的製作過程。

我們把Covermap的製作流程劃為地形制作流程的一部分,在WorldMachine的地形制作流程中增加光照方位、水紋等輸出紋理,然後在Photoshop中透過圖層合併。

  • 在Covermap上新增陰影細節

一般的製作思路都是地形直接參與光照烘焙,但是當地形尺寸達到1024的級別時,一般會出現兩個問題,一個是烘焙耗時,一個是對地形做切分最佳化後烘焙會有接縫。我們想用Covermap來取代地形的光照烘焙,所以在專案的某個階段我們在3dsMax中烘焙一張陰影圖。還有前文說到的草是不受任何光照的,所以草地也需要其他物件的陰影細節。

我們將場景物件和地形一起匯出,在3dsMax中模擬一盞場景同角度的燈光,然後新增一個攝像機進行對位,渲染出一張陰影圖。將陰影圖疊加到Covermap的最後一層。

如果要使用實時陰影,就需要儲存兩張Covermap進行切換,一張是不帶max投影的。而對於草地,使用帶max投影的Covermap即可。

下圖可以看到最後應用在地形上的效果:


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70019421/viewspace-2906019/,如需轉載,請註明出處,否則將追究法律責任。

相關文章