在 Minecraft 26.1上使用 Iris 前,你需要知道这些
GeForceLegend
2026年04月04日 16:56

由于 Minecraft Java Edition 正在为 Vibrant visuals 提前做一部分准备,26.1 的部分渲染机制被大幅更改,并且影响到了 Iris Shaders 模组,预期也会大幅影响 Optifine。这会导致相当一部分光影包在做出对应更改前部分效果永久损坏,而且部分效果可能无法修复。

本文并无责怪 Iris 或者原版更改的意思,仅提示在 26.1 上使用光影包时可能遇到的部分现象,此种情况为预期之内,建议等待对应光影作者修复;并且由于存在一些可能无法修复或难以修复的问题,在 26.1 上开光影时请预先做好碰到部分视觉错误的准备。

对光影包来说破坏性改动主要来源于半透明实体与粒子等的独立渲染。现在任何存在 OpenGL 混合方式而非关闭 OpenGL 混合的渲染类型均会进入半透明渲染函数,在 Iris Shaders 上会在 deferred 着色器执行完后再进行渲染,而不透明实体与先前一样在 deferred 着色器执行前渲染;粒子则反之,1.15 开始粒子效果均于 deferred 着色器之后渲染,而现在一部分不透明粒子会在 deferred 着色器之前渲染。

除了让一部分实体在光影中也会被完全视为半透明,和一部分粒子被视为不透明外,最明显的影响为如果光影内不透明与半透明的 gbuffer 写入的目标缓冲并不相同,26.1 的 Iris Shaders 上渲染顺序被改变了的物体会写入错误的缓冲,从而导致不透明粒子与半透明实体的渲染错误,甚至直接消失不见。目前 Iris Shaders 上修复方法为使用 Iris 额外提供的 gbuffers_entities_translucent 等专为半透明使用的 gbuffer 着色器为半透明实体、粒子等写入对应的正确缓冲。如果光影在先前实现了 Iris 的 separateEntityDraws 功能兼容,预期在新版本受到的影响会小不少。

个人 PTGI 魔改项目 GFME 的 gbuffers_entities_translucent 添加前后示例。原先不可见的染色玻璃为方块展示实体。

部分问题仍然接近无法解决。在上图示例中,盔甲架上的盔甲仍然无法显示附魔光效,马的花纹与旗帜的图案仍然丢失。个人认为,这些用于在场景的不透明物体上添加装饰的半透明渲染叠加层不应该被归类为半透明渲染,而应该直接在对应的主体部分被渲染完成后于不透明渲染部分末尾执行。后处理光影几乎无法正确处理这些与半透明部分一起渲染的不透明物体叠加层,即使能够处理也需要付出相当大的代价,例如额外计算一次不透明光照,或者额外划分大量缓冲同时处理不透明与半透明的 gbuffer 信息并且实时考虑是否需要将部分半透明视为不透明。这种渲染排序在原版也造成了部分问题,例如 MC-307063,如果 Mojang 不现在修复这些问题,将来在 Vibrant visuals 上也会受到影响。

此外,由于部分实体会获得反直觉的排序,例如第三人称的玩家会被恒定视为半透明物体,即使添加了半透明物体对应的 gbuffer,仍然可能出现预期之外的渲染效果。而且同上,将来在 Vibrant visuals 上也会受到影响,Mojang 现在不管将来也会不得不管。

目前 26.1 的 Iris Shaders 也有一部分自己的问题,例如 gbuffer 内不再强制将颜色纹理绑定至 0 号纹理索引,导致 PTGI(以及目前的 GFME 版本,因为我没有更改这一部分)因为在附魔光效 gbuffer 内使用 colortex0 而非 gtexture 等规范名称,附魔光效将使用错误的纹理。我仍然在积极联系 Iris Shaders 开发者并商讨修复方案,争取进一步减少当前 Iris Shaders 的 bug 数量。

如果你使用的光影在 26.1 上碰到了类似的问题,请告知光影作者后耐心等待作者进行修复。对于一些难以修复的问题,大概率会在将来的 Vibrant visuals 更新中由原版解决。原版的渲染方式大改难免会对现有光影包加载模组产生冲击,如果对新版本运行光影包效果不满意的话可以暂时考虑游玩低版本 Minecraft。

个人随笔,如有语法错误或者不通顺之处,还请多多谅解。