Кіріспе
1993 жылғы id Tech 1 ойын қозғалтқышы, сондай-ақ Doom қозғалтқышы деп белгілі, id Software компаниясының Doom және Doom II: Hell on Earth бейнеойындарында қолданылған. Ол Heretic, Hexen: Beyond Heretic, Strife: Quest for the Sigil, Hacx: Twitch 'n Kill, Freedoom және лицензия алғандар жасаған басқа да ойындарда да пайдаланылды. Оны Джон Кармак жасады, ал қосымша функцияларын Майк Абраш, Джон Ромеро, Дейв Тейлор және Пол Радек жазды. Алғашқыда NeXT компьютерлерінде әзірленген, Doom-ның бастапқы нұсқасы үшін MS DOS және үйлесімді операциялық жүйелерге көшірілді, содан кейін бірнеше ойын консольдары мен операциялық жүйелерге аударылды. Doom-ның Linux нұсқасының бастапқы коды 1997 жылдың 23 желтоқсанында коммерциялық емес қолдануға рұқсат беретін лицензия бойынша жарияланды, ал бір аптадан соң, 1997 жылдың 29 желтоқсанында Doom II-нің Linux нұсқасы да шығарылды. Бастапқы код кейін 1999 жылдың 3 қазанында GNU General Public License v2.0 немесе одан кейінгі нұсқасы бойынша қайта жарияланды. Содан бері жасалған ондаған ресми емес Doom бастапқы порттары Doom-ды бұрын қолдау көрсетілмеген операциялық жүйелерде іске қосуға және кейде жаңа мүмкіндіктермен қозғалтқыштың функционалдығын кеңейтуге мүмкіндік береді. Двигатель 3D кеңістікті көрсетсе де, ол екі өлшемді жоспар бойынша проекцияланады. Көру сызығы әрқашан еденге параллель болуы керек, қабырғалар еденге перпендикуляр болуы тиіс, және көп деңгейлі құрылымдарды немесе еңіс аймақтарды (әртүрлі бұрыштармен едендер мен төбелерді) жасау мүмкін емес. Осы шектеулерге қарамастан, қозғалтқыш id-дің бұрынғы Wolfenstein 3D қозғалтқышынан үлкен технологиялық қадам болды. Кейіннен Doom қозғалтқышы id Software компаниясының ойын қозғалтқыштарының тізімінде саралау үшін "id Tech 1" деп аталды.
id Tech 1, also known as the Doom engine, is the game engine used in the id Software video games Doom and Doom II: Hell on Earth. It is also used in Heretic, Hexen: Beyond Heretic, Strife: Quest for the Sigil, Hacx: Twitch 'n Kill, Freedoom, and other games produced by licensees. It was created by John Carmack, with auxiliary functions written by Mike Abrash, John Romero, Dave Taylor, and Paul Radek. Originally developed on NeXT computers, it was ported to MS DOS and compatible operating systems for Doom's initial release and was later ported to several game consoles and operating systems. The source code to the Linux version of Doom was released to the public under a license that granted rights to non commercial use on December 23, 1997, followed by the Linux version of Doom II about a week later on December 29, 1997. The source code was later re released under the GNU General Public License v2.0 or later on October 3, 1999. The dozens of unofficial Doom source ports that have been created since then allow Doom to run on previously unsupported operating systems and sometimes radically expand the engine's functionality with new features. Although the engine renders a 3D space, that space is projected from a two dimensional floor plan. The line of sight is always parallel to the floor, walls must be perpendicular to the floors, and it is not possible to create multi level structures or sloped areas (floors and ceilings with different angles). Despite these limitations, the engine represented a technological leap from id's previous Wolfenstein 3D engine. The Doom engine was later renamed to "id Tech 1" in order to categorize it in a list of id Software's long line of game engines.
Ойын әлемі
Doom қозғалтқышы рендерингті ойынның қалған бөлігінен ажыратады. Графикалық қозғалтқыш барынша жылдам жұмыс істейді, бірақ ойын әлемі аппараттық мүмкіндіктеріне қарамастан секундына 35 кадрмен жұмыс істейді, осылайша әртүрлі қуатты компьютерлердегі бірнеше ойыншы бір-бірімен жарыса алады.
Негізгі нысандар
Негізгі бірлік – 2D нүктені көрсететін төбе. Төбелер (немесе ішкі аталым бойынша "төбелер") сызықтарды құру үшін біріктіріледі, олар "linedef" деп аталады. Әрбір linedef-тің бір немесе екі жағы болуы мүмкін, олар "sidedef" деп аталады. Sidedef-тер топтасып көпбұрыштарды құрайды; олар "секторлар" деп аталады. Секторлар деңгейдің нақты аудандарын көрсетеді.
Салалар
Әрбір секторда бірнеше қасиеттер бар: еденнің биіктігі, төбе биіктігі, жарық деңгейі, еден текстурасы және төбе текстурасы. Белгілі бір аймақта жарық деңгейін өзгерту үшін, мысалы, сол аймақ үшін жарық деңгейі басқаша болатын жаңа сектор құрылуы керек. Сондықтан бір жақты сызықтық элементтер қатты қабырғаларды, ал екі жақты сызықтық элементтер секторлар арасындағы көпір сызықтарын көрсетеді.
Бүйірдегі қоршаулар
Бүйірлік қабырғалар қабырға текстураларын сақтау үшін қолданылады; олар еден және төбе текстураларынан толығымен бөлек. Әрбір sidedef үш текстураға ие болуы мүмкін; олар ортаңғы, жоғарғы және төменгі текстуралар деп аталады. Бір жақты сызықты қабырғаларда тек ортаңғы текстура қабырғаға қолданылады. Екі жақты сызықты қабырғаларда жағдай күрделірек. Төменгі және жоғарғы текстуралар, көршілес секторлардың еден және төбе биіктігі әртүрлі болғандағы кеңістіктерді толтыру үшін пайдаланылады: төменгі текстуралар, мысалы, сатыбасқа қолданылады. Sidedef-тер ортаңғы текстураға да ие болуы мүмкін, бірақ көбінесе ол болмайды; бұл текстураларды ауада ілу үшін қолданылады. Мысалы, мөлдір жолақты текстурадан жасалған қоршауды көргенде, бұл екі жақты сызықты қабырғадағы ортаңғы текстураның мысалы.
Бинарлық кеңістікті бөлу
Doom бинарлық кеңістікті бөлу (BSP) деп аталатын жүйені пайдаланады. Бір деңгейдің BSP деректерін алдын ала жасау үшін бір құрал қолданылады. Бұл процесс үлкен деңгей үшін көп уақыт алады. Doom-да қабырғаларды жылжыту мүмкін емес, себебі есіктер мен лифттер жоғары және төмен жылжиды, бірақ олардың ешқайсысы бүйірге жылмайды. Деңгей екілік ағаш түрінде бөлінеді: ағаштағы әрбір орналасқан жер – деңгейдің белгілі бір аймағын көрсететін "түйін" (түбір түйін бүкіл деңгейді көрсетеді). Ағаштың әрбір тармағында түйіннің аумағын екі кіші түйінге бөлетін бөлу сызығы бар. Сонымен қатар, бөлгіш сызық linedef-терді "segs" деп аталатын сызық сегменттеріне бөледі. Ағаштың жапырақтарында дөңгелек көпбұрыштар орналасқан, онда деңгейді одан әрі бөлудің қажеті жоқ. Бұл дөңгелек көпбұрыштар кіші секторлар (немесе "SSECTOR") деп аталады және олар белгілі бір секторға байланысты. Әрбір кіші секторға сәйкес келетін seg-тердің тізімі болады. Процесс пикселдердің барлық бағаны толтырылғанда аяқталады (яғни, бос кеңістіктер қалмайды). Бұл реттеу көрінбейтін нысандарды салуға уақыт кетпеуін қамтамасыз етеді, нәтижесінде карталар жылдамдық жоғалтпастан өте үлкен болуы мүмкін.
Қабырғаларды салу
Doom-дағы барлық қабырғалар тік сызылған; осы себепті жоғары және төмен қарау дұрыс болмайды. "y shearing" арқылы жоғары/төмен қарауға болады, және көптеген қазіргі заманғы Doom бастапқы порттары осыны істейді, сондай-ақ қозғалтқышты пайдаланатын кейінгі ойындар, мысалы Heretic. Бұл, негізінен, экран ішіндегі көкжиек сызығын жоғары және төмен жылжыту арқылы жұмыс істейді, нәтижесінде көрінетін аумақтың биік бөлігіне "терезе" ашылады. Терезені жоғары және төмен жылжыту арқылы жоғары және төмен қарау иллюзиясын жасауға болады. Дегенмен, ойыншы қаншалықты жоғары және төмен қараса, көрініс соғұрлым бұрмаланады. Doom қозғалтқышы қабырғаларды BSP ағашын аралап өтетін кезде рендерлейді, камерадан қашықтығы бойынша субсекторларды салады, сондықтан ең жақын сегменттер бірінші болып салынады. Сегменттер салынған кезде олар байланысты тізімде сақталады. Бұл кейінірек рендерленген басқа сегменттерді қиып тастау үшін қолданылады, артық салынған бөліктерді азайтады. Бұл сондай-ақ кейінірек спрайттардың жиектерін қиып тастау үшін де қолданылады. Қозғалтқыш белгілі бір x координатасында қатты (бір жақты) қабырғаға жеткеннен кейін, сол аймақта одан әрі сызықтар салудың қажеті жоқ. Қиып тастау үшін қозғалтқыш экранның қатты қабырғаларға жеткен аймақтарының "картасын" сақтайды. Бұл ойыншыға көрінбейтін деңгейдің алыс бөліктерін толығымен қиып тастауға мүмкіндік береді. Doom графикалық форматы қабырға текстураларын тік бағаналар жиынтығы ретінде сақтайды; бұл рендерге пайдалы, ол қабырғаларды көптеген тік текстуралы бағаналарды салу арқылы рендерлейді.
Қабат пен төбе
Қабырғалар үшін қолданылатын жүйеге қарағанда едендер мен төбелерді ("жапсырмалар") салу жүйесі кем әдемі. Жапсырмалар су көлденеңіне ұқсас алгоритммен салынады. Осы себепті, егер нашар BSP құрастырушысы қолданылса, кейде еден немесе төбе экран шеттеріне дейін "ағып", көзге көрінетін қате пайда болады, бұған көбінесе "шылым іздері" деп аталады. Ойыншы noclip арқылы деңгейден тысқа шыққанда еден мен төбелердің бос кеңістікке қарай созылып көрінуінің себебі де осы. Еден және төбе "визплан" ретінде салынады. Бұл белгілі бір биіктіктегі, жарық деңгейі мен текстурасы бар еден немесе төбеден көлденең текстура жолақтарын білдіреді (егер екі іргелес сектордың едені бірдей болса, олар бір визпланға біріктіріледі). Визпландағы әрбір x координатасы вертикальды текстура жолағын көрсетеді. Әр x координатасында бір ғана вертикальды жолақ салу мүмкіндігінің шегінен туындап, кейде визпландарды бірнешеге бөлу қажет болады. Мысалы, екі концентрлі шаршысы бар еденді қарастырайық. Ішкі шаршы сыртқы еденді вертикальды түрде бөледі. Ішкі шаршының көлденең диапазонында сыртқы еден үшін екі визплан қажет. Бұл Doom ойынының классикалық шектеулерінің бірі, ол көптеген деңгей жасаушыларды ұзақ уақыт бойы мазалады. Doom визпландар санына қатысты статикалық шектеуге ие болды; егер осы шекке жетілсе, "визплан асып кетуі" оқиғасы орын алып, ойын DOS жүйесіне "No more visplanes!" немесе "visplane overflow (128 немесе одан жоғары)" деген екі хабарламаның бірімен шығарылатын. Визплан шегіне жетудің ең оңай жолы – үлкен шахматтағы еден үлгісін қолдану, ол көптеген визпландарды жасайды. Сегменттер рендерингтелгенде, экранның вертикальды шеттеріне қарай сегмент шеттерінен басталатын визпландар да қосылады. Олар бұрыннан бар визпландарға жеткенше созылады. Бұл қағидаға сәйкес, жүйе сегменттердің жалпы ойын қозғалтқышымен белгіленген тәртіппен рендерингтелуіне тәуелді; жақын визпландарды бірінші болып салу қажет, осылайша олар алыстағыларымен "қырқылып" кесіледі. Егер бұл тоқтатылмаса, еден немесе төбе бұрын сипатталғандай экран шеттеріне дейін "ағып" кетеді. Соңында визпландар экранның белгілі бір аймақтарында нақты текстураларды салу үшін "картаны" құрайды. Визпландар тік "жолақтардан" құралғанмен, төменгі деңгейдегі рендеринг горизонтальды "кескіндер" түрінде жүзеге асырылады. Барлық визпландар құрастырылғаннан кейін, олар экранға көрсетілетін кескіндерге айналады. Бұл бірнеше нәрсенің арасындағы келісім болып көрінеді: визпландарды тік жолақтар ретінде салу оңайырақ, бірақ еден мен төбе текстураларының сипатынан оларды горизонтальды жолақтар ретінде салу ыңғайлырақ.
Заттар (сприт)
Әр деңгейдегі сектордың ішінде сол секторда сақталған нысандардың тізімі болады. Әр сектор салынар кезде, спрайттар салынуға тиіс спрайттар тізіміне қосылады. Егер олар көру аумағында болмаса, олар ескерілмейді. Спрайттардың жиектері бұрын салынған сегменттер тізімін тексеру арқылы қиылады. Doom-дағы спрайттар қабырғалар сияқты бағанға негізделген форматта сақталады, бұл да рендер үшін пайдалы. Қабырғаларды салу үшін қолданылатын функциялар спрайттарды салу үшін де қолданылады. Кіші секторлар ретімен орналасқандығы кепілденген, бірақ олардың ішіндегі спрайттар ретімен болмайды. Doom салынуға тиіс спрайттардың тізімін ("vissprites") сақтайды және рендеринг алдында тізімді сұрыптайды. Алыстағы спрайттар жақын тұрғандарға дейін салынады. Бұл кейбір қайта салуға (overdraw) әкеледі, бірақ көбінесе бұл елеусіз болады. Соңында, мысалы, мөлдір жолақтарда қолданылатын екі жақты сызықтардағы орталық текстуралар мәселесі бар. Бұл текстуралар бояу процесінің соңында спрайттармен араластырылып салынады, басқа қабырғалармен салынудың орнына.
Doom қозғалтқышын қолданатын ойындар
Doom қозғалтқышы ең көп танымалдылыққа классикалық бірінші тұлға ату ойыны Doom-ға қуат бергендіктен жетті, сондай-ақ ол бірнеше басқа ойындарда да қолданылды. Көбінесе Doom қозғалтқышының "Үлкен Төрттігі" деп Doom, Heretic, Hexen: Beyond Heretic және Strife: Quest for the Sigil ойындары саналады.