Skip to content

噪声采样器(NoiseSampler)

另见

噪声

采样器在配置中定义,可经由给定位置与种子生成一个指定的值。

“采样”的定义为通过采样器的简单计算方法得出的值。采样的集合即称作“噪声”。

噪声采样器生成的噪声决定了每个方块或列的部分行为

类型

不同类型的 NoiseSampler 的行为略有不同,也可能因此要求额外的参数。

类型通过 type 参数设置。如果两个附属使用了相同的名称,你可以添加 拓展名称: 前缀指定使用的类型。

可用的 NoiseSampler 类型如下:

CHANNEL

* 该类型需 library-image 拓展才可使用

从颜色采样中输出通道值。

color-sampler 颜色采样器 - 提取通道值的颜色采样器。normalize 布尔值 - 是否将通道约束在 [-1, 1] 的范围中。

默认值:true

premultiply 布尔值 - 是否将通道与 alpha 通道值相乘。

默认值:false

如果你希望像素透明度可以降低输出值,那么这个参数应当设置为 true。

DISTANCE_TRANSFORM

* 该类型需 library-image 拓展才可使用

返回图形的距离变形结果。

image 图像channel 通道

默认值:GRAYSCALE(灰度)

clamp-to-max-edge 布尔值

默认值:false

cost-function 字符串

默认值:Channel

可填入:

  • Channel
  • Threshold
  • ThresholdEdge
  • ThresholdEdgeSigned
invert-threshold 布尔值

默认值:false

normalization 布尔值

默认值:None

可填入:

  • None
  • Linear
  • SmoothPreserveZero
threshold 整数

默认值:127

DISTANCE

* 该类型需 config-noise-function 拓展才可使用

distance-function 字符串 - 采样点位与指定位置之间的距离测算方法。

默认值:Euclidean(欧氏距离,即两点间直线距离)

可填入:

  • Euclidean - 按勾股定理计算的距离。见维基百科对应条目了解详情。
  • EuclideanSq - 与上述大致相似,区别是其总是返回平方数。(包括实际距离不需要的情况,且省略了滞后的开根运算,因此比上一个方法速度略快。)
  • Manhattan - 曼哈顿距离,见维基百科对应条目了解详情。
normalize 布尔值 - 若设置为 true,则返回距离将会约束在 [-1, 1] 的范围中,否则返回原本的距离。

默认值:false

-1 表示距离为 01 则对应 radius 设置的值。任意大于 radius 的值都会返回 1

point.x 浮点数

默认值:0

point.y 浮点数

默认值:0

point.z 浮点数

默认值:0

只在采样器以空间为基础时有效。

radius 浮点数

决定输出 1 到小于 1 数值的点位与原点的距离。

默认值:100

只在 normalize 设置为 true 时有效。

WHITE_NOISE

* 该类型需 config-noise-function 拓展才可使用

产生白噪声

frequency 浮点数- 决定噪声的频率

默认值:0.02

salt 整数 - 决定采样器的种子

默认值:0

POSITIVE_WHITE_NOISE

* 该类型需 config-noise-function 拓展才可使用

白噪音相似,但只产生正值,更加便捷。

frequency 浮点数- 决定噪声的频率

默认值:0.02

salt 整数 - 决定采样器的种子

默认值:0

GAUSSIAN

* 该类型需 config-noise-function 拓展才可使用

与白噪声相似,但遵循正态分布

frequency 浮点数- 决定噪声的频率

默认值:0.02

salt 整数 - 决定采样器的种子

默认值:0

PERLIN

* 该类型需 config-noise-function 拓展才可使用

产生柏林噪声

frequency 浮点数- 决定噪声的频率

默认值:0.02

salt 整数 - 决定采样器的种子

默认值:0

提示

推荐使用其他简单噪声,因为柏林噪声可能会产生不必要的定向性伪影。

SIMPLEX

* 该类型需 config-noise-function 拓展才可使用

产生简单噪声

frequency 浮点数- 决定噪声的频率

