
Asahi
修复客户端不同步导致的移动太阳抖动问题!
查看大图客户端侧 Minecraft 模组,用于消除因服务器延迟导致的昼夜循环橡皮筋效应!
问题所在
每秒钟(20 个游戏刻),服务器会发送一个数据包,用于同步客户端与服务器之间的世界时间。由于客户端无法得知服务器的游戏刻速率,它们假设服务器以标准的每秒 20 游戏刻运行。因此,当服务器出现延迟时,这 20 个游戏刻需要更长时间处理,导致客户端显示的太阳位置落后于服务器上的实际位置。当同步数据包到达时,原版客户端会将太阳强制对齐到服务器位置,从而引发此模组所修复的问题。解决方案
采用滚动加权平均值和插值算法!首先,我们采样过去 10 秒内服务器在客户端每个游戏刻上经过的游戏刻数量。然后,由于 10 秒前的样本不如最近一秒的样本相关性高,我们为每个样本赋予相对于第一个样本呈指数递减的权重。通过计算这一加权列表的平均值,我们可以有效预测接下来一秒内太阳的运动轨迹。预测导致的太阳位置误差会有所不同,但与使用原版逻辑时发生的回弹现象相比,几乎难以察觉。不使用 Asahi 时:
使用 Asahi 时:

请注意,此 GIF 来自模组的早期版本,自那时起所使用的插值算法已不断改进!
圆形太阳是 vanillatweaks.net 提供的资源包的一部分。
配置
{
// 如果从服务器接收的时间与客户端时间相差 `skipDuration` 秒或更多,
// 则直接跳转到服务器时间,绕过插值处理。
// 如果昼夜循环速度异常快,可以尝试调整此值。
"skipDuration": 60,
// 在滚动平均插值中使用的先前因素数量。
// 如果观察到太阳来回摆动且无法稳定到位,可以尝试调整此值。
"interpolateSamples": 10,
// 每个游戏刻的初始昼夜循环刻度数。
// 如果存在其他模组加快或减慢昼夜循环速度,可以相应增加或减少此值。
"initialFactor": 1.0,
// 与昼夜循环分辨率相关的标准游戏刻速率。
// 如果使用模组改变标准游戏刻速率或昼夜循环分辨率(24000 刻),则需调整此值。
// 注意,据我所知,目前没有模组会改变这些参数。
"standardTickRate": 20
}
显示 1-12 条,共 12 条
以上为资源接口提供的文件记录。安装时请在客户端确认文件、游戏版本及依赖。

还没有人评论,去客户端里说两句吧。
评论在新手盒子客户端中发表,这里同步展示。