Doom-engine (id Tech 1): geschiedenis, werking, broncode en bronpoorten
Alles over de Doom-engine (id Tech 1): geschiedenis, werking, vrijgegeven broncode en populaire bronpoorten zoals Boom, PrBoom, ZDoom & Chocolate Doom — technische achtergrond en portabiliteit.
Doom engine, ook wel id Tech 1 genoemd, is de spelmotor achter het baanbrekende computerspel Doom (origineel 1993) van id Software. Varianten van dezelfde code werden gebruikt voor onder andere Doom 2 en zwaar aangepaste versies vormden de basis voor titels als Heretic, Hexen en Strife. Doom 3 gebruikt daarentegen een geheel nieuwe engine.
Geschiedenis en beschikbaarheid van de broncode
Doom zelf verscheen in 1993 en was belangrijk voor de vroege populariteit van het first-person shooter-genre. De engine is grotendeels ontwikkeld door John Carmack (core-techniek) en het team van id Software. In de loop der jaren maakte id Software de broncode van de originele Doom-engine publiek: eerst in een beperkte vorm en later op een manier die community-ontwikkeling mogelijk maakte. De broncode is uiteindelijk vrijgegeven onder de GNU General Public License, waardoor hobbyisten en programmeurs de code mochten bestuderen, aanpassen en opnieuw uitbrengen.
Werking — hoe de engine 3D-achtige beelden produceert
De Doom-engine is een typische “2.5D” engine: het creëert een overtuigende 3D-ervaring, maar de wereld is in feite opgebouwd uit sectoren met vlakke vloeren en plafonds (geen volledig vrije 3D-volumes zoals later bij echte 3D-engines). Belangrijke technische kenmerken:
- Binaire ruimteverdeling (BSP): de engine gebruikt een BSP-structuur (binary space partitioning) om de wereld te ordenen en snel te beslissen welke delen zichtbaar zijn. De BSP-data (nodes) worden bij het maken van een map meestal vooraf gegenereerd en in het WAD-bestand opgeslagen zodat de engine ze snel kan gebruiken.
- Subsectoren en linedefs: niveaus worden intern beschreven met linedefs, sidedefs, sectoren, verticies en dingen (entiteiten zoals monsters, wapens en voorwerpen).
- Kolomgebaseerde rendering: muren worden per verticale kolom (span) getekend op de CPU, met textuurmapping en eenvoudige perspectivische correctie. Plafonds en vloeren worden vaak via zogenaamde visplanes of scanline-spans gerasterd.
- Sprites en billboarding: vijanden en objecten zijn 2D-sprites die altijd naar de speler gericht worden (“billboards”), en worden geschaald afhankelijk van afstand.
- Belichting en colormaps: verlichting wordt gesimuleerd met palet- en colormap-technieken (niet met echte dynamische lichtbronnen). Dit levert de typische gedempte schaduwen van Doom op.
- Vaste-komma rekenkunde en optimalisaties: om snel op vroege hardware te draaien, gebruikt de engine vaak fixed-point (vaste-komma) berekeningen en stukken in assembler voor prestatiedoelen in plaats van trage floating-point-bewerkingen.
Wat is een WAD en hoe werkt modding?
De engine laadt kaarten, sprites, geluiden en andere data uit WAD-bestanden. Er zijn twee belangrijke typen WADs: IWADs (de originele data van het spel) en PWADs (patch WADs, voor mods of extra content). De vrijgave van broncode en de eenvoudige structuur van WADs maakten Doom bijzonder mod-vriendelijk: mappers en modders konden eigen levels, grafieken en gameplay-aanpassingen maken en distribueren.
Broncode, bronpoorten en uitbreidingen
Nadat de broncode openbaar werd, werd een grote hoeveelheid communitywerk mogelijk. Mensen bouwden zogenaamde “source ports”: aangepaste versies van de engine die nieuwe features toevoegen, bugs oplossen of moderne hardware benutten. Enkele populaire ports en projecten:
- Boom / MBF (oude, invloedrijke uitbreidingen voor compatibiliteit en features)
- PrBoom en PrBoom+ (focus op nauwkeurige compatibiliteit en competitivoomgevingen)
- ZDoom (en opvolgers zoals GZDoom — veel extra features en OpenGL-ondersteuning)
- Chocolate Doom (zeer getrouwe emulatie van het origineel, vaak gebruikt om compatibiliteitsproblemen te testen)
- Doomsday, Eternity Engine, Odamex (elk met eigen doel: modernisering, netwerkspel, of uitbreidbaarheid)
Bronpoorten voegen vaak zaken toe zoals true look-up/down, freelook, 3D-swappable ceilings/floors (in latere ports), moderne audio- en grafische drivers (OpenGL) en verbeterde netwerkondersteuning. Sommige ports lossen ook oorspronkelijke beperkingen op, zoals visplane-overflow, of voegen extra grafische effecten toe (lightmaps, particle effects).
Prestaties en draagbaarheid
De Doom-engine is ontworpen om volledig op de CPU te renderen omdat de meeste grafische kaarten in 1993 geen 3D-versnelling ondersteunden. Dit dwingt tot efficiënte algoritmen en maakte de engine licht genoeg om later op veel verschillende systemen te draaien: van oude pc’s tot handcomputers en consoles. Het feit dat de code hoofdzakelijk in de programmeertaal C is geschreven maakte poorten naar andere platformen relatief eenvoudig.
Beperkingen en typische problemen
- Geen echte 3D-volumes: sectors zijn vlak en overlappende of volledig vrije 3D-structuren ontbreken in het origineel.
- Visplane-limieten: de techniek om vloeren en plafonds te tekenen kan overflow-fouten veroorzaken bij complexe scènes.
- Beperkingen in camerahoeken en look-up/down in de originele engine (veel later toegevoegd in ports).
Invloed en nalatenschap
De Doom-engine heeft grote invloed gehad op de ontwikkeling van first-person shooters en op de modding-community. De combinatie van toegankelijke dataformaten (WAD), vrijgegeven broncode en een actieve gebruikersgemeenschap leidde tot vele fanprojecten, ports en technische experimenten. Veel technieken uit Doom, zoals BSP en span-based rendering, waren destijds innovatief en vormden een brug tussen de eenvoudige raycasting-wereld en latere volledig 3D-engines.
Samenvattend: de Doom-engine (id Tech 1) is belangrijk vanwege zijn historische rol, technische uitvindingen (zoals BSP-gebaseerde zichtbepaling), de impact op modding en de brede beschikbaarheid van de broncode, wat leidde tot een levendige en blijvende community van bronpoorten en uitbreidingen.
Vragen en antwoorden
V: Wat is de Doom engine?
A: De Doom-engine is de computercode achter het videospel Doom. Het wordt ook gebruikt door verschillende andere games, waaronder Doom 2 (maar niet Doom 3, dat een eigen engine heeft). Sterk gewijzigde versies van de Doom-engine worden gebruikt in Heretic, Hexen en Strife.
V: Hoe geeft de Doom-engine 3D-levels weer?
A: De Doom-engine gebruikt een techniek die binary space partitioning heet om 3D-levels weer te geven op een manier die een computer snel kan verwerken.
V: In welke taal is de Doom Engine geschreven?
A: De Doom Engine is voornamelijk geschreven in C.
V: Is er een open source versie van de Doom Engine beschikbaar?
A: Ja, de broncode van de Doom Engine is gratis vrijgegeven onder de GNU General Public License. Veel fans hebben ook hun eigen aangepaste versies gemaakt, source ports genaamd.
V: Wat zijn enkele populaire source ports van de originele doom engine?
A: Populaire source ports zijn Boom, PrBoom, PrBoom+, Zdoom en Chocolate Doom.
V: Welke structuren gebruikt de doom engine intern om levels weer te geven?
A: De doom engine stelt velden intern voor met behulp van structuren die linedefs, sidedefs, sectoren, verticies, en dingen (d.w.z. monsters, items decoraties etc.) worden genoemd.
V: Hoe leest het data uit bestanden?
A: De doom engine leest levels en andere gegevens uit een bestand genaamd een WAD.
Zoek in de encyclopedie