跳到正文

LightStar

作者:TheFlareStar

光照计算速度提升一倍,区块构建速度提升49%,探索过程更加流畅,卡顿也显著减少。

收藏

介绍

介绍由机器翻译自 CurseForge 原页面,仅供参考。

📖 概述

这是一个客户端光照计算优化模组,通过缓存光照查询结果、优化区块构建期间的数据读取路径,并与 Sodium Dynamic Lights 集成以消除冗余计算,从而降低区块加载、视角旋转和大规模方块变化时的 CPU 开销。

简单来说:光照计算速度提升两倍,区块构建速度提升 49%,探索更流畅,卡顿显著减少。


✨ 关键结果

基于 120 秒的 Spark A/B 测试,唯一变量为是否安装 LightStar:

指标 未安装 Lightstar 安装 Lightstar 提升
光照计算总时间 基准 -52.5% 快 2 倍
光照处理吞吐量 1.0x 2.1x +110.5%
Embeddium 区块构建吞吐量 1.0x 1.49x +49%
动态光照查询时间 82.3 秒 0.05 秒 -99.94%

结果为两组测试(开启/关闭光影)的等权平均值。

测试配置:AMD Ryzen 9 9950X3D + NVIDIA RTX 4080 Super OC。实际使用中,中低端配置将获得更明显的提升。


🎯 预期收益

  • 减少 Embeddium 异步区块构建期间的冗余光照查询、坐标转换和数组清理。
  • 减少重复采样同一位置时的哈希查找和数组访问。
  • 复用相同不可变区块快照的静态光照结果,降低重复区块构建的开销。
  • 阻止不支持 Forge 外部面剔除的方块进入相邻面剔除查询。
  • 安装 Sodium Dynamic Lights 后,减少动态光照查询期间的冗余遍历、读写锁争用和线程本地状态开销。

⚙️ 实现细节

光照缓存

使用 4 路组相联的线程本地原始类型缓存来存储最近的光照值,并为最近访问的位置额外提供单条目快速路径。光照更新会推进一个数字代数计数器,立即使旧结果失效。DataLayer 的半字节读取使用直接索引和位运算,以减少热路径上的辅助方法调用和乘法运算。

Embeddium 区块构建

  • 单次遍历读取方块光和天空光,消除对相同坐标的第二次区段查找。
  • 方块光固定于低 4 位,天空光固定于高 4 位,消除对枚举顺序的依赖。
  • 使用 16 位代数数组,而非为每个构建任务清零全部 8000 个缓存槽位。
  • 为克隆的不可变区段分配数字修订号;仅当世界、原点及所有区段修订号均匹配时才复用跨任务缓存。
  • 跨任务缓存使用访问顺序淘汰策略,并在世界登录/登出时清空。

Sodium Dynamic Lights 集成

  • 动态光源查询状态和一个 4096 项 4 路组相联缓存直接由 ArrayLightDataCache 实例持有,消除了 ThreadLocalMap 查找。
  • 在每个构建任务开始时,会在 SDL 读锁下复制动态光源引用的快照。任务内的查询直接遍历此快照,避免每次采样都获取 ReentrantReadWriteLock。
  • 光源更新会推进世代计数器;移动光源永远不会写入持久缓存或留下静态残影。
  • 非区块构建路径保留完整的 SDL 回退行为以保持兼容性。

⚠️ 不兼容性

  • Starlight — 不兼容。
  • Sodium/Embeddium Options API — 不兼容。此模组没有实际用途,且不是 Sodium Dynamic Lights 的必需依赖。

常见问题

LightStar 支持哪些 Minecraft 版本?

LightStar 支持 Minecraft Java 版 1.20.1,可用的加载器:Forge。下载时注意选择和你游戏版本一致的文件。

LightStar 怎么安装?

先用 PCL2 或 HMCL 启动器安装对应版本的 Forge,再把下载的 .jar 文件放进游戏目录的 mods 文件夹,重新启动游戏即可。开启了版本隔离的,mods 文件夹在 versions/版本名 下面。

评论

登录后评论和评分

TheFlareStar 的其他作品

查看全部 →