异步粒子

异步粒子

异步粒子更新/渲染。

性能

AsyncParticles

  • 此模组未来将长期处于测试阶段,以提醒可能存在模组冲突问题。
  • 现已兼容 Particle Core(v20.1+)。
  • 现已兼容 Valkyrien Skies v2.4。
  • 请先阅读“疑难解答”部分。

核心功能

GPU 加速

  • 将粒子顶点变换任务卸载至 GPU,减少每帧向 GPU 上传的数据量,降低 CPU 负载,并提升帧率。
  • 这实质上取代了之前的异步粒子顶点提取功能,同时也提高了兼容性(异步粒子提取现在默认禁用)。
  • 填充 1331 个营火(16,000+ 粒子,可通过配置界面修改数量限制): 测试平台:Ultra5 225H + RTX 5060 笔记本,1080p 分辨率。 1331个营火(16,000+粒子)时的帧率

机械动力(Create)联动

  • 机械动力(Create)的装置现在可以阻挡原版天气效果。(v20.1.0a+)
    • 之后有空会把此功能移至一个新模组。
  • 粒子现在可以与装置发生碰撞。 一个阻挡了原版天气的机械动力(Create)装置

其他功能

  • 灵活的 Mixin 选项。
  • 我的世界(Minecraft)
    • 粒子剔除。
    • 异步粒子刻(Tick)。
    • 异步粒子光照缓存。
    • 将纹理刻(Tick)延迟一帧,以减少客户端刻(Tick)的持续时间。

配置

可通过模组列表/模组菜单(ModList/ModMenu)访问设置。

疑难解答

与 Polytone/Subtle Effects 一同使用

  • 禁用 Async Animate Tick。

与 Bosses Rise 一同使用

  • 启用 GPU Only Async Particle Tick。

与 BadOptimizations 一同使用

  • 在 badoptimizations.txt 中设置 enable_particle_manager_optimization: false
  • 自 20.1.1.0/21.1.1.0 版本起已修复。

与 C2ME 一同使用时崩溃

  • 在 c2me.toml 中设置 enforceSafeWorldRandomAccess = "false"
    • 仅在遇到崩溃时设置此项。

与 LodestoneLib 一同使用时崩溃

  • 在 lodestone-client.toml 中设置 buffer_particles = false。

与 ClassInstanceMultiMap 或 Level.getEntities(...) 相关的崩溃

  • 请在 GitHub Issue 中分享日志或崩溃报告。
  • 作为临时解决方案,启用以下选项: Mixin → Make 'ClassInstanceMultiMap' Thread-Safe

与 Level.getBlockEntity(...) 相关的崩溃

  • 请在 GitHub Issue 中分享日志或崩溃报告。
  • 作为临时解决方案,启用以下选项: Mixin → Make 'LevelChunk#blockEntities' Thread-Safe

ConcurrentModificationException(并发修改异常)

最常见的原因

此异常通常发生在粒子渲染和刻(Tick)同时访问同一个非线程安全的容器时。

如何修复

  • 在模组的 Mixin 设置中,将完整的粒子类名添加到 particle$lockProvider 和 particle$lockRequired 两项中。 查看配置指南了解详情

注意:这将为特定粒子类型启用细粒度锁,允许在 tick() 和 render() 方法之间安全地异步执行。

其他潜在原因

从 vX.4.0 版本开始,默认粒子渲染模式已更改为 SYNCHRONOUSLY,以防止与某些在粒子渲染期间访问外部非线程安全容器(例如全局映射或列表)的模组一起使用时,发生罕见的 ConcurrentModificationException。

  • 如果你使用的是旧版本(≤ vX.3.0),请考虑在配置界面中手动将模式设置为 SYNCHRONOUSLY 以提高稳定性。
  • 对于整合包作者:如果你想测试 FASTEST 模式是否能在你的环境中带来明显的 FPS 提升,可以在配置界面中切换——但请谨慎使用,因为它可能与不兼容的模组一起导致崩溃。

需要帮助?

如果你不确定如何识别或修复问题,请开启一个 GitHub Issue 或发起一个 Discussion。

  • 在 x.4.0 版本中,更改了默认粒子渲染模式为 SYNCHRONOUSLY,以避免与某些模组一起使用时发生罕见且令人困惑的 ConcurrentModificationException。
    • 如果你仍在使用旧版本(≤ x.3.0),可能需要考虑在配置界面中手动将其设置为 SYNCHRONOUSLY。
    • 如果你是整合包作者,或者想测试其他渲染模式(例如 ASYNCHRONOUSLY)是否能在你的整合包中带来明显的 FPS 提升,可以在配置界面中手动选择其他枚举值——请谨慎使用。

推荐的模组

  • ModernFix
  • Sodium/Embeddium
  • Flerovium
  • Startlight/ScalableLux

模组兼容性

✅ 兼容(主动适配)

  • Sodium/Embeddium
  • Flerovium
  • Iris/Oculus
  • 机械动力(Create)
  • Create: Aeronautics
  • Valkyrien Skies
  • Particle Rain
  • Simple Weather
  • Particle Core
  • …

❌ 不兼容

  • OptiFine
  • MadParticle

致谢