Quake engine

Из Википедије, слободне енциклопедије
Иди на навигацију Иди на претрагу
Quake engine
Првобитни
аутор(и)
id Software, (John Carmack, Michael Abrash, John Cash)
Прва верзија 22.6.1996.
Најновија
верзија
1.09
Писано у C, Assembly language
ОС DOS, AmigaOS, Microsoft Windows, MacOS, Linux
Платформа PC, Amiga, PowerPC Macintosh, Nintendo 64
Тип Покретач видео игре
Лиценца ГНУ-ова општа јавна лиценца
Веб-сајт github.com/id-Software/Quake

Quake engine је покретач игре направљен од стране id Software за њихову видео игру 1996. Quake. Имала је први прави 3D рендеринг у реалном времену и сада је лиценцирана под условима GNU General Public лиценце (GPL).

Након изласка, она се одмах рачва, као и нивои дизајна. Већи део покретача је остао у Quake II и Quake III Arena. Quake покретач, као и Doom покретач, користи бинарно-просторну поделу (BSP) у циљу оптимизације приказивања света игре. Quake покретач такође користи Gouraud сенчење за покретне објекте, и статички lightmap за објекте који се не померају.

Историјски гледано, Quake покретач је третиран као посебан покретач од свог савременика id Tech 2. Базе кодова за Quake и Quake2 (id Tech 2) су одовјене GPL издавањем.[1][2]

Историја[уреди]

Quake покретач је развијен 1995. године за видео игру Quake, објављен је 22. јуна, 1996. Џон Кармак је урадио највећи део програма покретача, уз помоћ  Михајл Абраш за алгоритме и оптимизацију. Quake покретач (id Tech 2) је била заснована на томе.

Дизајн и прекретнице покретача[уреди]

Смањење 3D комплексности да би се добило повећање брзине[уреди]

Упрошћени процеси смањења комеплексности мапа у Quake.

Quake је била прва права - 3D игра која је користила посебан дизајн мапе који се преради и унапред рендерује 3D окружење, како би се смањило време обраде потребно када играте игру на процесору 50–75 MHz процесора тог времена. 3D окружење у којем се игра одвија је мапа, иако је тродимензионална, у природи је равни 2D простор. Уредник-едитор мапа користи велики број једноставних конвексних 3D геометријских објеката познатих као четке које су велике и ротирају се да би изградили окружење. Четке су постављене и оријентисане да створе затворени, празан, волуметријски простор, а када је дизајн комплетан - мапа води кроз рендеровања "претпроцесора". Претпроцесор се користи да лоцира две врсте празног простора на мапи, празан простор ограђен четкама, где ће игра бити одиграна, а други празан простор ван четке коју играч никада неће видети. Претпроцесор затим скида "back-faces" појединачних четки које су изван простора игре, остављајући само неколико полигона који дефинишу спољни периметар затвореног простора игре.

Генерално једном када се мапа преради не може се поново променити на нормалан начин јер су оригиналне четке исечене на комадиће. Уместо тога, оригинални подаци уредника мапе се задржавају и користи се за креирање нове верзије мапе. Али, могуће је да уредите мапу отварањем у посебном едитору и уређивањем сирових података вертекса, или додавањем или уклањањем појединачних троуглова. Иако тешко, ова техника се повремено користи да би се створили прозори у зидовима, да би  видели нормално скривене непријатеље који се приближавају иза врата и зидова, чиме је резултирао механизам анти-чита који се користи у последњих неколико 3D игара које израчунавају "checksum"-у за сваки фајл који се користи у игри, да детектује играче који користе потенцијално хаковане фајлове мапа.

Фајл мапе се обрађује и има много мањи полигон рачуна од оригиналног непрерађеног дела мапе, често за 50 до 80 одсто. На 50–75 MHz на рачунарима тог времена, било је уобичајено да је потребно много времена да се ова "провера" заврши на мапи, често се ради преко ноћи ако је дизајн мапе изузетно сложен.

Ова предобрада не може да функционише ако постоје мале рупе или ако "цури" простор који повезује унутрашњост игре са спољашњим празним простором, и то је уобичајено за сложене мапе - пројекат изградње је обустављен када дизајнер мапе није могао да пронађе цурење у њиховим мапама. Да бисте спречили "цурење", четке треба да се преклапају и благо продиру једне у  другу; покушавајући да се усклади савршено уз ивице необично обликоване четкице са решетки може резултирати у веома малим празнинама које је тешко лоцирати.

Отоврено небо у Quake мапама у ствари није отворено, али је прекривена и затворена са великим четкама, и текстуром са посебним skybox текстурама, које су програмиране да користе сферно мапирање, и на тај начин увек изгледа исто из било ког гледања положаја, илузија далеког неба.

