Előadást letölteni
Az előadás letöltése folymat van. Kérjük, várjon
KiadtaJakab Varga Megváltozta több, mint 10 éve
1
Vektorok különbsége e-x = [ex-xx ey-xy ez-xz] e e-x x szempozíció
nézeti irány (nem normalizált) e e-x x árnyalt felületi pont pozíciója
2
Vektorok hossza |v| = √ (vx*vx + vy*vy + vz*vz) |v| v
3
Normalizált nézeti irány
e-x = [ex-xx ey-xy ez-xz] szempozíció V: nézeti irány (normalizált) e V= (e-x)/|e-x| x árnyalt felületi pont pozíciója
4
Két vektor skalárszorzata (dot product)
a·b = axbx + ayby + azbz skalár (egy szám) a·b = |a||b| cos q a b q
5
Mire jó a skalárszorzat? 1. v-nek n irányú része
derékszögű háromszög |n| = 1 |vn| = |v| cos Q = |v| |n| cos Q = v·n vn = n |vn| v vtöbbi skalárszorzat vn q n egységnyi hosszú kell legyen n
6
Például: falról visszapattanó labda, tökéletes visszaverődés iránya
V = Vpárhuzamos + Vmerőleges V: bejövő sebesség Vout = Vpárhuzamos - Vmerőleges V Vpárhuzamos Vmerőleges = -N(V·(-N)) Vpárhuzamos = V - Vmerőleges Vout = V - 2N(V·N) Vmerőleges N Fal Vout N: fal normálvektora kimenő sebesség
7
Mire jó a skalárszorzat? 2. a és b közötti szög cosinusa
|a| = |b| = 1 cos Q = |a| |b| cos Q = a·b a q a és b egységnyi hosszú kell legyen b
8
Például: diffúz felület árnyalása
kd: diffúz BRDF paraméter Iout = Iin kd cosQ Iin: bejövő radiancia Iout = Iin kd L·N Q: fény beesési szöge L: fényirány (normalizált) L q Fal N N: árnyalt felület normálvektora (normalizált) Iout kimenő radiancia (nem függ a nézeti iránytól, mert diffúz)
9
Két vektor vektoriális szorzata (keresztszorzat, cross product)
a×b = [aybz-azby azbx-axbz axby-aybx] |a×b| = |a||b|sinQ a merőleges a-ra és b-re a×b a·|a×b| = 0 b·|a×b| = 0 b q
10
Mire jó a keresztszorzat?
Ha valami vektorra kell egy merőleges keresztszorozzuk pl. a felfele vektorral (pl. [0, 0, 1]) Két vektorra is merőleges a két vektor keresztszorzata ha nem 1 hosszúak vagy nem derékszögben állnak ne felejtsünk el normalizálni Példa: paraméteres felület normálvektora egy pontban
11
Példa: felület normálvektora
felület paraméteres egyenlete legyen: x(u,v) = u y(u,v) = v z(u,v) = sin(2u + 3v ) Mi a normálvektora a u=v=0 pontban? x(u,v) / u = 1 y(u,v) / u = 0 T érintő (tangens) z(u,v) / u = cos(2u + 3v) 2 = 2 x(u,v) / v = 0 B érintő (binormál) y(u,v) / v = 1 z(u,v) / v = cos(2u + 3v) 3 = 3 normalizálás: / sqrt(14) N = B×T = [ ] = [ ]
12
Koordináta-rendszerek
Egy pont valamilyen viszonyítási ponthoz képest (origo) adható meg kitüntetett vektorok lineáris kombinációjaként (bázisvektorok, koordinátatengely-irányok) Más origóval és irányokkal ugyanannak a pontnak mások a koordinátái Más számításokhoz más bázisok előnyösek
13
Modellezési: ebben adottak a koordináták
[3 4] P = OM + 3Mx + 4My My OM origó Mx
14
Világ: kitüntetett fő-rendszer ebben legyen minden az árnyaláshoz
modell origo itt van [3 3] Lokális Model Ezekkel adjuk meg az objektum elhelyezkedését Mx = 3/25 Wx – 4/25 Wy My = 4/25 Wx + 3/25 Wy [3 4] P = 3Mx + 4My Wy OW origó Wx
15
Világkoordináták kiszámolása
OM [3,3] P = 4Wx + 3Wy [4 3] Lokális Model Mx = 3/25 Wx – 4/25 Wy My = 4/25 Wx + 3/25 Wy [3 4] P = 3Mx + 4My P = OM + 3Mx + 4My P = 3 Wx+ 3 Wy + 3 (3/25 Wx – 4/25 Wy)+ 4 (4/25 Wy + 3/25 Wy) = 3 Wx+ 3 Wy + (9 + 16)/25 Wx + (12-12) Wy = 4Wx + 3Wy Wy OW origó Wx
16
Ez a számítás mátrix formában (modellezési transzformáció)
P = 3 Wx+ 3 Wy + 3 (3/25 Wx – 4/25 Wy)+ 4 (4/25 Wy + 3/25 Wy) [4 3] = [3+3*3/25+4*4/ *4/25+4*3/25] mindig fix OM My Mx 3/25 -4/25 0 4/25 3/25 0 [4 3 1] = [3 4 1] mindig fix
17
Árnyalás világ-koordinátákban
X árnyalt felületi pont E szem pozíciója [4 3] V V nézeti irány L = (S-X)/|S-X| V = (E-X)/|E-X| [6 3] L L megvilágítás iránya [4 1] Wy S fényforrás pozíciója OW origó Wx Minden világ-ban adott
18
Hova kell ezt rajzolni a képernyőn?
Az összes többi transzformáció ennek a kiszámolására megy kamera transzformáció hol van a pont a kamerához képest vetítési transzformáció hova vetül ez az ablak téglalapjára viewport transzformáció melyik pixel [1 1] [-1 -1] [0 0] [ ]
19
Kamera koordináta rendszer
Cx = [-1 1] kamera koordináták E [4 3] [6 3] [4 3] = E + xC*Cx + zC*Cz Cz = [-1 -1] egyenletrendszer x,z-re 4 = 6 + xC*(-1) + zC*(-1) 3 = 3 + xC*(-1) + zC*(1) xC= 1, zC = 1 Wy OW origó Wx
20
Kamera koordináta számítás mátrix formában (NEM a kamera trafó mátrix)
[4 3] = E + xC*Cx + zC*Cz [4 3] = E + xC*[-1 -1] + zC*[-1 1] mindig fix E Cy Cx [4 3 1] = [1 1 1] mindig fix
21
Kamera trafó mátrix -1 -1 -1 0 -1 1 0 6 3 1 [4 3 1] = [1 1 1] -1 -1 0
[4 3 1] = [1 1 1] -1 [4 3 1] = [1 1 1]
22
Képernyő koordináta rendszer
hova vetül a képernyőn xJ Jx milyen messze (takaráshoz kell) 1 zJ Jz Wy ablak a virtuális világra OW origó Wx
23
Képernyőkoordináta számítása
hasonló háromszögek xC = xJ * zC xJ = xC / zC xJ Jx 1 xC zC zJ Jz ablak a virtuális világra
24
Ha a látószög nem 90 fok Jx xC = xJ * zC xJ = xC / zC xJ 1 xC zC zJ Jz
itt van az 1.0 így ez 0.5 hasonló háromszögek Jx xC = xJ * zC xJ = xC / zC xJ FOV 1 xC zC Jx az egység Osztani kell az ablakunk fél szélességével zJ Jz xJ = (xC / zC) / tan(FOV/2) ablak a virtuális világra Ha FOV = 90 fok akkor ez 1 FOV látószög
25
Perspektív transzformáció
A vetítés is homogén linearis transzformáció: ezt is lehet mátrixszorzással DE nem affin: utolsó oszlop nem [0 0 1] homogén koordinátákban kapjuk meg az eredményt, és h általában nem 1 utána osztani kell h-val hogy rendes Descartes koodinátákat kapjunk xJhomo / hJhomo = (xC / zC) / tan(FOV/2)
26
Perspektív trafó mátrix
xJhomo / hJhomo = (xC / zC) / tan(FOV/2) ez a képernyő-pozíció szempontjából nem érdekes 1/tan(FOV/2) ? 0 ? 1 ? 0 [xJhomo ? hJhomo] = [xC zC 1] zC xC / tan(FOV/2)
27
Mi legyen a Z? A takaráshoz kell
Tartsa meg a kamera koordinátarendszer-beli sorrendet (legyen monoton a látható objektumok részén) Ha [0 A 0] lenne a mátrixban: kell valamit ide is írni 1/tan(FOV/2) A 1 [xJhomo ? hJhomo] = [xC zC 1] = A A*zC zC mindig A: elveszne a mélység info
28
0 < ZJ <1 tartomány legyen fp < ZC < bp
1/(tg(fov/2)) (fp+bp)/(bp-fp) 1 fp*bp/(bp-fp) 0 3D ben, asp a képernyő magassága a szélességhez képest (a függőleges és vízszintes FOV nem ugyanakkora ) 1/(tg(fov/2)*asp) /(tg(fov/2)) (fp+bp)/(bp-fp) fp*bp/(bp-fp)
29
OpenGL ehhez képest ide rakja az ablakot Jz -1 Jx kamera a –z felé néz
30
de ezt összrakja az OpenGL
Ezért a z sor - 1/(tg(fov/2)*asp) /(tg(fov/2)) (fp+bp)/(bp-fp) fp*bp/(bp-fp) de ezt összrakja az OpenGL gluPerspective()
31
Miért jó, hogy minden számítás mátrix-szorzás?
(((r M1) M2) M3) = r (M1 M2 M3) több lépést is lehet egyetlen mátrixszorzással, ha a szorzatmátrixot használjuk LINEÁRIS: háromszögből háromszög lesz 3Dben érintkező háromszögekből 2Dben illeszkedő hszek nemlineárisnál a hszből valami más lesz, mi meg csak hszet tudunk hatékonyan rajzolni pixelekből
32
Vágás Cohen-Sutherland: szakasz Sutherland-Hodgeman: sokszög (hsz is)
A lényeg hogy egy szakasz metszéspontját megtaláljuk a vágósíkkal szakasz paraméteres egyenlete (t) vágósík (2D ben egyenes) egyenlete meg kell oldani az egyenletrenszert t-re r(t) = t*r0 + (1-t)r1 ; 0 < t < 1
33
Vágás példa 2Dben vágjuk erre a fésíkra: x+y > 4 r1 = [4 4]
4 + 4 > 4, bent van r1 = [4 4] r0 = [1 1] 1 + 1 < 4, kint van
34
Egyenletek Szakasz egyenlete Ezzel az egyenessel kell a metszéspont
Behelyettesítve x(t) = t x0 + (1-t)x1 y(t) = t y0 + (1-t)y1 x + y = 4 t x0 + (1-t)x1 + t y0 + (1-t)y1 = 4 t (x0 - x1 + y0 – y1) + x1 + y1 = 4 t ( ) = 4 -6 t = -4 t = 2/3; x(2/3) = 1 * 2/3 + 4 * 1/3 = 6/3 = 2 y(2/3) = 1 * 2/3 + 4 * 1/3 = 6/3 = 2
35
Vágás példa 2Dben vágjuk erre a fésíkra: x+y > 4 r1 = [4 4]
4 + 4 > 4, bent van r1 = [4 4] rc = [2 2] r0 = [1 1] 1 + 1 < 4, kint van
36
Háromszögek vágása Nem valami általános félsíkra szokott előfordulni, inkább pl. x > -1 Sutherland-Hodgeman VAGY 4 eset mind kint: nincs bent semmi mind bent: az eredeti hsz marad 2 kint: a két szakaszra vágunk, 3 csúcs marad, 1 db hsz 1 kint: a két szakaszra vágunk, 4 csúcs lesz, 2 db hsz
37
Szakasz vágás 3D Ugyanez a menete De volt egy perspektív trafó
eredeti szakaszokat homogén szakaszokba viszi, ami nem biztos hogy tényleg szakasz
38
ablak a virtuális világra
Átfordulási probléma itt kellene látszania nem a két vetületi pont között ide vetül ide vetül 1 ablak a virtuális világra
39
Ezért először vágunk, aztán vetítünk
ami ezen kívül van, nem kerül a képernyőre, erre vágunk itt kellene látszania nem a két vetületi pont között ide vetül metszéspont ablak a virtuális világra
40
Szakasz vágás homogén koordinátákban
Szakasz egyenlete ugyanaz Vágósík egyenlete lesz más r(t) = t*r0 + (1-t)r1 ; 0 < t < 1 pl. x > -1 helyett xh > -h
41
Példa ez bent van ez kint van Vágjuk a [ ] – [ ] szakaszt a z > 1 féltérre (homogénben: z > h) Szakasz egyenlete (csak a z meg a h fog kelleni a t meghatározásához) Vágósík egyenlete x(t) = t x0 + (1-t)x1 y(t) = t y0 + (1-t)y1 z(t) = t z0 + (1-t)z1 = (4 + 7)t - 7 = 11t - 7 h(t) = t h0 + (1-t)h1 = (1 - (-1))t - 1 = 2t - 1 z(t) = h(t); 11t - 7 = 2t - 1; t = 6/9 = 2/3
42
t vissza a szakasz egyenletébe
x(t) = 2/3 x0 + (1-2/3)x1 = 2/3 * 2 + 1/3 * 5 = 9/3 = 3 y(t) = 2/3 y0 + (1-2/3)y1 = 2/3 * 3 + 1/3 * 6 = 12/3 = 4 z(t) = 2/3 z0 + (1-2/3)z1 = 2/3 * 4 + 1/3 * (-7) = 1/3 h(t) = 2/3 h0 + (1-2/3)h1 = 2/3 - 1/3 = 1/3 az eredmény [3 4 1/3 1/3] jöhet a homogén osztás (minden / 1/3) [ ] az eredményül kapott vágott szakasz: [ ] - [ ] => [2 3 4] - [9 12 1] a pont a vágósíkon kell legyen
43
Vizsgapélda x y h x y h Vágósíkok x <= h bent kint
x >= -h bent bent y <= h bent bent y >= -h bent kint x = 1 t + 1 (1 -t) = 1 y = 1 t - 11 (1 - t) = 12t - 11 h = 3 t - 1 (1 - t) = 4t - 1 [1 3 1] Tp = [1 1 3] [1 -1 1]Tp = [ ] x=h; 1 = 4t - 1; t = ½ y=-h; 12t - 11 = -4t +1; t = ¾ t = ¾ van közelebb a belső ponthoz ¾ [1 1 3] + ¼ [ ] = [1 -8/4 8/4] = [1 -2 2] -> [0.5 -1]
44
Felületi pont árnyalása
OpenGL kamerakoordinátában csinálja de az is jó Kellhet hozzá (VILÁG koordinátában) L fényirány (|L|=1), bejövő radiancia I(L) (minden irányból ahonnan jön fény) N normálvektor (|N|=1) V szemirány, nézeti irány (|V|=1) BRDF(felület fényvisszaverő tulajdonsága) diffúz kd spekuláris ks, n (exponens) ideális kr
45
Árnyalás jelölések N normálvektor V nézeti irány L fényirány R ideális
visszaverődési irány Q Y x: felületi pont
46
Absztrakt fényforrás típusok
Irány (pl. [5 3 2] irányból [2 3 4] RGB radiancia) L adott, csak normalizálni kell I(L) adott, mindenhol ugyanannyi, minden más irányból 0 Pontszerű (pl. [2 3 4] pozícióban [4 5 6] Watt RGB teljesítményű) L = (S-X)/|S-X|; S a fény pozíció X az árnyalt pont I(L) = F / (4|S - X|2 p) fény távolsága teljesítmény 4r2p : gömb felülete, ekkora felületen oszlik el a teljesítmény
47
Égboltfény I(L) adott, általában konstans (minden bejövő irányra ugyananyi a radiancia) minden pontban érvényes diffúz és ideális tükör visszaverődés esetén könnyű, spekulárisnál integrálni kellene
48
L, N, V-ből számítható cosQ – fény beesési szögének cosinusa
cosQ = L·N R – ideálisan visszavert fény iránya L “tükörképe” a normálvektorra R = 2N(L·N) – L (lásd skalárszorzat mire jó) cosY – nézeti mennyire tér el az ideálistól cosY = R·V
49
A alapegyenlet (rendering equ)
L(x,w)=Le(x,w)+L(h(x,-w’),w’) fr(’,x,) cos’dw’ A mi jelöléseinkkel a lényeg: beesési szög BRDF IV = I(L) cos fr( V,L) dL V irányú kimenő radiancia összegezni minden bejövő irányra az onnan bejövő radiancia egységnyi felületre beeső és V irányba visszavert részét
50
Irány és pontfényforrás esetén
Csak egy irányból jön be fény, nem kell integrálni IV = I(L) cos fr( V,L) ezek mind adottak vagy számíthatóak diffúz (BRDF = kd) IV = Iin (N·L) BRDF IV = Iin (N·L) kd ideális (ha R=V, BRDF = kr / cos ) IV = Iin kr Phong (BRDF = ks cosnY / cos ) IV = Iin (R·V)n ks
51
Konstans égboltfény + diffúz
IV = I(L) cos fr( V,L) dL kd, mert diffúz nem függ az iránytól mert konstans az égbolt IV = Iégbolt cos kd dL IV = Iégbolt kd cos dL p albedo
52
Égboltfény + ideális Csak az az irány érdekes, aminek az ideális visszaverődési iránya a szemirány RV = 2N(V·N) – V Az innen bejövő radiancia kr szerese megy a szemirányba Ehhez nem kell hogy konstans legyen az ég IV = Iégbolt(RV) kr
Hasonló előadás
© 2024 SlidePlayer.hu Inc.
All rights reserved.