默认值:0.02

salt 整数 - 决定采样器的种子

默认值:0

OPEN_SIMPLEX_2

* 该类型需 config-noise-function 拓展才可使用

(使用 OpenSimplex2 的算法)产生简单噪声

frequency 浮点数- 决定噪声的频率

默认值:0.02

salt 整数 - 决定采样器的种子

默认值:0

OPEN_SIMPLEX_2

* 该类型需 config-noise-function 拓展才可使用

(使用 OpenSimplex2 的算法)产生更平滑的简单噪声

frequency 浮点数- 决定噪声的频率

默认值:0.02

salt 整数 - 决定采样器的种子

默认值:0

VALUE

* 该类型需 config-noise-function 拓展才可使用

线性插值方法生成值噪声(平面使用双线性插值,立体使用三线性插值)。

frequency 浮点数- 决定噪声的频率

默认值:0.02

salt 整数 - 决定采样器的种子

默认值:0

GABOR

* 该类型需 config-noise-function 拓展才可使用

警告

GABOR 采样器相较其他噪声采样器的产生速度明显偏慢。

deviation 浮点数

默认值:1.0

frequency 浮点数- 决定噪声的频率

默认值:0.02

frequency_0 浮点数

默认值:0.0625

impulses 浮点数

默认值:64.0

isotropic 布尔值

默认值:true

salt 整数 - 决定采样器的盐值

默认值:0

CELLULAR

* 该类型需 config-noise-function 拓展才可使用

产生细胞状噪声/沃雷噪声

图表

  • 黑点 - 细胞中心。
  • 红线 - 距细胞中心的随机方向随机长度,称作 jitter(跳动)。
  • 蓝点 - 细胞中心,由细胞中心的跳动决定。
  • 绿点 - 被采样的坐标。
  • 紫线 - 距最近细胞中心的距离。
  • 橙线 - 距第二近细胞中心的距离。
  • 黄线 - 距第三近细胞中心的距离。
distance 字符串 - 计算细胞中心距离的方法。

默认值:EuclideanSq

可用距离类型
  • Euclidean
  • EuclideanSq
  • Manhattan
  • Hybrid
frequency 浮点数- 决定噪声的频率

默认值:0.02

jitter 浮点数 决定细胞边缘与细胞中心的最大距离。

默认值:1

若设置为 0,则表示细胞边缘与其中心重合,得到的图像表现为标准网格状花纹。推荐填入 -11 之间的值,超出这些范围的值可能带来意料外的效果。

lookup 噪声采样器 - 当 distance 设置为 NoiseLookup 时使用的采样器。

默认值:OPEN_SIMPLEX_2

return 字符串 - 采样器用于计算噪声的函数。

默认值:Distance

返回类型

定义:

  • s - 采样坐标。
  • c - 最邻近细胞边缘的坐标。
  • d1 - 最邻近细胞边缘的距离。
  • d2 - 第二邻近细胞边缘的距离。
  • d3 - 第三邻近细胞边缘的距离。

类型:

  • NoiseLookup - 将 c 传入采样器,返回输出。
  • CellValue - 返回基于 c 的随机值(与带有白噪声NoiseLookup 等价)。
  • LocalNoiseLookup - 将 s - c 传入采样器,返回输出。
  • Angle - 返回 sc 的角度。
  • Distance - 返回 d1
  • Distance2 - 返回 d2
  • Distance2Add - 返回 (d1 + d2) / 2
  • Distance2Sub - 返回 d2 - d1
  • Distance2Mul - 返回 (d1 * d2) / 2
  • Distance2Div - 返回 d1 / d2
  • Distance3 - 返回 d3
  • Distance3Add - 返回 (d1 + d3) / 2
  • Distance3Sub - 返回 d3 - d1
  • Distance3Mul - 返回 d3 * d1
  • Distance3Div - 返回 d1 / d3
salt 整数 - 决定采样器的盐值

默认值:0

IMAGE

