资源包 基本概念

插件提示

此页面使用了 LaTeX 公式,第一次进入该页面时公式可能不会正确渲染。
你应该看到下方有一行类似 y=ax2+b 的公式:

$$ y = ax^2+b $$

若你看到的是以 $$ 开头的代码,请刷新页面,或点击

写在前面

资源包、纹理包和材质包的称谓区别

纹理包

Texture Pack,是 JE 1.6.1 以前所使用的用于自定义游戏纹理的文件包的正确译名

材质包

Texture Pack 的错误译名

  • 在英文语境中,材质所对应的英文单词为 Material ,在图形学中这用于描述物体的属性,如金属性、光滑度、自发光强度等。
  • 纹理所对应的英文单词 Texture ,这才是用于描述物体表面颜色的单词。
资源包

Resource Pack,是 JE 1.6.1 及以后使用的用于自定义游戏的纹理声音模型,乃至渲染的文件包。

截至 JE 1.6 纹理包被资源包所替代时,这个译名在游戏内仍旧没有修改,于是此翻译便流传了下来,并逐渐波及相关领域,现在 Minecraft 中文 Wikiopen in new window 已经将此翻译纠正,希望大家在以后的谈论中尽量使用正确的译名

在本文中,我们将会全程使用资源包

资源包分辨率

参阅:术语表 - 分辨率

很多资源包名中会附带有一个标注,通常是类似 32x256x2k 这样的数字+字母格式。 这是资源包纹理的分辨率,这里对资源包中的分辨率稍作解释:

资源包中的纹理通常为正方形,在动态纹理贴图中,纵向分辨率是横向分辨率的整数倍。这使得纹理的分辨率标注相比较通常意义上有一些区别

  • 32x64x128x... Nx:表示该资源包的基本贴图尺寸均为: $$ N \times N $$
    • 在动态纹理贴图中,纵向分辨率还需要乘以动态纹理的帧数 F ,于是最终我们的贴图分辨率为: $$ N \times N \times F $$
  • 1k2k4k... Nk:表示所有贴图均为 Nk * Nk 像素的尺寸: $$ 1\text{k} = 1024 $$
  • N 在 Java 版中必须为2的整数次幂

资源包的版本兼容性 JE

粗略区间

JE 1.13 时,Mojang 进行了一轮游戏代码重写,这轮重写包含了一次对方块 ID 和命名方法的统一修改,称为扁平化,这也导致了自 JE 1.13 开始,资源包的兼容性出现了断层

兼容范围
* 1.6 -
1.6.1 ~ 1.12.2
1.13 +

*在此之前为纹理包

对于大部分的资源包,只需要选择在区间内的正确版本,即可正常加载。
有一些例外情况是,Mojang在某些版本中更改了方块的代码名,比如grass)在 JE 1.20.3 中被改为了矮草丛short_grass),这时候就会导致新旧资源包和版本间的不兼容。

准确区间

虽然在粗略兼容区间内,但有时候资源包列表仍然会标红且提示 适用于<新/旧>版本的Minecraft ,这是因为实际上资源包的区间分为更复杂的许多段。同时为了避免上述例外情况的发生,我们就需要知道准确的兼容区间。

pack.mcmeta

版本区间由资源包内一个名为 pack.mcmeta 的文件

{
  "pack": {
    "pack_format": N,
    "description": "..."
  }
}


 



中的 pack_format 版本号 N 定义,descripton 则是该资源包的描述

以下是截止 2024 年 1 月 20 日的资源包版本号与对应游戏版本的表格,数据来源于 Minecraft Wikiopen in new window

N起始版本终止版本
11.6.1 13w24a1.8.9
21.9 15w31a1.10.2
31.11 16w32a1.13 17w47b
41.13 17w48a1.15 19w46b
51.15-pre11.16.2-pre3
61.16.2-rc11.16.5
71.17 20w45a1.17.1 21w38a
81.18 21w39a1.18.2
91.19 22w11a1.19.2
111.19.3 22w42a1.19.3 22w44a
121.19.3 22w45a1.19.4 23w07a
131.19.4-pre11.20 23w13a
141.20 23w14a1.20 23w16a
151.20 23w17a1.20.1
161.20.21.20.2 23w31a
171.20.2 23w31a1.20.2-pre1
181.20.2-pre21.20.3 23w41a
191.20.3 23w42a仅存在一个版本
201.20.3 23w43a1.20.3 23w44a
211.20.3 23w45a1.20.3 23w46a
221.20.3-pre11.20.5 23w51b
241.20.5 24w03a最新

