Programujeme grafický engine I.

opengl_logo.jpg Člán­kom uve­rej­ne­ným v pre­doš­lej čas­ti toh­to ča­so­pi­su sme ukon­či­li se­riál s náz­vom OpenGL v Li­nuxe, v kto­rom sme sa ve­no­va­li zá­kla­dom po­uží­va­nia OpenGL kniž­ni­ce pri tvor­be gra­fic­kých ap­li­ká­cií. Uká­za­li sme si rôz­ne mož­nos­ti vy­uži­tia OpenGL či už na vy­tvo­re­nie a zob­ra­ze­nie 3D scén, ale­bo na im­ple­men­tá­ciu rôz­nych gra­fic­kých efek­tov po­uží­va­ných v mo­der­ných ap­li­ká­ciách (vrá­ta­ne po­čí­ta­čo­vých hier). Tie­to in­for­má­cie nám is­te po­mô­žu pri vý­ro­be via­ce­rých gra­fic­kých ap­li­ká­cií, med­zi kto­ré pa­tria aj tzv. gra­fic­ké en­gi­ny.

Ten­to člá­nok je ply­nu­lým po­kra­čo­va­ním pô­vod­né­ho se­riá­lu. Cha­rak­ter texto­vej čas­ti no­vé­ho se­riá­lu sa vý­raz­nej­šie nez­me­ní, je­di­nou väč­šou zme­nou je spô­sob príp­ra­vy vzo­ro­vé­ho prík­la­du. Bu­de­me to­tiž prip­ra­vo­vať je­di­ný prík­lad (ap­li­ká­ciu), kto­rý bu­de­me po­stup­ne roz­ši­ro­vať o no­vú fun­kcio­na­li­tu. V úvo­de sa za­me­ria­me na teo­re­tic­ký opis vlas­tnos­tí gra­fic­kých en­gi­nov. Nes­kôr pris­tú­pi­me k tvor­be prog­ra­mo­vé­ho kó­du, pri­čom vy­uži­je­me tak­mer všet­ky ve­do­mos­ti zís­ka­né štú­diom pô­vod­né­ho se­riá­lu.

En­gi­ne
En­gi­ne (z angl. stroj, resp. vy­kres­ľo­va­cí stroj) je an­glic­ké slo­vo, kto­ré v ma­te­riál­nom sve­te pred­sta­vu­je ur­či­tý druh stro­ja vy­ko­ná­va­jú­ce­ho ne­ja­kú čin­nosť. Dos­lov­ným prek­la­dom je te­da slo­ven­ské slo­vo stroj. V po­čí­ta­čo­vej gra­fi­ke sa to­to slo­vo zväč­ša dopĺňa vý­raz­mi ako gra­fic­ký en­gi­ne, 3D en­gi­ne, ga­me en­gi­ne, prí­pad­ne iný en­gi­ne.

V rôz­nej li­te­ra­tú­re či na inter­ne­to­vých strán­kach sa mô­že­me stret­núť s nas­le­du­jú­ci­mi dvo­ma de­fi­ní­cia­mi gra­fic­ké­ho en­gi­nu:
1. Troj­roz­mer­ný vy­kres­ľo­va­cí stroj (angl. 3D en­gi­ne) je sof­tvé­ro­vá ap­li­ká­cia (vý­poč­to­vý pro­ces), kto­rá slú­ži na vy­kres­ľo­va­nie troj­roz­mer­né­ho pros­tre­dia, pri­čom os­tat­né fun­kcie pl­no­hod­not­né­ho en­gi­nu nie sú tou­to ap­li­ká­ciou po­kry­té. 3D en­gi­ne te­da vy­uží­va­me v prí­pa­doch, keď po­ža­du­je­me vy­kres­liť ur­či­tú troj­roz­mer­nú scé­nu, jej ob­jek­ty, prí­pad­ne rôz­ne dru­hy efek­tov, ani­má­cií, ča­so­vo zá­vis­lých zmien po­lo­hy, tva­ru, veľ­kos­ti ob­jek­tov, resp. iné nein­te­rak­tív­ne sú­čas­ti scé­ny,
2. Ga­me en­gi­nom sa zväč­ša ozna­ču­je ap­li­ká­cia, kto­rá po­pri vy­kres­ľo­va­ní 3D pros­tre­dia doň umies­tňu­je po­zo­ro­va­te­ľa (tzv. ava­ta­ra), kto­ré­mu umož­ňu­je vy­ko­ná­vať rôz­ne čin­nos­ti, ako sú napr. inter­ak­cia so scé­nou, jej ob­jek­tmi, pri­dá­va­nie/od­stra­ňo­va­nie ob­jek­tov, inter­ak­cia s iný­mi po­zo­ro­va­teľ­mi (ďal­šie po­sta­vy – angl. cha­rac­ters), vy­uži­tie po­znat­kov z od­bo­ru ume­lej in­te­li­gen­cie, po­uži­tie kon­tro­le­rov, spúš­ťa­čov, rie­še­nie reak­cií na pre­doš­lé ak­cie po­zo­ro­va­te­ľa...