* 该类型需 config-noise-function 拓展才可使用

输出平铺图像的通道,将通道范围 [0-255] 重排为 [-1, 1] 的范围。

channel 字符串 - 输出图像的通道。

有效通道:

  • GRAYSCALE
  • ALPHA
  • RED
  • GREEN
  • BLUE

通道示例

原图灰度(Grayscale)Alpha 通道*
红通道绿通道蓝通道

* Alpha 通道因原图不存在透明部分而表现为全白。

frequency 浮点数 图片的频率。决定图片压缩的方式。

频率为 1.0 表示 1 像素 = 1 方块,2.0 则表示 2 像素 = 1 方块。

::: important

不推荐将频率设置为低于 1.0 的值,因为像素在拉伸时不会边长;根据使用方法,返回的图像可能会更像素化。

grayscale_circles.png频率 1.0频率 2.0

频率为 0.25 时,0.25 像素 = 1 格方块1 像素 = 4 格方块(如上网格例子所述)。

:::

image 字符串 - 相对于配置包文件夹的图片路径。(Windows 用户请以 / 代替 \)。

示例路径:path/to/the/image.png

示例图像采样器
grayscale_circles.pngmountain_heightmap.png

以山地高度图为基础生成地形,以左图的圆形为基础决定群系温度,则得到的世界鸟瞰图如下:

