跳转至

纹理

纹理(Texture)是Minecraft基岩版中定义游戏视觉表现的二维图像资源。纹理应用于方块表面、实体模型、物品图标、粒子特效、用户界面等几乎所有可视化元素,是资源包中最核心的资源类型之一。

概述

基岩版中的纹理通常为PNG格式的图像文件,支持透明通道(Alpha通道)。纹理的分辨率通常为2的幂次方(如16×16、32×32、64×64等),原版游戏的默认纹理分辨率为16×16像素。资源包可以提供更高分辨率的纹理以获得更精细的视觉效果。

游戏支持读取的纹理格式包括TGAPNGJPGJPEG。此外,基岩版还支持纹理集(Texture Set)格式(以.texture_set.json为后缀)。若同一目录下存在主文件名相同但扩展名不同的纹理资源,游戏按以下优先级顺序读取,仅读取其中优先级最高的一个:

  1. .texture_set.json(纹理集定义文件)
  2. .tga
  3. .png
  4. .jpg
  5. .jpeg
  6. .ktx

因此,纹理包不应依赖同名不同扩展名文件共存来表达不同资源。

纹理图集

纹理图集(Texture Atlas)是将多张独立的纹理合并到一张大图上的技术,也称为精灵图(Sprite Sheet)。图集可以减少渲染时的纹理切换次数,从而提升渲染性能。当图集包含的子纹理数量过多时,游戏会降低图集内所有纹理的分辨率,直至它们全部能够容纳进图集为止。关于图集的通识性概念,请参见图集

基岩版使用以下纹理图集:

图集 描述
atlas.banner 旗帜纹理图集,包含旗帜图案及不祥旗帜纹理,其纹理列表不可通过附加包修改
atlas.items 物品纹理图集,包含装备槽占位图标、切割盔甲和盾牌纹理,可通过 item_texture.json添加自定义纹理
atlas.shield 盾牌旗帜图案纹理图集,其纹理列表不可通过附加包修改
atlas.terrain 方块纹理图集,包含含翻书动画的方块纹理,默认启用多级渐远纹理和填充,可通过 terrain_texture.json添加自定义纹理

纹理数据格式

纹理图集注册文件(如 item_texture.json terrain_texture.json)使用texture_data对象定义各纹理短名称的内容:

纹理数据条目格式
{
  "texture_data": {
    "命名空间:纹理短名称": {
      "additive": false,
      "textures": [
        {
          "path": "textures/路径/至/纹理",
          "quad": false,
          "tint_color": "#ffffff",
          "overlay_color": "#ffffff"
        }
      ]
    }
  }
}
path
相对于资源包根目录的纹理文件路径,支持.texture_set.json(需要pbr功能)、.tga.png.jpg.jpeg格式,路径中不应包含扩展名。非方形纹理会被拉伸为方形,含多帧的纹理仅使用第一帧。
tint_color
十六进制颜色字符串。对纹理RGB通道进行乘法混合着色,Alpha通道保持不变。原版中用于对睡莲等纹理施加绿色色调。
overlay_color
十六进制颜色字符串。效果类似tint_color,但以原始纹理Alpha通道的反向值决定着色强度,并将最终输出的Alpha通道强制设为不透明。对完全不透明的纹理,两者效果相同。原版中用于草方块侧面纹理的绿色叠加。
additive
布尔值,默认false。启用后,textures数组中的多张纹理叠加合并为一张,半透明像素会完全覆盖其下方图层。覆盖色仅对第一项textures条目生效,但作用于所有图层。
quad
布尔值,默认false。启用后,图集中该短名称仅覆盖纹理左上角四分之一区域;整张纹理仍包含在图集中,但通过此短名称引用时只使用该区域。也可以指定为数值,0等同于false,其他任意数值等同于true

部分图集文件还支持以下附加参数(适用于 item_texture.json):

default_leather_color
十六进制颜色字符串,定义未染色皮革盔甲的默认显示颜色。
default_leather_horse_armor_color
十六进制颜色字符串,定义未染色皮革马铠的默认显示颜色。

