Színek és megvilágítás

Slides:



Advertisements
Hasonló előadás
Az optikai sugárzás Fogalom meghatározások
Advertisements

L ÁTHATÓSÁG MEGHATÁROZÁSA tavaszi félév.
BSP-fák használata játék- engine fejlesztésében a nagy kiterjedésű zárt terek megjelenítéséhez Előadó: Boromissza Gergely Konzulens: dr. Szirmay-Kalos.
1 AIBO Robotfoci Bodor László IAR Bevezetés AIBO RoboCup AIBO RoboCup Célok Célok Rendszer elemei Rendszer elemei Megvalósítás terve Megvalósítás.
A színek számítógépes ábrázolásának elve
Árnyalás – a felületi pontok színe A tárgyak felületi pontjainak színezése A fényviszonyok szerint.
 Árnyalási egyenlet  Saját emisszió  Adott irányú visszaverődés.
2D képszintézis Szirmay-Kalos László.
Globális illumináció (GI)
Inkrementális 3D képszintézis
Geometriai modellezés
Sugárkövetés: ray-casting, ray-tracing
Inkrementális 3D képszintézis Szirmay-Kalos László.
3D képszintézis fizikai alapmodellje
2D képszintézis Szirmay-Kalos László. Számítógépes grafika feladata képszintézis Virtuális világ modell modellezés Metafórák: 2D rajzolás világ = sík.
Geometriai modellezés
Számítógépes grafika Szirmay-Kalos László
Sugárkövetés: ray-casting, ray-tracing Szirmay-Kalos László.
Számítógépes grafika Szirmay-Kalos László
3D képszintézis fizikai alapmodellje
Grafikus játékok fejlesztése Szécsi László g11-physics
Számítógépes grafika, PPKE-ITK, Benedek Csaba, D képszintézis 4. előadás.
Számítógépes grafika, PPKE-ITK, Benedek Csaba, 2010 Geometriai modellezés 2. előadás.
Hősugárzás Radványi Mihály.
A számítógépes grafika céljai és feladatai
A számítógépes grafika céljai és feladatai
A virtuális technológia alapjai Dr. Horváth László Budapesti Műszaki Főiskola Neumann János Informatikai Kar, Intelligens Mérnöki Rendszerek.
Hang, fény jellemzők mérése
2D képszintézis és textúrák
Színes világban élünk.
6. A 3D grafika alapjai 6.1. A 3D szerelőszalag fölépítése
Számítógépes grafika 5. gyakorlat. Előző órán Textúrázási módok Pixel shader használata.
Számítógépes Grafika Megvilágítás Programtervező informatikus (esti)‏
Alapfogalmak III. Sugárzástechnikai fogalmak folytatása
Fraktálok Szirmay-Kalos László.
Sugárkövetés: ray-casting, ray-tracing
Vektorok különbsége e-x = [ex-xx ey-xy ez-xz] e e-x x szempozíció
Sugárkövetés: ray-casting, ray-tracing
2D képszintézis Szirmay-Kalos László.
Analitikus geometria gyorstalpaló
Inkrementális 3D képszintézis Szirmay-Kalos László.
Számítógépes grafika Bevezetés
3D képszintézis fizikai alapmodellje Szirmay-Kalos László Science is either physics or stamp collecting. Rutherford.
Árnyalás – a felületi pontok színe A tárgyak felületi pontjainak színezése A fényviszonyok szerint.
4.6. A Fénysugár-követés módszere (ray-tracing) Mi látható a képernyőn, egy-egy képpontban ? (4.4.LÁTHATÓSÁG) A képponton át a szembe jutó fénysugár melyik.
Sugárkövetés: ray-casting, ray-tracing Szirmay-Kalos László.
Árnyalás – a felületi pontok színe A tárgyak felületi pontjainak színezése A fényviszonyok szerint.
Fotorealisztikus képszintézis valós időben Szirmay-Kalos László, Csébfalvi Balázs BME IIT.
Számítógépes grafika, PPKE-ITK, Benedek Csaba, 2010 Színek és megvilágítás 5. előadás.
A mozgás egy E irányú egyenletesen gyorsuló mozgás és a B-re merőleges síkban lezajló ciklois mozgás szuperpoziciója. Ennek igazolására először a nagyobb.
Számítógépes grafika, PPKE-ITK, Benedek Csaba, 2010 Geometriai modellezés 2. előadás.
Máté: Orvosi képfeldolgozás12. előadás1 Regisztrációs probléma Geometriai viszony meghatározása képek között. Megnevezései: kép regisztráció (image registration),
Készült a HEFOP P /1.0 projekt keretében
Máté: Orvosi képfeldolgozás12. előadás1 Három dimenziós adatok megjelenítése Metszeti képek transzverzális, frontális, szagittális, ferde. Felület síkba.
4.6. A Fénysugár-követés módszere (ray-tracing) Mi látható a képernyőn, egy-egy képpontjában ? És az ott milyen színű ? (4.7. Árnyalás)
A számítógépes grafika alapjai, PPKE-ITK, Benedek Csaba, 2010 Tanagyag forrás © Szirmay-Kalos László, BME A számítógépes grafika céljai és feladatai 1.
Alapfogalmak BME-VIK.
Vizualizáció és képszintézis
Világítás tervezése excelben Hangolható LED-es világítás.
6. A 3D grafika alapjai 6.1. A 3D szerelőszalag fölépítése 6.2. Térbeli alakzatok képe 6.3. Térbeli képelemek és modell-adatszerkezetek 6.4. Képelemek.
A színes képek ábrázolása. A szín A szín egy érzet, amely az agy reakciója a fényre. Az elektromágneses sugárzás emberi szem által látható tartományba.
3D grafika összefoglalás
Global Illumination.
Vizualizáció és képszintézis
Fizika 2i Optika I. 12. előadás.
6. A 3D grafika alapjai 6.1. A 3D szerelőszalag fölépítése
6. A 3D grafika alapjai 6.1. A 3D szerelőszalag fölépítése
Árnyalás - a képpontok színe.
6. A 3D grafika alapjai 6.1. A 3D szerelőszalag fölépítése
Sugármetszés implicit szintfelülettel
Előadás másolata:

