失落的城市:多线程

失落的城市:多线程

LC²H V3将失落的城市加速为巨型城市,游戏体验闪电般快速、丝滑流畅。完全兼容C²ME。我为这个成果感到自豪,希望每个人都能喜欢使用它 :]

性能

LC2H | 失落之城:多线程版

在模组中支持你的语言!

Crowdin

Quantified API

下一代已经到来

LC2H V4.0.0-BETA

对失落之城生成路径的正式重写,而不是旧版基础上的又一层补丁。

这是一个测试版本。在将其用于大型长期世界之前,请先用你实际的整合包进行测试。


兼容性

构建与测试环境:

  • Minecraft 1.20.1
  • Forge 47.4.x
  • 失落之城 7.5.x
  • Quantified API 2.2.0

LC2H 还包含对 Distant Horizons、C2ME、Sinytra Connector、模组地形、模组结构以及跨区块世界生成特性的兼容性处理。

世界生成仍然会受到整合包中其他内容的影响。含有大量结构、地形模组、自定义树木、光照改动或 Distant Horizons 的整合包,其表现可能与纯净的失落之城环境截然不同。


许可声明

LC2H 采用 BRSSLA V2.0.0 许可协议。

在重新分发此模组(包括包含于整合包中)之前,请阅读完整的许可协议。

阅读 BRSSLA V2.0.0


LC2H 是什么?

LC2H 是失落之城的性能与稳定性重制层。

它不会取代失落之城的配置、结构、风格或游戏玩法特性。它改变的是昂贵工作的准备、调度、缓存和应用方式。

核心目标很简单:当城市开始生成时,不再让失落之城榨干 Minecraft 的主线程。

旧版失落之城的工作与共享状态、串行规划和昂贵的重复查找高度耦合。这对正常的世界生成负载来说没问题,但当你将大城市与地形模组、结构、树木、高速公路、隧道以及 Distant Horizons 结合时,问题很快就会变得棘手。

LC2H 将安全的规划工作移出主线程,让 Minecraft 的方块修改保持在 Minecraft 期望的线程上,并防止重复工作在多个世界生成线程之间成倍增加。


V4.0.0 — 真正的重建

V4 不是在 V3 上再叠加一层缓存。执行模型的大部分被重建了,因为旧的混合路径已经到了每个修复都会产生两个新的奇怪边缘情况的地步。

新流水线围绕作用域规划、不可变数据、多区块所有权和安全应用构建。

  • 昂贵规划数据只捕获一次并被复用,而不是由每个工作线程重复构建。
  • 世界和维度缓存的作用域被正确划分,防止旧世界数据泄漏到新世界中。
  • 单飞规划机制防止多个工作线程同时计算同一个昂贵的区域。
  • 多区块建筑保留其完整占地面积,而不会被另一个区块截断。
  • 道路、高速公路、隧道、城市楼层和地形边缘处理被统一规划。
  • 跨区块树木被捕获并重放,不会留下被砍断的树干或悬浮的树叶。
  • 结构保护防止许多原版和模组结构穿过城市。
  • Distant Horizons 保持对其自身远距离生成路径的所有权。
  • 失败的快速路径回退到 CPU,而不是阻塞世界生成或损坏世界。

Minecraft 仍然拥有最终的方块修改权。LC2H 不会从随机的工人线程盲目写入世界然后祈祷一切都不爆炸。


城市安全结构处理

城市和普通 Minecraft 结构天然无法理解彼此的边界。这就是为什么你会看到屋顶被切成两半、建筑出现在街道中间、树木悬挂在空中、结构直接穿过城市街区生成。

V4 添加了完善的结构保护路径,跟踪城市和多建筑占地面积,而不是每次结构询问是否可放置时都做一次微小的逐块猜测。

  • 结构起点在与受保护的城市空间重叠时可以被拒绝。
  • 大型多建筑在放置前保留其完整占地面积。
  • 较小的结构仍然可以利用剩余空间,而不是让整个城市区域作废。
  • 道路和隧道区域受到保护,不会被不相关的结构暴露。
  • 树木和植被工作可以推迟到跨越区块边界时进行。
  • 悬浮的藤蔓、草丛和残留植被可以在有界批次中被清理。

这仍然是测试版,所以不寻常的结构模组应该进行测试。该系统设计为安全失败,而不是静默地摧毁一个城市区块。


性能数据

没有虚构的"100 倍加速"之类的废话。以下是 V4 重写基准测试在已确认热路径上的真实结果。

