Minecraft 原版卡顿的来源与缓解
Minecraft的流畅运行,少不了我们每个人的努力。
Minecraft 原版卡顿的来源与缓解
Minecraft 原版卡顿有 2 种来源,客户端卡顿(FPS)与服务端卡顿(TPS)[这里忽略网络]。
*文章中并未列举出所有卡顿来源。
*此处无需优化仅指玩家,而非服务器管理员等。
A.仅影响客户端的卡顿来源
-
实体与实体渲染的方块
任何大量的实体和实体渲染的方块都会导致 FPS 下降。
如:怪物,大量的箱子,栅栏,潜影盒。
解决方法:不要堆叠过量的这些方块。
-
粒子效果
任何大量的粒子效果都会导致 FPS下降。
如:下雨,TNT爆炸,火焰。
缓解方法:关闭粒子效果,安装优化模组等。
B.仅影响服务端的卡顿来源
-
漏斗
漏斗具有吸入和传递功能,它每 GameTick 都会更新一次,每 4 GameTick 传送一次物品。
根据 ExperimentalIdea 的测试,我们得到了以下数据,测试基于 1.14.4
漏斗上面的方块/状态 | 使用的MSPT(越低越好) |
大箱子 | 66 |
普通方块 | 62.8 |
空气(什么都不放) | 62.6 |
小箱子 | 36.5 |
潜影盒 | 35.9 |
桶 | 32.5 |
锁住的漏斗(红石充能) | 24.3 |
酿造台 |
23.5 |
高炉 | 23.2 |
烟熏炉 | 23 |
熔炉 |
22.6 |
投掷器 | 22.3 |
堆肥桶 | 15.5 |
红石块(会锁住漏斗) | 4.8 |
横向传递物品:可以看到,漏斗上方什么都没有是非常卡顿的,如果你不需要漏斗的吸入物品功能,请在上方放上堆肥桶。
如果你想输入物品,可以在上方放上投掷器,把物品放在投掷器中即可输入。并尽量少使用大箱子配合漏斗。
还有一个情况就是,如果漏斗指向了一个放满的容器,那么甚至可能会比20个漏斗更卡顿。
向下传输物品可以使用 漏斗→投掷器→漏斗 的方式。
请尽量少使用漏斗矿车,一个漏斗矿车≈60个漏斗的卡顿程度。
传递物品最好使用水流,和气泡柱。
根据 ExperimentalIdea 的测试,我们得到了以下数据,测试基于 1.15.2
传递物品方式 | 传输物品时的MSPT(越低越好) | 未传输物品时的MSPT(越低越好) |
每 8 Tick 触发一次的纯投掷器链 (使用观察者触发) |
43.5 | 35.2 |
每 12 Tick 触发一次的纯投掷器链 |
30.5 | 24.3 |
每 16 Tick 触发一次的纯投掷器链 (使用观察者触发) |
22.8 | 18.2 |
每 24 Tick 触发一次的纯投掷器链 (使用观察者触发) |
14.9 | 11.5 |
每 32 Tick 触发一次的纯投掷器链 (使用观察者触发) |
10.6 | 8.5 |
纯漏斗链(上方放置堆肥桶) | 9 | 11.4 |
每 64 Tick 触发一次的纯投掷器链 (使用观察者触发) |
5.2 | 4.3 |
传递物品最好使用水流,和气泡柱。
如果要使用漏斗那么最好在上面放置堆肥桶。
如果要使用投掷器链,那么请不要使用太高频率的触发。
-
红石粉
红石粉强度变化时,会引起周围大量的方块更新,从而造成卡顿。
在较早版本中, 3 格红石线在信号 0→15 时会引起 144 次更新, 在信号 15→0 时甚至能引起 1782 次更新。
在最近版本中,1 格红石粉在信号 0→15 时会引起 42 次更新, 在信号 15→0 时甚至能引起 630 次更新。
在最近版本中,1 格充能铁轨信号改变时会引起 12 次方块更新,1 个中继器在信号改变时会引起 24 次更新。
根据 黑の秋风 的测试,我们得到了以下数据,测试基于 1.14.4
注意:由于 MC-182868 这个 BUG 在 1.14.4 - 1.16.1 版本中有可能铁轨比红石线卡顿
测试项目 | MSPT(越低越好) |
每 8 Tick 更新一次两格相邻的红石线,红石线信号强度为 1 - 2 | 75 |
每 8 Tick 更新一次两格相邻的红石线,红石线信号强度为 14-15 | 239 |
每 8 Tick 更新一次单格红石线,红石线信号强度为 1 | 94 |
每 8 Tick 更新一次单格红石线,红石线信号强度为 15 | 97 |
平面信号传递距离 | 红石线和观察者MSPT (越低越好) |
充能铁轨和观察者MSPT (越低越好) |
9 | 51 | 46 |
8 | 46 | 40 |
7 | 42 | 35 |
6 | 37 | 29 |
5 | 33 | 23 |
4 | 27 | 18 |
3 | 21 | 13 |
2 | 14 | 9 |
1 | 4 | 4 |
斜向45度上升信号传递距离 |
红石线和实体方块和观察者MSPT |
红石线和上半砖和观察者MSPT |
充能铁轨和实体方块和观察者MSPT (越低越好) |
充能铁轨和上半砖和观察者MSPT (越低越好) |
9 | 113 | 30 | 190 | 175 |
8 | 100 | 28 | 156 | 152 |
7 | 93 | 24 | 131 | 138 |
6 | 83 | 22 | 113 | 117 |
5 | 74 | 19 | 93 | 93 |
4 | 63 | 16 | 74 | 70 |
3 | 45 | 14 | 50 | 49 |
2 | 32 | 8 | 30 | 31 |
1 | 7 | 6 | 15 | 15 |
传递红石信号时,红石信号强度越低,卡顿越低(不变化时不卡顿)。
平面传递红石信号时,可以全都替换为充能铁轨+观察者的组合,如果你需要持久的信号,那么请不要替换。
斜向传递红石信号时,如果不需要双向信号,可以使用上半砖。如果需要双向信号传递,则不需要替换。
-
地狱门
每次传输物品和实体(你也是实体)时,地狱门都会再次搜索 1600 万个方块找到对应的地狱门,从而造成卡顿
地狱门只会缓存 15 秒的搜索结果,超过 15 秒后,地狱门会再次搜索。(? - 1.16.1)
1.16.2 之后机制已改变,只要不是特别大的传送门,一般不会造成卡顿。
一般情况下无需进行优化。
C.同时影响服务端和客户端的卡顿来源
-
光照
在白天的时候,会从 255 → 有方块那一层 逐层检测,然后在第一个方块打上 15 级的光照。但仅仅会更新一次。
根据 10935336 的测试,我们得到了以下数据,测试基于 1.16.3
测试项目 | MSPT(越低越好) |
在 255 层填充 160000 个不透明方块 | 170 |
删除在 255 层填充的 160000 个不透明方块 | 1300 |
在 0 层 填充 160000 个不透明方块 | 165 |
删除在 0 层填充的 160000 个不透明方块 | 168 |
通常情况下无需优化,建造飞行器时和地表活塞设施时,可以在机械上方铺一层不透明方块。
因为被活塞推动时,运动中的方块会变成 36 号方块,而 36 号方块是透明方块,这样会造成光照更新。
-
其他红石元件
所有红石元件都是需要大量计算的,这一点相信不难想象。
活塞等运动红石元件同时也会在客户端进行运算。
通常情况下无需优化,建造飞行器时和地表活塞设施时,可以在机械上方铺一层不透明方块。
但需要保证活塞运动部分无光照,除非有伪和平,否则很容易刷怪,所以一般无需优化。
因为被活塞推动时,运动中的方块会变成 36 号方块,而 36 号方块是透明方块,这样会造成光照更新。
-
TNT
TNT激活后会变为实体并产生大量粒子,导致客户端卡顿。
TNT爆炸时会计算 1352 条射线,经过一些计算后,射线穿过的地方都会被破坏,需要大量计算,导致服务端卡顿。
通常情况下无需优化。
-
漏斗矿车
漏斗矿车会吸收比自身稍微大一点范围的方块,且传输速度比漏斗快,导致服务端卡顿。
漏斗矿车是实体。
请尽量少使用漏斗矿车,一个漏斗矿车≈60个漏斗的卡顿程度。
-
实体
实体碰撞需要大量的计算,同时卡客户端与服务端。
不要堆叠实体(相互碰撞),例如矿车,家畜,怪物,掉落物。
不要使用矿车挤压方式做刷怪塔。
做牧场请保证有足够的空间,不要牛挤牛,羊挤羊。
相互碰撞造成的卡顿非常严重!
No Comments