《我的世界》噪声函数攻略 我的世界噪声函数应用

share

  《我的世界》Perlin噪声函数是WorldEdit 6.0 Beta 1 中加入的功能,很多玩家一看到这高大上的名字和繁多的物理名词就犯难了,其实,只要你弄清一些名称的含义以及参数的作用,完全可以创造出非常复杂的建筑,下面就随我一起来看看吧。

【1】效果预览

  首先,我们在正式开始之前,来看一下这个功能的效果~ 使用这个函数时需要使用一个选区并使用//replace 命令加上需要的参数,这个我们接下来将会讲到。

  下图,我们在创建选区后使用 //replace =perlin(0,x/2,y,z/2,0.05,3,0.8)<0.1 stone

  效果如下图,当然,这个函数的许多参数都可以修改以达到我们希望的效果。

【2】什么是Perlin噪声?

  Perlin噪声指由Ken Perlin发明的自然噪声生成算法,可以生成类似自然界的随机噪声,在许多领域都用应用,与使用纯随机数生成的噪声相比更加自然和柔和。

  下图是一个一维的Perlin噪声波形

  下图是一个二维的Perlin噪声灰度图

  而我们在WE中生成的就是一个三维的Perlin噪声(关于灰度的处理我们接下来会讲到)

【3】不同种类的噪声

  之前我们讲到了随机生成的噪声,它们与Perlin噪声函数的区别是,Perlin函数使用插值函数使波形更加平滑,以更加自然(这后面有许多的计算,我们这里就不讲到了,有兴趣的童鞋可以自己了解一下)

  例如下图是一个一维的Perlin噪声

  而这个则是一个随机的噪声

  虽然Perlin噪声的的频率比随机噪声低,但是还是可以很容易看出二者的不同性。

【4】关于噪声的一些基本定义

  在讲解Perlin噪声的生成方式,我们先看一些关于噪声的基本定义。

  波长(Wavelength)就是两个波谷指尖的距离,频率就是1/波长,波幅(Amplitude)就是波的高度。

  比如下图的正弦波

  下图为一个一维Perlin噪声,可以看到它也拥有波长(所以也有频率)和波幅

  在Perlin噪声中,频率与波幅会控制成出的噪声。

【5】Perlin噪声的生成与倍频

  Perlin噪声是基于种子生成的,也就是说在参数不变的情况下,同样的种子一直会给出同样的结果。Perlin噪声本身是由多个噪声函数相加产生的,这里用一维的Perlin噪声举例。

  可以看到下面四个噪声函数每一个对于上一个的关系都是频率增大,波幅降低。

  如果把上面的四个噪声函数加在一起就形成了下面的Perlin噪声,我们说这个Perlin函数是4倍频,因为它是由四次叠加(遵循每次叠加增加频率降低波幅的规律)完成的,倍频的数量决定了Perlin噪声的精细程度。

  比如下面的四个Perlin噪声,分别是1倍频,2倍频,4倍频与8倍频,可以看到倍频数越高,Perlin噪声就越精细,同时整体形状不会有很大的改变。

【6】二维Perlin噪声

  在看完Perlin噪声的基本特性后,我们来看一下二维Perlin噪声的样子,以便让我们更容易理解WE中(三维)它的应用。

  下图是一个二维的Perlin噪声,可以看到它是一个灰度图,这个的生成比较复杂,就不过多讲解了,不过需要注意的地方是二维的Perlin噪声是一个灰度图,三维也是,灰度的表示为从 0 即纯黑到 1 即纯白。

  在二维上,频率不同的噪声表现为图像的复杂度(可以说是每个像素块的大小),下面的几张噪声图的频率由低到高(图片经过了着色处理,原始噪声应为灰度图),同时波幅降低(可以理解为从黑到白的转换更加平滑)。

  这几张图同时也是一个Perlin噪声的组成部分(即倍频)。

  像一维Perlin噪声一样,将上面的几张图加到一起,便有了了下面的二维Perlin噪声。

【7】Persistence值

  Persistence值是一个值得注意的参数,在Perlin函数中它控制每个倍频与前一个倍频的关系,即频率增加与波幅降低的量,总体来说,这个值越高,Perlin噪声就越粗糙,反之,这个值越低,噪声就越平滑。

  以下是几个除了Persistence值以外其他值都相同的一维Perlin函数,Persistence值分别为 1/4, 1/2 与 3/4。

  下图是一个表格,可以看出不同的Persistence值对每个倍频的频率和波幅以及最后结果的影响。

