id Tech 1, poznatiji kao Doom engine-pokretač, je pokretač igara napravljen za id Software-ove igre: Doom i Doom II: Hell on Earth. Takođe se koristi i u Heretic, Hexen: Beyond Heretic, Strife: Quest for the Sigil, Hacx: Twitch 'n Kill, Freedoom, i ostalim igrama koje su licencirane. Napravio ga je Džon Karmak, sa pomoćnim funkcijama koje su napisali Mike Abrash, Džon Romero, Dave Taylor, i Paul Radek. Originalno razvijen na NeXT računarima, bio je povezan-portovan u DOS-u za Doom-ov inicijalni izlazak i kasnije je "portovan" za još nekoliko igračkih konzola i operativnih sistema.

ID Tech 1
Programer(i)id Software, (John Carmack, John Romero, Dave Taylor)
Prvo izdanje12.12.1993.
Stabilno izdanje
1.9 / 1.2.1995.
Repozitorijum Uredi na Vikipodacima
Napisan uC, Assembly language
Operativni sistemDOS, Microsoft Windows, MacOS, Amiga Workbench, NeXTSTEP
PlatformaPC, Macintosh, Commodore Amiga, NeXT, Atari Jaguar, Sega 32X, Sony PlayStation, 3DO, Nintendo 64, Sega Saturn, Game Boy Advance
TipPokretač video igre
LicencaGNU-ova opšta javna licenca

Izvorni kod za Linuh-ovu verziju Doom-a pušten je u javnost pod licencom koja je dala prava na nekomercijalne svrhe 23. decembra 1997. Izvorni kod je kasnije ponovo objavljen pod GNU General Public License 1999 godine.[1][2] Na desetine nezvaničnih izvornih portova Doom-a su stvoreni od tada da bi dozvoli Doom-u da radi na operativnim sistemima koji nisu podržani i ponekad za radikalno proširenje funkcionalnosti pokretača sa novim karakteristikama.

Iako pokretač radi sa 3D prostorom, taj prostor je projektovan sa dvodimenzionalnom spratnim planom. Linija vida uvek je paralelna sa podom, zidovi moraju biti upravni naspram podova, i nije moguće stvoriti strukture u više nivoa ili nagnute površine (podovi i plafoni sa različitim uglovima). Uprkos ovim ograničenjima, motor predstavlja tehnološki skok od id-ovog prethodnika Wolfenstein 3D pokretača. Doom pokretač je kasnije preimenovan u "id Tech 1" u cilju njegove kategorizacije unutar liste id-ovih pokretača igara.[3]

id Tech 1 - struktura nivoa

uredi

Jednostavno podešavanje koje demonstrira kako Doom predstavlja nivoe interno

 
Pogled mape u editoru

Gledano od vrha ka dnu, svi nivoi Doom-a su zapravo dvodimenzionalne, demonstrira jedan od ključnih ograničenja Doom-ovog pokretača: nije moguće imati"sobe iznad soba". Ovo ograničenje, međutim, ima srebrno postavljanje: "mod mape" može lako da se prikaže, koji predstavlja zidove i poziciju igrača, slično kao prva sliku sa desne strane.

Osnovni predmeti-objekti

uredi

Osnovna jedinica je "najviša tačka" - vertex koja predstavlja jednu 2D tačku. Temena (ili "verteksi" koji su interni) se pridružno koriste da formiraju linije, poznat kao "linedefs". Svaki linedef može imati jednu ili dve strane, koje su poznate kao "sidedefs". Sidedefs se zatim grupišu zajedno da formiraju poligone; oni se zovu "sektori". Sektori predstavljaju posebne oblasti nivoa.

Sektori

uredi

Svaki sektor sadrži niz osobina: visinu sprata, visinu plafona, svetlo nivoa, teksturu sprata i teksturu plafona. Da bi imali drugačiji nivo svetlosti u određenoj oblasti, na primer, novi sektor mora biti kreiran za tu oblast sa različitim nivoima osvetljenja. Jednostrani "linedefs" predstavlja zidove, dok dvostrani "linedefs" predstavlja most između linija sektora.

Sidedefs - Bočni dodaci

uredi

Sidedefs ("bočni dodaci") se koriste za skladištenje zidnih tekstura; oni su potpuno odvojeni od gornjih i donjih tekstura. Svaki dodatak može imati tri teksture; oni se zovu središnja, gornja i donja tekstura. Unutar jednostranog linedef-a ("niza dodataka"), samo srednja tekstura se koristi za teksture na zidu. U dvostranim linedef-ovima, situacija je složenija. Donja i gornja tekstura se koriste da popune praznine u kojoj susedni sektori imaju različite podove i visine plafona: dok se na primer niže teksture koriste za korake. Sidedefs-bočni dodaci mogu imati srednju teksturu, iako većina to ne može; ovo se koristi za pravljenje tekstura koje vise u vazduhu. Na primer, kada providna traka teksture formira kavez, ovo je primer srednje teksture na dvostranom linedef-u.

