你替换的护甲纹理,并不是你以为的那一个
护甲按材质分层拆分,所以画错文件会让你的材质包在游戏里看起来毫无变化。
护甲是材质包最常见的第一个项目,也是最常见的第一次翻车。你画好了一件胸甲,加载材质包,结果什么都没变——因为你编辑的文件并不是游戏读取该部件时所用的文件。
每种护甲材质都是独立的文件
并不存在单一的 armor.png。钻石、铁、金、锁链、皮革和下界合金各自拥有自己的层文件,而每一层都是独立的图像。一整套护甲不是一张纹理,而是一个小小的家族,按槽位和层拆分。
实际后果就是:一个重新着色钻石护甲的材质包,对铁护甲毫无影响。如果你的目标是“让所有护甲都看起来像 X”,那你是在为每种材质各编辑一个文件,而不是总共只编辑一个文件。
层的拆分,以及它为何重要
护甲分两遍渲染:
| 层 | 覆盖内容 |
|---|---|
| 第 1 层 | 头盔、胸甲、靴子——覆盖身体的部件 |
| 第 2 层 | 护腿,以及其他部件上的叠加层 |
护腿位于第 2 层,因为它们需要绘制在身体之上,同时又不与第 1 层发生 z-fighting。如果你画了第 1 层,然后纳闷护腿为什么没变,那你就是用最痛苦的方式发现了这个拆分。
鞘翅与纹饰陷阱
鞘翅在文件意义上并不是护甲——它有自己的纹理,也不继承护甲材质。一个重新换皮胸甲的材质包不会动鞘翅。
纹饰更麻烦。纹饰图案和纹饰材质是各自独立的注册表,而纹饰是作为调色板偏移的叠加层渲染在基础护甲纹理之上的。你无法把纹饰画进护甲文件里;游戏是在运行时合成它的。在纹饰之下重新着色护甲,改变的是基础层,而不是纹饰。
Java 与 Bedrock 在这里并不相同
Java 从 assets/minecraft/textures/models/armor/ 下的固定路径读取护甲层,按材质和层命名。Bedrock 使用自己的布局和自己的命名,为其中一个版本构建的材质包无法在另一个版本中加载。如果你要同时面向两者,那你就是在做两个材质包。
按真实尺寸来制作
护甲纹理并不是 16×16。它们更大,以展开模型的方式排布——头部、身体、手臂和腿都在同一张图里,位于固定的区域。画一个 16×16 的方块再放大,只会得到模糊涂抹的结果,因为你是在把一个区域拉伸到整个展开图上。
可靠的做法是从原版文件本身出发,按它的原生尺寸,在上面绘制。这样各区域就能对齐,alpha 通道也能保留下来,输出路径也与游戏所替换的路径一致。
在原版纹理的原生尺寸上直接绘制,并用 Texture Maker 下载材质包。