Programujeme GPU / 23. časť

V tej­to čas­ti se­riá­lu veľ­mi struč­ne opí­še­me im­ple­men­tá­ciu tzv. efek­tu Screen Spa­ce Am­bient Oc­clu­sion (SSAO) po­mo­cou GLSL sha­de­rov. Ako vždy má­me do či­ne­nia s po­mer­ne zlo­ži­tým efek­tom, kto­rý je opí­sa­ný v roz­sia­hlych od­bor­ných člán­koch.

My si teóriu vo veľ­kej mie­re zjed­no­du­ší­me a efekt cha­rak­te­ri­zu­je­me skôr z hľa­dis­ka je­ho vply­vu na gra­fic­ký vzhľad ren­de­ro­va­ných scén.

SSAO

Pod poj­mom Am­bient Oc­clu­sion (AO) si mô­že­me pred­sta­viť zme­nu hod­nôt všes­me­ro­vé­ho (am­bient) kom­po­nen­tu os­vet­le­nia v zá­vis­los­ti od pre­ká­žok (oc­clu­ders), kto­ré sto­ja v ces­te sve­tel­ným lú­čom sme­ru­jú­cim ku kon­krét­ne­mu os­vet­le­né­mu ob­jek­tu. Screen Spa­ce AO je mo­di­fi­ká­cia zá­klad­né­ho prin­cí­pu, a sí­ce v tom, že vý­po­čet zmien hod­nôt am­bient nie je rie­še­ný v 3D pries­to­re, ale pre­sú­va sa do fá­zy nes­kor­šie­ho spra­co­va­nia (post-pro­ces­sing) vy­ren­de­ro­va­nej 2D sním­ky v tzv. Screen Spa­ce (2D pries­tor ob­ra­zov­ky). Ta­ký­to vý­po­čet efek­tu AO je iba ap­roximá­cia kom­plexné­ho vý­poč­tu v 3D pries­to­re, z čo­ho vy­plý­va, že vý­sled­ky nie sú to­tož­né. Vý­ho­da SSAO je v tom, že v prí­pa­de real-ti­me po­čí­ta­čo­vej gra­fi­ky vý­raz­ne zreál­ňu­je gra­fic­ký vzhľad scén, a to iba s mi­ni­mál­nym vply­vom na rých­losť ren­de­rin­gu.

Ap­li­ko­va­teľ­ných pos­tu­pov je mno­ho. My sme si vy­bra­li me­tó­du vý­poč­tu efek­tu SSAO s vy­uži­tím vop­red prip­ra­ve­nej in­for­má­cie o hĺbke frag­men­tov a textú­ry s ná­hod­ne orien­to­va­ný­mi vek­tor­mi. V kaž­dom prí­pa­de pra­cu­je­me s FBO, do kto­ré­ho ok­rem nor­mál a fa­rieb ulo­ží­me aj hĺbku jed­not­li­vých frag­men­tov.

Frag­ment sha­der pre SSAO

Al­go­rit­mus vý­poč­tu zmien kom­po­nen­tu am­bient os­vet­le­nia sa vy­ko­ná­va v prís­luš­nom frag­ment sha­de­ri (kon­krét­ne v sú­bo­re ssao_sha­der1.fs):

  1. Zo zná­mej 2D po­lo­hy a hĺbky frag­men­tu F vy­po­čí­ta­me je­ho 3D po­lo­hu v tzv. pries­to­re EYE.
  2. Po­mo­cou x vzo­riek „preh­ľa­dá­me" oko­lie frag­men­tu F. S vy­uži­tím ná­hod­ne orien­to­va­ných vek­to­rov pos­tup­ne ur­ču­je­me 3D po­lo­hy vzo­riek (sú­rad­ni­ca Z = hĺbka A), kto­ré nás­led­ne pre­vá­dza­me na ich 2D ek­vi­va­len­ty v tzv. pries­to­re CLIP.
  3. 2D po­lo­hy vzo­riek rep­re­zen­tu­jú textú­ro­va­cie sú­rad­ni­ce, kto­ré pou­ži­je­me na vý­ber (textu­re fetch) úda­jov z prís­luš­nej textú­ry FBO, pri­čom vie­me, že úda­je v textú­re sú hĺbka­mi po­ten­ciál­nych pre­ká­žok B0, B1, B2… Bx.
  4. Ak je na­čí­ta­ná hĺbka B men­šia ako hĺbka vzor­ky A (v zá­vis­los­ti od nas­ta­ve­nia depth tes­tu), pre­káž­ka „brá­ni" prie­ni­ku sve­tel­ných lú­čov, a te­da zni­žu­je hod­no­ty kom­po­nen­tu am­bient frag­men­tu F.
  5. Kla­si­fi­ká­ciu hĺbky A op­ro­ti hĺbke B v ďal­šom kro­ku dopl­ní­me o vý­po­čet vzdia­le­nos­ti po­lo­hy frag­men­tu F od po­lo­hy pre­káž­ky. Aby bol vý­po­čet ko­rekt­ný, vzor­ke naj­skôr pri­ra­dí­me hĺbku B na­čí­ta­nú z textú­ry FBO, zo zná­mej 2D po­lo­hy a hĺbky vy­po­čí­ta­me 3D po­lo­hu vzor­ky v pries­to­re EYE a nás­led­ne vy­ko­ná­me po­rov­na­nie. Vplyv kon­krét­nej pre­káž­ky na útlm kom­po­nen­tu am­bient je tým väč­ší, čím je vzdia­le­nosť pre­káž­ky od frag­men­tu F men­šia.

