4.6. a fénysugár-követés módszere (ray-tracing)
DESCRIPTION
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 tárgyról jön ? És az ott milyen színű ? (4.7. ÁRNYALÁS). 2. Tárgytér-módszerek:. Tárgytér: valódi távolságok és szögek ( N 0 ) - PowerPoint PPT PresentationTRANSCRIPT
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 tárgyról jön ?
• És az ott milyen színű ? (4.7. ÁRNYALÁS)
2
Tárgytér-módszerek:
• Tárgytér: valódi távolságok és szögek (N0)
• SzKR: szem-(kamera-)KR
• Nézetmező: csonkagúla
• Közelsík (és távolsík)
• Mélységvágás (k,t)
• Oldalvágás (2D)
A fénysugár-követés módszere
• Fénysugár-követés (ray-tracing)
• A tárgytérben (SZKR)
• minden K i j képpontban:
ott mi látszik? (melyik felület-elem?)
• és ott milyen színárnyalat látszik?
kiszámítása „megvilágítási módszerrel”
• „Valószerű képek” (realistic images)
egyik módszere
fényforrások, árnyékok, fény-visszaverődés,
átlátszó testek
Az FSK eljárás váza
• Előtte: VKR SzKR (tárgytér) , vágás (jelöléssel)
• Keret kijelölése;
raszter: K i j képpontok
• „fénysugarak:” C K i j
X = O + t · (K i j - O) = t · K i j ; O = (0,0,0)
• a legközelebbi felület? (ciklus a laplistán végig)
• Ci j = {r, g, b}, megvilágítás
• C0; C i : visszaverődés, árnyékok, átlátszó felületek
A kép kerete
• A szemtől (O) d (~ 50 cm) távolságra
• a b (~30 40 cm) oldalú
• K i j képpontok:
i = 0,1,…,umax,
j = 0,1,…,vmax
x i = - a / 2 + du
y j = - b / 2 + dv
• for j := 0 to vmax do
for i := 0 to umax do begin … end;
• A fénysugár: X = t · K i j ; t > 1
A ciklus magja:
• // minden i és j-re (azaz: minden képpontra):
sugár : „ X = t · K i j ” ;
zxy := zmax; lapxy := háttérlap; // a háttér följegyzése
foreach felületelem do begin
„P(x,y,z, u,v,t) := döféspont”; // -ot keresünk
if (van döféspont) then
if z < zxy then begin // közelebb van?
zxy : = z; lapxy := lap; // a f.elem följegyzése
end; // if-if
end; // foreach lap
putPixel(i,j, „a lapxy színe a zxy pontban”); // árnyalás
A metszéspontok kisszámítása
• Időben kritikus:
minden képpontnál - minden lapra
• Felület-elem: háromszög, gömb, másodrendű
paraméteres felület, stb.
• Sugár és háromszög metszéspontja:
a sugár: X = t · K i j
a háromszög: X = Q + u · (P - Q) + v · (R -
Q)
metszéspont a PQR síkkal: { u, v, t }
if ( 0 u, v, u + v 1 ) then
// a háromszögön belül
• Időben kritikus gyorsítás kell
Gyorsítások
• foreach y foreach x foreach lap …
• „vágás”: a kereten kívüliek megjelölése
• Testek-lapok dobozolása
• lapok rendezése legkisebb z szerint
• Szabályos (reguláris) térháló
• Nyolcasfa
• BSP-fa
Megjegyzések
• Láthatóság: (i,j) a Ki j-ben látható háromszög, (x, y, z)
• putPixel(i,j, „a lapxy színe a zxy pontban”); // árnyalás
az árnyalási modell szerint:
Fi j (lap, x, y, z): a képpont színe
első közelítés
• „Láthatóság”: egy FF látható-e az (x.y.z)-ből !
Rekurzív FSK
• „Első ütközés”: a látott pont,
színe: a közvetlen megvilágításból
• A testek között fény-visszaverődés
(és átlátszó testeken fény áthaladás)
• Milyen fény esik a látott pontba
másokról visszaverten?
(A testen áteresztve?)
Rekurzív FSK és fénytörés
• Az ideális visszaverődés törvénye:
(LN) szög = (SN) szög; egy síkban
• A fénytörés törvénye:
sin / sin = nk / nb; egy síkban
• s1: elsődleges sugár: a néző iránya
• s2v: másodlagos, visszavert sugár
s2a másodlagos, áteresztett sugár;
• Jöhet-e fény s2v és s2a felől
• Jöhet-e fény ezek felől?
• Csak véges számú visszaverést számolunk
• Csak az ideális visszaverési irányt számoljuk
Olvasmány,
a rekurzív fskegy eljárásának vázlata:
for j := 0 to ymax do for i := 0 to xmax do begin s1 := „P= t·Kij”;
szin := FSK ( s1 );putPixel(i,j, szin);
end; {for i,j}
Color function FSK( s1:Vector3D );var mpt: Point3D; ksz: Color;
begin(mpt,felület) := aLegközelebbi(s1,felületlista);if (nincs mpt) then FSK := háttérSzín;else begin
ksz := megvilágításiModell(felület,mpt);FSK := ksz;
end; {if-else: van mpt}end; {FSK function}
Color function rFSK(kpt:Point3D; s1:Vector3D; mélység:Integer);var mpt: Point3D; s2v,s2á:Vector3D; ksz,vsz,ász: Color;
beginif mélység > korlát then rFSK := Fekete;else begin
(mpt,felület) := aLegközelebbi(s1,felületlista);if (nincs mpt) then szín:=háttérSzín;else begin
ksz := megvilágításiModell(felület,mpt);s2v := tükrözés(s1,felület,mpt);vsz := rFSK(metszéspt,s2v,mélység+1);s2t := megtörés(s1,felület, mpt);ász := rFSK(mpt,s2t,mélység+1)rFSK{szín} :=
kever(ksz,ksúly, vsz,vsúly, ász,ásúly);end; {if-else: van mpt}
end; {if-else: mélység<korlát}end; {rFSK function}