Doom-motor (ID Tech 1) — történet, technológia és népszerű forrásportok

Fedezd fel a Doom motor (ID Tech 1) történetét, technológiáját és népszerű forrásportjait (Boom, PrBoom, ZDoom, Chocolate Doom) részletes, technikai áttekintésben.

Szerző: Leandro Alegsa

A Doom motor (gyakran ID Tech 1 néven említve) az 1993-as Doom videojátékhoz készült játékmotor, amely a korszak egyik legnagyobb hatású és leginkább moddolható játékmotorjává vált. Több hivatalos és nem hivatalos folytatás is az alapmotort használta (például a Doom 2), míg más játékokhoz — például a Doom 3 — teljesen új motor készült. A Doom motor jelentősen módosított változatait használják olyan címeknél is, mint a Heretic, a Hexen és a Strife.

Történet röviden

A motort az id Software fejlesztette, John Carmack vezetésével. Az eredeti játék 1993-ban jelent meg, és az akkor elérhető számítástechnikai korlátokhoz igazodó, nagyon hatékony szoftveres megoldásokat tartalmazott. A forráskód később nyilvánossá vált, majd a közösségi fejlesztések és a portolások nyomán a kód a játékmoddolás és archiválás fontos alapjává vált; a forráskód egy ideig elérhető volt különböző feltételek mellett, végül pedig a GNU General Public License alatt is hozzáférhetővé tették, ami lehetővé tette a széles körű újrafelhasználást és továbbfejlesztést.

Technológia és alapelvek

A Doom motor nem „teljesen 3D” motor: inkább a 2.5D elvét használja. A világot sík alapú szektorokkal modellezi, amelyekhez padló- és mennyezetszintek, valamint egy színpalettára épülő világítás tartozik. Emiatt az egyszerűbb motivációk (például „room-over-room” — egymás fölé húzott szintek) nem alakíthatók ki natívan, bár ezt a közösség gyakran kikerülő megoldásokkal pótolta.

A 3D megjelenítés sebességét a motor szoftveresen, kizárólag a CPU-val végzi, mert a megjelenés idején (1993) a legtöbb fogyasztói videokártya nem rendelkezett 3D gyorsítással. Ennek érdekében rendkívül hatékony, asztalszámításon alapuló módszereket alkalmaztak, többek között:

  • BSP (Binary Space Partitioning) fa: egy térbeli felosztás, amely gyorsan kiszűri a nem látható poligonokat és segít a nézethez tartozó geometriát hatékonyan feldolgozni.
  • Szegmentált szoftveres renderer: a képet oszlopokként (column) és síksávokként (span/visplane) rajzolta, ami kevesebb memóriamozgatást igényelt és jól skálázódott a korabeli hardvereken.
  • Táblázatos trigonometria és fixpontos aritmetika: a lebegőpontos műveletek lassúak voltak, ezért sok számítást előre kiszámolt táblákból és fixpontos számolásból végeztek.
  • Palettás (256 színű) megjelenítés és colormap-technikák a hangulatos világítási hatásokhoz.

A szintleírás és az adatstruktúrák

A motor a pályákat (szinteket) belsőleg strukturált elemekkel írja le: linedefs, sidedefs, szektorok, verticies és things (azaz szörnyek, tárgyak, dekorációk stb.). Ezek az elemek a játék által beolvasott WAD fájlokban helyezkednek el, amelyek különböző „lump”-okba rendezik az adatokat (például TEXTURE1, PNAMES, SPRITES, BEHAVIOR-wadok stb.).

Néhány fontos fogalom röviden:

  • Linedef / Sidedef / Vertex — a pálya geometriáját adják meg mint éleket és csomópontokat.
  • Sektor — padló- és mennyezetszinttel, illetve textúrákkal és világítási információval rendelkező sík terület; a Doom „objektumai” (pl. ajtók, lift) ezen a szinten hatnak.
  • Things — minden dinamikus elem, például szörnyek, fegyverek, játékosok, pickupok.
  • BSP, node, seg, subsector — a futás közbeni gyors láthatóság-számításhoz használt részek: a BSP fa levágja a láthatatlan részeket, a seg-ek és subsector-ok pedig a rendererhez szükséges egységeket adják.

Megjelenítés, sprite-ok és világítás

A Doom sprite-alapú rendszert használ: minden mozgó objektum 2D sprite-ok sorozataként van tárolva, amelyeket mindig a kamera felé fordítva (billboard) rajzol meg a motor. A falakat és padlózatot textúrák borítják; a textúrák oszlop-szerűen vannak kezelve, ami illeszkedik a szoftveres column-rendererhez.

