LogoArcartX Doc
简单功能篇

Shader

后处理着色器使用指南

自 1.21.8 版本起,由于 Mojang 对 Shader 系统进行了大规模重构,ArcartX 已移除对 Shader 的支持。以下内容仅适用于 1.21.8 之前的版本。

Shader

Shader(着色器)的工作模式类似于"滤镜",可以对游戏画面施加特殊的视觉效果,例如模糊(Blur)、铅笔画等。

1.21.4 版本以后,Shader 文件改为通过数据包加载。你可以通过语句/命令/API 主动开启数据包中定义好的 Shader。以下使用方式为 1.21.4 之前的用法。

使用

准备 Shader 文件。Shader 分为 programpost 两个文件夹,放入客户端 resource/shader 目录中:

Shader 文件夹结构

以从 1.7.10 提取的 "pencil" 着色器为例。打开 post 文件后,需要将资源域 ID 修改为 arcartx

{
    "targets": [
        "swap"
    ],
    "passes": [
        {
            "name": "arcartx:outline_soft",  // 资源域改为 arcartx
            "intarget": "minecraft:main",
            "outtarget": "swap"
        },
        {
            "name": "arcartx:blit",  // 资源域改为 arcartx
            "intarget": "swap",
            "outtarget": "minecraft:main"
        }
    ]
}

该 Shader 包含两个 passes:outline_softblit。将它们的 program 文件提取出来,同样修改资源域 ID:

{
    "blend": {
        "func": "add",
        "srcrgb": "one",
        "dstrgb": "zero"
    },
    "vertex": "sobel",
    "fragment": "arcartx:outline_soft", // 资源域改为 arcartx
    "attributes": [ "Position" ],
    "samplers": [
        { "name": "DiffuseSampler" }
    ],
    "uniforms": [
        { "name": "ProjMat",   "type": "matrix4x4", "count": 16, "values": [ 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0 ] },
        { "name": "InSize",    "type": "float",     "count": 2,  "values": [ 1.0, 1.0 ] },
        { "name": "OutSize",   "type": "float",     "count": 2,  "values": [ 1.0, 1.0 ] },
        { "name": "LumaRamp",  "type": "float",     "count": 1,  "values": [ 16.0 ] },
        { "name": "LumaLevel", "type": "float",     "count": 1,  "values": [ 4.0 ] }
    ]
}
{
    "blend": {
        "func": "add",
        "srcrgb": "one",
        "dstrgb": "zero"
    },
    "vertex": "blit",
    "fragment": "arcartx:blit", // 资源域改为 arcartx
    "attributes": [ "Position" ],
    "samplers": [
        { "name": "DiffuseSampler" }
    ],
    "uniforms": [
        { "name": "ProjMat",    "type": "matrix4x4", "count": 16, "values": [ 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0 ] },
        { "name": "OutSize",    "type": "float",     "count": 2,  "values": [ 1.0, 1.0 ] }
    ]
}

将对应的 .fsh.vsh 文件也放到对应的文件夹中:

Shader 文件结构Shader 文件结构

进入游戏,重载客户端资源后,使用指令开启着色器(名称取自 post 文件夹中的文件名):

/a shader start [玩家ID] pencil

Shader 效果

也可以通过 Shimmer 脚本和 API 控制 Shader。

更多 Shader 编写知识请参考 Minecraft Shader 相关教程。

On this page