Ústav automatizace a informatiky Fakulta strojního inženýrství Vysoké učení technické v Brně Přednáška 3. z předmětu Počítače a grafika Ing. Radek Poliščuk, Ph.D. 1/17
Obsah přednášky Přednáška 3 3D grafika: Principy prostorového promítání 3D plochy a jejich napojování, Skrývání neviditelných hran, Metody stínování Aplikace textur, filtrování Technologie OpenGL a Direct3D 3D akcelerace Raytracing 2/17
Principy promítání Převážná většina trojrozměrné počítačové grafiky je založena na promítání trojrozměrných objektů na dvourozměrnou plochu výstupního zařízení: Axonometrie (rovnoběžná perspektiva): souřadnice x a y zobrazovaných objektů se promítají bez deformace, souřadnice z se promítají v daném poměru ax,ay do souřadnic xa, ya: xa = x + axz ya = y + ayz 3/17
Principy promítání Lineární perspektiva Abu Ali al-haṣan Ibn al-haitham al-basrí: 1015-21 Kitab al-manazir (Kniha optiky) Perspektivní projekce je definována průsečíkem obrazové roviny se spojnicí pozorovaného bodu a místa pozorovatele: procedure calc3d(x,z,y:real;var x3,y3:longint); //Xpoz, Ypoz, Zpoz: souřadnice pozorovatele //pfi, psi, pro: azimut, úhel elevace a náklon //zoom: poměrné zvětšení, typicky = 1 var xx,yy,zz,x1,y1,z1,xa,ya:real; begin X1 := Cos(psi)*X-Sin(psi)*Z; Z1 := Sin(psi)*X+Cos(psi)*Z; Y1 := Cos(pro)*Y-Sin(pro)*X1; Xx := Cos(pro)*X1+Sin(pro)*Y; Zz := Cos(pfi)*Z1-Sin(pfi)*Y1; Yy := Sin(pfi)*Z1+Cos(pfi)*Y1; Xa := ((Xpoz*Zz-Xx*Zpoz)/(Zz-Zpoz)); Ya := ((Ypoz*Zz-Yy*Zpoz)/(Zz-Zpoz)); x3:=trunc(round(cenx+xa*zoom)); y3:=trunc(round(ceny-ya*zoom)); end; tyto výpočty bývají HW akcelerovány pomocí Vertex Shaderů (vektory) a Transform and Lighting (3d 2d). 4/17
Definice 3D objektů Volumetrické modely: Tělesa jsou definována souvislou množinou svých objemových bodů ( Voxelů ) Vykreslování bod po bodu : Stereolitografie, Minecraft Plošné modely: 3D tělesa jsou definována množinou vrcholů svých povrchů (..teselace) plochy na povrchu tělesa ( faces ) jsou definována svými hranami a normálami; elementární plošky jsou trojúhelníky, dané souřadnicemi vrcholů ( vertices ). Obecné fyzikální modely: Raytracing 5/17
Definice 3D ploch Obecná síť Povrch objektu je definován množinou navazujících plošek (shodné souřadnice souvisejících vrcholů) Obtížná ruční definice, výhodné pro obecné 2D funkce a matematicky definovatelné primitivní objekty (grafické modeláře) Extruze povrch objektu je zadán obrysem čela a vektorem extruze Typickou aplikací jsou 3D písma Rotace povrch objektu je zadán křivkou radiálního řezu a úhly kruhové výseče (např. 0-360 ) 6/17
Napojování 3D ploch Obecná 3D rovina je dána bodem kterým prochází a jedinou normálou. Zakřivený povrch je dán řídícími body kterými prochází a normálami v nich. Ostré hrany na rovinné plošce: Normály u všech vrcholů jsou rovnoběžné. Hladce navazující hrany: Normály u hran sousedících ploch jsou shodné. Interpolace obecnými B-splajny. NURBS = NonUniform Rational B-Splines (CAD, OpenGL,..) 7/17
Vykreslování 3D ploch Drátěné modely: Nejprimitivnější, nejrychlejší, nejméně přehledné vykreslují se všechny zadané hrany, bez ohledu na pořadí. Skrývání hran (souvislá výplň buď barvou objektu a nebo pozadí): Odstranění ploch odvrácených, mimo záběr, zakrytých a příliš malých se provede roztříděním plošek dle vzdálenosti od pozorovatele (malířův algoritmus) a následným vykreslením odzadu dopředu (deferred rendering), nebo zmapováním scény pomocí z-bufferu: při vlastním vykreslování se plošky vyplňují barvou popředí jen tehdy, je-li hodnota v z-bufferu menší než aktuální výška objektu. Stínování (Shading): Výslednou barvu každého pixelu může korigovat: barva, intenzita a úhel dopadajícího osvětlení, spektrální odrazivost, úhel a průhlednost povrchu charakter (spektrální absorpce) prostředí dodatečné efekty (lens flare, blur, cel shading...) 8/17
Osvětlení 3D ploch Osvětlení 3D scény = ambientní + difuzní složky (+ pozadí): Pozadí: barva podkladové plochy v nekonečnu. Rozptýlené (ambientní) světlo: Konstantní barva a intenzita v celém prostoru, umožňuje i zobrazení zastíněných ploch a odlišení od pozadí osvětlíme-li scénu jen rozptýleným světlem, kresba objektů je dána jen barvou a sklonem jejich ploch vůči pozorovateli (+mlha a efekty). = Směrové (difuzní) a bodové/plošné/volumetrické zdroje Slouží ke zvýraznění scény odlišením zastíněných a osvětlených ploch, parametry odpovídají žárovce umístěné v prostoru : + poloha (X, Y, Z), spektrální intenzita ( barva světelného zdroje) konstantní pro zdroje v nekonečnu (významný je jen směr), u bodových světel klesající se (2.) mocninou vzdálenosti. 9/17
Metody stínování 3D ploch Ploché stínování (Flat Shading): Každý polygon je po celé ploše konstantně vyplněn svou barvou, korigovanou sumou intenzit světel a úhlem odrazu k pozorovateli. rychlé, ignoruje hladké hrany, umělý vzhled. Gouraudovo stínování (Henri Gouraud 1971): Vzhled se počítá pro každý vrchol polygonu zvlášť, barva výplně je v každém bodě určována interpolací BARVY vůči vrcholům. Rychlá technika, používaná pro nenáročné náhledy hladkých povrchů bez zrcadlových odrazů ( gumový model ). Phongovo stínování (Bui Truong Phong, 1973): Phongův osvětlovací model: k ambientnímu, difuznímu světlu a k barvě objektu přidává spekulární složku (přímé odrazy bodových zdrojů od povrchu) využíváno k fotorealistické simulaci různě hladkých povrchů (Blinn-Phong). 10/17
Výpočet odstínu výplně Výpočet odstínu výplně v daném bodě A pak vychází z následujícího vztahu a veličin: EA = EE + EGA + ΣL [ ul spot (ELA + ED max {L N, 0} + ES max {H.N, 0}S ) ], kde: EE EGA ELA ED ES u spot S V L N H je emisní barva materiálu, globální ambientní barva pozadí globální ambientní jas pozadí, ambientní barva daného světla ambientní jas, difuzní barva daného světla diffusní barva materiálu, spekulární barva světla spekulární barva materiálu, je koeficient útlumu světla se vzdáleností, určuje zda jde o bodové světlo, spekulární parametr, určující jak moc je daný povrch lesklý, jednotkový vektor ve směru A -> pozorovatel V, jednotkový vektor ve směru A -> zdroj světla L, jednotkový vektor dané plošky v bodě A, jednotkový vektor, ležící v aritmetickém průměru vektorů L a V. A 11/17
Texturování povrchu Mapování textur: namísto pevně zvolené barvy výplně je možné výchozí povrch objektu popsat bitmapou (= texturou, složenou z texelů ). každému texturovanému polygonu je nutné předepsat výchozí 2D transformaci použité textury (plocha, koule, válec...), vykreslení bodů 3D plochy už řeší použitý stínovací algoritmus. Filtrování textur (Mipmapping): Žádné (nejbližší soused): hrubé, vznik interferencí; Bilineární filtrace: lineární interpolace mezi body bitmapy; Trilineární filtrace: lineární filtrace i mezi různými rozlišeními; Anizotropické filtrování: úprava textur do nepravoúhlého tvaru. 12/17
Operace s texturami Bump mapping (James Blinn 1978) doplnění normálových parametrů Phongova stínování o zvlnění povrchu dané bitmapovou texturou. úspora paměti i výkonu, který by zabralo řešení ploch složených ze samostatných polygonů. Cel shading (SONY Playstation: Fear Effect, '2000): Filtrovací technika pro strojovou imitaci ručně stínované grafiky objekty by měly vypadat jako ruční perokresby, s konturami vyplněnými pár odstíny dané barvy. Hrany jsou zvýrazňovány na záhybech, kde plošky přechází od viditelných k neviditelným; barva výplně je při vykreslování prahována na zvolený počet úrovní (2-3). + další Pixel shadery (součást 3D API) 13/17
3D API OpenGL (Open Graphics Library neplést s Open Source:) Nejpoužívanější standard pro definici 2D a 3D grafiky prakticky 100% podpora v moderních grafických akcelerátorech a systémech (všichni významní výrobci jsou členy OpenGL Architecture Review Board). Jednoduché multiplatformní API + dokumentace => dostatek software; Knihovny GL (low level/kernel) a GLU (high-level/user mode utility, cca 250 příkazů), kromě standardních ( ARB ) rozšíření smí každý výrobce přidávat svá vlastní, více viz např. http://www.opengl.org MiniGL/GLIDE (3Dfx) optimalizovaná a minimální sada OpenGL instrukcí pro potřeby herního průmyslu podpora skončila pohlcením vývoje 3Dfx společností nvidia Corporation ('2000). Direct3D (Microsoft) Vlastní API spol. Microsoft pro 3D grafiku, součást technologií DirectX; Stále výrazná vazba na Hardware (re-inicializace při každé změně okna...), objektový přístup ke všem elementům (na začátku méně intuitivní ~ COM) DNES výkonově srovnatelné s OpenGL, specifické výhody obou rozhraní jsou však v posledních letech stírány multi-api high-level herními enginy. Podporu nových HW akceleračních funkcí definuje Microsoft, ne výrobci HW. METAL (Apple) API pro vývoj mobilních aplikací s minimální režií Render Man (Pixar Animation Studios): API pro off-line rendering, obdoba post-scriptu 14/17
3D akcelerace 3D Akcelerace = přesun celých(části) 3D výpočtů z CPU do grafické karty. Akcelerované operace: Vertex Shaders (geometrie 3D scény: z-buffer, texturování, stínování,...) Transform&Lightning(transformace 3D 2D, 1999 nvidia GeForce256), Bump mapping, HW 3D stíny ('2000 DX7, ATI RADEON 7000) Antialiasing (FSAA, Truform, vyhlazování Alpha-textur nvidia 7800,R520...) 2D a mezisnímkové efekty (lens flares, depth of field, motion blur, deinterlace) DX9: uživatelské Pixel Shadery (programovatelné operace na úrovni sprajtů) DX10, OpenGL3: Pixel Shader model v.2, CUDA, OpenCL... 3D akcelerátory/čipsety: 3Dfx (první 3D: Rush, Banshee, Voodoo, první SLI řešení...) Nvidia (řady TNT, GeForce) AMD (původně ATI Rage/Radeon) Matrox (spíš profesionální 2D řešení) VIA (převzatá technologie S3, low-end) PowerVR (různí výrobci - grafické čipy KYRO, dnes mobilní čipy)...? Ne vždy a ne ve všech 3D aplikacích je ale nutná 3D akcelerace videokarty... 15/17
Raytracing Fyzikálně správné fotorealistické výsledky = Raytracing: obraz se nevykresluje po ploškách, ale pixel po pixelu se trasují paprsky procházející obrazovou plochou (Field of View, FOW) a všemi objekty v obraze, dokud neskončí v nekonečnu a/nebo nezanikne. Zpětný chod pak určí výslednou barvu pixelu. Každé rozhraní kterým paprsek prochází je zadáno: texturou spektrální propustnosti (absorpce), texturou spektrální odrazivosti (reflektance), texturou spektrálního indexu lomu (refrakce), texturou povrchových nerovností (bump map) a spektrální intenzitou vyzařování světla (radiance). Jde o rekurentní a pomalý proces, který obchází běžně používané grafické akcelerační funkce. více viz např. http://www.cs.unc.edu/~rademach/xroads-rt/rtarticle.html http://www.povray.org/, http://madebyevan.com/webgl-path-tracing/ 16/17
Závěr přednášky Byl probrán úvod do následujících kapitol: Principy prostorového promítání 3D plochy a jejich napojování, Skrývání neviditelných hran, Metody stínování Aplikace textur, filtrování Technologie OpenGL a Direct3D 3D akcelerace Raytracing Námět na cvičení: Ukázky vybraných 3D aplikací 17/17