Doom motor - Doom engine
| Fejlesztő (k) | id szoftver , (John Carmack, John Romero, Dave Taylor) |
|---|---|
| Végső kiadás | 1.9 / 1995. február 1
|
| Adattár | github.com/id-Software/DOOM |
| Beírva | C , Összeszerelési nyelv |
| Felület | DOS , Microsoft Windows , MacOS , Linux , Android , Amiga Workbench , NeXTSTEP , Macintosh , Commodore Amiga , NeXT , SNES , Atari Jaguar , Sega 32X , Sony PlayStation , Panasonic 3DO , Nintendo 64 , Sega Saturn , Game Boy Advance , Nintendo Switch |
| Utód | Quake motor |
| Engedély |
GNU GPL-2.0 vagy újabb 3DO : MIT SNES : csak GPL-3.0 |
id Tech 1 , más néven a Doom motort , a játék motorja , hogy hatásköre a id Software játékok Doom és Doom II: Hell on Earth . A Heretic , a Hexen: Beyond Heretic , a Strife: Quest for the Sigil , a Hacx: Twitch 'n Kill , a Freedoom és más licenctulajdonosok által készített játékokban is használják. Ez hozta létre John Carmack , a kiegészítő funkciók írta Mike Abrash , John Romero , Dave Taylor és Paul Radek. Eredetileg NeXT számítógépeken fejlesztették ki , a DOS -ba továbbították a Doom első kiadásához, majd később több játékkonzolra és operációs rendszerre is átvitték .
A forráskód a Linux változata Doom megjelent a nyilvánosság olyan licenc alatt, amely jogot biztosítanak, nem kereskedelmi használatra december 23-án, 1997, majd a linuxos Doom II körülbelül egy hét múlva december 29-én, 1997. A A forráskódot később újra kiadták a GNU General Public License v2.0 alatt vagy később , 1999. október 3-án. Az azóta létrehozott több tucat nem hivatalos Doom forrásport lehetővé teszi a Doom számára, hogy korábban nem támogatott operációs rendszereken fusson, és néha radikálisan bővüljön a motor funkcionalitása új funkciókkal.
Bár a motor 3D teret ad le, ezt a teret egy kétdimenziós alaprajzból vetítik ki . A látómező mindig párhuzamos a padlóval, a falaknak merőlegesnek kell lenniük a padlóra, és nem lehetséges többszintű szerkezetek vagy lejtős területek (különböző szögű padlók és mennyezetek) kialakítása. E korlátok ellenére a motor technikai ugrást jelentett az id korábbi Wolfenstein 3D motorjához képest . A Doom motort később átnevezték "id Tech 1" -re, hogy be lehessen sorolni az id Software hosszú játékmotorjainak listájába .
A játék világa
A Doom motor elválasztja a renderelést a játék többi részétől. A grafikus motor a lehető leggyorsabban működik, de a játék világa másodpercenként 35 képkocka sebességgel fut, a hardvertől függetlenül, így több játékos is játszhat egymással, különböző teljesítményű számítógépek segítségével.
Szint szerkezet
Egy egyszerű beállítás, amely bemutatja, hogyan képviseli a Doom a belső szinteket
Fentről lefelé nézve minden Doom szint valójában kétdimenziós, ami a Doom motor egyik legfontosabb korlátozását mutatja : a szoba-szoba nem lehetséges. Ennek a korlátozásnak azonban ezüst bélése van: könnyen megjeleníthető a "térképmód", amely a falakat és a játékos pozícióját képviseli, hasonlóan az első jobb oldali képhez.
Alapvető objektumok
Az alapegység a csúcs , amely egyetlen 2D pontot jelent. A csúcsok (vagy „csúcsain” azok említett, hogy belsőleg) kapcsolják azután a formában vonalak , az úgynevezett „linedefs”. Mindegyik bélésnek lehet egy vagy két oldala, amelyeket "oldalaknak" neveznek. Az oldalsó széleket ezután sokszögek kialakítására csoportosítják ; ezeket "szektoroknak" nevezik. A szektorok a szint bizonyos területeit képviselik.
Ágazatok
Minden szektor számos tulajdonságot tartalmaz: padlómagasság, mennyezetmagasság, fényszint, padló textúra és mennyezet textúra. Ahhoz, hogy például egy adott területen más legyen a megvilágítás szintje, új szektort kell létrehozni ahhoz a területhez, eltérő fényerővel. Az egyoldalas vonalak tehát tömör falakat, míg a kétoldalas bordák a szektorok közötti hídvonalakat jelentik.
Oldalak
Az oldalfalakat fal textúrák tárolására használják ; ezek teljesen elkülönülnek a padló és a mennyezet textúráitól. Minden oldalas három textúrájú lehet; ezeket középső, felső és alsó textúráknak nevezik. Az egyoldalas béléseknél csak a középső textúrát használják a fal textúrájához. A kétoldalas bélelt területeken a helyzet összetettebb. Az alsó és felső textúrákat a hiányosságok kitöltésére használják, ahol a szomszédos szektorok különböző padló- és mennyezetmagasságúak: például az alsó textúrákat használják lépésekhez. Az oldalak középső textúrájúak is lehetnek, bár a legtöbbnek nincs; ezt használják a textúrák lógására a levegőben. Például, ha átlátszó rúd textúrát látunk ketrecet képezni, ez egy példa a kétoldalas bélés középső textúrájára.
Bináris térfelosztás
A Doom a bináris térpartíció (BSP) néven ismert rendszert használja . Egy eszközzel elő lehet állítani a BSP -adatokat egy szintre előre. Ez a folyamat sokáig eltarthat egy nagy szintnél. Ez az oka annak, hogy nem lehet mozgatni a falakat a Végzetben ; míg az ajtók és a liftek felfelé és lefelé mozognak, egyikük sem mozdul oldalra.
A szint bináris fára van felosztva : a fa minden helye "csomópont", amely a szint egy adott területét képviseli (a gyökércsomópont a teljes szintet képviseli). A fa minden ágán van egy elválasztó vonal, amely a csomópont területét két alcsomópontra osztja. Ezzel párhuzamosan az elválasztó vonal a szegélyvonalakat "szegek" -nek nevezett vonalszakaszokra osztja fel.
A fa levelein domború sokszögek találhatók , ahol a szint további felosztására nincs szükség. Ezeket a domború sokszögeket alszektoroknak (vagy "SZEKTOROK" -nak) nevezik, és egy adott szektorhoz kötődnek. Mindegyik alszektorhoz tartozik a hozzá tartozó segek listája.
A BSP rendszer a rendereléshez rendeli az alszektorokat a megfelelő sorrendbe. Az algoritmus meglehetősen egyszerű:
- Kezdje a gyökércsomóponttól.
- Rajzolja fel rekurzívan ennek a csomópontnak a gyermekcsomópontjait. A Scanline algoritmus segítségével először a kamerához legközelebb eső gyermekcsomópont rajzolódik ki . Ez megállapítható, ha megnézzük, hogy a csomópont választóvonalának melyik oldalán van a kamera.
- Amikor elért egy alszektort, rajzolja meg.
A folyamat akkor fejeződik be, amikor a teljes képpont oszlop kitöltődik (azaz nincs több rés). Ez a sorrend biztosítja, hogy ne legyen idő a nem látható objektumok rajzolására, és ennek eredményeképpen a térképek nagyon nagyok lehetnek sebességbüntetés nélkül.
Renderelés
A falak rajzolása
A Doom összes fala függőlegesen van rajzolva; emiatt nem lehet rendesen fel -le nézni. Lehetőség van egyfajta fel/le nézés végrehajtására az "y-shearing" segítségével , és ezt sok modern Doom forrásport is megteszi, valamint a későbbi, a motort használó játékok, például a Heretic . Lényegében ez úgy működik, hogy a horizontvonalat felfelé és lefelé mozgatja a képernyőn, gyakorlatilag "ablakot" biztosítva egy magasabb látható területen. Az ablak fel -le mozgatásával lehetséges az illúziót kelteni, ha felfelé és lefelé nézünk. Ez azonban torzítja a nézetet, ahogy a játékos felfelé és lefelé néz.
A Doom motor leképezi a falakat, miközben áthalad a BSP fán, és az alszektorokat a kamerától való távolság sorrendjében rajzolja meg, így a legközelebbi szegmensek rajzolódnak ki először. A rajzolás során a csatolt listában tárolódnak. Ezzel a későbbi renderelésre kerülő egyéb segek vágására szolgál, csökkentve a túlhúzást. Ezt később a spritek széleinek vágására is használják.
Amint a motor eléri a szilárd (egyoldalas) falat egy adott x koordinátán, nem kell több vonalat húzni ezen a területen. A vágáshoz a motor tárolja a képernyő azon területeinek "térképét", ahol szilárd falakat értek el. Ez lehetővé teszi, hogy a szint távoli, a játékos számára láthatatlan részeit teljesen kivágják.
A Doom grafikus formátum függőleges oszlopok halmazaként tárolja a fal textúráit ; ez hasznos a renderelő számára, amely lényegében számos függőleges textúraoszlop rajzolásával teszi le a falakat.
Padló és mennyezet
A padlók és mennyezetek ("lakások") rajzoló rendszere kevésbé elegáns, mint a falak. Lakások húzása árvíz kitöltés -szerű algoritmus. Emiatt néha lehetséges, ha egy rossz BSP építőgépet "lyukak" beszerzésére használnak, ahol a padló vagy a mennyezet a képernyő széleire leereszkedik, ez egy vizuális hiba, amelyet általában "nyálkás nyomnak" neveznek. Ez az oka annak is, hogy ha a játékos kilép a pályán kívül a rögzítő segítségével, akkor a padló és a mennyezet elnyúlik a szintről az üres tér felett.
A padlót és a mennyezetet "visplanes" -ként rajzolják. Ezek vízszintes textúrafutásokat jelentenek, a padlóról vagy a mennyezetről egy adott magasságban, fényszintben és textúrában (ha két szomszédos szektornak pontosan ugyanaz a padlója, akkor ezek összevonhatók egy síkba). A síkban minden x pozíciónak van egy bizonyos függőleges textúrája, amelyet meg kell rajzolni.
Mivel minden x pozícióban egy függőleges vonal rajzolható, néha szükség van arra, hogy a síkokat több síkra osszuk fel. Például nézze meg a két koncentrikus négyzetű padlót . A belső négyzet függőlegesen osztja el a környező padlót. Abban a vízszintes tartományban, ahol a belső négyzet rajzolódik, két körvonalra van szükség a környező padlóhoz.
Ez a Doom egyik klasszikus korlátozásához vezet, ami sok térképészt sokáig elkeserített. A Doom statikus korlátot tartalmazott a visplanák számában; túllépés esetén "visplane overflow" lépne fel, aminek következtében a játék a DOS -ból a két üzenet egyikével lép ki: "No more visplanes!" vagy "visplane overflow (128 vagy magasabb)". A legegyszerűbb módja annak, hogy meghívja a visplane -korlátot, egy nagy sakktábla padlómintázat; ez nagyszámú visplanet hoz létre.
A segek renderelésekor a síkok is hozzáadódnak, amelyek a seg széleitől a képernyő függőleges szélei felé nyúlnak. Ezek addig tartanak, amíg el nem érik a meglévő síkokat. Ennek működési módja miatt a rendszer attól függ, hogy a segs rendben van -e a motor által; először közelebbi síkokat kell rajzolni, hogy azok távolabb mások "levághassák". Ha nincs megállítva, akkor a padló vagy a mennyezet "kiáramlik" a képernyő széleire, a korábban leírtak szerint. Végül a visplanes "térképet" képez a képernyő bizonyos területeiről, amelyeken bizonyos textúrákat rajzolhat.
Míg a visplanokat lényegében függőleges "csíkokból" építik fel, a tényleges alacsony szintű renderelés vízszintes "fesztávolságú" textúra formájában történik. Az összes terv elkészítése után ezeket átfedésekké alakítják át, majd megjelenítik a képernyőn. Ez úgy tűnik, kompromisszum: könnyebb függőleges szalagként felépíteni a síkokat, de a padló és a mennyezet textúrájának megjelenése miatt könnyebb vízszintes csíkként rajzolni.
Dolgok (sprite)
A szinteken belül minden szektornak van egy linkelt listája az adott szektorban tárolt dolgokról. Az egyes szektorok rajzolása közben a sprite -k a rajzolandó sprite -listába kerülnek. Ha nem a látómezőn belül, akkor ezeket figyelmen kívül hagyja.
A sprite széleit a korábban rajzolt segek listájának ellenőrzésével vágják le. A Spritek a Doom -ban ugyanabban az oszlop -alapú formátumban kerülnek tárolásra, mint a falak, ami ismét hasznos a megjelenítő számára. Ugyanazokat a funkciókat, amelyeket a falak rajzolásához használnak, sprite rajzolásához is használjuk.
Míg az alágazatok garantáltan rendben vannak, a bennük lévő spritek nem. A Doom tárolja a rajzolni kívánt spritek listáját ("vissprites"), és rendereli a listát a megjelenítés előtt. A távoli sprite -eket a közeliek előtt húzzák. Ez némi túllépést okoz, de általában ez elhanyagolható.
Van egy utolsó kérdés a kétoldalas vonalak középső textúráiról, például átlátszó sávokban. Ezeket összekeverik, és a renderelés végén a sprite -ekhez húzzák, nem pedig a többi falhoz.
Játékok a Doom motor segítségével
A Doom motor nagy hírnevet szerzett a klasszikus Doom első személyű lövöldözés hatására , és számos más játékban is használták. Általában úgy tartják, hogy a "Nagy Négy" Doom motorjátékok a Doom , Heretic , Hexen: Beyond Heretic és a Strife: Quest for the Sigil .
- Játékok, amelyek közvetlenül a Doom motorra épülnek
-
Végzet (1993)
- A végső végzet ( The Ultimate Doom, 1995)
-
Doom II: Pokol a földön (1994)
- Master Levels for Doom II (1995)
- Végső végzet ( Final Doom, 1996)
- Eretnek (1994)
- Hexen: Túl az eretneken (1995)
- Harc: Quest for the Sigil (1996)
- Chex Quest (1996)
- Doom vagy Doom II kódon alapuló játékok
- Doom 64 (1997)
- Hacx: Twitch 'n Kill (1997)
Lásd még
- A játékmotorok listája
- Első személyű lövöldözős motor
- id Tech
- Építés (játékmotor)
- Quake motor
- Quake (sorozat)
- Az első személyű lövöldözős motorok listája
Megjegyzések
- A GL csomópontok specifikációja
- Segédprogramok a Doom és Doom2 szerkesztéséhez
- A Doom motor kódjának felülvizsgálata Fabien Sanglard