Színek és megvilágítás 5. előadás Számítógépes grafika, PPKE-ITK, Benedek Csaba, 2012

Emlékeztető…. illúzió számok modellezés Virtuális világ modell képszintézis számítás Metafórák: optika 2D rajzolás festés analógiák Képpontok: vörös kék zöld mérés Számítógépes Grafika 2010, PPKE ITK, Benedek Csaba Tanagyag forrás ® Szirmay-Kalos László, BME

Modellezés kép (sorozat) megvilágítás mozgás geometria stúdió modell képszintézis modell stúdió objektumok kamera Szín, anyag - most (textúrák : jövő órán) kép (sorozat) Számítógépes Grafika 2012, PPKE ITK, Benedek Csaba

Képszintézis feladatai Vektorizáció Transzformációk Vágás Takarás Árnyalás Számítógépes Grafika 2012, PPKE ITK, Benedek Csaba

Árnyalás A látszódó objektum adott képpontban érvényes színének meghatározása 2-D grafika: saját szín alkalmazása saját anyag + a térben fennálló fényviszonyok együttes függvénye 3-D grafika: az objektumról a kamerába jutó fény a térben lévő anyagok optikai tulajdonságainak és a fényforrásoknak a függvénye Zöld hal „Sárga” tórusz Számítógépes Grafika 2012, PPKE ITK, Benedek Csaba

Színkezelés alapjai a 3D grafikában Számítógépes Grafika 2012, PPKE ITK, Benedek Csaba Tanagyag forrás ® Szirmay-Kalos László, BME

Fotometriai alapok  Fény = elektromágneses hullámok szuperpozíciója Fényforrás jellemzője: F() spektrális energia eloszlás időegységre eső kibocsátott energia (tehát: teljesítmény) „sűrűsége” az adott hullámhosszon (analógia: folytonos valószínűségi változó sűrűségfüggvénye) A fényforrás által l1 és l2 hullámhosszok között kibocsátott teljesítmény A fényforrás összteljesítménye: F() 

Színelméleti alapok   Fény - Színérzet Összetett fény: „sok hullámhossz” Monokromatikus fény: csak egyféle hullámhosszú összetevő „Dirac-delta” függvény: F() = Fc d(l) Érzékelés 3 érzékelővel: tristimulus értékek ugyanazt a színérzetet többféle keverék-fénynyaláb is adhatja  

Színérzékelés: monokromatikus fény F()=d()   nm  444 526 645 400 700 500 600 r() g() b() színérzet: r, g, b 2 1  r, g, b

Színérzékelés: nem monokromatikus fény Egységnyi energiájú monokromatikus színillesztés: Nem monokromatikus eset: F ()=d() r = r (), g= g (), b=b () F() = =  F () d() d  F () r =  F () r () d  g =  F () g () d  b =  F () b () d  

Spektrális színkezelés R, G, B színillesztés model  R, G, B kép Képszintézis sok hullámhosszon Látható spektrum 

