Introducción a los conjuntos de texturas

Minecraft es compatible con un flujo de color de Renderización física (PBR) (p.ej., se utiliza para el trazado de rayos). Esto utiliza más datos de textura que solo 'color', lo que permite imágenes más vívidas y realistas. Con la PBR, puedes tener capas para diferentes reflejos especulares, emisividad, mapas normales y mucho más, lo que supera la línea de colores clásica de la versión original de Minecraft. Se agregaron conjuntos de texturas como la función para definir varias capas de PBR para un recurso de textura. Los conjuntos de texturas son datos generados a partir de archivos json.

Capas

Un archivo texture_set.json puede especificar varias capas. Las capas son referencias a los recursos de imágenes de textura. También se pueden definir en JSON como valores sólidos uniformes y como una alternativa a las imágenes de textura de referencia en un pack.

Color

  • Esta es una imagen RGB de 3canales (por defecto es un alfa uniforme de 1.0), o una imagen RGBA de 4 canales, o una matriz de 4valores para un color uniforme con alfa.
  • Esta es la única capa requerida.
  • Esta es la única capa utilizada por el flujo clásico.
  • Por lo general, hay iluminación prerenderizada (baking) en la imagen en color.

Normal

  • Esta es una imagen de mapa normal de 3canales (o 4canales donde se ignora el cuarto canal).
  • Esta capa y la capa heightmap no deben definirse al mismo tiempo en un solo conjunto de texturas.

Mapa de alturas

  • Imagen de la capa de 1canal o un valor único en el archivo JSON para un mapa de alturas uniforme.
  • Esta capa y la capa normal no deben definirse al mismo tiempo en un solo conjunto de texturas.

Metalness_emissive_roughness

  • Esta es una imagen de 3canales (o 4 canales donde se ignora el cuarto canal) o una matriz de 3valores para un MER uniforme.
  • Las imágenes RGB asignan el rojo al metal, el verde a la emisividad y el azul a la rugosidad.

Cómo especificar valores uniformes

En lugar de hacer referencia a una imagen de textura para una capa de un conjunto de texturas, los valores se pueden especificar en el archivo *texture_set.json, que es efectivamente el equivalente a hacer referencia a una imagen de textura rellena de manera uniforme con ese valor o valores para los canales respectivos.

Los valores del archivo json se pueden especificar en cualquiera de los siguientes formatos:

  • Rango numérico de 0 a 255, o como un vector de dichos números enteros para una capa multicanal.
  • RGB o ARGB hexadecimal para 3 o 4canales, o como 2dígitos hexadecimales para una capa de un solo canal.

Ejemplos de archivos *.texture_set.json

Nota

Los valores de capa de un archivo JSON de conjunto de texturas pueden incluir una combinación de referencias a texturas de imagen, valores hexadecimales y numéricos.

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

Este ejemplo usa imágenes de referencia que existen en la misma carpeta. Utiliza un mapa normal y MER.

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

También puedes especificar valores de texturas con valores numéricos o hexadecimales.

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

*.texture_set.json no válido

Si un conjunto de texturas no es válido, se registrará CONTENT_ERROR y no se utilizará el conjunto de texturas. Un conjunto de texturas no es válido si:

  • Los datos JSON no se pueden analizar o no cumplen con el esquema del conjunto de texturas.
  • La capa de color no está especificada. Tener una capa de color en el archivo .texture_set.json es obligatorio.
  • Está definido tanto el mapa de alturas como las capas normales.
  • Una textura de referencia no existe en el mismo pack de recursos o la textura de referencia no se puede analizar.
  • Cualquier capa está definida con un número inesperado de canales:
    • Para capas que se especifican con imágenes de referencia: color, MER y normal admiten imágenes de 3 o 4canales; el mapa de alturas solo admite imágenes de un solo canal.
    • Para capas que se especifican con valores numéricos o hexadecimales: el color admite valores de 4canales; MER admite valores de 3canales.

Comportamiento de la pila de recursos

  • Las definiciones del conjunto de texturas solo pueden hacer referencia a imágenes que existen en el mismo pack de recursos que la definición.
  • Las imágenes de textura en packs de recursos de mayor prioridad no anulan la referencia de un conjunto de texturas a una textura en su propio pack.
  • En la pila del pack de recursos, las definiciones del conjunto de texturas para el mismo recurso de textura no se fusionan. La definición del conjunto de texturas del pack de mayor prioridad anulará la de menor prioridad.

Cómo hacer referencia a los recursos de texturas

Si tienes referencias de imágenes duplicadas, la prioridad de las extensiones de archivo es: .tga > .png > .jpg > .jpeg.

Por ejemplo: si grass.png y grass.tga existen en la carpeta, se elegirá grass.tga. Esto también se aplica a otros archivos basados en datos, como json de actor que hace referencia a un recurso de textura.

Esquema de json del conjunto de texturas

{
  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
  }
}