mcpField
B
blockbench-vanilla-textures

blockbench-vanilla-textures

github.com/jasonjgardner创意与媒体26165 次安装5 周前更新
代码仓库

关于 blockbench-vanilla-textures

blockbench-vanilla-textures 是面向 Blockbench 建模流程的技能,可从 Mojang 的 Bedrock 资源中查找并导入原版纹理。它提供纹理解析、着色、平铺和 PBR 资源处理指引,纹理也可用于 Java 与通用模型。

主要功能

  1. 01搜索并获取原版纹理
  2. 02解析方块各面的纹理映射
  3. 03处理着色、平铺与动画纹理
  4. 04导入纹理并设置 UV
  5. 05获取 PBR 纹理集

适用场景

  1. 01为 Blockbench 模型使用 Minecraft 原版贴图
  2. 02为大型模型面预先平铺纹理
  3. 03为目标版本整理纹理名称与路径
  4. 04检查模型面的纹理映射是否正确

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/jasonjgardner/blockbench-mcp-project --skill blockbench-vanilla-textures

安装后在 Claude Code 中输入/blockbench-vanilla-textures确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

references/
names-tints-and-animation.md
scripts/
tint_texture.py
vanilla_texture.mjs

详细介绍

Blockbench 原版纹理

使用 Mojang 自己的纹理文件,而不是绘制或生成仿制品。来源:Mojang/bedrock-samples(resource_pack/textures/...),由 jsDelivr 提供:

https://cdn.jsdelivr.net/gh/Mojang/bedrock-samples@<ref>/resource_pack/textures/blocks/brick.png

<ref> 可以是 main 或类似 v1.26.50.4 的发行标签。需要确保结果可复现时,请固定使用某个标签。名称采用 Bedrock 版名称,但除了极少数方块外,像素画都与 Java Edition 一致,因此重命名后,这些文件也适用于 Java 和通用模型。

修改项目之前,请先加载 blockbench-use;了解 UV 详情,请加载 blockbench-texturing。

**许可:**这些文件 © Mojang AB,受 Minecraft EULA 约束。它们适用于 Minecraft 内容、附加包、资源包和个人作品。如果用户计划在 Minecraft 以外出售模型,或将这些纹理打包进非 Minecraft 资源包,请告知一次并由用户决定。不要移除清单记录的署名信息。

1. 将请求映射到原版方块

将主题转换为方块 ID:砖墙对应 brick_block,原木小屋对应 oak_log 和 oak_planks,城堡对应 stone_bricks 和 cobblestone。只有名称确实含糊不清(如“石头”或“木头”),且选择会影响外观时才询问。否则,选择最明显的方块并说明所选内容。方块 ID 会解析各面的纹理,包括原木顶面、草方块顶面和工作台正面。Java ID 大多可用;例外项(bricks → brick_block、grass_block → grass……)见名称、色调与动画。

2. 获取

运行随附的解析器(需要 Node 18+ 或 Bun,无依赖)。脚本路径相对于此技能文件夹。

node scripts/vanilla_texture.mjs search brick                                   # find IDs/keys
node scripts/vanilla_texture.mjs fetch brick_block oak_log grass --out <workspace>/textures/vanilla
node scripts/vanilla_texture.mjs fetch grass oak_leaves --carried --out <dir>   # pre-tinted inventory art
node scripts/vanilla_texture.mjs fetch brick_block --pbr --out <dir>            # + texture_set.json, MERS, normal
node scripts/vanilla_texture.mjs fetch entity/pig/pig --out <dir>               # any path under textures/
node scripts/vanilla_texture.mjs search zombie --tree --out <dir>               # entities/UI: one GitHub API call, cached

它会输出并保存 <out>/vanilla_manifest.json。请使用以下字段:

  • requests[].faces:Blockbench 面 → 图集键。
  • requests[].atlas_keys[key].path:每个键对应的文件。
  • textures[]:本地 file(绝对路径)、width/height、format(png 或 tga)、frames、ticks_per_frame、tint、variants 和 texture_set 图层。

请读取清单,不要猜测文件名。

已知单个文件时,无需运行脚本:

curl -fsSLo brick.png https://cdn.jsdelivr.net/gh/Mojang/bedrock-samples@main/resource_pack/textures/blocks/brick.png
iwr https://cdn.jsdelivr.net/gh/Mojang/bedrock-samples@main/resource_pack/textures/blocks/brick.png -OutFile brick.png

某些彩色纹理仅以 .tga 格式提供,包括树叶、grass_side、仙人掌和蕨类植物。若请求 .png 返回 404,应尝试 .tga,脚本会自动处理。jsDelivr 的软件包目录 API 会因该仓库过大而拒绝请求,因此需通过 blocks.json、terrain_texture.json、item_texture.json 或 GitHub 树(--tree)进行查找。

**保存位置:**将模型会保留的文件放入用户的资源工作区,例如 textures/vanilla/,而不要放在临时文件夹中。Blockbench 会记住导入文件的路径,并能在保存项目时将纹理写回该路径。导入后切勿直接修改下载的文件;色调和图块等编辑应另存为新文件。

3. 准备:着色、平铺、动画

导入前,检查清单中的每一项:

  • 已设置 tint: 贴图为灰度图,Minecraft 会根据生物群系为其着色(草顶、树叶、藤蔓、水)。可以使用 --carried 获取预先着色的版本,或运行 python scripts/tint_texture.py <in> <out> --color "#91BD59"。使用 --colormap <colormap/grass.png> --temperature T --downfall D 来匹配生物群系。需要 Pillow。
  • grass_side.tga 的 alpha 是着色遮罩,不是透明度。 请改为导入 blocks/grass_side_carried,或运行 tint_texture.py ... --overlay。
  • 大面: 原版的比例为每个方块 16 px,也就是每个 Blockbench 单位 1 px。不要将一张 16×16 的贴图拉伸到 48 单位宽的面上,否则砖块会显得巨大。可以为每个方块使用一个 16 单位的元素,或预先平铺贴图:tint_texture.py brick.png brick_3x2.png --tile 3x2 会生成适用于 48×32 单位面的 48×32 px 贴图。预平铺适用于通用、Bedrock 实体和 glTF 目标。Java 方块和物品模型需要正方形的 16×16 贴图(较高的图像会被视为翻页动画),因此应在这些模型中为每个方块使用一个元素,并保留原始文件。
  • frames > 1 表示垂直翻页动画,例如水、熔岩或海晶灯。将 UV 映射到单帧,并按照翻页动画贴图设置播放和导出元数据。

着色颜色、生物群系参数和完整的翻页动画列表见名称、着色和动画。

4. 导入并分配

  1. 导入每个文件,使用 create_texture: name="brick", data="<absolute file path>"。文件路径需要 Blockbench 桌面版,且可加载 PNG 和 TGA。在 Blockbench 网页版中,或无法访问文件时,改为传入 data:image/png;base64,... URL。数据 URL 必须可由浏览器解码,因此请先将 TGA 转换为 PNG,例如使用 Pillow。若导入的路径已加载,系统会拒绝导入;请改为复用该贴图。对于使用 per_texture_uv_size 的格式,传入与像素尺寸相同的 uv_width/uv_height,以便 UV 坐标使用像素单位。
  2. 整个元素使用一种贴图: 使用 apply_texture: id=<element>, texture=<name>, applyTo="all"。
  3. 不同面使用不同贴图(原木、草、熔炉、工作台):使用 set_cube_uv,并按照 requests[].faces 设置 faces: { up: { uv: [0,0,16,16], texture: "log_oak_top" }, north: { …, texture: "log_oak" }, … }。网格使用 set_mesh_uv。blocks.json 将熔炉、南瓜和类似方块的南面命名为正面;请旋转元素或交换面,让正面朝向观察者。
  4. 盒式 UV 格式(Bedrock 实体、Java 实体)会将每个立方体的一张贴图放入盒状布局中,因此无法直接使用分开的 16×16 方块贴图。若格式支持,请将元素切换为逐面 UV;否则将贴图块打包到图集,并将各面映射到对应矩形区域。
  5. 透明贴图(玻璃、树叶、门)需要使用目标的裁剪或混合设置。请参阅贴图处理技能。

