Programujeme grafický engine II.

opengl_logo.jpg Tým­to člán­kom bu­de­me po­kra­čo­vať v opi­se vlas­tnos­tí gra­fic­kých en­gi­nov. Ply­nu­le nad­via­že­me na pre­doš­lú časť se­riá­lu a po­kú­si­me sa vy­svet­liť všet­ky zá­klad­né vlas­tnos­ti, kto­rý­mi by mal dis­po­no­vať kaž­dý mo­der­ný en­gi­ne. Na kon­ci toh­to člán­ku uve­die­me nie­koľ­ko po­jmov, kto­ré ma­jú sú­vis s po­uží­va­ním gra­fic­kých en­gi­nov, a bu­de­me sa za­obe­rať aj tým, kde vša­de mož­no gra­fic­ké en­gi­ny vy­užiť.

Zá­klad­né fun­kcie (sú­čas­ti) en­gi­nu de­tail­ne
Vráť­me sa k zoz­na­mu zá­klad­ných fun­kcií mo­der­ných en­gi­nov, uve­de­né­mu v pre­doš­lej čas­ti se­riá­lu, a po­kús­me sa opí­sať jed­not­li­vé fun­kcie de­tail­nej­šie.

Vy­kres­ľo­vač scé­ny (angl. Ren­de­rer): Jed­ným z naj­dô­le­ži­tej­ších vý­stu­pov kaž­dé­ho en­gi­nu je troj­roz­mer­ná scé­na, zob­ra­zo­va­ná na ob­ra­zov­ke po­čí­ta­ča. Tá je vy­tvo­re­ná zo scé­ny navr­hnu­tej zväč­ša v niek­to­rom z množ­stva 3D edi­to­rov, ako aj zo vstup­ných ob­jek­tov, kto­ré sú mo­di­fi­ko­va­né v kaž­dom jed­not­li­vom kro­ku ren­de­ro­va­cie­ho re­ťaz­ca a v up­ra­ve­nej po­do­be pre­ne­se­né na ob­ra­zov­ku. Op­ro­ti fun­kciám, kto­ré po­sky­tu­je 3D en­gi­ne, sú vstup­né ob­jek­ty mo­di­fi­ko­va­né aj pô­so­be­ním ďal­ších sú­čas­tí ga­me en­gi­nu (fy­zi­ky, inter­ak­ciou po­zo­ro­va­te­ľa...). Med­zi dô­le­ži­té fun­kcie ren­de­re­ra pat­rí aj je­ho schop­nosť zob­ra­zo­vať ani­má­cie rôz­ne­ho dru­hu, im­ple­men­to­vať rôz­ne gra­fic­ké efek­ty a v ne­pos­led­nom ra­de vy­uží­vať vlas­tnos­ti GPU na maximum, čím sa vý­sled­ný ob­raz, prip­ra­ve­ný pre po­uží­va­te­ľa, v maximál­nej mie­re prib­lí­ži reál­ne­mu vní­ma­niu sve­ta.

Si­mu­lá­tor fy­zi­ky (angl. Phy­sics): Si­mu­lá­cia fy­zi­kál­nych ja­vov je neod­mys­li­teľ­ná sú­časť všet­kých en­gi­nov. Je­di­ne ap­li­ká­ciou správ­nych vý­poč­tov mož­no si­mu­lo­vať sprá­va­nie sa ob­jek­tov a po­zo­ro­va­te­ľa, kto­ré by sa po­do­ba­lo sku­toč­né­mu sve­tu. Pri tej­to si­mu­lá­cii tre­ba vy­užiť ma­te­ma­tic­ké a fy­zi­kál­ne vý­poč­ty, kto­ré sú však čas­to nah­rád­za­né ta­ký­mi po­stup­mi, kto­ré od­bú­ra­va­jú ne­vyh­nut­nosť po­užiť kom­pli­ko­va­né vzor­ce. Fy­zi­kál­ne zá­ko­ny (pra­vid­lá) ne­ma­jú vplyv iba na po­hyb (chôd­zu, let, jaz­du, pád, skok...) po­zo­ro­va­te­ľa, ale ich im­ple­men­tá­cia je po­treb­ná aj na vy­ko­ná­va­nie iných dru­hov zmien v scé­ne (hád­za­nie ob­jek­tu, pád ob­jek­tov, vý­buc­hy, od­rá­ža­nie, de­for­má­cie, sply­nu­tie, de­le­nie...). Fy­zi­kál­ne ja­vy sa čas­to po­uží­va­jú aj na ur­či­té špe­ciál­ne dru­hy uda­los­tí (angl. events), med­zi kto­ré mô­že­me za­ra­diť napr. od­ra­zy svet­la, rôz­ne elek­tric­ké efek­ty, na­po­do­bo­va­nie mag­ne­tiz­mu, prí­ťaž­li­vos­ti, ale aj čas­ti­co­vých sys­té­mov.

