godot 隨機地圖5 深入解析voronoise地圖生成
godot是不能使用opencl的,不過用opengl也非常方便,因為godot可以簡化了uniform的傳入,變得簡單多了。
在地圖生成的過程中,我們有很多時間,gta5都可以等5分鐘,一個開放世界生成地圖不能等1分鐘,泡個茶。
我們先對voronoise簡單魔改下,讓uv在上面的1/3的部分填充白色。


這樣就可以得到天空和可以挖掘的地面。
不過這里的網格交點的色彩是隨機的,當然是不行滴??梢杂胾niform傳入頂點色彩,而且有意思的是,godot color 的取值范圍是0~1,不是0~255,這樣非常適合傳入數據,不需要轉化。
加入我使用voronoise 生成 2000*2000的地圖。
那么第一層 一個cell 管理100*100tile,也就是20*20的個cell
在上面的shader里面 uv*10得到 10*10個cell,只需要簡單修改uv的乘積,就可以得到其他的voronoise的層。
接下來改為uv*50

第二層:
這里的最小距離100不夠了,改為1個達卜紐。

因為2000*2000的地圖,每個有50*50個cell,也就是每個cell有40*40,我們可以用來形成大型空洞。當然這個也給他分型一下,也可以家noise,免得那么光滑。
除了空洞,還可以鏤空放置奇特地形和建筑
第三層:
如果是200*200,得到10*10 = 100cell單元,差不多可以用來做礦石。如果cell大一點可以有150個,不過沒關系。
我們可以礦石=>金屬腚=>精煉腚=>裝備 層數越多,越麻煩,就是1000個礦石有咋樣,我一個肩甲需要10*10*10*10 = 1萬個,而且我需要5件套,也就是5萬個,哭死他。
在我設定的游戲里面,裝備存在:金屬裝備、精煉金屬裝備、機甲,也就是說500個就穿套衣服,5000個就能穿套裝,50000個就能開高達,那非常劃算啊,當然這里的曲線隨便設計。想咋來咋來。
總結:
第一層:控制地勢
????400*400cell分型兩次 + noise4次
第二層:控制空洞
????100*100cell分型兩次 + noise3次
第三層:生成礦石
????10*10cell 分型兩次 + noise 2次