Sugárkövetés: ray-casting, ray-tracing

40
Sugárkövetés: Sugárkövetés: ray-casting, ray- ray-casting, ray- tracing tracing Szirmay-Kalos László

description

Sugárkövetés: ray-casting, ray-tracing. Szirmay-Kalos László. Képszintézis. pixel. Lokális illuminációs módszer. L (x, w )= L e ( x, w )+  L ( h ( x,- w) , w ) f r ( ’ ,x,  ) cos ’ d w ’. A jobb oldali radiancia: fényforrások emissziója - PowerPoint PPT Presentation

Transcript of Sugárkövetés: ray-casting, ray-tracing

Page 1: Sugárkövetés: ray-casting, ray-tracing

Sugárkövetés:Sugárkövetés:ray-casting, ray-tracingray-casting, ray-tracing

Szirmay-Kalos László

Page 2: Sugárkövetés: ray-casting, ray-tracing

KépszintézisKépszintézis

pixel

Page 3: Sugárkövetés: ray-casting, ray-tracing

Lokális illuminációs módszerLokális illuminációs módszer

A jobb oldali radiancia:– fényforrások emissziója

Fényforrások fényének egyszeri visszaverődését számítjuk

L (x,)=Le(x,)+Llightsource fr (’,x,) cos ’d’

Le(y,’)

