Sodium Core Shader Support

Sodium Core Shader Support

使资源包能够替换钠的着色器,类似于资源包可以替换原版的核心着色器。

游戏机制

Sodium Core Shader Support

Modrinth 下载量 CurseForge 下载量 许可证 客户端环境 Discord

使资源包能够替换钠(Sodium)的着色器,类似于资源包可以替换原版核心着色器。 如果你喜欢我的模组,可以考虑通过请我喝杯咖啡来支持开发:

ko-fi

用户文档

Sodium Core Shader Support 允许资源包用自定义着色器替换钠的核心着色器。这并不意味着, 这个模组能让所有原版资源包在钠上工作。只有那些明确声明支持 sodium core shader support 的资源包才能正常工作。

如果你使用的是受支持的资源包,只需像激活其他资源包一样激活它即可。

资源包不兼容提示

重新加载资源后,钠可能会在右上角显示消息“以下资源包与 Sodium 不兼容”,并列出你当前激活的核心 着色器。即使资源包支持 sodium core shaders,这条消息也总是会出现,可以忽略。

资源包列表

以下是一些可以在钠上工作的资源包。如果你自己创建了资源包,欢迎 在我的 GitHub 上提交 issue 将其添加到这个列表中!

着色器开发者文档

你需要明白,你的原版着色器不能直接复制为钠的着色器。钠对于方块 和云有着自己的着色器:

- assets/sodium/shaders/
   | - clouds.fsh
   | - clouds.vsh
   | - blocks/
        | - block_layer_opaque.fsh
        | - block_layer_opaque.vsh
   | - include/
        | - fog.glsl 
        | - chunk_material.glsl
        | - chunk_matrices.glsl
        | - chunk_vertex.glsl

除非你想修改钠的云朵,否则 block_layer_opaque 通常是最重要的。 除非你明确知道自己在做什么,否则不应该修改 chunk_material.glslchunk_matrices.glslchunk_vertex.glsl

获取钠着色器源代码

要获取特定钠版本的着色器源代码,请下载该版本的 .jar 文件,然后像 .zip 压缩包一样进行解压。 在解压后的压缩包中,你会找到一个包含上述目录结构的 assets 文件夹。

block_layer_opaque

block_layer_opaque 用于所有方块和方块实体。在原版 Minecraft 中对应的文件是 terrain.fshterrain.vsh(在旧版 Minecraft 中对应的是 rendertype_solidrendertype_cutoutrendertype_cutout_mipped 等)。

此外,sodium core shader support 在钠着色器的 block_layer_opaque.fshblock_layer_opaque.vsh 中为某些地形类型添加了一些 define:

  • RENDER_PASS_SOLID:固体方块
  • RENDER_PASS_CUTOUT:像树叶、草、玻璃等方块…
  • RENDER_PASS_TRANSLUCENT:真正具有透明度的方块,例如水、蜂蜜、黏液块…

另外,所有着色器(mc >= 1.21.2 且版本 >= 1.3.8)中都会有 SODIUM_CORE_SHADER_SUPPORT 这个 define。 这些 define 可以这样使用:

#ifdef RENDER_PASS_SOLID
    // 对固体方块的特殊着色
#endif

GameTime 统一变量

从 Sodium Core Shader Support 1.4.0 版本起,block_layer_opaque.fshblock_layer_opaque.vsh 中将会出现 u_GameTime 统一变量。它的使用方式与原版 GameTime 统一变量相同。按以下方式将其添加到你的着色器中:

uniform float u_GameTime;

SunAngle 统一变量

从 Sodium Core Shader Support 1.5.0 版本起,block_layer_opaque.fshblock_layer_opaque.vsh 中也将会出现 u_SunAngle 统一变量。它返回环境属性中的太阳角度(以弧度为单位)。按以下方式将其添加到你的着色器中:

uniform float u_SunAngle;

如何指定支持的钠版本

钠的开发者会随时更改内部着色器及相关代码,不再另行通知。因此, 你需要指定你的资源包兼容哪些钠和 Minecraft 版本。这可以通过一个特殊的 versions.json 文件来完成。该文件应位于你资源包中新建的目录 assets/sodiumcoreshadersupport 下, 文件名为 versions.json。文件内容可能如下所示:

{
  "supported-versions": {
    "1.21": [ "0.5.11+mc1.21" ],
    "1.21.1": [ "0.5.11+mc1.21" ]
  }
}

在上面的例子中,资源包声明其与 Minecraft 1.211.21.1 上的钠 0.5.11 兼容。 以下是更抽象的说明:
更具体地说,versions.json 必须包含一个键为 supported-versions 的对象。 supported-versions 的值必须是一个映射表,将不同的 Minecraft 版本映射到允许的钠版本数组。 SodiumCoreShaderSupport 模组会检查已安装的钠版本是否包含在已安装的 Minecraft 版本对应的数组中。

  • 如果 Minecraft 和/或钠版本不在 supported-versions 中,资源包可以激活,但会显示警告消息。
  • 如果用户没有安装钠,资源包可以激活。
  • 如果不存在 versions.json,资源包可以激活,但会显示警告消息。
  • 如果 versions.json 格式错误,资源包可以激活,但会显示警告消息。

导入

钠着色器必须位于 assets/sodium/shaders 目录中。但是你可以使用 #import 指令从 assets/minecraft/shaders 目录导入文件。以下代码将包含 文件 assets/minecraft/shaders/include/test.glsl

#import <minecraft:include/test.glsl>

利用这个技巧,你可以创建自定义的 glsl 文件,然后在着色器中(包括核心着色器和钠着色器)进行 #import。 这些文件应包含你的主要着色器“逻辑”。一个可以同时用于原版和钠的示例着色器包可以 在这里找到。

禁用剔除

从 1.5.0 版本起,可以通过 versions.json 禁用钠的视锥体剔除和背面剔除。这对于需要屏幕外几何体, 或者旨在在 block.vsh 中变换视角以显示通常不在屏幕上的几何体(例如阴影、替代玩家视角等)的任何核心着色器都很有用。

{
  "supported-versions": { "1.21.11": ["0.8.7+mc1.21.11"] },
  "disable-frustum-culling": true,
  "disable-backface-culling": true
}

致谢

感谢 MR-CHOO 添加了 SunAngle 统一变量 以及 禁用视锥体和背面剔除 的选项!