实体渲染机制优化

实体渲染机制优化

使用异步路径追踪来隐藏不可见的方块实体/实体

杂项

Entity Culling Banner

Discord GitHub GitHub GitHub


Divider

About

Minecraft 会跳过渲染你身后的东西,那为什么它还要渲染那些因为墙壁或天花板挡住而仍然看不到的所有东西呢?

这个模组引入了异步路径追踪,以高效地确定玩家实际能看到什么。它利用其他可用的 CPU 核心,实时计算视线可见性,并消除对隐藏的方块实体和实体不必要的绘制调用/处理。

这可以大幅提升帧率,具体取决于实体数量以及你在世界中的位置。


Divider


Features

异步路径追踪

  • 使用空闲的 CPU 线程来计算可见性
  • 与主游戏线程并行运行,不会造成阻塞(每隔几个 tick,所需数据会在主线程上收集)
  • 实时更新可见性数据,将弹出(pop-in)降到最低

实体 Tick 优化

  • 减少不可见实体对客户端的影响
  • 完全可配置,并与大多数模组兼容
  • 不影响服务端模拟、农场或生物行为

完全可配置

  • 模组的所有功能都可以在配置界面中开启/关闭
  • 将不应被剔除或 tick 剔除的实体和方块实体加入白名单
  • 在使用快速图形或自定义树叶时,有一个选项可以将树叶视为实体剔除的固体方块。这有助于提升森林地区的性能


Essential


Divider


Compatibility & Dependencies

Minecraft 加载器 状态 版本 备注
1.19.4+ Fabric/Forge/NeoForge ✅ 已支持 最新
1.16.5-1.19.2 Fabric/Forge ❌ 不支持 已过时 未来某个时候可能会获得新更新
1.12.2/1.8.9 Forge ❌ 不支持 已过时 未来某个时候可能会获得新更新
1.7.10 Forge ❌ 不支持 已过时 没有更新计划
b1.7.3 Babric ❌ 不支持 已过时 没有更新计划


Divider


Screenshots / Media

Stage View
启用与未启用 EntityCulling 的直接对比。测试在 Scarland(Hermitcraft 第九季)中进行,渲染距离设置为 16 个区块。除 EntityCulling 外还使用了模组 Sodium、Iris 和 ImmediatelyFast,运行在 Minecraft 1.21.5 上,使用 Fabric 模组加载器。


Divider


Known Issues

客户端实体(通常被魔法模组用于动画)可能不会按预期表现。请通过配置界面将相关实体加入 tick 剔除和/或实体剔除的白名单。如果你发现任何行为不正确的实体,请考虑在 Github 上报告其 ID,以便在未来的更新中纳入。

你还需要将渲染范围远超其正常边界的方块实体加入白名单。例如原版信标、Create 的滑轮以及某些 Botania 方块。


Divider


FAQ

这个需要安装在服务端吗?

不需要。这是一个完全客户端的模组,需要安装在服务端。

这会影响生物行为或农场吗?

不会。这个模组只跳过实体的渲染,对它们的逻辑没有任何影响。生物会照常生成、移动和掉落物品。你的农场和其他游戏机制将不受影响。tick 剔除功能完全局限于客户端世界,因此不会影响服务端模拟。

我在 Sodium 中启用了“Use Entity Culling”——这还有帮助吗?

有!虽然 Sodium 会基于已加载的区块执行基本的可见性检查,但这个模组更进一步。它会分析实际的视线可见性,跳过那些在可见区块内但实际上玩家看不到的实体。这是一种更激进、更准确的方法。

我如何测试这个模组的性能影响?

在控制菜单中,你可以绑定一个调试按键,随时开启和关闭该模组。这样你就可以在不重启游戏的情况下比较启用和未启用模组时的性能。这也可以用来检查可见性问题是由该模组还是其他模组引起的。

当你在一台非常老旧的电脑上玩游戏,而它已经难以运行 Minecraft 时,可以考虑这样做。当 CPU 已经满载时,就没有空闲的 CPU 时间来运行可见性计算。除此之外,该模组绝不应导致游戏的负面性能影响,最坏情况下也只是完全没有效果,因为根本没有东西需要剔除。

F3 的数字看起来不对,这是怎么回事?

F3 调试屏幕的数字(在较新版本中默认隐藏,可通过 F3+F6 开启)是内部收集的,可能不一定反映实际的渲染计数。例如,启用光影会因为阴影渲染而导致数字偏高。 另外请记住,该模组会尽量偏向谨慎,因此过于靠近墙壁或天花板的实体可能会因为存在穿模的可能性而透过它们被渲染。

为什么这个模组运行在 CPU 上,而不是 GPU 上?

目标是减少 GPU 负载,并减少 GPU 与 CPU 之间不必要的数据传输。进行计算可能会增加 GPU 负载以及 CPU 主(渲染)线程的负载。但欢迎你来证明我是错的,并提交一个基于 GPU 的实现 PR。老实说,我缺乏自己实现它的相关知识和时间。


Divider


Credits & license

👤 感谢 RoboTricker 的 Transport-Pipes 插件,它为这个模组奠定了基础。

👤 感谢 vicisacat 完成了 Babric Beta 1.7.3 的移植。

👤 感谢 Pelotrio 完成了 Forge 1.7.10 的移植。

👤 感谢 GitHub 上出色的翻译者和贡献者! Link

📄 许可证:tr7zw Protective License
欢迎在 Modrinth 和 CurseForge 托管的整合包或 YouTube 视频中使用此模组,无需请求许可。请勿在其他任何地方重新分发 JAR 文件!