复杂树叶剔除

复杂树叶剔除

适用于Sodium的多层级树叶剔除。针对密集模组森林(如WWOO等)的方块剔除、渲染通道降级及面剔除。

优化

复杂树叶剔除

这是一个适用于 Minecraft 1.21.1(Fabric + Sodium)的多层次树叶剔除模组,专为装有茂密植被的整合包设计,例如 William Wyther 的 Overhauled Overworld(WWOO),原版剔除在这些环境中会显著损失性能。

注意: 我已在本地一个重度模组化(300+ 模组)的实例上进行了测试,并让其他硬件配置不同的用户也进行了测试。到目前为止运行正常,但这并不意味着不会存在某些问题。该模组已尽我所能做到兼容,但对于比我更聪明的人来说,可以自行 fork 并按需修改。我是一位新晋父亲,所以可能无法迅速修复问题或扩展其兼容性。

功能简介

复杂树叶剔除应用了三种相互独立且互补的剔除策略:

标准树叶剔除(第 1 级 - 所有渲染器) 在网格构建期间,将相邻树叶方块之间的共享面标记为不可见。适用于所有树叶方块,并直接与 Sodium 的遮挡系统协作。这是大多数剔除模组的做法。

扩展树叶剔除(第 A 级 - 仅限 Sodium) 对于完全被其他树叶包围的内部树叶方块,完全取消其渲染。这些方块不会生成任何几何体。在茂密的 WWOO 树冠和其他模组森林中效果最为显著,因为标准剔除会遗漏其无法识别的方块。

边缘通道降级(第 B 级 - 仅限 Sodium) 树冠边缘部分符合条件(低于取消阈值的相邻方块数达到一个)的树叶方块,会从昂贵的半透明渲染降级为更便宜的 cutout 渲染。树叶形状完全保留——仅更改渲染通道。在使用 Iris 等光影包时效果最为明显,因为半透明几何体的渲染成本非常高。

前置要求

  • Minecraft 1.21.1
  • Fabric Loader >= 0.16.0
  • Fabric API
  • Sodium - 注意: 已在 0.6.13 版本上测试。如果内部钩子有变动,更新/更旧的版本可能无法正常工作。

推荐安装

  • Iris Shaders - 第 B 级通道降级在光影开启时能提供最明显的性能提升
  • ModMenu - 提供游戏内配置界面的访问入口

配置

通过 ModMenu 打开配置界面,或在游戏内使用 /clc 命令:

/clc status
/clc reload
/clc set enabled true|false
/clc set mode CONSERVATIVE|BALANCED|AGGRESSIVE
/clc set threshold 0-6          (0 = 根据模式自动设置)
/clc set standardCulling true|false
/clc set extendedCulling true|false
/clc set passDemotion true|false
/clc set extendedDetect true|false

剔除模式

模式 所需相邻方块数 描述
CONSERVATIVE(保守) 6/6 仅剔除完全被掩埋的方块。视觉效果最安全。
BALANCED(平衡) 5/6 性能与外观的良好平衡。默认模式。
AGGRESSIVE(激进) 4/6 最大化性能。可能出现轻微的边缘变薄。

扩展树叶检测 - 启用后,注册表路径包含 leafleavesfoliage 的方块将被视为树叶,即使它们没有 minecraft:leaves 标签。对于完整的 WWOO 兼容性是必需的。

兼容性

模组 状态
Sodium 0.6.x 必需
Iris 完全兼容,第 B 级在此效果最佳
Distant Horizons 无交互(DH 处理其自身的 LOD 几何体)
C2ME 兼容
EntityCulling 独立功能,无冲突
MoreCulling 互补 - 覆盖不同的方块类型
SodiumLeafCulling 功能重复 - 两者针对同一管线。请二选一使用。
WWOO 主要使用场景

性能说明

所有剔除工作都在 Sodium 的工作线程上进行区块网格构建时完成——而非在渲染期间。每帧都没有 CPU 开销。性能提升在区块构建或重建时(世界加载、方块变化、F3+A 或保存设置时)得以体现。

从源代码构建

git clone https://github.com/YOUR_GITHUB_HERE/complex-leaf-culling
cd complex-leaf-culling

# 将 sodium-fabric-0.6.x+mc1.21.1.jar 放置在 libs/ 目录中
./gradlew build

构建好的 jar 文件将位于 build/libs/ 目录中。

许可证

MIT - 可自由 fork、修改并在署名后重新分发。参见 许可证