资源包 基本概念
写在前面
资源包、纹理包和材质包的称谓区别:
- 纹理包
Texture Pack ,是 JE 1.6.1 以前所使用的用于自定义游戏纹理的文件包的正确译名。
- 材质包
Texture Pack 的错误译名。
在英文语境中, 材质所对应的英文单词为 Material ,在图形学中这用于描述物体的属性,如金属性、光滑度、自发光强度等。
纹理所对应的英文单词 Texture ,才是用于描述物体表面颜色的单词。
截至 JE 1.6 纹理包被资源包所替代时,这个译名在游戏内仍旧没有修改,于是此翻译便流传了下来,并逐渐波及相关领域 ,现在 Minecraft 中文 Wiki 已经将此翻译纠正,希望大家在以后的谈论中尽量使用正确的译名。
- 资源包
Resource Pack ,是 JE 1.6.1 及以后使用的用于自定义游戏的纹理、 声音、 模型 ,乃至渲染的文件包。
何谓资源包?
纹理包出现于 JE Alpha v1.2.2 ,其目的很简单,让玩家能更方便地自定义纹理,而不再需要手动去替换游戏打包内置的文件。
自 JE 1.6.1 起,资源包接替了纹理包的工作。资源包顾名思义,包含了游戏中所调用的几乎全部资源,包括纹理、 音频、 部分原版着色器和模型以及方块状态与模型的关系, 模型如何调用纹理等。
因此,光影可以视为一种特化的资源包。
资源包分辨率
参阅: 术语表 - 分辨率
很多资源包名中会附带有一个标注,通常是类似 32x、 256x、 2k 这样的数字+字母格式。 这是资源包纹理的分辨率 ,这里对资源包中的分辨率稍作解释:
资源包中的纹理通常为正方形 ,在动态纹理贴图中,纵向分辨率是横向分辨率的整数倍 。这使得纹理的分辨率标注相比较通常意义上有一些区别
32x、 64x、 128x... Nx :表示该资源包的基本贴图尺寸均为
; 在动态纹理贴图中,纵向分辨率还需要乘以动态纹理的帧数
,于是最终我们的贴图分辨率为 。
1k、 2k、 4k... Nk :表示所有贴图均为
像素的尺寸,其中 ; 在 Java 版中,
,其中 为自然数。
资源包的版本兼容性
粗略区间
在 JE 1.13 时,Mojang 进行了一轮游戏代码重写,这轮重写包含了一次对方块 ID 和命名方法的统一修改,称为扁平化 ,这也导致了自 JE 1.13 开始,资源包的兼容性出现了断层
兼容范围 | 备注 |
---|---|
Alpha v1.2.2 ~ 1.6.1 13w23a | 纹理包 |
1.6.1 13w24a ~ 1.6.4 | 资源包(单选) |
1.7.2 13w36a ~ 1.13 17w46a | 资源包 |
1.13 17w47a 至今 | 扁平化后的资源包 |
对于大部分的资源包,只需要选择在区间内的正确版本,即可正常加载。
有一些例外情况是,Mojang 在某些版本中更改了方块的代码名 ,比如草
(grass
)在 JE 1.20.3 中被改为了矮草丛
(short_grass
),这时候就会导致新旧资源包和版本间的不兼容。
准确区间
虽然在粗略兼容区间内,但有时候资源包列表仍然会标红且提示 适用于<新 | 旧>版本的Minecraft
,这是因为实际上资源包的区间分为更复杂的许多段,避免上述例外情况的发生。
pack.mcmeta
版本区间由资源包内名为 pack.mcmeta
的文件
中 pack_format
的值定义, descripton
则是该资源包的描述。
此外,自 JE 1.20.2 23w31a 开始,其加入了 supported_formats
字段,可以指定兼容版本的上下限。
min_inclusive
指定版本下限,max_inclusive
指定版本上限。也可简写为
"supported_formats": [17, 34]
。
以下是资源包版本号对应游戏版本的表格:
兼容性表格
| 起始版本 | 终止版本 |
---|---|---|
1 | 1.6.1 13w24a | 1.8.9 |
2 | 1.9 15w31a | 1.10.2 |
3 | 1.11 16w32a | 1.13 17w47b |
4 | 1.13 17w48a | 1.15 19w46b |
5 | 1.15-pre1 | 1.16.2-pre3 |
6 | 1.16.2-rc1 | 1.16.5 |
7 | 1.17 20w45a | 1.17.1 21w38a |
8 | 1.18 21w39a | 1.18.2 |
9 | 1.19 22w11a | 1.19.2 |
11 | 1.19.3 22w42a | 1.19.3 22w44a |
12 | 1.19.3 22w45a | 1.19.4 23w07a |
13 | 1.19.4-pre1 | 1.20 23w13a |
14 | 1.20 23w14a | 1.20 23w16a |
15 | 1.20 23w17a | 1.20.1 |
16 | 1.20.2 | 1.20.2 23w31a |
17 | 1.20.2 23w31a | 1.20.2-pre1 |
18 | 1.20.2-pre2 | 1.20.3 23w41a |
19 | 1.20.3 23w42a | |
20 | 1.20.3 23w43a | 1.20.3 23w44a |
21 | 1.20.3 23w45a | 1.20.3 23w46a |
22 | 1.20.3-pre1 | 1.20.5 23w51b |
24 | 1.20.5 24w03a | 1.20.5 24w04a |
25 | 1.20.5 24w05a | |
26 | 1.20.5 24w06a | 1.20.5 24w08a |
28 | 1.20.5 24w09a | 1.20.5 24w10a |
29 | 1.20.5 24w11a | |
30 | 1.20.5 24w12a | |
31 | 1.20.5 24w13a | 1.20.5-pre3 |
32 | 1.20.5-pre4 | 1.20.6 |
33 | 1.21 24w18a | 1.21 24w20a |
34 | 1.21 24w21a | 1.21.1 |
35 | 1.21.2 24w33a | |
36 | 1.21.2 24w34a | 1.21.2 24w35a |
35 | 1.21.2 24w36a | |
35 | 1.21.2 24w37a | |
39 | 1.21.2 24w38a | 最新 |
截止 2024 年 9 月 20 日,数据来源于 Minecraft Wiki。
什么?你问我 23 去哪了?可能是因为今年是 24 年,Mojang 跳过了吧(笑)。 怎么 27 也跳了啊(恼)
从 JE 1.15 开始,版本之间只要存在资源更新,资源包版本号就会随之更新。
例如 JE 1.15 与 JE 1.16 之间更新了墙类方块的方块状态,即便有些资源包并未涉及此内容,只要
pack.mcmeta
内的版本号不同,游戏内依然会显示不兼容。
因此资源包的兼容性在绝大多数下应以作者本人的解释为标准 ,而不是游戏内是否显示不兼容。
资源包加载顺序
资源包加载顺序为由低到高 ,即:
放置在顶部的资源包在加载时会覆盖下方资源包中重名的文件。
顶部资源包缺失的贴图,将由下方资源包补齐。
因此一些 基础包
+ 附加包
组合形式的资源包,应把基础包置于底部。
贴图类型
原版贴图
原版贴图名称一般为 <name>.png
。
原版贴图由 Minecraft 原生提供支持。许多老牌资源包如舒服细致 (Soartex)、 五边形 (BDCraft)等即为只提供原版贴图的资源包。
着色贴图
读取这些贴图需要模组支持,具体作用需要光影支持。
着色贴图有反射贴图 (Specular map)和法线贴图 (Normal map)两种。
法线贴图的命名方法为
<name>_n.png
。反射贴图的命名方法为
<name>_s.png
。
OptiFine 同时支持一些其它的特殊贴图,如 CTM、CIT、CEM 等,见 特殊纹理/模型。
法线纹理(贴图)
参阅: 术语表 - 法线贴图
这里列出了每个通道的作用:
R
:表面在 X 轴上的倾斜量,高于 127 表示沿表面向右。G
:表面在 Y 轴上的倾斜量,高于 127 表示沿表面向下。B
:表面在 Z 轴上的倾斜量。它的值可以由R
和G
计算得到,因此在 Java 版现行 PBR 标准中,该通道可以独立出来做特殊用途,详见 #PBR 标准。A
:通常用于视差。
R
G
分量的作用由 OpenGL 特性决定,如果要改为其他读取方式,需要做一些转换。
反射纹理(贴图)
用于告诉着色器物体的性质,每个颜色通道在不同的标准中有着不同的定义,详见 PBR 标准。
特殊纹理/模型
名称 | 简写 | 用途 |
---|---|---|
Connected Textures | CTM | 方块间的纹理衔接 |
Custom Item Textures | CIT | 自定义物品纹理 |
Custom Entity Models | CEM | 自定义实体模型 |
Custom Graphical User Interface | GUI | 自定义游戏界面 |
Animated Textures | - | 自定义动态纹理 |
Emissive Textures | - | 自发光纹理 |
Random Entities | - | 随机实体纹理 |
Natural Textures | - | 自然纹理 |
Custom Sky | - | 自定义天空 |
这些贴图可以在 OptiFine 中使用,也可以由其他模组实现。
详细介绍可参考 MCBBS 纹理版版主 SQwatermark 翻译的 OptiFine官方文档。
PBR 标准
参阅: 术语表 - PBR
PBR 有两种工作流,一种是金属/粗糙度 ,另一种是镜面反射/光泽度。
对于 PBR 贴图上的通道的定义,在 MC 中有着不同的标准,例如 OldPBR JE、 LabPBR JE、 四合一PBR BE等。
OldPBR 是过时的 PBR 标准,在此不做讨论。
LabPBR 1.3 是 Java 版的约定现行标准,工作流为金属/粗糙度 。其 材质属性 由
_n
和_s
贴图共同定义。四合一PBR是目前基岩版的约定现行标准。
主要为将
主场景
、法线场景
、PBR贴图场景
和附加的独立检测场景
拼合到 一张图 内,得以实现光影读取。四合一标准详见基岩版光影 YSS 压缩包内的开发文档。