L(x,)=Le(x,)+L(h(x,-,) fr (’,x,) cos ’d’

Page 4: Sugárkövetés: ray-casting, ray-tracing

Absztrakt fényforrás modellek: Absztrakt fényforrás modellek: az integrálást megspóroljákaz integrálást megspórolják

Ambiens fényforrás: La constant

– ambiens visszaverődési modell: Lref = La ka

– konstans égbolt fény modell: Lref = La a(x, view dir) Irány fényforrások: egyetlen irányba sugároz, a fénysugarak

párhuzamosak, az intenzitás független a pozíciótól Pozicionális fényforrás: egyetlen pontból sugároz, az

intenzitás a távolság négyzetével csökken

irány pozicionális

d

Page 5: Sugárkövetés: ray-casting, ray-tracing

Lokális illumináció absztrakt Lokális illumináció absztrakt fényforrásokkalfényforrásokkal

pixel

L () Le()+lrlLl (’l) fr (’l ,) cos ’l

Pont, irányfényforrásokból származó megvilágítás

Csak direkt megvilágítás

0/1: Fényforrás láthatóság

’l

Page 6: Sugárkövetés: ray-casting, ray-tracing

Ambiens tagAmbiens tag

L () Le()+lrlLl (’l) fr (’l ,) cos ’l + ka La

Lokális illumináció + ambiens tag

Page 7: Sugárkövetés: ray-casting, ray-tracing

Lokális illuminációs algoritmusokLokális illuminációs algoritmusok

pixel

Láthatóság számítás a szemből Fényforrás láthatóság számítás a látható pontból A fényforrás fényének visszaverése a nézeti

irányba: felületi normális

Page 8: Sugárkövetés: ray-casting, ray-tracing

Sugár egyenlete

• Szakasz egyenlete

• Félegyenes egyenleter(t) = (1-t)*r0 + t*r1 ; 0 < t < 1

0 < tr(t) = r0 + t*(r1 - r0); 0 < t

r0 ból r1bemutató vektor

(a sugár iránya)(normalizálatlan)

sugár kezdőpontja

r(t) = e + t*d; 0 < t

Page 9: Sugárkövetés: ray-casting, ray-tracing

Láthatóság a szembőlLáthatóság a szembőlpixel

ray(t) = eye + v ·t, t > 0

FirstIntersect(ray t, iobject, x) t = FLT_MAX; FOR each object

tnew = Intersect( ray, object ); // < 0 if no intersectionIF (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

Page 10: Sugárkövetés: ray-casting, ray-tracing

Metszéspont számítás gömbbelMetszéspont számítás gömbbel

|ray(t) - center |2 = R2

Felületi normális: (ray(t) - center)/R

centerR

|r - center |2 = R2

r

(v ·v) t 2 + 2 ((eye-center) ·v) t +((eye-center) ·(eye-center))- R2 = 0

Wanted: minimum pozitív megoldás

Nincs gyök 1 gyök 2 gyök

Page 11: Sugárkövetés: ray-casting, ray-tracing

+ + -1=0

Kvadratikus felületekKvadratikus felületekxyz1

[x,y,z,1] A = 0Kvadratikus felület: Másodfokúegyenlet

Ellipszoid x2 y2 z2

a2 b2 c2 + - z2 =0

Végtelen kúp x2 y2

a2 b2

Végtelen henger x2 y2

a2 b2 + - 1 =0

Page 12: Sugárkövetés: ray-casting, ray-tracing

Példa: sugár metszéspontja kvadratikus felülettel

• Felület egyenlete legyen

• Ugyanez mátrixformában3x2 + 2xy + z2 + 2z - 7 = 0

3 2 0 00 0 0 00 0 1 20 0 0 -7

x y z 1

xyz1

= 0

Page 13: Sugárkövetés: ray-casting, ray-tracing

Sugár egyenlete

• A sugár kezdőpontja legyen E = [0 1 0] és az iránya D = [1 1 0]

• Írjuk vissza ebbe:

x(t) = ex + dxt = 0 + 1t = ty(t) = ey + dyt = 1 + 1t = 1 + tz(t) = ez + dzt = 0 + 0t = 0

3x2 + 2xy + z2 + 2z - 7 = 03*t*t + 2*t*(1+t) + 0*0 + 2*0 - 7 = 03t2 + 2t2 + 2t -7 = 05t2 + 2t - 7 = 0t = [-2√(2*2 - 4*5*(-7))] /(2*5) =[-2√144]/10 = [-212]/10; t1= -1.4, t2 = 1

másodfokú egyenlet(-b √(b2-4ac))/2a

ebből a legkisebbpozitív t=1

Page 14: Sugárkövetés: ray-casting, ray-tracing

Metszéspont

• Sugár egyenletébe t=1

• A metszéspont [1 2 0]ban van

x(t) = ex + dxt = 0 + 1t = t = 1y(t) = ey + dyt = 1 + 1t = 1 + t = 2z(t) = ez + dzt = 0 + 0t = 0 = 0

Page 15: Sugárkövetés: ray-casting, ray-tracing

Ugyanez a számítás mátrixműveletekkel

3 2 0 00 0 0 00 0 1 20 0 0 -7

x y z 1

xyz1

= 0

X XTA

XAXT = 0

X(t) = E + tD

sugáregyenlet kezdőpont irány

a 4edik mindig legyen 1Eh = 1, Dh = 0

Page 16: Sugárkövetés: ray-casting, ray-tracing

Behelyettesíve(E+tD)A(E+tD)T = 0

Matrixszorzás linearis művelet:(összeg szorzata a szorzatok összege)

EA(E+tD)T + tDA(E+tD)T = 0EAET + tEADT + tDAET + t2DADT = 0DADT t2 + (EADT+ DAET) t + EAET = 0

a felület mátrixából, és a sugár kezdőpontjábólés irányából számítható együtthatók

másodfokú egyenlet t-re

Page 17: Sugárkövetés: ray-casting, ray-tracing

DADT t2 + (EADT+ DAET) t + EAET = 0

DADT = = = 5

EADT = = = 0

DAET = = = 2

EAET = = = -7

A konkrét példában

3 2 0 00 0 0 00 0 1 20 0 0 -7

1 1 0 01100

3 2 0 00 0 0 00 0 1 20 0 0 -7

0 1 0 11100

3 2 0 00 0 0 00 0 1 20 0 0 -7

1 1 0 00101

3 2 0 00 0 0 00 0 1 20 0 0 -7

0 1 0 10101

3 2 0 01100

0 0 0 -71100

3 2 0 00101

0 0 0 -70101 5t2 + 2t - 7 = 0

Page 18: Sugárkövetés: ray-casting, ray-tracing

Metszéspont számítás: Metszéspont számítás: háromszögháromszög

1. Síkmetszés: (ray(t) - r1) ·n = 0, t > 0normál: n = (r2 - r1) x (r3 - r1)

2. A metszéspont a háromszögön belül van-e?((r2 - r1) x (p - r1)) ·n > 0 ((r3 - r2) x (p - r2)) ·n > 0 ((r1 - r3) x (p - r3)) ·n > 0

r1 r1 r2

p

r3

Felületi normális: nvagy „shading normals”

Page 19: Sugárkövetés: ray-casting, ray-tracing

Példa: hsz-sugár metszéspont

• Sugár kezdőpont [0 2 0], irány [0 0 1]• Háromszög csúcsai:

– [0 3 2], [1 1 1], [-1 2 1]• Hsz síkjának egyenlete

– normál– síkegyenet

– egyik csúcsot [1 1 1] beírva kapjuk Dt

n = ([1 1 1] - [0 3 2])×([-1 2 1] - [0 3 2]) =[1 -2 -1]×[-1 -1 -1] = [1 2 -3]

Ax + By + Cz + D = 0x + 2y - 3z + D = 0

1 + 2 - 3 + D = 0; D = 0; x + 2y - 3z = 0

Page 20: Sugárkövetés: ray-casting, ray-tracing

Sík-sugár metszéspont

• Sík• Sugár

• Sugár beírva a síkba

• Metszéspont (t vissza a sugáregyenletbe)

x + 2y - 3z = 0

x = 0 + 0t = 0y = 2 + 0t = 2z = 0 + 1t = t

0 + 2 - 3t = 0t = 2/3

[0 2 2/3]

Page 21: Sugárkövetés: ray-casting, ray-tracing

Benne van-e a hszben((r2 - r1) x (p - r1)) ·n > 0 ((r3 - r2) x (p - r2)) ·n > 0 ((r1 - r3) x (p - r3)) ·n > 0

[0 3 2], [1 1 1], [-1 2 1]

[1 -2 -1]×[-1 1 -1/3] = [5/3 4/3 -1][5/3 4/3 -1]·[1 2 -3] = 5/3 + 8/3 + 3 > 0

stb…ha mind igaz, a pont bent van a hszbenha nem, a sugár nem metszi a hszt

[0 2 2/3]

Page 22: Sugárkövetés: ray-casting, ray-tracing

Árnyaló normálokÁrnyaló normálok

N1N2

N3

N

N = A X + B Y + C

(X1 , Y1 , Z1 )

N1 = A X1 + B Y1 + CN2 = A X2 + B Y2 + CN3 = A X3 + B Y3 + C

3 változóslineáris egyenletrendszer

A, B, C

Page 23: Sugárkövetés: ray-casting, ray-tracing

Parametrikus felületekParametrikus felületekr(u,v), u,v in [0,1]ray(t) = eye + v ·t, t > 0

r(u,v) = ray(t)

Egyenlet megoldás:u,v,t

Teszt:0< u,v < 1, t > 0 Rekurzív tesszelláció

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)

