id Tech 4 : modélisation

Tout permuter

Doom 3 utilise plusieurs types de modèles , dont .lwo, .ase et .md5mesh.

Le premier dans cette liste est le format LightWave Object, qui selon toute apparence n'est compatible qu'avec le logiciel LightWave 3D. Les deux autres sont des formats ASCII, c'est-à-dire qu'ils peuvent être examinés et modifiés dans un éditeur de texte.

Les modèles ASE

Ceux-ci sont des modèles statiques ; ils n'ont aucune animation. Ce format est surtout utilisé pour des objets immobiles dans les niveaux : les tables, les ordinateurs, les lumières...

Si on ouvre, par exemple, base/models/mapobjects/base/chairs/chair2.ase, on verra que ce fichier est divisé en sections. La première est *SCENE, qui contient des méta-informations de base.

La seconde est *MATERIAL_LIST, qui peut contenir plusieurs définitions de matériaux. Remarquer la propriété BITMAP du premier matériau (*MATERIAL 0), qui a comme valeur le nom d'une image .tga.

Cette ligne portera certainement à confusion. On peut croire en la lisant que seul un fichier image est utilisé ; en réalité, c'est un matériau défini dans base/materials/patricktest.mtr. Ce matériau fait lui-même référence au fichier .tga.

Quant au matériau référencé dans chair2.ase...il est possible qu'il s'agisse tout simplement d'une relique de la période de développement. Peut-être le système de matériaux (avec les fichiers .mtr) a-t-il mis du temps pour être mené à bien. Dans ce cas, les développeurs seraient vraisemblablement obligés, en attendant, de passer explicitement par les fichiers images.

Selon mes tests, le modèle demeure fonctionnel si on enlève l'extension .tga de sa propriété BITMAP.

Les modèles MD5Mesh

Les modèles des personnages et des monstres sont définis dans des fichiers .md5mesh.

Ces fichiers contiennent des informations du modèle à l'état de repos (habituellement en pose t). Les MD5Mesh sont référencés dans les fichiers de définition d'entité (.def), où ils sont associés à des fichiers MD5Anim. Ces derniers sont des définitions d'animations uniques.

Les MD5Mesh peuvent contenir plusieurs mesh (des maillages distincts), chacun avec son propre matériau, indiqué par la propriété shader. Remarquer que cette propriété n'a pas d'extension .tga  car on cherche un matériau. S'il n'est pas trouvé, on cherchera alors si un fichier .tga avec le chemin indiqué est disponible.

Astuces générales

  • Utiliser un modèle .ase créé dans Blender (2.44)

    (Le script à utiliser se nomme goofosASE-2.44v0.6.12.py.)

    1. Exporter le modèle de Blender 2.44 avec le script
    2. Dans le fichier .ase, trouver le bloc MATERIAL_LIST, puis la valeur de *BITMAP. Le chemin indiqué doit être un des suivants :
      • //purgatory/purgatory/doom/base/ suivi du chemin jusqu'au fichier .tga
      • //doom3/base/ suivi du chemin jusqu'au fichier .tga
      • //base/ suivi du chemin jusqu'au fichier .tga

    Notes :

    • Le troisième chemin ne suffira peut-être pas ; dans ce cas, utiliser un des deux autres. On peut voir dans la fonction idFileSystemLocal::OSPathToRelativePath() (dans neo/framework/FileSystem.cpp) que l'interprétation des chemins varie selon la valeur de la constante ID_DEMO_BUILD.
    • La direction des barres obliques ne devrait pas être importante, mais selon le site KatsBits, il faudrait y prêter attention :

      Design note : Make sure that your use of the '\' or '/' reflect what you have in the material file header.

      (http://www.katsbits.com/tutorials/idtech/export-ase-models.php)

  • Importation et exportation de modèles MD5

    Notes :

    • Cette astuce n'est pas complète ; je n'ai jamais complètement réussi à maîtriser l'échange de modèles entre Blender et Doom 3
    • On fait ici usage de plus d'une version de Blender, soient les versions 2.61 et 2.63

    Importation

    Voici un importateur de fichiers .md5mesh et md5anim pour Blender 2.61 (seulement) : http://www.katsbits.com/smforum/index.php?topic=358.0

    Exportation

    Exportateur MD5 pour Blender 2.63 (seulement) : http://www.katsbits.com/smforum/index.php?topic=404.0

    Pour importer puis exporter un modèle, la méthode de base n'est pas trop compliquée :

    1. Importer le fichier .md5mesh dans Blender 2.61
    2. Sauvegarder la scène (dans un fichier .blend)
    3. Ouvrir ce fichier avec Blender 2.63
    4. Déplacer les os de l'armature au calque 5 (seuls les os dans ce calque seront exportés) :
      • sélectionner l'armature et passer en mode édition
      • fenêtre Properties > section Object Data > sous-section Skeleton
      • sélectionner tous les os, apputer sur M (Move Bone To Layer) et choisir le cinquième calque
    5. Sélectionner le ou les mesh (le modèle du joueur, par exemple, possède trois mesh différents mesh), et ensuite l'armature
    6. File > Export > MD5 Mesh (.md5mesh)
    7. L'exportateur utilisera la texture default au lieu des bonnes textures. Dans le cas du personnage principal de Doom 3, ce problème peut être réglé plutôt facilement, en copiant les valeurs de l'ancienne version de spplayer.md5mesh.

      Les mesh peuvent être identifiés par leur nombre de sommets (la propriété numverts). Un des mesh en a environ 850 sommets, un autre 1500, etc. Il suffit ensuite de trouver la propriété shader du mesh dans l'ancien fichier, et copier sa valeur (remplaçant ainsi default).

      Malheureusement, je ne crois pas que cette extension permette de contrôler le mappage d'une nouvelle texture (avec la fenêtre UV/Image Editor).

Problèmes

  • Certaines faces du modèle sont invisibles dans DarkRadiant

    Premièrement, s'assurer que les faces sont bien présentes dans Blender, surtout si l'on utilise un modèle sauvegardé en mode compatibilité.

    Si toutes les faces sont visibles, ce sont peut-être les faces qui ont des normales inversées.

    Sélectionner tout, puis faire Ctrl + N (recalculer les normales vers l'extérieur)

    Enfin, il se peut que les faces à quatre sommets (les quadrilatères) causent des problèmes.

    Sélectionner les faces en quadrilatère > Ctrl + T (trianguler les faces)