Doom variklis (ID Tech 1): apibrėžimas, veikimas ir šaltinio portai
"Doom" variklis, kartais vadinamas "ID Tech 1", yra žaidimo "Doom" kernelyje esantis kodas, skirtas žaidimo pasaulio, vaizdavimo ir logikos valdymui. Tą pačią technologiją naudoja ir keli kiti žaidimai — pavyzdžiui, "Doom 2" (tačiau ne "Doom 3", kuris sukurtas visiškai naujo variklio), o labai modifikuotos "Doom" variklio versijos buvo pritaikytos žaidimams "Heretic", "Hexen" ir "Strife". Variklis tapo itin populiarus dėl paprastumo, našumo ir atviro kodo bendruomenės modifikacijų.
Kaip veikia variklis
Doom variklis naudoja dvejetainės erdvės skaidymo (BSP) metodą, kad 3D lygiai būtų atvaizduojami taip, jog kompiuteris galėtų juos labai greitai apdoroti. Technologiškai tai yra vadinama 2.5D arba pseudo-3D — žaidimo pasaulis yra sudarytas iš sektorių su atskirais grindų ir lubų aukščiais, sienomis ir tekstūromis, bet be tikros trimačio tinklo (mesh) geometrijos. Pagrindinės vaizdavimo savybės:
- Vaizdas generuojamas programiškai (CPU), kol tuo metu dauguma vaizdo plokščių neturėjo 3D spartinimo funkcijų.
- Sienos atvaizduojamos stulpelių (column-based) arba brėžinių (drawseg) principu, o grindys ir lubos — per visplane atvaizdavimą.
- Monstrai ir daiktai yra dvimatės „stebinamos“ (sprite) iliustracijos, kurios visuomet „atsuka“ savo vaizdą į žaidėjo poziciją (billboarding).
- Matomumo patikrinimui naudojamas BSP medžio suskaidymas ir papildomi duomenų rinkiniai (pvz., „reject table“), kad būtų greitai nustatoma, kurios kameros dalys yra matomos.
Lygių struktūra ir duomenys
Lygių informacija Doom variklyje yra saugoma WAD (Where’s All the Data) faile — juose yra žemėlapiai, tekstūros, garso ir kita žaidimo media. Vidinė lygio reprezentacija naudoja struktūras, kurias tekste apibūdina kaip linijiniai, šoniniai, sektoriai, vertikalėmis ir daiktais (t. y. monstrais, daiktais, dekoracijomis ir t. t.). Kiekvienas sektorius turi grindų ir lubų aukštį, apšvietimo lygį ir tekstūras; variklis tada sudeda šiuos elementus į matomą sceną pagal žaidėjo padėtį.
Sisteminiai sprendimai ir našumas
Pirmykštis dizainas orientuotas į efektyvumą: daugumą operacijų atlieka CPU naudojant optimizuotas aritmetines operacijas (dažnai — fiksuotą aritmetiką) ir iš anksto apskaičiuotus LUT (lookup) lenteles. Kadangi visa grafika buvo generuojama programiškai (ne GPU), reikėjo labai efektyvių algoritmų, kad žaidimas veikti įmanomas net ant tuo metu (1993 m.) santykinai lėtų kompiuterių.
Apribojimai ir triukai
Originalus variklis turi keletą techninių apribojimų: nėra tikrų nuolydžių grindyse ir lubose (išskyrus vėlesnius modifikacijų triukus), nėra tiesioginio „room-over-room“ palaikymo (tokios scenos sukuriamos naudojant persidengiančius sektorius arba portalų triukus), o apšvietimas yra sektorių lygmeniu (vienas apšvietimo lygis visam sektoriui). Vis dėlto kūrėjai naudojosi įvairiais sprendimais, kad sukurtų įspūdingas ir kartais net klaidinančias erdvines struktūras.
Šaltinio kodas, portai ir bendruomenė
Pirminis variklio šaltinis vėliau buvo paskelbtas viešai ir šiandien yra prieinamas pagal GNU bendrąją viešąją licenciją, todėl bendruomenė galėjo laisvai kurti savo „šaltinio prievadus“ (source ports). Daugelis Doom gerbėjų sukūrė modifikuotas variklio versijas, kurios prideda naujų funkcijų, taiso klaidas ir leidžia žaisti modernaus standarto aplinkoje.
Populiariausi šaltinio portai:
- Boom — plėtinys, išplatinęs .MAP kūrimo galimybes ir praplėtęs žaidimo elgseną.
- PrBoom / PrBoom+ — orientuojasi į suderinamumą su originaliu žaidimu, kartu siūlydami tinklo režimo, demo ir kitus patobulinimus.
- Zdoom — praplėtė variklį naujomis žaidimo mechanikomis (laipiojimas, laisvas žvilgsnis, skriptai, šviesos efektai, nuolydžiai ir kt.).
- Chocolate Doom — tiksliai atkartoja originalo elgseną, skirtas palikti patirtį kuo artimesnę 1993 m. leidimui.
Pritaikymas ir įtaka
Dėl paprastumo ir atviro kodo Doom variklis buvo portuotas praktiškai į bet ką — nuo mobiliųjų telefonų ir konsolių iki mikrokontrolerių, skaičiuotuvų ir interneto naršyklių (per emscripten / WebAssembly sprendimus). Jis tapo mokomąja platforma programuotojams ir kūrėjams, kurie norėjo suprasti žaidimų variklių vidinę sandarą arba eksperimentuoti su modifikacijomis. Taip pat gausu lygio redaktorių ir įrankių, leidžiančių kurti naujas WAD bylas, modifikacijas ir total conversion projektus.
Trumpai — Doom / ID Tech 1 yra istoriškai svarbus žaidimų variklis: jis sujungė efektyvius inžinerinius sprendimus su stipria bendruomene, todėl nuo jo priklausė ir tebėra daug pažangių modifikacijų, palaikymo projektų ir portų, išlaikančių žaidimą gyvą naujose platformose.
Klausimai ir atsakymai
K: Kas yra "Doom" variklis?
A: "Doom" variklis - tai kompiuterinis kodas, kuriuo paremtas vaizdo žaidimas "Doom". Jis taip pat naudojamas keliuose kituose žaidimuose, įskaitant "Doom 2" (bet ne "Doom 3", kuris turi savo variklį). Labai modifikuotos "Doom" variklio versijos naudojamos "Heretic", "Hexen" ir "Strife" žaidimuose.
Klausimas: Kaip "Doom" variklis atvaizduoja 3D lygius?
A: Doom varikliukas naudoja dvejetainiu erdvės skaidymu vadinamą techniką, kad 3D lygiai būtų atvaizduoti taip, kad kompiuteris juos galėtų greitai apdoroti.
K: Kokia kalba parašytas "Doom" variklis?
A: Doom variklis daugiausia parašytas C kalba.
K: Ar yra atvirojo kodo "Doom" variklio versija?
A: Taip, "Doom" variklio išeities kodas buvo išleistas nemokamai pagal GNU bendrąją viešąją licenciją. Daugelis gerbėjų taip pat sukūrė savo modifikuotas versijas, vadinamas šaltinio prievadais.
K: Kokie yra populiarūs originaliojo "doom" variklio šaltinio prievadai?
A: Populiariausi pirminiai perkėlimai yra "Boom", "PrBoom", "PrBoom+", "Zdoom" ir "Chocolate Doom".
K: Kokias vidines struktūras naudoja "Doom" variklis lygiams atvaizduoti?
A: "Doom" variklyje lygiai vaizduojami naudojant struktūras, vadinamas linedefs, sidedefs, sektoriais, vertikalėmis ir daiktais (t. y. monstrais, daiktų dekoracijomis ir t. t.).
K: Kaip jis skaito duomenis iš failų?
A:Doom variklis skaito lygius ir kitus duomenis iš failo, vadinamo WAD.