Kon­tro­le­ry (angl. con­trollers, tri­gers, events): Sú­čas­ťou všet­kých ga­me en­gi­nov, kto­ré do­vo­ľu­jú po­zo­ro­va­te­ľo­vi vy­ko­ná­vať ur­či­tý sú­bor čin­nos­tí, sú tzv. kon­tro­le­ry – pre­pí­na­če. Tie sú umies­tne­né v scé­ne a po­zo­ro­va­teľ ni­mi vy­ko­ná­va jed­nak zme­ny sta­vu en­gi­nu, jed­nak zme­ny v scé­ne. Úlo­hou ďal­ších špe­ciál­nych inter­ných kon­tro­le­rov (angl. event han­dlers) je po­sie­la­nie správ med­zi jed­not­li­vý­mi čas­ťa­mi (mo­dul­mi) en­gi­nu. Zá­klad­ňou týc­hto kon­tro­le­rov bý­va zväč­ša je­den blok prog­ra­mo­vé­ho kó­du, tzv. pre­po­jo­vač (angl. inter­fa­ce), kto­rý roz­po­sie­la sprá­vy všet­kým dot­knu­tým mo­du­lom en­gi­nu. Kon­tro­le­ry pa­tria k vy­so­ko inter­ak­tív­nym pr­vkom gra­fic­kých en­gi­nov. Po­zo­ro­va­teľ umies­tne­ný do scé­ny po­mo­cou nich čas­to ov­lá­da kon­krét­ne ob­jek­ty (sku­pi­nu ob­jek­tov), ako napr. dve­re, rôz­ne pre­pa­dy, vý­ťa­hy, pre­mies­tňo­va­če, ale aj kó­do­vé sys­té­my, alar­my...

Stav (angl. sta­te): Kaž­dý en­gi­ne ob­sa­hu­je tzv. správ­cu sta­vov (angl. sta­te ma­na­ger), kto­rý je zod­po­ved­ný za pre­pí­na­nie en­gi­nu do vop­red de­fi­no­va­ných sta­vov, zväč­ša na zá­kla­de po­žia­da­viek po­uží­va­te­ľa (spo­mí­na­te si na sta­vo­vý stroj OpenGL?). Je­den zo špe­ciál­nych sta­vov en­gi­nu je je­ho prip­ra­ve­nie na vy­kres­le­nie scé­ny, kto­ré ho­vo­rí o tom, že všet­ky re­le­van­tné úda­je bo­li spra­co­va­né, všet­ky ob­jek­ty scé­ny sú prip­ra­ve­né na vy­kres­le­nie (te­rén, bu­do­vy, po­sta­vy...), ka­me­ra je na správ­nom mies­te a všet­ky kom­po­nen­ty stro­ja ukon­či­li svo­je vý­poč­ty. Med­zi sta­vy en­gi­nu mô­že­me za­ra­diť naj­mä pre­pí­na­če kva­li­ty je­ho gra­fic­kých pr­vkov. Kaž­dý z nás už ur­či­te nas­ta­vo­val roz­me­ry ob­ra­zov­ky, po­čet zob­ra­zo­va­ných fa­rieb, úro­veň kva­li­ty gra­fic­ké­ho vý­stu­pu atď., po­nú­ka­né v rám­ci me­nu (GUI) väč­ši­ny mo­der­ných hier. Stav en­gi­nu však ne­ho­vo­rí iba o nas­ta­ve­ní kva­li­ty je­ho gra­fic­ké­ho vstu­pu. Rov­na­ko dô­le­ži­té sú spo­mí­na­né vnú­tor­né sta­vy en­gi­nu, kto­ré pl­nia množ­stvo ďal­ších fun­kcií po­treb­ných na chod en­gi­nu.