【8】WorldEdit中的Perlin噪声生成指令

  在讲解完关于Perlin噪声的基本知识后,我们来看一下它在WE中的应用。

  还是使用之前的例子,我们使用的命令是//replace =perlin(0,x/2,y,z/2,0.05,3,0.8)<0.1 stone,效果是在选区内填充指定方块形成的Perlin噪声点。

  让我们逐个来看它的参数:

  //replace

  主命令,是替换方块的命令;

  =perlin()

  函数表达式,表示这是Perlin噪声函数,括号内为参数;

  0

  种子,用以进行随机生成计算,刚才提到了,相同的种子在参数不变的情况下会一直给出同样的结果

  x/2

  X轴的缩放系数

  y

  Y轴的缩放系数

  z/2

  Z轴的缩放系数

  0.05

  第一倍频的频率

  3

  倍频数

  0.8

  Persistence值

  <0.1

  灰度值范围

  stone

  需要使用的方块(这里是石头)

  输入命令后,就成功按参数生成了Perlin噪声

  接下来我们将一一讲解这些参数

【9】种子

  首先是种子。

  下图我们使用的命令是//replace =perlin(1256,x,y,z,0.05,2,0.5)<0.1 35:14,种子是1256。

  而下图使用的种子是 1257,命令即为 //replace =perlin(1257,x,y,z,0.05,2,0.5)<0.1 35:14 。

  可以看到种子不同,生成的Perlin噪声完全不同,种子可以是任何数字。

【10】关于噪声生成的位置

  生成Perlin噪声时需要注意的是,生成噪声时生成的位置坐标也会被带入计算,所以即使是完全一样的命令,在不同的位置生成的效果也完全不一样(你可以想象每个种子都有一个对应的全地图噪声图,生成时会把你指定的部分用方块构建出来,与MC生成地形的方式相似)

  下图为同一命令在两个不同位置的选区执行的结果,以两种颜色的羊毛标注了出来。

【11】缩放系数

  刚才提到了噪声生成的时候是把坐标带入计算的,如果我们为某个轴加上缩放参数,就可以拉伸或挤压该轴来影响生成出的噪声形状。

  下图使用的命令是//replace =perlin(500,x,y,z,0.05,1,0.5)<0.1 35:14。x,y,z 部分便是三个轴的缩放系数了,这里的三个参数都没有受到缩放,所以噪声是按原比例生成的。

  下图使用的命令是//replace =perlin(500,x,y/1.1,z,0.05,1,0.5)<0.1 35:14。

  其他部分没有改变,但缩放参数部分是 x,y/1.1,z 这代表Y轴受到了1.1倍的拉伸,从生成的噪声来看亦可以看出拉伸的效果(实际是计算的时候使用实际的坐标而使用缩放计算过的,所以位置也会稍微改变)。

  下图使用的缩放参数是 x,y/1.2,z 可以看出Y轴上有了更明显的拉伸

【12】噪声频率

  前面我们说到了频率会影响噪声的复杂度,在三维中也是如此,随着频率的增加,生成的形状也会更复杂。

  下图使用的命令是//replace =perlin(100,x,y,z,0.05,1,0.5)<0.3 35:14。

  可以看到频率是0.05,频率的上下限为0与1,不过过高的值会让噪声看起来与随机噪声并无两样,为了更直观看到频率对结果的影响,这里我们设定了1倍频,即没有多次的叠加。

  下图的频率为 0.05

  现在我们在不修改其他参数的情况下逐渐加高频率

  下图的频率为 0.06

  下图频率为 0.07

  下图频率为 0.08

  下图频率为 0.09

  下图频率为 0.1

  下图频率为 0.2

  可以看到生成的噪声已经十分松散了

【13】倍频数

  刚才我们提到倍频数会影响噪声的精细度,更高的倍频数意味着更多次的叠加,在WE中也是如此

  下图使用的命令是//replace =perlin(200,x,y,z,0.05,1,0.5)<0.2 35:14。

  可以看到这里的倍频数是1

  现在我们在不修改其他参数的情况下增加倍频数

  下图为2倍频

  下图为3倍频

  下图为4倍频

  可以看到噪声的整体形状没有很大变化,但精细度随着倍频数增加而提高

