API
光影包
光影包会改变整个画面的外观:颜色、光照和效果。它是数据,不是模组:玩家只需复制它的文件夹即可安装。
安装光影包
把光影包的文件夹复制到游戏文件夹中的 shaderpacks/ 里。Crafting 会让光影包适配游戏,所以 Minecraft 更新后,同一个光影包依然可用。
shaderpacks/sepia/
├── shaderpack.json
├── tone.glsl
└── vignette.glsl光影包文件
shaderpack.json 给光影包命名,并列出它的各个着色阶段。它们按顺序运行,每一个都作用于上一个产生的画面。
{ "name": "Sepia", "passes": ["tone.glsl", "vignette.glsl"] }着色阶段
一个着色阶段是只包含一个函数的 GLSL 文件:
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 |
以秒为单位的时间:动画、脉动 |
更多示例
让四角变暗的暗角效果:
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:
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 设为光影包的文件夹名。留空表示不使用。然后启动游戏。
shader_pack = "sepia"光影包在世界内生效;菜单保持正常外观。
着色阶段出错时
游戏会显示资源警告,画面保持正常。游戏日志会说明哪里出了问题、在哪个文件的哪一行。