
Sodium Core Shader Support
使资源包能够替换钠的着色器,类似于资源包可以替换原版的核心着色器。
Sodium Core Shader Support
使资源包能够替换钠(Sodium)的着色器,类似于资源包可以替换原版核心着色器。 如果你喜欢我的模组,可以考虑通过请我喝杯咖啡来支持开发:
用户文档
Sodium Core Shader Support 允许资源包用自定义着色器替换钠的核心着色器。这并不意味着,
这个模组能让所有原版资源包在钠上工作。只有那些明确声明支持
sodium core shader support 的资源包才能正常工作。
如果你使用的是受支持的资源包,只需像激活其他资源包一样激活它即可。
资源包不兼容提示
重新加载资源后,钠可能会在右上角显示消息“以下资源包与 Sodium 不兼容”,并列出你当前激活的核心 着色器。即使资源包支持 sodium core shaders,这条消息也总是会出现,可以忽略。
资源包列表
以下是一些可以在钠上工作的资源包。如果你自己创建了资源包,欢迎 在我的 GitHub 上提交 issue 将其添加到这个列表中!
- Energy Shaders [Java]
- Night Vision Shaders [Java]
- Re-Shaded (从 re-shaded 1.3 版本起)
着色器开发者文档
你需要明白,你的原版着色器不能直接复制为钠的着色器。钠对于方块 和云有着自己的着色器:
- 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.glsl、chunk_matrices.glsl 和 chunk_vertex.glsl。
获取钠着色器源代码
要获取特定钠版本的着色器源代码,请下载该版本的 .jar 文件,然后像 .zip 压缩包一样进行解压。
在解压后的压缩包中,你会找到一个包含上述目录结构的 assets 文件夹。
block_layer_opaque
block_layer_opaque 用于所有方块和方块实体。在原版 Minecraft 中对应的文件是 terrain.fsh
和 terrain.vsh(在旧版 Minecraft 中对应的是 rendertype_solid、rendertype_cutout、rendertype_cutout_mipped 等)。
此外,sodium core shader support 在钠着色器的 block_layer_opaque.fsh
和 block_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.fsh
和 block_layer_opaque.vsh 中将会出现 u_GameTime 统一变量。它的使用方式与原版 GameTime 统一变量相同。按以下方式将其添加到你的着色器中:
uniform float u_GameTime;
SunAngle 统一变量
从 Sodium Core Shader Support 1.5.0 版本起,block_layer_opaque.fsh
和 block_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.21 和 1.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 统一变量 以及 禁用视锥体和背面剔除 的选项!
正在加载版本记录…

正在加载评论…
评论在新手盒子客户端中发表,这里同步展示。