Világítás és hangulat szempontjából a motor palettára és colormapokra épít: a távolság és fényszint alapján egy előre definiált transzformációs táblázattal sötétítik a pixeleket. Ez a megoldás egyszerre volt gyors és hangulatos, de korlátozott a színek és a valódi dinamikus fények terén.

Forráskód, forrásportok és közösség

A Doom forráskódjának nyilvánosságra hozatala egész közösségi mozgalmat indított el: sok rajongó és fejlesztő készített saját változatokat, úgynevezett forrásportokat. A forrásportok célja kezdetben a kompatibilitás növelése és hibák javítása volt; később olyan új funkciókat is hozzáadtak, amelyek a modern játékélményt vagy új képességeket biztosítottak.

Példák a népszerű forrásportokra és azok jellemzőire:

  • Boom / PrBoom / PrBoom+ — pontosságot és hálózati funkcionalitást javító fejlesztések, sok versenykörnyezetben használták őket.
  • ZDoom (és leszármazottai, pl. GZDoom) — sok modern funkciót hozott, mint mouselook, magasabb felbontású textúrák, 3D-s modellek, script-rendszer és OpenGL alapú renderelés.
  • Chocolate Doom — célja az eredeti viselkedés pontos emulálása, hogy a modern rendszereken ugyanaz a játékélmény jelenjen meg, mint az eredeti binárison.

A forrásportoknak köszönhetően a Doom motor ma már számos platformon fut: Windows, Linux, macOS, mobil eszközök, konzolok és beágyazott rendszerek egyaránt támogatottak. A közösség továbbfejlesztései lehetővé tették a modern grafikai kiterjesztéseket (OpenGL/Direct3D gyorsítás, valós idejű fények, 3D-s padlók stb.), miközben sok port külön opciót ad az eredeti viselkedés rekonstruálására is.

Hatás és örökség

A Doom motor forradalmi volt abban, hogy könnyen moddolhatóvá tette a játékot és megmutatta, mennyire fontos a nyílt fejlesztés és a közösségi innováció. Az engine egyszerre volt technikai bravúr és kulturális jelenség: megmutatta, hogyan lehet szoftveres módszerekkel élvezetes, gyors 3D-s élményt adni alacsony erőforrások mellett, és alapot adott az iparág további fejlődéséhez.

Összefoglalva: a Doom motor egyszerre figyelemre méltó mérnöki teljesítmény és hosszan tartó közösségi platform. A forráskód megjelenése, a sokféle forrásport és a folyamatos rajongói támogatás révén a motor több évtizeden át releváns maradt, és továbbra is inspirál új fejlesztéseket és portokat.

Források és további olvasnivaló: a fent említett forrásportok dokumentációi, a WAD-formátum leírásai, valamint a motor belső adatstruktúráiról szóló technikai cikkek részletesebben ismertetik a BSP-fát, a visplane-kezelést és a szoftveres renderelés egyéb részleteit.

Kérdések és válaszok

Q: Mi az a Doom motor?


V: A Doom motor a Doom videojáték mögött álló számítógépes kód. Több más játék is használja, köztük a Doom 2 is (de a Doom 3 nem, annak saját motorja van). A Doom motor erősen módosított változatait használja a Heretic, a Hexen és a Strife.

K: Hogyan ábrázolja a Doom motor a 3D-s szinteket?


V: A Doom motor a bináris térfelosztás nevű technikát használja a 3D-s szintek számítógép által gyorsan feldolgozható módon történő ábrázolására.

K: Milyen nyelven íródott a Doom motor?


V: A Doom Engine nagyrészt C nyelven íródott.

K: Elérhető a Doom Engine nyílt forráskódú változata?


V: Igen, a Doom Engine forráskódját a GNU General Public License alatt ingyenesen kiadják. Sok rajongó elkészítette a saját módosított, forrásportnak nevezett verzióját is.

K: Melyek az eredeti doom motor néhány népszerű forráskódú portja?


V: A népszerű forrásportok közé tartozik a Boom, PrBoom, PrBoom+, Zdoom és a Chocolate Doom.

K: Milyen struktúrákat használ a doom motor belsőleg a szintek ábrázolásához?


V: A doom motor a szinteket belsőleg a linedefs, sidedefs, sectors, verticies és things (azaz szörnyek, tárgyak díszítések stb.) nevű struktúrák segítségével ábrázolja.

K: Hogyan olvassa be az adatokat a fájlokból?


V: A doom motor a szinteket és egyéb adatokat egy WAD nevű fájlból olvassa be.


Keres
AlegsaOnline.com - 2020 / 2025 - License CC3