
基于世界生成结构集完成的无限自由度的无限建筑结构
大抵是一点前置知识
引言
地形是我的世界必不可少的一个构成部分,但是仅仅用噪声的值并不能总是雕琢出我们想要的环境。特别是当你想要定制每一个地点的时候。这个时候,我的世界自带的拼图方块便浮现在了我们眼前。但如果是想要做到真正无限、无缝、无瑕地做到整个世界都是结构的拼接,这就需要一些特殊的手段
项目案例
我正在制作的深梦Oneiros整合包中,为了体验到真正的肉鸽的世界,我制作了许多维度,其中便有着需要无限的生成拼接结构的需求,这个需求我便以数据包的世界生成模块制作完成。
原有策略
首先,注意到 命名空间/worldgen/structure_set 下的结构集定义文件中可以调整结构 最小距离separation 与 平均距离spacing
{
"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。
{
"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
}这使得只需要将最大距离的最大值调整至大于平均距离,便可以实现粗略的无限结构。但实验后,因其起始模板会不可控制的围绕其西北角旋转,无法直接通过建筑构造来获得无瑕的无限结构生成。
深入研究
通过保存向上的单个拼图方块,将其作为结构生成其他结构,成功使其仅仅围绕中心旋转。
只需以绿色羊毛所示位置为几何中心,底面为正方形,让相邻长方体的外围刚好相接一格。故此我们就可以做到下面的效果 

极限不止于此,不单是这些结构可以随机抽取,模板池也可以随机抽取,通过在内部再次嵌套结构更是可以做到无限的自由度
实践演示
利用此原理制造了真无限城的地板和天花板,完美拼凑在了一起 

~其实因为建筑水平也不是那么完美~ 无限城展示视频链接
总结
综上,通过结构集与拼图方块,达成的无限结构在ctm等项目中有着非常大的发挥空间,我也会通过这个理论继续完善我的整合包。
