Objectif de ce tutorial :Ayant eu beaucoup de mal pour réaliser une animation sur une nouvelle créature, je propose ce tutorial qui présente les différentes étapes utilisées pour y arriver.
J’entends par nouvelle créature, un objet possédant un nouveau squelette, et pour laquelle on réalise des animations spécifiques.
Si vous partez d’un squelette existant et ne modifiez pas sa structure (c'est-à-dire, la hiérarchie des os), le problème est simplifié, puisqu’il ne s’agit plus que de modifier les animations afin de repositionner les os (la transformation d’un cheval en giraffe par exemple peut s’effectuer qu’en changeant les animations !).
Ici, comme exemple, nous allons traiter le cas d’un attelage composé d’un cheval et d’un chariot.
La modélisation du chariot n’est que très sommaire, et le traitement des animation est incomplet : le but ici est de montrer la démarche.
Ci dessous les différentes étapes à la création du squelette et d'une animation pour le chariot.
0 – Outils utilisésLe tuto a été réalisé avec :
- blender 2.49
- blender_NIF_Script 2.5
- PyFFI 2.0.5
- le TESCS
1 - création du squelette1.1 - import du squelette de baseOuvrir un nouveau fichier blender, et importer le squelette du cheval (skeleton.nif) sans valider l'option "skeleton only", sans animation, mais en important les "extra nodes". Ceci permet d'avoir toute la hierarchie du squelette (y compris ceux liés aux personnages), ainsi que les blocs de collision.
1.2 - modification du squelettePar choix, le chariot est ici articulé à l'aide de 5 os : un pour l'ensemble (ce qui permet de positionner tout en une fois), et un os par roues (afin d'avoir des rotations indépendantes). Un os additionnel a été ajouté à l'extrémité de chaque os de roue afin d'obtenir des os de roues parallèles à la direction de l'attelage lors des importation suivante (ceci ne sert a priori à rien si ce n'est à ne pas être perturbé par des os de roue qui sembleraient sortir du chariot).
L'ajout des os se fait par copie d'un os existant, suppression de la parenté (Alt P) antérieure et création de la nouvelle parenté (Ctrl P) avec l'os duquel il doit dépendre.
Il est bienvenu de nommer cet os avec un nom reconnaissable et de forcer ces rotations à zéro.
Le squelette du chariot est ici simplifié; il est toujours possible d'ajoutéer des hiérarchie en faisant apparaître des essieux, ce qui donnera un aspect moins monobloc au chariot lors des animations.
1.3 - exportation du squeletteL'exportation en nif du squelette se fait en validant l'option "geometry only" et surtout en dévalidant "flatten skin".
Ici le fichier est appelé skeletonattelage.nif
1.4 - vérification et correction du nifA priori le nif créé devrait permettre de faire les animations, mais beaucoup de blocs manquent comme des NiTransformController par exemple, et le jeu ne semble pas apprécier (plantage...); les raisons de ce plantage et la façon de l'éviter n'est pas encore connu.
Il est donc vivement conseiller d'éditer le squelette initial du cheval et d'ajouter les éléments modifié dans blender.
Ouvrir une nouvelle fenêtre Nifskope et charger le skeleton.nif du cheval.
Sélectionner le NiNode chariot dans skeletonattelage.nif et le copier sur le "Bip02 Non Accum" de skeleton.nif en utilisant "Block -> Copy Branch" et "Block -> Paste Branch".
Sauver skeleton.nif en tant que skeletonattelage.nif.
2 - création de l'animationPour pouvoir travailler, il faut réunir dans blender : le squelette, les animations et les maillages.
Il est possible de partir d'un fichier vierge ou du fichier contenant déjà une modélisation (le chariot par exemple) et de faire des importations pour les éléments manquant.
Par contre un point semble important : le nom du squelette qui doit s'appeler "Scene Root"! Pour cette raison il est préférable que le squelette sur lequel on va travailler doit le premier squelette chargé dans le fichier; si d'autres squelettes existent, il est préférable de les détruire avant le chargement du nouveau squelette.
Sinon on risque de se retrouver avec des problèmes de nommage, qui à l'exportation des géométrie, vont créer des hiérarchie supplémentaire dans les nif (du style "Scene Root" -> "Scene Root.001" -> les NiTrimachins...), et qui semblent incompatible avec les animations d'oblivion.
J'ai personnellement abandonné d'essayer de contourner ce phénomène en dehors de charger le squelette de référence en premier! ...
2.1 - importation du squelette de l'attelageOuvrir un nouveau fichier blender ou utiliser un fichier blender existant sans objet appelé "Scene Root", dans lequel il faut importer le squelette précédemment créé (skeletonattelage.nif) en activant l'option "skeleton only" avec une animation (ici l'idle.kf du cheval) qui va servir de base de travail.
Vous devriez avoir un squelette complet (sans blocs de collision).
2.2 - création ou importation des maillagesImporter ou créer les maillages (ici le cheval, le chariot...), et affecter les coefficients de dépendance aux os (weight painting).
A priori, si le cheval est importé des maillages de Bethesda, cette étape est inutile pour lui.
Créer un lien de parenté entre les maillages dont on veut modifier le nif (ici certainement le chariot puisqu'il faut créer ce nif) et le squelette (Ctrl P...)
Puis exporter les nifs avec les options "export geometry only" (on ne veut pas de l'animation!), "flatten skin" (le squelette qui sera exporté à cause du lien de parenté, doit être exporté "à plat"), et "export skin partition" (il faut exporter la table des coefficients du "weight paint").
Ici, le choix est fait de séparer le cheval du chariot, afin de pouvoir modifier l'assemblage dans le TESCS et donc de pouvoir mélanger les types de chevaux avec différentes version de chariot (ayant tout de même le même squelette!!).
Il est préférable de supprimer le lien de parenté au squelette, des objets que l'on ne souhaite pas exporter, afin de ne pas devoir nettoyer les nif ensuite; ceci réduit aussi la taille des nifs car seules les informations utiles sont exportées.
Ici le fichier nif du chariot est nommé "chariot.nif" (comme c'est original!!)
Il est préférable de vérifier les nif.
On doit y retrouver les NiTrimachins et les os, directement sous le premier noeud "Scene Root" (par de niveau intermédiaire!) et les NiSkinInstance doivent être présent (sinon il n'y a aucune chance que les meshes s'aminent!).
2.3 - création de l'animationL'animation est créée (je devrais dire modifiée), en utilisant les modes poses à la fois sur le squelette dans la vue 3D, et dans la vue des courbes IPO, lorsqu'un os est sélectionné dans la vue 3D.
Un petit rappel : les courbes d'animation pour un os sont créées/modifiées en sélectionnant le numéro de vue, puis en effectuant les modifications que l'on souhaite (déplacement/rotation/échelle), puis en insérant une clé d'animation (appui sur la touche "I") afin de noter les valeurs.
Pour chacune des quatres roues des clefs (de rotation!) ont été insérées tous les quarts de tour.
Si vous tentez de faire le tour de roue en deux clé, il est probable que l'animation ne rende pas le résultat escompté, puisque soit vous aurez fait un tour complet et donc serez revenu à la même position (donc rien ne bouge!), soit vous aurez fait presqu'un tour et l'animation se fera très petite et en sens inverse!.
Il est aussi possible que l'animation parte en marche arrière (surtout pour les rotations pour lesquelles +180°=-180°); là je n'ai pas trouvé d'autre choix que d'éditer les courbes à la main, en forçant les valeurs près du point de commutation +/-180°!.
Dès que l'animation est terminée, l'exporter avec l'option "export animation only"
Ici le fichier s'appelle "idleattelage.kf"
2.4 - modification du .kfLe fichier d'animation comporte quelques différences avec ce qu'attend oblivion ou le TESCS (par contre il fonctionne bien dans Nifskope), il faut donc le modifier.
Editer le nouveau fichier d'animation avec Nifskope, et sélectionner le premier bloc (NiControllerSequence).
Son nom va indiquer le groupe d'animation (Idle pour ... idle, Forward pour une marche avant, Backward pour un marche arrière...).
Par défaut, blender met le nom du fichier. Comme il s'agit ici d'une animation idle, mettez Idle (avec un I majuscule).
Ensuite modifier éventuellement le type de cycle, ici CYCLE_LOOP puisque l'on veut que l'animation passe en boucle.
Et enfin changer le nom de la cible pour l'animation (Target Name). Blender met "Scene Root" par défaut; mettez pour cette animation de créature "Bip02" (sans les guillemets!)
Sauver le fichier animation.
3 - Intégration dans l'espLes fichiers utilisés pour la suite sont indiqués sur la figure ci-dessous.
Le répertoire créé est ...Data\Meshes\Archipel\creatures\attelage
Il contient les nifs du cheval, et les animations.
On y retrouve le squelette modifié (skeletonattelage.nif), le chariot (chariot.nif), mais aussi un fichier attelage.nif qui est une exportation du mesh du cheval à partir de blender afin de tester qu'il est aussi possible de le modifier et de l'exporter, ainsi que les animations idleattelage.kf (que l'on vient de faire) et forward.kf (repris de Bethesda pour tester).
- Ouvrir un esp, ou directement l'esm pour créer un esp lié à cet esm (angamandon.esm par exemple).
- Créer une nouvelle créature (perso j'ai modifier celle du cheval puis l'ai sauvée sous un autre nom)
- Indiquer le nom du squelette à utiliser (comme par hasard celui que l'on a créé précédemment...)
- Choisir les éléments du modèle que l'on veut utiliser : tout ce qui fait le cheval (mais en utilisant attelage.nif et non horse.nif) et le chariot dans l'onglet ModelList
- Regarder les animations dans l'onglet Animation. Bon je sais, c'est bête : les roues tournent quand le cheval n'avance pas, et ne tourne pas quand il marche... mais bon maintenant vous savez quoi faire pour qu'il en soit autrement et puis pour vérifier l'animation in-game, c'est mieux que le cheval reste sur place!
- Sauver la créature, la placer dans le monde, sauver l'esp
- Avant d'aller voir votre œuvre dans le jeu, supprimer l'animation forward.kf du répertoire afin que le cheval ne parte pas à l'aventure en trainant son chariot (ça marche aussi, mais comme on n’a pas modifié l’animation forward… les roues ne tourneront pas. C’est ton très moyen pour vérifiér que tout c’est bien passé !).
- lancer le jeu et courrez voir la belle animation...
Bon c’est pas évident sur le screenshot … Et Pourtant, elles tournent !!!
4 - Remarques, Amélioration, Travail restant à faireL'animation ci dessus n'est qu'un essai; il est effectivement souhaitable que les roues ne tournent que lorsque le cheval se déplace, il faut donc appliquer les modifications sur l'animation forward.kf et non idle.kf.
Il faut en outre revoir toutes les animations, afin que le centre de rotation de l'attelage ne soit pas le cheval, mais le chariot (train avant? centre?). En effet, avec un centre de rotation sur le cheval, le chariot balaye l'espace latéralement quand le cheval tourne.
Il est aussi possible d'améliorer l'ensemble en ajoutant des os intermédiaires entre le corps du chariot et les roues, pour les essieux; il sera ainsi possible de réaliser quelques rotations du train avant, et donc d'améliorer le rendu.
Quoiqu'il en soit, on ne pourra pas éviter l'aspect monobloc lié au fait que le chariot et le cheval ne suivent pas chacun le terrain situé en dessous, mais celui situé sous le point de référence Bip02.
Il faut aussi modifier le squelette afin que les extra-nodes, liés au personnage, ne soient plus centrés sur le cheval mais sur le chariot (sauf si on souhaite conserver le fait de pouvoir s'assoir sur le cheval et non sur le chariot.
Les animations ne monte et descente du chariot sont aussi à refaire.
Pour les modifications nécessaires pour transformer cette créature en monture : voir le tuto de Mohawk.
https://wteamoblivionmod-for.forum2jeux.com/personnages-pnj-et-creatures-f10/avancee-creation-de-montures-pour-lequitation-t161.htm