API

光影包

光影包会改变整个画面的外观:颜色、光照和效果。它是数据,不是模组:玩家只需复制它的文件夹即可安装。

安装光影包

把光影包的文件夹复制到游戏文件夹中的 shaderpacks/ 里。Crafting 会让光影包适配游戏,所以 Minecraft 更新后,同一个光影包依然可用。

文本
shaderpacks/sepia/
├── shaderpack.json
├── tone.glsl
└── vignette.glsl

光影包文件

shaderpack.json 给光影包命名,并列出它的各个着色阶段。它们按顺序运行,每一个都作用于上一个产生的画面。

shaderpacks/sepia/shaderpack.jsonJSON
{ "name": "Sepia", "passes": ["tone.glsl", "vignette.glsl"] }

着色阶段

一个着色阶段是只包含一个函数的 GLSL 文件:

shaderpacks/sepia/tone.glslGLSL
vec4 effect(vec4 color, vec2 uv) {
    float grey = dot(color.rgb, vec3(0.299, 0.587, 0.114));
    return vec4(grey * 1.07, grey * 0.74, grey * 0.43, 1.0);
}

color 是像素的颜色,uv 是它在屏幕上的位置,范围从 (0, 0) 到 (1, 1)。函数返回新的颜色。每个着色阶段中还可以使用另外三样东西:

名称 作用
crafting_scene(uv) 读取任意位置的画面:模糊、边缘、扭曲
crafting_screen 以像素为单位的屏幕尺寸(vec2)
crafting_time 以秒为单位的时间:动画、脉动

更多示例

让四角变暗的暗角效果:

shaderpacks/sepia/vignette.glslGLSL
vec4 effect(vec4 color, vec2 uv) {
    vec2 d = uv - 0.5;
    d.x *= crafting_screen.x / crafting_screen.y;
    float v = smoothstep(0.85, 0.25, length(d));
    return vec4(color.rgb * v, 1.0);
}

一个轻柔的波动,使用 crafting_time 和 crafting_scene:

shaderpacks/sepia/wave.glslGLSL
vec4 effect(vec4 color, vec2 uv) {
    vec2 shift = vec2(sin(uv.y * 30.0 + crafting_time * 2.0) * 0.002, 0.0);
    return crafting_scene(uv + shift);
}

选择光影包

在游戏文件夹中打开 config/crafting/client.toml,把 shader_pack 设为光影包的文件夹名。留空表示不使用。然后启动游戏。

config/crafting/client.tomlTOML
shader_pack = "sepia"

光影包在世界内生效;菜单保持正常外观。

着色阶段出错时

游戏会显示资源警告,画面保持正常。游戏日志会说明哪里出了问题、在哪个文件的哪一行。