工作负载 测量结果
噪声计算 快 9.16 倍 至 18.64 倍
城市中心随机访问 快 4.25 倍 至 9.49 倍
直接城市决策 快 1.52 倍 至 2.61 倍
城市区域遍历 快 2.11 倍 至 2.73 倍
树木邻域查找 快 24.36 倍 至 28.16 倍

这些是针对性热路径测量,而不是通用的每秒区块数保证。实际世界生成速度取决于你的 CPU、磁盘、地形、结构、光照、流体、渲染距离、Distant Horizons,以及所有其他争抢同一台机器的模组。

关键点在于,这些提升来自于完成更少的工作,而不只是向昂贵的路径上投入更多的工作线程。


一致性与安全性检查

  • 噪声一致性误差保持在 4.1e-16 以下。
  • 65,536 个城市随机一致性样本完成时零双重不匹配。
  • 整数城市一致性完成时零不匹配。
  • GPU 结果在发布前经过验证。
  • 不可用或失败的 GPU 路径自动回退到 CPU。

目标不是将所有内容强行推到 GPU 或工作线程上。目标是让快速路径变得廉价,同时为不寻常的地形和模组世界生成保留精确的回退行为。


Vulkan 与 Quantified API

当 Quantified API 找到可用的 Vulkan 运行时,LC2H 可以使用 Vulkan 处理选定的计算密集型规划任务。

  • Vulkan 在主游戏循环之外被探测和预热。
  • 工作以批次提交,而不是每个区块一次微小分发。
  • GPU 输出在被允许影响世界之前经过检查。
  • 运行时故障回退到优化的 CPU 路径。
  • OpenCL 仍然保持可选,仅在实际存在运行时绑定时激活。

如果你的机器没有可用的 GPU 运行时,LC2H 仍然可以工作。你只会使用优化的 CPU 路径。


配置界面与基准测试

打开 Mods 菜单,选择 LC2H,然后打开 Config。

配置界面包括缓存控制、性能设置、诊断工具和集成基准测试。

  • 已加载区块
  • 有效 CPM
  • 平均和最小 TPS
  • 游戏刻计时
  • 冻结次数
  • 硬件信息
  • 最终基准测试评分

在你自己的整合包上、更改设置前后分别运行基准测试。将一个干净的测试世界与一个大型整合包进行比较,然后把结果称为性能回退——这从一开始就是荒谬的 xd


V2 对比 V3 对比 V4

V2 专注于在失落之城之上叠加部分异步钩子。它减少了一些卡顿,但大量昂贵的逻辑仍然依赖于共享状态和主线程。

V3 通过更广泛的异步调度、缓存、树木重放、GPU 实验和更安全的应用工作推进得更远。

V4 是下一步。它专注于让热路径更廉价、保持所有权清晰、防止重复规划,并正确处理大型多区块世界生成。

V4 的目标不是用更多线程来隐藏慢算法。目标是先让算法更廉价,然后再安全地扩展。


V4 的故事

LC2H 的诞生是因为失落之城是这样一个模组:世界看起来令人惊叹,但当生成器忙碌时,游戏绝对可能崩溃。

V1 和 V2 是早期实验。它们证明了失落之城的部分功能可以被移动,但它们仍然建立在太多旧假设之上。

V3 是第一个重大飞跃。它引入了真正的异步规划、更安全的转换层、缓存工作、树木重放,以及早期的 Quantified API 集成。

V4 是旧的混合方法最终不得不退场的时候。项目变得太大,无法再持续打补丁,所以重要部分围绕作用域状态、不可变计划、多区块所有权和可度量热路径进行了重建。

一路上有很多恶性世界生成 bug。被砍断的树、破碎的屋顶、缺失的结构、被压平成墙的地形、日志看起来正常但实际什么都没做的 GPU 路径,以及在重新加入世界之前表现完美的缓存 xd

这就是为什么 V4 被标记为测试版。架构要干净得多,测得的热路径要便宜得多,但真实的整合包仍然需要真实的测试。


鸣谢与作者

非常感谢 McJty 创造了失落之城

LC2H 的存在是因为失落之城值得扩展到现代硬件,而不失去让它如此出色的视觉特征。

关于作者

我是 AdmanyBlackRift Studios 的创始人。

LC2H 与 Mojang 或 McJty 没有任何关联。它是一个性能和稳定性重制层,而不是失落之城的替代品。

许可协议:BRSSLA V2.0.0


LC2H V4.0.0-BETA | 由 Admany 创作 | BlackRift Studios :DDD