engine OBR1.bmp
Obr. 1 Sú­čas­ti mo­der­né­ho en­gi­nu

Skrip­ty (angl. script lan­gua­ge): Mo­der­né en­gi­ny sa ne­zao­bí­du bez po­uži­tia špe­ciál­ne navr­hnu­tých blo­kov prog­ra­mo­vé­ho kó­du, na­zý­va­ných aj skrip­ta­mi. Skrip­ty ro­bia en­gi­ne flexibil­ným a umož­ňu­jú vy­užiť rov­na­ké jad­ro en­gi­ne na vý­ro­bu od­liš­ných ap­li­ká­cií. Skrip­to­va­cí ja­zyk bý­va navr­hnu­tý špe­ciál­ne pre da­ný en­gi­ne, ale nez­ried­ka sa stá­va, že sa pri vý­ro­be ap­li­ká­cie po­uži­je všeo­bec­ne zná­my ja­zyk, kto­rý nie je zá­vis­lý iba od kon­krét­ne­ho en­gi­nu.

Súp­ra­va uti­lít: En­gi­ny, kto­rých úlo­hou nie je iba zob­ra­zo­va­nie scén, ale pl­nia aj fun­kcie ga­me en­gi­nov, sú čas­to zos­ta­ve­né z mo­du­lov, kto­ré ma­jú na sta­ros­ti ur­či­tý ok­ruh čin­nos­tí. Ta­ké­to mo­du­ly (angl. uti­li­ty, plug-ins) pre en­gi­ne vy­ko­ná­va­jú čin­nos­ti spo­je­né s ma­te­ma­tic­ký­mi vý­poč­ta­mi, prá­cou so sú­bo­ro­vým sys­té­mom, na­čí­ta­ním texto­vých re­ťaz­cov, špe­ciál­nych úda­jo­vých sú­bo­rov, príp­ra­vou scén...

Nas­le­du­jú­ca ta­buľ­ka ob­sa­hu­je zoz­nam naj­dô­le­ži­tej­ších vlas­tnos­tí gra­fic­kých en­gi­nov. S mno­hý­mi po­jma­mi uve­de­ný­mi v nej sa bu­de­me čas­to stre­tá­vať pri čí­ta­ní toh­to se­riá­lu, pre­to je dob­ré si ich za­pa­mä­tať.

