Skip to content

从零编写地形

本教程将会继续讲述地形包有关创建地形的步骤。

如果你还没有准备好,请在开始阅读前浏览“配置开发介绍”章节。

如果你遇到问题或需要示例,你可以在 Github 仓库中找到本教程的参考用配置包。

设置新地形

步骤

提示

在本章节中,/packs reload 命令可以用于重载配置包,便于玩家观察世界内的变化。

如果 Terra 在输入命令后重载失败,请检查控制台排除问题。

1. 添加表达式采样器

EXPRESSION 噪声采样器允许通过配置表达式输出采样器,同时还允许在采样器内调用其他采样器的内建或自定义函数。

通过你选择的编辑器打开你的 FIRST_BIOME 群系配置。

将如下所示的高亮部分添加至配置,以将当前的地形采样器替换为 EXPRESSION

first_biome.yml
YAML
id: FIRST_BIOME
type: BIOME

vanilla: minecraft:plains

terrain:
  sampler:
    type: EXPRESSION
    dimensions: 3
    expression: -y + 64

...

terrain.sampler 包含了三个参数,即 typedimensionsexpression

  • type - 决定了生成地形的噪音采样器类型。
  • dimensions - 决定了输入采样的空间轴数量(X、Y 与 Z)。
  • expression - 由用户决定生成地形的表达式。

地形生成由表达式输出的正负影响。

正值输出表示此处生成实心方块,反之则不生成方块。

采样器表达式中,-y + 64 表示临时考虑了 Y 轴影响。

表达式的结果将会返回正值,生成的地形持续到世界 Y 轴的 64 附近时,因 -64 + 64 返回 0,而不会生成方块。即没有方块可以生成在 y = 64 之上。

Y 坐标大于 64 的位置因表达式返回负值,如 -90 + 64 输出 -26,同样不会生成方块。

-y + 64 表达式生成的是接近于超平坦模式的地形。

信息

有关于 EXPRESSION 与其他噪声取样器的文档可以在这里找到。

有关于数学表达式的相关文档可以在这里找到。

提示

你可以在表达式中添加变量,降低配置难度。

first_biome.yml
YAML
terrain:
  sampler:
    type: EXPRESSION
    dimensions: 3
    variables:
      base: 64
    expression: -y + base

你也可以引用采样器外的锚点变量。

first_biome.yml
YAML
vars: &variables # 给采样器用的变量锚点
  base: 64

terrain:
  sampler:
    type: EXPRESSION
    dimensions: 3
    variables: *variables #引用先前的锚点
    expression: -y + base

2. 添加平面取样器

表达式 -y + 64 返回了类似超平坦的地形,这将会是我们进一步操作的基础,我们要在其上应用 terrain.sampler-2d 噪声

terrain.sampler-2d 推荐与 terrain.sampler 一同使用,因为它允许平面状态下添加或提取基础地形,而无需顾及 Y 坐标。

terrain.sampler-2d 性能占用可能略高,但会让地形的细节更加丰富。

将高亮内容添加至配置,以加入 terrain.sampler-2d 采样器。

first_biome.yml
YAML
id: FIRST_BIOME
type: BIOME

vanilla: minecraft:plains

terrain:
  sampler:
    type: EXPRESSION
    dimensions: 3
    expression: -y + 64
  sampler-2d:
    type: EXPRESSION
    dimensions: 2
    expression:

...

terrain.sampler-2d 包含相同的 typedimensionsexpression 三个参数。

考虑到 terrain.sampler-2d 是平面的,因此它只需要两个坐标轴。

3. 添加使用的采样器

terrain.sampler-2d 现在需要一个表达式进一步修改 terrain.sampler 的表达式创建的地形。

为了在 terrain.sampler-2d 表达式中使用采样器,我们需要通过包验证文件引用的缓存噪声采样器,或是 sampler-2d.samplers 内置的采样器。

将如下高亮部分添加至配置,以将 OPEN_SIMPLEX_2 噪声采样器添加至表达式中。

first_biome.yml
YAML
id: FIRST_BIOME
type: BIOME

vanilla: minecraft:plains

terrain:
  sampler:
    type: EXPRESSION
    dimensions: 3
    expression: -y + 64

  sampler-2d:
    type: EXPRESSION
    dimensions: 2
    expression:
    samplers:
      simplex:
        type: OPEN_SIMPLEX_2
        dimensions: 2
        frequency: 0.04

...

sampler-2d.samplers 包含了用于表达式参数的噪声采样器。

采样器的函数名称可由用户定义,在本示例中是 simplex

simplex 需要包含噪声采样器所要求的参数,即 dimensionsfrequency

frequency 的详细介绍可以在这里找到。

4. 将采样器应用至表达式

现在 simplex 采样器可以在 terrain.sampler-2d 中使用。

将如下高亮内容加入配置,以将 simplex 添加至地形中。

first_biome.yml
YAML
id: FIRST_BIOME
type: BIOME

vanilla: minecraft:plains

terrain:
  sampler:
    type: EXPRESSION
    dimensions: 3
    expression: -y + 64

  sampler-2d:
    type: EXPRESSION
    dimensions: 2
    expression: simplex(x, z)
    samplers:
      simplex:
        type: OPEN_SIMPLEX_2
        dimensions: 2
        frequency: 0.04

...

地形按照 simplex 的输出有了 1 格高的起伏。

5. 修改 sampler-2d 表达式

sampler-2d 表达式可以通过多种方式修改,达到你想要的效果。

OPEN_SIMPLEX_2 的值域为 [-1, 1],因此将 simplex 的输出在表达式内加 1,使其总能输出正值。这样,地形就只会在基础地面之上生成,而不会删除任何方块,因为表达式永远不会输出负值。

如果你想要让地形只在某一个 Y 层数以上生成,这会很有用。

first_biome.yml
YAML
terrain:
  sampler:
    type: EXPRESSION
    dimensions: 3
    expression: -y + 64

  sampler-2d:
    type: EXPRESSION
    dimensions: 2
    expression: simplex(x, z)+1
    samplers:
      simplex:
        type: OPEN_SIMPLEX_2
        dimensions: 2
        frequency: 0.04

simplex 表达式增加值会让地形更加崎岖,因为 simplex 的大小范围会随其值的增加而发生变化。

first_biome.yml
YAML
terrain:
  sampler:
    type: EXPRESSION
    dimensions: 3
    expression: -y + 64

  sampler-2d:
    type: EXPRESSION
    dimensions: 2
    expression: (simplex(x, z)+1) * 4
    samplers:
      simplex:
        type: OPEN_SIMPLEX_2
        dimensions: 2
        frequency: 0.04

警告

确保你在加入其他值之前将其用小括号标记以保证优先运算。

现在地形终于有些样子了。你可以通过调整地形的值让其变得更加起伏,或者更加平坦。

总结

本教程只大致讲述了地形表达式的皮毛。

你可以通过更多复杂的表达式实现无限可能。表达式还可以有更多功能,例如内置函数、自定义函数以及多层噪声采样器,使得地形不再只是简单的陆地,而是炫酷的浮岛。

本章节的参考配置可以在 Github 的这个地方找到。

信息

Noise Tool 是一款可视化预览采样配置的工具,更多细节可以在这里浏览。

贡献者

页面历史