Quake engine

S Vikipedije, slobodne enciklopedije
Quake engine
Programer(i)id Software, (John Carmack, Michael Abrash, John Cash)
Prvo izdanje22.6.1996.
Stabilno izdanje
1.09
Repozitorijum Uredi na Vikipodacima
Napisan uC, Assembly language
Operativni sistemDOS, AmigaOS, Microsoft Windows, MacOS, Linux
PlatformaPC, Amiga, PowerPC Macintosh, Nintendo 64
TipPokretač video igre
LicencaGNU-ova opšta javna licenca
Veb-sajtwww.idsoftware.com

Quake engine je pokretač igre napravljen od strane id Software za njihovu video igru 1996. Quake. Imala je prvi pravi 3D rendering u realnom vremenu i sada je licencirana pod uslovima GNU General Public licence (GPL).

Nakon izlaska, ona se odmah račva, kao i nivoi dizajna. Veći deo pokretača je ostao u Quake II i Quake III Arena. Quake pokretač, kao i Doom pokretač, koristi binarno-prostornu podelu (BSP) u cilju optimizacije prikazivanja sveta igre. Quake pokretač takođe koristi Gouraud senčenje za pokretne objekte, i statički lightmap za objekte koji se ne pomeraju.

Istorijski gledano, Quake pokretač je tretiran kao poseban pokretač od svog savremenika id Tech 2. Baze kodova za Quake i Quake2 (id Tech 2) su odovjene GPL izdavanjem.[1][2]

Istorija[uredi | uredi izvor]

Quake pokretač je razvijen 1995. godine za video igru Quake, objavljen je 22. juna, 1996. Džon Karmak je uradio najveći deo programa pokretača, uz pomoć  Mihajl Abraš za algoritme i optimizaciju. Quake pokretač (id Tech 2) je bila zasnovana na tome.

Dizajn i prekretnice pokretača[uredi | uredi izvor]

Smanjenje 3D kompleksnosti da bi se dobilo povećanje brzine[uredi | uredi izvor]

Uprošćeni procesi smanjenja komepleksnosti mapa u Quake.

Quake je bila prva prava - 3D igra koja je koristila poseban dizajn mape koji se preradi i unapred renderuje 3D okruženje, kako bi se smanjilo vreme obrade potrebno kada igrate igru na procesoru 50–75 MHz procesora tog vremena. 3D okruženje u kojem se igra odvija je mapa, iako je trodimenzionalna, u prirodi je ravni 2D prostor. Urednik-editor mapa koristi veliki broj jednostavnih konveksnih 3D geometrijskih objekata poznatih kao četke koje su velike i rotiraju se da bi izgradili okruženje. Četke su postavljene i orijentisane da stvore zatvoreni, prazan, volumetrijski prostor, a kada je dizajn kompletan - mapa vodi kroz renderovanja "pretprocesora". Pretprocesor se koristi da locira dve vrste praznog prostora na mapi, prazan prostor ograđen četkama, gde će igra biti odigrana, a drugi prazan prostor van četke koju igrač nikada neće videti. Pretprocesor zatim skida "back-faces" pojedinačnih četki koje su izvan prostora igre, ostavljajući samo nekoliko poligona koji definišu spoljni perimetar zatvorenog prostora igre.

Generalno jednom kada se mapa preradi ne može se ponovo promeniti na normalan način jer su originalne četke isečene na komadiće. Umesto toga, originalni podaci urednika mape se zadržavaju i koristi se za kreiranje nove verzije mape. Ali, moguće je da uredite mapu otvaranjem u posebnom editoru i uređivanjem sirovih podataka verteksa, ili dodavanjem ili uklanjanjem pojedinačnih trouglova. Iako teško, ova tehnika se povremeno koristi da bi se stvorili prozori u zidovima, da bi  videli normalno skrivene neprijatelje koji se približavaju iza vrata i zidova, čime je rezultirao mehanizam anti-čita koji se koristi u poslednjih nekoliko 3D igara koje izračunavaju "checksum"-u za svaki fajl koji se koristi u igri, da detektuje igrače koji koriste potencijalno hakovane fajlove mapa.

