Metodi sledenja zarkov



Izdelal : Soban Damjan
September 1999


Abstract

In this article are described the two main volume rendering techniques, ray tracing and ray casting, which allow the visualization of three-dimensional data. Ray tracing with which most people are familiar is more complex than ray casting. However, the basic ideas of ray casting are identical to those of ray tracing. In the last years medical imaging has turned out to be one of the most popular applications of volume rendering.


Vsebina : Uvod
Ray tracing
Ray casting
Phong osvetlitveni model
Primeri slik
Racunalniski program
Uporabljena literatura




Uvod

Kljub temu, da je tridimenzionalna racunalniska grafika ze dalj casa prisotna se je v zadnjih letih zacela hitro razvijati. Ray tracing ena od tehnik za prikaz 3D teles je trenutno najbolj popolna simulacija osvetlitveno-odbojnega modela v racunalniski grafiki, vendar je bolj zapletena od tehnike ray casting pri kateri nam povrsin ni treba racunsko popisati. Slednja je v zadnjem casu prisla do izraza zlasti v medicini za selektivni 3D prikaz dvodimenzionalnih slik dobljenih s tomografijo. Predstavljen racunalniski program na enostaven nacin demonstrira obe tehniki prikaza.



Ray tracing

Ray tracing je nacin prikaza, pri katerem skozi vsako povrsinsko tocko(pixel) slike na katero projiciramo predmet posljemo svetlobni zarek iz tocke gledanja(oko). Parametricna formulacija zarka je naslednja :

x = x0 + t * dx
y = y0 + t * dy
z = z0 + t * dz

kjer je dx = (x1 - x0) / ((x1 - x0) ^2 + (y1 - y0) ^2 + (z1 - z0) ^2) ^(1/2) ter analogno dy in dz. x0, y0, z0 so koordinate tocke iz katere gledamo, x1, y1, z1pa kordinate tocke na sliki(zaslonu). Ponavadi izberemo z1 = 0. Ko zarek naleti na povrsino telesa je potrebno izracunati njuno presecisce. Eden enostavnejsih primerov je presek zarka s sfero. Implicitna enacba sfere je:

(x -a) ^2 + (y -b) ^2 + (z -c) ^2 - r ^2 = 0

Na mesta x, y, z vstavimo pripadajoco enacbo parametricnega zapisa zarka. Izraz poenostavimo in dobimo :

A * t ^2 + B * t + C = 0

A = dx ^2 + dy ^2 + dz ^2 = 1
B = 2 * (dx * (x0 - a) + dy * (y0 - b) + dx * (z0 - c))
C = (x0 - a) ^2 + dy * (y0 - b) ^2 + dx * (z0 - c) ^2 - r ^2


Nato izracunamo determinanto D = B ^2 - 4 * A *C. Ce je enaka ali vecja od nic se zarek sfere le dotakne(en koren) oz. jo prebode(dva korena). V kolikor je manjsa od nic zarek in sfera nimata skupne tocke.

t1,2 = (-B ± (B ^2 - 4 * A * C) ^(1/2)) / (2 * A)

V primeru, ko zarek prebada sfero upostevamo presecisce, ki je blizje ocesu saj zakriva tisto, ki je oddaljeno bolj in ga zakriva. Koordinate presecisca so potem :

xp = x0 + t * dx
yp = y0 + t * dy
zp = z0 + t * dz

Dolociti moramo se normalni vektor na sfero v tocki presecisca, ker ga potrebujemo pri nadalnjem izracunu :

Nx = xp - a
Nx = yp - b
Nx = zp - c

Koordinate vektorja moramo deliti se z njegovo dolzino saj mora biti enotski. Barvo tocke na zaslonu nato dolocimo npr. z Phong osvetlitvenim modelom.



Ray casting