Прорачуната осветљења и сенке[уреди]

Quake је такође укључио употребу lightmaps-а и 3D извора светлости, за разлику од сектора на бази статичког, осветљење се користи у играма из прошлости. id Software иновација се користи за многе 3D игре објављене након, нарочито у пуцачинама првог лица, иако се id Software пребацио на обједињеним сенкама и светлосним ефектима за Doom 3 (међутим, вратили су се на light-мапирање или полу-light-мапирање почев од RAGE-а). Након што је мапи уклоњен вишак полигона, друга предобрада система је коришћена за прорачуне на lightmap-ама као и мапи игре којом се додатно смањује оптерећење на процесору када играте игру. Међутим, обрада пуног светла могла је да траје изузетно дуго, тако да је за почетни процес пројектовања мапа, мање квалитетна обрада светлости могла да се уради, али по цену стварања "lightcast" тестерастих степеница око светала.

Секционисање мапе да би се повећала брзина[уреди]

Да би се додатно смањио 3D рендеринг, механизам је развијен са великим регионима мапе које тренутно нису видљиве за играча, као и да не рендерују те "невиђене" просторе. 3D рендеринг погон без икаквих оптимизација би да скрене сваки део света, а затим покушава да утврди који је полигон најближи, онда сакрије све остале полигоне иза најближих полигона (техника позната као Z-buffering); само зато што полигон није видљив не значи да није део прорачуна сцене. Са овом оптимизацијом која се користи у Quake покретачу, играч није могао да види у оближњи регион, покретач може унапред да не укључује било који од предмета у том простору у прорачунима рендеринга, у великој мери смањује приказивање оптерећења на процесору. Овај ефекат се може уочити у игри као мали тунел са оштрим кривинама - 90 степени водећи из једног великог простора у следећем великом простору. Мали тунел се користи да блокира поглед ка суседном не рендерованом простору, као и посебна врста транспарентних четки (званих "visportal") које се користе за дефинисање ивице где би требало да покретач заустави доношење суседног простора. То је било ретко у оригиналном Quake-у где су играчи имали могућности да виде преко целе дужине мапе, и отворени простори су често веома високи и уски, пре свега користећи удаљеност изнад и испод у отвореном небу или лаве, да се створи ниско-полигонална илузија пространства.

Како се врши секционисање[уреди]

Стабло бинарне поделе простора (BSP) је изграђен од мапа, поједностављује потрагу за полигон до О (број полигона). Сваки "лист" ствара неку површину од 3D простора (замислите сечење пите у произвољне комаде). Листови овог бинарног стабла има полигоне оригиналне мапе и у вези је са њима, који се онда користе за израчунавање видљивости сваке области. За сваку област, VSD алгоритам проналази делове мапе за које постоји линија вида. Ово се зове потенцијални видљиви сет (PVS).[3]

Овај процес користи велике количине меморије, јер треба узети квадратну вредност Он (где је н број полигона) бита (видљива само сакривеним информацијама којима су потребне). John Carmack је схватио да једно подручје види само мали део других области, тако да је могуће компримовати ове информације помоћу кодирања дужине круга (RLE). То је оно што је дозволило Quake да са софистицираним графикама раде тако брзо на хардверу тог времена.

Убрзавање и редослед рендеровања[уреди]

Како би смањили прекорачења (рендеринг новог пиксела који крије раније донесену тачку, што значи да је претходни рад био бескористан и само је донео расипање), животна средина је прва, од напред ка позади. Да бисте сакрили делове зидова скривених другим зидовима, листа глобалних ивица већ поседује полигоне који су рендеровани; Нови полигони су завршница ранијих ивица, тако да су само видљиви делови би стигли до "framebuffer".

Такође, док рендеровања околине,ZBuffer је био испуњен, али никада није прочитао док рендерује животну средину, као што је BSP стабло и листе глобалних ивица који осигуравају да се сваки пиксел рендерује само једном. ZBuffer се касније користи за исправно донесене знакове и друге покретне објекте који су делимично сакривене од околине.

Приказивање пикслел петље је имплементирано у целини. Текстура координира корекције перспективе и интерполације које је урађено помоћу "floating-point" јединица, због ограниченог броја целих регистара; такође омогућава израчунавање скупа операције поделе (део корекција је перспективно) на floating-point јединице паралелно са целим интерполацијама (другим речима, без трошкова).

Текстурне базе и lightmap зидови су рендерованеи у исто време: "Surface Cache" је стварање нових површина, које су унапред светле текстуре која комбинује базу и lightmap текстуру. Површине се не користе, јер само неколико рамова су пуштени, док су потребне нове површине које су динамички креиране. Стварање површина је трошило мање времена него што би секундарно додавање осветљења. Да бисте сачували меморију, мање површине помоћу "mip" мапа су оригиналне текстуре које се прво генеришу за "далеке" зидове.

