Id Tech 1
Програмер(и) | id Software, (John Carmack, John Romero, Dave Taylor) |
---|---|
Прво издање | 12.12.1993. |
Стабилно издање | 1.9
/ 1.2.1995. |
Репозиторијум | |
Написан у | C, Assembly language |
Оперативни систем | DOS, Microsoft Windows, MacOS, Amiga Workbench, NeXTSTEP |
Платформа | PC, Macintosh, Commodore Amiga, NeXT, Atari Jaguar, Sega 32X, Sony PlayStation, 3DO, Nintendo 64, Sega Saturn, Game Boy Advance |
Тип | Покретач видео игре |
Лиценца | ГНУ-ова општа јавна лиценца |
id Tech 1, познатији као Doom engine-покретач, је покретач игара направљен за id Software-ове игре: Doom и Doom II: Hell on Earth. Такође се користи и у Heretic, Hexen: Beyond Heretic, Strife: Quest for the Sigil, Hacx: Twitch 'n Kill, Freedoom, и осталим играма које су лиценциране. Направио га је Џон Кармак, са помоћним функцијама које су написали Mike Abrash, Џон Ромеро, Dave Taylor, и Paul Radek. Оригинално развијен на NeXT рачунарима, био је повезан-портован у DOS-у за Doom-ов иницијални излазак и касније је "портован" за још неколико играчких конзола и оперативних система.
Изворни код за Linuх-ову верзију Doom-а пуштен је у јавност под лиценцом која је дала права на некомерцијалне сврхе 23. децембра 1997. Изворни код је касније поново објављен под GNU General Public License 1999 године.[1][2] На десетине незваничних изворних портова Doom-а су створени од тада да би дозволи Doom-у да ради на оперативним системима који нису подржани и понекад за радикално проширење функционалности покретача са новим карактеристикама.
Иако покретач ради са 3D простором, тај простор је пројектован са дводимензионалном спратним планом. Линија вида увек је паралелна са подом, зидови морају бити управни наспрам подова, и није могуће створити структуре у више нивоа или нагнуте површине (подови и плафони са различитим угловима). Упркос овим ограничењима, мотор представља технолошки скок од id-овог претходника Wolfenstein 3D покретача. Doom покретач је касније преименован у "id Tech 1" у циљу његове категоризације унутар листе id-ових покретача игара.[3]
id Tech 1 - структура нивоа
[уреди | уреди извор]Гледано од врха ка дну, сви нивои Doom-а су заправо дводимензионалне, демонстрира један од кључних ограничења Doom-овог покретача: није могуће имати"собе изнад соба". Ово ограничење, међутим, има сребрно постављање: "мод мапе" може лако да се прикаже, који представља зидове и позицију играча, слично као прва слику са десне стране.
Основни предмети-објекти
[уреди | уреди извор]Основна јединица је "највиша тачка" - vertex која представља једну 2D тачку. Темена (или "вертекси" који су интерни) се придружно користе да формирају линије, познат као "linedefs". Сваки linedef може имати једну или две стране, које су познате као "sidedefs". Sidedefs се затим групишу заједно да формирају полигоне; они се зову "сектори". Сектори представљају посебне области нивоа.
Сектори
[уреди | уреди извор]Сваки сектор садржи низ особина: висину спрата, висину плафона, светло нивоа, текстуру спрата и текстуру плафона. Да би имали другачији ниво светлости у одређеној области, на пример, нови сектор мора бити креиран за ту област са различитим нивоима осветљења. Једнострани "linedefs" представља зидове, док двострани "linedefs" представља мост између линија сектора.
Sidedefs - Бочни додаци
[уреди | уреди извор]Sidedefs ("бочни додаци") се користе за складиштење зидних текстура; они су потпуно одвојени од горњих и доњих текстура. Сваки додатак може имати три текстуре; они се зову средишња, горња и доња текстура. Унутар једностраног linedef-а ("низа додатака"), само средња текстура се користи за текстуре на зиду. У двостраним linedef-овима, ситуација је сложенија. Доња и горња текстура се користе да попуне празнине у којој суседни сектори имају различите подове и висине плафона: док се на пример ниже текстуре користе за кораке. Sidedefs-бочни додаци могу имати средњу текстуру, иако већина то не може; ово се користи за прављење текстура које висе у ваздуху. На пример, када провидна трака текстуре формира кавез, ово је пример средње текстуре на двостраном linedef-у.
Бинарна подела простора
[уреди | уреди извор]id Tech 1 користи систем познатог као binary space partitioning (Бинарна подела простора) (BSP).[4] Алат се користи за генерисање BSP података за сваки ниво унапред. Овај процес може потрајати доста времена за велики ниво. То је због тога што није могуће да се зидови крећу у Doom-у; док се врата и лифтови креће горе - доле, али нико од њих се не помера лево - десно.
Ниво је подељен у бинарно стабло: свака локација у стаблу је "чвор" који представља посебну област нивоа (са чворним кореном представља се цео ниво). У свакој грани стабла налази се гранична линија која дели подручје чвора у два под-чвора. Истовремено, линија разграничења дели linedef-ове у линијске сегменте под називом "segs".[5]
На "лишће" стабла се налазе конвексни полигони, где није потребна даља подела нивоа. Ови конвексни полигони се називају подсектори (или "SSECTORS"), и везани су за одређени сектор. Сваки подсектор има списак "segs-а" повезаним са њима.[4]
BSP систем сортира подсекторе за рендеровање. Алгоритам је прилично једноставан:
- Почните од корена чвора.
- Направите потомка овог чвора рекурзивно. Чвор потомка најближи камери се први извлачи помоћу Scanline алгоритма. Ово се може наћи гледајући са које стране линије раздвајања је камера у чвору укључена.
- Када се стигне до подесектора, направити га.[6]
Процес је потпун када се напуни цела колона пиксела (тј, нема више празнина лево). Ово сређивање осигурава да нема времена да се користи цртање објеката који нису видљиви и као резултат мапе могу постати веома велике, без смањења брзине.
Рендеровање - Приказивање
[уреди | уреди извор]Прављење зидова
[уреди | уреди извор]Сви зидови унутар id Tech 1 су вертикални; то је због тога што није могуће да се правилно гледају горе - доле. Могуће је направити облик да се гледају по систему горе-доле преко "y-shearing(смицања)", и многи модерни Doom изворни портови користе ово, као и у каснијим играма које користе овај покретач, као што је Heretic. У суштини ово функционише померањем хоризонталне линије горе - доле у екрану, у ствари пружајући "прозор" на вишим видљивим областима. Померањем прозора горе - доле, могуће је дати илузију да се гледа горе и доле. Међутим, то ће нарушити изглед све више док играч гледа много даље горе - доле.
id Tech 1 покретач рендерује зидове, јер пролази кроз BSP стабло, прављење подсектора по налогу удаљености од камере, тако да се најближи "segs" први извуку. Пошто су "segs" нраправљени, они се чувају у повезаним листама. Ово се користи за клиповање осталих "segs"-а касније, што смањује прекорачење. Ово се такође користи касније за клиповање самих ивица "sprites"-а.
Када покретач достигне солидан (једнострани) зид на одређеној координати, нема више линија које треба да буде увучене у ту област. За клиповање покретача, он складишти "карту" за области екрана у којој су се направили чврсти зидови. Ово омогућава далеким деловима нивоа које су невидљиве играчу да буду у потпуности клиповане.
Doom графички формат чува зидне текстуре као сетове вертикалних стубова; ово је корисно за рендеровање, које у суштини зидове прави од вертикалних текстура стубова.
Под и плафон
[уреди | уреди извор]Систем за прављење подова и плафона ("станова") је мање елегантнији начин него да се то користи за зидове. Станови су уцртани са "flood fill" методом као алгоритам. Због тога, понекад је могуће да због лошег BSP-градитеља имамо "рупе" у којима под или плафон прелива до ивице екрана. То је и разлог да ако играч путује изван нивоа користећи noclip чит, подови и плафони ће се појавити као да се протежу од нивоа изнад празног простора.
Под и плафон су нацртани као "visplane"-ови. Ово представља хоризонталне низове текстура, од пода или плафона у одређеној висини, нивоа светла и текстуре (ако два суседна сектори имају потпуно исти спрат, они могу да се споје у један visplane). Сваки х положај у visplane-у има посебну вертикалну линију текстуре која треба да се направи.
Због овог лимита цртања једна вертикална линија на свакој x позицији, понекад је потребно поделити на више visplane-ова. На пример, размотримо да прегледате спрат са два концентрична квадрата. Унутрашњи круг ће вертикално поделити окружујући спрат. У том хоризонталном опсегу где се унутрашњи квадрат прави, потребна су два visplane која окружују под.
Ово доводи до једног Doom-овог класичног ограничења које је фрустрирало многе креаторе мапа дуже време. Doom садржи статично ограничење на број visplane-ова; ако га пређете - visplane преливања ће се јавити, узрокујући Doom да изађете на DOS са једном од две поруке: "Не више visplane-ова !" или "visplane преливање (128 или више)" Најлакши начин да се позове на границу visplane-ова је велики образац "checkerboard" спрата; ово ствара велики број visplanе-ова.
Како се segs-ови рендерују, такође се додају и visplane-ови, који се протежу од ивице segs-а према вертикалним ивицама екрана. Ово се продужује док не стигну до постојећег visplane-а. Због начина на који то ради, систем зависи од чињенице да се segs рендерује по неком реду унутар целокупног покретача;неопходно је приближавање visplane-а прво, тако да се може "одсећи" од стране других. Ако се то не заустави, под или плафон ће "искрварити" на ивице екрана, као што је претходно описано. На крају, visplane-ови формирају "мапу" појединих делова екрана у којој се праве одређене текстуре.
Док се visplane-ови у суштини конструисања од вертикалних "трака", стварни нижи ниво приказивања се врши у виду хоризонталних "распона" текстура. Након што су сви visplane-ови изграђени, оне се претварају у распонима који се затим рендерују на екрану. Чини се да је ово компромис: лакше је изградити visplane-ове као вертикалне траке, али због природе како пода и плафона текстуре ће се појавити лакше и тако ћемо их извући као хоризонталне траке.
Ствари (sprites)
[уреди | уреди извор]Сваки сектор унутар нивоа има повезану листу ствари које се чувају у том сектору. Како сваки сектор прави sprites који су смештени у листу sprites-а који треба да се направе. Ако није у видном пољу они су игнорисани.
Ивице sprites се закаче за проверу самог списка segs-а који су претходно нацртани. Sprites у Doom-у чувају се у истој колони у истом формату као зидови, што је опет корисно за рендеровање. Исте функције које се користе за цртање зидова се користе да привуку sprite-ове такође.
Док подсектори гарантују да је све у реду, sprites-ови унутар њих самих не. Doom чува списак sprite-ова који треба да буду увучени ("vissprites") и сортира списак пре рендеровања. Далеки spritе-ови се праве пре оних ближих. Ово узрокује нека ограничења, али обично је то занемарљиво.
Постоји главни проблем средње текстуре на двостраним линија, користи у транспарентним "баровима" на пример. Они се мешају и цртају са sprites-овима на крају процеса рендеровања, уместо са осталим зидовима.
Игре које користе id Tech 1 покретач
[уреди | уреди извор]id Tech 1 покретач постиже највећи део своје славе као резултат коришћења у класичној пуцачини првог лица Doom, а коришћен је и у неколико других игара. Обично се сматра да су "велика четворка" id Tech 1 покретача игре Doom, Heretic, Hexen: Beyond Heretic, и Strife: Quest for the Sigil.
- Игре који су директно направљене помоћу id Tech 1 покретача
- Doom (1993)
- The Ultimate Doom (1995)
- Doom II: Hell on Earth (1994)
- Master Levels for Doom II (1995)
- Final Doom (1996)
- Heretic (1994)
- Hexen: Beyond Heretic (1995)
- Strife: Quest for the Sigil (1996)
- Chex Quest (1996)
- Игре које су базиране на Doom или Doom II коду
- Doom 64 (1997)
- Hacx: Twitch 'n Kill (1997)
- Cruis'n Velocity (2001)
- Dark Arena (2002)
Види још
[уреди | уреди извор]- Листа покретача игара
- Id Tech
- Id Tech 2
- Id Tech 3
- Id Tech 4
- Id Tech 5
- Id Tech 6
- Wolfenstein 3D engine
Референце
[уреди | уреди извор]- ^ The Doom source code[мртва веза] - released in 1997, now under the GNU General Public License from Id Software's FTP Site
- ^ The Doom source code from 3ddownloads.com Архивирано на сајту Wayback Machine (24. фебруар 2004) - released in 1997, now under the GNU General Public License
- ^ "id Tech 1 (Concept)".
- ^ а б Abrash, Michael.
- ^ Apted, Andrew.
- ^ Sanglard, Fabien.