Modélisation et animation d’entités
Dans ce guide, nous allons revoir les bases de la création d'un modèle et d'animations pour Minecraft: Bedrock Edition. A titre d'exemple, nous allons modéliser et animer un petit robot, dont la création avait été démarrée dans l'article Introduction à l'ajout d'entité.
Dans ce tutoriel, vous apprendrez les éléments suivants:
- Comment créer un modèle pour une entité en utilisant Blockbench.
- Comment appliquer des textures et des animations à un modèle.
Conditions requises
Nous vous recommandons de compléter les étapes suivantes avant de commencer ce tutoriel.
Modèles
Les modèles dans Minecraft utilisent un format spécifique basé sur JSON pour définir la forme. Chaque modèle utilise une texture qui peut être attribuée à l'aide des contrôleurs de rendu.
Pour créer le modèle et de la texture, nous allons utiliser Blockbench, un programme de modélisation3D qui peut créer des modèles pour l'édition Bedrock de Minecraft.
Configuration du modèle
Lorsque vous ouvrez Blockbench pour la première fois, vous verrez la liste de formats de modèles qui sont disponibles. Sélectionnez Modèle Bedrock. Vous verrez apparaître une boîte de dialogue concernant les paramètres de base du projet.
L'élément qui est important ici est Mob Geometry Name (Nom de géométrie de la créature). Nous allons saisir ici un nom unique pour le modèle. La meilleure pratique consiste à utiliser le snake_case, c'est-à-dire uniquement des lettres minuscules, des chiffres et des tirets bas ainsi que des points. Les espaces et autres caractères spéciaux ne sont pas pris en charge. Pour notre modèle, nous allons simplement saisir robot
.
Nous pouvons laisser le champ du nom de fichier vide pour l'instant car nous le définirons plus tard lors de l'exportation du modèle. Les paramètres «Box UV» et la taille de la texture peuvent également être laissés par défaut car ils seront modifiés plus tard. Le bouton de confirmation enregistrera ces paramètres.
Structure des os
La première chose prendre en compte lors de la création d'un modèle est la structure des os. Les os sont la partie du modèle qui peut être animée et ils peuvent être organisés selon une hiérarchie plus ou moins approfondie. Chaque os lui-même est invisible mais peut contenir des cubes qui façonneront le modèle.
Il est recommandé d'utiliser un os racine pour chaque modèle et d'intégrer tout le reste à l'intérieur. Cela signifie que vous pourrez plus tard animer soit tout le modèle entier à la fois, soit des parties spécifiques de celui-ci. Créez un nouveau groupe dans Blockbench. Les «groupes» et les «os» sont pratiquement les mêmes dans ce contexte.
Vous pouvez faire un clic droit sur le groupe ou appuyer sur F2 pour le renommer. Le nom d'un os doit être saisi en snake_case
(et donc ne comprendre que les lettres minuscules, des chiffres et des tirets du bas). Chaque nom d'os doit être unique pour référence future dans les animations.
Pendant que nous construisons le modèle grâce aux étapes suivantes, veillez à ce que la structure soit correctement configurée. Vous pouvez faire glisser les groupes pour en modifier l'ordre ou les déposer dans d'autres groupes. Cette capture d'écran montre la structure osseuse correcte que doit avoir le modèle fini.
Forme
Vous pouvez maintenant commencer à créer la forme du modèle. Créez de nouveaux cubes et utilisez les outils de mouvements, de redimensionnement et de rotation pour procéder aux ajustements. Pour ajouter des cubes plus rapidement, vous pouvez sélectionner un cube déjà positionné et à appuyer sur Ctrl+D (dupliquer) pour en obtenir une copie.
Vous pouvez déplacer les cubes avec plus de précision en maintenant la touche Maj, Contrôle ou les deux en même temps. Selon le style de modélisation, il peut être judicieux de respecter complètement la grille ou de ne déplacer les cubes que par palier d'un demi ou d'un quart.
Les modèles BedrockEdition utilisent le mappage BoxUV par défaut. Cela signifie que le mappage de texture n'utilisera que des nombres entiers et les arrondira au nombre inférieur le cas échéant. Pour éviter les visages étirés ou invisibles, veillez à ce que la taille des cubes soit des nombres entiers.
Si vous travaillez sur des parties symétriques comme les membres, créez-les d'abord sur le côté droit et faites-en une copie en miroir pour le côté gauche plus tard. Vous pouvez les copier avant ou après la création de la texture selon votre souhait d'avoir ou non, la même texture des deux côtés.
Lorsque vous créez des structures pour faire bouger des parties du modèle, pensez toujours au point autour duquel la partie doit pivoter. Sélectionnez un os et appuyez sur P pour faire apparaître l'outil Pivot. Cet outil vous permettra de déplacer le point de pivot de l'os. Vous pouvez également utiliser cet outil sur des cubes si vous souhaitez les faire pivoter autour d'un point spécifique.
Ajout de textures
Types
Une fois la forme du modèle finalisée, vous pouvez créer un type de texture. Le type est une texture qui dispose d'un espace unique pour chaque cube et chaque face du modèle. Vous pouvez également utiliser le mappage UVBox manuellement, mais la création d'un type de texture fait tout le travail pour vous en trouvant la disposition la plus efficace en matière d'espace. Souvenez-vous que Minecraft n'aime pas les images en haute résolution.
Lors de la création d'une texture, saisissez robot
comme nom de texture et cochez l'option Type (Template). Dans la boîte de dialogue du type, sélectionnez la résolution que vous souhaitez. 16x est la résolution par défaut de Minecraft, mais vous pouvez en choisir plus haute si vous le souhaitez.
Couleur de base
Une fois le type de texture créé, vous pouvez accéder à l'onglet Peinture (Paint) dans Blockbench. Cela fera apparaître tous les outils disponibles pour modifier la texture. Sélectionnez l'outil Pot de peinture (Paint Bucket) et définissez le mode de remplissage à côté de l'outil sur Cube. Sélectionnez une couleur dans le panneau de couleur sur le côté droit. Vous pouvez maintenant vous occuper de vos cubes et les colorer avec des couleurs de base individuelles.
Détails
Vous pouvez désormais commencer à travailler sur la texture. Si vous êtes plus à l'aise avec l'ajout de textures dans votre éditeur d'images, vous pouvez maintenant enregistrer la texture en cliquant sur l'icône d'enregistrement située à côté de la texture. Ensuite, vous pouvez l'ouvrir dans votre éditeur d'images. Toute modification apparaîtra dans Blockbench dès que vous enregistrerez la texture. Mais, si vous préférez travailler directement sur le modèle, vous pouvez utiliser les outils de colorisation intégrés dans Blockbench.
Il existe quelques astuces pour utiliser le pinceau dans Blockbench de façon plus efficace:
- Pour peindre des zones plus grandes, vous pouvez augmenter la taille du pinceau.
- Vous pouvez peindre directement dans l'aperçu3D, ou vous pouvez peindre dans l'éditeur UV situé sur le côté gauche.
- Si vous souhaitez dessiner une ligne droite, cliquez sur le début de la ligne, puis maintenez la touche Maj enfoncée sur le bout de la ligne.
- Pour être vous assurer de n'oublier aucun espace qui pourraient être révélés lors des animations, vous pouvez masquer les cubes. Cliquez simplement sur l'icône de l'œil dans le traceur de contours.
Animations
Les animations peuvent faire bouger la forme de votre modèle, mais elles peuvent également émettre des sons et donner des effets de particules. Dans la section suivante, nous verrons comment ajouter une animation à votre entité, comment créer votre propre animation dans Blockbench et enfin, comment utiliser les contrôleurs d'animation.
Utilisation des animations par défaut
Le pack de ressources standard contient des animations génériques que vous pouvez référencer dans votre propre pack sans même copier les fichiers. Ces animations peuvent constituer un bon point de départ pour les entités de type standard, cependant, les animations personnalisées sont beaucoup plus efficaces. Vous pouvez trouver toutes les animations standard dans le pack de ressources standard ici.
Dans cet exemple, nous utiliserons l'animation look at. Cette animation fera pivoter l'os de la «tête». C'est pour cette raison qu'il est important que la tête du modèle utilise exactement le même nom.
De plus, l'entité aura besoin d'un composant look at dans son fichier de comportement. Voici les composants look at de la vache. Vous pouvez jouer avec les chiffres si vous le souhaitez.
"minecraft:behavior.look_at_player": {
"priority": 7,
"look_distance": 6,
"probability": 0.02
},
"minecraft:behavior.random_look_around": {
"priority": 9
}
Maintenant que le comportement de votre entité est configuré, nous allons nous occuper du fichier d'entité client. Assurez-vous que la version de format de ce fichier est définie sur 1.10.0 ou au-dessus pour que cela fonctionne.
Commençons par associer l'animation. Cela se fait dans la section animations de l'étiquette de description de l'entité. La deuxième partie ici (animation.common.look_at_target
) est l'identifiant global de l'animation. Ce nom est défini dans le fichier d'animation et est valable n'importe où dans ce pack ou tout autre pack. La première partie (look_at_target
) représente le nom court. C'est ainsi que nous référençons l'animation dans le fichier d'entité et cela n'est valable que dans le cadre de cette entité.
"animations": {
"look_at_target": "animation.common.look_at_target"
}
Maintenant, nous devons activer l'animation. Pour les animations simples qui sont toujours actives tant que l'entité existe, il suffit de placer le nom court dans le tableau scripts/animation dans le fichier d'entité client.
"scripts": {
"animate": ["look_at_target"]
}
Si vous testez maintenant le robot dans le jeu, vous verrez qu'il tournera la tête et regardera autour de lui.
Créer une animation
Dans l'article guide d'ajout d'entité, nous avions créé une petite animation de conduite pour le robot. Créons maintenant une animation qui montre le robot lorsqu'il n'a plus de sol sous ses pieds (volant). Avant de créer une animation, vérifiez toujours s'il existe un moyen de la déclencher. Nous pouvons facilement déclencher une animation de perte d’équilibre dans cette situation car nous pouvons utiliser très simplement la requête Molang query.is_on_ground
à tester lorsque le robot ne touche plus le sol.
Des animations simples peuvent être créées dans l'éditeur de texte, mais pour des animations plus complexes basées sur des images clés, Blockbench facilite cette opération. Ouvrez le modèle et accédez à l'onglet Animate dans le coin supérieur droit. Créez une nouvelle animation dans le panneau Animations sur le côté gauche et nommez-la animation.robot.sway
. Vous pouvez également choisir un nom plus long ou inclure un espace de noms pour garantir la compatibilité avec d'autres extensions. Mais n'oubliez pas que les identifiants d'animation ne reconnaissent que le snake_case, les chaînes et les points et non pas les deux-points ou les tirets.
Une fois que vous avez configuré votre animation, vous pouvez commencer à la mettre en place. Sélectionnez l'os racine de votre entité. Mettez votre curseur sur 0seconde dans la chronologie et cliquez sur l'icône plus à côté de Rotation. Cela créera une nouvelle image clé à la nouvelle position. Déplacez maintenant votre curseur à environ 0,2seconde. Sélectionnez l'outil de rotation et faites légèrement pivoter l'ensemble du robot vers la gauche. Cela générera automatiquement une nouvelle image clé. Sur le côté gauche de l'écran, vous pouvez voir les valeurs affichées. Faites-la pivoter d'environ 10degrés.
Avancez maintenant dans le temps d'environ une demi-seconde et faites pivoter l'os racine de l'autre côté. Enfin, passez à 1seconde et faites-la pivoter dans l'autre sens à 0.
Si vous déplacez maintenant le curseur au début et que vous appuyez sur lecture, vous verrez une courte animation d'oscillation. Maintenant que vous savez comment réaliser une animation, vous pouvez l'affiner et, par exemple, laisser l'antenne se balancer un peu.
Enfin, appuyez sur Ctrl+S pour enregistrer le modèle et l'animation. Enregistrez l'animation dans le dossier animations
du pack de ressources en tant que robot.animation.json
.
Maintenant, référencez et lancez l'animation dans le fichier d'entité client comme nous l'avons fait avec l'animation look at. Mais maintenant, nous ne déclencherons l'animation d'oscillation qu'à condition que le robot ne soit pas sur le sol. Ce qui ressemblera à peu près à ceci:
"animations": {
"look_at_target": "animation.common.look_at_target",
"sway": "animation.robot.sway"
},
"scripts": {
"animate": [
"look_at_target",
{"sway":"!query.is_on_ground"}
]
}
Si vous faites apparaître maintenant un robot et que vous le poussez d'un rebord, l'animation se déclenchera. Mais l'animation ne se déclenchera qu'une seule fois.
C'est tout simplement parce que la requête dans la section des scripts n'est qu'une valeur de fusion pour l'animation. Cette valeur définit «combien de fois» l'animation est activée, mais pas quand elle est déclenchée ou quand elle ne l'est pas. C'est pourquoi l'animation se déclenchera lorsque la requête !query.is_on_ground
est définie sur true/1
, mais ne s'arrêtera pas. Elle s'arrêtera une fois que la valeur sera définie à nouveau sur false/0
à nouveau et la prochaine fois, l'animation recommencera. Elle ne recommencera pas depuis le début.
Nous pouvons très bien utiliser ce comportement pour les animations statiques ou en boucle qui n'ont ni de début ni de fin. Mais si nous voulons démarrer l'animation chaque fois que la requête change, nous devons adopter d'une approche différente. C'est là qu'interviennent les contrôleurs d'animation.
Contrôleurs d’animation
Les contrôleurs d'animation fonctionnent avec des états. Un contrôleur d'animation peut avoir un nombre illimité d'états. Un seul de ces états est actif à la fois. Le contrôleur peut passer à d’autres états avec les expressions Molang. Chaque état peut activer un ensemble distinct d’animations, de sons et d’effets de particules.
Chaque fois que l'entité est chargée par le client, par exemple, lors de l'arrivée dans un monde, le contrôleur d'animation active dans un état initial. Cet état est appelé default
par défaut.
Pour configurer le contrôleur d'animation, créez un nouveau dossier dans le pack de ressources appelé animation_controllers
. Dans ce dossier, créez un nouveau fichier appelé robot.animation_controllers.json
. Créez un contrôleur d'animation tel que celui-ci:
{
"format_version": "1.10.0",
"animation_controllers": {
"controller.animation.robot.ground": {}
}
}
Maintenant, nous devons créer un état initial. Cet état est appelé default
par défaut. Le contrôleur d'animation sera toujours activé dans cet état lorsque l'entité est chargée. Par exemple, après avoir rejoint le monde.
La seule tâche de cet état est de passer à l'état d'oscillation une fois que l'entité n'est plus sur le sol. Nous utiliserons une transition pour cela. Le contrôleur passera à cet état dès que la requête query.is_on_ground
n'est plus vraie.
{
"format_version": "1.10.0",
"animation_controllers": {
"controller.animation.robot.ground": {
"states": {
"default": {
"transitions":[
{"swaying": "!query.is_on_ground"}
]
}
}
}
}
}
Maintenant, nous allons ajouter l'état d'oscillation. Cet état activera l'animation d'oscillation et, après cela, réinitialisera le contrôleur en revenant à l'état par défaut. La requête query.all_animations_finished
peut être utilisée pour effectuer une transition uniquement après l'activation de l'animation. Cette requête ne sera définie sur vrai qu'à la fin de toutes les animations de l'état actuel. De plus, nous testerons si l'entité repose à nouveau sur le sol.
{
"format_version": "1.10.0",
"animation_controllers": {
"controller.animation.robot.ground": {
"states": {
"default": {
"transitions":[
{"swaying": "!query.is_on_ground"}
]
},
"swaying": {
"animations":[
"sway"
],
"transitions":[
{"default": "query.all_animations_finished && query.is_on_ground"}
]
}
}
}
}
}
Nous devons maintenant associer le contrôleur d'animation à notre entité. Les contrôleurs d'animation peuvent être associés de la même manière que les animations dans le fichier d'entité client. Le contrôleur est associé dans la section animations et activé dans des scripts.
"animations": {
"look_at_target": "animation.common.look_at_target",
"sway": "animation.robot.sway",
"ground": "controller.animation.robot.ground"
},
"scripts": {
"animate": [
"look_at_target",
"ground"
]
}
Si vous testez cela dans le jeu, l'animation fonctionne désormais plus d'une fois. Mais, selon la durée de votre animation, vous remarquerez peut-être que si le robot ne repose plus sur le sol deux fois de suite dans un court intervalle, l'animation ne sera pas activée la seconde fois. C'est parce que la première animation n'est pas encore terminée, donc le contrôleur n'est pas encore retourné à l'état par défaut.
Nous allons examiner une solution différente qui peut résoudre ce problème. En supprimant la requête all_animations_finished
, nous quitterons l'état d'oscillation dès que l'entité sera à nouveau sur le sol. Si nous effectuons un nouveau test, l'animation s'arrête très brusquement.
Pour éviter cela, nous pouvons utiliser l'option blend_transition
, qui nous permet de sortir sans à-coups de l'animation dans un temps défini. C'est l'une des propriétés les plus importantes des contrôleurs d'animation et elle nous permet même de créer une transition simple entre deux poses fixes d'une entité.
En fin de compte, la meilleure solution dépend du cas d'utilisation. Dans cet exemple, l'animation s'arrête en douceur une fois que le robot touche de nouveau le sol.
"swaying": {
"animations":[
"sway"
],
"transitions":[
{"default": "query.is_on_ground"}
],
"blend_transition":0.5
}
Quelle est la prochaine étape?
Nous avons maintenant appris à créer un modèle prêt pour les animations et à le texturer. Nous avons également associé une animation existante au modèle et créé notre propre animation dans Blockbench.
Si vous souhaitez ajouter plus de fonctionnalités au-delà de l'apparence de l'entité, consultez le tutoriel sur les comportements des entités.