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

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

Mesh from file, OrthoCamera, PerspectiveCamera. Szécsi László 3D Grafikus Rendszerek 3. labor

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

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

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

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

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

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

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.

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

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

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

Számítógépes grafika

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

Tartalmi összefoglaló

Játékfejlesztés. Szirmay-Kalos László

Realisztikus színtér 1 / 59

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

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

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

Bevezetés a Programozásba II 11. előadás. Adatszerkezetek megvalósítása. Adatszerkezetek megvalósítása Adatszerkezetek

Bevezetés a CGI-be. 1. Történelem

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

Tartalom. Megjegyzések. Valasek Gábor Befoglaló keretek. Felosztások. Informatikai Kar

Nincs szinkronizáció és kommunikáció Csővezeték alkalmazása Párhuzamosítás

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

OpenGL Compute Shader-ek. Valasek Gábor


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

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

GPGPU. GPU-k felépítése. Valasek Gábor

Szirmay-Kalos László. L(x, ω)=l e (x,ω)+ L(h(x,-ω),ω) f r (ω,x, ω) cos θ dω A jobb oldali radiancia:

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

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?

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

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

Programozás II gyakorlat. 8. Operátor túlterhelés

Programozás alapjai II. (9. ea) C++ többszörös öröklés, cast, perzisztencia

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

Valasek Gábor

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

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

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

Bevezetés a C++ programozási nyelvbe

10. Koordinátageometria

Nyers légifotók feldolgozási lehetőségei ESRI platformon. CSUNDERLIK LÁSZLÓ GDi Esri

I. Vektorok. Adott A (2; 5) és B ( - 3; 4) pontok. (ld. ábra) A két pont által meghatározott vektor:

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

Diffúz fényvisszaverődések és kiterjedt fényforrások modellezése rekurzív sugárkövetéssel

Grafikus csővezeték 1 / 44

Gekkó GIS: Raszteres kísérletek webes környezetben

Tömbök kezelése. Példa: Vonalkód ellenőrzőjegyének kiszámítása

Körkörös listák. fej. utolsó. utolsó. fej

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

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

ISA szimulátor objektum-orientált modell (C++)

SZERVER OLDALI JAVASCRIPT. 3. hét Javascript nyelvi elemek

MATEMATIKA ÉRETTSÉGI TÍPUSFELADATOK MEGOLDÁSAI KÖZÉPSZINT Koordináta-geometria

Tartalom DCOM. Történeti áttekintés. Történeti áttekintés. Történeti áttekintés. Történeti áttekintés

end function Az A vektorban elõforduló legnagyobb és legkisebb értékek indexeinek különbségét.. (1.5 pont) Ha üres a vektor, akkor 0-t..

Fejezetek a számítógépi grafikából

117. AA Megoldó Alfréd AA 117.

3D Grafika+képszintézis

D3D, DXUT primer. Grafikus játékok fejlesztése Szécsi László t01-system

OAF Gregorics Tibor: Minta dokumentáció a 3. házi feladathoz 1.

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

Elemi Alkalmazások Fejlesztése II.

Vektorgeometria (2) First Prev Next Last Go Back Full Screen Close Quit

Hajder Levente 2016/2017.

PHP II. WEB technológiák. Tóth Zsolt. Miskolci Egyetem. Tóth Zsolt (Miskolci Egyetem) PHP II / 19

MATEMATIKA ÉRETTSÉGI TÍPUSFELADATOK MEGOLDÁSAI KÖZÉP SZINT. Koordináta-geometria

3D koordináta-rendszerek

Sergyán Szabolcs szeptember 21.

PHP5 Új generáció (2. rész)

Mátrixok 2017 Mátrixok

GRAFIKA PROGRAMOZÁSA OPTIMALIZÁLT MEGJELENÍTÉS ALAPJAI GYAKORLATI 2D GRAFIKA II. RÉSZ. Dr. Mileff Péter

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

Optimalizációs lehetőségek sugárkövetéses képmegjelenítésben. Diplomamunka

Raytracing tutorial, avagy suga rko vete s alapfokon

BME MOGI Gépészeti informatika 15.

Access adatbázis elérése OLE DB-n keresztül

Minták automatikus osztályba sorolása a mintát leíró jellemzők alapján. Típusok: felügyelt és felügyelet nélküli tanuló eljárások

MATEMATIKA ÉRETTSÉGI TÍPUSFELADATOK MEGOLDÁSAI KÖZÉP SZINT Koordináta-geometria

Számítógépes Grafika mintafeladatok

Felügyelt önálló tanulás - Analízis III.

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

A 3D-2D leképezés alatt melyek maradnak robusztus képjellemzők?

A MATLAB alapjai. Kezdő lépések. Változók. Aktuális mappa Parancs ablak. Előzmények. Részei

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

tétel: különböző típusú adatokat csoportosít, ezeket egyetlen adatként kezeli, de hozzáférhetünk az elemeihez is

Java Programozás 4. Gy: Java GUI. Tipper, MVC kalkulátor

Programozás C++ -ban

Java Programozás 11. Ea: MVC modell

Számítógépes Grafika mintafeladatok