在 Blockbench 中获取贴图。 jsDelivr 会发送 Access-Control-Allow-Origin: *,因此即使 Agent 没有 shell,或 shell 无法访问 Blockbench 的文件系统,Blockbench 也可以自行下载 PNG。risky_eval 会等待表达式执行,因此请将代码封装在会返回数据 URL 的异步 IIFE 中,然后将该 URL 传给 create_texture。对于 risky_eval,请遵循仓库的授权规则。

(async () => {
  const response = await fetch("https://cdn.jsdelivr.net/gh/Mojang/bedrock-samples@main/resource_pack/textures/blocks/brick.png");
  if (!response.ok) throw new Error(`HTTP ${response.status}`);
  const blob = await response.blob();
  return await new Promise(resolve => { const reader = new FileReader(); reader.onload = () => resolve(reader.result); reader.readAsDataURL(blob); });
})()

原版方块贴图只有几百字节,因此返回的数据 URL 很小。对于大型实体贴图和 TGA 文件,优先使用文件路径方式。

5. PBR(可选)

每个原版方块都附带 <name>.texture_set.json 和 <name>_mers.tga(金属度、自发光、粗糙度、次表面),部分方块还附带 _normal.tga 或 _heightmap.tga。使用 --pbr 获取这些文件,并将它们放在同一文件夹中,然后在桌面应用中调用 import_texture_set: path="<out>/blocks/brick.texture_set.json"。按照 PBR materials 中的说明进行分配和导出。带色调的颜色贴图仍需着色;为颜色文件着色,并将材质的颜色通道重新指向该文件。

6. 为目标版本准备资源

目标操作
Bedrock保留 Bedrock 名称和路径,例如 textures/blocks/brick。对于自定义方块,可以通过地形键引用原版纹理,而不必附带副本;请参见 材质实例
Java在 assets/minecraft/textures/block/ 下将文件重命名为 Java 文件名(brick.png → bricks.png,planks_oak → oak_planks),或者在模型 JSON 中引用 minecraft:block/bricks,以使用游戏自带的纹理。为翻页纹理添加 .png.mcmeta
通用 / glTF保留像素尺寸并使用最近邻过滤。将色调和平铺效果烘焙到图像中,因为运行时不会应用它们

7. 验证

  • 运行 list_textures,确认每个纹理的尺寸和 UV 尺寸。
  • 运行 get_cube_uv 或 get_mesh_info,确认每个面都显示 texture_status: "resolved",且使用了预期的纹理。
  • 截取屏幕截图。检查砖块或木板的比例是否与 16 单位参考相符,确认带色调的纹理不是灰色,检查透明效果是否仅出现在预期位置,并检查原木的端面是否位于两端。

操作示例:砖墙

“建模一面砖墙”(通用模型;3×2 格墙体,厚 4 单位):

  1. 运行 node scripts/vanilla_texture.mjs fetch brick_block --out ./textures/vanilla。清单显示 blocks/brick.png,尺寸为 16×16,没有色调。
  2. 运行 python scripts/tint_texture.py ./textures/vanilla/blocks/brick.png ./textures/vanilla/brick_wall_3x2.png --tile 3x2,生成 48×32 的图像。
  3. 导入该图像:create_texture name="brick_wall_3x2" data="<abs>/textures/vanilla/brick_wall_3x2.png"。当格式使用每个纹理独立的 UV 尺寸时,添加 uv_width=48, uv_height=32。
  4. 放置立方体:from [0,0,0],to [48,32,4]。
  5. 使用 set_cube_uv 将每个面映射为每单位 1 像素,并全部使用 brick_wall_3x2:
    • north 和 south:[0,0,48,32]。
    • up 和 down:[0,0,48,4]。
    • east 和 west:[0,0,4,32]。
  6. 运行 get_cube_uv,确认每个面都已解析。截取屏幕截图,并检查一层砖的高度是否与原版 16 单位方块相符。

对于 Java 方块模型,用六个 16×16×4 的元素构建同一面墙。使用未经修改的 brick 纹理映射每个元素:大面使用 [0,0,16,16],边缘使用 [0,0,16,4] / [0,0,4,16]。

评论

支持 Markdown