噪声增强

噪声增强

优化了噪声生成,显著提升了加载速度。

性能

Noise Boost

Noise Boost 是一个 Minecraft 世界生成性能优化模组,是 FastNoise 的分支。

它进一步优化了噪声填充、生物群系生成、含水层计算、区块调色板写入和高度图处理。该模组不包含配置文件——只需安装即可生效。

在相同的模组包、相同的探索路线和可比的测试条件下,与 FastNoise 相比,Noise Boost 的世界生成性能大约提升了 15%。

主要特性

  • 重写了噪声区块填充的热路径,直接进行插值、方块写入、流体后处理和高度图更新,减少了冗余调用和对象分配。
  • 为 PerlinNoise 预构建了有效的倍频程执行计划,只遍历实际存在的倍频程,并使用固定的原始数组存储振幅和频率因子。
  • 复用密度函数临时数组,并严格限制深度和长度上限,减少短生命周期垃圾。
  • 缓存含水层候选位置、坐标和距离;当相邻方块沿单一坐标轴变化时,增量更新平方距离,避免每次调用都进行完整的三轴距离计算。
  • 在同一方块内延迟求值并复用屏障噪声结果;移除含水层热路径中的回调对象和冗余的绝对值计算。
  • 为原版默认距离度量提供无分配版本的 Climate.RTree 搜索内核,同时保留原始子节点顺序和严格比较规则。
  • 优化生物群系调色板构建、区块段写入、材质规则遍历和高度图处理。
  • 在噪声插值完成后立即释放临时数组和含水层缓存。

性能说明

当前基准测试结果显示,Noise Boost 比 FastNoise 大约快 15%。实际提升可能因以下因素而异:

  • CPU 架构和可用线程数;
  • JVM、堆内存和垃圾回收器设置;
  • 世界种子、维度和地形生成器;
  • 渲染距离、预生成范围和探索路线;
  • 模组包中的其他生物群系、结构和世界生成模组。

因此,15% 是基于当前测试环境的参考值,不保证在所有配置下都能获得相同的提升。

内存与生命周期修复

Noise Boost 解决了在 FastNoise 派生实现中发现的可疑内存泄漏或对象保留问题:

  • NoiseChunk 使用的临时密度计算数组在插值完成后会清除引用;
  • 含水层候选位置、候选坐标、候选距离和临时屏障噪声缓存在区块噪声生成完成后被释放;
  • 可复用数组有严格的深度和长度上限,防止无界增长;
  • Climate.RTree 中的线程局部搜索状态在每次查询后清除叶节点引用,防止长期保留世界拥有的对象;
  • PerlinNoise 中的倍频程执行计划仅由对应的噪声实例持有,不建立静态对象引用链;
  • 不使用 Worker ThreadLocal 缓存来永久持有区块、NoiseChunk 或含水层对象。

这些更改主要防止临时世界生成数据被意外保留。这里提到的“内存泄漏修复”特指已识别的潜在保留路径,并不保证解决由其他模组或 JVM 本身引起的所有内存问题。

来源与致谢

Noise Boost 基于 ZenXArch 的 FastNoise 开发。感谢 FastNoise 的原作者为世界生成优化提供了基础。