godot 隨機(jī)地圖4 使用 cellular 創(chuàng)建基礎(chǔ)地圖
我們先看cellular能夠創(chuàng)建那些procedure texture吧
voro noise

techno

這些都是根據(jù)cellular生成的。
一、voronoise
簡單介紹下cellular的生成原理
生成核心點,判斷uv離哪個基點最近,然后填充那個基點的顏色。

如果這樣的話,就會全部遍歷一次。
為了減少運算量,被優(yōu)化成網(wǎng)格的方式

這樣只需要判斷所在3*3的網(wǎng)格里面,一個uv只需要判斷9次,沒錯是9次。當(dāng)然還可以繼續(xù)優(yōu)化,但是相比uv*n*n次縮減到uv*3*3次已經(jīng)是指數(shù)級減少,如果還需要更騷的化,也是可以的,我們的目的不是把300fps的算法提高到1000fps。

我們拿到了uv最靠近的頂點的坐標(biāo)和距離就可以實現(xiàn)很多騷操作了。
可以直接去看我shadertoy寫過的
https://www.shadertoy.com/view/ftdczX


這里效率低下一點也沒啥關(guān)系,2k也能跑。
現(xiàn)在已經(jīng)8成正確了,不需要追求10分。
直接移植過去,現(xiàn)在之所以不用FNL,是為了熟練一點。還有一個很重要的就是voroniose和techno只相差1行代碼,如果要騷操作地圖生成,還是得自己玩弄noisetexture比較好。

簡單修改,根據(jù)錯誤提示修改就好了
1、其中UV為const 不能*= ,我也難得在添加一個變量,直接*=10.0f
2、vec2(i,j)是非法的,因為i和j是int,強(qiáng)制轉(zhuǎn)化一下
3、iTime改為TIME
4、fragColor 改為COLOR

這個流動的細(xì)胞體,如果去掉

就會得到網(wǎng)絡(luò)

所以這里的TIME我們最好手動控制,也就是說控制網(wǎng)絡(luò)點的offset,就可以控制離散度。這里FNL可不會給我們提供參數(shù)。不過FNL也確實方便。
如果我們要控制offset

二、techno Manhattan distance
如圖

還有一些騷操作


簡單修改

當(dāng)然fnl已經(jīng)有了

我們可以魔改的地方非常多。
比如我們使用wood texture的算法



魔改成Turbulence

使用Euclidean distance歐幾里得距離計算法

再翻轉(zhuǎn)

三、轉(zhuǎn)成map
只需要把texture_sprite的material改了



因為我們使用翻轉(zhuǎn)后會有很多聚集在0.5附加,然而越是結(jié)晶1.0,月白,我這時候選擇0.0~0.3的數(shù)據(jù)就會得到一下鏤空的效果。

其他的操作我們在下一章繼續(xù)。