Fajl mape se obrađuje i ima mnogo manji poligon računa od originalnog neprerađenog dela mape, često za 50 do 80%. Na 50–75 MHz na računarima tog vremena, bilo je uobičajeno da je potrebno mnogo vremena da se ova "provera" završi na mapi, često se radi preko noći ako je dizajn mape izuzetno složen.

Ova predobrada ne može da funkcioniše ako postoje male rupe ili ako "curi" prostor koji povezuje unutrašnjost igre sa spoljašnjim praznim prostorom, i to je uobičajeno za složene mape - projekat izgradnje je obustavljen kada dizajner mape nije mogao da pronađe curenje u njihovim mapama. Da biste sprečili "curenje", četke treba da se preklapaju i blago prodiru jedne u  drugu; pokušavajući da se uskladi savršeno uz ivice neobično oblikovane četkice sa rešetki može rezultirati u veoma malim prazninama koje je teško locirati.

Otovreno nebo u Quake mapama u stvari nije otvoreno, ali je prekrivena i zatvorena sa velikim četkama, i teksturom sa posebnim skybox teksturama, koje su programirane da koriste sferno mapiranje, i na taj način uvek izgleda isto iz bilo kog gledanja položaja, iluzija dalekog neba.

Proračunata osvetljenja i senke[uredi | uredi izvor]

Quake je takođe uključio upotrebu lightmaps-a i 3D izvora svetlosti, za razliku od sektora na bazi statičkog, osvetljenje se koristi u igrama iz prošlosti. id Software inovacija se koristi za mnoge 3D igre objavljene nakon, naročito u pucačinama prvog lica, iako se id Software prebacio na objedinjenim senkama i svetlosnim efektima za Doom 3 (međutim, vratili su se na light-mapiranje ili polu-light-mapiranje počev od RAGE-a). Nakon što je mapi uklonjen višak poligona, druga predobrada sistema je korišćena za proračune na lightmap-ama kao i mapi igre kojom se dodatno smanjuje opterećenje na procesoru kada igrate igru. Međutim, obrada punog svetla mogla je da traje izuzetno dugo, tako da je za početni proces projektovanja mapa, manje kvalitetna obrada svetlosti mogla da se uradi, ali po cenu stvaranja "lightcast" testerastih stepenica oko svetala.

Sekcionisanje mape da bi se povećala brzina[uredi | uredi izvor]

Da bi se dodatno smanjio 3D rendering, mehanizam je razvijen sa velikim regionima mape koje trenutno nisu vidljive za igrača, kao i da ne renderuju te "neviđene" prostore. 3D rendering pogon bez ikakvih optimizacija bi da skrene svaki deo sveta, a zatim pokušava da utvrdi koji je poligon najbliži, onda sakrije sve ostale poligone iza najbližih poligona (tehnika poznata kao Z-buffering); samo zato što poligon nije vidljiv ne znači da nije deo proračuna scene. Sa ovom optimizacijom koja se koristi u Quake pokretaču, igrač nije mogao da vidi u obližnji region, pokretač može unapred da ne uključuje bilo koji od predmeta u tom prostoru u proračunima renderinga, u velikoj meri smanjuje prikazivanje opterećenja na procesoru. Ovaj efekat se može uočiti u igri kao mali tunel sa oštrim krivinama - 90 stepeni vodeći iz jednog velikog prostora u sledećem velikom prostoru. Mali tunel se koristi da blokira pogled ka susednom ne renderovanom prostoru, kao i posebna vrsta transparentnih četki (zvanih "visportal") koje se koriste za definisanje ivice gde bi trebalo da pokretač zaustavi donošenje susednog prostora. To je bilo retko u originalnom Quake-u gde su igrači imali mogućnosti da vide preko cele dužine mape, i otvoreni prostori su često veoma visoki i uski, pre svega koristeći udaljenost iznad i ispod u otvorenom nebu ili lave, da se stvori nisko-poligonalna iluzija prostranstva.

Kako se vrši sekcionisanje[uredi | uredi izvor]