V no­vom se­riá­li sa bu­de­me ve­no­vať obid­vom uve­de­ným dru­hom en­gi­nov. Všeo­bec­ne mož­no po­ve­dať, že 3D en­gi­ne je sú­čas­ťou kaž­dé­ho ga­me en­gi­nu, kto­rý k pô­vod­nej fun­kcio­na­li­te pri­dá­va ur­či­té – hlav­ne inter­ak­tív­ne – pr­vky.

:: Struč­ná his­tó­ria vý­vo­ja en­gi­nov
Pr­vé sku­toč­né en­gi­ny (ga­me en­gi­ny) bo­li vy­vi­nu­té v 90. ro­koch. Iš­lo o tzv. First Per­son Shoo­ters (FPS) en­gi­ny. Med­zi pr­vé ús­peš­né hry po­sta­ve­né na týc­hto en­gi­noch za­ra­ďu­je­me kaž­dé­mu zná­my Doom či Quake. Tie­to en­gi­ny bo­li tvo­re­né her­ný­mi úrov­ňa­mi (angl. ga­me le­vels) tvo­ria­ci­mi uzav­re­tý pries­tor, v kto­rom sa po­hy­bo­val po­zo­ro­va­teľ a zväč­ša „strieľal“ na proti­vní­kov umies­tne­ných v scé­ne. Med­zi ga­me en­gi­ny opi­so­va­né v tom­to člán­ku mô­že­me za­ra­diť aj tzv. Real-Ti­me Stra­te­gy (RTS) en­gi­ny, ku kto­rým pa­tria rôz­ne le­tec­ké a auto­mo­bi­lo­vé si­mu­lá­to­ry, prí­pad­ne iné stra­té­gie od­oh­rá­va­jú­ce sa v reál­nom ča­se (spo­mí­na­te si eš­te na ob­ľú­be­ný Need For Speed či Warcraft?). Ďal­šiu sku­pi­nu ga­me en­gi­nov tvo­ria tzv. Third Per­son View (TPV) en­gi­ny. V týc­hto en­gi­noch sa ka­me­ra nac­hád­za­la „za ple­com“ po­zo­ro­va­te­ľa, tak­že po­pri scé­ne bo­la na ob­ra­zov­ke zob­ra­ze­ná aj po­sta­va po­zo­ro­va­te­ľa (Tomb Rai­der, Splin­ter Cell...).

En­gi­ny, kto­ré nas­le­do­va­li pr­vých prie­kop­ní­kov v tej­to ob­las­ti, pri­ná­ša­li stá­le no­vú fun­kcio­na­li­tu a po­uží­va­te­ľo­vi dá­va­li ove­ľa väč­šie mož­nos­ti inter­ak­cie so scé­nou. Ta­kis­to pri­nies­li množ­stvo no­vých zlep­še­ní do vy­kres­ľo­va­cie­ho pro­ce­su a zob­ra­ze­né scé­ny tak na­be­ra­li ná­dych sku­toč­né­ho sve­ta. Med­zi mo­der­né hry vy­uží­va­jú­ce tie­to po­kro­ko­vej­šie en­gi­ny mô­že­me za­ra­diť napr. Quake III Are­na, Un­real, Ha­lo...

