说起来这个边境之地,一开始我是不信的。网上那些视频,截图,看着就跟P图似的,哪有游戏能弄出那么离谱的东西?后来自己玩Minecraft久了,就想去看看。毕竟老话说得好嘛耳听为虚,眼见为实。
本站为89游戏官网游戏攻略分站,89游戏每日更新热门游戏,下载请前往主站地址:www.gm89.icu
我记得那阵子,正好有点闲工夫,项目也没那么赶。我就想着,干脆开个创造模式,直接往一个方向飞,看看能飞多远。那会儿电脑配置还行,想着飞个几天几夜应该也没问题。于是我就选了个新地图,方向定死,然后就让游戏自己跑着,偶尔瞄一眼。
开始漫长的旅程
我真的是,就这么一直飞飞。刚开始的时候,还没啥感觉,就是正常的方块世界。飞过雪地,飞过沙漠,飞过森林,啥地形都见过。游戏里的时间过得飞快,现实里我也就瞅两眼。我寻思着,就这么一直飞,总能飞到头?那时候就感觉自己挺傻的,不就是个游戏地图吗,还真能飞到尽头?
可是,坚持了一阵子之后,大概是飞到几十万格开外了,就慢慢觉得有点不对劲了。最开始只是偶尔卡一下,然后画面开始有点撕裂感。我以为是我电脑出问题了,或者显卡又不行了。但是看温度啥的都正常,就觉得怪怪的。
后来那个感觉就越来越明显了。地形开始变得非常古怪。
- 是那些高山,它们不再是自然的山坡了,而是突然拔地而起,跟被刀切开一样,垂直得吓人。
- 是那些洞穴,不是正常的洞穴了,里面光秃秃的,有时候还会看到一些奇怪的纹理错误。
- 最要命的是,地面上的方块开始错位,一块高一块低,走在上面就跟在晃动的船上似的,特难受。
深入探索和疑惑
当时我就觉得,这八成就是网上说的“边境之地”了。我开始放慢速度,仔细观察。很多地方都像是地图生成出了故障,方块的位置乱七八糟的,河流有时候会突然中断,直接形成一个巨大的瀑布往下掉,掉到不知道多深的虚空里。
再往后面飞,大概到了百万格开外的时候,那才叫一个惨不忍睹。整个世界感觉都崩了。地形不再是“古怪”,而是“疯狂”。
那些方块不再是正常的实体了,我能直接穿过去。有时候还会遇到一些半透明的方块,或者完全是黑色的方块,整个世界都灰蒙蒙的,像进入了什么异次元空间一样。
我当时就想,这到底是个啥原理?肯定是跟游戏的地图生成代码有关系。游戏引擎总得有个坐标系,超过一定范围,计算就得出现精度问题了。我以前做过一些小工具,知道浮点数精度是个大坑。在特别大的数字面前,小小的误差也会被放大得要命。
揭秘的那一刻
我就开始琢磨,MC这个游戏,它生成方块肯定是用XYZ坐标的。这些坐标又是通过一些算法,比如Perlin噪声,或者别的什么随机数算法来算地形高度和方块类型的。如果坐标值太大了,这些算法在处理的时候,精度就开始不够用了。
打个比方,你让电脑算1加0.0000000001,在某个精度下,它可能就直接告诉你结果是1了,因为它觉得那点零头太小了,没必要考虑。但是如果你一直在非常大的数字上累加这种“一点点误差”,时间长了,这个“一点点”就会变成一个“一大堆”的错误。当坐标达到几百万格甚至几千万格的时候,游戏生成地形的那些算法,就没法精确地计算每个方块的位置和类型了,它只能粗略地“凑合”着算。
这种“凑合”出来的结果,就是我们看到的那些扭曲的、撕裂的、甚至是半透明的方块。游戏想生成一座山,但是因为坐标精度不够,它就只能生成出那种垂直的墙壁。游戏想生成一片平原,但因为计算偏差,它就生成出高低错落的断层。
我又去网上翻了翻那些老外写的资料,果然,他们也提到了很多是跟浮点数精度有关。游戏里面的各种计算,都需要用到浮点数。当这些坐标数字变得非常非常大,超出了浮点数能精确表示的范围时,所有的计算都会变得不准确。什么高度计算、碰撞检测、甚至方块渲染,都开始出问题,最终就呈现出那种混乱不堪的“边境之地”了。
所以说,边境之地这东西,不是游戏设计师故意做出来的彩蛋,它更像是一个意料之外的“计算bug”,是游戏引擎在极端情况下的一种失真表现。就好比你把一张图片无限放大,看到的就是像素点,而不是平滑的画面了。MC的边境之地就是这样,它到达了游戏世界“像素点”的边界,所以才变得那么混乱。也算是自己折腾明白了。