Stablo binarne podele prostora (BSP) je izgrađen od mapa, pojednostavljuje potragu za poligon do O (broj poligona). Svaki "list" stvara neku površinu od 3D prostora (zamislite sečenje pite u proizvoljne komade). Listovi ovog binarnog stabla ima poligone originalne mape i u vezi je sa njima, koji se onda koriste za izračunavanje vidljivosti svake oblasti. Za svaku oblast, VSD algoritam pronalazi delove mape za koje postoji linija vida. Ovo se zove potencijalni vidljivi set (PVS).[3]

Ovaj proces koristi velike količine memorije, jer treba uzeti kvadratnu vrednost On (gde je n broj poligona) bita (vidljiva samo sakrivenim informacijama kojima su potrebne). John Carmack je shvatio da jedno područje vidi samo mali deo drugih oblasti, tako da je moguće komprimovati ove informacije pomoću kodiranja dužine kruga (RLE). To je ono što je dozvolilo Quake da sa sofisticiranim grafikama rade tako brzo na hardveru tog vremena.

Ubrzavanje i redosled renderovanja[uredi | uredi izvor]

Kako bi smanjili prekoračenja (rendering novog piksela koji krije ranije donesenu tačku, što znači da je prethodni rad bio beskoristan i samo je doneo rasipanje), životna sredina je prva, od napred ka pozadi. Da biste sakrili delove zidova skrivenih drugim zidovima, lista globalnih ivica već poseduje poligone koji su renderovani; Novi poligoni su završnica ranijih ivica, tako da su samo vidljivi delovi bi stigli do "framebuffer".

Takođe, dok renderovanja okoline,ZBuffer je bio ispunjen, ali nikada nije pročitao dok renderuje životnu sredinu, kao što je BSP stablo i liste globalnih ivica koji osiguravaju da se svaki piksel renderuje samo jednom. ZBuffer se kasnije koristi za ispravno donesene znakove i druge pokretne objekte koji su delimično sakrivene od okoline.

Prikazivanje pikslel petlje je implementirano u celini. Tekstura koordinira korekcije perspektive i interpolacije koje je urađeno pomoću jedinice za rad sa pokretnim zarezom, zbog ograničenog broja registara za cele brojeve; takođe omogućava izračunavanje skupe operacije deljenja (dela perspektivne korekcije) na jedinicu za rad sa pokretnim zarezom paralelno sa interpolacijama celih brojeva (drugim rečima, bez troškova).

Teksturne baze i lightmap zidovi su renderovanei u isto vreme: "Surface Cache" je stvaranje novih površina, koje su unapred svetle teksture koja kombinuje bazu i lightmap teksturu. Površine se ne koriste, jer samo nekoliko ramova su pušteni, dok su potrebne nove površine koje su dinamički kreirane. Stvaranje površina je trošilo manje vremena nego što bi sekundarno dodavanje osvetljenja. Da biste sačuvali memoriju, manje površine pomoću "mip" mapa su originalne teksture koje se prvo generišu za "daleke" zidove.

Likovi su osvetljeni korišćenjem konstantnog ambijentalnog svetla, čija je vrednost došla iz strukture skladištenja ambijentalne boje u 3D, u zavisnosti od položaja samog lika. Likovi i predmeti su veoma daleko od kamere i nisu renderovani u 3D: oni su umesto toga renderovani kao vokseli 3D velikih jednobojnih kvadratnih tačaka (koja su teksture objekta).

Ubrzanje 3D hardvera[uredi | uredi izvor]

Quake je bila jedna od prvih igara za podršku 3D hardverskog ubrzanja. Iako je prvobitno objavljen samo sa softverom renderinga, Džon Karmak je stvorio verziju „izvršnog „Quake koji je iskoristio prednost Rendition's Vérité 1000 grafičkog čipa (VQuake). OpenGL podrška je dodata u vidu GLQuake izvršnog koda za Windows 95 i više-novije. Mnogi misle da je ovaj udarac pokrenuo nezavisnu revoluciju 3D grafičkih kartica, GLQuake kao prva aplikacija je mogla zaista da pokaže sposobnosti na 3dfx "Voodoo" čip setu u to vreme. Ostale kartice sposobne da renderuju GLQuake su profesionalne (i vrlo skupe) Intergraph 3D OpenGL kartica i kasnije-novije, PowerVR kartica.

