Modelage pour Jedi Outcast

 
 
Créer un modèle pour Jedi-Knight Outcast est une opération longue et assez difficile. C'est du au fait que les modèles sont très complexes, il sont composés de plusieurs éléments pour que les modèles puissent être démembrés ou pour qu'on puisse ajouter des éléments supplémentaires.
 
De plus le squelette d'un personnage est très complexe, car contrairement aux modèles plus simple de jeux comme Half-Life, chaque doigt est animé séparément, le visage peut aussi être animé, les yeux, les paupières, les joues les lèvres.
 
Il faudra avoir une grande rigueur au cours de la création d'un modèle, car bien que les personnages soient très détaillés, l'animation ne pose pas de difficulté. En fait si on a un personnage standard, toute la partie animation ne sera pas nécessaire.
 
Cette rigueur dans les noms et le positionnement du squelette vient de ce fait justement. Comme toutes les animations des personnages sont déjà faites et peuvent être utilisées pour tout modèle humain, il est clair qu'il faudra respecter strictement la structure du squelette sous peine d'avoir de désagréables surprises.
 
Dans ce tutoriel je ne vais pas entrer dans les détails des fonctions de 3D Studio Max, elle sont supposées connues, car faire un modèle pour Outcast n'est pas à la portée d'un débutant. Si on veut avoir plus de détails sur le travail de modèle avec 3D Studio Max on peut se référer au tutoriel sur les modèles de Half-Life. Le travail est assez semblables à quelques détails près.
On va donc se limiter ici aux particularités de la création de modèles pour Jedi-Knight Outcast.
 
Ce qu'on va donc faire, c'est d'importer un squelette type dans 3D Studio Max et de travailler autour sans le modifier. On va modeler le personnage pour qu'il puisse recevoir ce squelette. Cela implique des contraintes, mais ça simplifie énormément le travail, car on va pouvoir utiliser toutes les animations faites pour les personnages humains.
Si vous regardez la liste des animations disponibles dans le fichier : \base\models\players\_humanoid\animations.cfg
vous allez remarquer qu'il y en a 939 !!!
Imaginez que vous ayez à refaire rien que la moitié pour votre personnage, c'est un travail énorme!!
 
Pour importer un squelette et ensuite exporter le modèle terminé, on va avoir besoin du plugin d'importation XSI. On trouve ce plugin dans le kit de développement fourni par Raven.
 
On va trouver un squelette type dans le dossier : \base\models\players\kyle\root.xsi
 
Remarques très importantes :
 
Avant de commencer, il faut installer les deux kits de développement de Raven pour avoir tous les outils à disposition ainsi que les fichiers d'exemples. Mais il faut faire particulièrement attention à la manière d'installer ce kit, car il faut absolument que les éléments soient au bon endroit. Lors de l'installation il faut veiller à donner l'adresse du dossier GameData, si on met le kit ailleur, les exemples ne seront pas au bon endroit et pour travailler par la suite ce sera la galère!!
 
Une autre chose extrèmement importante c'est de ne jamais travailler hors de la structure des dossiers du jeu. Si vous modelez un nouveau joueur, il faut commencer par créer un dossier à son nom dans : \base\models\players
Vous y mettrez tous les fichiers le concernant, si vous ne le faites pas, le programme de compilation du modèle ne trouvera pas les éléments nécessaires.
 
Tous les outils du kit on des préférence réglées par Raven pour sa propre structure de dossier, attention, car ils avaient pour lecteur, le lecteur W:
Ce qui fait que si vous avez installé le jeu ailleur, il faudra régler vos propres préférences pour que ça corresponde à l'emplacement où le jeu est installé. Les programmes se basent sur le dossier principal racine du jeu qui s'appelle : base/
 
Ne bidouillez pas avec la structure originelle du jeu, si vous faite une mod reprenez la même structure pour éviter les problèmes.
 
 
 
L'importation du squelette type dans 3D Studio Max
 
 
C'est la première chose à faire, on va importer à partir du dossier kyle le fichier root.xsi.
 