Gra­fic­ký en­gi­ne
Troj­roz­mer­ný vy­kres­ľo­va­cí stroj mož­no cha­rak­te­ri­zo­vať ako sof­tvé­ro­vé jad­ro gra­fic­kej ap­li­ká­cie, zod­po­ved­né za vy­kres­ľo­va­nie vir­tuál­ne­ho troj­roz­mer­né­ho pros­tre­dia, v kto­rom sa nac­hád­za po­zo­ro­va­teľ, pri­čom ten mô­že v da­nom pries­to­re vy­ko­ná­vať ur­či­tú vop­red de­fi­no­va­nú čin­nosť. Roz­sah čin­nos­tí, kto­ré po­zo­ro­va­teľ mô­že vy­ko­ná­vať, tvo­rí jed­nu z kva­li­ta­tív­nych vlas­tnos­tí en­gi­nu. Ďal­šia z vý­znam­ných vlas­tnos­tí kva­lit­né­ho en­gi­nu je je­ho schop­nosť prip­ra­viť vý­sled­ný ob­raz v čo naj­krat­šom ča­se (naj­lep­šie v reál­nom ča­se, angl. Real-Ti­me En­gi­ne). Pre­to sa kaž­dý vý­vo­jár mo­der­né­ho en­gi­nu sna­ží vy­užiť čo naj­viac tri­kov po­čí­ta­čo­vej gra­fi­ky, po­mo­cou kto­rých bu­du­je oku la­ho­dia­ce pros­tre­die so sú­čas­ným za­cho­va­ním čo naj­väč­šie­ho po­čtu sní­mok vy­kres­le­ných za se­kun­du (angl. Fra­mes Per Se­cond – FPS). En­gi­ne, kto­rý by sí­ce vy­kres­ľo­val gra­fic­ky nád­her­né scé­ny, ale ne­bol by schop­ný prep­ra­co­va­né ob­ráz­ky zob­ra­zo­vať dos­ta­toč­ne rých­lo, nespl­ní zá­klad­nú po­žia­dav­ku po­uží­va­te­ľa, a sí­ce mož­nosť reál­ne­ho po­hy­bu.

Ga­me en­gi­ne je po­mer­ne špe­cia­li­zo­va­ný sof­tvér, kto­rý by sme moh­li po­rov­nať s ope­rač­ným sys­té­mom, a to hlav­ne z to­ho dô­vo­du, že en­gi­ne zís­ka­va in­for­má­cie zo vstup­ných za­ria­de­ní, kto­ré dopĺňa ob­ra­zom a zvu­kom, a za správ­ne­ho vy­uži­tia po­ten­ciá­lu CPU, GPU, sú­bo­ro­vé­ho sys­té­mu, sie­ťo­vých pre­po­je­ní atď. prip­ra­vu­je pre po­uží­va­te­ľa ob­ra­zo­vý, zvu­ko­vý, resp. iný vý­stup (obr. 1). Kaž­dý en­gi­ne ob­sa­hu­je ur­či­tý druh gra­fic­ké­ho po­uží­va­teľ­ské­ho roz­hra­nia (angl. Grap­hic User Inter­fa­ce – GUI), kto­ré slú­ži na nas­ta­ve­nie je­ho sta­vov, na nah­rá­va­nie/uk­la­da­nie úda­jo­vých sú­bo­rov. Do­kon­ca nie je vý­ni­moč­né, aby en­gi­ne od­ig­no­ro­val pô­vod­ný OS, na kto­rom je spus­te­ný, a pris­tú­pil pria­mo k har­dvé­ru po­čí­ta­ča. Ta­ký­to prís­tup zväč­ša vý­raz­ne urýc­hľu­je vy­ko­ná­va­nie veľ­ké­ho množ­stva čin­nos­tí, kto­ré mu­sí en­gi­ne vy­ko­ná­vať.

engine OBR1.bmp
Obr. 1 Naj­dô­le­ži­tej­šie čas­ti ga­me en­gi­nu

