Erik "Deathgate" VeselýErik "Deathgate" VeselýMatMatúšúš "Backslash" Zamborský "Backslash" Zamborský
Možnosti moderního Možnosti moderního grafického HW grafického HW
ÚvodemÚvodem
nejen nejnovější technologie, zpětný nejen nejnovější technologie, zpětný pohled na vývoj grafiky na PCpohled na vývoj grafiky na PC
shrnutí současných technikshrnutí současných technik
osvětlení a jeho provedení hraje největší osvětlení a jeho provedení hraje největší roli při renderinguroli při renderingu
každé řešení osvětlení s sebou nese každé řešení osvětlení s sebou nese jednotlivé problémyjednotlivé problémy
SVSVĚTLOĚTLO
Co to je?Co to je?
jedna se o část elektromagnetického jedna se o část elektromagnetického spektra, jež je viditelná lidským okemspektra, jež je viditelná lidským okemjednotlivé úhly pohledujednotlivé úhly pohledu
snažíme se co nejvíce přiblížit realitěsnažíme se co nejvíce přiblížit realitěv grafice nejde o reálný osvětlovací model, v grafice nejde o reálný osvětlovací model, ale snažíme se o co nejkvalitnější vizuální ale snažíme se o co nejkvalitnější vizuální výsledekvýsledek
Všechno je aproximaceVšechno je aproximace
základem je Lambertova rovniczákladem je Lambertova rovnicee
intenzita = nintenzita = n dot l dot l
n – normala povrchun – normala povrchu
l – vektor ke svl – vektor ke světluětlu
rendering svetel se tyka distribuce energie rendering svetel se tyka distribuce energie elektromagnetického záření do jednotlivych typu povrchu elektromagnetického záření do jednotlivych typu povrchu a reakce povrchu na dané záření a reakce povrchu na dané záření materiály část světelné energie přijmou, část ji odrazímateriály část světelné energie přijmou, část ji odrazípřijmutá energie se částečne přemění v teplo a zbytek přijmutá energie se částečne přemění v teplo a zbytek se vyzáří zpětse vyzáří zpět
barva materialu závisí na tom, kterou část spektra pohltí barva materialu závisí na tom, kterou část spektra pohltí a kterou vyzáří zpěta kterou vyzáří zpět
každý povrch přijímá světelnou energii, část ji vyzáří každý povrch přijímá světelnou energii, část ji vyzáří zpět, část jí promění v tepelnou energiizpět, část jí promění v tepelnou energii
Phongův osvětlovací modelPhongův osvětlovací model
- ambienambientt
- diffusediffuse
- speculaspecularr
intensita = ambient intensita = ambient + diffuse + specular + diffuse + specular
PhongPhongův osvětlovací modelův osvětlovací model
ambient = ambient = kkonstantaonstanta
diffuse = N dot Ldiffuse = N dot L
specular = (V dot R)specular = (V dot R)^shininess^shininess
farba = ambient + diffuseLight * diffuseMat + specularLight farba = ambient + diffuseLight * diffuseMat + specularLight *specularMat*specularMat
direct a indirect lighting - indirect bere direct a indirect lighting - indirect bere nejen svetlo od zdroje k povrchu, ale take nejen svetlo od zdroje k povrchu, ale take od povrchu k ostatnim povrchum, na od povrchu k ostatnim povrchum, na zaklade zakona zachovani energiezaklade zakona zachovani energie
Metody osvětleníMetody osvětlení
statická vs. dynamická světlastatická vs. dynamická světla
statické vs. dynamické objektystatické vs. dynamické objekty
při návrhu renderingu je důležité dobře při návrhu renderingu je důležité dobře promyslet jednotlivá řešení, všechno má promyslet jednotlivá řešení, všechno má svoje pro a protisvoje pro a proti
Statické osvětleníStatické osvětlení
1.) STATICK1.) STATICKÁ SVETLAÁ SVETLA
statický terénstatický terén
pohyblivé objektypohyblivé objekty
2.2.) DYNAMICK) DYNAMICKÁ SVETLAÁ SVETLA
statický terénstatický terén
pohyblivé objektypohyblivé objekty
NejstarNejstarší osvětlovací metodyší osvětlovací metody
simple lightmapper už od dob Quakesimple lightmapper už od dob Quake11
textury nanestextury nanesené na statickou scénu ené na statickou scénu obsahují barvu světla, skalární součin a obsahují barvu světla, skalární součin a energii světla, reprezentovanou rovnicí energii světla, reprezentovanou rovnicí útlumuútlumustatické lightmapy pracují pouze se statické lightmapy pracují pouze se statickými objekty, dynamické věci statickými objekty, dynamické věci potřebují svoje vlastní řešenípotřebují svoje vlastní řešení
Per-Vertex lightingPer-Vertex lighting
OpenGL přišlo vstříci developerům, FFP OpenGL přišlo vstříci developerům, FFP per-vertex lightingper-vertex lighting
intenzita osvětlení počítána na úrovni intenzita osvětlení počítána na úrovni jednotlivých vertexůjednotlivých vertexů
následná interpolacenásledná interpolace
Per-Vertex LightingPer-Vertex Lighting
Výhody:Výhody:
- relativně rychlérelativně rychlé
- celkem dobrý výsledekcelkem dobrý výsledek
Nevýhody:Nevýhody:
- nepresne, pro realny vzhled potreba - nepresne, pro realny vzhled potreba dostatecne teselovat geometriidostatecne teselovat geometrii
Per-Pixel lightingPer-Pixel lighting
řeší problémy s nepřenostmi, jež vznikají řeší problémy s nepřenostmi, jež vznikají při per vertex lightingupři per vertex lightingu
intenzita pixelu se počítá pro každý pixel intenzita pixelu se počítá pro každý pixel zvlášťzvlášť
Per-Pixel lightingPer-Pixel lighting
Výhody:Výhody:- přesné, přesné, - nepotřebuje teselacinepotřebuje teselaci
Nevýhody:Nevýhody:- vysoké nároky na výkonvysoké nároky na výkon- osvětlovací rovnice se počítá pro každý osvětlovací rovnice se počítá pro každý
pixel zvlášťpixel zvlášť
Další fáze vývojeDalší fáze vývoje
vyrobci grafickych karet se zacinaji preorientovavat, investuje se vyrobci grafickych karet se zacinaji preorientovavat, investuje se hlavne do vyvoje pixel pipeline a hlavne do vyvoje pixel pipeline a do do jeji zparalelni k co nejvetsimu jeji zparalelni k co nejvetsimu vypocetnimu vykonu na urovni pixel computinguvypocetnimu vykonu na urovni pixel computingu
pixely renderuji jednotky paralelne, vykon karty v pripade pixel pixely renderuji jednotky paralelne, vykon karty v pripade pixel bottlenecku velmi zavisi na poctu pixel pipelines, ATI i NV pouzivaji bottlenecku velmi zavisi na poctu pixel pipelines, ATI i NV pouzivaji mirne jine reseni co se týče architektury pixel pipelinesmirne jine reseni co se týče architektury pixel pipelines
- objevuji se nove techniky na zdetailneni a zkvalitneni renderingu - objevuji se nove techniky na zdetailneni a zkvalitneni renderingu jednotlivych povrchujednotlivych povrchu
- metody jako Emboss bump mapping, Dot3 bump mapping, - metody jako Emboss bump mapping, Dot3 bump mapping, Paralax mapping, displacement mappingParalax mapping, displacement mapping
- detaily povrchu jsou pridavany pomoci textur, jez definuji tvar - detaily povrchu jsou pridavany pomoci textur, jez definuji tvar povrchupovrchu
Emboss bump mappingEmboss bump mapping
první metoda bump mappinguprvní metoda bump mappingu
používá height – mapupoužívá height – mapu
height mapa vyjadřuje nerovnosti povrchuheight mapa vyjadřuje nerovnosti povrchu
definuje vyvýšeniny oproti fyzické definuje vyvýšeniny oproti fyzické geometrii dané trianglygeometrii dané triangly
nepoužívá se, ale dala vzniku dalším nepoužívá se, ale dala vzniku dalším metodámmetodám
Dot3 Bump mappingDot3 Bump mapping
stará dobrá heightmapa se zderivujestará dobrá heightmapa se zderivuje
získáme změny výšky mezi jednotlivými získáme změny výšky mezi jednotlivými texely textury(povrchu)texely textury(povrchu)
vzniká normal mapa, kde jednotlivé texely vzniká normal mapa, kde jednotlivé texely reprezentují normálu pixelureprezentují normálu pixelu
používá se klasická RGB texturapoužívá se klasická RGB textura
Dot3 Bump mappingDot3 Bump mapping
jsou dva základní způsoby jak definovat jsou dva základní způsoby jak definovat normal mapunormal mapu
OBJECT SPACE NORMAL MAPAOBJECT SPACE NORMAL MAPA
TANGENT SPACE NORMAL MAPATANGENT SPACE NORMAL MAPA
Dot3 Bump mappingDot3 Bump mapping
OBJECT SPACE BUMP MAPPINGOBJECT SPACE BUMP MAPPING
vyhody: relativne jednoduche na vyhody: relativne jednoduche na pochopeni, netreba delat dalsi vypocty a pochopeni, netreba delat dalsi vypocty a transformacetransformacenevyhody: kazdy kus geometrie musi mit nevyhody: kazdy kus geometrie musi mit svoji vlastni object space( world space ) svoji vlastni object space( world space ) mapu, nemuze se opakovat, ro kazdy bod mapu, nemuze se opakovat, ro kazdy bod je identicka, zabira vela mistaje identicka, zabira vela mista
Dot3 Bump mappingDot3 Bump mapping
TANGENT SPACE BUMP MAPPINGTANGENT SPACE BUMP MAPPING
normalova mapa je definovana relativne vuci danemu normalova mapa je definovana relativne vuci danemu polygonupolygonu
pred vypoctem intenzity daneho bodu je potreba dostat pred vypoctem intenzity daneho bodu je potreba dostat vektor ke svetlu do prostoru dane texturyvektor ke svetlu do prostoru dane textury
prostor textury nanesene na jednotlivych polygonech prostor textury nanesene na jednotlivych polygonech definuje tangent space transformacni maticedefinuje tangent space transformacni matice
urcuje lokalny souradnicovy system textury mapovane urcuje lokalny souradnicovy system textury mapovane na dany polygonna dany polygon
Paralax mappingParalax mapping
vychádza z klasického bumpmappinguvychádza z klasického bumpmappingu
normály jednotlivých pixelov pochádzajú z normal mapy a vyska z normály jednotlivých pixelov pochádzajú z normal mapy a vyska z height mapyheight mapy
pridáva zlepšenie v simuláci hrbolatých povrchovpridáva zlepšenie v simuláci hrbolatých povrchov
vyhody: zlepšenie vizuálneho dojmu zo scényvyhody: zlepšenie vizuálneho dojmu zo scény dynamickosť povrchov pri pohybe kamerydynamickosť povrchov pri pohybe kamery
nevýhody: ďalšie inštrukcie na úrovni pixel/fragment shaderunevýhody: ďalšie inštrukcie na úrovni pixel/fragment shaderu väčšia pamäťová náročnosť, pretože je potreba height mapaväčšia pamäťová náročnosť, pretože je potreba height mapa pri ostrých uhloch pohľadu efekt ztraci svuj smysl, protoze pri ostrých uhloch pohľadu efekt ztraci svuj smysl, protoze
vynikne planarna podstata povrchavynikne planarna podstata povrcha
iným názvom pre parallax mapping je offset mapping, iným názvom pre parallax mapping je offset mapping, takže ide o offsetovanie texturových koordinátovtakže ide o offsetovanie texturových koordinátov
koordináty sa offsetujú podľa vektora pohľadu na daný koordináty sa offsetujú podľa vektora pohľadu na daný povrch a výšky povrchupovrch a výšky povrchu
výška povrchu je daná height mapou, ktorá ju kóduje ako výška povrchu je daná height mapou, ktorá ju kóduje ako hodnoty od 0.0 až 1.0, pričom je na nás aby sme hodnoty od 0.0 až 1.0, pričom je na nás aby sme ich správne rozpakovali do rozsahu aký potrebujeme, ich správne rozpakovali do rozsahu aký potrebujeme, teda napríklad -1.5 až 2.8 a pod.teda napríklad -1.5 až 2.8 a pod.
na pervertex úrovni sa vo vertex shaderi vypočíta kamera vektor a prevedie sa do tangent na pervertex úrovni sa vo vertex shaderi vypočíta kamera vektor a prevedie sa do tangent spacespace
kamera vektor sa interpoluje po celom polygone, teda posle sa do pixel/fragment shaderukamera vektor sa interpoluje po celom polygone, teda posle sa do pixel/fragment shaderu
je nutné ho normalizovať aby mal jednotkovú dĺžkuje nutné ho normalizovať aby mal jednotkovú dĺžku
na perpixel urovni sa nasampluje heightmapana perpixel urovni sa nasampluje heightmapa
k nasamplovanej hodnote sa nasobi scale a pripocita bias, ktorý hodnotu z rozsahu 0.0 až 1.0 k nasamplovanej hodnote sa nasobi scale a pripocita bias, ktorý hodnotu z rozsahu 0.0 až 1.0 dostane do nami zvoleného rozsahudostane do nami zvoleného rozsahu
normalizovaný kamera vektor(koordináty X a Y) sa násobí hodnotou paralaxu, ktorú sme práve normalizovaný kamera vektor(koordináty X a Y) sa násobí hodnotou paralaxu, ktorú sme práve vypočítalivypočítali
tým dostávame offset o ktorý zmeníme textúrové koordinátytým dostávame offset o ktorý zmeníme textúrové koordináty
na záver sa offset pripočíta k pôvodným texturovacím koordinátomna záver sa offset pripočíta k pôvodným texturovacím koordinátom
Po vypočítaní zoffsetovaných koordinátov, ich Po vypočítaní zoffsetovaných koordinátov, ich používame na samplovanie všetkých ostatných používame na samplovanie všetkých ostatných textúr(diffuse, normal mapa, specular mapa, ...)textúr(diffuse, normal mapa, specular mapa, ...)
float2 GetParalax(float2 baseCoord, float Scale, float Bias, float3 camvect)float2 GetParalax(float2 baseCoord, float Scale, float Bias, float3 camvect){{ float height = tex2D(heightTex, baseCoord);float height = tex2D(heightTex, baseCoord); float paralax = height * Scale - Bias;float paralax = height * Scale - Bias; float2 offset = camvect.xy * paralax;float2 offset = camvect.xy * paralax; return baseCoord + offset;return baseCoord + offset;}}
HDRHDRHigh Dynamic RangeHigh Dynamic Range
Čo to je?Čo to je?
je to forma zobrazenia, pri ktorej simulujeme správanie je to forma zobrazenia, pri ktorej simulujeme správanie sa ľudského okasa ľudského okaľudské oko je schopné zachytiť veľký rozsah intenzít ľudské oko je schopné zachytiť veľký rozsah intenzít svetlasvetlanaraz však dokáže zobraziť len malú časť naraz však dokáže zobraziť len malú časť
vždy sa zobrazuje iný rozsah intenzity svetla, ten závisí vždy sa zobrazuje iný rozsah intenzity svetla, ten závisí od celkovej intenzity svetla, ktoré vstupuje do okaod celkovej intenzity svetla, ktoré vstupuje do oka
ďalším faktorom pri HDR je pomalá adaptácia svetelným ďalším faktorom pri HDR je pomalá adaptácia svetelným podmienkampodmienkam
VýhodyVýhody
dynamickosdynamickosťť scény scény
energia, ktorú vyžarujú povrchy v scéne je energia, ktorú vyžarujú povrchy v scéne je čo najlepšie rozdistribuovaná do rozsahu 0 čo najlepšie rozdistribuovaná do rozsahu 0 až 1až 1
možnosť pridania ďalších efektov ako je možnosť pridania ďalších efektov ako je bloom, star efekt a pod.bloom, star efekt a pod.
NevýhodyNevýhody
niekoľkonásobné väčšie nároky na niekoľkonásobné väčšie nároky na bandwidth grafickej kartybandwidth grafickej kartyvyžaduje niekoľko dodatočných výpočtov vyžaduje niekoľko dodatočných výpočtov na konci renderovania scényna konci renderovania scényvyžaduje float textúry(SM 2.0 HW)vyžaduje float textúry(SM 2.0 HW)zatiaľ obmedzené použitie antialiasingu s zatiaľ obmedzené použitie antialiasingu s HDRHDRvhodná je aj podpora float blendingu(SM vhodná je aj podpora float blendingu(SM 3.0 HW)3.0 HW)
PostupPostup
scéna sa vyrenderuje do float framebuffru scéna sa vyrenderuje do float framebuffru
vypočíta sa priemerná luminancia scényvypočíta sa priemerná luminancia scény
(môže sa pridať bloom alebo star effekt)(môže sa pridať bloom alebo star effekt)
prebehne tonemappingprebehne tonemapping
Výsledok sa zobrazí na obrazovkeVýsledok sa zobrazí na obrazovke
Počítanie luminanciePočítanie luminancie
všteko prebieha na grafickej kartevšteko prebieha na grafickej kartez float framebufferu s vyrenderovanou scénou z float framebufferu s vyrenderovanou scénou vytvoríme luminance textúru scényvytvoríme luminance textúru scényNa každom pixeli prebehne funkcia Na každom pixeli prebehne funkcia
float CalculateLuminance(float red, float green, float blue)float CalculateLuminance(float red, float green, float blue){{ float luminance = red*float luminance = red*0.30.3 + green* + green*0.590.59 + blue* + blue*0.110.11;; return log(luminance + return log(luminance + epsilonepsilon); ); // epsilon bude mala konstanta// epsilon bude mala konstanta}}
získame priemernú luminanciu scény pomocou získame priemernú luminanciu scény pomocou mipmapovaniamipmapovaniato sa bude líšiť na NVIDA a ATI kartáchto sa bude líšiť na NVIDA a ATI kartách
GeForce GeForce 6 a 76 a 7
podporuje mipmapovanie NPOT(non-podporuje mipmapovanie NPOT(non-power of two) textur – luminančná textúrapower of two) textur – luminančná textúra
zmipmapujeme túto textúruzmipmapujeme túto textúru
priemerná luminancia bude uložená v priemerná luminancia bude uložená v poslednej mipmapeposlednej mipmape
ATI RadeonATI Radeon
nepodporuje mipmapovanie NPOT(non-power nepodporuje mipmapovanie NPOT(non-power of two) texturof two) textur
najprv pomocou shaderu namapujeme najprv pomocou shaderu namapujeme luminančnú textúru na POT 1-komponentovú luminančnú textúru na POT 1-komponentovú textúru s pomocou lineárneho - filteringu ... textúru s pomocou lineárneho - filteringu ...
512x512 a pod.512x512 a pod.
- ďalej pokračujeme ručným downsaplovaním - ďalej pokračujeme ručným downsaplovaním textúry až sa dostaneme na rozmer 1x1textúry až sa dostaneme na rozmer 1x1
TonemappingTonemapping
spočíva v mapovaní hodnot z framebuffera v rozmedzi 0 spočíva v mapovaní hodnot z framebuffera v rozmedzi 0 az nekonecno na rozsah 0 az 1, ktorý je pripravený na az nekonecno na rozsah 0 az 1, ktorý je pripravený na zobrazenie na zobrazenie na monitoremonitoredosiahneme to delenim farby pixelu z float framebuffru, dosiahneme to delenim farby pixelu z float framebuffru, sebou samou + 1sebou samou + 1final_color = HDR_color / (HDR_color + 1.0)final_color = HDR_color / (HDR_color + 1.0)
spôsobov ako dosiahnuť tonemapping, je viacero a spôsobov ako dosiahnuť tonemapping, je viacero a väčšina je omnoho sofistikovanejšia ako uvádzaná väčšina je omnoho sofistikovanejšia ako uvádzaná metódametóda- prípadne sa dá doimplementovať postupná adaptácia - prípadne sa dá doimplementovať postupná adaptácia na zmenu osvetleniana zmenu osvetlenia