A bemutatott példa a Phong modell egy egyszerűsített változatát alkalmazza a Blinn-Phong-féle megközelítést

Hasonló dokumentumok
Maga a tématerület így nagyon nagy. A fények pontos fizikai szimulációja kimondottan számításigényes

Árnyalás, env mapping. Szécsi László 3D Grafikus Rendszerek 3. labor

1. Bevezetés 1. Köszönetnyilvánítás A számítógépes játékfejlesztésről 3

Textúrák. Szécsi László

Máté: Számítógépes grafika alapjai

Számítógépes Graka - 4. Gyak

Számítógépes grafika

2. Generáció ( ) 3. Generáció (2001) NVIDIA TNT2, ATI Rage, 3dfx Voodoo3. Klár Gergely

Hajder Levente 2017/2018. II. félév

Tartalom. Tartalom. Anyagok Fényforrás modellek. Hajder Levente Fényvisszaverési modellek. Színmodellek. 2017/2018. II.

Nem fotorealisztikus megjelenítés OpenGL segítségével

SZE, Doktori Iskola. Számítógépes grafikai algoritmusok. Összeállította: Dr. Gáspár Csaba. Felületmegjelenítés

Transzformációk. Grafikus játékok fejlesztése Szécsi László t05-transform

Grafikus csővezeték (Általános áttekintés) Grafikus csővezeték (Általános áttekintés)

Információ megjelenítés Számítógépes ábrázolás. Dr. Iványi Péter

Klár Gergely 2010/2011. tavaszi félév

Számítógépes grafika

Plakátok, részecskerendszerek. Szécsi László

Máté: Számítógépes grafika alapjai

Információ megjelenítés Számítógépes ábrázolás. Dr. Iványi Péter

Farkas Gyula Szakkollégium Bit- és számtologatók. DirectX9 1. Szín, fény, textúra 2. Stencil buffer használata (tükörkép, hamis árnyék)

Láthatósági kérdések

Renderelés megjelenésmódok, fények, anyagjellemzők

A számítógépes grafika inkrementális képszintézis algoritmusának hardver realizációja Teljesítménykövetelmények:

HLSL programozás. Grafikus játékok fejlesztése Szécsi László t06-hlsl

Realisztikus színtér 1 / 59

SDL_Universe SDL, C++, 3D szoftver renderelő

Transzformációk. Szécsi László

A számítógépes grafika alapjai kurzus, vizsgatételek és tankönyvi referenciák 2014

Tartalomjegyzék. Köszönetnyilvánítás... xv. Előszó... xvii. 1. Bevezető D-történelem Matematikai alapok... 7

GPGPU alapok. GPGPU alapok Grafikus kártyák evolúciója GPU programozás sajátosságai

Sugárkövetési algoritmusok (2. rész)

Grafikus csővezeték 1 / 44

x = cos αx sin αy y = sin αx + cos αy 2. Mi a X/Y/Z tengely körüli forgatás transzformációs mátrixa 3D-ben?

OpenGL Compute Shader-ek. Valasek Gábor

Tanács Attila. Képfeldolgozás és Számítógépes Grafika Tanszék Szegedi Tudományegyetem

Ismerkedjünk tovább a számítógéppel. Alaplap és a processzeor

Grafikus csővezeték és az OpenGL függvénykönyvtár

OTKA Nyilvántartási szám: T ZÁRÓJELENTÉS

Számítógépes Grafika mintafeladatok

Valasek Gábor

Információ megjelenítés Számítógépes ábrázolás. Dr. Iványi Péter

1. Fénysugár követő és festő algoritmus (3p) fénysugárkövető módszer Festő algoritmus: 2. Fények, fény, fény az opengl-ben, anyagtulajdonság (12pt)

Eredmények, objektumok grafikus megjelenítése 3D felületek rajzoló függvényei.. Beépített 3D felületek rajzoló függvényei

Nagy pontosságú 3D szkenner

2D képszintézis. Szirmay-Kalos László

Hajder Levente 2017/2018. II. félév