Page 24: Sugárkövetés: ray-casting, ray-tracing

Transzformált objektumokTranszformált objektumok

T1

T2

T1-1

T2 -1

Page 25: Sugárkövetés: ray-casting, ray-tracing

CSG modellekCSG modellekKülönbség:

gömb

tégla

Reguláris halmazműveleta szakaszokra:

Page 26: Sugárkövetés: ray-casting, ray-tracing

Ray-casting képekRay-casting képek

Lokálisillumináció

valós idő

Lokálisillumináció+árnyékok0.1 sec …1 sec

Page 27: Sugárkövetés: ray-casting, ray-tracing

SugárkövetésSugárkövetés

LlÁrnyék sugár

Tükör sugár

Tört sugár

L() = Le()+lrlLl (’l) fr (’l ,) cos ’l + ka La

+ + kr Lin (r) + kt Lin(t)Tükör irányból érkező

fényTörési irányból érkező

fény

Page 28: Sugárkövetés: ray-casting, ray-tracing

Sugárkövetés lépéseiSugárkövetés lépései

A szembe a pixel irányából érkező sugársűrűség– Adott irányba látható felületi pont és normálvektor– A felületi pontból látható fényforrások– A felületi pontban a tükör és törési irány– A tükör irányból érkező sugársűrűség– A törési irányból érkező sugársűrűség– Az árnyalási egyenlet kiértékelése Rekurzió

Page 29: Sugárkövetés: ray-casting, ray-tracing

Render( ) for each pixel p

Ray r = ray( eye pixel p ) color = Trace(ray)

RGB = ToneMapping(color)WritePixel(p, RGB)

endforend

ray

RGB

p

p

Sugárkövetés (Ray-tracing)Sugárkövetés (Ray-tracing)

Page 30: Sugárkövetés: ray-casting, ray-tracing

Sugárkövetés: Trace függvénySugárkövetés: Trace függvényColor Trace( ray ) IF (FirstIntersect(ray object, x)>0 )

RETURN La

ENDIF color = Le (x, -ray.dir) color += Direct Lightsource(x, -ray.dir) IF ( kr > 0 ) THEN

ReflectDir( ray, reflected ray)color += kr · Trace( reflected ray )

ENDIF IF ( kt > 0 && RefractDir( ray, refracted ray ) )

color += kt · Trace( refracted ray ) ENDIFRETURN color

ray

x

Page 31: Sugárkövetés: ray-casting, ray-tracing

Sugárkövetés: Trace függvénySugárkövetés: Trace függvényColor Trace( ray, d) IF d > dmax THEN RETURN La