方块纹理映射

方块纹理通过资源包中的 terrain_texture.json文件进行映射。该文件定义了纹理短名称与实际纹理文件路径之间的对应关系。方块定义文件通过引用纹理短名称来指定方块各面使用的纹理。terrain_texture.json中还可通过num_mip_levelspadding字段配置图集的多级渐远纹理层数与像素填充宽度。

物品纹理映射

物品纹理通过资源包中的 item_texture.json文件进行映射。该文件的结构与方块纹理映射类似,定义了物品图标的纹理短名称和对应的纹理文件路径。

翻书动画

翻书动画(Flipbook Animation)是一种通过在纹理图集中按序列帧排列的方式实现的纹理动画。翻书动画的定义文件为 textures/flipbook_textures.json,存放在资源包的textures/目录中。

翻书动画的原理是将动画的每一帧按垂直方向排列在同一张纹理图中,游戏引擎按照指定的帧率依次显示每一帧。原版游戏中水面、岩浆表面、传送门等方块的动态效果均通过翻书动画实现。

纹理集

纹理集(Texture Set)是基岩版在物理基础渲染(PBR)管线中使用的高级纹理格式。每个纹理集将同一表面的多张纹理贴图组合在一起,包括:

  • 基色(Base Color)贴图:定义表面的颜色信息。
  • 法线(Normal)贴图:定义表面的微观凹凸细节。
  • 金属度-自发光-粗糙度(MER贴图:在RGB三个通道中分别存储金属度(Metalness)自发光(Emissive)强度和粗糙度(Roughness)信息。

纹理集通过以.texture_set.json为后缀的定义文件声明,存放在与纹理文件相同的目录中。纹理集需要在开启了延迟渲染或光线追踪的环境中才能生效。

多级渐远纹理

多级渐远纹理(Mipmapping)是一种用于减少纹理在远距离渲染时出现锯齿和闪烁的技术。游戏引擎会为每张纹理预先生成若干个缩小版本(称为mip层级),在渲染远处物体时使用较低分辨率的版本。

图集的mip层级数量由纹理图集注册文件(如 terrain_texture.json)中的num_mip_levels字段控制。每个mip层级的分辨率是上一层级的一半。原版中atlas.terrain默认使用4个mip层级。对于16×16的纹理,这将产生16×16、8×8、4×4和2×2四个层级。

较高分辨率的纹理包需要确保纹理的尺寸是16的整数倍,以保证多级渐远纹理的正确生成。

填充

填充(Padding)是在图集中每张子纹理周围拉伸出若干像素的边缘区域,以防止由于渲染不精确导致相邻纹理相互渗透(即"纹理溢血")。填充宽度可通过padding字段配置。

padding的值(以像素为单位)必须至少满足 \(2^{n-1}\),其中 \(n\)num_mip_levels的值。例如,若图集有6个mip层级,则最小填充宽度为32像素(\(2^5\))。原版atlas.terrain默认每张方块纹理周围具有8像素的填充。

实体纹理

实体纹理存放在资源包的textures/entity/目录中,通过客户端实体定义文件中的textures字段关联到实体。一个实体可以关联多张纹理,并通过渲染控制器动态切换。

纹理排列值

纹理排列值(Texture Index)是方块在原版方块定义中用于指定纹理在图集中位置的数值。在较新的数据驱动系统中,纹理排列值已被纹理短名称的引用方式所取代。

纹理列表

旧资源包中可能存在 textures_list.json文件。旧版社区资料通常将它解释为显式列出资源包纹理路径的缓存或索引文件,用于避免大量纹理在加载时出现遗漏或错位,并减少内容日志警告。

该文件具有明显的历史语境。维护旧资源包时可以保留并检查其中路径是否仍然正确;新资源包是否需要创建该文件,应以当前游戏内容日志、官方资料和目标平台测试为准,不应仅凭旧教程强制添加。