Doom engine - Doom engine

id Tech 1
Vývojáři id Software , (John Carmack, John Romero, Dave Taylor)
Konečné vydání
1,9 / 1. února 1995 ; Před 26 lety ( 1995-02-01 )
Úložiště github.com/id-Software/DOOM
Napsáno C , jazyk montáže
Plošina 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
Nástupce Zemětřesení motoru
Licence GNU GPL-2.0 nebo novější
3DO : MIT
SNES : pouze GPL-3.0

id Tech 1 , také známý jako Doom engine , je herní engine, který pohání id Software hry Doom a Doom II: Hell on Earth . Používá se také ve hrách Heretic , Hexen: Beyond Heretic , Strife: Quest for the Sigil , Hacx: Twitch 'n Kill , Freedoom a dalších hrách produkovaných držiteli licence. Vytvořil ho John Carmack , pomocné funkce napsali Mike Abrash , John Romero , Dave Taylor a Paul Radek. Původně byl vyvinut na počítačích NeXT , byl přenesen do DOSu pro původní vydání Doom a později byl přenesen na několik herních konzolí a operačních systémů .

Zdrojový kód na Linux verze Doom byl propuštěn k veřejnosti na základě povolení, která udělil práva k nekomerčnímu využití 23. prosince 1997, za nímž následuje verze Linux Doom II asi o týden později 29. prosince 1997. zdrojový kód byl později znovu vydán pod licencí GNU General Public License v2.0 nebo novější, 3. října 1999. Desítky neoficiálních zdrojových portů Doom , které byly od té doby vytvořeny, umožňují Doomu běžet na dříve nepodporovaných operačních systémech a někdy se radikálně rozšířit funkce motoru s novými funkcemi.

Přestože engine vykresluje 3D prostor, tento prostor je promítán z dvojrozměrného půdorysu . Přímá viditelnost je vždy rovnoběžná s podlahou, stěny musí být kolmé na podlahy a není možné vytvářet víceúrovňové struktury nebo šikmé plochy (podlahy a stropy s různými úhly). Navzdory těmto omezením představoval motor technologický skok oproti předchozímu enginu Wolfenstein 3D . Doom motor byl později přejmenován na „id Tech 1“, aby ji kategorizovat do seznamu dlouhé řady id Software herních motorů .

Herní svět

Doom engine odděluje vykreslování od zbytku hry. Grafický engine běží tak rychle, jak je to možné, ale herní svět běží rychlostí 35 snímků za sekundu bez ohledu na hardware, takže proti sobě může hrát více hráčů pomocí počítačů různého výkonu.

Úrovňová struktura

Jednoduché nastavení, které ukazuje, jak Doom interně představuje úrovně

Zobrazení mapy v editoru

Při pohledu shora dolů jsou všechny úrovně Doom ve skutečnosti dvourozměrné, což ukazuje na jedno z klíčových omezení enginu Doom : místnost přes místnost není možná. Toto omezení má však stříbrnou podšívku: lze snadno zobrazit „režim mapy“, který představuje stěny a pozici hráče, podobně jako první obrázek vpravo.

Základní objekty

Základní jednotkou je vrchol , který představuje jeden 2D bod. Vrcholy (nebo „vrcholy“, jak se na ně interně odkazuje) se pak spojí a vytvoří linie , známé jako „linedefs“. Každý linedef může mít jednu nebo dvě strany, které jsou známé jako „sidedefs“. Sidedefs jsou pak seskupeny dohromady, aby vytvořily polygony ; nazývají se „sektory“. Sektory představují konkrétní oblasti úrovně.

Sektory

Každý sektor obsahuje řadu vlastností: výšku podlahy, výšku stropu, úroveň světla, texturu podlahy a texturu stropu. Aby například měla v určité oblasti jinou úroveň světla, musí být pro tuto oblast vytvořen nový sektor s jinou úrovní světla. Jednostranné linkované definice tedy představují pevné stěny, zatímco oboustranné linkované definují mostní čáry mezi sektory.

Oboustranné