GPU-obr1.jpg

Obr. 1  Príl­oha se­riá­lu – glsl v2.4.5 – Op­ti­ma­li­zo­va­ný De­ferred sha­ding

Kva­li­tu efek­tu mô­že­me v ďal­šom kro­ku zvý­šiť „roz­ma­za­ním" scé­ny, čím od­strá­ni­me zr­ni­tosť, kto­rá vzni­ká dis­krét­nou kla­si­fi­ká­ciou reali­zo­va­nou so sta­no­ve­ným poč­tom vzo­riek. Zr­ni­tosť mož­no re­du­ko­vať aj zvý­še­ním poč­tu vzo­riek, čo má však neb­la­hý vplyv na rých­losť ren­de­rin­gu.

Zdroj: IW 6-7/2013



Ohodnoťte článok:
   
 

24 hodín

týždeň

mesiac

Najnovšie články

Op­la­tí sa SaaS? Ako vy­chá­dza­jú pre­poč­ty?
Časom bude softvér ako služba (SaaS) najpoužívanejší spôsob zabezpečenia aplikačného vybavenia firiem aj súkromníkov. čítať »
 
Tran­sfor­má­cia des­kto­pu: Ako sa ne­za­mo­tať vo Vir­tual Des­ktop Infra­struc­tu­re
Virtualizácia desktopov (Virtual Desktop Infrastructure - VDI) je v poslednom čase v móde asi rovnako ako cloud a virtualizácia. čítať »
 
4 mý­ty o vý­ho­dách clou­du
Cloud computing je v poslednom čase často diskutovaná téma, ale hovorí sa skôr o jeho výhodách. Tých je bezpochyby veľa, no z niektorých z nich sa stali mýty, ktoré, žiaľ, nie sú úplne pravdivé. čítať »
 
Vy­uži­tie in-me­mo­ry tech­no­ló­gie v TUI Tra­vel A&D
Veľké množstvo dát, ktoré generujú používatelia a pripojené zariadenia, možno využiť v prospech biznisu. Aby bola analýza dát efektívna, treba vybrať technológiu a infraštruktúru, na ktorej bude riešenie nasadené. čítať »
 
Prog­ra­mu­je­me GPU / 23. časť
V tejto časti seriálu veľmi stručne opíšeme implementáciu tzv. efektu Screen Space Ambient Occlusion (SSAO) pomocou GLSL shaderov. Ako vždy máme do činenia s pomerne zložitým efektom, ktorý je opísaný v rozsiahlych odborných článkoch. čítať »
 
Ap­li­ká­cie pod­ľa šab­lón Grid App a Split App
V doterajších častiach sme vás oboznámili s najdôležitejšími dielmi pomyselnej stavebnice, z ktorej sa dá vytvoriť aplikácia Windows 8. Najčastejší scenár pre aplikácie Windows 8 je prezentácia rôznych údajov, či už statických, alebo dynamických. čítať »
 
Zdie­ľa­nie zdro­jov me­dzi OS Win­dows a OS Li­nux / 12.
Spomínam si, že návod na inštaláciu poštového servera Postfix, ktorý som čítal pred pár rokmi, mal približne 50 strán. Inštalácia a konfigurácia servera bola rozpísaná v mnohých bodoch, ktoré som musel chtiac či nechtiac prečítať prv, ako som sa dostal k bodu, v ktorom som ukončil konfiguráciu a spustil server. čítať »
 
DNS – zá­pis zón do kon­fi­gu­rač­né­ho sú­bo­ru na­med.conf
V predošlej časti seriálu sme sa venovali hlavnému konfiguračnému súboru named.conf, ktorý sa nachádza v adresári /etc. Uviedli sme, že sa skladá zo sekcií, a vysvetlili sme najdôležitejšie položky konfigurácie v jednotlivých sekciách. čí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