Za optimizaciju pokretača, lightmaps je podelio poligone koji su bili blizu unutar prostora. a u istom listu na BSP stablu. To znači da veoma često poligoni koriste istu glavnu teksturu koja nije mogla biti renderovana istovremeno sa 3D ubrzanjem, zbog multi-tekstura drugih jedinica koje se re-konfigurišu sa ostalim lightmap. Ova arhitektura donosi odluku da smanji performanse renderinga da bi dobilo hardversko ubrzanje.

Kretanje igrača[uredi | uredi izvor]

Quake, podrazumevano, koristi tastaturu da se igrač okrene levo i desno, a kretanje napred i nazad, pomoću miša, kao Doom, igrač radi iste pokrete. Ovo proizvodi "nezgodne" pokrete, kao i potrebna podešavanja kao što je "auto-nivo" koja bi pomerili gledište ravno napred kao da se igrač pomerio u "Auto vertikalnom cilju" da bi se automatsko pucanje stvari iznad i ispod igrača dogodilo. Verovatno zbog toga, dizajn nivoa u Quake-u je više pogodan za 2.5D okruženje Doom-a. Samo u nekoliko mesta u igri je čudovište napadalo daleko iznad ili ispod igrača. Quake je imao mogućnost korišćenja miša za gledanje / nišanjenje / orijentacija ("pogled miša"-"mouselook") i tastaturu da se krene napred-nazad, bočno, ali nije bilo podrazumevano do izlaska Quake III Arena.

Igranje preko mreže[uredi | uredi izvor]

Quake uključuje cooperative  i deathmatch multiplejer modove preko LAN-a ili interneta. Dodatni multiplejer modovi su dodati kasnije pomoću "mods"-a.

Quake koristi klijent-server model, gde server ima kontrolu nad svim događajima igre. Svi igrači povezani na ovom serveru, kako bi učestvovali, sa serverom "razgovaraju" o tome šta se dešava u igri. Server može biti ili namenski server (dedicated server) ili Listen server. Čak i u drugim situacijama, Quake i dalje koristi model klijent-server, za razliku od umrežavanja "peer-to-peer" koju koriste neke druge igre. Quake na taj način ne može da pati od loše sinhronizacije mrežnih igara koje bi mogle da dođu od različitih suprotstavljenih klijenata - jedni sa drugima, jer je server uvek "glavni autoritet".

Izvedeni pokretači[uredi | uredi izvor]

Porodično stablo Quake pokretača
Quake porodično stablo, pokazuje igre i pokretače koji su bazirani na Quake pokretaču

Dana 21. decembra 1999. godine, John Carmack iz id Software je objavio izvorni kod Quake pokretača na internet pod uslovima GPL, omogućavajući programerima da izmene pokretač i dodati im nove funkcije. Programeri su ubrzo počeli izdavati nove verzije pokretača na internet. Neki od najpoznatijih pokretača su:

  • DarkPlaces pokretač – Značajno modifikovani pokretač koji se koristio u par samostalnih igara kao i u par Quake modova.
  • GoldSource pokretač – Prvi pokretač napravljen od strane Valve Corporation, i koristio se u Half-Life delovima, zaslužan je za nastanak Source pokretača.
  • Tenebrae – Nastali pokretač koji je prvi uveo osvetljenje i senčenje u realnom vremenu Quake pokretača.
  • Telejano – Modifikacija koja je dodala dosta novih mogućnosti i dosta novih efekata.
  • Tomaz Quake – Jedan od prvih modifikovanih verzija Quake pokretača.
  • Twilight pokretač – Najbrža modifikacija Quake pokretača, ona je bazirana na performansama više nego na dodatnim mogućnostima

Igre koje koriste Quake engine - pokretač[uredi | uredi izvor]

Quake engine alatke[uredi | uredi izvor]

  • QuArK – Višenamenski alat za igre koje su bazirane na Quake pokretaču

Vidi još[uredi | uredi izvor]

Reference[uredi | uredi izvor]

Spoljašnje veze[uredi | uredi izvor]