Avant de le faire il faut donner des précisions sur la méthode de création d'un modèle pour Outcast.
 
On va procéder comme pour Half-Life, on va créer un modèle de référence qui sera exporté, mais ensuite on n'aura pas à faire les animations. Le modèle de référence est toujours nommé root.xsi quel que soit le modèle, d'où l'importance de la structure des dossiers, sinon si on mélange c'est la catastrophe.
 
Après avoir importé dans 3DSMax root.xsi, on va obtenir le modèle de référence pour kyle. Mais déjà un gros problème!!!
Le plugin semble avoir un sérieux bug, car après avoir importé le modèle, j'ai obtenu un résultat catastrophique.
Une grande partie du modèle a été importée correctement, mais des éléments du corps ne sont pas à leur place et des éléments du squelette, les jambes, ont pivoté de 90° vers le haut!!!
 
On ne touche à rien et on observe bien, on va remarquer qu'en fait on a quatre modèles avec des niveaux de détails différents.
 
Tout modèle pour Outcast a 4 LOD (Level Of Detail), ceci est nécessaire pour limiter le travail du moteur du jeu. Lorsqu'on est près d'un personnage on a le niveau de détail maximum, et à grande distance on a le niveau de détail minimum.
 
Pour le niveau de détail maximum, on peut avoir jusqu'à plus de 3000 polygones, pour le minimum on va descendre à 500, les deux autres en auront 2000 et 1000.
 
Pour le travail qu'on va faire, on n'a pas besoin des éléments du corps, on a seulement besoin du squelette, mais ce serait une erreur de supprimer tout le reste.
En plus des éléments du corps, il y a des tags, qui sont des points de référence pour des effets spéciaux ou pour placer des éléments supplémentaires comme des armes ou des équippements.
 
Avant de faire quoi que ce soit on va voir la liste des éléments du modèle.
Il y a d'abord toute une série de triangles dont le nom commence par bolt_ , ce sont les tags. Ce sont de petites surfaces triangulaires dont la position défini un endroit pour un effet.
Une grande partie de ces tags est utilisée pour définir l'endroit de démembrement du modèle, dans les noms de ceux-ci il y aura toujour le terme _cap
 
Que repésente un _cap ? , c'est une coupe d'un membre en fait, lorsqu'un sabre coupe un membre, il y a plusieurs endroits possibles et les tags donnent l'endroit où la surface de coupe doit être dessinée pour fermer le membre coupé.
 
Si on ne mettait pas de caps, on verrait l'intérieur et c'est pas beau!!! car voir l'intérieur c'est voir le vide, les surfaces n'étant pas rendue à l'intérieur.
 
Les autres tags sont pour placer des éléments d'équippement ou pour des effets spéciaux.
 
Il y a encore les autres éléments du corps, segmentés, et les caps pour les fermer.
 
Finalement il y a le squelette qui lui est à un seul exemplaire, contrairement aux autres éléments qui sont à quatre exemplaires pour les LOD.
 
Maintenant on va déterminer ce qu'on garde et ce qu'on élimine pour notre propre modèle. On va garder tout le squelette bien sûr, mais on va également garder les tags, il faudra simplement les repositionner pour le nouveau modèle une fois celui-ci terminé.
 
Après avoir éliminé les éléments du corps et les caps, il faut remettre les jambes du squelette à la verticale, on les fait pivoter de 90° vers le bas.
 
Attention à ne pas bouger le squelette de sa position d'origine pendant toutes ces opérations.
 
Le travail ensuite sera de créer le modèle avec les techniques habituelles, il faudra respecter la segmentation et les noms exacts de parties du corps, c'est très important. Voyez le document fourni avec le kit de développement sur les conventions de construction d'un modèle.
 
Structure en résumé:
 
Il y a seulement 9 surfaces de base permises : hips, l_leg, r_leg, torso, head, r_arm, r_hand, l_arm, l_hand.
 
Ce sont les éléments détachables pour le démembrement.
 
Toutes les autres surfaces doivent être les enfants de ces surfaces et donc y être liées.
 
Par exemple la protection d'épaule de Kyle nommée r_arm_shpad
 