Közfoglalkoztatás támogatás megállapítását segítő segédtábla használati útmutatója

Máté: Számítógépes grafika alapjai

Grafikonok automatikus elemzése

Az objektum leírására szolgálnak. Mire jók? Sokszor maga a jellemző az érdekes: Tömörítés. Objektumok csoportosítására

Grafika programozása

HLSL programozás. Szécsi László

Algoritmusok raszteres grafikához

GPU Lab. 14. fejezet. OpenCL textúra használat. Grafikus Processzorok Tudományos Célú Programozása. Berényi Dániel Nagy-Egri Máté Ferenc

Területi primitívek: Zárt görbék által határolt területek (pl. kör, ellipszis, poligon) b) Minden belső pont kirajzolásával (kitöltött)

Optika és Relativitáselmélet II. BsC fizikus hallgatóknak

sallang avagy Fordítótervezés dióhéjban Sallai Gyula

Tartalmi összefoglaló

A CUDA előnyei: - Elszórt memória olvasás (az adatok a memória bármely területéről olvashatóak) PC-Vilag.hu CUDA, a jövő technológiája?!

Számítógép-rendszerek fontos jellemzői (Hardver és Szoftver):

Klár Gergely 2010/2011. tavaszi félév

Hajder Levente 2016/2017.

Direct3D pipeline. Grafikus játékok fejlesztése Szécsi László t03-pipeline

Gyalogos elütések szimulációs vizsgálata

1.1 Emisszió, reflexió, transzmisszió

2.1.A SZOFTVERFEJLESZTÉS STRUKTÚRÁJA

HARDVERESEN GYORSÍTOTT 3D/2D RENDERELÉS

Számítógépes grafika. XIV. rész

Sergyán Szabolcs szeptember 21.

Féléves feladat. Miről lesz szó? Bemutatkozás és követelmények

7. Koordináta méréstechnika

Fraktálok és káosz. Szirmay-Kalos László

Párhuzamos és Grid rendszerek

Képrekonstrukció 3. előadás

Kinematika: A mechanikának az a része, amely a testek mozgását vizsgálja a kiváltó okok (erők) tanulmányozása nélkül.

Megoldás: Mindkét állítás hamis! Indoklás: a) Azonos alapú hatványokat úgy szorzunk, hogy a kitevőket összeadjuk. Tehát: a 3 * a 4 = a 3+4 = a 7

A Föld középpontja felé szabadon eső test sebessége növekszik, azaz, a

Tartalom. Tartalom. Raycasting. Hajder Levente 2017/2018. II. félév. Raycasting. Raycasting. Sugár és háromszög metszéspontja

Spektrográf elvi felépítése. B: maszk. A: távcső. Ø maszk. Rés Itt lencse, de általában komplex tükörrendszer

015 - Textúrakezelés Cycler Render Engine-ben

1. ábra. 24B-19 feladat

Akusztikai tervezés a geometriai akusztika módszereivel

Elengedhetetlen a játékokban, mozi produkciós eszközökben Nélküle kvantum hatás lép fel. Az objektumok áthaladnak a többi objektumon

1. Olvassuk be két pont koordinátáit: (x1, y1) és (x2, y2). Határozzuk meg a két pont távolságát és nyomtassuk ki.

Klár Gergely Informatikai Kar. 2010/2011. tavaszi félév

Algoritmusok Tervezése. 6. Előadás Algoritmusok 101 Dr. Bécsi Tamás

Közfoglalkoztatás támogatás megállapítását segítő segédtábla használati útmutatója

Diszkréten mintavételezett függvények

3D-s számítógépes geometria és alakzatrekonstrukció

