Id Tech 1

Un article de Wikipédia, l'encyclopédie libre.
(Redirigé depuis Doom engine)
Id Tech 1

Informations
Créateur John CarmackVoir et modifier les données sur Wikidata
Développé par id Software
Dépôt github.com/id-Software/DOOMVoir et modifier les données sur Wikidata
Écrit en C
Environnement NeXTSTEP, MS-DOS
Type Moteur de jeu
Licence Licence publique générale GNU

Chronologie des versions

L'id Tech 1 (ou Doom engine) est un moteur de jeu qui permit de faire fonctionner les jeux Doom et Doom II de id Software. Il a aussi été utilisé sous licence par les jeux Hexen, Heretic, Strife et HacX, et d'autres jeux. Il a été créé par John Carmack, et certaines fonctions auxiliaires ont été écrites par Mike Abrash, John Romero, Dave Taylor et Paul Radek. Initialement développé sur les systèmes NeXT, il a été porté sous DOS pour la première version de Doom et a été porté ensuite sur un grand nombre de consoles et de systèmes d'exploitation.

Le code source de la version Linux de Doom a été libéré en 1997 sous une licence permettant la libre utilisation non commerciale, puis a été de nouveau libéré en 1999 sous la licence publique générale GNU (GNU GPL). Les nombreux ports non officiels des sources qui ont été créés depuis, ont permis de faire fonctionner le jeu sur des systèmes d'exploitation jusqu'alors incompatibles avec le jeu, et dans certains cas ont permis d'étendre les capacités du moteur en ajoutant de nouvelles fonctions.

Ce n'est pas un vrai moteur 3D, car il n'est pas possible d'incliner le champ de vision en haut ou en bas, et deux pièces ne peuvent pas se trouver l'une en dessous de l'autre, mais c'est une architecture logicielle assez élégante qui permet de faire du pseudo rendu 3D. Lors de son développement, Doom était révolutionnaire pour sa capacité à faire rapidement des projections de textures dans un environnement 3D.

Structure des niveaux[modifier | modifier le code]

En y regardant de plus près, tous les niveaux de Doom sont en 2 dimensions, démontrant l'une des principales limitations du Doom engine : il n'est pas possible de créer des salles les unes au-dessus des autres. Cette limitation permet toutefois de faciliter l'affichage de niveau sous forme de carte, représentant les murs par des lignes et le personnage de dessus.

Éléments de base[modifier | modifier le code]

L'élément de base est le sommet (vertex), qui représente un point en deux dimensions. Les sommets sont reliés pour former des lignes (linedefs). Chaque ligne peut avoir un ou deux côtés (connu sous le nom de sidedefs). Les sidedefs sont enfin groupés pour former des polygones (appelé sector ; secteur). Un secteur est une zone particulière d'un niveau.

Secteurs[modifier | modifier le code]

Chaque secteur contient un ensemble de propriétés, comme une hauteur de plancher et de plafond ainsi qu'une texture pour le plancher et pour le plafond. Chaque secteur définit également un certain niveau de luminosité. Ainsi, pour créer une zone d'ombre ou de lumière, il faut créer un nouveau secteur. Il ne peut donc pas vraiment y avoir d'ombres portées, ni même de lumière dynamique. Il s'agit d'une autre limitation du Doom engine.

Sidedefs[modifier | modifier le code]

Les sidedefs ont moins de propriétés que les secteurs ; Néanmoins, ils peuvent être orientés, et possèdent une ou deux textures (une par face).

Things[modifier | modifier le code]

Les "Things", littéralement "Choses" en Anglais, représentent tous les objets dynamiques du jeu. Entre autres, les things peuvent représenter des ennemis, des objets à ramasser, ou même des objets de "décoration", telles les torches. Les Things peuvent être orientées dans huit directions au départ, et, outre leur nature, elles n'ont pas de propriété modifiable.

Subdivision binaire de l'espace[modifier | modifier le code]

Doom utilise une technique connue sous le nom de partition binaire de l'espace (binary space partitioning ou BSP). Un outil est utilisé pour convertir un niveau en arbre BSP, les niveaux bruts ne sont pas intégrés dans le jeu. Selon la taille du niveau, le processus peut prendre un temps important. C'est pour cette raison qu'il n’est pas possible de déplacer des murs dans Doom ; alors que des portes ou des ascenseurs se déplacent de haut en bas jamais aucun ne se déplace sur le côté.

Un niveau est divisé en arbre binaire : chaque position de l'arbre est un nœud qui représente une zone particulière du niveau (la racine représente par exemple l'ensemble du niveau). À chaque branche de l'arbre représente une ligne de division séparent l'espace en deux. En même temps, cette ligne de division peut couper les murs (linedefs) en sous-segments (segs).

