EMI阴影补丁

EMI阴影补丁

同时运行EMI和Shadow Drop会很慢。这个修复了大部分问题。

Bug修复

EMI Shadow Patch

同时运行 EMI 和 Shadow Drop 会很慢。本模组修复了大部分问题。


问题所在

Shadow Drop 会为 GUI 中的每个物品绘制一份阴影色的副本。当 EMI 的批量物品渲染器负责绘制时,这开销很低——但一旦物品被逐个绘制,它就变成屏幕上最耗性能的部分。而且 EMI 每次滚动时都会重建其物品列表,因此大型列表会一遍又一遍地付出这个代价。

结果就是:打开 EMI 时帧率暴跌,滚动时卡顿。

本模组的作用

  • 滚动 EMI 列表时不再卡顿。 列表不再暂停去检查屏幕图像以判断什么是槽位,也不再在每一轮中从头重复同样的逐物品查找。
  • 当 EMI 误关闭其快速批量物品渲染时,将其恢复。 某些 Sodium 系模组配置会让 EMI 在没有正确检查的情况下判定自己无法使用快速路径。发生这种情况时,本模组会将其恢复,这比这里其他所有功能加起来都更有价值。
  • 共享同一 ID 但 NBT 不同的物品不再产生额外开销。 附魔书、药水、自定义模型物品等是 EMI 最糟糕的情况,因为计算如何绘制每一个物品开销很大,而且每帧都在重做。
  • 阴影一起绘制,而不是逐个绘制。 Shadow Drop 的阴影副本过去会为屏幕上的每个物品产生一次单独的绘制调用。
  • 与 GUI 动画模组协同工作,而不是与之对抗。 像 SmoothGui 这类会让界面滑动或弹跳的模组,会刻意关闭 EMI 的快速路径,因为一次构建好的物品无法移动。本模组仅在动画实际移动时重建列表,因此动画可以正常播放,而一旦动画停下,快速路径就会恢复。
  • 不强制任何行为。 这一切的每个部分都可配置,且每个选项都能单独恢复原始行为。

你的阴影、它们的外观、位置和设置都保持不变。

前置要求

Minecraft 1.20.1
Forge 47.2.30 或更新
EMI 本模组生效所必需
Shadow Drop 本模组生效所必需

仅客户端。 服务器端不需要任何东西。

EMI 和 Shadow Drop 都被声明为可选依赖。如果其中任何一个缺失,或者它们中某一个的未来版本改动了本补丁所依赖的某些内容,本模组只会记录一行日志,然后什么都不做——它不会拒绝加载,也不会崩溃。

兼容性

  • Embeddium / Rubidium — 可用,并且本模组会纠正它们可能导致的一种错误判定,该判定会让 EMI 关闭其快速物品渲染。
  • SmoothGui — 直接支持。动画和快速物品列表都能正常工作。
  • ImmediatelyFast — 无需特殊处理。
  • 光影(Oculus / Iris) — 作者未测试;快速物品路径是最可能与光影包产生交互的部分,如果出现任何异常,可以在配置中将其关闭。

配置

config/emi_shadow_patch-client.toml — 该文件在游戏运行时也会重新加载,因此无需重启即可更改并尝试各项选项。

选项 默认值 效果
slotDetection SLOT_LIST 如何判断物品是否位于真实槽位中。PIXEL_PROBE 恢复原始的、更慢的方法。
memoizeItemTagMatching true 记住透明/半透明物品及标签查找结果,而不是对每个物品重做。
accumulateShadowDraws true 让整个列表的阴影一次性绘制,而不是每个物品一次绘制调用。
forceEmiBatchedRenderer true 当 EMI 误禁用其快速批量物品渲染时,将其恢复。
reBatchDuringGuiAnimations true 在 GUI 动画移动时重建列表,以便动画播放,然后回到快速路径。设为 false 则改为让动画模组关闭快速路径。
memoizeEmiBatchability true 记住 EMI 对每个物品的“这能否被批量处理?”的回答,该计算开销很大。
debugCounters false 在屏幕上绘制一个小的计数器叠加层。

检查是否生效

打开 logs/latest.log,查找以 [EMI Shadow Patch] 开头的行。第一次打开某个界面时,你应该会看到:

[EMI Shadow Patch] All Shadow Drop hooks resolved; patch is active.
[EMI Shadow Patch] EMI batched renderer: ENABLED (config use-batched-renderer=true).

如果你看到 DISABLED,或者有某行说明某些钩子未能解析,日志会解释哪一部分未生效以及原因。发生这种情况时并没有任何东西损坏——受影响的部分只是保持关闭而已。

已知限制

  • 为了生成每个阴影,物品仍然会被绘制两次。 这就是该效果的本质,也是本模组唯一无法消除的开销。围绕它的其他一切都已经变得更廉价了。
  • 如果你更想与未打补丁的行为做对比,可以通过配置完全关闭快速物品路径。

致谢

与 EMI 或 Shadow Drop 无关联。二者均未被捆绑,也未在磁盘上被修改;这是一个独立的客户端补丁,在运行时与它们协同工作。这些模组的所有功劳归其作者所有。

许可

保留所有权利。 你可以使用本模组,并将其包含在从此页面下载它的整合包中。你不得重新分发、重新托管或复用其源代码。