Sidedefs se používají k ukládání textur stěn ; tyto jsou zcela oddělené od textur podlahy a stropu. Každý sidedef může mít tři textury; říká se jim střední, horní a dolní textura. V jednostranných linkovaných defivech se pro texturu na zdi používá pouze střední textura. U oboustranných linkovaných defek je situace složitější. Dolní a horní textury se používají k vyplnění mezer, kde sousední sektory mají různou výšku podlahy a stropu: nižší textury se používají například pro kroky. Tyto sidedefs mohou mít také střední texturu, ačkoli většina ne; toto se používá k tomu, aby textury zůstaly viset ve vzduchu. Když je například vidět průhledná textura pruhu, která tvoří klec, je to příklad střední textury na oboustranném linedef.

Rozdělení binárního prostoru

Doom využívá systém známý jako binární dělení prostoru (BSP). K vygenerování dat BSP pro úroveň se používá nástroj předem. Tento proces může na velké úrovni nějakou dobu trvat. Je to z toho důvodu, že v Doomu není možné pohybovat zdmi ; zatímco dveře a výtahy se pohybují nahoru a dolů, nikdo z nich se nikdy nepohybuje do strany.

Úroveň je rozdělena do binárního stromu : každé místo ve stromu je „uzel“, který představuje konkrétní oblast úrovně (přičemž kořenový uzel představuje celou úroveň). Na každé větvi stromu je dělící čára, která rozděluje oblast uzlu na dva poduzly. Dělící čára zároveň rozděluje linkované defenty na segmenty čar zvané „seg“.

Na listech stromu jsou konvexní polygony , kde není nutné další dělení úrovně. Tyto konvexní polygony jsou označovány jako subsektory (nebo „SSECTORS“) a jsou vázány na konkrétní sektor. Každý podsektor má seznam přidružených segmentů.

Systém BSP řadí podsektory do správného pořadí pro vykreslování. Algoritmus je poměrně jednoduchý:

  1. Začněte v kořenovém uzlu.
  2. Rekurzivně nakreslete podřízené uzly tohoto uzlu. Podřízený uzel nejblíže k kameře se nejprve nakreslí pomocí algoritmu Scanline . To lze zjistit z pohledu na které straně dělící čáry uzlu je kamera.
  3. Když je dosaženo subsektoru, nakreslete ho.

Proces je dokončen, když je vyplněn celý sloupec pixelů (tj. Nezůstávají žádné mezery). Toto uspořádání zajišťuje, že se při kreslení objektů, které nejsou viditelné, nepoužívá žádný čas, a v důsledku toho se mapy mohou velmi zvětšit bez jakéhokoli trestu za rychlost.

Vykreslování

Kreslení stěn

Všechny stěny v Doom jsou nakresleny svisle; kvůli tomu není možné se pořádně dívat nahoru a dolů. Je možné provádět formu vyhledávání nahoru/dolů pomocí „y-shearing“ a mnoho moderních zdrojových portů Doom to dělá, stejně jako pozdější hry využívající engine, například Heretic . V zásadě to funguje tak, že se horizontální čára pohybuje nahoru a dolů na obrazovce, což ve skutečnosti poskytuje „okno“ na vyšší viditelné oblasti. Pohybem okna nahoru a dolů je možné vyvolat iluzi pohledu nahoru a dolů. To však zkreslí pohled, čím více nahoru a dolů hráč vypadá.

Doom motor poskytuje zdi jako projde BSP stromu, kresba pododvětví pořadí vzdálenosti od kamery tak, že nejbližší segs jsou vypracovány jako první. Jak jsou segny kresleny, jsou uloženy v propojeném seznamu. To se používá k oříznutí dalších segů vykreslených později, čímž se sníží přetahování. To se také později použije k oříznutí okrajů skřítků.

Jakmile motor dosáhne pevné (jednostranné) stěny v konkrétní souřadnici x, v této oblasti již není nutné kreslit žádné čáry. Pro oříznutí motor ukládá „mapu“ oblastí obrazovky, kde bylo dosaženo pevných stěn. To umožňuje zcela oříznout vzdálené části úrovně, které jsou pro hráče neviditelné.

Doom grafický formát ukládá textury zdi sady svislých sloupcích ; to je užitečné pro renderer, který v podstatě vykresluje stěny kreslením mnoha svislých sloupců textur.

Podlaha a strop

Systém pro kreslení podlah a stropů („bytů“) je méně elegantní než systém používaný pro stěny. Byty jsou kresleny algoritmem podobným záplavám . Z tohoto důvodu je někdy možné, když je špatný stavitel BSP použit k získání „děr“, kde podlaha nebo strop krvácí dolů k okrajům obrazovky, což je vizuální chyba běžně označovaná jako „slizová stopa“. To je také důvod, proč pokud hráč cestuje mimo úroveň pomocí cheatu noclip, podlahy a stropy se budou zdát protahovat z úrovně nad prázdným prostorem.

