Doom motor - Doom engine

id Tech 1
Fejlesztő (k) id szoftver , (John Carmack, John Romero, Dave Taylor)
Végső kiadás
1.9 / 1995. február 1 .; 26 évvel ezelőtt ( 1995-02-01 )
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

Image
Térképnézet a szerkesztőben

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ű:

  1. Kezdje a gyökércsomóponttól.
  2. 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.
  3. 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
Doom vagy Doom II kódon alapuló játékok

Lásd még

Megjegyzések

Hivatkozások

Külső linkek