godot 随机地图4 使用 cellular 创建基础地图
我们先看cellular能够创建那些procedure texture吧
voro noise

techno

这些都是根据cellular生成的。
一、voronoise
简单介绍下cellular的生成原理
生成核心点,判断uv离哪个基点最近,然后填充那个基点的颜色。

如果这样的话,就会全部遍历一次。
为了减少运算量,被优化成网格的方式

这样只需要判断所在3*3的网格里面,一个uv只需要判断9次,没错是9次。当然还可以继续优化,但是相比uv*n*n次缩减到uv*3*3次已经是指数级减少,如果还需要更骚的化,也是可以的,我们的目的不是把300fps的算法提高到1000fps。

我们拿到了uv最靠近的顶点的坐标和距离就可以实现很多骚操作了。
可以直接去看我shadertoy写过的
https://www.shadertoy.com/view/ftdczX


这里效率低下一点也没啥关系,2k也能跑。
现在已经8成正确了,不需要追求10分。
直接移植过去,现在之所以不用FNL,是为了熟练一点。还有一个很重要的就是voroniose和techno只相差1行代码,如果要骚操作地图生成,还是得自己玩弄noisetexture比较好。

简单修改,根据错误提示修改就好了
1、其中UV为const 不能*= ,我也难得在添加一个变量,直接*=10.0f
2、vec2(i,j)是非法的,因为i和j是int,强制转化一下
3、iTime改为TIME
4、fragColor 改为COLOR

这个流动的细胞体,如果去掉

就会得到网络

所以这里的TIME我们最好手动控制,也就是说控制网络点的offset,就可以控制离散度。这里FNL可不会给我们提供参数。不过FNL也确实方便。
如果我们要控制offset

二、techno Manhattan distance
如图

还有一些骚操作


简单修改

当然fnl已经有了

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



魔改成Turbulence

使用Euclidean distance欧几里得距离计算法

再翻转

三、转成map
只需要把texture_sprite的material改了



因为我们使用翻转后会有很多聚集在0.5附加,然而越是结晶1.0,月白,我这时候选择0.0~0.3的数据就会得到一下镂空的效果。

其他的操作我们在下一章继续。