摄像机剔除

摄像机剔除

客户端 FPS 优化模组,零堆分配剔除墙壁后的被遮挡生物、方块实体、粒子和告示牌文本。

Camera Culling Mod Icon

Requires Fabric API Java 25 License Minecraft 26.1+

📷 Camera Culling

当前版本策略: 我为 1 个版本构建 1 个 JAR。我支持活跃的 Minecraft 版本(26.1.2、26.2 和 26.3)。每个版本都原生编译,绝无妥协。

不再渲染不可见之物。轻量级、零分配的相机遮挡剔除、双面告示牌文本剔除与距离纹理 LOD。

原版的问题

在原版 Minecraft 中,游戏的渲染器会提取渲染状态并绘制成千上万的实体、方块实体、粒子四边形和告示牌文本字形,即使它们被隐藏在实心墙后、地下洞穴中,或不在你的视野范围内。此外,在远处的生物上渲染完全解析的纹理会消耗宝贵的 GPU 填充率和内存带宽。

Camera Culling 的作用

Camera Culling 从渲染根源解决这个问题。它执行闪电般的客户端光线投射和针对方块碰撞的视锥遮挡检查,以动态地不渲染被遮挡的实体、方块实体、粒子和告示牌文本面。结合智能的群体过度绘制防御、基于距离的纹理 LOD mipmap 缩放、动态 Boss/小 Boss 保护、零每帧堆分配以及防闪烁时间滞后缓冲,Camera Culling 在不改变世界模拟或网络数据包的情况下大幅提升帧率。

属于 Vanilla Outsider 合集 — 以现代标准精炼原版体验的模组。

🔗 官方 GitHub Wiki:https://github.com/Rifaditya/Vanilla-Outsider-Camera-Culling/wiki


✨ 核心优化特性

🧱 实体遮挡剔除(零分配光线投射引擎)

绝不再浪费 GPU 周期渲染你看不见的生物。针对实心方块碰撞几何体的快速多点光线追踪,会不渲染隐藏在墙壁、洞穴天花板和地形之后的实体。

  • 零分配热路径引擎: 直接传递原始坐标,消除了连续帧渲染中的中间 Vec3 堆分配,消除了在密集实体群中平移相机时的 JVM 新生代垃圾回收卡顿尖峰。
  • 多点精确检测: 评估关键的实体视线(头顶、解剖学眼高、上身、中心和高位侧翼),保证生物在拐角处部分可见时绝不会被过早剔除。
  • 方向性地板过滤: 忽略实体基础层的向上方块法线碰撞(Direction.UP),防止在斜坡和山丘上出现地面擦过的误剔除。
  • 近距离安全边距: 在你的近距离安全气泡内的生物始终平滑渲染,没有延迟。
零模拟影响: 剔除仅作用于客户端渲染提交。实体 tick、服务器同步、声音事件和物理保持 100% 活跃。

🛡️ 防闪烁时间滞后

  • 距离缩放宽限缓冲: 实现自适应帧去抖衰减(近 ≤ 32m 为 4 帧,中 32–64m 为 8 帧,远 > 64m 为 12 帧),吸收相机旋转和行走视角晃动抖动,避免突然弹出。
  • 即时取消剔除: 一旦单个视线采样连接成功,生物立即以 0 帧延迟渲染为可见。

🪧 双面告示牌与悬挂告示牌背面文本剔除

两面都有文本的告示牌会同时渲染两面的字体字形、字距表和发光轮廓 — 即使你只看一面。

  • 法向量点积数学: 计算墙上告示牌、立式告示牌和悬挂告示牌的牌面法向量,自动跳过背向相机那一侧的字体渲染通道。
  • 空白面快速通道: 自动检测空白/未书写的告示牌面,并立即跳过文本布局,零数学开销。
  • 告示牌绘制调用减少 50% 至 100%,适用于仓库和多人城镇中的告示牌。