Podlaha a strop jsou nakresleny jako „visplanes“. Představují horizontální běhy textury od podlahy nebo stropu v konkrétní výšce, úrovni světla a textury (pokud mají dva sousední sektory přesně stejnou podlahu, mohou být sloučeny do jedné visplane). Každá pozice x ve visplane má konkrétní svislou čáru textury, která má být nakreslena.

Kvůli tomuto limitu kreslení jedné svislé čáry v každé poloze x je někdy nutné rozdělit visplanes do více visplanes. Zvažte například zobrazení podlahy pomocí dvou soustředných čtverců. Vnitřní čtverec svisle rozdělí okolní podlahu. V tomto horizontálním rozsahu, kde je nakreslen vnitřní čtverec, jsou pro okolní patro potřeba dvě visplanes.

To vede k jednomu z klasických omezení Doomu, který na dlouhou dobu frustroval mnoho mapovačů. Doom obsahoval statický limit počtu visplanes; pokud je překročen, dojde k „přetečení visplane“, což způsobí, že hra skončí s DOSem s jednou ze dvou zpráv „No more visplanes!“ nebo „přetečení visplane (128 nebo vyšší)“. Nejjednodušší způsob, jak vyvolat limit visplane, je velký vzor šachovnicové podlahy; tím se vytvoří velké množství visplanes.

Při vykreslování segů se přidávají také visplanes, sahající od okrajů segs směrem ke svislým okrajům obrazovky. Ty se prodlužují, dokud nedosáhnou stávajících visplanes. Vzhledem k tomu, jak to funguje, je systém závislý na skutečnosti, že segeny jsou vykreslovány v pořadí podle celkového enginu; je třeba nejprve nakreslit bližší visplany, aby je mohli ostatní „odříznout“ dál. Pokud se nezastaví, podlaha nebo strop „vykrvácí“ k okrajům obrazovky, jak bylo popsáno dříve. Vizuály nakonec vytvoří „mapu“ konkrétních oblastí obrazovky, do které lze kreslit konkrétní textury.

Zatímco visplany jsou konstruovány v podstatě ze svislých „pásů“, skutečné vykreslování na nízké úrovni se provádí ve formě horizontálních „rozpětí“ textury. Poté, co byly všechny letouny zkonstruovány, jsou převedeny na rozpětí, která jsou poté vykreslena na obrazovku. Zdá se, že jde o kompromis: je jednodušší stavět visplany jako svislé pásy, ale vzhledem k povaze, jak vypadají textury podlahy a stropu, je snazší je nakreslit jako horizontální pásy.

Věci (skřítci)

Každý sektor na úrovni má propojený seznam věcí uložených v tomto sektoru. Při kreslení každého sektoru jsou skřítci zařazeni do seznamu nakreslených skřítků. Pokud nejsou v zorném poli, jsou ignorovány.

Okraje skřítků jsou oříznuty kontrolou seznamu dříve nakreslených segů. Skřítci v Doomu jsou uloženi ve stejném formátu založeném na sloupcích jako stěny, což je opět užitečné pro renderer. Stejné funkce, jaké se používají pro kreslení zdí, se používají také pro kreslení skřítků.

Zatímco podsektory jsou zaručeně v pořádku, skřítci v nich nejsou. Doom ukládá seznam nakreslených skřítků („vissprites“) a před vykreslováním seznam třídí. Daleko vzdálení skřítci jsou kresleni před blízkými. To způsobí určité přečerpání, ale obvykle je to zanedbatelné.

Existuje poslední problém středních textur na oboustranných čarách, používaných například v průhledných pruzích. Ty se na konci procesu vykreslování promíchají a nakreslí se skřítky, nikoli s ostatními stěnami.

Hry využívající Doom engine

Motor Doom dosáhl většiny své slávy v důsledku napájení klasické střílečky Doom z pohledu první osoby a byl použit v několika dalších hrách. Obvykle se má za to, že „velkou čtyřkou“ Doom engine hry jsou Doom , Heretic , Hexen: Beyond Heretic a Strife: Quest for the Sigil .

Hry postavené přímo na Doom enginu
Hry založené na kódu Doom nebo Doom II

Viz také

Poznámky

Reference

externí odkazy