什么?你问我 23 去哪了?可能是因为今年是 24 年,Mojang 跳过了吧(笑)。

JE 1.15 开始,版本之间只要存在不兼容的地方,资源包版本号就会更新。

  • 例如 JE 1.15JE 1.16 之间更新了墙类方块的方块状态,即便有些资源包并未涉及此内容,只要 pack.mcmeta 内的版本号不同,游戏内依然会显示不兼容。
  • 因此资源包的兼容性在绝大多数下应以作者本人的解释为标准,而不是游戏内是否显示不兼容。

资源包加载顺序

资源包加载顺序为由低到高。即

  • 放置在顶部的资源包在加载时会覆盖下方资源包中重名的文件。
  • 顶部资源包缺失的贴图,将由下方资源包补齐。

因此一些 基础包 + 增强包附属包(通常名为 Addon)组合形式的资源包,应把基础包置于底部

贴图类型

原版贴图

原版贴图名称一般为 <name>.png

原版贴图由 Minecraft 原生提供支持。许多老牌资源包如舒服细致(Soartex)、五边形(BDCraft)等即为只提供原版贴图的资源包。

着色贴图 JE MOD

读取这些贴图需要 MOD 支持,具体作用需要光影支持。

着色贴图有反射贴图(Specular map)和法线贴图(Normal map)两种。

  • 法线贴图的命名方法为 <name>_n.png
  • 反射贴图的命名方法为 <name>_s.png

OptiFine 同时支持一些其它的特殊贴图,如 CTMCITCEM 等。简述见 #特殊贴图

法线贴图

参阅:术语表 - 法线贴图

这里列出了每个通道的作用:

  • R :表面向右倾斜的量。
  • G :表面向下倾斜的量。
  • B :表面向前的量。它的值可以由 RG 计算得到,因此在 Java 版现行 PBR 标准中,该通道可以独立出来做特殊用途,详见 #PBR 标准
  • A :通常用于视差

RG 分量的作用由 OpenGL 特性 决定,如果要改为其他读取方式,需要做一些转换。

反射贴图

用于告诉着色器物体的性质,每个颜色通道在不同的标准中有着不同的定义,详见 #PBR 标准

特殊贴图 OptiFine

名称简写用途
Connected Textures ModelCTM方块间的纹理衔接
Custom Item TexturesCIT自定义物品纹理
Custom Entity ModelsCEM自定义实体模型
Graphical User InterfaceGUI自定义游戏界面
Animation-自定义动态纹理
Emissive Textures-自发光纹理
Random Entities-随机实体纹理
Natural Textures-自然纹理
Custom Sky-自定义天空

这些贴图可以在 OptiFine 中使用,也可以使用其他 MOD 实现。
详细介绍可参考 MCBBS 纹理版版主 SQwatermark 翻译的 OptiFine官方文档open in new window

PBR 标准

参阅:术语表 - PBR

PBR 有两种工作流,一种是 金属/粗糙度 ,另一种是 镜面反射/光泽度
对于 PBR 贴图上的通道的定义,在 MC 中有着不同的标准,例如 OldPBR JELabPBR JE四合一PBR BE等。

  • OldPBR 是过时的 PBR 标准,在此不做讨论。
  • LabPBR 1.3 是 Java 版的约定现行标准,工作流为 金属/粗糙度 。其 材质属性_n_s 贴图共同定义
    • _n 贴图:
    • _s 贴图:
      • R感知平滑度
      • G金属性230 及以上的数值代表特定金属详见下方链接
      • B :[0, 64] 表示孔隙度, [65, 255] 表示次表面散射强度
      • A自发光,[1, 254] 范围内数值越大发光越强,当值为 255 (即完全不透明)时不发光。
    • 关于 LabPBR 的更多详细介绍,可参考 站内翻译文档
  • 四合一PBR 是目前BE的约定现行标准。
    • 主要为将 主场景法线场景PBR贴图场景 和附加的 独立检测场景 拼合到 一张图 内,得以实现光影读取。
    • 四合一标准详见 BE 光影 YSS 压缩包内的开发文档。