On voit donc que la structure des noms des éléments est extrèmement importantes, ne vous accordez aucune fantaisie à ce point de vue!!!
 
Ensuite il faut comprendre la nomination des tags:
 
Il y a 9 tags de base pour le modèle :

Chaque tag commence par bolt_, puis on a le nom du parent et si nécessaire un nom supplémentaire pour différencier.

Par exemple : bolt_l_hand est le tag de la main gauche, bolt_l_leg_knee est le tag du genoux gauche, bolt_l_leg_foot est le tag du pied gauche.
 
Puis il faut comprendre la nomination des caps de fermeture des éléments :
 
La structure du nom est : "surface parente"_cap_"surface adjointe"
 
Exemple : r_arm_cap_r_hand est la fermeture du poignet
 
Les caps de fermeture des surfaces de base doivent avoir également un tag, ce tag doit être au centre du cap et doit pointer vers l'extérieur.
 
Comme pour les autre tags la structure du nom suit la même logique.
Par exemple : bolt_r_arm_cap_r_hand
 
 
Il y a une autre convention qu'il faut connaître, on remarquera que souvent des surfaces ont le suffixe _off, cela signifie que cette surface ne sera pas rendue par défaut. Par exemple les caps qui ferment les membres ne sont pas rendu, car on ne les voit pas normalement, c'est seulement lorsque le membre est coupé que le moteur du jeu les affiche.
Mais on peut également donner ce suffixe à d'autres objets qui seront affichés ou non selon les circonstances. Ce peut être diverses pièces d'équippement pour varier l'aspect du joueur. Ce qui fait qu'avec un modèle de joueur on pourra en créer plusieurs variantes dans le jeu. On choisira la variante en choisissant ce qui est affiché ou non dans les propriétés du joueur définies dans le fichier npcs.cfg
 
Des exemples de ces diverses configurations se remarquent très bien avec les deux versions de Rodien , celui qui porte une veste et celui qui n'en a pas, ou avec le droïde de protocole, le modèle impérial a une autre tête, la tête d'origine est remplacée par une autre. Il y a également les deux têtes de prisonniers ou encore les jedis.
 
Il faut encore ajouter les conventions d'orientation du modèle:
 
-Y c'est vers l'avant, -X c'est à droite, +Z c'est vers le haut.
 
 
Une fois que le dessin du modèle est terminé, il faut premièrement vérifier que les segments sont bien découpés au bon endroit, que les caps nécessaires ont été faits et mis en place.
 
Positionnement des éléments et mappage des textures:
 
Lorsque tout est parfaitement aligné et mis en place par rapport au squelette, il faut maintenant ajuster la position des tags, au besoin prenez exemple sur le modèle de kyle si vous avez un doute.
Maintenant on peut procéder à une opération importante, il faut positionner les textures sur le modèle, attention, il ne faut pas plus d'une texture par élément de base du modèle. C'est important, car le modèle se réfèrera à un fichier de skin pour afficher les textures, si on ne le fait pas on aura pas les bonnes textures sur le modèle.
 
Structurer les surfaces du modèle :
 

L'étape suivante sera de créer la structure parent-enfant du modèle, il faut lier les éléments secondaires aux éléments de base du modèle.

Par exemple :
 
bolt_l_leg_calf
bolt_l_leg_cap_hips
bolt_l_leg_foot
l_leg_cap_hips_off
 
Ces quatres éléments doivent être liés à : l_leg
 
C'est une règle absolue, toute surface secondaire doit être liée à une surface de base
 
Puis ensuite, il faut relier les surfaces de base entre elles jusqu'à la racine:
 
Par exemple : r_hand est lié à r_arm, puis r_arm est lié à torso, torso est lié à hips, hips est lié à stupidtriangle_off, stupidtriangle_off est lié à mesh_root et finalement mesh_root à model_root
 
 
Lier le squelette au modèle :
 
Une étape très importante et assez difficile, il faut relier chaque sommet de chaque éléments du modèle à un élément du squelette.
 