Nem spektrális színkezelés R, G, B színillesztés model R, G, B  Akkor pontos, ha a képszintézis „lineáris” Képszintézis 3 hullámhosszon R, G, B színillesztés ??? R, G, B R,G,B kép 

Színek definiálása

Képszintézis = valós világ illuziója  Tone mapping  pixel Virtuális világ színérzet Valós világ  

Anyagok a 3D grafikában Emittáló anyagok - fényt kibocsátanak ki „fényforrás” Diffúz felületek ~ „matt” anyagok minden irányban ugyanúgy verik vissza a fényt Spekuláris vagy tükröző felületek a beérkező fénysugár energiájának jelentős részét az ideális visszaverődési irány környezetébe verik vissza „csillogó” vagy „polírozott” anyagok Átlátszó felületek A beérkező fény energiáját minimális veszteséggel eresztik át Áttetsző felület „homályosan” látunk keresztül rajtuk Összetett anyagok A fentiek „keveréke”- legtöbb valós anyag ilyen

Fényforrások d Pozicionális fényforrás (pl elektr. izzó) Minden irányba sugároz, de az intenzitás a távolság négyzetének arányában csökken Irány fényforrás Irány és intenzitás a tér minden pontjában azonos (végtelen távoli sík sugárzó) Ambiens fényforrás Minden pontban és irányban azonos intenzitású Szpotlámpa Jellemzői: helye, iránya, kúpos hatóterület Égbolt fény: ha az adott irányban semmi sincs d pozicionális Irány fényforrás szpotlámpa

Fényterjedés modelljei Geometria+sugárűsűség: Absztrakt fényforrás erőssége, típusa, pozíciója Fény-anyag kölcsönhatás: Visszaverő felület tulajdonságai, Beesési irány Nézőponti irány x Le(x,V,) V

Térbeli irányok definíciója 2D szög = az egységkör ívének hossza tartalmazott irányok a körcikk ívének csúcsába mutatnak, mértékegység: radián 3D szög (térszög): az egységgömb felületének a része, mértékegység: szterradián (sr) Kis felületelem (dA) láthatósági szöge adott pontból sr-ban: dw = dA cos / r2 r: a felületi elem és a középpont távolsága : a felületi elem normálisának és a sugáriránynak a bezárt szöge

Fény erősség jellemzése Fluxus F: egységnyi idő alatt, adott hullámhossz tartományban átadott energia [mértékegység: W Watt, analógia ~ adott felületen átlépő fotonok száma] Radiancia (intenzitás), L: dA felületelemet dw szögben elhagyó dF fluxus osztva a kilépési irányból látható területtel és a térszöggel Egy egységnyi látható felület által egységnyi térszög alatt kibocsátott teljesítmény [Watt/ sr/ m2] V dw dF dA cos dw L(x,V) = dF  dA

Fény-felület kölcsönhatás BRDF: Bi-directional Reflection Distribution Function Sugársűrűség = Bejövő BRDF Geometria L(x,V) = Lin(x, L)  fr (L,x,V)  cos’ def L (x,V) Lin(x,L)cos’ ’ beesési szög fr (L,x,V) = Helmholtz törvény: SZKL, 3D graf anim jatek: 114 oldal X: felületi pont Lin: beérkező fény intenzitása L: visszavert fény intenzitása (skalár) L: fényforrás irányába mutató egységvektor V: nézőirány ’ A felület normálisa és a megvilágítás közötti szög fr (L,x,V) = fr (V,x,L) V L ’ ’ Lin x

Spektrális versus RGB képszintézis Le() Képszintézis F () Színleképzés R, G, B Spektrális f r() szorzás lineáris Színleképzés Le[r], Le[g], Le[b] Sok különböző frekvencián számítjuk a jelenségeket (pl visszaverődés) Szinleképzés: R,G, B tristimulusértékek számítása RGB: csak az R, G és B színeknek megfelelő hullámhoszakkal számolunk – durva közelítés de real time szempontból hasznos Le() Képszintézis R, G, B RGB Színleképzés f r() f r[r], f r[g], f r[b]

Anyagmodellek- diffúz anyagok Radiancia = Bejövő  BRDF  cos’ Diffúz anyag: a BRDF a nézeti iránytól független Helmholtz: a BRDF megvilágítási iránytól is független A BRDF Diffúz visszaverődés = nagyon rücskös sokszoros fény-anyag kölcsönhatás Színes - l: pl R, G és B komponensekre külön számítás L l(x,V,) = Llin(x, L)  fr, l (L,x,V)  cos’ V N L q’ fr, l (L,x,V) = kd, l(x) x Optikailag nagyon durva, diffúz anyagok esetén a visszavert sugársűrűség független a nézeti iránytól Számítógépes Grafika 2010, PPKE ITK, Benedek Csaba Tanagyag forrás ® Szirmay-Kalos László, BME

