Ú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.
Počítače & grafika, přednáška 3.
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
Počítače & grafika, přednáška 3.
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
Počítače & grafika, přednáška 3.
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“ (3d2d). Počítače & grafika, přednáška 3.
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
Počítače & grafika, přednáška 3.
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°)
Počítače & grafika, přednáška 3.
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,..)
Počítače & grafika, přednáška 3.
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...)
Počítače & grafika, přednáška 3.
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.
Počítače & grafika, přednáška 3.
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).
Počítače & grafika, přednáška 3.
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 Počítače & grafika, přednáška 3.
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.
Počítače & grafika, přednáška 3.
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)
Počítače & grafika, přednáška 3.
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 Počítače & grafika, přednáška 3.
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... Počítače & grafika, přednáška 3.
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/
Počítače & grafika, přednáška 3.
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í Počítače & grafika, přednáška 3.
17/17