✨ 粒子与动画遮挡剔除

  • 粒子遮挡: 针对视觉碰撞形状对粒子视线进行光线投射,在玩家相机周围有 4.0 米近距离安全气泡。
  • TextureAtlas 动画冻结: 当游戏暂停或模态菜单打开时,冻结 3D 方块动画并跳过屏幕外纹理图集帧循环。

👥 实体后实体剔除(群体过度绘制防御)

密集的生物农场和拥挤的围栏是主要的 FPS 杀手。Camera Culling 检测生物何时被前方更近的不透明生物完全遮挡。

  • 簇密度上限: 自动限制紧密 1.5 方块簇中渲染的实体数量(默认:每簇 8 个生物),防止 cramming 农场中的渲染延迟。
  • 16 米距离快速失败: 完全绕过 16 米以外的群体查询,确保大型开阔田野牧群中零 CPU 开销。
  • 装饰性与小型生物绕过: 透明或小型实体(史莱姆、岩浆怪、恼鬼、盔甲架)绝不阻挡视线或遮挡其他生物。

🎨 基于距离的生物纹理 LOD

远处的生物不需要 4K 级清晰纹理。Camera Culling 具有解耦的 3 层 OpenGL Mipmap LOD 偏置引擎,动态降低远处生物的纹理分辨率:

  • 近(< 16 方块): 100% 原生全分辨率清晰纹理(0.0 LOD 偏置)。
  • 中(16 – 32 方块): 半分辨率纹理采样(1.0 LOD 偏置)。
  • 远(> 32 方块): 四分之一分辨率低分辨率 mipmap 采样(2.5 LOD 偏置)。
  • GPU 填充率优化: 大幅减少远处大批生物上的 VRAM 填充率和内存带宽,而不降低近距离视觉保真度。

🛡️ 双层实体免疫黑名单

想让特定实体在任何情况下都不被剔除?Camera Culling 提供强大的双层黑名单系统:

  • 客户端个人黑名单: 本地存储在 config/camera-culling.json。玩家可以将他们喜爱的伙伴(例如 minecraft:wolf、minecraft:allay、minecraft:cat)加入黑名单。
  • 服务器管理员黑名单: 在 config/camera-culling-server.json 中配置。服务器管理员可以对所有连接的客户端强制执行全服务器范围的实体免疫。
  • 完全免疫: 黑名单实体 100% 免除方块遮挡剔除、群体过度绘制剔除和纹理 LOD 降采样。

👑 动态 Boss 与小 Boss 免疫

绝不再失去危险敌人的踪迹。Camera Culling 自动识别原版和模组的 Boss 与小 Boss:

  • 自动识别: 保护末影龙、凋灵、监守者、远古守卫者、劫掠兽、铁傀儡、猪灵蛮兵、唤魔者、旋风人以及模组冠军/泰坦。
  • 可配置生命值阈值:
    • 主要 Boss 阈值: bossHealthThreshold(默认:150.0 HP / 75 颗心)。
    • 小 Boss 阈值: miniBossHealthThreshold(默认:50.0 HP / 25 颗心)。
  • 绝对视线保护: Boss 和小 Boss 绝不会被实心方块遮挡剔除,绝不会被群体上限剔除,也绝不会被纹理 LOD 降采样。

📦 方块实体遮挡剔除

  • 围封检查: 自动不渲染全部 6 面都被实心不透明方块完全包围的箱子、告示牌、旗帜、头颅和饰纹陶罐。
  • 视线检查: 在激进剔除配置下,当从相机视图被阻挡时跳过渲染。

⚙️ 4 种剔除强度配置

  • LOW(保守): 4.0 方块安全缓冲、7 点采样、填充碰撞箱。
  • MEDIUM(平衡): 2.0 方块安全缓冲、5 点采样。
  • HIGH(激进): 1.0 方块安全缓冲、快速 3 点采样、激进方块实体剔除。
  • SUPER(极限 — 默认): 0.25 方块安全缓冲、超快 2 点检查,在现代系统上获得最大 FPS。

📋 快速命令参考

所有设置均可通过 /cameraculling 命令套件在游戏内查看和调整:

