天天看點

4層紋理的動态地形生成

Demo視訊觀看

以前不少人對我提出過這樣的需求疑問,如何在遊戲進行之中改變地形之類。這種需求最多是出現在虛拟現實中,比如一個什麼挖掘機挖出一個坑,地形跟着變化之類。其實在遊戲裡面有時也會出現這樣的需求,比如突然掉下一塊隕石,地表砸出一個大坑,然後那一個區域變成不能行走之類。

我也來做做這樣的效果。順帶一說,估計很多人會問我效率的問題,我這個在小米2S上面測試是随便都能60幀滿幀的,其他機器沒試過。

使用腳本,生成了一個平的地面,地面的寬高和段數是可以動态輸入的。

4層紋理的動态地形生成

然後随便用滑鼠在地面上面點幾下,出現了幾個坑:

4層紋理的動态地形生成

進入scene視圖看看,網格确實發生了變化,而且随着挖出的坑的深度不同,出現了不同的紋理:

4層紋理的動态地形生成

我們接着随意的用滑鼠在地面上劃動,出現了一條條的溝,這是可以更清晰的看到紋理随着深度的變化:

4層紋理的動态地形生成

這時候scene視圖是這樣的:

4層紋理的動态地形生成

好,接下來說說制作的原理:

首先,肯定是得寫一個shader,分别對應多層的紋理,和一張遮罩的圖檔(這個方法之前的日志介紹過,也分享過源碼)。

4層紋理的動态地形生成

然後,使用動态生成mesh的方法(具體方法我以前也說過),通過高度圖來生成網格的高度。

這裡我的紋理遮罩和高度圖是同一張圖檔,這樣挖的深度和紋理的變化就能對應起來了。而由于這張圖檔必須是可以讀寫的,是以我這裡是使用了New一張texture2D出來的。至于這張遮罩的寬高,可以在腳本設定。

接下來的事情就簡單了,就像做一個繪圖闆一樣,使用射線去擷取滑鼠點選地形的位置,然後改變遮罩圖檔的顔色,然後,效果就出來了。

我們還可以随意的改變材質裡面的貼圖的順序(截圖中的圖檔通道名稱是錯誤的,由于複制代碼,都是Second了……),可以很友善的改變地形紋理的外觀,比如把第一張和第四張紋理調轉

4層紋理的動态地形生成

就會出現了上面是山下面是草地的效果了。

4層紋理的動态地形生成