Binarna podela prostora

uredi

id Tech 1 koristi sistem poznatog kao binary space partitioning (Binarna podela prostora) (BSP).[4] Alat se koristi za generisanje BSP podataka za svaki nivo unapred. Ovaj proces može potrajati dosta vremena za veliki nivo. To je zbog toga što nije moguće da se zidovi kreću u Doom-u; dok se vrata i liftovi kreće gore - dole, ali niko od njih se ne pomera levo - desno.

Nivo je podeljen u binarno stablo: svaka lokacija u stablu je "čvor" koji predstavlja posebnu oblast nivoa (sa čvornim korenom predstavlja se ceo nivo). U svakoj grani stabla nalazi se granična linija koja deli područje čvora u dva pod-čvora. Istovremeno, linija razgraničenja deli linedef-ove u linijske segmente pod nazivom "segs".[5]

Na "lišće" stabla se nalaze konveksni poligoni, gde nije potrebna dalja podela nivoa. Ovi konveksni poligoni se nazivaju podsektori (ili "SSECTORS"), i vezani su za određeni sektor. Svaki podsektor ima spisak "segs-a" povezanim sa njima.[4]

BSP sistem sortira podsektore za renderovanje. Algoritam je prilično jednostavan:

  1. Počnite od korena čvora.
  2. Napravite potomka ovog čvora rekurzivno. Čvor potomka najbliži kameri se prvi izvlači pomoću Scanline algoritma. Ovo se može naći gledajući sa koje strane linije razdvajanja je kamera u čvoru uključena.
  3. Kada se stigne do podesektora, napraviti ga.[6]

Proces je potpun kada se napuni cela kolona piksela (tj, nema više praznina levo). Ovo sređivanje osigurava da nema vremena da se koristi crtanje objekata koji nisu vidljivi i kao rezultat mape mogu postati veoma velike, bez smanjenja brzine.

Renderovanje - Prikazivanje

uredi

Pravljenje zidova

uredi

Svi zidovi unutar id Tech 1 su vertikalni; to je zbog toga što nije moguće da se pravilno gledaju gore - dole. Moguće je napraviti oblik da se gledaju po sistemu gore-dole preko "y-shearing(smicanja)", i mnogi moderni Doom izvorni portovi koriste ovo, kao i u kasnijim igrama koje koriste ovaj pokretač, kao što je Heretic. U suštini ovo funkcioniše pomeranjem horizontalne linije gore - dole u ekranu, u stvari pružajući "prozor" na višim vidljivim oblastima. Pomeranjem prozora gore - dole, moguće je dati iluziju da se gleda gore i dole. Međutim, to će narušiti izgled sve više dok igrač gleda mnogo dalje gore - dole.

id Tech 1 pokretač renderuje zidove, jer prolazi kroz BSP stablo, pravljenje podsektora po nalogu udaljenosti od kamere, tako da se najbliži "segs" prvi izvuku. Pošto su "segs" nrapravljeni, oni se čuvaju u povezanim listama. Ovo se koristi za klipovanje ostalih "segs"-a kasnije, što smanjuje prekoračenje. Ovo se takođe koristi kasnije za klipovanje samih ivica "sprites"-a.

Kada pokretač dostigne solidan (jednostrani) zid na određenoj koordinati, nema više linija koje treba da bude uvučene u tu oblast. Za klipovanje pokretača, on skladišti "kartu" za oblasti ekrana u kojoj su se napravili čvrsti zidovi. Ovo omogućava dalekim delovima nivoa koje su nevidljive igraču da budu u potpunosti klipovane.

Doom grafički format čuva zidne teksture kao setove vertikalnih stubova; ovo je korisno za renderovanje, koje u suštini zidove pravi od vertikalnih tekstura stubova.

Pod i plafon

uredi

Sistem za pravljenje podova i plafona ("stanova") je manje elegantniji način nego da se to koristi za zidove. Stanovi su ucrtani sa "flood fill" metodom kao algoritam. Zbog toga, ponekad je moguće da zbog lošeg BSP-graditelja imamo "rupe" u kojima pod ili plafon preliva do ivice ekrana. To je i razlog da ako igrač putuje izvan nivoa koristeći noclip čit, podovi i plafoni će se pojaviti kao da se protežu od nivoa iznad praznog prostora.