:: Zá­klad­né fun­kcie mo­der­né­ho en­gi­nu
Väč­ši­na mo­der­ných en­gi­nov je schop­ná vy­ko­ná­vať mi­ni­mál­ne nas­le­du­jú­cu sku­pi­nu fun­kcií:
1. vy­kres­ľo­vať troj­roz­mer­né pros­tre­die (angl. ren­de­ring scé­ny vrá­ta­ne rôz­nych gra­fic­kých efek­tov, 2D ob­jek­tov, ani­má­cií...),
2. in­teg­ro­vať fy­zi­kál­ne pra­vid­lá (angl. Phy­sics),
3. im­ple­men­to­vať de­tek­ciu ko­lí­zií (angl. Colli­sion De­tec­tion) vrá­ta­ne reak­cií na ko­lí­zie,
4. vy­užiť ve­dec­ké po­znat­ky z ob­las­ti ume­lej in­te­li­gen­cie (angl. Ar­ti­fi­cial In­telli­gen­ce – AI),
5. umož­niť zvu­ko­vý vý­stup, prá­cu v sie­ťo­vom pros­tre­dí,
6. vy­ko­ná­vať ani­má­ciu po­stáv...

:: Vlas­tnos­ti en­gi­nu
Kom­plexnosť en­gi­nov je ta­ká ma­sív­na, že tie­to „jad­rá“ gra­fic­kých ap­li­ká­cií ich vý­raz­ne od­li­šu­jú od os­tat­ných ap­li­ká­cií. Z po­hľa­du en­gi­nu je reak­cia po­zo­ro­va­te­ľa umies­tne­né­ho do scé­ny nep­red­ví­da­teľ­ná. Je­di­ným ob­med­ze­ním je roz­sah čin­nos­tí, kto­ré do­ká­že po­zo­ro­va­teľ vy­ko­ná­vať, resp. roz­sah pred­de­fi­no­va­ných reak­cií, kto­ré en­gi­ne vy­ko­ná po pre­doš­lej ak­cii po­zo­ro­va­te­ľa. Ga­me en­gi­ne ok­rem vy­kres­ľo­va­nia scén, kto­ré do­ká­že vy­ko­nať aj kla­sic­ký 3D en­gi­ne, do ap­li­ká­cie dopĺňa ďal­šie inter­ak­tív­ne pr­vky. So zvy­šo­va­ním po­čtu týc­hto pr­vkov sa vý­raz­ne zvy­šu­je aj kom­plexnosť en­gi­nu. Vy­tvo­riť po­uží­va­teľ­sky prí­ve­ti­vú scé­nu s vy­uži­tím pat­rič­ných tri­kov nie je veľ­mi zlo­ži­té. Nap­rog­ra­mo­va­nie sku­toč­ne reál­ne­ho fy­zi­kál­ne­ho mo­de­lu či vlo­že­nie in­te­li­gen­tných po­stáv (proti­vní­kov) do scé­ny je nie­koľ­ko­ná­sob­ne zlo­ži­tej­ší pro­ces, kto­ré­mu sa ve­nu­jú mno­hé špe­cia­li­zo­va­né kni­hy či od­bor­né člán­ky pub­li­ko­va­né v od­bor­ných ča­so­pi­soch.

Jed­nou z ne­vý­hod real-ti­me en­gi­nov je nep­red­ví­da­teľ­nosť to­ho, čo sa ude­je na nas­le­du­jú­cej sním­ke. To zna­me­ná, že pri pro­ce­se vy­ko­ná­va­nia ap­li­ká­cie za­lo­že­nej na RT en­gi­ne nie je jed­no­duc­hé po­uží­vať tzv. viac­vlák­no­vé spra­co­va­nie (angl. mul­tit­hrea­ding). Nie­len to má za nás­le­dok, že vý­vo­já­ri en­gi­nov mu­sia v pr­vom ra­de rá­tať s ob­med­ze­ním vo for­me hra­nič­né­ho vý­ko­nu gra­fic­ké­ho har­dvé­ru. Nie je mož­né, aby do scé­ny umies­tnil vy­so­ko efekt­ný pr­vok, kto­rý však nás­led­ne spo­ma­lí všet­ku os­tat­nú čin­nosť ap­li­ká­cie.