Vlas­tnos­ti mo­der­ných en­gi­nov
Po­uži­té ap­li­kač­né prog­ra­mo­vé roz­hra­nie (angl. Ap­pli­ca­tion Prog­ram­ming Inter­fa­ce – API) Di­rectX, OpenGL
Spúš­ťa­né na OS Win­dows, Li­nux, Mac OS, ale aj Xbox, PlayS­ta­tion, Ga­me­Cu­be
Prog­ra­mo­va­cí ja­zyk C++, Ja­va, Del­phi, Ba­sic, Perl, naj­mä ob­jek­to­vo orien­to­va­ný kód, kto­rý po­nú­ka roz­ší­ri­teľ­nosť po­mo­cou zá­suv­ných mo­du­lov (angl. Plug-Ins), ta­kis­to mož­nosť uk­la­da­nia sta­vov, mo­du­la­ri­tu, roz­ší­ri­teľ­nosť, po­drob­nú do­ku­men­tá­ciu
Stav vý­vo­ja (ver­zie) al­fa, be­ta... vý­znam­nú úlo­hu zoh­rá­va kva­lit­ná do­ku­men­tá­cia, kto­rá je však pre kon­co­vé­ho po­uží­va­te­ľa zväč­ša ne­pot­reb­ná, je vy­uži­teľ­ná naj­mä pre bu­dú­cich vý­vo­já­rov
Po­ža­do­va­né vlas­tnos­ti po­dpo­ra sie­ťo­vé­ho pre­po­je­nia (angl. client-server, peer-to-peer, mas­ter server), špe­ciál­ne nás­tro­je (skrip­ty, edi­to­ry), po­dpo­ra zvu­ku, vi­dea
Schop­nosť čo naj­ver­nej­šie na­po­dob­niť reál­ny svet fy­zi­ka, de­tek­cia ko­lí­zií, ob­jem, hmo­ta, fy­zi­ka stro­jov, auto­mo­bi­lov, lie­ta­diel, ume­lá in­te­li­gen­cia
Gra­fic­ké mož­nos­ti per-ver­tex, per-pixel os­vet­le­nie, vo­lu­met­ric­ká hm­la, svet­lo, ma­po­va­nie svet­la (angl. lig­htmap­ping), iné me­tó­dy vý­poč­tov os­vet­le­nia (angl. ra­dio­si­ty, rayt­ra­cing), od­ra­zi­vosť, filtro­va­nie, tie­ne, textú­ro­va­nie, mul­ti­textú­ry, bump textú­ry, mip­ma­py, pro­jek­čné textú­ry, pro­ce­du­rál­ne textú­ry, sha­de­ry (ver­tex, pixel, high-le­vel sha­de­ry)
Ren­de­ring pev­ný ren­de­ro­va­cí pro­ces, ste­reo, prog­ra­má­to­rom de­fi­no­va­ný ren­de­ring, ren­de­ring do textúr, fon­ty, me­nu, GUI
Ma­naž­ment scé­ny BSP, po­rtá­ly, ok­tá­no­vé stro­my, od­stra­ňo­va­nie ne­vi­di­teľ­ných ob­jek­tov (angl. oc­clu­sion culling), PVS, LOD
Ani­má­cie in­ver­zná ki­ne­ma­ti­ka, dop­red­ná ki­ne­ma­ti­ka, ani­má­cia na zá­kla­de kľú­čo­vých sní­mok (angl. keyf­ram­ming), ani­má­cia kos­try ob­jek­tov (po­stáv, angl. ske­le­tal ani­ma­tion), mor­phing, pre­lí­na­nie
Ob­jek­ty nah­rá­va­nie z exter­ných sú­bo­rov, pre­roz­de­ľo­va­nie (angl. tes­se­la­tion), de­for­má­cie, kriv­ky, ploc­hy (angl. spli­ne, pat­ches), te­rén
Špe­ciál­ne efek­ty en­vi­ron­men­tal map­ping, lens fla­res, bi­llboar­ding, par­tic­le sys­tems, depth of field, mo­tion blur, ob­lo­ha, vo­da, oheň, expló­zie, de­cals, hm­la, po­ča­sie, zr­kad­lá

