
杜阿塔尔:优化
使用异步遮挡剔除和更快的顶点写入获得更高帧率。
DUATAR: Optimization
一个轻量级的客户端性能模组。
它不替换渲染器,而是修复了在对原版游戏进行性能分析时发现的两个特定瓶颈,其余一切保持 Mojang 编写的原样。游戏看起来完全相同,只是渲染的工作更少,并且执行得更快。
---
## 特性
### 异步遮挡剔除
原版已经会跳过视野之外的对象,以及它能够证明被隐藏的整个区块区段。但在每个可见区段内部,它仍然会渲染所有实体和方块实体,即使是墙后的那些:山丘另一侧的生物、房子里的箱子、隔壁房间里的告示牌。
本模组会在后台线程上检查实体和方块实体(箱子、告示牌、旗帜等)是否被固体方块遮挡,并跳过渲染你看不见的那些。
- 绝不阻塞游戏。 检查在它自己的线程上运行;渲染只读取最新的结果。
- 有疑问时照常渲染。 玩家、带有可见名称标签的实体、发光的实体、被拴绳牵引的生物、载具与乘客、末影龙以及超大物体永远不会被剔除。旁观者模式下不会剔除任何东西。
- 低后台开销。 没有移动的物体,从没有移动的相机看去,不会在每个周期重新检测。
### 更快的顶点写入
在 Java 25 上,LWJGL 写入顶点数据的方式导致 JIT 编译器无法在 Minecraft 庞大的顶点构建方法中对其进行优化。当屏幕上有大量实体时,仅此一个问题在性能分析中就占用了渲染线程约 45% 的时间。本模组改为通过一个共享内存段写入完全相同的字节。
- 加速所有使用 Minecraft BufferBuilder 构建的内容:实体、方块实体、文本、GUI 和区块网格。
- 启动时会运行自检。如果任何内容不匹配,模组会自动回退到原版代码路径。
---
## 基准测试
使用模组内置的基准测试,在 AMD Radeon 集成显卡、16 个 CPU 线程、Java 25、854×480、渲染距离 12 的条件下测得。每个数值为多个测量阶段的平均值。
石墙前方有 427 个生物和 250 个方块实体
- 原版:平均 48.7 FPS,1% low 23.8 FPS
- 使用模组:平均 238 FPS,1% low 87 FPS
开阔视野,382 个生物可见
- 原版:平均 63.9 FPS,1% low 31.4 FPS
- 使用模组:平均 91 FPS,1% low 50.8 FPS
第一个场景是剔除的最佳情况。实际收益取决于你的世界和硬件:如果你的 GPU 是限制因素(例如在高分辨率下),提升会更小。
对每项优化分别开启和关闭时拍摄的截图进行了逐像素比较,未显示任何渲染差异。
---
## 配置
文件:config/duatar_forge_optimization-client.toml
- entityCulling(默认 true):跳过被不透明方块遮挡的实体。
- blockEntityCulling(默认 true):跳过被不透明方块遮挡的方块实体。
- fastVertexWrites(默认 true):使用更快的顶点写入路径。需要重启。
如果任何优化与其他模组发生冲突,都可以单独关闭。
---
## 常见问题
它会改变游戏的外观吗?
不会。它只是跳过你看不见的对象,并以更快的速度写入相同的顶点数据。
它能替代 Sodium 或 Embeddium 吗?
不能。它保留原版渲染器并移除特定瓶颈,这使其保持小巧且兼容。
我的日志显示 "WARNING: A restricted method in java.lang.foreign.MemorySegment has been called"。
这是预期内的,无害。当更快的顶点写入设置其内存段时,Java 会打印一次此信息。
我如何确认它已生效?
你的日志中应包含 Fast vertex writes active 这一行。
---
## 致测试者:内置基准测试
在你的启动器配置文件中添加 JVM 参数 -Dduatar.benchmark=12。游戏随后会:
1. 创建一个名为 duatar_benchmark 的超平坦世界(每次运行都会删除并重新创建)。
2. 在剔除关闭和开启的情况下测量帧时间、1% low 和内存分配。
3. 将报告保存到 duatar_benchmark 文件夹,将截图保存到 screenshots,然后关闭游戏。
运行时,基准测试会更改一些选项(关闭 VSync、无限 FPS、渲染距离 12、窗口失去焦点时不暂停),因此之后请检查你的设置。正常游玩时请再次移除该参数。
---
属于 DUATAR 模组系列的一部分。欢迎在 co 中提交错误报告和反馈
正在加载版本记录…
正在加载评论…
评论在新手盒子客户端中发表,这里同步展示。