• 欢迎来到Minecraft插件百科!
  • 对百科编辑一脸懵逼?帮助:快速入门带您快速熟悉百科编辑!
  • 因近日遭受攻击,百科现已限制编辑,有意编辑请加入插件百科企鹅群:223812289

Terra/进阶噪声方程

来自Minecraft插件百科
跳转至: 导航搜索

正如我们在噪声方程页面中所演示的那样,你可以用一个函数来决定群系的样貌。然而,你也可以定义多个在满足特定条件时使用的函数,如在特定高度时使用。

简易的条件

这是个下界三角洲群系配置内的简易示例:

noise-equation: "if(y, abs(y-64)/128 + noise3(x*1.5, y*2, z*1.5)*3, 1)"

这个例子有一个“三元if”。它遵循的原则是如果A不是0,则执行B,否则执行C。在群系配置中写成if(A, B, C)。如果我们把噪声方程对应地翻译一下,我们就会得到这样的结果:

如果y不为0则使用函数abs(y-64)/128+noise3(x*1.5,y*2,z*1.5)*3,否则直接输出1或反过来:如果y=0则输出1,否则使用函数abs(y-64)/128+noise3(x*1.5,y*2,z*1.5)*3

如前文所述,这个函数试图回答的唯一问题是,我们是否有固体方块或空气。正数输出返回方块,(比如1),负数输出返回空气。

所以在这种情况下,在高度为0的地方会有一层实心的方块,而在上面的各处都会有其他的东西,这取决于我们所给出的函数。这是一个比较简单的例子,因为它只包括一个固定的实心层(例如基岩)和另一个函数。

全力以赴吧

我们可以通过在不同的高度使用不同的函数来造出更加复杂的地形。如平原-天空群系所示:

noise-equation: "if(max(y-96, 0), -(if(max(y-150, 0), |y-150|, |y-150|/16)) - 0.25 + (noise2(x*3, z*3)*3), ((-((y / 63)^2)) + 1) + |(noise2(x, z) / 3) + 0.1|)"

该函数可造出漂亮的空岛:

Terra9.png

这个方程不仅增加了2个函数作为输出,还增加了一个检查选取哪个函数的函数。让我们拆开讲解:

if 

  max(y-96, 0) is not 0

then do

  -(if(max(y-150, 0), |y-150|, |y-150|/16)) - 0.25 + (noise2(x*3, z*3)*3)

else do

  ((-((y / 63)^2)) + 1) + |(noise2(x, z) / 3) + 0.1|)

这看起来有点复杂。让我们一步一步来:条件为max(y-96, 0)。将这个条件放到图形计算器中,我们会得到这样的图形:

Terra10.png

如图所示,低于等于96的Y值的结果都是0,高于96的结果为正数。

第二个函数作用于空岛下方的陆地。先让我们关注第一个函数,因为它不仅定义了有一定高度的曲面,而且定义了空岛底部的构造。

这通过第二个参数里面的另一个嵌套条件函数来实现:-(if(max(y-150, 0), |y-150|, |y-150|/16)) - 0.25 + (noise2(x*3, z*3)*3)。其功能相当于:

-(condition) - 0.25 + (noise2(x*3, z*3)*3)

条件为:

if
  max(y-150, 0) is not 0
then do
  |y-150|
else do 
  |y-150|/16

当我们将输出结果应用到上面的函数中时,我们会得到:

if
  max(y-150, 0) is not 0
then do
  -(|y-150|) - 0.25 + (noise2(x*3, z*3)*3)
else do 
  -(|y-150|/16) - 0.25 + (noise2(x*3, z*3)*3)

这个方程的功能就是让空岛底部显得尖锐(低于150),上方显得平坦(大于等于151)。

总结

方程的复杂程度只取决于你给世界在定义了几层。