红石中继站
    • 资源
    • 新帖
    • 版块
    • 热门
    • 登录

    解决 Revelation 着色器在 Iris 1.7 下导致客户端崩溃

    编程开发
    iris 着色器 崩溃 解决方案
    1
    1
    72
    正在加载更多帖子
    • 从旧到新
    • 从新到旧
    • 最多赞同
    回复
    登录后回复
    此主题已被删除。只有拥有主题管理权限的用户可以查看。
    • OrzMikuO
      OrzMiku
      最后由 编辑 · 陕西省

      Revelation 着色器 (Github)

      前排提示,本 BUG 由 Iris 模组自身导致,并非 Revelation 的 BUG。
      这个教程本来是为 IterationRP 准备的,后来 Tahnass 修复了这一问题。如果你使用任何着色器,在启用着色器时出现了游戏崩溃,就可以考虑是这个 BUG 导致的,下面的修复方法是通用的。

      Bug 成因

      在 Iris 1.8 版本之前,vaUV2 的声明必须出现在所有函数声明之前。否则 Iris 在处理时,会误以为没有声明 vaUV2,进而导致 Iris 的 glsl-transformer 重复声明 vaUV2。(可以在崩溃后,Iris 修补的着色器文件中得以验证)

      这个问题只会出现在使用 Core Profile 的更现代的着色器包中,这也是为什么主流的国外着色器并没有出现这个 BUG 的其中一个原因。

      下面我使用两段着色器代码来展示如何复现这个 BUG。

      会导致崩溃:

      #version 460 core
      
      float pow2(in float a) {
          return pow(a, 2); 
      }
      
      in ivec2 vaUV2;
      

      不会导致崩溃:

      #version 460 core
      
      in ivec2 vaUV2;
      
      float pow2(in float a) {
          return pow(a, 2); 
      }
      

      修复方法

      这里推荐使用 VSCode 进行编辑,你可以在这里下载到它:https://code.visualstudio.com/

      我们将着色器包解压,方便后面的操作,解压时注意文件夹的层级关系,需要是 shaderpacks/你的文件夹/shaders,这样解压后的着色器依旧可以在游戏中加载。

      使用 VSCode 打开解压后的文件,搜索 in ivec2 vaUV2;,检查所有出现 in ivec2 vaUV2; 的文件,对于 Revelation,你需要将文件中出现的 in ivec2 vaUV2; 移动到 #include "/lib/Utility.glsl" 前面。

      具体来说,是将 in ivec2 vaUV2; 移动到所有函数声明之前,但对于教程撰写时的 Revelation 版本,移动到 #include "/lib/Utility.glsl" 前面就可以了。随着后续 Revelation 更新,上述操作可能会失效。(也可能被修复)

      下面我举一个例子,在 shaders/program/gbuffers/Hand.vert 中:

      //======// Utility //=============================================================================//
      
      #include "/lib/Utility.glsl"
      
      //======// Output //==============================================================================//
      
      ...Outputs...
      
      //======// Attribute //===========================================================================//
      
      ...Other Attributes...
      in ivec2 vaUV2;
      ...Other Attributes...
      

      需要修改为:

      in ivec2 vaUV2;
      
      //======// Utility //=============================================================================//
      
      #include "/lib/Utility.glsl"
      
      //======// Output //==============================================================================//
      
      ...Outputs...
      
      //======// Attribute //===========================================================================//
      
      ...Other Attributes...
      

      在修改完所有出现 in ivec2 vaUV2; 的文件后,你可以选择将文件夹压缩回压缩包,也可以直接使用文件夹去加载着色器。很多人都不清楚文件夹也可以被识别加载 :)

      至此,所有的工作就都做完了,祝大家玩的开心!

      LunarFox 基础整合包
      无事东风走过,扬起回忆如昨。

      1 条回复 最后回复 回复 引用
      • 第一个帖子
        最后一个帖子
        "Minecraft" 以及 "我的世界" 为 Mojang Synergies AB 的商标,本站与 Mojang 以及 Microsoft 没有从属关系
        © 2024-2025 红石中继站 版权所有 本站原创图文内容版权属于原创作者,未经许可不得转载
        侵权投诉邮箱:[email protected]
        由 长亭雷池WAF 提供安全检测与防护 由 WAFPRO 提供 SCDN 安全加速
        苏公网安备32050902102328号 苏ICP备2023043601号-8