地形采样器(地形采样器类型为线性高度图

YAML
type: LINEAR_HEIGHTMAP
base: 128
scale: 64
sampler:
  type: IMAGE
  image: mountain_heightmap.png
  channel: GRAYSCALE
  frequency: 1

温度采样器

YAML
type: IMAGE
image: grayscale_circles.png
channel: GRAYSCALE
frequency: 1

CONSTANT

* 该类型需 config-noise-function 拓展才可使用

输出常量值,与输入无关。通常用于不使用采样器功能的配置。

value 浮点数 - 输出的值。

默认值:0.0

DOMAIN_WARP

* 该类型需 config-noise-function 拓展才可使用

用采样器扭曲另一个采样器。见域扭曲了解更多。

sampler 噪声采样器 - 被扭曲的采样器。warp 噪声采样器 - 参与扭曲的采样器。amplitude 浮点数 - 应用扭曲的强度。

默认值:1.0

KERNEL

* 该类型需 config-noise-function 拓展才可使用

kernel 列表<列表<浮点数>>sampler 噪声采样器factor 浮点数

默认值:1.0

frequency 浮点数

默认值:1.0

LINEAR_HEIGHTMAP

* 该类型需 config-noise-function 拓展才可使用

将平面采样器用作高度图,将其转化为立体的有符号距离函数,用于地形采样器。

base 浮点数 - 地形的基础 Y 值。sampler 噪声采样器 - 用作高度图的采样器。

默认值:CONSTANT

scale 浮点数 - 调整高度图的比例。

默认值:1.0

FBM

* 该类型需 config-noise-function 拓展才可使用

sampler 噪声采样器gain 浮点数

默认值:0.5

lacunarity 浮点数

默认值:2.0

octaves 整数

默认值:3

weighted-strength 浮点数

默认值:0.0

PING_PONG

* 该类型需 config-noise-function 拓展才可使用

sampler 噪声采样器gain 浮点数

默认值:0.5

lacunarity 浮点数

默认值:2.0

octaves 整数

默认值:3

ping-pong 浮点数

默认值:2.0

weighted-strength 浮点数

默认值:0.0

RIDGED

* 该类型需 config-noise-function 拓展才可使用

sampler 噪声采样器gain 浮点数

默认值:0.5

lacunarity 浮点数

默认值:2.0

octaves 整数

默认值:3

weighted-strength 浮点数

LINEAR

* 该类型需 config-noise-function 拓展才可使用

[最小值, 最大值] 重分布为 [-1, 1],通常用于权重池。

max 浮点数min 浮点数sampler 噪声采样器

CUBIC_SPLINE

* 该类型需 config-noise-function 拓展才可使用

根据点与渐变集合,通过立体样条点重映射某些值。

points [列表](config-packs.config-documentation.config-objects.list.md<立体样条点位>sampler 噪声采样器

EXPRESSION_NORMALIZER

* 该类型需 config-noise-function 拓展才可使用

由输入采样器提供采样,并返回计算表达式的结果

expression 表达式 - 使用 ininput 的缩写)中变量的表达式。sampler 噪声采样器functions 映射表<字符串数学函数> - 额外的命名数学函数,可用在 expression 中。

默认值:{}

samplers 映射表<字符串维度适用采样器> - 额外的命名噪声采样器,可用在 expression 中。

默认值:{}

这个参数可能不会很有用,因为 expression 不支持引用 xyz 变量。这些行为有可能会在未来改变。

variables 映射表<字符串浮点数> - 额外的命名常量变量,可用在 expression 中。

默认值:{}

这实际上是一个简化版的表达式采样器,你可以翻到对应部分了解更多。

例如,如下的采样器:

YAML
type: EXPRESSION
expression: (noise(x, z) + 3) / 2
samplers:
  noise:
    dimensions: 2
    type: WHITE_NOISE

可以被简化为:

YAML
type: EXPRESSION_NORMALIZER
expression: (in + 3) / 2
sampler:
  type: WHITE_NOISE

CLAMP

* 该类型需 config-noise-function 拓展才可使用

当采样器输出大于 max 的值,则返回 max 的值,当输出小于 min 的值,则返回 min 的值,用于将采样器输出值限制在某个范围里。

max 浮点数min 浮点数sampler 噪声采样器

NORMAL

* 该类型需 config-noise-function 拓展才可使用

将正态分布的输出重新分配为均匀分布。

mean 浮点数sampler 噪声采样器standard-deviation 浮点数groups 整数

默认值:16384

PROBABLITY

* 该类型需 config-noise-function 拓展才可使用

将范围 [-1, 1] 重分布为 [0, 1],通常用在需要将输出限定在 01 范围的情况中,例如为噪声采样器定义百分比阈值。

sampler 噪声采样器

SCALE

* 该类型需 config-noise-function 拓展才可使用

相当于 sampler() * amplitude

amplitude 浮点数sampler 噪声采样器

POSTERIZATION

* 该类型需 config-noise-function 拓展才可使用

向采样器施加步进函数,steps 参数决定了 [-1, 1] 范围内的步数。

sampler 噪声采样器steps 整数

ADD

* 该类型需 config-noise-function 拓展才可使用

相当于 left() + right()

left 噪声采样器right 噪声采样器

SUB

* 该类型需 config-noise-function 拓展才可使用

相当于 left() - right()

left 噪声采样器right 噪声采样器

MUL

* 该类型需 config-noise-function 拓展才可使用

相当于 left() * right()

left 噪声采样器right 噪声采样器

DIV

* 该类型需 config-noise-function 拓展才可使用

相当于 left() / right()

left 噪声采样器right 噪声采样器

MAX

* 该类型需 config-noise-function 拓展才可使用

相当于 max(left(), right())

left 噪声采样器right 噪声采样器

MIN

* 该类型需 config-noise-function 拓展才可使用

相当于 min(left(), right())

left 噪声采样器right 噪声采样器

EXPRESSION

* 该类型需 config-noise-function 拓展才可使用

返回用户定义的二元表达式,作为采样器的输出。表达式采样器额外允许使用用户定义的函数,包括其他采样器,以及采样器内定义的常量。

expression 表达式

每个采样计算的表达式。使用 xy(仅立体)和 z 表示采样器坐标输入。

示例表达式

YAML
expression: (x * 3) / z
functions 映射表<字符串数学函数>

默认值:{}

填入用户定义的数学函数映射表。函数可以以 <名称>(<参数 1>, <参数 2>, ...) 的方式在表达式内调用,<name> 为声明的函数名称,每个输入代表着函数内要求的参数。

示例定义函数

YAML
functions:
  addThenDivide:
    arguments:
        - a
        - b
        - c
    expression: (a + b) / c
samplers 映射表<字符串维度适用采样器> - 为采样器分配函数名称的映射表。

默认值:{}

每个采样器都可以像这样用在表达式中:<名称>(<x>,<z>)(平面),或 <名称>(<x>, <y>, <z>)(立体),<名称> 是先前声明的函数名称,后面的则是传入采样器的对应坐标。

信息

在 EXPRESSION 中定义的采样器必须属于 DimensionApplicableSamplers,具体请见“维度适用采样器”部分。

示例定义采样器

YAML
samplers:
  whiteNoise:
    dimensions: 2
    type: WHITE_NOISE
variables 映射表<字符串浮点数>

默认值:{}

设置表达式内使用的变量名称及对应的值。可以向表达式中添加便于修改的命名常量。

示例定义变量

YAML
variables:
  a: 1
  b: 2
示例表达式采样器

简单加法

YAML
type: EXPRESSION

expression: 1 + 1

上述表达式返回的结果是 11,即总是返回 2

使用变量

YAML
type: EXPRESSION

variables:
  a: 1
  b: 2

expression: a - b

上述的采样器返回 a 减去 b 的值,即 12,总是返回 -1

使用函数

YAML
type: EXPRESSION

functions:
  addThenDivide:
    arguments:
      - a
      - b
      - c
    expression: (a + b) / c

expression: addThenDivide(3, 2, 10)

上述的采样器会将 3210 传入函数 addThenDivide()。这个函数会计算 (3 + 2) / 10,而 3 + 2 = 5,之后 5 / 10 = 0.5,即总是返回 0.5

使用坐标

YAML
type: EXPRESSION

expression: x + z

上述的采样器总会输出 x 轴与 z 轴之和。假设 Terra 采样了 x = 4z = 2 处的方块,则它会对这个方块返回 4 + 2,即 6 的值。

使用采样器

YAML
type: EXPRESSION

samplers:
  whiteNoise:
    dimensions: 2
    type: WHITE_NOISE

expression: whiteNoise(2, 5)

上述白噪声会在传入坐标 x = 2y = 5 时返回平面白噪声

采样器盐值

YAML
type: EXPRESSION

samplers:
  whiteNoise:
    dimensions: 2
    type: WHITE_NOISE
    salt: 2

expression: whiteNoiseSalted(2, 5, 1)

上述白噪声会在传入坐标 x = 2y = 5salt = 3(指定的盐值会与已配置的盐值叠加,此例子中最后结果为 2 + 1 = 3)时返回平面白噪声

加盐<采样器名称> 函数会在采样器最后一个传入参数为盐值时生成。同样适用于嵌套的采样器,例如联结的 EXPRESSIONDOMAIN_WARP 采样器。

全部结合

YAML
type: EXPRESSION

variables:
  someConstant: 3
  anotherConstant: 2.5

functions:
  add:
    arguments:
      - a
      - b
    expression: a + b

samplers:
  exampleSampler:
    dimensions: 2
    type: WHITE_NOISE

expression: |
  exampleSampler(x * 2, z * 2) +
  add(someConstant, anotherConstant)

上述的采样器定义了:

  • 两个名为 someConstantanotherConstant 的变量,各自的值为 32.5
  • 一个要求两个参数的函数 exampleFunction(),作用是将传入的参数相加。
  • 一个平面采样器 exampleSampler()
  • 一条表达式:
    • 计算 exampleSampler()
      • x 坐标乘以 2 作为 X 轴坐标,且
      • z 坐标乘以 2 作为 Z 轴坐标。
    • 计算 add()
      • 3someConstant 的值)作为参数 a,且
      • 2anotherConstant 的值)作为参数 b
    • add() 的结果,即 5.5,与 exampleSampler() 函数的值相加。
    • 返回最终结果。

用途

有 47 个参数用到:

贡献者

页面历史