Id Tech 1
Créateur | Erreur Lua dans Module:Wikidata à la ligne 118 : attempt to index field 'wikibase' (a nil value). |
---|---|
Développé par | id Software |
Première version | Erreur Lua dans Module:Wikidata à la ligne 118 : attempt to index field 'wikibase' (a nil value). |
Dernière version | Erreur Lua dans Module:Wikidata à la ligne 118 : attempt to index field 'wikibase' (a nil value). |
Version avancée | Erreur Lua dans Module:Wikidata à la ligne 118 : attempt to index field 'wikibase' (a nil value). |
Dépôt | Erreur Lua dans Module:Wikidata à la ligne 118 : attempt to index field 'wikibase' (a nil value). |
Assurance qualité | Erreur Lua dans Module:Wikidata à la ligne 118 : attempt to index field 'wikibase' (a nil value). |
Écrit en | C |
Interface | Erreur Lua dans Module:Wikidata à la ligne 118 : attempt to index field 'wikibase' (a nil value). |
Supporte les langages | Erreur Lua dans Module:Wikidata à la ligne 118 : attempt to index field 'wikibase' (a nil value). |
Système d'exploitation | Erreur Lua dans Module:Wikidata à la ligne 118 : attempt to index field 'wikibase' (a nil value). |
Environnement | NeXTSTEP, MS-DOS |
Taille des données | Erreur Lua dans Module:Wikidata à la ligne 118 : attempt to index field 'wikibase' (a nil value). |
Formats lus | Erreur Lua dans Module:Wikidata à la ligne 118 : attempt to index field 'wikibase' (a nil value). |
Formats écrits | Erreur Lua dans Module:Wikidata à la ligne 118 : attempt to index field 'wikibase' (a nil value). |
Langues | Erreur Lua dans Module:Wikidata à la ligne 118 : attempt to index field 'wikibase' (a nil value). |
Type | Moteur de jeu |
Licence | Licence publique générale GNU |
Documentation | Erreur Lua dans Module:Wikidata à la ligne 118 : attempt to index field 'wikibase' (a nil value). |
Site web | Erreur Lua dans Module:Wikidata à la ligne 118 : attempt to index field 'wikibase' (a nil value). |
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]
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]
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]
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]
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]
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]
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 :
- Commencer au nœud racine.
- 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.
- 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]
À 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]
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]
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]
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]
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]
- ↑ Site officiel de Doom Builder
- ↑ Site officiel d'Eureka
- ↑ Site officiel d'OGLIGE
Lien externe[modifier]
Erreur Lua dans Module:Catégorisation_badges à la ligne 170 : attempt to index field 'wikibase' (a nil value).Erreur Lua dans Module:Suivi_des_biographies à la ligne 189 : attempt to index field 'wikibase' (a nil value).
Cet Article wiki "Id Tech 1" est issu de Wikipedia. La liste de ses auteurs peut être visible dans ses historiques et/ou la page Edithistory:Id Tech 1.