Vy­tvo­re­nie kva­lit­né­ho en­gi­nu nie je jed­no­duc­há úlo­ha, ale má jed­nu vý­ho­du, kto­rú vy­uží­va­jú tak­mer všet­ky mo­der­né vý­vo­jár­ske štú­diá. Tou­to vý­ho­dou je opä­tov­né po­uži­tie to­ho is­té­ho en­gi­nu na vý­ro­bu rôz­nych dru­hov ap­li­ká­cií (hier). To zna­me­ná, že pri vý­ro­be via­ce­rých ap­li­ká­cií ne­mu­sí­me vždy za­čí­nať „od nu­ly“, sta­čí, ak vy­tvo­rí­me kva­lit­ný en­gi­ne, kto­ré­mu nás­led­ne vy­me­ní­me vstup­né a vý­stup­né blo­ky úda­jov a z pô­vod­nej ap­li­ká­cie sa veľ­mi rých­lo sta­ne úpl­ne od­liš­ná ap­li­ká­cia, pri­čom po­uží­va­teľ tak­mer vô­bec ne­ro­zoz­ná, že jej jad­ro tvo­rí rov­na­ký en­gi­ne. Ta­ký­to prís­tup by sme moh­li naz­vať aj tzv. zno­vu­pou­ži­teľ­ný­mi sof­tvé­ro­vý­mi kom­po­nen­tmi ale­bo aj tzv. mid­dleware (z angl. sof­tvér sto­ja­ci up­ros­tred).

Kva­lit­né en­gi­ny sú zväč­ša po­uži­teľ­né na rôz­nych sof­tvé­ro­vých plat­for­mách. V praxi to však nez­na­me­ná, že ten is­tý en­gi­ne hra­vo spus­tí­me napr. v OS Win­dows a OS Li­nux. To by sme od vý­vo­já­rov po­ža­do­va­li pri­ve­ľa. Dob­re navr­hnu­tý en­gi­ne však nie je zlo­ži­té up­ra­viť tak, aby bol schop­ný pra­co­vať vo via­ce­rých OS. Pre­to sa mô­že­me stret­núť s tým is­tým en­gi­nom bež­iacim nie­len na kla­sic­kom Win­dows po­čí­ta­či, ale aj na rôz­nych dru­hoch her­ných kon­zol. Cel­ko­vá fi­lo­zo­fia návr­hu ta­ké­ho­to en­gi­nu zos­tá­va rov­na­ká, prog­ra­má­to­ri zme­nia iba tie čas­ti kó­du (tie prí­ka­zy), kto­ré po­zná da­ná ope­rač­ná plat­for­ma.

Ďal­šia vlas­tnosť kva­lit­ných en­gi­nov je ich mo­du­la­ri­ta. Ho­vo­rí o tom, že kaž­dú jed­not­li­vú fun­kcio­na­li­tu en­gi­nu mož­no nah­ra­diť fun­kcia­mi prip­ra­ve­ný­mi „tre­tím vý­rob­com“. To zna­me­ná, že napr. mo­dul zod­po­ved­ný za de­tek­ciu ko­lí­zií mož­no vy­me­niť za iný mo­dul, kto­rý pre da­nú fir­mu prip­ra­vil iný vý­rob­ca. K mo­du­la­ri­te pat­rí aj roz­ší­ri­teľ­nosť zá­klad­né­ho kó­du en­gi­nu. Dnes je nep­red­sta­vi­teľ­né, aby sa en­gi­ne vy­tvá­ral s uzav­re­tým kó­dom, kto­rý sa ne­dá ďa­lej roz­ví­jať. Je to mož­né iba v prí­pa­de de­di­ko­va­ných ap­li­ká­cií, kto­ré bo­li vy­vi­nu­té na je­di­ný pres­ne de­fi­no­va­ný účel. No en­gi­ne, kto­rý bu­de­me chcieť po­užiť aj v bu­dúc­nos­ti, mu­sí byť navr­hnu­tý tak, aby ho bo­lo mož­né ďa­lej roz­ši­ro­vať, a to s vy­na­lo­že­ním mi­ni­mál­ne­ho úsi­lia.