【14】Persistence值

  我们提到Persistence值控制了每个倍频之前的频率与波幅差距,这个值越高,噪声就越粗糙,反之越平滑,在WE中也是如此。

  下图使用的命令是//replace =perlin(300,x,y,z,0.05,3,0.5)<0.2 35:14

  Persistence值为 0.5 (可以大致理解为每一个倍频的频率是上一个的两倍,波幅是上一个的一半)

  现在我们在不改变其他值的情况下将它改为 0.25,可以看到生成的噪声十分平滑。

  反之如果我们把他改为0.75,生成出来的效果就十分粗糙,对整体形状也有一定的改变。

【15】灰度值区间

  刚才我们提到了,二维的Perlin噪声是灰度图,三维也是如此,每个点都有一个灰度值,但在MC中每个方块的位置只能有“有方块”和“没有方块”两种状态,即0或者1,不存在50%灰度类似于“半个方块”的设定,这时就需要设定灰度值区间,来确定哪些灰度值的位置需要被填充方块。

  下图的生成命令为//replace =perlin(400,x,y,z,0.05,2,0.5)<0.1 35:14。可以看到这个<0.1,它的意义为“小于10%灰度值(或亮度)的方块位置”,这样所有满足这个条件的方块位置都会被填上方块 (灰度值为从0到1,即从纯黑到各阶灰色到纯白)。如果逐渐增大这个数字的即代表逐渐增大允许的区间范围,结果就是生成出来的方块会更多,但由于Perlin噪声的特性整体的形状改变不大。

  也可以改为,如 >0.9 代表“大于90%灰度值(或亮度)的方块位置” ,这时逐渐减小这个数字就变成了增大生成方块的范围。

  下图的灰度值范围为 <0.1。

  现在我们在不改变其他参数的情况下将它改成 <0.2 ,可以看到方块堆的体积变大了。

  现在是 <0.3

  下图是 <0.4

【16】一些实例

  以上就是Perlin噪声函数的各个参数,如果有不明白的部分欢迎提问,有错误也请指出~

  讲了那么多Perlin噪声的用法,你们可能会问了,这玩意能干啥啊?我这里总结了一些我找到的用法,各位也可以继续研究发掘这个功能的潜力。每个例子的生成指令在图片上,还有许多需要完善的地方。

【模拟洞穴生成】

  下图是将上图的石头替换成了玻璃以看到生成的情况

【模拟矿脉生成】

【模拟云朵生成】

  虽然有时候会生成出一些奇怪形状的不过大体来说形状还是可以接受的

【模拟空岛生成】

  可以生成出类幻想风的空岛(类似于以太那种吧),比较圆的那种

  下图是上图经过自然化处理的结果

【后记】

  我发现这个功能也是偶然看到了WE Bukkit Dev页面更新的一条命令,并没有详细的解释,后来我就自己试验了一下,还去找了开发者进行了交(si)流(bi),之后也查了关于噪声相关的资料,然后结合两个又做了一些实验完成了这篇研究~ 也希望能有更多的人继续完善这方面的知识~

更多《我的世界》噪声函数攻略 我的世界噪声函数应用相关问题

问题:《古剑奇谭》把一个函数导出来,又积回去,再微回来,你们考虑过函数的感受吗

回答:为什么有时候索尼PS平台独占汉化? 详情 >

问题:《戴森球计划》[低技术力回答]应该什么时候开始使用单极磁石?

回答:一直在各种地方找3代的重武器mod,完全找不到啊,当时玩3代的时候就特别想念2代的M920该隐,还有奇点发射器 详情 >

问题:《戴森球计划》萌新提问请问这个轨道共振有什么用啊再问一个请问这个星能被戴森

回答:狗屁大厂 你洗地洗的真莫名其妙 比bioware体量大的公司有都是 为什么人家能出汉化? 详情 >

问题:《魔塔》求教,如何工程穿墙

回答:玄戈臂膀的徽章,云大佬也有一份,他们是不是有一腿?而且玄戈的王服和云大佬的也很配啊。反而王皮鞋的王服和嫂子是一个款式?好奇怪啊。 详情 >

问题:《魔塔》敢问各位大佬,怎么入门拆塔啊?rt,为什么我毫无头绪啊,为什

回答:。。。额,这个,表示我没有喜闻,真可怜。。人生若只如初见 何事秋风悲画扇 详情 >

share