Pod i plafon su nacrtani kao "visplane"-ovi. Ovo predstavlja horizontalne nizove tekstura, od poda ili plafona u određenoj visini, nivoa svetla i teksture (ako dva susedna sektori imaju potpuno isti sprat, oni mogu da se spoje u jedan visplane). Svaki h položaj u visplane-u ima posebnu vertikalnu liniju teksture koja treba da se napravi.

Zbog ovog limita crtanja jedna vertikalna linija na svakoj x poziciji, ponekad je potrebno podeliti na više visplane-ova. Na primer, razmotrimo da pregledate sprat sa dva koncentrična kvadrata. Unutrašnji krug će vertikalno podeliti okružujući sprat. U tom horizontalnom opsegu gde se unutrašnji kvadrat pravi, potrebna su dva visplane koja okružuju pod.

Ovo dovodi do jednog Doom-ovog klasičnog ograničenja koje je frustriralo mnoge kreatore mapa duže vreme. Doom sadrži statično ograničenje na broj visplane-ova; ako ga pređete - visplane prelivanja će se javiti, uzrokujući Doom da izađete na DOS sa jednom od dve poruke: "Ne više visplane-ova !" ili "visplane prelivanje (128 ili više)" Najlakši način da se pozove na granicu visplane-ova je veliki obrazac "checkerboard" sprata; ovo stvara veliki broj visplane-ova.

Kako se segs-ovi renderuju, takođe se dodaju i visplane-ovi, koji se protežu od ivice segs-a prema vertikalnim ivicama ekrana. Ovo se produžuje dok ne stignu do postojećeg visplane-a. Zbog načina na koji to radi, sistem zavisi od činjenice da se segs renderuje po nekom redu unutar celokupnog pokretača;neophodno je približavanje visplane-a prvo, tako da se može "odseći" od strane drugih. Ako se to ne zaustavi, pod ili plafon će "iskrvariti" na ivice ekrana, kao što je prethodno opisano. Na kraju, visplane-ovi formiraju "mapu" pojedinih delova ekrana u kojoj se prave određene teksture.

Dok se visplane-ovi u suštini konstruisanja od vertikalnih "traka", stvarni niži nivo prikazivanja se vrši u vidu horizontalnih "raspona" tekstura. Nakon što su svi visplane-ovi izgrađeni, one se pretvaraju u rasponima koji se zatim renderuju na ekranu. Čini se da je ovo kompromis: lakše je izgraditi visplane-ove kao vertikalne trake, ali zbog prirode kako poda i plafona teksture će se pojaviti lakše i tako ćemo ih izvući kao horizontalne trake.

Stvari (sprites)

uredi

Svaki sektor unutar nivoa ima povezanu listu stvari koje se čuvaju u tom sektoru. Kako svaki sektor pravi sprites koji su smešteni u listu sprites-a koji treba da se naprave. Ako nije u vidnom polju oni su ignorisani.

Ivice sprites se zakače za proveru samog spiska segs-a koji su prethodno nacrtani. Sprites u Doom-u čuvaju se u istoj koloni u istom formatu kao zidovi, što je opet korisno za renderovanje. Iste funkcije koje se koriste za crtanje zidova se koriste da privuku sprite-ove takođe.

Dok podsektori garantuju da je sve u redu, sprites-ovi unutar njih samih ne. Doom čuva spisak sprite-ova koji treba da budu uvučeni ("vissprites") i sortira spisak pre renderovanja. Daleki sprite-ovi se prave pre onih bližih. Ovo uzrokuje neka ograničenja, ali obično je to zanemarljivo.

Postoji glavni problem srednje teksture na dvostranim linija, koristi u transparentnim "barovima" na primer. Oni se mešaju i crtaju sa sprites-ovima na kraju procesa renderovanja, umesto sa ostalim zidovima.

Igre koje koriste id Tech 1 pokretač

uredi

id Tech 1 pokretač postiže najveći deo svoje slave kao rezultat korišćenja u klasičnoj pucačini prvog lica Doom, a korišćen je i u nekoliko drugih igara. Obično se smatra da su "velika četvorka" id Tech 1 pokretača igre Doom, Heretic, Hexen: Beyond Heretic, i Strife: Quest for the Sigil.

Igre koji su direktno napravljene pomoću id Tech 1 pokretača
Igre koje su bazirane na Doom ili Doom II kodu

Vidi još

uredi

Reference

uredi
  1. ^ The Doom source code[mrtva veza] - released in 1997, now under the GNU General Public License from Id Software's FTP Site
  2. ^ The Doom source code from 3ddownloads.com Arhivirano na sajtu Wayback Machine (24. februar 2004) - released in 1997, now under the GNU General Public License
  3. ^ "id Tech 1 (Concept)".
  4. ^ a b Abrash, Michael.
  5. ^ Apted, Andrew.
  6. ^ Sanglard, Fabien.

Spoljašnje veze

uredi