1. Wiki
  2. /Animations
  3. /Contrôleurs de rendu

Contrôleurs de rendu

Choisis le modèle, les matériaux et la texture d'une créature dans Minecraft Bedrock avec les contrôleurs de rendu : tableaux, variantes de texture, part_visibility et couleurs.

Les animations font bouger une créature. Un contrôleur de rendu (render controller) décide avec quoi la créature est dessinée : quel modèle, quelle texture et quel matériau. Il peut aussi cacher des parties du modèle. Dans ce guide, notre golem de rubis reçoit trois couleurs de gemme et une couronne qu'il ne porte que de temps en temps.

Les contrôleurs de rendu se trouvent dans le pack de ressources. Comme les animations, ils changent seulement l'apparence d'une créature.

Les fichiers

Pack de ressources
RP/
  entity/
    ruby_golem.entity.json
  render_controllers/
    ruby_golem.render_controllers.json
  textures/
    entity/
      ruby_golem/
        red.png
        pink.png
        dark.png

En as-tu vraiment besoin ?

Beaucoup de créatures ont un seul modèle et un seul skin. Pour elles, utilise le contrôleur vanilla controller.render.default. Il dessine la géométrie, la texture et le matériau qui s'appellent tous default dans ton entité client, et tu n'as aucun fichier à écrire. Ta première créature personnalisée fait exactement ça.

Il te faut ton propre contrôleur de rendu quand :

  • la créature a plusieurs textures au choix, comme des couleurs ou des skins,
  • la créature change de modèle, comme un mouton qui perd sa laine,
  • des parties du modèle doivent apparaître ou disparaître, comme une selle ou une armure,
  • la créature doit être teintée d'une couleur.

Les noms courts viennent de l'entité client

Un contrôleur de rendu n'utilise jamais de chemins de fichiers. Il utilise les noms courts que tu as donnés dans l'entité client, précédés d'un préfixe :

Dans l'entité clientDans le contrôleur de rendu
"geometry": { "default": "geometry.wiki.ruby_golem" }geometry.default
"textures": { "red": "textures/entity/ruby_golem/red" }texture.red
"materials": { "default": "entity_alphatest" }material.default

Donc texture.red veut dire « la texture que j'ai appelée red dans l'entité client ».

Étape 1 : le contrôleur le plus simple

Les fichiers de contrôleurs de rendu vont dans le dossier 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"]
    }
  }
}

Les trois parties principales :

ChampCe qu'il contient
geometryUn modèle. Une seule valeur, pas une liste.
materialsUne liste qui associe des os à des matériaux. * veut dire tous les os.
texturesUne liste de textures. La plupart des créatures n'en ont besoin que d'une.

Le nom doit commencer par controller.render.. Ensuite, ajoute-le dans l'entité client :

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

Étape 2 : trois couleurs de gemme

Passons à la partie amusante. D'abord, liste les trois textures dans l'entité client :

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

Puis mets-les dans un tableau (array) dans le contrôleur de rendu et choisis-en une avec 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] veut dire « prends l'élément numéro query.variant dans la liste ». On commence à compter à 0, donc la variante 0 est rouge, la 1 est rose et la 2 est sombre.

D'où vient query.variant ?

Du pack de comportements. Le composant minecraft:variant stocke un nombre sur la créature, et query.variant le lit. Ici, chaque golem choisit une couleur au hasard quand il apparaît :

BP/entities/ruby_golem.json (extraits)
"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"] } }
    ]
  }
}

Le rouge a un poids de 2, donc il apparaît deux fois plus souvent que chacune des autres couleurs.

Dépasser la liste n'est pas une erreur

Si le nombre est plus grand que la liste, on repart du début : dans une liste de 3, le numéro 3 reprend l'élément 0. Les nombres négatifs prennent l'élément 0. Une mauvaise variante affiche donc la mauvaise couleur, sans faire planter le jeu.

Des tableaux pour les modèles et les matériaux aussi

arrays peut contenir trois sortes de listes. Chaque liste ne peut contenir qu'une seule sorte de chose :

Clé dans arraysContientExemple d'élément
texturesDes texturestexture.red
materialsDes matériauxmaterial.default
geometriesDes modèlesgeometry.default

Tu n'as pas toujours besoin d'un tableau. Pour un simple choix entre deux options, un ternaire Molang suffit :

Choisir un modèle sans tableau
"geometry": "query.is_baby ? geometry.small : geometry.default"

Étape 3 : cacher et afficher des parties

part_visibility active et désactive des os. Notre golem a un os crown qu'il n'affiche que lorsqu'il est apprivoisé :

RP/render_controllers/ruby_golem.render_controllers.json
"part_visibility": [
  { "*": true },
  { "crown": "query.is_tamed" }
]
  • Chaque entrée est un nom d'os et une valeur. true ou tout ce qui n'est pas 0 l'affiche, false ou 0 le cache.
  • Cacher un os cache aussi ses enfants.
  • Les entrées s'appliquent dans l'ordre, donc les dernières l'emportent. Ici, tout est d'abord affiché, puis la couronne dépend de la requête.
  • * sert de joker : "gem_*" correspond à gem_left, gem_right, etc.

La liste materials marche de la même façon : commence par { "*": ... } pour tout, puis remplace des os précis juste après.

Un cœur lumineux
"materials": [
  { "*": "material.default" },
  { "core": "material.glow" }
]

Pour que ça marche, glow doit être un nom court dans les materials de l'entité client, qui pointe vers un vrai matériau lumineux, comme entity_emissive_alpha.

Couleurs et effets

Un contrôleur de rendu peut aussi changer les couleurs. Tous ces champs sont facultatifs :

ChampCe qu'il fait
colorTeinte la créature. Il faut un matériau qui accepte la teinte.
overlay_colorPeint une couleur sur toute la créature, avec a comme intensité
is_hurt_colorLe flash quand la créature prend des dégâts. En vanilla, il est rouge.
on_fire_colorLa teinte quand elle brûle
ignore_lightingtrue dessine la créature en pleine lumière, même la nuit
uv_animFait glisser la texture au fil du temps avec offset et scale, pour des effets qui coulent

Chaque couleur a r, g, b et a de 0 à 1, et chacun peut être du Molang :

Flash blanc quand il crie
"overlay_color": {
  "r": 1.0,
  "g": 1.0,
  "b": 1.0,
  "a": "variable.is_shouting ? 0.5 : 0.0"
}

Plusieurs contrôleurs

render_controllers dans l'entité client est une liste. Chaque contrôleur dessine la créature une fois avec son propre modèle, tu peux donc les empiler. Le jeu vanilla s'en sert pour des couches comme l'armure ou les yeux lumineux.

Tu peux aussi ajouter une condition pour qu'un contrôleur ne dessine que de temps en temps :

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

Quand quelque chose ne marche pas

Ce que tu voisCause la plus probable
La créature est invisibleLe nom du contrôleur de rendu dans l'entité client contient une faute de frappe, ou le fichier n'est pas dans render_controllers
Un damier noir et violetLe nom court de la texture ou son chemin est faux, ou le chemin se termine par .png
Tous les golems sont rougesLe pack de comportements ne définit jamais minecraft:variant, donc query.variant vaut 0
Une partie cachée reste visibleUne entrée part_visibility plus loin la réactive, comme un * placé en dernier
La teinte ne fait rienLe matériau n'accepte pas la teinte. Essaie un matériau vanilla prévu pour ça

Tu trouveras plus d'aide dans Dépannage.

Et ensuite

Animations: Guides

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