Skip to content
是封面

基于世界生成结构集完成的无限自由度的无限建筑结构

大抵是一点前置知识

狐狐烤的结构生成的基础教程

引言

地形是我的世界必不可少的一个构成部分,但是仅仅用噪声的值并不能总是雕琢出我们想要的环境。特别是当你想要定制每一个地点的时候。这个时候,我的世界自带的拼图方块便浮现在了我们眼前。但如果是想要做到真正无限、无缝、无瑕地做到整个世界都是结构的拼接,这就需要一些特殊的手段

项目案例

我正在制作的深梦Oneiros整合包中,为了体验到真正的肉鸽的世界,我制作了许多维度,其中便有着需要无限的生成拼接结构的需求,这个需求我便以数据包的世界生成模块制作完成。

原有策略

首先,注意到 命名空间/worldgen/structure_set 下的结构集定义文件中可以调整结构 最小距离separation 与 平均距离spacing

json
    {
      "placement": {
            "type": "minecraft:random_spread",
            "salt": 20073321,
            "separation": 1,
            "spacing": 2
        },
        "structures": [
            {
                "structure": "minecraft:temp",
                "weight": 1
            }
        ]
    }

实验可得:当最小距离=平均距离-1时,所有该结构集的结构会以正方形矩阵,矩阵边长为 平均距离spacing 。
同时注意到,命名空间/worldgen/structure 下的结构定义文件中可以定义结构size的层数与距离中心的最远距离max_distance_from_center。

json
    {
        "type": "minecraft:jigsaw",
        "biomes": "minecraft:plains",
        "max_distance_from_center": 116,
        "size": 20,
        "spawn_overrides": {},
        "project_start_to_heightmap": "MOTION_BLOCKING_NO_LEAVES",
        "start_height": {
            "type": "minecraft:constant",
            "value": {
                "absolute": 3
            }
        },
        "start_pool": "minecraft:tempstart",
        "step": "surface_structures",
        "terrain_adaptation": "none",
        "use_expansion_hack": false
    }

这使得只需要将最大距离的最大值调整至大于平均距离,便可以实现粗略的无限结构。但实验后,因其起始模板会不可控制的围绕其西北角旋转,无法直接通过建筑构造来获得无瑕的无限结构生成。

深入研究

通过保存向上的单个拼图方块,将其作为结构生成其他结构,成功使其仅仅围绕中心旋转。 生成成功图片1 只需以绿色羊毛所示位置为几何中心,底面为正方形,让相邻长方体的外围刚好相接一格。故此我们就可以做到下面的效果 生成成功图片2生成成功图片3生成成功图片4 极限不止于此,不单是这些结构可以随机抽取,模板池也可以随机抽取,通过在内部再次嵌套结构更是可以做到无限的自由度

实践演示

利用此原理制造了真无限城的地板和天花板,完美拼凑在了一起 无限城1无限城2无限城3 ~其实因为建筑水平也不是那么完美~ 无限城展示视频链接

总结

综上,通过结构集与拼图方块,达成的无限结构在ctm等项目中有着非常大的发挥空间,我也会通过这个理论继续完善我的整合包。

参考文献

结构集链接结构定义格式链接

Powered by Vitepress and Github Pages