Na­bu­dú­ce...
Tá­to časť náš­ho no­vé­ho se­riá­lu tvo­ri­la úvod k roz­siah­le­mu blo­ku člán­kov, v kto­rých sa bu­de­me po­stup­ne ve­no­vať prog­ra­mo­va­niu gra­fic­kých en­gi­nov. Cie­ľom týc­hto člán­kov je in­for­mo­vať či­ta­te­ľov o al­go­rit­moch, kto­ré sa po­uží­va­jú pri tvor­be en­gi­nov. Pre­to­že vý­vo­já­ri en­gi­nov pri ich tvor­be vy­uží­va­jú množ­stvo tri­kov urý­chľu­jú­cich po­treb­né vý­poč­ty, jed­na z ďal­ších úloh toh­to se­riá­lu je opí­sať tú­to sku­pi­nu tri­kov, oz­rej­miť či­ta­te­ľom spô­so­by urýc­hľo­va­nia gra­fic­kých vý­stu­pov, ale aj ďal­šie pro­ce­sy zod­po­ved­né za kva­lit­ný vzhľad vý­stup­ných ob­ra­zov.

V nas­le­du­jú­cej čas­ti se­riá­lu náš vý­klad dopl­ní­me o de­tail­nej­ší opis vlas­tnos­tí en­gi­nov. Opí­še­me niek­to­ré naj­dô­le­ži­tej­šie po­jmy po­uží­va­né v sú­vis­los­ti s en­gin­mi a uve­die­me pár slov o tom, kde vša­de mož­no gra­fic­ký en­gi­ne vy­užiť.

Ďal­šie čas­ti >>

Zdroj: Infoware 11/2007



Ohodnoťte článok:
   
 

24 hodín

týždeň

mesiac

Najnovšie články

Prog­ra­mu­je­me gra­fic­ký en­gi­ne XXXVII.
V tejto a takisto v nasledujúcej časti seriálu budeme riešiť synchronizáciu streľby s pohybom postavy. Pôvodne sme sa tejto oblasti venovali oddelene od blokov súvisiacich so zobrazením postavy. čítať »
 
Prog­ra­mu­je­me gra­fic­ký en­gi­ne XXXVI.
V tejto časti seriálu sa budeme venovať tomu, ako možno do grafických (herných) enginov implementovať objekty reprezentujúce rebríky (ladders). čítať »
 
Prog­ra­mu­je­me gra­fic­ký en­gi­ne XXXV.
V tejto časti seriálu podrobnejšie rozoberieme jednotlivé časti programového kódu súvisiace s implementáciou streľby. čítať »
 
Prog­ra­mu­je­me gra­fic­ký en­gi­ne XXXIV.
V tejto časti seriálu vám v stručnosti predstavíme tzv. systémy častíc (particle systems). Kvalitne navrhnutými systémami častíc dokážeme veľmi rýchlo a elegantne zvýšiť dynamiku grafických aplikácií. čítať »
 
Prog­ra­mu­je­me gra­fic­ký en­gi­ne XXXIII.
V predchádzajúcej časti seriálu sme dokončili kapitolu, v ktorej sme sa venovali simulácii fyziky. čítať »
 
Prog­ra­mu­je­me gra­fic­ký en­gi­ne XXXII.
Touto časťou seriálu ukončíme tému implementácie fyzikálnych zákonov v rámci grafických enginov. Všetky vedomosti, ktorými v tomto okamihu disponujeme čítať »
 
Prog­ra­mu­je­me gra­fic­ký en­gi­ne XXXI.
Týmto článkom sa pomaly dostávame k záveru celku, v ktorom sme sa zaoberali simuláciou fyziky. Zostáva nám opísať princíp detekcie kolízií a uviesť spôsob reakcie simulačného systému čítať »
 
Prog­ra­mu­je­me gra­fic­ký en­gi­ne XXX.
V tomto pokračovaní seriálu si doplníme teoretické vedomosti potrebné na implementáciu fyzikálnych zákonov v grafických a herných enginoch. čítať »
 
 
 
  Zdieľaj cez Facebook Zdieľaj cez Google+ Zdieľaj cez Twitter Zdieľaj cez LinkedIn Správy z RSS Správy na smartfóne Správy cez newsletter