IF (FirstIntersect(ray object, x) > 0) RETURN La

ENDIF color = Le (x, -ray.dir) color += Direct Lightsource(x, -ray.dir) IF ( kr > 0 ) THEN

ReflectDir( ray, reflected ray)color += kr · Trace( reflected ray, d+1 )

ENDIF IF ( kt > 0 && RefractDir( ray, refracted ray ) )

color += kt · Trace( refracted ray, d+1 ) ENDIFRETURN color

ray

x

Page 32: Sugárkövetés: ray-casting, ray-tracing

DirectLightsourceDirectLightsourceDirectLightsource( x, vdir ) color = ka La

FOR each lightsource l DOshadowray = x to lightsource[l]t = FirstIntersect( shadowray );IF (t < 0 || t > |x - lightsource[l].pos|) color += Brdf(ldir, x, vdir) cos l' lightsource[l].IntensityENDIF

ENDFORRETURN color

árnyék

pixel

x

Page 33: Sugárkövetés: ray-casting, ray-tracing

Ray-tracer Ray-tracer osztálydiagramosztálydiagram

SceneObject

Sphere Mesh

Primitive( )

Intersect(Ray)Normal(Point)

Intersect(Ray)Normal(Point)

DefineRenderFirstIntersectDirectLightsourceTrace(Ray)

Light

Dir(Point)Intens(Point)

Latransform Le, pos

CameraXRES, YRESvrp, vpn, vupeye, ww, wh

GetXRes( )GetYRes( )GetRay(int,int)

Ray

DirStart

dir, start

MaterialLe, kd, ks, shine kr, kt, n

BRDFReflectDirRefractDir

Center, radius vertices[ ]

Primitive

Intersect(Ray)Normal(Point)

Page 34: Sugárkövetés: ray-casting, ray-tracing

Sugárkövetés: eredménySugárkövetés: eredmény

Számítási idő Pixelszám x Objektumszám x (Fényforrás szám+1)

Page 35: Sugárkövetés: ray-casting, ray-tracing

Befoglaló térfogat Befoglaló térfogat (Bounding Volume)(Bounding Volume)

double IntersectBV( ray, object ) // < 0 ha nincs IF ( Intersect( ray, bounding volume of object) < 0) RETURN -1; RETURN Intersect( ray, object );END

Page 36: Sugárkövetés: ray-casting, ray-tracing

Térpartícionáló módszerekTérpartícionáló módszerek

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

Elő-feldolgozás

objektumok

Térpartícionálóadatstruktúra

Sugárkövetés

Elsőmetszéspont

Page 37: Sugárkövetés: ray-casting, ray-tracing

Sugárkövetés: FOR each cell of the line // line drawing

Metszés a cellában lévőkkelIF van metszés RETURN

ENDFOR

átlagos eset komplexitás: O(1 )

Reguláris térhálóReguláris térhálóElőfeldolgozás: Minden cellára a metszett objektumok

komplexitás: O(n ·c ) = O(n 2)

Page 38: Sugárkövetés: ray-casting, ray-tracing

Cellák bejárására algoritmusNyilvántartjuk, mely t sugárparaméternél lépjük át a

következő x,y,z irányú cellahatároló síkot, (Cx, Cy, Cz) a cellaméret

– kezdetben változás

Ix = Ex / Cx

Tx = (Ix+1)Cx/Dx

ebben a cellábanvagyunk

ennél a t értéknéllépünk

Ix += 1

Tx += Cx/Dx

Tx, Ty, Tz; kiválasztjuk a legkisebbetfrissítjük I-t és T-t

Page 39: Sugárkövetés: ray-casting, ray-tracing

Sugárkövetés: FOR összes sugár által metszett cellára

Metszés a cellában lévőkkelIF van metszés RETURN

ENDFOR

Nyolcas (oktális) faNyolcas (oktális) faFaépítés( cella ): IF a cellában kevés objektum van

cellában regisztráld az objektumokat ELSE

cellafelezés: c1, c2, …, c8Faépítés(c1); … Faépítés(c8);

ENDIF

2

1 3

Octree

12

3 3

Page 40: Sugárkövetés: ray-casting, ray-tracing

Binary Space Partitioning fa (kd-fa)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éscella felezés a síkkal: c1, c2Faépítés(c1); Faépítés(c2);

ENDIFSugárkövetés: FOR each cell intersecting the line

Metszés a cellában lévőkkelIF van metszés RETURN

ENDFORkd-tree

2

1 3

12 3