48bit筛种和四联结构是什么?Cubiomes-viewer教程2|当前通讯
发布日期: 2023-07-06 03:37:21 来源: 哔哩哔哩

零、承上启下


【资料图】

之前卖了个关子,关于48bit筛种和四联结构的原理和使用方法没有讲,这里补充一下。在此之前,让我们先从Minecraft中种子的原理说起。

一、什么是种子?

Minecraft中世界的生成是是依赖一个被称作柏林噪声的算法生成随机数,它决定了世界的生成。它本质上是一个种子随机发生器。它需要一个整数作为参数,然后根据这个参数返回一个随机数。如果你两次都传同一个参数进来,它就会产生两次相同的数(因此柏林噪声实际上是伪随机)。而世界种子,就是柏林噪声的初始参数。如果我们输入相同的世界种子,正常情况下生成的世界也是相同的。

当世界生成算法更新(例如加入删除生物群系,或者像 这样的大改)后,相同的种子就不会生成相同的地形。这也是某些不同的游戏版本中,相同的种子(可能)无法产生相同的地形的原因。

二、种子的Top 16 bits和Lower 48 bits分别是什么,有什么用?

在Java版中种子一共2^64个,也就是一个64位的整数类型可以表示的最多数量(或者你也可以理解成任意一个种子都可以储存在一个64位的整数类型中)。一个64位的整数类型也就是由64个“0”和“1”组成的数。举个例子:

十进制 -> -1041999999999999999

二进制 -> 1111000110001010000100101000010101010000000010110000000000000001

种子的Top 16 bits和Lower 48 bits(高16二进制位和低48二进制位)实际上分别指的就是种子二进制64位的前16位和后48位,一般来说为了方便使用十六进制,此时前4位即为Top 16 bits后12位则为Lower 48 bits。再举个例子举个例子:

十六进制 -> F18A 1285500B0001

二进制 -> 1111000110001010 000100101000010101010000000010110000000000000001

三、姐妹种,结构种是什么,低48位筛种又是怎么一回事?

在Minecraft使用种子生成世界中有个比较特别的现象:

主世界所有结构(要塞除外)可能生成的位置和地狱大部分东西的生成只由这个种子的低48二进制位决定。部分结构例如女巫小屋的可能生成的位置更加简单,只由种子的低20二进制位决定。剩下种子的高16二进制位与主世界的群系生成有关,也就确定了低48二进制位得到的可能生成的位置实际上能否生成指定的结构。事实上种子的低48二进制位还和结构箱子生成等杂七杂八的东西有关。

所谓结构种(Structure Seed),就是决定主世界结构可能生成的位置的低48位所代表的种子。

例如,以下种子都拥有相同的结构种,即0x29F20C01670A:

同时,这些具有相同的结构种的种子,互为姐妹种(Sister Seed)。

姐妹种通俗来说就是低48二进制位相同的种子。这些种子具有以下性质:

看起来,这些种子只是一些共享了一点随机数的生成,但是事实上这对于我们筛种来说,有很大的便利,它们的主世界结构(群系相同的情况下)和下界末地是几乎完全一样的。主世界的结构生成其实“曾经”是一样的,在种子生成时会先给出每个种子可能会生成的位置。我们以在cubiomes-viewer的图层->结构潜在生成位置处开启查看。对于每个低48二进制位相同的种子它们潜在生成位置相同。

例如0x5FFC0B2E8000这个结构种,它在这个位置可能会生成两个沙漠神殿:

但在实际生成中,由于每个种子的高16二进制位不同,每个种子自然群系生成不同,当然沙漠神殿必须在沙漠这类群系才能生成,因此在实际生成中,可能不是每次都会两个都生成:

对于每个群系都会生成的结构,例如废弃传送门,在所有姐妹种生成位置都是一样的。

Cubiomes-viewer根据这个原理可以进行低48二进制位的筛种,也就是筛结构种,先筛选低48二进制位,后筛选高16二进制位。

递增搜索和低48二进制位筛种因此具有完全不同优势:

递增搜索按数字顺序依次检查种子,这种类型的搜索最适合于非穷举搜索空间,并且具有很强的生物群落依赖性。

低48二进制位搜索,搜索首先寻找合适的结构种,当找到后再依次找相同结构种的每一个姐妹种是否有满足条件的种子,这种搜索类型最适合于穷举搜索和那些结构要求非常严格的搜索。

筛种具体情况下使用正确的方式筛种,可以事半功倍。

四、四联结构又是怎么来的?

女巫小屋和海底神殿基于512*512格的mca(当成区块超级加倍版即可)来生成,每个mca只生成一个,对于女巫小屋和海底神殿四联Cubiomes-viewer会利用已有的四联结构种种子集筛选四联结构(事实上女巫小屋都不需要低48二进制位,它的生成仅由低20二进制位决定)

四联条件分为六种,前四个是四联女巫小屋:

理想型四联女巫小屋是最佳的四联条件。

经典型四联女巫小屋(貌似是最早找出来的一批种子集)

普通型四联女巫小屋是较好的四联条件。

勉强型四联女巫小屋较差。

四者之比约为2:3:8:20。

它们的区别主要用在生电上:理想型挂机半径最佳,大概120格,经典型次之。一般型挂机半径不大于126格,它们都可以保证玩家挂机半径内有足够的高度摔死女巫。勉强型则不太行。

四联海底神殿的两个条件分别代表四联海底神殿大于95%和大于90%的面积(事实上四个海底神殿所有的刷怪面积都位于挂机范围内是不可能的)落在玩家的挂机半径内。二者之比约为2:15。

四联结构筛种中,坐标会乘512(转为mac坐标)。

值得注意的是,因为mca的生成限制,四联结构总是生成在四个mca的角落上,cubiomes-viewer一般以四联结构左上角那个结构所在的mca代表这个四联结构所在的位置,因此四联的中心在cubiomes-viewer四联结构的x-1,x-1 mac。

选择完四联结构这一个条件条件,实际会生成两个条件:

第一个条件实际上就是我们之前说过的“螺旋迭代器1:512”,不过使用了低48位种子集,我们在筛选其他条件时也可以使用低48位种子集:

当然我们只要把x4改成x3或者x2就能筛选三联和二联结构。

标签:

新闻资讯
精彩推送