
飞轮OIT修复
修复了Create模组的传动轴和齿轮在光影下渲染为过曝白色形状的问题。
这是什么
这是一个单 mixin 客户端修复,用于解决 Create 的传动轴、齿轮以及其他使用 Flywheel 实例化渲染的模型在启用光影包时显示为过曝的白色形状的问题。
适用于 NeoForge 21.1.x / Minecraft 1.21.1。不会修改或重新分发任何内容——安装、移除都不会对你的世界写入任何数据。
问题描述
开启光影包后,Create 的动力机械看起来不再像实际物体。传动轴变成纯白色条状,齿轮丢失齿牙,所有东西都向周围方块溢出泛光。通常的描述是“发光且半透明”,但这是肉眼对实际故障的解读:几何体被绘制得极其过亮,曝光度摧毁了形状。
世界中其他一切渲染正常。关闭光影后,Create 又恢复正确显示。
原因
Flywheel 支持与顺序无关的透明(OIT)。标记为 Transparency.ORDER_INDEPENDENT 的材质不会像其他内容一样被绘制——InstancedDrawManager.render 会将它们排序到单独的 oitDraws 列表中,渲染到累积缓冲区(OitFramebuffer),随后在合成阶段解析该缓冲区。
iris-flywheel-compat 提供了自己的 IrisInstancedDrawManager,它是该方法的副本——相同的字段、相同的调用顺序——因此继承了这一分派逻辑。但其程序由 irisflw 自己的编译器构建,而非 Flywheel 的,合成步骤没有保留下来。累积缓冲区从未被解析,最终屏幕上呈现的是原始的加权累积结果。
这正是原始累积所呈现的样子:过于明亮、形状被洗掉、产生泛光。
这个模组做什么
它将 ORDER_INDEPENDENT 报告为 OPAQUE,从而将这些绘制发送到不需要解析的普通路径。几何体恢复正常显示。
该切换以 ShadersModHelper.isShaderPackInUse() 为条件。**没有光影包时一切都不会改变**——Flywheel 自身的 OIT 工作正常,保持原样。
权衡,明确说明
当光影包激活时,Flywheel 中真正需要顺序无关混合的材质会以不透明方式渲染。实际上,相比被修复的 bug,这一点很难被注意到,而大多数人最终采用的替代方案是 backend = "flywheel:off"——这会完全禁用 Flywheel,将所有方块实体重新交给 CPU 处理。
安装
将 jar 放入 mods/ 文件夹。**仅客户端**——只改变渲染,其他什么也不改。已设置 displayTest = "IGNORE_ALL_VERSION",因此加入服务器时不会引起模组列表不匹配。
需要 Flywheel(随 Create 捆绑提供)。只有与 iris-flywheel-compat 一起使用时才有实际效果,但没有它也无害。
以下情况你不需要此模组
- 你不使用光影
- 你不使用
iris-flywheel-compat - 你的 Flywheel 后端已经是
flywheel:off——不过现在你可以重新开启它,这正是本模组的意义所在
如果未来版本导致失效
Mixin 配置使用了 "defaultRequire": 1,因此如果 Flywheel 更改目标方法,游戏会因明确的 Mixin 错误而无法启动,而不是静默失效。如果发生这种情况,请移除本模组。
备注
与 Create、Flywheel 或 iris-flywheel-compat 的作者无关。通过针对实际整合包逐项排除法找到问题:生成的 GLSL、Java 和 GPU 中的光照值、实例颜色和透明度、打包的材质 uniform 以及光影包程序都被逐一测量和排除,最终累积缓冲区成为唯一剩余的可疑项。
期望是上游在 iris-flywheel-compat 中修复此问题,届时本模组将变得不再需要。
正在加载版本记录…
正在加载评论…
评论在新手盒子客户端中发表,这里同步展示。