A +Q töltés egy L hosszúságú egyenes szakasz mentén oszlik el egyenletesen (ld ábra ábra

14.2. OpenGL 3D: Mozgás a modellben

First Prev Next Last Go Back Full Screen Close Quit. (Derivált)

2014/2015. tavaszi félév

9. Trigonometria. I. Nulladik ZH-ban láttuk: 1. Tegye nagyság szerint növekvő sorrendbe az alábbi értékeket! Megoldás:

Eredmények, objektumok grafikus megjelenítése 3D felületek rajzoló függvényei

2.3 Mérési hibaforrások

Tartalom. Tartalom. Hajder Levente 2018/2019. I. félév

Navigáci. stervezés. Algoritmusok és alkalmazásaik. Osváth Róbert Sorbán Sámuel

Tartalom. Hajder Levente 2016/2017. I. félév

Átírás:

Dr. Mileff Péter 2 Pontosabb vertex shader alapú árnyalás Phong-féle Cél: A korábbi modelltől komplexebb árnyalási modell áttekintése és megvalósítása, ahol már felhasználjuk a felület anyagtulajdonságait is. Vertex shader alapú számítás A bemutatott példa a Phong modell egy egyszerűsített változatát alkalmazza a Blinn-Phong-féle t 3 a specular komponenst arányos a fény visszaverődési és a fény vektorok által bezárt szög koszinuszával Jelölés: L jelenti azt a fény felől érkező vektort, amely a vertex-re esik. N a vertek normálisa, Eye vektor a vertex-ből a szembe mutat (kamera vektor), R az L vektor visszavert komponense. Az árnyalás specular intenzitása a koszinusz alfával egyezik meg. 4 1

Phong-féle Phong-féle Ha az Eye vektor éppen egybeesik a visszaverődési vektorral, akkor maximális specular intenzitást kapunk (cos(0)). Ahogyan az Eye vektor távolodik az R vektortól úgy változik ( bomlik ) az árnyalás specular komponense. Ezt a változást egy úgynevezett Shininess faktor határozza meg. Fényerősség faktora Minél magasabb ez a faktor, annál hamarabb gyorsabb a változás (eltűnés). Az OpenGL ezt a shininess értéket 0 és 128 tartomány között értelmezi. Shininess = 8 Shininess = 64 Shininess = 128 5 6 Phong-féle R vektor kiszámítása: A spekuláris komponens kiszámítása az OpenGL Phong modellje alapján: Blinn-Phong-féle A Phong modell egyszerűsítése Újítása: bevezetett egy gyorsabb és egyszerűbb algoritmust az árnyalás számítására az úgynevezett fél vektor (half-vector) alkalmazásával. Értelmezés: s kitevő jelenti a shininess értéket, L s a spekuláris fény intenzitása M s pedig az anyag spekuláris komponense 7 8 2

Blinn-Phong-féle A spekuláris komponens intenzitása: a normálvektor(n) és a félvektor (H) által bezárt szög koszinuszaként számítjuk ki. A H vektor formulája így lényegesen egyszerűbb, mint a valós Phong modellben lévő R vektoré: A spekuláris komponens ez alapján: Példa shader program Vertex árnyaló: void main() { vec3 normal, lightdir, viewvector, halfvector; vec4 diffuse, ambient, globalambient, specular = vec4(0.0); float NdotL,NdotHV; /* first transform the normal into eye space and normalize the result */ normal = normalize(gl_normalmatrix * gl_normal); /* now normalize the light's direction. */ lightdir = normalize(vec3(gl_lightsource[0].position)); A GLSL lehetőséget ad a félvektor kiszámítására is. /* compute Lambert factor and clamp the result to the [0,1] range. */ NdotL = max(dot(normal, lightdir), 0.0); 9 10 Példa shader program Példa shader program Vertex árnyaló (folyt.): } /* Compute the diffuse, ambient and globalambient terms */ diffuse = gl_frontmaterial.diffuse * gl_lightsource[0].diffuse; ambient = gl_frontmaterial.ambient * gl_lightsource[0].ambient; globalambient = gl_lightmodel.ambient * gl_frontmaterial.ambient; /* Compute the specular term if NdotL is larger than zero */ if (NdotL > 0.0) { NdotHV = max(dot(normal, normalize(gl_lightsource[0].halfvector.xyz)),0.0); specular = gl_frontmaterial.specular * gl_lightsource[0].specular * pow(ndothv,gl_frontmaterial.shininess); } /* Construct vertex front color */ gl_frontcolor = globalambient + NdotL * diffuse + ambient + specular; gl_position = ftransform(); Fragment árnyaló: void main(){ gl_fragcolor = gl_color; } 11 12 3

Eredmény 13 14 (fregmentumonkénti) (fregmentumonkénti) Jellemzője: nem a vertex-ekben számoljuk ki az intenzitás értéket, csak az ahhoz szükséges vektorokat határozzuk meg. Ezeket interpoláljuk a vertexek között elhelyezkedő pixelekre. Tehát az intenzitásokat így pixelenként számítjuk ki! Eredménye: jelentős minőségi javulást eredményez a vertex alapú megoldásokhoz képest. A megoldás jóval lassabb. Példa: pontszerű fényforrás alkalmazása Értelmezése: létezik egy pont, maga a fényforrás, ahonnan a sugarak minden irányba indulnak. A sugarak intenzitása, a tárgyakon érzékelhető fény erőssége függ a fényforrás távolságától. A megvalósítás során tehát ezt a két különbséget kell figyelembe venni. Az első különbség orvoslása: minden vertex-re kiszámoljuk a vertex és a fényforrás különbségének vektorát. Tehát az objektumra nem fog párhuzamosan esni a fény. 15 16 4

(fregmentumonkénti) (fregmentumonkénti) A fény távolságtól függő intenzitása: Egy pixel színének kiszámítása tehát: light attenuation k 0 a konstans, a k 1 a lineáris, a k 2 pedig a kvadratikus lecsengés faktora, d a vertex fénytől való távolsága. A lecsengés értékének számítása: Nem tudjuk a vertex árnyaló segítségével kiszámítani és annak interpolált értékét felhasználni a fragment árnyalóban, Oka: nem lineárisan változik a távolsággal. De a vertex árnyalóban kiszámított távolság interpolált értékeit felhasználhatjuk a fragment árnyalóban a lecsengés kiszámítására Globális megvilágítás Távolság függvényében változó tag 17 18 (vertex árnyaló) (vertex árnyaló) varying vec4 diffuse,ambientglobal,ambient; varying vec3 normal,lightdir,halfvector; varying float dist; /* Normalize the halfvector to pass it to the fragment shader */ halfvector = normalize(gl_lightsource[0].halfvector.xyz); void main() { vec4 ecpos; vec3 aux; /* first transform the normal into eye space and normalize the result */ normal = normalize(gl_normalmatrix * gl_normal); /* Compute the point type light's direction */ ecpos = gl_modelviewmatrix * gl_vertex; aux = vec3(gl_lightsource[0].position-ecpos); lightdir = normalize(aux); Pontszerű fényforrás értékeinek számítása Vertexen-ként } /* Compute the diffuse, ambient and globalambient terms */ diffuse = gl_frontmaterial.diffuse * gl_lightsource[0].diffuse; ambient = gl_frontmaterial.ambient * gl_lightsource[0].ambient; ambientglobal = gl_lightmodel.ambient * gl_frontmaterial.ambient; gl_position = ftransform(); 19 20 5

(pixel árnyaló) varying vec4 diffuse,ambientglobal, ambient; varying vec3 normal,lightdir,halfvector; varying float dist; void main() { vec3 n,halfv,viewv; float NdotL,NdotHV,att; vec4 color = ambientglobal; n = normalize(normal); /* compute the dot product between normal and lightdir */ NdotL = max(dot(n,normalize(lightdir)),0.0); } (pixel árnyaló) /* Calculate attenuation */ att = 1.0 / (gl_lightsource[0].constantattenuation + gl_lightsource[0].linearattenuation * dist + gl_lightsource[0].quadraticattenuation * dist * dist); color += att * (diffuse * NdotL + ambient); halfv = normalize(halfvector); NdotHV = max(dot(n,halfv),0.0); color += att * gl_frontmaterial.specular * gl_lightsource[0].specular * pow(ndothv,gl_frontmaterial.shininess); gl_fragcolor = color; 21 22 Eredmény Egyszerű árnyalás Vertex-enkéntienkénti árnyalás 23 24 6

Fénytérképek Szegény ember megvilágítási modellje A mai játékok grafikai világa komplex a megvilágítás kiszámítása jelentős számításigénnyel rendelkezik. Az egyszerre megjelenített poligonok száma elérheti az 1 milliót is, melyeket a színtértől és a valósághűbb modellezéstől függően egyszerre több fényforrás is megvilágíthat. A korai számítógépek (kb. 1997-2006) erőforrásai jelentősen korlátozva voltak Emiatt alternatív megvilágítási modellre volt szükség a központi processzor és a GPU tehermentesítésére Lightmapping (fénytérképek) 25 26 Fénytérképek Fénytérkép: valójában olyan textúrák, amelyek az adott falrészletre eső fény intenzitását tárolják. Diffúz textúra Fénytérkép Mixelt textúra Alkalmazásuk: Fénytérképek előre kiszámítjuk (nem valós időben) a vertexek megvilágítottságát a fény és a vertex távolságából, ezek összességét egy vagy több textúrában tároljuk el. A folyamat egy mintavételezési eljárás bejárjuk a poligont és megnézzük, hogy melyik elemre milyen intenzitású fény esik. Minél kisebb a bejárás egysége, annál részletesebb textúrát kapunk. Megjelenítés menete: a textúrát, vagy textúrákat használjuk fel a felület kirajzolás során egy plusz textúraként Multitexturing így szimulálva a megvilágítást 27 28 7

A megoldás előnye: Fénytérképek alacsony teljesítménnyel rendelkező számítógépeken is képes volt megfelelő sebességet nyújtani. Az akkori hardverek több textúrát már képesek voltak gyorsan kezelni, így kiváló megoldás jelentett a statikus fények modellezésére. A megoldás hátránya: az előre generált fények miatt a megvilágítás statikus Dinamikus fények (pl. mozgó lámpa) megvalósítására nem alkalmas. Az első számítógépes játék, amely ilyen technikát alkalmazott a Quake volt 1996 még GPU nélkül Ettől fogva egyeduralkodóvá vált a játékszoftverekben. Fénytérképek tárolása Több megoldás is kialakult. A leginkább elterjedt: a virtuális világ teljes fénytérképét egy nagy (pl. 2048x2048) textúrában tárolják le megjelenítés során az u,v koordináták alapján kerülnek a megadott részek a megadott falra. E technika hátránya: ha a bejárható világ mérete nagy, sok esetben egy textúra már nem elegendő. Sok játékoknál azonban kis fénytérkép méret nem jelent problémát kirajzolás közben a GPU elnyújtotta azt bilineáris (vagy trilineáris) szűrést is végrehajtva. A végeredmény tehát elmosódik. Az eredeti textúrával összetéve általában ez nem jelent gondot, hiszen a valós életben is sok árnyék széle elmosódott. 29 30 Fénytérképek a mai játékokban Fénytérképek a mai játékokban A mai játékok komplexek sok vertek, magas képi minőség A fejlődés során látszik az eltolódás a valósidejűség felé Egyre több dinamikus fényforrással dolgoznak a játékok Cél az egyensúly megtalálása: a minőség és a teljesítmény között Nem biztos, hogy célszerű csak dinamikus fényforrásokkal dolgozni. A jó minőségű fénytérképek megjelenítése sokkal kevesebb teljesítményt igényel még ma is! A fénytérképek szükségesek: Alátámasztja a tényt, hogy minden mai modern grafikus motorban és szerkesztő szoftverben megtalálható pl. Unity, Unreal, CryEngine, Blender, 3D Studio) Egyszerűbb/célszerűbb egy világot fénytérképekkel és néhány fénnyel megvalósítani mint fények százaival dolgozni, azt optimalizálni, máshonnan erőforrást elvenni. A mobil és tábla eszközök térnyerése: az alacsonyabb számítási kapacitás miatt a technika újból fénykorát éli. 31 32 8

33 34 Fénytérképezett modell 35 Modell fénytérképe 36 9

37 10