【功能建议】针对 Modder 的 Shaders 兼容指南
3TUSK opened this issue · 2 comments
模块
「创作指南」、「疑难解答-进阶问题」、或新开一版
简述
针对 Modder(尤其是涉足渲染相关代码的 Modder)在遇到和 Shader 不兼容等类似问题时,或有意为 Shader 用户提供更好体验时,可参考的一份快速入门指南。
文档原址
N/A
具体内容
长久以来,以 OptiFine 为代表的模组在 Modder 群体中的评价普遍不高,主要原因则是因其闭源导致的「遇到兼容问题时,根本无从下手」等诸多问题。Iris 诞生的目标之一也正是在兼容性问题上发力,且业已取得一定成果。
然而,放眼整个 Modded Minecraft 社群,我们至今仍然没有看到一份行之有效的「如何兼容 Shader」的指南。但凡 Modder 们想为各自的 Mod 追加视觉上的全新效果,就很有可能会撞到和 Shaders 的兼容性问题,而此时几乎所有 Modder 都会束手无策,除了要求用户卸载 Shaders 相关模组,恐怕只能提供一配置文件选项以供用户关闭那些「来自 Mod 的视觉效果」。
诚然,直接禁用特性可以解决问题,但这显然是个治标不治本的解决方案。遥想当年 Mod 加载器还未诞生的黑暗时代,两个模组若同时修改一个 class
文件,则这两个模组绝无同时安装之可能。Mod 加载器的出现在解决了这一看似不可解问题的同时,也将 Modded Minecraft 带出了名为 “jar mod” 的蛮荒时代。
我们是否可以为 Modder 提供一份「可以按部就班,一步步操作,然后就能解决兼容问题」的「Shaders 兼容指南」?依 Shader 的实现方式不同,预期该指南可分为如下几大章节:
- 对 Iris 兼容指南。可能是其中最好写的一个。
- 对 Oculus 兼容指南。
- 对 Canvas 兼容指南。考虑到 Canvas 的状态,不知道有无必要。
- 对 OptiFine 兼容指南。可能是最困难的一个,但有鉴于其悠久的历史,完全不能直接无视。
- 对 Shadersmod 兼容指南。我指的是合并入 OptiFine 之前的 Shadersmod。因其仅适用 Minecraft 版本过于古老(可能最高仅到 1.7.10 或者 1.8,待查),实际上这一小节可能完全没有实际意义。放在这里也仅供讨论。
- 对基于原版资源包的 Shader pack 的兼容指南。我甚至不知道这个和上面的「对 OptiFine 兼容」哪个更难。
- 附加篇:对 Sodium 兼容指南。好像简单多了……
又翻阅了一遍 Iris 的 repo 及网站。事实上 Iris 也没有在这两个地方提供任何针对「想主动提供对 Iris 兼容的 Modder」的 actionable items。
不过有必要指出的是,若直接前往其 Discord 寻求技术支持,是可以得到相当精确的技术分析的。鉴于此,「对 Iris 兼容指南」的一个可能切入点便是「直接收集整理以往所有的技术支持求助」。
以下仅作为本人的一点提醒:
mod和shader这边恐怕能算是互不照应了,尽管Optifine有提供mod维度专属渲染的功能(类似下界的world-1和末地的world1,在shaders文件夹下创建worldID文件夹即可在这个文件夹内放置对应ID维度的专属着色器),几乎没有着色器会考虑mod维度的兼容,也很少有光影会在block.properties内写上mod方块的ID映射(这对于以体素化PT光影为主的自己设置方块ID映射然后对特定ID赋予特殊属性的光影来说意味着几乎完全的mod不兼容)。几乎所有的着色器都是在只考虑原版情况下写的,而且部分着色器使用了大量只在原版条件下生效的trick,这意味着即使mod完美对接了Optifine的着色器程序,也可能因为shader自己使用的trick而出现意料之外的效果。
除此之外,除了以BSL等为主的特效相对精简的光影,大部分着色器的光照计算与半透明渲染都是在延迟渲染管线内完成的,这意味着绝大部分gbuffer都关闭了半透明的混合,而大部分特效使用的粒子着色器gbuffers_textured(_lit)更是在不同的Minecraft版本有不同的属性(1.14往下渲染顺序与不透明方块并列,1.15往上渲染顺序与半透明方块并列),导致很多光影对于粒子的处理本身就有大问题,而mod想用粒子表达的特效在光影里面可能看着就更不对劲了。
所以,除非是加的渲染效果基本上和原版差不多的mod,主动适配Optifine的着色器系统可能是耗费大量时间还没有什么成果的工作。我本人不怎么了解Iris(以及因为一些历史或者现存的问题不是很喜欢Iris)所以对那边不太清楚,如果有其他人能去整理那边对于mod兼容光影的建议的话也许会有些帮助。
最后,国外一直有网站(例如 https://optifinesource.co.uk )整理Optifine的源代码,想要支持Optifine的话也并非无从下手。不过考虑到上面说的,不一定能达成满意的效果。