Les feuilles de l'arbre représentent des polygones convexes, et il n'est pas utile de diviser plus encore la zone. Ces polygones convexes sont référés sous le nom de sous-secteur (ou SSECTORS), et sont liés à un secteur particulier. Chaque sous-secteur possède une liste de segs qui lui est associé.

Le système BSP est une manière ingénieuse de structurer les sous-secteurs pour qu'ils soient bien ordonnés pour le rendu graphique. L'algorithme devient assez simple :

  1. Commencer au nœud racine.
  2. Traiter les nœuds fils de ce nœud de manière récursive. Les nœuds les plus proches de l'observateur étant traités en premier. Cette information peut être trouvée en regardant de quel côté de la ligne de division l'observateur se trouve.
  3. Lorsqu'un sous-secteur est atteint, le dessiner.

Le processus est terminé lorsque la colonne entière des pixels est remplie (c'est-à-dire lorsqu'il n'y plus de trou). Cet ordre de traitement assure qu'aucun temps n'est gaspillé pour dessiner des objets qui ne sont pas visibles et en conséquence les niveaux peuvent devenir très grands sans qu'il n'y ait vraiment de pénalité de vitesse.

Rendu[modifier | modifier le code]

À l'époque les ordinateurs n'étaient pas assez performants pour rendre de la vraie 3d. Doom utilisait un moteur de fausse 3d: la camera ne peut jamais tourner vers le haut ou vers le bas, et le terrain est codé et analysé en 2d, ce qui réduit considérablement les calculs.

Dessin des murs[modifier | modifier le code]

Les murs sont rendus avec la technique du raycasting, utilisée aussi pour Wolfenstein 3D. Elle consiste à tracer des tranches verticales de texture à hauteur variable pour donner l'illusion des murs.

Plancher et plafond[modifier | modifier le code]

Les planchers et plafonds sont rendus avec une méthode similaire: le Z-Mapping, également utilisé dans des jeux comme Mario Kart, et qui fonctionne avec des tranches de texture horizontales.

Objet (sprites)[modifier | modifier le code]

Chaque secteur du niveau possède une liste chaînée représentant les objets (things) s'y trouvant. Pendant la phase de rendu des secteurs, les objets sont placés dans la file d'attente pour être affichés. Ceux qui ne sont pas dans le champ de vision sont ignorés.

Les bords des sprites sont coupés en vérifiant la liste des segments déjà dessinés. Les sprites dans Doom sont stockés avec le même format que celui utilisé pour les murs, de telle sorte qu'il est très facile pour le moteur de rendu de les afficher : les mêmes fonctions qui sont utilisés pour afficher des murs sont employées pour dessiner des sprites.

Alors que les sous secteurs garantissent d’être déjà triés, les sprites ne le sont pas. Doom stocke une liste de sprites à afficher (vissprites) et trie cette liste juste avant le rendu. Ainsi les sprites les plus en retrait sont affichés avant ceux qui se trouvent plus proche du champ de vision. Ceci génère des recouvrements — que l'on peut considérer comme un traitement non optimal — mais qui sont habituellement négligeables sur le temps de traitement.

Enfin, les textures utilisées sur les deux côtés d'un mur et recourant à la transparence sont affichées en même temps que les sprites à la fin du processus de rendu plutôt qu'avec les autres murs.

Éditeur de niveaux[modifier | modifier le code]

Dès la création de Doom, et encouragés par les auteurs du jeu, des amateurs travaillèrent à construire de nouvelles cartes pour le jeu, et développer des outils dédiés : DEU (Doom Editing Utility), DETH (DOOM Editor for Total Headcases), le logiciel commercial DCK (Doom Construction Kit), etc. Les logiciels actuellement fonctionnels et régulièrement mis à jour sur des systèmes modernes comprennent Doom Builder[1] et Eureka[2] (héritier multiplateforme de l'outil Yadex sur Linux). Il existe même des générateurs aléatoires de cartes, tel que OBLIGE[3] (héritier de SLIGE).

Doom et Duke Nukem 3D utilisent le même type de cartes, mais le moteur de Duke Nukem a moins de limitations (possibilité de superposer des étages par exemple). Les niveaux de Doom peuvent donc être édités avec l'éditeur de niveau de Duke Nukem 3D.

Références[modifier | modifier le code]

  1. Site officiel de Doom Builder
  2. Site officiel d'Eureka
  3. Site officiel d'OGLIGE

Lien externe[modifier | modifier le code]