Lambert törvény Lref = Lin kd cos+’ q’ cos’ = N·L N L Pont/irány fényforrásra válasz BRDF irányfüggetlen, DE a sugársűrűség függ a megvilágítási iránytól Lref = Lin kd cos+’ cos’ = N·L N L q’ Lambert-törvény (nyári meleg ~ kis ’ ) Számítógépes Grafika 2010, PPKE ITK, Benedek Csaba Tanagyag forrás ® Szirmay-Kalos László, BME

Sima felületek Fresnel egyenletek ’ ’ Lin  F Lin sin’ n = Lin (1-F) „Sima” = 1 pixelben látható felület síknak tekinthető  sin Ideális tükör/törő felület: csak a tükör/törés irányban veri vissza a fényt. Elnyelés nagysága az anyag F( ,’) Fresnel együtthatójától függ – jelentős függés a megvilágítás irányától és a hullámhossztól! Ideális tükör és törő felület: csak a tükör/törés irányban veri vissza a fényt. Elnyelés nagysága az F Fresnel együtthatótól függ

Fresnel függvény F (, ’) F(, ’)   ’ ’ arany ezüst

Tükörirány számítása N a a x cos a = - (v·N) v + N cosa v + N cosa vr a a L = vr, V= v ReflectDir( L, N, V ) { L = V - N * (N * V) * 2; } x cos a = - (v·N) vr = v + 2 N cos a

Törési irány N a N N = cosb = 1-sin2b = 1-sin2a/n2 sin a v + Ncosa Snellius- Descartes sin a v + Ncosa n = sin b v a v +Ncosa Nsinb N N = sina -Ncosb vt = N sinb - Ncosb b vt = v /n + N(cosa/n- cosb) cosb = 1-sin2b = 1-sin2a/n2 vt vt = v/n + N (cosa/n -1-(1-cos2 a)/n2 )

Fénytörő anyagok

Spekuláris visszaverődés: Phong modell cosy = R·V R R q’ q’ = diffúz + y V V Kell egy függvény, ami nagy y=0 -ra és gyorsan csökken Lref = Lin ks (cos+y)n fr (L,x,V) = ks cosn y /cos’ Nem szimmetrikus!

„Rücskös” felületek q’ Cook-Torrance He-Torrance 1 pixelben látható felület Mi: viselkedésileg érvényes modell

Diffúz+Phong anyagok Sokszoros fény-anyag kölcsönhatás „Saját szín” Egyszeres fény-anyag kölcsönhatás, nemfémeknél hullámhossz független Phong diffúz + Phong n = 5 10 20 50

Phong-Blinn modell (OpenGL) Felezővektor H H = (L+V)/|L+V| d N q’ L cosd = N·H V Lref = Lin ks (cos+d)n fr (L,x,V) = ks cosn d /cos’

Képszintézis R, G, B L () Le() L () f r()  pixel Virtuális világ L () Le() L () f r()  Pixelben látható felület meghatározása A látható pont szem irányú sugársűrűsége

Megoldási kompromisszumok pixel lokális illumináció rekurzív sugárkövetés globális illumináció

Sugárkövetés: ray-casting, ray-tracing Számítógépes Grafika 2010, PPKE ITK, Benedek Csaba Tanagyag forrás ® Szirmay-Kalos László, BME

