普通纹理只有颜色。纹理集会增加额外的图层,告诉活力视效和光线追踪这个表面在光照下如何表现:它是金属吗?会发光吗?是粗糙还是光滑?有没有凹凸?这就叫作 PBR(基于物理的渲染)。
在本页中,你将让红宝石方块像抛光的宝石一样闪亮,并带有柔和的内部光芒。
文件一览
纹理集就放在它所升级的纹理旁边,名称相同:
RP/
textures/
blocks/
ruby_block.png
ruby_block.texture_set.json
ruby_block_mer.png
ruby_block_normal.png和本节的其他页面不同,这里不需要做任何“应用”的步骤。游戏能找到 ruby_block.texture_set.json,是因为它就在 ruby_block.png 旁边,并且会在该纹理出现的所有地方使用它。
纹理集文件
{
"format_version": "1.16.100",
"minecraft:texture_set": {
"color": "ruby_block",
"metalness_emissive_roughness": "ruby_block_mer",
"normal": "ruby_block_normal"
}
}每个图层都是同一文件夹中一张图片的名称,不带文件扩展名。
图层
| 图层 | 必需 | 内容 |
|---|---|---|
color | 是 | 普通纹理:RGB,或带透明度的 RGBA。经典画面只使用这一层。 |
metalness_emissive_roughness | 否 | MER 贴图。三个通道,见下文。 |
metalness_emissive_roughness_subsurface | 否 | MERS 贴图:MER 加上用于次表面的第四个通道。用来代替 MER。 |
normal | 否 | 法线贴图:用 RGB 颜色模拟细小的凸起和凹痕。 |
heightmap | 否 | 表示凹凸的灰度图:白色是高处,黑色是低处。比法线贴图简单。 |
normal 和 heightmap 只能二选一,不能同时使用。
MER 贴图
一张图片,每个颜色通道代表不同的含义:
| 通道 | 含义 | 0(黑) | 255(满) |
|---|---|---|---|
| 红 | 金属度 | 非金属,像石头或木头 | 裸露的金属,像金子 |
| 绿 | 自发光 | 不发光 | 明亮地发光 |
| 蓝 | 粗糙度 | 像镜子一样光滑 | 完全粗糙暗淡 |
| Alpha(仅 MERS) | 次表面 | 光停留在表面 | 光会透过一点,像树叶或皮肤 |
对于红宝石:红色接近 0(宝石不是金属),绿色约 40 产生微弱的光芒,蓝色约 30 产生抛光的光泽。
在同样的网格上绘制
MER、法线和高度图与颜色纹理是逐像素对应的。用相同的尺寸绘制它们(方块是 16x16),这样有光泽和会发光的部分才能和颜色对齐。
整张纹理用同一个值
如果整个方块都是同一种材质,就可以省掉额外的图片,直接在 JSON 中写值:
{
"format_version": "1.16.100",
"minecraft:texture_set": {
"color": "ruby_block",
"metalness_emissive_roughness": [0, 40, 30]
}
}数字范围是 0 到 255。你也可以用十六进制:"#00281E" 表示同样的 MER。统一的 color 需要四个值(红、绿、蓝、透明度),统一的 heightmap 只需要一个。
会让纹理集失效的规则
只要满足以下任意一条,游戏就会跳过这个纹理集,并在内容日志中写入错误:
- 没有
color图层。 - 同时设置了
normal和heightmap。 - 某个图层指向的图片不在同一个资源包中。
- 某张图片的通道数不对。
color、MER 和normal需要 3 或 4 个通道,heightmap需要 1 个。
如果同名图片存在多种文件类型,游戏会优先选 .tga,然后是 .png,再是 .jpg,最后是 .jpeg。
来自两个包的纹理集永远不会合并。列表中排在更上面的包会替换整个纹理集。
原版使用 MERS
原版方块使用 metalness_emissive_roughness_subsurface,format_version 为 1.21.30,并使用 .tga 图片,让 alpha 通道存放次表面数据。从 bedrock samples 中复制一个,就能看到可用的示例。
游戏中没有变化?
纹理集只在开启活力视效或光线追踪时才会显示。如果看起来仍然是平的,请在资源包的 manifest.json 中添加相应的能力:活力视效用 "capabilities": ["pbr"],光线追踪用 "raytraced"。