2010-10-25 42 views
3

我有一個無限程序生成的地形遊戲。我使用1/f噪聲作爲高度(我認爲這是perlin噪聲?)。無論如何,它看起來不錯,但它並不是非常可玩,因爲它並不真正擁有平坦的區域。只是減小幅度將不起作用,因爲我仍然想要高度變化很大。有誰知道我可以應用於高度圖的過濾器來鼓勵平坦的區域,同時保持高度的範圍?可玩高度圖

用C#編寫

編輯:我意識到,我想要的是陡坡變得更陡峭,並且平梯度變得平坦。地形不需要現實,對於FPS來說只是「有趣」。

回答

2

我相信你需要使用平滑功能來擺脫地形的鋸齒狀,如果這似乎是你的問題。

我只是通過這個頁面看了看,但它可能是一個不錯的指南:http://www.float4x4.net/index.php/2010/06/generating-realistic-and-playable-terrain-height-maps/

+0

這看起來不錯!我試圖實現它,但侵蝕步驟似乎不適合我的高度圖,我可能只是有壞的參數?我會多花一些時間 – Hannesh 2010-10-25 19:26:17

+0

鏈接將我重定向到一個陌生的廣告。 :( – Alaanor 2017-02-06 14:02:25

0

然後您可以按median filter進行過濾。它會使你的表面變平。但它會摧毀山脈。這對於凹陷和高原等相對平坦的區域來說很好。如果你想要銳利的山脈(快速和大高差),你應該選擇性地使用這個過濾器。

2

不知道這是否會有所幫助,但是您可以使您的函數範圍轉換爲高概率的平坦表面。例如,0.1和0.3之間的所有結果都有80%的結束概率爲0.1表面。這樣你就可以鼓勵平坦的表面,但保持你想要的高度可變性。

+0

這使得地形看起來很人造,我有很多平坦的表面,但它們都處於同一水平。 – Hannesh 2010-10-25 19:25:26

0

你應該尋找更多的材料,特別是具有程序上的紋理和噪音。這三個關係很大。您應該考慮使用多個不同參數的噪聲函數,並使用不同的函數或運算符將它們組合在一起。

爲了幫助您的情況,您可以使用一種功能來生成高頻噪聲,然後將其乘以低頻噪聲。這將導致低頻噪聲接近1的峯值和接近0的平坦度。某種平滑/侵蝕算法也很酷。但是你仍然需要大量的試驗和錯誤,並且微調你的參數以獲得至少可用的結果。

一些更復雜的terains可能需要超過10個alpha混合或平滑等噪聲功能。不要以爲你會通過簡單的過濾器獲得漂亮的地形。

2

簡單的噪音不足以產生美觀的地形。這只是一個更復雜過程的中間步驟之一。你需要模擬一些現實世界的現象:溫度,侵蝕,降水,這類事情。這通常是一個CPU繁重的過程,但非常值得努力。這裏有一些有趣的鏈接:

地牢聯盟 - 閱讀所有。好東西。

上Doryen編年史

世界生成文章:

(您也可以下載產生過,但它寫在C++)

+0

雖然我認爲這是個好主意,但我不認爲OP需要如此複雜的模擬,但它會讓他很好地理解事情是如何運作的。 – Euphoric 2010-10-25 18:46:40

1

你需要一個 「主隨機數生成器」 是將根據您選擇的頻率決定新區域應該是什麼樣子。對於山來說,選擇你已有的東西。對於單位選擇較少的噪音。