1. Wiki
  2. /Animaciones
  3. /Controladores de renderizado

Controladores de renderizado

Elige el modelo, los materiales y la textura de una criatura en Minecraft Bedrock con controladores de renderizado: arrays, variantes de textura, part_visibility y colores.

Las animaciones mueven a una criatura. Un controlador de renderizado (render controller) decide con qué se dibuja: qué modelo, qué textura y qué material. También puede ocultar partes del modelo. En esta guía, nuestro gólem de rubí tendrá tres colores de gema y una corona que solo lleva a veces.

Los controladores de renderizado van en el paquete de recursos. Igual que las animaciones, solo cambian el aspecto de la criatura.

Los archivos

Paquete de recursos
RP/
  entity/
    ruby_golem.entity.json
  render_controllers/
    ruby_golem.render_controllers.json
  textures/
    entity/
      ruby_golem/
        red.png
        pink.png
        dark.png

¿De verdad necesitas uno?

Muchas criaturas tienen un solo modelo y una sola apariencia. Para esas, usa el controlador del juego base controller.render.default. Dibuja la geometría, la textura y el material que se llaman default en tu entidad de cliente, y no tienes que escribir ningún archivo. Tu primera criatura personalizada hace exactamente eso.

Necesitas tu propio controlador de renderizado cuando:

  • la criatura tiene varias texturas para elegir, como colores o apariencias,
  • la criatura cambia de modelo, como una oveja que pierde la lana,
  • partes del modelo deben aparecer o desaparecer, como una montura o una armadura,
  • la criatura debe teñirse de un color.

Los nombres cortos vienen de la entidad de cliente

Un controlador de renderizado nunca usa rutas de archivo. Usa los nombres cortos que les diste a las cosas en la entidad de cliente, con un prefijo delante:

En la entidad de clienteEn el controlador de renderizado
"geometry": { "default": "geometry.wiki.ruby_golem" }geometry.default
"textures": { "red": "textures/entity/ruby_golem/red" }texture.red
"materials": { "default": "entity_alphatest" }material.default

Así que texture.red significa "la textura que llamé red en la entidad de cliente".

Paso 1: el controlador más sencillo

Los archivos de controladores de renderizado van en la carpeta render_controllers:

RP/render_controllers/ruby_golem.render_controllers.json
{
  "format_version": "1.8.0",
  "render_controllers": {
    "controller.render.ruby_golem": {
      "geometry": "geometry.default",
      "materials": [{ "*": "material.default" }],
      "textures": ["texture.red"]
    }
  }
}

Las tres partes principales:

CampoQué contiene
geometryUn modelo. Un único valor, no una lista.
materialsUna lista que asigna materiales a los huesos. * significa todos los huesos.
texturesUna lista de texturas. La mayoría de las criaturas solo necesitan una.

El nombre debe empezar por controller.render.. Después, añádelo a la entidad de cliente:

RP/entity/ruby_golem.entity.json
"render_controllers": ["controller.render.ruby_golem"]

Paso 2: tres colores de gema

Ahora viene lo divertido. Primero, enumera las tres texturas en la entidad de cliente:

RP/entity/ruby_golem.entity.json
"textures": {
  "red": "textures/entity/ruby_golem/red",
  "pink": "textures/entity/ruby_golem/pink",
  "dark": "textures/entity/ruby_golem/dark"
}

Luego ponlas en un array dentro del controlador de renderizado y elige una con Molang:

RP/render_controllers/ruby_golem.render_controllers.json
{
  "format_version": "1.8.0",
  "render_controllers": {
    "controller.render.ruby_golem": {
      "arrays": {
        "textures": {
          "array.gem_colors": [
            "texture.red",
            "texture.pink",
            "texture.dark"
          ]
        }
      },
      "geometry": "geometry.default",
      "materials": [{ "*": "material.default" }],
      "textures": ["array.gem_colors[query.variant]"]
    }
  }
}

array.gem_colors[query.variant] significa "toma el elemento número query.variant de la lista". Se empieza a contar desde 0, así que la variante 0 es roja, la 1 rosa y la 2 oscura.

¿De dónde sale query.variant?

Del paquete de comportamiento. El componente minecraft:variant guarda un número en la criatura, y query.variant lo lee. Aquí cada gólem elige un color al azar al aparecer:

BP/entities/ruby_golem.json (partes)
"component_groups": {
  "wiki:color_red": { "minecraft:variant": { "value": 0 } },
  "wiki:color_pink": { "minecraft:variant": { "value": 1 } },
  "wiki:color_dark": { "minecraft:variant": { "value": 2 } }
},
"events": {
  "minecraft:entity_spawned": {
    "randomize": [
      { "weight": 2, "add": { "component_groups": ["wiki:color_red"] } },
      { "weight": 1, "add": { "component_groups": ["wiki:color_pink"] } },
      { "weight": 1, "add": { "component_groups": ["wiki:color_dark"] } }
    ]
  }
}

El rojo tiene peso 2, así que sale el doble de veces que cada uno de los otros.

Salirse del rango no es un error

Si el número es mayor que la lista, vuelve a empezar: en una lista de 3, el número 3 elige otra vez el elemento 0. Los números negativos eligen el elemento 0. Así que una variante incorrecta muestra el color equivocado, no hace que el juego falle.

Arrays también para modelos y materiales

arrays puede contener tres tipos de listas. Cada lista solo puede contener un tipo de cosa:

Clave dentro de arraysContieneEjemplo de elemento
texturesTexturastexture.red
materialsMaterialesmaterial.default
geometriesModelosgeometry.default

No siempre necesitas un array. Para elegir entre dos cosas basta con un operador ternario de Molang:

Elegir un modelo sin array
"geometry": "query.is_baby ? geometry.small : geometry.default"

Paso 3: ocultar y mostrar partes

part_visibility activa y desactiva huesos. Nuestro gólem tiene un hueso crown que solo muestra cuando está domesticado:

RP/render_controllers/ruby_golem.render_controllers.json
"part_visibility": [
  { "*": true },
  { "crown": "query.is_tamed" }
]
  • Cada entrada es un nombre de hueso y un valor. true o cualquier cosa distinta de 0 lo muestra; false o 0 lo oculta.
  • Ocultar un hueso oculta también sus hijos.
  • Las entradas se aplican en orden, así que las posteriores ganan. Aquí primero se muestra todo y luego la consulta decide la corona.
  • * funciona como comodín: "gem_*" coincide con gem_left, gem_right, etc.

La lista materials funciona igual: empieza con { "*": ... } para todo y después sobrescribe huesos sueltos.

Un núcleo brillante
"materials": [
  { "*": "material.default" },
  { "core": "material.glow" }
]

Para que esto funcione, glow debe ser un nombre corto en materials de la entidad de cliente, que apunte a un material real que brille, como entity_emissive_alpha.

Colores y efectos

Un controlador de renderizado también puede cambiar colores. Todos estos son opcionales:

CampoQué hace
colorTiñe la criatura. Necesita un material que admita tintes.
overlay_colorPinta un color encima de toda la criatura, con a como intensidad
is_hurt_colorEl destello cuando la criatura recibe daño. En el juego base es rojo.
on_fire_colorEl tinte mientras arde
ignore_lightingtrue dibuja la criatura con brillo total, incluso de noche
uv_animDesplaza la textura con el tiempo usando offset y scale, para efectos que fluyen

Cada color tiene r, g, b y a de 0 a 1, y cada uno puede ser Molang:

Destello blanco al gritar
"overlay_color": {
  "r": 1.0,
  "g": 1.0,
  "b": 1.0,
  "a": "variable.is_shouting ? 0.5 : 0.0"
}

Más de un controlador

render_controllers en la entidad de cliente es una lista. Cada controlador dibuja la criatura una vez con su propio modelo, así que puedes apilarlos. El juego base lo usa para capas como la armadura o los ojos brillantes.

También puedes añadir una condición para que un controlador solo dibuje a veces:

RP/entity/ruby_golem.entity.json
"render_controllers": [
  "controller.render.ruby_golem",
  { "controller.render.ruby_golem_shine": "query.is_powered" }
]

Cuando algo sale mal

Lo que vesCausa más probable
La criatura es invisibleEl nombre del controlador de renderizado en la entidad de cliente tiene una errata, o el archivo no está en render_controllers
Cuadros negros y moradosEl nombre corto de la textura o su ruta está mal, o la ruta termina en .png
Todos los gólems son rojosEl paquete de comportamiento nunca asigna minecraft:variant, así que query.variant vale 0
Una parte oculta sigue viéndoseUna entrada posterior de part_visibility la vuelve a activar, como un * puesto al final
El tinte de color no hace nadaEl material no admite tintes. Prueba un material del juego base hecho para eso

Tienes más ayuda en Solución de problemas.

Qué sigue

Animaciones: Guías

We use cookies to improve your experience and analyse site traffic. Learn more