Pri tem nacinu prikaza za vsako prostorsko tocko(voxel), ki je del telesa, ki ga zelimo prikazati poznamo njeno barvo C ter neprozornost a (a=1 pomeni, da tocka ne prepusca svetlobe, a=0 pa da je popolnoma prozorna). Skozi vsako tocko(pixel) dela ravnine na katero projeciramo sliko(zaslon) posljemo svetlobni zarek v mnozico prostorskih tock, ki predstavljajo telo. Zarki so med seboj vzporedni, saj bi se, ce bi izhajali vsi iz iste tocke, vedno bolj oddaljevali eden od drugega in tako ne bi dosegli vseh prostorskih tock. Ko se pomikamo v smeri zarka sproti akumuliramo barve posameznih prostorskih tock skozi katere zarek potuje. Doprinos posamezne barve tocke h koncni barvi, ki jo vidimo na zaslonu je odvisen od neprozornosti tocke. To pomeni, da moramo akumulirati tudi neprozornost tock. Akumulirana neprozornost tako narasca in ko doseze vrednost 1 nadalnja obravnava tock v smeri zarka ni vec smiselna saj na koncno barvo ne vplivajo vec.

Cak = Cak + Ci * ai * (1 - aak)
aak = aak + ai * (1 - aak)

Cak
in aak predstavljata akumulirano barvo in neprozornost, Ci in ai pa barvo ter neprozornost trenutno obravnavane prostorske tocke. Pri dolocitvi Ci upostevamo ai ter lokalno osvetlitev npr. Phong osvetlitveni model. Velika prednost tega nacina prikaza je, da nam povrsin ni treba racunsko popisati. Normalni vektor na ploskev, ki ga potrebujemo pri izracunih pa izracunamo s pomocjo gostote materiala D posamezne prostorske tocke. Komponente normalnega vektorja dobimo s pomocjo naslednjih izrazov :

Nx = D(x+1,y,z) - D(x-1,y,z)
Ny = D(x,y+1,z) - D(x,y-1,z)
Nz = D(x,y,z+1) - D(x,y,z-1)



Phong osvetlitveni model


S tem modelom osvetlitve, ki je linearna kombinacija treh komponent :

1. Ambientalne : Ig = Ia * ka
2. Razprsilne : Id = Ii * kd(L * N)
3. Zrcalne : Is = Ii * ks(R * V)n

dolocimo intenziteto svetlobe, ki prihaja iz obravnavane tocke. Ce upostevamo tudi odboj in lom svetlobe, moramo tem trem komponentam dodati se dve in sicer odbojno in lomno. Ko vse sestejemo dobimo intenziteto svetlobe, ki prihaja iz opazovane tocke v oko :

I = Ia * ka + Ii * kd(L * N) + Ii * ks(R * V)n + Ir * ks + It * kt

Hitrost izracunavanja zgornje enacbe lahko povecamo ob upostevanju nekaterih geometrijskih poenostavitev. Ob predpostavki, da se tocka iz katere gledamo na predmet in izvor svetlobe nahajata v neskoncnosti sta vektorja L in V konstantna na obmocju predmeta. Ker je izracun vektorja R zamuden raje uporabimo vektor H. Nov izraz za intenziteto svetlobe ima sedaj novo obliko :

I = Ia * ka + Ii * kd(L * N) + Ii * ks(N * H)n + Ir * ks + It * kt

V zgornjih izrazih pomenijo : Ia intenziteto ambientalne svetlobe, Ii intenziteto svetlobe tockastega izvora, Ir in It pa intenziteti odbite in lomljene svetlobe.ka, kd, ks in kt so koeficienti ambientalne osvetlitve, razprsitve, odboja ter loma svetlobe, n pa je koeficient, ki simulira hrapavost povrsine. L je vektor v smeri proti izvoru svetlobe, N normalni vektor na opazovano ploskev, R vektor, ki kaze v smeri odbitega zarka, H pa vektor ki lezi na simetrali med L in vektorjem v smeri tocke gledanja V.Vsi vektorji izhajajo iz opazovane tocke in so enotski.



Primeri slik, ki prikazujejo obe tehniki prikaza

Ray tracing Ray casting
slika1 slika4
slika2 slika5
slika3 slika6


Pri slikah 4 in 5, ki prikazujeta zgornji del cloveskega telesa, je lepo razvidna razlicna nastavitev neprozornosti posameznega dela telesa. Delu, ki ga zelimo prikazati priredimo neprozornost 1, vsem ostalim pa 0. Tako bo viden le izbrani del, kar je zelo ugodno, saj bi ob prikazu vseh delov slika bila nejasna, ker bi vsebovala prevec informacij. Slika6 prikazuje del glave stiritaktnega motorja z notranjim izgorevanjem, slike 1, 2, 3 pa izmisljene prizore ter sposobnost ray tracing-a.



Racunalniski program

Program deluje v okolju Windows. Za boljsi prikaz barv je dobro, ce nastavimo barve(zaslon-lastnosti) na True color(24-bit) ali boljse. V istem oknu moramo nastaviti velikost pisave na majhna pisava(Small fonts) sicer program ne bo deloval pravilno. Datoteke semrpk.exe, vbrun300.dll in threed.vbx je potrebno shraniti v isti direktorij. Ko program zazenemo so zacetne nastavitve ze vnesene, lahko pa jih poljubno spreminjamo. V okvijru Podatki vnasamo naslednje parametre :

• Barvo dela telesa : 1 - bela
2 - rdeca
3 - zelena
4 - modra
5 - magenta

• Neprozornost telesa : vrednost parametra je lahko med 0 in 1

• Rotacijo telesa v kartezijevem koordinatnem sitemu v stopinjah

• Z normalnim vektorjem in oddaljenostjo od koordinatnega izhodisca dolocimo ravnino, ki presece telo

• Pozicijo izvora svetlobe


V spodnjem levem kotu okna izberemo nacin prikaza. Izbiramo lahko med Ray tracing in Ray casting. Ce izberemo Ray tracing lahko se dodatno izberemo ali zelimo prikaz sence in odboja svetlobe. Ko so zeljeni parametri vneseni izris slike pozenemo s pritiskom na gumb Risi. Ce kontrast in svetlost slike nista optimalna poskusamo to popraviti z nastavitvijo le teh na monitorju, ce pa se to ni dovolj si pomagamo z Gama korekcijo(spodnji desni kot okna). Ce je vrednost vecja od 1 bo slika svetlejsa, ce je manjsa bo temnejsa(1 pomeni ni korekcije). Tem bolj, ko se vrednost korekcije oddaljuje od 1 tem bolj slika zgublja na dinamiki.

Ko se z misko premikamo po sliki se v okvijru pod sliko izpisujejo koordinati in oznaka barve tocke na katero kazemo. V desnem delu istega okvirja je prikazan trenutni status programa. Ce program izrisuje sliko je velikost ze izrisanega dela slike v primerjavi s celotno velikostjo izpisana v procentih. Ce zelimo sliko izbrisati to storimo s pritiskom na gumb Brisi. V kolikor slike ne izbrisemo se nova slika izrise nad staro. Program koncamo s pritiskom na gum Konec.


Primeri slik narejenih s programom

Ray tracing
Pri obeh slikah se lepo vidijo sence in odboj svetlobe. Se posebej nazorno se vidi sliko zelene krogle na modri, rdeci, magenta in del le te na desni sliki tudi na prerezani beli krogli. Na desni sliki je ravnina, ki sece belo kroglo blize njenemu srediscu kot na levi sliki.


Ray casting
Na zgornji levi sliki vidimo, da se manjse stiri krogle nahajajo v vecji beli. Neprozornosti vseh krogel so manjse od ena(toda vecje od nic) in zato je lepo vidna njihova notranjost. Na desni zgornji sliki se bele krogle ne vidi, modra pa je komaj opazna. Njuni neprozornosti sta nic oz. za modro blizu nic. Rdeca in zelena krogla sta maksimalno vidni, njuna neprozornost je enaka ena. Na spodji sliki je prikazana prerezna ravnina ter preostali del telesa pod njo.



Uporabljena literatura

Alan Watt
3D Computer Graphics
Addison Wesley, second edition, 1993