Po­uži­tie gra­fic­kých en­gi­nov
Člá­nok ukon­čí­me zoz­na­mom niek­to­rých naj­výz­nam­nej­ších ap­li­ká­cií, v kto­rých mož­no s vý­ho­dou po­užiť gra­fic­ké en­gi­ny, resp. kto­ré vy­uží­va­jú niek­to­rú z fun­kcio­na­lít týc­hto en­gi­nov.
- Za­čne­me po­čí­ta­čo­vý­mi hra­mi, kto­ré sú prav­de­po­dob­ne naj­väč­ší­mi po­uží­va­teľ­mi en­gi­nov, a to naj­mä ga­me en­gi­nov. Sí­ce mož­no po­ve­dať, že po­čí­ta­čo­vé hry nie sú nás­tro­jom od­bor­né­ho roz­vo­ja mo­der­né­ho sve­ta a exis­tu­jú naj­mä z dô­vo­du re­laxu a zá­ba­vy, ale her­ný prie­my­sel je ne­za­ned­ba­teľ­ným tvor­com príj­mov a z to­ho po­hľa­du má ur­či­te svo­je mies­to med­zi os­tat­ný­mi druh­mi prie­mys­lu.
- K po­čí­ta­čo­vým hrám ma­jú naj­bliž­šie rôz­ne dru­hy si­mu­lá­to­rov (le­tec­ké, auto­mo­bi­lo­vé – autoš­ko­ly, lod­né, ale aj stre­lec­ké, bo­jo­vé...). Tu už ne­mož­no jed­noz­nač­ne skon­šta­to­vať, že ide iba o zá­ba­vu. Nap­rík­lad si­mu­lá­tor po­uží­va­ný v autoš­ko­le mô­že vý­raz­ne zjed­no­du­šiť prá­cu inštruk­to­rom, kto­rí ne­mu­sia rie­šiť prí­pad­né ko­lí­zie, kto­ré by moh­li nas­tať v prí­pa­de, keď sa nes­kú­se­ný vo­dič-za­čia­toč­ník dos­ta­ne pr­výk­rát na vo­zov­ku.
- Nas­le­du­jú ďal­šie rôz­ne dru­hy prie­mys­lu, kto­ré vy­uží­va­jú si­mu­lač­né tec­hno­ló­gie pred tým, ako da­ný pro­ces reali­zu­jú s fy­zic­kým ma­te­riálom. Ťaž­ko me­no­vať kon­krét­ny druh prie­mys­lu, prak­tic­ky kaž­dé jed­not­li­vé od­vet­vie mô­že is­tým spô­so­bom vy­užiť vlas­tnos­ti gra­fic­kých en­gi­nov. Ur­či­te sem však mož­no za­ra­diť zdra­vot­níc­tvo, che­mic­ký, le­tec­ký, ató­mo­vý, koz­mic­ký prie­my­sel.
- Gra­fic­ké en­gi­ny mož­no s vý­ho­dou po­užiť na si­mu­lá­ciu rôz­nych dru­hov čin­nos­tí. Čas­to sa po­uží­va­jú na vi­zua­li­zá­ciu pros­tre­dí sní­ma­ných ka­me­ra­mi ale­bo iný­mi druh­mi zá­zna­mo­vej tec­hni­ky, pri­čom tie­to zá­zna­my buď kom­plet­ne mo­di­fi­ku­jú, ale­bo dopĺňa­jú ďal­ší­mi ob­jek­tmi, kto­ré sa v pô­vod­nom zá­zna­me ne­nac­hád­za­jú.
- Ďal­ším vy­uži­tím en­gi­nov sú rôz­ne dru­hy de­monštrač­ných prog­ra­mov, rek­lám, pre­zen­tá­cií...

Na­bu­dú­ce...
Po úvo­de tý­ka­jú­com sa zá­klad­ných vlas­tnos­tí gra­fic­kých en­gi­nov bu­de­me po­kra­čo­vať kon­krét­nej­ší­mi té­ma­mi. Po­stup­ne sa po­kú­si­me opí­sať a po­drob­ne vy­svet­liť kaž­dú jed­not­li­vú fun­kcio­na­li­tu gra­fic­ké­ho en­gi­nu. Sú­čas­ne s texto­vou čas­ťou se­riá­lu za­čne­me pra­co­vať na príp­ra­ve vzo­ro­vé­ho prík­la­du.

V bu­dú­cej čas­ti se­riá­lu pris­tú­pi­me k vy­svet­le­niu niek­to­rých naj­dô­le­ži­tej­ších po­jmov sú­vi­sia­cich s príp­ra­vou her­né­ho en­gi­nu. Zo­pa­ku­je­me si ve­do­mos­ti, kto­ré sme na­do­bud­li po­čas čí­ta­nia jed­not­li­vých čas­tí pô­vod­né­ho se­riá­lu, pri­čom si ich dopl­ní­me o opis niek­to­rých dô­le­ži­tých tri­kov, kto­rý­mi zís­ka­me po­treb­ný po­čet FPS.

Ďal­šie čas­ti >>

Zdroj: Infoware 12/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