Sugárkövetés A képernyő pixeleire egymástól függetlenül oldja meg a takarási és árnyalási feladatot szimuláljuk a fény terjedését, a fénysugarak és felületek ütközését fotonkövetés: szemből indul, a fény útját visszafele rekurzívan követjük Ingyenes sugárkövető program: Pov-Ray (http://www.povray.org)

Sugárkövetés Egyszerűsített illuminációs modell csak az ideális (koherens) visszaverődési/törési irányokra számol többszörös visszaverődést illetve törést inkoherens komponensek: elhanyagolja az indirekt megvilágítást, csak az absztrakt fényforrások direkt hatását veszi figyelembe

Lokális illumináció absztrakt fényforrásokkal Csak absztrakt fényforrások direkt megvilágítása pixel ’ l Ll N V L (V)  Sl Ll (Ll)* fr (Ll ,N,V)cos ’ l Absztrakt fényforrásokból származó megvilágítás. (Irányforrás = konstans; Pontforrás = távolság négyzetével csökken Ha takart, akkor zérus)

Lokális illumináció absztrakt fényforrásokkal Csak absztrakt fényforrások direkt megvilágítása pixel Ll Hl N V L (V)  Sl Ll (Ll)*{kd (Ll N)++ks ((HlN)+)shine} Absztrakt fényforrásokból származó megvilágítás. (Irányforrás = konstans; Pontforrás = távolság négyzetével csökken Ha takart, akkor zérus)

Ambiens tag L (V)  Sl Ll (Ll)* fr (Ll ,N,V)cos ’ + ka*La l GI Lokális illumináció + ambiens tag L (V)  Sl Ll (Ll)* fr (Ll ,N,V)cos ’ + ka*La l

Lokális illumináció árnyék nélkül pixel Láthatóság számítás a szemből A fényforrás fényének visszaverése a nézeti irányba: felületi normális

Láthatóság a szemből ray(t) = eye + v·t, t > 0 pixel eye ray(t) = eye + v·t, t > 0 FirstIntersect(ray  t, iobject, x) t = FLT_MAX; FOR each object tnew = Intersect( ray, object ); // < 0 ha nincs metszés IF (tnew > 0 && tnew < t ) { t = tnew; iobject = object; } ENDFOR IF (t < FLT_MAX) { x = eye + v·t; RETURN (t, iobject, x); } RETURN „no intersection” END

Metszéspont számítás gömbbel |r – center|2 = R2 r R center ray(t) = eye + v·t Nincs gyök 1 gyök 2 gyök |ray(t) – center|2 = (ray(t) – center)(ray(t) – center)=R2 (vv)t2+2 ((eye – center)v)t +((eye – center)(eye – center))–R2 = 0 Wanted: a pozitív megoldások közül a kisebb Felületi normális: (ray(t) – center)/R

( , , )(x-x*, y-y*, z-z*) = 0 Implicit felületek A felület pontjai: f(x,y,z) = 0 vagy f(r) = 0 A sugár pontjai: ray(t) = eye+v·t A metszéspont: f( ray(t) ) = 0, 1 ismeretlenes, ált. nemlineáris egyenlet: t* (x*,y*,z*) = eye+ v·t* Normálvektor = grad f 0=f(x,y,z) = f(x*+(x-x*),y*+(y-y*),z*+(z-z*)) f(x*,y*,z*) + (x-x*)+ (y-y*)+ (z-z*) x*,y*,z* f x f y f z Az érintősík egyenlete: f x f y f z ( , , )(x-x*, y-y*, z-z*) = 0

Kvadratikus felületek x y z 1 Másodfokú egyenlet Kvadratikus felület: [x,y,z,1] A = 0 Ellipszoid x2 y2 z2 Végtelen kúp x2 y2 Végtelen henger x2 y2  +  +  -1=0  +  - z2 =0  +  - 1 =0 a2 b2 c2 a2 b2 a2 b2

Háromszög n r3 r3 (r – r0)  n = 0 p p ray(t) = eye + v·t r2 r2 r1 r1 1. Síkmetszés: (ray(t) - r1)  n = 0, t > 0 normál: n = (r2 - r1)  (r3 - r1) 2. A metszéspont a háromszögön belül van-e? ((r2 - r1)  (p - r1))  n > 0 ((r3 - r2)  (p - r2))  n > 0 ((r1 - r3)  (p - r3))  n > 0 (r1- eye)  n v  n t = Felületi normális: n vagy árnyaló normálok (shading normals)

Árnyaló normálok N N2 N1 N3 (X1 , Y1 , Z1 ) N = A X + B Y + C A, B, C közelített felület normálvektora N N2 N1 (X1 , Y1 , Z1 ) N3 N = A X + B Y + C A, B, C N1 = A X1 + B Y1 + C N2 = A X2 + B Y2 + C N3 = A X3 + B Y3 + C 3 változós lineáris egyenletrsz.

Parametrikus felületek r(u,v), u,v in [0,1] ray(t) = eye + v·t, t > 0 r(u,v) = ray(t) Háromismeretlenes ált. nem lineáris egyenletrendszer megoldás: u*,v*,t* Teszt: 0< u*,v* < 1, t* > 0 r(0.5,0.5) r(0,0) r(0,1) r(1,1) r(1,0) r(0,0.5) r(0.5,0) Rekurzív tesszelláció: nem robusztus

Parametrikus felületek normálvektora r(u,v) u r(u,v) v  n(u,v)= u=u* v=v* r(u,v*) u u=u* r(u,v) r(u*,v) v r(u*,v*) v=v* r(u*,v) r(u,v*)

Ray-casting képek Lokális illumináció + árnyékok

Rekurzív sugárkövetés Tört sugár T V R Ll Tükör sugár Árnyék sugár L (V)Sl Ll (Ll)*(kd(LlN)++ks((HlN)+)shine)+ka*La + kr*Lin (R) + kt *Lin(T) Törési irányból érkező fény Fresnel Tükör irányból érkező fény 1-Fresnel

Sugárkövetés (Ray-tracing) p eye Render( ) for each pixel p Ray r = ray( eye  pixel p ) color = Trace(ray) WritePixel(p, color) endfor end p color

Sugárkövetés: Trace függvény Color Trace( ray ) IF (FirstIntersect(ray  obj, x) < 0) RETURN La ENDIF color = DirectLightSource(x, ray.v, obj) IF ( obj.mirror ) ReflectDir( ray, reflected ray) color += obj.kr * Trace( reflected ray ) IF ( obj.refractive && RefractDir( ray, refracted ray ) ) color += obj.kt * Trace( refracted ray ) RETURN color ray x

Sugárkövetés: Trace függvény Color Trace( ray, d ) IF (d > dmax) RETURN La IF (FirstIntersect(ray  obj, x) < 0) RETURN La ENDIF color = DirectLightSource(x, ray.v, obj) IF ( obj.mirror ) ReflectDir( ray, reflected ray) color += obj.kr * Trace( reflected ray, d+1 ) IF ( obj.refractive && RefractDir( ray, refracted ray ) ) color += obj.kt * Trace( refracted ray, d+1 ) RETURN color ray x ray.v-2N(Nray.v) ray.v/n+N((Nray.v)/n-1-(1-(Nray.v)2)/n2)

DirectLightSource DirectLightSource( x, v, obj ) color = obj.ka*La FOR each lightsource l DO shadowray.eye = x; shadowray.v = light[l].pos – x; (t,y) = FirstIntersect( shadowray ); IF (t < 0 || |x-y| > |x-light[l].pos|) color += light[l].Intensity * (obj.kd (LlN)+ + obj.ks ((HlN)+)obj.shine ) ENDIF ENDFOR RETURN color árnyék v y x

Befoglaló térfogat (Bounding Volume) double IntersectBV( ray, object ) // < 0 ha nincs IF ( Intersect( ray, bounding volume of object) < 0) RETURN -1; RETURN Intersect( ray, object ); END

Térpartícionáló módszerek objektumok Elő- feldolgozás Sugár követés Térpartícionáló adatstruktúra Első metszéspont Adatstruktúra: Ha ismert a sugár, akkor a potenciális metszett objektumok számát csökkenti Ha a potenciálisak közül találunk egyet, akkor a többi nem lehet közelebb

Reguláris térháló Sugárkövetés: FOR each cell of the line // line drawing Metszés a cellában lévőkkel IF van metszés RETURN ENDFOR átlagos eset komplexitás: O(1 ) Előfeldolgozás: Minden cellára a metszett objektumok komplexitás: O(n·c ) = O(n 2)

Nyolcas (oktális) fa 1 2 3 Faépítés( cella ): IF a cellában kevés objektum van cellában regisztráld az objektumokat ELSE cellafelezés: c1, c2, …, c8 Faépítés(c1); … Faépítés(c8); ENDIF 1 2 3 2 1 3 Sugárkövetés: FOR összes sugár által metszett cellára Metszés a cellában lévőkkel IF van metszés RETURN ENDFOR Octree

Binary Space Partitioning fa (kd-fa) Faépítés( cella ): IF a cellában kevés objektum van cellában regisztráld az objektumokat ELSE sík keresés cella felezés a síkkal: c1, c2 Faépítés(c1); Faépítés(c2); ENDIF 1 2 1 2 3 3 Sugárkövetés: FOR each cell intersecting the line Metszés a cellában lévőkkel IF van metszés RETURN ENDFOR kd-tree

Sugárkövető program typedef struct{double x,y,z}vec;vec U,black,amb={.02,.02,.02}; struct sphere{ vec cen,color;double rad,kd,ks,kt,kl,ir}*s, *best,sph[]={0.,6.,.5,1.,1.,1.,.9, .05,.2,.85,0.,1.7,-1.,8.,-.5,1.,.5,.2,1.,.7,.3,0.,.05,1.2,1.,8.,-.5,.1,.8,.8, 1.,.3,.7,0.,0.,1.2,3.,-6.,15.,1., .8,1.,7.,0.,0.,0.,.6,1.5,-3.,-3.,12.,.8,1., 1.,5.,0.,0.,0.,.5,1.5,};yx; double u,b,tmin,sqrt(),tan();double vdot(A,B)vec A ,B; {return A.x*B.x+A.y*B.y+A.z*B.z;}vec vcomb(a,A,B)double a;vec A,B; {B.x+=a* A.x;B.y+=a*A.y;B.z+=a*A.z;return B;} vec vunit(A)vec A;{return vcomb(1./sqrt( vdot(A,A)),A,black);}struct sphere *intersect(P,D)vec P,D;{best=0;tmin=1e30; s= sph+5;while(s-->sph)b=vdot(D,U=vcomb(-1.,P,s->cen)),u=b*b-vdot(U,U)+s->rad*s ->rad,u=u>0?sqrt(u):1e31,u=b-u> 1e-7?b-u:b+u,tmin=u>=1e-7&&u<tmin?best=s,u: tmin;return best;}vec trace(level,P,D)vec P,D;{double d,eta,e;vec N,color; struct sphere*s,*l;if(!level--)return black;if(s=intersect(P,D));else return amb;color=amb;eta=s->ir;d= -vdot(D,N=vunit(vcomb (-1.,P=vcomb(tmin,D,P),s->cen )));if(d<0)N=vcomb(-1.,N,black),eta=1/eta,d= -d;l=sph+5;while(l-->sph)if((e=l ->kl*vdot(N, U=vunit(vcomb(-1.,P,l->cen))))>0&&intersect(P,U)==l)color=vcomb(e ,l->color,color);U=s->color;color.x*=U.x;color.y*= U.y;color.z*=U.z;e=1-eta* eta*(1-d*d);return vcomb(s->kt,e>0?trace(level,P,vcomb(eta,D,vcomb(eta*d-sqrt (e),N,black))): black,vcomb(s->ks,trace(level,P,vcomb(2*d,N,D)),vcomb(s->kd, color,vcomb(s->kl,U,black))));} main(){printf("%d %d\n",32,32);while(yx<32*32) U.x=yx%32-32/2,U.z=32/2-yx++/32,U.y=32/2/tan(25/114.5915590261), U=vcomb(255., trace(3,black,vunit(U)),black),printf("%.0f %.0f %.0f\n",U);}/*minray!*/

Sugárkövetés: eredmény Számítási idő  Pixelszám x Objektumszám x (Fényforrás szám+1)

Árnyalás az OpenGL-ben Egyszerűsített árnyalási egyenlet ahol a fizikai leírás túl bonyolult, tapasztalati úton bevált képleteket használ használ spekuláris és diffúz visszaverődést, nincs azonban törés és tükrözés bevezeti a diffúz és spekuláris fény fogalmát – ennek a különválasztásnak nincs fizikai jelentése, de a megjelenítéshez nagyobb szabadságot ad Csak a csúcspontokban számít színt többi pontban interpolál a környező csúcspontok színéből

Megvilágítás modell void glLightModel{if}{,v}(GLenum pname, TYPE param); pname lehet: GL_LIGHT_MODEL_AMBIENT ambiens RGBA fény az egész színtérben GL_LIGHT_LOCAL_VIEWER lokális vagy végtelenben lévő (default) „nézeti pont” GL_LIGHT_MODEL_TWO_SIDE poligonjainkhoz egy- vagy mindkét oldalon kell megvilágítást számolnunk

Fényforrás megadása Fény ki-be kapcsolás: glEnable(GL_LIGHTING); glDisable(GL_LIGHTING) void glLight{if}{,v}(GLenum light, GLenum pname, TYPE param); light: GL_LIGHT0, GL_LIGHT1,... , or GL_LIGHT7 param: különböző paraméterek (lásd köv. slide-ok) Az egyes fényforrásokat is külön engedélyezni kell (azaz bekapcsolni): Pl glEnable(GL_LIGHT0);

Fényösszetevők az OpenGL-ben Absztrakt fényösszetevők: objektumok által kibocsátott fény környezeti fény – ambient light - GL_AMBIENT kompenzálja a többszörös visszaverődések elhanyagolását szórt fény - diffuse light - GL_DIFFUSE: iránnyal rendelkezik, mindig valamely fényforrásból jön. Az objektumokkal ütközve minden irányba azonos módon és mértékben verődik vissza csillogás - specular light - GL_SPECULAR van iránya és forrása, hatása nem csak az anyagtulajdonságoktól és a normálisoktól függ, hanem a nézőponttól is

Minta „Diffúz fényforrás” megadása: GLfloat light_diffuse[] = { 1.0, 1.0, 1.0, 1.0 }; glLightfv(GL_LIGHT0, GL_DIFFUSE, light_diffuse);

OpenGL fényforrások 3 típus: irányforrás pontszerű szpotlámpa 1 konstans fényerősség, adott irány pontszerű forrástól távolodva csökkenő fényerősség k0,l: GL_CONSTANT_ATTENTUATION k1,l: GL_LINEAR_ATTENTUATION k2,l: GL_QUADRATIC_ATTENTUATION szpotlámpa kúpos hatóterület 1 k0,l+k1,l dl+k2,l dl2 al =

Fényforrás pozíciója GL_POSITION paraméter a pozíció (x, y, z, w) koordinátai w≠1: pontszerű fényforrás vagy szpotlámpa w=0: végtelenben lévő fényforrás = irányforrás default: (0.0, 0.0, 1.0, 0.0) Példa: pontforrás inicializálás és beállítása: GLfloat light_position[] = { 1.0, 1.0, 1.0, 1.0 }; glLightfv(GL_LIGHT0, GL_POSITION, light_position); glLightf(GL_LIGHT0, GL_CONSTANT_ATTENUATION, 2.0); glLightf(GL_LIGHT0, GL_LINEAR_ATTENUATION, 1.0); glLightf(GL_LIGHT0, GL_QUADRATIC_ATTENUATION, 0.5); glEnable(GL_LIGHT0);

Spotlight (reflektor) Irány és vágási szög: GL_SPOT_DIRECTION GL_SPOT_CUTOFF Minta kód: glLightf(GL_LIGHT0, GL_SPOT_CUTOFF, 45.0); GLfloat spot_direction[]={-1.0,-1.0, 0.0 }; glLightfv(GL_LIGHT0, GL_SPOT_DIRECTION, spot_direction);

Anyagtulajdonságok void glMaterial{if}(GLenum face, GLenum pname, TYPE param); face: GL_FRONT, GL_BACK, vagy GL_FRONT_AND_BACK pname: GL_AMBIENT, GL_DIFFUSE, GL_AMBIENT_AND_DIFFUSE, GL_SPECULAR GL_SHININESS (n kitevő a Phong-Blinn illuminációs képletben); GL_EMISSION (az anyag által kibocsátott fény színe – ha van)

Gyakorlati feladatok 1. gömb megjelenítése és árnyalása különböző anyagi és megvilágítási jellemzők függvényében Számítógépes Grafika 2010, PPKE ITK, Benedek Csaba Tanagyag forrás ® Szirmay-Kalos László, BME

Gyakorlati feladatok 2. feladat: mozgó fényforrás szimulálása Számítógépes Grafika 2010, PPKE ITK, Benedek Csaba Tanagyag forrás ® Szirmay-Kalos László, BME

Gyakorlati feladatok 3. Különböző tulajdonságú gömbök között mozgó fényforrás Számítógépes Grafika 2010, PPKE ITK, Benedek Csaba Tanagyag forrás ® Szirmay-Kalos László, BME

Gyakorlati feladatok 4. szoba megjelenítő teáskannával Számítógépes Grafika 2010, PPKE ITK, Benedek Csaba Tanagyag forrás ® Szirmay-Kalos László, BME

Testek Ellenpéldák Érvényes testek: reguláris halmaz nem lehetnek alacsony dimenziós elfajulásai minden határpont mellett van belső pont Garantáltan érvényes testet építő módszerek 2.5 dimenziós eljárások speciális felületi modellezés: B-rep Konstruktív tömörtest geometria

2.5 dimenziós módszerek Kihúzás: extrude Forgatás: rotate

Felületmodellezők Test = határfelületek gyűjteménye Topológiai ellenőrzés (Euler tétel): csúcs + lap = él + 2

B-rep: Euler operátorok

Gyakorlati Euler operátorok Edge split csúcs + lap = él + 2 Poligon split Élzsugorítás v. csúcspont összevonás -Edge Collapse

Gyakorlati Euler operátorok Poligon kihúzás (Face extrude): ep: a poligon éleinek a száma 2ep új él, ep+1 új lap, ep új csúcs 1 eltűnő lap e’=e+2ep l’=l+ep+1-1 c’=c+ep l’+c’=l+c+2ep=e+2+2ep=e’+2

Poligon modellezés: téglatest

Poligon modellezés: 1. extruding

Poligon modellezés: 2. extruding

Poligon modellezés: 4. és 5. extruding

Poligon modellezés: 6. extruding

Subdivision simítás