On peut simplifier l'opération en reliant tous les sommets d'un élément du modèle à un seul os du squelette, mais le résultat n'est pas vraiment très bon et à certains endroits il y aura des déformations et des décollements entre les éléments.
Le principal problème c'est la liaison entre deux éléments, par exemple l'épaule. Si on lie tous les sommets du bras à l'os du bras et tous les sommets de l'épaule à l'os de la clavicule, lors d'un mouvement la liaison bras-épaule va se décoller selon le ponit de l'articulation.
 
Pour remédier à celà, il faut lier les sommets du bras à l'os du bras et à la clavicule aussi, toute la difficulté réside dans le poid de chaque os dans la liaison.
 
Pour faire cette liaison on va utiliser le modificateur peau, souvent on pourra lier un élément à un seul os, mais aux jointures il faudra en mettre deux au moins. Attention on ne peut pas lier un sommet à plus de 4 os du squelette sinon on ne pourra pas compiler le modèle.
 
Pour bien réussir, il n'y a pas de secret particulier, il faut avoir de l'expérience et du flair pour imaginer comment règler le poid de chaque os. Il faudra certainement faire plusieurs essais avant d'avoir un résultat satisfaisant.
Faites régulièrement bouger le squelette pour voir le résultat, mais attention à bien revenir à la position de départ du squelette avant de poursuivre, mieux vaut sauvegarder régulièrement et être très attentif.
 
Lier les tags au squelette :
 
Il ne faut pas oublier de lier également les tags au squelette, sinon ils ne suivraient pas le mouvement lors d'animations, ce qui serait désastreux!
 
On va faire au plus simple et ne lier un tag qu'à un seul os du squelette. Il faut simplement choisir le bon os bien sûr.
 
 
Après avoir lié tous les tags au squelette, il faut encore lier le stupidtriangle_off au premier os du squelette, le pelvis.
 
Il faut bien prendre garde que chaque sommet du modèle soit bien lié à un des os du squelette sinon le résultat risque d'être comique!!!
 
 
Exportation du modèle au format XSI :
 
Lorsqu'on va exporter le modèle dans ce format, il faudra bien prendre garde à certaines choses importantes.
 
Lors de l'exportation, il faut bien prendre garde à ce que toute les coches soient mises, puis il y a encore une autre chose à corriger, il y a un champs qui permet de corriger l'adresse des textures en enlevant la première partie pour ne laisser que l'adresse à partir du dossier du jeu.
Par exemple, si nos textures sont dans le dossier C:\programme files\Outcast\GameData\base\models\players\dupontlajoie
On va mettre dans le champs : C:\programme files\Outcast\GameData\base\
Si on ne le fait pas le jeu ne trouvera pas les textures, car il part toujours du dossier base/ pour trouver les ressources nécessaires.
 
Il faut toujours exporter le modèle avec le nom root.xsi dans le dossier du modèle à la place définitive dans le jeu et pas ailleurs.
 
J'ai eu un petit bug lors de l'exportation d'un modèle, l'object factice model_root qui figure dans les fichiers XSI du kit de développement est importé dans 3DSMAX et il semble qu'il ne devrais pas l'être puisque lors de l'exportation il figure à double dans le fichier root.xsi et cause une erreur de compilation du modèle.
La solution est de supprimer model_root avant d'exporter, le plugin d'exportation le créant automatiquement.
 
Un autre problème peut apparaître, lorsqu'on va compiler le modèle, il peut arriver qu'une texture n'apparaissse pas ou soit remplacée par une autre.

Ceci se produit selon la méthode utilisée pour appliquer les textures. Contrairement aux modèles pour Half-Life, il ne faut pas utiliser des matériaux de type multi-sous-objet, car l'exportateur XSI va se planter et ne pas exporter tous les matériaux, il va même exporter certains qui n'éxistent pas.

Il faudra donc utiliser un matériau de base par texture utilisée, de cette façon ça marche.
 
Si on veut se simplifier la vie on peut très bien n'avoir qu'une texture de skin de grande taille par exemple 1024x1024 mais un bon choix est de faire une grande texture pour le corps, une autre pour la tête et une dernière pour des éléments de décoration. De cette façon on pourra détailler mieux le visage et certains éléments qui méritent plus de détails.
 
 
La compilation du modèle :
 
 
Là c'est le moment de toucher du bois, de se croiser les doigts et d'aller brûler un cierge en espérant que tout se passera bien.
 
Le programme de compilation s'appelle carcass, heureusement il est fourni avec une interface graphique facile à utiliser qui s'appelle Assimilate.
 
Assimilate va produire divers fichiers avec les fichiers de départ qu'on lui fourni.
 
Pour un modèle de joueur standard, qui utilise les animations d'origine, on va simplement choisir dans le menu : File/Add Files
 
On va prendre le fichier root.xsi qu'on vient d'exporter, puis on va aller prendre le fichier humanoid.gla dans le dossier player/humanoid
On va recevoir un message qui nous demande si on veut bien créer un modèle qui utilise les animations par défaut du joueur lorsqu'on prend root.xsi, c'est normal et c'est ce qu'on veut faire.
 
Une fois qu'on a ces deux fichiers dans le dossier ayant pris le nom de notre joueur, il faut encore double-cliquer sur ce dossier pour avoir une boite de dialogue, mettez la coche dans la case Make EF1-type .skin file . Cette option permet de créer un fichier de skin sans lequel aucune texture n'apparaîtra sur le modèle.
 
Pour compiler le modèle il suffit de cliquer sur B , on va demander un nom pour le fichier .car qui sera également celui du modèle, faites comme tout le monde, choisissez le nom model tout simplement par souci de conformité.
 
Si tout a été fait correctement on va obtenir un modèle model.glm qu'on pourra visualiser avec ModView.
 
Si on reçoit des messages d'erreur, c'est que lors de la création du modèle avec 3DSMAX on a fait des erreurs, un exemple est le message qui dit que model_root est à plusieurs exemplaires dans le fichier xsi, dans ce cas on supprime model_root dans 3DSMAX et on réexporte root.xsi.
 
Un autre message d'erreur peut arriver si un ou des sommets du modèle sont liés à plus de quatre os du squelette.
 
Un modèle de type .glm a besoin de plusieurs fichiers, le fichier model.glm, un fichier d'animations _humanoid.gla, un fichier de configuration d'animations animation.cfg et un fichier model_default.skin pour les textures.
 
Pour le mode multijoueurs, il faudra également des fichiers model_blue.skin et model_red.skin.
 
 
 
Cas particulier d'un modèle autre que joueur, n'utilisant pas les animations par défaut.
 
 
C'est un cas particulier, pour le moment, ce n'est pas très utile, car on ne possède pas les sources pour le mode simple joueur. On ne peut donc pas créer de nouvelles entités, mais on peut très bien changer le modèle d'une entité existante, par exemple un autre modèle de robot ayant les mêmes proportions et facultés, mais avec des formes un peu différentes.
On pourra alors avoir un personnage nouveau dans une nouvelle map simple joueur.
 
La procédure de modelage est la même, on pourra avoir un squelette différent, mais il faudra respecter la structure des noms comme avant et si on fait un modèle pour une entité déja existante, il faudra l'analyser avec ModView pour voir quels sont les tags nécessaires et où ils doivent être. Ainsi que la structure du squelette et les animations que le modèle utilise.
Attention car le code du modèle peut se référer à un tag pour un effet, ou utiliser un os du squelette pour animer le modèle, si ce tag manque ou si l'os manque ça peut causer un bug et même un crash du jeu!
 
On va alors d'abord exporter un fichier root.xsi, puis on va exporter un fichier XSI pour chaque animation en lui donnant le nom de l'animation.
 
Dans Assimilate on va ajouter root.xsi, puis tous les autres fichiers .xsi d'animations, on va double-cliquer sur le dossier pour la boite de dialogue, mettre la coche pour créer le fichier .skin et également la coche dans Makes it's own skeleton.
 
Assimilate va alors complier le fichier model.glm, créer un fichier nomdumodel.gla qui contient les animations, le fichier model_default.skin et le fichier animation.cfg.