/cameraculling status                               → 查看实时统计、活动级别和阈值
/cameraculling toggle                               → 开启或关闭剔除
/cameraculling set <low|medium|high|super>          → 更改剔除强度预设
/cameraculling particles [true|false]               → 切换粒子遮挡剔除
/cameraculling animations [true|false]              → 切换方块与纹理图集动画剔除
/cameraculling crowdculling <true|false>            → 切换群体过度绘制/实体后实体剔除
/cameraculling cluster <1-128>                      → 设置密集生物围栏的簇密度上限
/cameraculling texturlod <true|false>               → 独立切换距离纹理 LOD
/cameraculling texturlod range <near> <far>         → 设置自定义纹理 LOD 距离(例如 16.0 32.0)
/cameraculling bossimmunity <true|false>            → 切换 Boss 与小 Boss 免疫
/cameraculling bosshealth <hp>                      → 设置主要 Boss 生命值阈值(例如 150)
/cameraculling minibosshealth <hp>                  → 设置小 Boss 生命值阈值(例如 50)
/cameraculling blacklist add <entity_id>            → 将生物加入个人客户端免疫列表(例如 minecraft:wolf)
/cameraculling blacklist remove <entity_id>         → 从个人免疫列表中移除生物
/cameraculling blacklist list                       → 列出所有个人黑名单实体
/cameraculling blacklist clear                      → 清除个人免疫黑名单
/cameraculling serverblacklist add <entity_id>      → 将生物加入全服务器管理员免疫列表(OP)
/cameraculling serverblacklist remove <entity_id>   → 从服务器管理员免疫列表中移除生物
/cameraculling serverblacklist list                 → 列出所有服务器黑名单实体
/cameraculling serverblacklist clear                → 清除服务器管理员黑名单
/cameraculling debug [true|false]                   → 切换聊天与日志中的实时诊断追踪
/cameraculling reload                               → 从磁盘重新加载配置

⚙️ 配置文件

设置直接保存到 config/camera-culling.json:

{
  "enabled": true,
  "level": "SUPER",
  "cullEntitiesBehindEntities": false,
  "maxEntitiesPerCluster": 8,
  "distanceTextureLod": true,
  "distanceTextureLodStart": 16.0,
  "distanceTextureLodFar": 32.0,
  "bossImmunity": true,
  "bossHealthThreshold": 150.0,
  "miniBossHealthThreshold": 50.0,
  "cullParticles": true,
  "cullAnimations": true,
  "cullSignText": true,
  "clientBlacklist": [],
  "debugMode": false
}

📦 安装与环境

⚛️ 环境支持

  • ✅ 仅客户端: 所有功能均在客户端完成,兼容原版服务器。
    • ✅ 也适用于单人游戏
    • ✅ 兼容任何多人服务器
  • ❌ 仅服务端: 仅服务端安装。
  • ❌ 客户端和服务端: 需要两侧都安装。

📥 安装说明

  1. 安装 Fabric API。
  2. (可选)安装 ModMenu 和 YetAnotherConfigLib (YACL) 以获得图形化设置。
  3. 下载适用于你的 Minecraft 版本的最新 Camera Culling JAR 并将其放入你的 .minecraft/mods 文件夹。
  4. 启动 Minecraft,享受流畅、优化的帧率!

☕ 支持

如果你喜欢 Camera Culling 和 Vanilla Outsider 理念,考虑为下次更新提供动力!

Ko-fi SocioBuzz Saweria


📜 致谢

角色 作者
创作者 Dasik (Rifaditya)
合集 Vanilla Outsider
许可证 GNU GPLv3

📦 整合包权限与分发: 你可以自由地将此模组包含在任何平台上的任何整合包中。但是,模组本身必须从其官方分发页面 Modrinth 或 CurseForge 下载。严禁将官方 JAR 文件重新上传或分发到第三方网站。

许可证与分支: 由于源代码采用 GNU GPLv3 许可,你完全被允许 fork 仓库、进行修改、构建你自己的版本,并根据 GPLv3 条款将其作为独立项目分发。

用 ❤️ 为 Minecraft 社区打造
属于 Vanilla Outsider 合集