JavaScript bűvésztrükkök, avagy PDF olvasó és böngésző hackelés

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)

Készítette:

Programozás II gyakorlat. 6. Polimorfizmus

Átírás:

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

Egyszerű árnyaló FS legyen egy fényirány-vektor normálvektor és fényirány közötti szög koszinusza az irradiancia textúrából olvasott színt szorozzuk ezzel

Várt eredmény

Feladat pontfényforrás uniform pozíció, teljesítmény diffúz + Phong-Blinn BRDF uniform kd, ks, gamma per-pixel lighting worldnormal normalizálása, viewdir, lightdir számítása keringő fényforrás pozíció változtatása minden frameben

Environment mapping doboztextúra betöltése új FS ami kiszámolja az ideális visszaverődési irányt és kiolvassa a textúrát

TextureCube.js - betöltés const TextureCube = function(gl, mediafileurls) { gl.pendingresources[mediafileurls[0]] = ++gl.pendingresources[mediafileurls[0]] 1; this.mediafileurls = mediafileurls; this.gltexture = gl.createtexture(); this.loadedcount = 0; this.images = []; var thetexture = this; for(let i=0; i<6; i++){ this.images[i] = new Image(); this.images[i].onload = function() { thetexture.loaded(gl); } this.images[i].src = mediafileurls[i]; } };

TextureCube.js erőforrás létrehozása TextureCube.prototype.loaded = function(gl){ this.loadedcount++; if(this.loadedcount < 6) return; gl.bindtexture(gl.texture_cube_map, this.gltexture); for(var i=0; i<6; i++){ gl.teximage2d(gl.texture_cube_map_positive_x+i, 0, gl.rgba, gl.rgba, gl.unsigned_byte, this.images[i]); } gl.texparameteri(gl.texture_cube_map, gl.texture_mag_filter, gl.linear); gl.texparameteri(gl.texture_cube_map, gl.texture_min_filter, gl.linear_mipmap_linear); gl.generatemipmap(gl.texture_cube_map); gl.bindtexture(gl.texture_cube_map, null); if( --gl.pendingresources[this.mediafileurls[0]] === 0 ) { delete gl.pendingresources[this.mediafileurls[0]]; } };

Tükröző objektum létrehozása fragment shader // kell egy sampler uniform uniform samplercube envmaptexture; // kiolvasni a tükörirányban texturecube( envmaptexture, reflect(-viewdir, normal)) gyártsuk le a TextureCube-ot, kössük be a fenti FS-t használó Material-ba, a GameObject használja ezt az anyagot this.skycubetexture = new TextureCube(gl, [ "media/posx512.jpg", "media/negx512.jpg", "media/posy512.jpg", "media/negy512.jpg", "media/posz512.jpg", "media/negz512.jpg",] ); this.slowpokematerial0. envmaptexture.set ( this.skycubetexture);

Várt eredmény higany pokemon visszaveri a környezetét de maga a környezet nem látszik

RayDir mátrix számítása PerspectiveCamera.prototype.updateRayDirMatrix = function(){ // önállóan megoldandó feladat // már nem ér rá annyira // az env mapping háttérhez kell most };

Sugárirány kiszámítása NDC-ből (EVP) -1 -et nevezzük raydirmatrix-nak

Környezet megjelenítése háttérként teljes képernyős téglalapot kell rajzolni (hurrá!) új VS: kiszámolja a sugárirányt át kell adni a képernyőkoordinátából-világkoordinátamínusz-szempozíció-számító mátrixot (a.k.a. raydirmatrix) a kamera ezt kiszámolja nem transzformál (mert full viewport quad) z=0.99999, minden mőgé FS megkapja a VS-től varying-ben a sugárirányt ezzel címzi a textúrát visszaadja a kapott színt

Ne felejtsük el a GameObject adja át a raydirmatrix-ot az új shadereket vegyük be az index.html-be gyártsuk le szükséges shader, program, material objektumokat ugyanazt a doboztextúrát kössük be a háttér anyagába, mint amit a tükröző objektuméba legyen quadgeometry legyen egy mesh a quadgeometry és a fenti material használatával legyen egy gameobject a mesh-sel

Várt eredmény tükröző objektum és háttér

Házi feladat procedurális normal mapping zajfüggvény: random (de fix) irányok mentén koszinuszok összege normálvektor perturbációja zajfüggvény gradiensével env mappinggel kombinálva (háttér is kell)

Egyszerű zaj float snoise(vec3 r) { vec3 s = vec3(7502, 22777, 4767); float f = 0.0; for(int i=0; i<16; i++) { f += sin( dot(s - vec3(32768, 32768, 32768), r) / 65536.0); s = mod(s, 32768.0) * 2.0 + floor(s / 32768.0); } return f / 32.0 + 0.5; }

Egyszerű zaj gradiense vec3 snoisegrad(vec3 r) { vec3 s = vec3(7502, 22777, 4767); vec3 f = vec3(0.0, 0.0, 0.0); for(int i=0; i<16; i++) { f += cos( dot(s, r - vec3(32768, 32768, 32768)) / 65536.0) * s; s = mod(s, 32768.0) * 2.0 + floor(s / 32768.0); } return f / 65536.0; }