材质集简介

《我的世界》支持基于物理的渲染 (PBR) 颜色管线(例如用于光线追踪)。 相比仅使用“颜色”,此方法使用了更多的材质数据,从而实现更丰富、更逼真的视觉效果。 使用 PBR,您可以为不同的镜面反射、自发光、法线贴图等设置图层,这超过了原版《我的世界》的经典颜色管线。 有了材质集这一功能,我们可以为材质资源定义多个 PBR 图层。 材质集是由 json 文件驱动的数据。

图层

一个 texture_set.json 文件可以指定多个图层。 图层是对材质图像资源的引用。 它们也可以在 JSON 中定义为统一实体值,作为引用包中材质图像的替代方法。

color(颜色)

  • 这是一个 RGB 3 通道图像(默认统一使用 alpha 1.0),或 RGBA 4 通道图像,或者是一个 4 值数组,具有 alpha 的统一颜色。
  • 这是唯一需要的图层。
  • 这是经典管线使用的唯一图层。
  • 彩色图像中通常具有烘焙的光照。

normal(法线)

  • 这是一个 3 通道法线贴图图像(或 4 通道,其中第 4 通道被忽略)。
  • 此图层和 heightmap 图层不应在单个材质集中同时定义。

heightmap(高度图)

  • 用于统一高度图的 1 通道图层图像或 JSON 文件中的单个值。
  • 此图层和 normal 图层不应在单个材质集中同时定义。

Metalness_emissive_roughness(金属度_自发光_粗糙度)

  • 这是一个 3 通道图像(或 4 通道,其中第 4 个通道被忽略)或统一 MER 的 3 值数组。
  • RGB 图像将红色映射到金属度,将绿色映射到自发光,将蓝色映射到粗糙度。

指定统一值

不必引用材质集图层的材质图像,可以在 *.texture_set.json 文件中指定值,这实际上等效于引用一个材质图像,该材质图像均匀填充了该值或各个通道的值。

json 文件中的值可以指定为以下任何格式:

  • 0 到 255 数字范围,或作为多通道图层的此类整数的向量。
  • 3 或 4 个通道的十六进制 RGB 或 ARGB,或单个通道图层的 2 个十六进制数字。

*.texture_set.json 文件示例

备注

材质集 JSON 文件的图层值可以包含对图像材质、十六进制和数值的混合引用。

{
  "format_version": "1.16.100",
  "minecraft:texture_set": {
    "color": [ 180, 140, 190, 255 ],
    "metalness_emissive_roughness": "#FBA34C",
    "normal": "grass_carried_normal"
  }
}

本示例使用存在于同一文件夹中的引用图像。 它使用法线和 MER 贴图。

{
  "format_version": "1.16.100",
  "minecraft:texture_set": {
    "color": "grass_carried",
    "metalness_emissive_roughness": "grass_carried_mer",
    "heightmap": "grass_carried_heightmap"
  }
}

您还可以使用数字或十六进制值指定材质值。

{
  "format_version": "1.16.100",
  "minecraft:texture_set": {
    "color": [ 180, 135, 190, 170 ],
    "metalness_emissive_roughness": [ 130, 135, 140 ]
  }
}

无效的 *.texture_set.json

如果材质集无效,将记录 CONTENT_ERROR 并且不会使用该材质集。 如果出现以下情况,则材质集无效:

  • JSON 数据无法解析,或不符合材质集架构。
  • 未指定颜色图层。 .texture_set.json 文件中必须包含一个颜色图层。
  • 同时定义了高度图和法线图层。
  • 同一资源包中不存在引用的材质或无法解析引用的材质。
  • 任何图层都定义了意外数量的通道:
    • 对于使用引用图像指定的图层:Color、MER 及法线支持 3 或 4 通道图像;高度图仅支持单通道图像。
    • 对于使用数字或十六进制值指定的图层:颜色支持 4 通道值;MER 支持 3 通道值;

资源栈行为

  • 材质集定义只能引用与定义位于同一资源包中的图像。
  • 更高优先级资源包中的材质图像不会覆盖材质集对其自身包中材质的引用。
  • 在资源包栈中,同一材质资源的材质集定义不会合并。 较高优先级包的材质集定义将覆盖较低优先级的。

引用材质资源

如果您有重复的图像引用,文件扩展名的优先级是:.tga > .png > .jpg > .jpeg。

例如:如果文件夹中同时存在 grass.png 和 grass.tga,则将选择 grass.tga。 这也适用于其他数据驱动文件,例如引用材质资源的 actor json。

材质集 Json 架构

{
  version "format_version"
  object "minecraft:texture_set"
  {
      color "color" : opt // Fill RGBA channels of a textureset layer with the specified values in an array or hex string
      string "color" : opt // The texture name of a textureset layer
      string "normal" : opt // The texture name of a textureset layer
      string "heightmap" : opt // The texture name of a textureset layer
      color "metalness_emissive_roughness" : opt // Fill RGB channels of a textureset layer with the specified values in an array or hex string
      string "metalness_emissive_roughness" : opt // The texture name of a textureset layer
  }
}