Window Resize Fix (Iris & Distant Horizons)
修复 Iris 中调整窗口大小后 Distant Horizons 出现故障,以及世界深度缓冲区未跟随替换后的渲染目标的问题。
介绍
这是什么
一个小型客户端模组,可修复 Iris 中两个深度缓冲区缺陷。两者都源于同一个问题:Iris 不拥有世界的深度缓冲区,而是借用 Minecraft 的缓冲区;至于何时重新借用,它依据的计数器却无法回答它实际想问的问题。
Minecraft 1.21.1 / NeoForge 21.1.x。不会对你的世界进行任何写入。
修复 1——调整窗口大小后,Distant Horizons 会停止工作
无需渲染缩放模组。此问题影响原版 Iris + Distant Horizons。
拖动游戏窗口边缘,或切换全屏状态后,Distant Horizons 就会停止渲染。除非重新加载世界,否则它会一直无法正常工作。
原因:Iris 调整渲染目标大小时,会遍历它拥有的所有帧缓冲区,并将 Minecraft 的深度纹理挂接到每个缓冲区上——Distant Horizons 的帧缓冲区也在其中,但它们必须保留 DH自己的深度纹理。负责重新挂接的代码会检查纹理 ID,但 DH 的 ID 从未改变,只有挂接关系变了。因此,深度纹理始终不会恢复。
此模组会在重新挂接流程开始时清除记录的 ID,让 Iris 自己的代码照常重新挂接。
修复 2——世界的深度缓冲区不会随替换后的渲染目标更新
如果你使用的模组以不同于窗口的分辨率渲染世界(例如渲染缩放模组或动态分辨率模组),Iris 最终会将画面绘制到一种尺寸的颜色缓冲区中,却搭配另一种尺寸的深度缓冲区。Distant Horizons 的 LOD 会显示在所有内容上方,世界画面也可能被拉伸或重影。
从 Iris 编译后的代码中读出的原因:
// RenderTargets.resizeIfNeeded and DHCompatInternal.reconnectDHTextures
if (depthBufferVersion != cachedDepthBufferVersion) { /* only here is a new depth taken */ }
该计数器能回答“此渲染目标是否重新创建了缓冲区?”却无法回答“现在是不是换成了另一个渲染目标?”——而这恰恰就是另一个模组向 Minecraft 提供不同主渲染目标时发生的情况。
针对这一现象,常见的建议是“调整游戏窗口大小,直到问题自行修复”。这之所以有效,恰恰是因为调整窗口大小会让 Minecraft 重新创建渲染目标,从而递增计数器。
此模组会检查深度纹理的ID和 Distant Horizons 纹理的尺寸,而不是依赖计数器。正常游戏时,每帧只需进行一次整数比较。
已证实与尚未证实的内容
这两个缺陷都是直接从 Iris 1.8.14 的字节码中读出的;修复 1 也已在游戏中确认:安装此模组后,日志会显示 DH 深度纹理会随世界分辨率变化重新挂接,而且 DH 会持续正常渲染。
尚未完成的是:针对上游公开问题进行受控的修复前后对比。该问题的症状与修复 2 相符(RenderScale#59)。修复机制已得到证实;但本文不声称“这能修复该问题”。开发过程中,有一个看起来完全相同的画面问题,最终发现原因毫不相关——另一个模组在帧渲染过程中泄漏了视口设置。
需求
Minecraft 1.21.1、NeoForge 21.1.x、Iris。Distant Horizons 为可选项——没有它,修复 1 就没有适用对象。
许可证
MIT。
常见问题
Window Resize Fix (Iris & Distant Horizons) 支持哪些 Minecraft 版本?
Window Resize Fix (Iris & Distant Horizons) 支持 Minecraft Java 版 1.20.1–26.3,共 23 个版本,可用的加载器:Fabric / NeoForge。下载时注意选择和你游戏版本一致的文件。
Window Resize Fix (Iris & Distant Horizons) 怎么安装?
先用 PCL2 或 HMCL 启动器安装对应版本的 Fabric / NeoForge,再把下载的 .jar 文件放进游戏目录的 mods 文件夹,重新启动游戏即可。开启了版本隔离的,mods 文件夹在 versions/版本名 下面。
mzg 的其他作品
查看全部 →Vira
Renders the world below native with an FSR 1.0 upscale and rebuilds the shader shadow map every Nth frame. Never invents a frame.
Gear Vanish
Turn your armor into cosmetics: hide it, or keep only the trim glowing on bare skin. Synced to everyone, with rules that bring gear back when it matters.
Flywheel OIT Fix
Fixes Create's shafts and cogwheels rendering as blown-out white shapes under shaders
TFMG Electricity Performance Patch
Fixes the per-tick electrical network rebuild loop and the quadratic network update in Create: The Factory Must Grow.
评论
登录后评论和评分