Ликови су осветљени коришћењем константног амбијенталног светла, чија је вредност дошла из структуре складиштења амбијенталне боје у 3D, у зависности од положаја самог лика. Ликови и предмети су веома далеко од камере и нису рендеровани у 3D: они су уместо тога рендеровани као воксели 3D великих једнобојних квадратних тачака (која су текстуре објекта).

Убрзање 3D хардвера[уреди]

Quake је била једна од првих игара за подршку 3D хардверског убрзања. Иако је првобитно објављен само са софтвером рендеринга, Џон Кармак је створио верзију „извршног „Quake који је искористио предност Rendition's Vérité 1000 графичког чипа (VQuake). OpenGL подршка је додата у виду GLQuake извршног кода за Windows 95 и више-новије. Многи мисле да је овај ударац покренуо независну револуцију 3D графичких картица, GLQuake као прва апликација је могла заиста да покаже способности на 3dfx "Voodoo" чип сету у то време. Остале картице способне да рендерују GLQuake су професионалне (и врло скупе) Intergraph 3D OpenGL картица и касније-новије, PowerVR картица.

За оптимизацију покретача, lightmaps је поделио полигоне који су били близу унутар простора. а у истом листу на BSP стаблу. То значи да веома често полигони користе исту главну текстуру која није могла бити рендерована истовремено са 3D убрзањем, због мулти-текстура других јединица које се ре-конфигуришу са осталим lightmap. Ова архитектура доноси одлуку да смањи перформансе рендеринга да би добило хардверско убрзање.

Кретање играча[уреди]

Quake, подразумевано, користи тастатуру да се играч окрене лево и десно, а кретање напред и назад, помоћу миша, као Doom, играч ради исте покрете. Ово производи "незгодне" покрете, као и потребна подешавања као што је "ауто-ниво" која би померили гледиште равно напред као да се играч померио у "Ауто вертикалном циљу" да би се аутоматско пуцање ствари изнад и испод играча догодило. Вероватно због тога, дизајн нивоа у Quake-у је више погодан за 2.5D окружење Doom-а. Само у неколико места у игри је чудовиште нападало далеко изнад или испод играча. Quake је имао могућност коришћења миша за гледање / нишањење / оријентација ("поглед миша"-"mouselook") и тастатуру да се крене напред-назад, бочно, али није било подразумевано до изласка Quake III Arena.

Играње преко мреже[уреди]

Quake укључује cooperative  и deathmatch мултиплејер модове преко LAN-а или интернета. Додатни мултиплејер модови су додати касније помоћу "модс"-а.

Quake користи клијент-сервер модел, где сервер има контролу над свим догађајима игре. Сви играчи повезани на овом серверу, како би учествовали, са сервером "разговарају" о томе шта се дешава у игри. Сервер може бити или наменски сервер (dedicated server) или Listen сервер. Чак и у другим ситуацијама, Quake и даље користи модел клијент-сервер, за разлику од умрежавања "peer-to-peer" коју користе неке друге игре. Quake на тај начин не може да пати од лоше синхронизације мрежних игара које би могле да дођу од различитих супротстављених клијената - једни са другима, јер је сервер увек "главни ауторитет".

Изведени покретачи[уреди]

Породично стабло Quake покретача
Quake породично стабло, показује игре и покретаче који су базирани на Quake покретачу

21. децембра 1999. године, John Carmack из id Software је објавио изворни код Quake покретача на интернет под условима GPL, омогућавајући програмерима да измене покретач и додати им нове функције. Програмери су убрзо почели издавати нове верзије покретача на интернет. Неки од најпознатијих покретача су:

  • DarkPlaces покретач – Значајно модификовани покретач који се користио у пар самосталних игара као и у пар Quake модова.
  • GoldSource покретач – Први покретач направљен од стране Valve Corporation, и користио се у Half-Life деловима, заслужан је за настанак Source покретача.
  • Tenebrae – Настали покретач који је први увео осветљење и сенчење у реалном времену Quake покретача.
  • Telejano – Модификација која је додала доста нових могућности и доста нових ефеката.
  • Tomaz Quake – Један од првих модификованих верзија Quake покретача.
  • Twilight покретач – Најбржа модификација Quake покретача, она је базирана на перформансама више него на додатним могућностима

Игре које користе Quake engine - покретач[уреди]

Quake engine алатке[уреди]

  • QuArK – Вишенаменски алат за игре које су базиране на Quake покретачу

Види још[уреди]

Референце[уреди]

Спољашње везе[уреди]