godot 隨機(jī)地圖1-noise
之前用unreal整了一個出來,效果反正夠用,但是效率絕對拉胯,因為getpixel是從顯存到內(nèi)存,而且不是優(yōu)化的。因為unreal已經(jīng)刪掉了fbo這個功能。
在godot中,是一款面向2D的游戲,所以他專門弄了一個class noise,在class texture中還有專門的noisetexture的子類。
當(dāng)然noise的生成在gpu上,所以要獲取他們也很容易,只需要await changed后,在用image保存texture,在把image轉(zhuǎn)化為data就好了。
以下是godot的官方文檔的使用方式。

var texture = NoiseTexture2D.new()
#給指針分配內(nèi)存
texture.noise = FastNoiseLite.new()
#在GPU上快速生成 FASTNoise
await texture.changed
#因為nosie的生成是單獨線程,等他跑完
var image = texture.get_image()
#把數(shù)據(jù)從顯存復(fù)制到內(nèi)存中
var data = image.get_data()
#把image的數(shù)據(jù)轉(zhuǎn)化為PackedByteArray
其中PackedByteArray就是一個高效的string

這要要把它變?yōu)橐粋€tilemap,速度是非??斓谩?/p>
◇簡單看一下noisetexture的屬性

也就是關(guān)于noise的清晰度和連接處的關(guān)系。
直接上源碼


運行結(jié)果

總結(jié):作為游戲引擎,設(shè)計理念非常棒,小bug只是一些常見的問題,使用c#就沒啥問題。
標(biāo)簽: