Utiliser des objets de modèle

Si vous avez seulement utilisé les fonctions 3D de Game Maker auparavant, cette fonctionnalité va vous épater. Avec Game Maker, il est vraiment compliqué de charger un modèle. Dans Ultimate 3D vous appellez simplement une fonction. Elle peut charger des modèles animés tels que *.an8, *.3ds, *.md2, *.x, *.ms3d et *.u3d. Juste en étant à même de charger des modèles, vous pouvez créer des scenes extrêmement complexes avec de nombreux objets vraiments cools. Et vous ne trouverez pas beaucoup de programmes de modélisation qui ne soient pas capables d'exporter dans un des formats de fichier supporté par Ultimate 3D. Ainsi, vous avez le choix.

Si vous n'avez pas eu d'expérience de modélisation jusqu'ici, je vous recommande de commencer à modeler en apprenant à utiliser Anim8or, de Steven Glanville sur www.Anim8or.com. C'est un programme de modélisation très accueillant qui peut être utilisé pour créer des modèles très complexes. Il inclus aussi un système vraiment sympathique utilisant des squelettes d'animation. Le meilleur est qu'Ultimate 3D supporte les fichiers d'Anim8or (*.an8). Si vous cherchez un programme de modélisation plus professionnel et gratuit, je vous recommande Blender, sur www.blender.org. Démarrer avec ce dernier est vraiment difficile, mais il y a vraiment de bons tutoriaux sur le site internet et une fois que vous savez comment l'utiliser, vous l'aimerez. Il peut exporter vers presque tous les formats populaires. Dans la Communauté d'Ultimate 3D, il y a un topic dans la sous-catégorie "Game Graphics" qui contient une liste de programmes de modélisation et d'autres choses, dont vous avez besoin pour faire des jeux 3D.

Les différents formats de fichiers

Chaque format de fichier supporté par Ultimate 3D a ses avantages et ses inconvénients. Voici une liste d'entre eux, incluant leurs caractéristiques individuelles.

*.3ds
Le format de fichier .3ds est bon pour une raison très simple. Il est supporté par de nombreux programmes de modélisation. A l'origine, c'était le format de fichier de 3D Studio Max, mais pour une raison inconnue, il est devenu un type de standard pour de nombreux programmes de modélisation. Les fichiers *. 3ds supportent l'animation par squelette. Malheureusement, il n'y a pas beaucoup de programmes non commerciaux qui sont en mesure d'exporter des fichiers d'animation *. 3ds. En outre, le format de fichier *. 3ds est un modèle un peu désuet, car il ne supporte pas les vertex skinning - ce qui est important lors de l'animation de personnages - et il ne stocke pas les normales des vertices.

*.an8
Le grand inconvénient du format de fichier d'Anim8or est qu'il est le seul programme de modélisation à le supporter. L'avantage réside dans le fait qu'il supporte l'animation par squelettes. De cette façon Anim8or peut être utilisé pour créer des modèles animés pour Ultimate 3D. Malheureusement, le support de l'animation d'Ultimate 3D pour les *.an8 n'est pas totalement complet, parce que Steven Glanville (le développeur de Anim8or) n'a pas documenté tous les morceaux nécessaires au chargement des scènes des fichiers d'Anim8or pour le moment. Mais les chiffres et les séquences sont supportées complètement, incluant les animations utilisant l'influence sur les os ou le poids des peaux. Il vous est donc possible de créer des animation pour vos personnages et autres objets en utilisant les fichiers *.an8. Avant de charger un *.an8 avec Ultimate 3D vous devez convertir toute la géométrie en Meshs (Build->Convert to Mesh). Malgré cela, vous devrez faire attention avec les facteurs de puissances dans le "Material Editor". Par défaut, elles sont réglées à 0.3, 0.7, 0.2, 0.0. C'est généralement mieux de les régler à 1.0, 1.0, 0.0, 0.0. Autrement votre modèle sera très sombre dans Ultimate 3D.

*.md2
Le format de fichier *.md2 est très spécial. À l'origine il était utilisé par le moteur de Quake II pour sauvegarder les modèles du joueur. L'élément inhabituel à son propos est qu'il utilise une méthode différente, de tous les autres fichiers de modèle supportés, pour la création des animations. Plutôt que de connecter de simples meshes en utilisant les "os" et en sauvegardant les transformations de ces os (cette technique se nomme l'animation de squelette), le *.md2 sauvegarde un mesh pour chaque image / frame de l'animation. Dans Ultimate 3D v 1.31 vous obtenez toujours des animations sacadées lorsque vous utilisez des *.md2, parce qu'ils ne contiennent pas suffisamment de frames. Ultimate 3D v 2.0 utilise une technique nommée vertex tweening pour interpoler les vertex entre chacune des frames du *.md2. De cette manière vous obtenez des animations totalement fluide. Les désavantages des *.md2 sont, qu'il prend plus de place qu'un autre modèle et que ses animations ne peuvent être manipulées.
Ses avantages, sont que certains programmes qui ne supportent aucun autre format animé, supportent les *.md2 animés. Et surtout parce qu'il y a des tonnes de *.md2 vraiments cool sur le web parce que les gens ont modélisés des personnages pour Quake II.

*.x
*.x est le format de ficher des modèles de DirectX. Ce format est très vieux, mais il est suffisamment joli, et la plupart des programmes de modélisation professionels, tels que Blender,  3D Studio Max, Maya, Milkshape 3D et beaucoup d'autres le supportent au travers de plugins. Un certain nombre de ces plugins peuvent êtres trouvés sur ce site. Il supporte les animations, avec ou sans vertex skinning, les matériaux, et tout ce qu'un développeur de jeu peut désirer. 

*.ms3d
*.ms3d est le format de fichier des modèles du programme de modélisation Milkshape 3D. Il supporte les matériaux multiples, les animations, avec ou sans vertex skinning. Il existe des plugins pour exporter vers de nombreux programmes de modélisation. Si vous obtenez des erreurs avec l'export en *.x, le format de fichier *.ms3d pourra devenir la solution parfaite.

*.u3d
Comme son nom le sous-entend, *.u3d est le format de fichier des modèles d'Ultimate 3D. Actuellement il n'y a que deux programmes qui peuvent les exporter. Ultimate 3D lui même (et toutes les applications, qui sont basées dessus) et Blender au travers de ce plugin d'export (Ndt:Lien Serveur CBNA - BlenderToU3D (18/11/08)). Il y a tout un ensemble de raisons pour son existence.
La première, c'est que cela peut sauvegarder un objet modèle d'Ultimate 3D tel quel. Tous les effets et changements qui lui ont été appliqués seront sauvegardés. Lorsque vous lirez les chapitres avancés, vous verrez que cela peut rendre les choses plus aisées. Un exemple sympathique pour cela, est le feu de la Fire and Water Demo. Cela requiere beaucoup de code pour appliquer les effets à ces derniers, mais vous pouvez simplement exporter le modèle complet dans un *u3d. Lorsque vous chargerez ce fichier unique vous obtiendrez du feu animé. Ainsi, une grosse partie du temps de calcul intensif des données, telles que les multiples niveaux de détail, peuvent être sauvegardés dans les fichiers de modèles d'Ultimate 3D. Cela peut raccourci le temps de chargement de façon visible.
La seconde raison de son existence, est que vous pouvez exportez toutes les textures et fichiers d'effets qui sont utilisés par un objet modèle, vers des fichiers *.u3d. Ainsi vous pouvez cacher vos ressources.
Et enfin, la dernière raison, c'est que le format de fichier d'Ultimate 3D a une fonctionnalité de cryptage par mot de passe valable. Donc, si vous désirez cacher vos ressources, vous pouvez simplement exporter tous vos modèles et textures vers des fichiers *.u3d crypté.
Exporter les objets de modèles vers les fichiers *.u3d sera abordé au sein du chapitre à propos de la gestion avancée de modèles.
Commentaire: Si vous voulez ajouter le support pour les fichiers de modèles d'Ultimate 3D, vous pouvez trouvrer des descriptions sur Ultimate3D.org.

Chargement des modèles

Comme je l'ai déjà dit, vous avez seulement besoin d'une petite fonction pour charger un modèle. Mais puisque chaque objet model nécessite une instance d'un objet de Game Maker, auquel le modèle peut être associé, vous devez régler quelques variables:

file
Le chemin du fichier contenant le modèle 3d. Je vous conseille de mettre tous les modèles dans un sous-répertoire appelé "models", mais c'est à vous de décider. Si vous avez créé des textures pour des matériaux particuliers de votre modèle, vous devez les placer dans le dossier gfx. Ultimate 3D les chargera alors automatiquement à partir de ce repertoire.

password (optionnel)
Si des fichiers se réfère à un fichier de modèle Ultimate 3D crypté, cette variable doit être réglé sur une chaîne de caractères donnant le mot de passe. Sinon, vous n'avez pas besoin de créer cette variable.

Après avoir créé et réglé ces variables, vous pouvez appeller LoadMesh() pour créer le modèle de l'objet. Le nom de cette fonction est un autre reste des versions précédentes d'Ultimate 3D. Elles ne supportaient que les *.x, et ces derniers s'utilisaient comme un seul et unique mesh. Désormais LoadMesh() permet de charger des modèles qui sont constituées de beaucoup de meshes avec des squelettes et des animations.  Etant donné que les objets de modèles peuvent être transformés tout comme les primitifs (en utilisant les variables x, y, z, scalx/y/z et rotx/y/z) vous devrez mettre Step() dans l'évènement step de l'objet. Comme d'habitude vous devrez appeler Destroy() dans l'évènement correspondant.

Il existe quelques variables supplémentaires pour gérer l'animation. Voici une liste de celles-ci:

frame
Si cette variable a une valeur positive, cette frame de l'animation sera utilisée. Si frame est négative, la valeur sera utilisée comme la vitesse d'animation. Donc si frame est égal à -1, vous obtenez une nouvelle image à chaque step.

first_frame, last_frame
Ces deux variables définissent une série d'images qu'Ultimate 3D joue en boucle si frame est négative. Si first_frame est plus grande que last_frame l'animation se déroulera en sens inverse.

Pour connaître quelle frame de l'animation du modèle est actuellement affiché, vous pouvez appeller GetCurrentFrame(). Elle ne prend aucun argument et retourne la frame qui est actuellement affichée pour le modèle de l'objet qui a appellé la fonction. Pour les modèles *.md2 il y a une autre variable que vous connaissez déjà des primitives. Etant donné que les fichiers *.md2 ne contiennent aucune informations à propos de leur texture, vous définissez la texture pour les *.md2 de la même façon que pour les objets primitifs: en réglant la variable texture à l'index de la texture chargée au démarrage, en utilisant LoadTexture(...).



© Christoph Peters. Certains droits réservés. (Traduction FR 04/2008, Franck Vernel / Damien Buhl).

Creative Commons License XHTML 1.0 Transitional