SVEUČILIŠTE U ZAGREBU PRIRODOSLOVNO-MATEMATIČKI FAKULTET FIZIČKI ODSJEK Bruno Paun Diplomski rad ISTRAŽIVANJE KAUSTIKE METODOM PRAĆENJA SVJETLOSNIH ZRAKA I USPOREDBA S EKSPERIMENTOM Zagreb, 2011. SVEUČILIŠTE U ZAGREBU PRIRODOSLOVNO-MATEMATIČKI FAKULTET FIZIČKI ODSJEK SMJER: PROF. FIZIKE I TEHNIKE Bruno Paun Diplomski rad ISTRAŽIVANJE KAUSTIKE METODOM PRAĆENJA SVJETLOSNIH ZRAKA I USPOREDBA S EKSPERIMENTOM Voditelj diplomskog rada: dr.sc. Antonio Šiber Ocjena diplomskog rada: ____________________ Povjerenstvo: 1.____________________ 2.____________________ 3.____________________ Datum polaganja: Zagreb, 2011. ____________________ Ovaj rad posvećen je mome ocu bez čije bezuvjetne podrške i pomoći ne bih bio ono što sada jesam. Josip Paun 3.3.1937. – 28.5.2011. Počivao u miru. Zahvaljujem, svome mentoru dr.sc. Antoniju Šiberu na motivaciji i podršci u životnoj situaciji u kojoj sam se našao za vrijeme nastajanja ovog rada kao i na razumijevanju, strpljenju i pomoći u procesu izrade istog. Također zahvaljujem svojim roditeljima na bezuvjetnoj podršci i pomoći koju su mi pružili tokom studija, bez njih ništa od ovog ne bi bilo moguće. Sadržaj 1. Uvod ....................................................................................................................... 7 2. POV Ray................................................................................................................. 9 2.1. Koordinatni sustav POV Ray-a.................................................................. 9 2.1.1. Transformacije ........................................................................... 11 2.1.1.1. Translacija .................................................................... 11 2.1.1.2. Skaliranje ..................................................................... 11 2.1.1.3. Rotacija ........................................................................ 12 2.1.1.4. Matrica ......................................................................... 13 2.1.1.5. Redoslijed transformacija ............................................. 13 2.1.1.6. Inverzna transformacija ................................................ 14 2.2. Dodavanje promatrača (kamere)............................................................. 14 2.3. Opisivanje objekta ................................................................................... 15 2.3.1. Dodavanje teksture objektu ....................................................... 15 2.4. Definiranje izvora svjetlosti ...................................................................... 17 2.4.1. Točkasti izvor svjetlosti .............................................................. 17 2.4.2. Usmjereni izvor svjetlosti (spotlight izvor, reflektor) ................... 17 2.4.3. Cilindrični izvor svjetlosti ............................................................ 19 2.4.4. Površinski izvor svjetlosti (Area light) ........................................ 19 2.4.5. Ambijentalni izvor svjetlosti ........................................................ 20 2.5. Osnovni objekti u POV Ray-u ................................................................. 21 2.5.1. Kvadar ....................................................................................... 21 2.5.2. Sfera .......................................................................................... 21 2.5.3. Stožac........................................................................................ 22 2.5.4. Cilindar ...................................................................................... 22 2.5.5. Ravnina ..................................................................................... 23 2.5.6. Torus ......................................................................................... 23 2.6. CSG ........................................................................................................ 24 2.6.1. Unija .......................................................................................... 24 2.6.2. Presjek....................................................................................... 25 2.6.3. Razlika ....................................................................................... 26 2.6.4. Spajanje..................................................................................... 27 2.6.5. Inverz ......................................................................................... 29 1 2.6.6. Naredba Clipped By .................................................................. 30 2.7. Naredba finish ......................................................................................... 31 2.7.1. Naredba ambient ....................................................................... 31 2.7.1.1. Radiosity tehnika .......................................................... 32 2.7.2. Difuzna refleksija ....................................................................... 33 2.7.3. Područja naglašene osvjetljenosti ............................................. 34 2.7.3.1. Naredba phong ............................................................ 34 2.7.3.2. Naredba specular ......................................................... 35 2.7.3.3. Modifikator područja naglašenog osvjetljenja metala ... 36 2.7.4. Spekularna refleksija ................................................................. 36 2.7.4.1. Varijabilna refleksija ..................................................... 37 2.7.5. Očuvanje energije pri refleksiji ................................................... 40 2.8. Naredba interior ...................................................................................... 40 2.8.1. Refrakcija svjetlosti .................................................................... 41 2.8.2. Disperzija svjetlosti .................................................................... 41 2.8.3. Slabljenje svjetlosti .................................................................... 43 3. Iscrtavanje scene .................................................................................................. 44 3.1. Metoda praćenja zraka............................................................................ 44 3.2. Metoda mapiranja fotona ........................................................................ 46 3.2.1. Prvi korak - praćenje fotona ....................................................... 47 3.2.1.1. Emisija fotona .............................................................. 47 3.2.1.2. Raspršenje fotona ........................................................ 48 3.2.1.3. Pohranjivanje fotona .................................................... 49 3.2.2. Drugi korak - iscrtavanje ............................................................ 50 3.3. Metoda mapiranja fotona i POV Ray ....................................................... 52 3.3.1. Korištenje metode mapiranja fotona u POV Ray-u .................... 52 3.3.2. Globalne postavke fotona .......................................................... 53 3.3.3. Ispaljivanje fotona u objekt ........................................................ 59 3.3.4. Fotoni i izvori svjetlosti ............................................................... 61 4. Kaustika ................................................................................................................ 62 4.1. Konstrukcija kaustika metodom praćenja zraka ...................................... 66 4.2. Kaustika u refleksiji i POV Ray ................................................................ 73 4.3. Kaustika u refrakciji i POV Ray ............................................................... 88 5. POV Ray u nastavi fizike .................................................................................... 100 2 5.1. Konstruktivistički pristup ........................................................................ 101 6. Zaključak ............................................................................................................ 105 7. Literatura ............................................................................................................ 106 3 Popis slika Slika 1. Koordinatni sustav POV Ray-a .................................................................... 10 Slika 2. Određivanje pozitivnog smjera rotacije pravilom lijeve ruke ......................... 10 Slika 3. Parametri usmjerenog izvora svjetlosti ........................................................ 18 Slika 4. Unija............................................................................................................. 24 Slika 5. CSG objekt dobiven operacijom unije .......................................................... 25 Slika 6. Presjek ......................................................................................................... 25 Slika 7. CSG objekt dobiven operacijom presjeka .................................................... 26 Slika 8. Razlika ......................................................................................................... 26 Slika 9. CSG objekt dobiven operacijom razlike ....................................................... 27 Slika 10. Spajanje ..................................................................................................... 28 Slika 11. Razlika između unije i spajanja .................................................................. 28 Slika 12. CSG objekt dobiven kombinacijom operacije presjeka i inverza ................ 29 Slika 13. Rezultat naredbe clipped by ...................................................................... 30 Slika 14. CSG objekt dobiven naredbom clipped by ................................................. 30 Slika 15. Skica okomito polariziranog EM vala ......................................................... 38 Slika 16. Skica paralelno polariziranog EM vala ....................................................... 39 Slika 17. Način rada metode praćenja zraka ............................................................ 46 Slika 18. Metoda mapiranja fotona ........................................................................... 47 Slika 19. Emisija fotona iz izvora svjetlosti................................................................ 48 Slika 20. Primjer foto-realistične slike kreirane metodom mapiranja fotona u jednom od programskih paketa za iscrtavanje ....................................................................... 51 Slika 21. Ispaljivanje fotona u ciljani objekt ............................................................... 57 Slika 22. 2D i 3D reprezentacija kaustičkih površina ................................................. 63 Slika 23. Da Vincijeve konstrukcije kaustika ............................................................. 64 Slika 24. Katakaustike kružnice ................................................................................ 68 Slika 25. Katakaustike krivulja funkcija sin(x), -x3+x5 i sin(x)3 ................................... 68 Slika 26.Katakaustike kardioide ................................................................................ 69 Slika 27. Parabola i njezin fokus, kružnica i njezino ishodište .................................. 69 Slika 28. Diakaustika sinusne krivulje i elipse ........................................................... 70 Slika 29. Katakaustika – envelopa svjetlosnih zraka projicirana na horizontalnu ravninu ...................................................................................................................... 73 Slika 30. Eksperimentalno opažanje kaustike u šalici kave fotografijom .................. 74 4 Slika 31. Skica postava šalice sa kavom .................................................................. 74 Slika 32. Ovisnost oblika kaustike o upadnom kutu α ............................................... 77 Slika 33. Ovisnost oblika kaustike o visini tekućine h ............................................... 78 Slika 34. Skica kaustike u šalici za h*ctgα > r/2 ........................................................ 78 Slika 35. Skice i slike kaustika prvog, drugog i trećeg reda na metalnom prstenu.... 79 Slika 36. POV Ray simulacija kaustika prvog, drugog i trećeg reda na metalnom prstenu...................................................................................................................... 79 Slika 37. POV Ray simulacija kaustika četvrtog i petog reda.................................... 80 Slika 38. Skica virtualnog postava ............................................................................ 83 Slika 39. Kaustike prvog i drugog reda u metalnom cilindru ..................................... 84 Slika 40. POV Ray simulacija kaustika višeg reda.................................................... 84 Slika 41. Kaustike prvog, drugog i trećeg reda dobivene paralelnim zrakama svjetlosti ................................................................................................................................. 85 Slika 42. Skica konstrukcije kaustike prvog reda refleksije ....................................... 86 Slika 43. Rezultat konstrukcije kaustike prvog reda refleksije................................... 87 Slika 44. Kaustička mreža na brodu i u bazenu. Geometrijska reprezentacija nastajanja kaustičkih mreža...................................................................................... 88 Slika 45. POV Ray simulacija kaustičke mreže u bazenu ......................................... 92 Slika 46. Određivanje smjera refraktirane zrake i konstrukcija kaustičkih krivulja u slučaju refrakcije svjetlosnih zraka na površini vode predočene sinusnom krivuljom 93 Slika 47. POV Ray simulacija kaustičkog uzorka u bazenu dobivenog sinusoidalnom površinom vode ........................................................................................................ 95 Slika 48. 3D reprezentacija kaustičkih površina u bazenu dobivenih sinusoidalnom površinom vode i POV Ray simulacija kaustike u bazenu ........................................ 96 Slika 49. POV Ray simulacije kaustike u bazenu dobivene sinusoidalnom površinom vode frekvencije 2Hz ................................................................................................ 96 Slika 50. POV Ray simulacije kaustika u bazenu dobivenih površinama vode predočenih funkcijama {y + f_sine_wave(z,0.1,1) + f_sine_wave(x,0.1,1)} i {y + f_sine_wave(z,0.3,1) * f_sine_wave(x,0.3,1)} ........................................................... 97 Slika 51. POV Ray simulacija kaustike u bazenu dobivene nasumičnom površinom vode predočene funkcijom {y + f_noise3d(0,0,z)} ..................................................... 98 Slika 52. POV Ray simulacija kaustike u bazenu dobivene nasumičnom površinom vode predočene funkcijom {y + f_noise3d(x,0,z)*0.5} ............................................... 98 5 Slika 53. Izgled površina vode predočenih funkcijama {y + f_sine_wave(z,0.1,1) + f_sine_wave(x,0.1,1)} i {y + f_sine_wave(z,0.7,1) * f_sine_wave(x,0.7,1)} ............... 98 Slika 54. Izgled površina vode predočenih funkcijama {y + f_noise3d(0,0,z)} i {y + f_noise3d(x,0,z)*0.5} ................................................................................................ 99 6 1. Uvod Tema ovog diplomskog rada su kaustike, fizički fenomeni koji se pojavljuju u prirodnom fokusiranju svjetlosti. Kaustika unutar granica geometrijske optike predstavlja envelopu reflektiranih ili refraktiranih zraka svjetlosti projiciranu na neku površinu. Zamjećujemo ih kao svjetle linije povećanog intenziteta svjetlosti koje postaju vidljive tek kad su projicirane na neku površinu poput stola, zida i sl. Tipičan primjer kaustike je „otisak“ koji svjetlost ostavlja na stolu nakon prolaska kroz čašu ispunjenu vodom ili dinamika fokusirane svjetlosti na dnu morskog plićaka. To su kaustike refraktirane, prolazne svjetlosti. Kaustiku reflektirane svjetlosti možemo vidjeti npr. u unutrašnjosti metalnog prstena postavljenog na podlogu kad je izvor svjetlosti u povoljnom položaju za nastanak kaustike ili u šalici kave koju ispijamo u sunčano jutro ili u mome slučaju kasno navečer pod stolnom lampom dok pišem ovaj rad. Kaustika predstavlja snažno lokalno pojačanje intenziteta svjetlosti, a može ju se približno shvatiti i kao „razmrljani“ fokus optičkog elementa koji predstavlja dobro nam poznate aberacije optičkih naprava. Točan izgled kaustike ovisi o obliku trodimenzionalnog optičkog elemenata te njegovom položaju s obzirom na izvor svjetlosti i podlogu na koju se kaustika projicira. Cilj ovog diplomskog rada je objasniti fiziku/optiku koja stoji iza pojave kaustike, te simulirati pojavu kaustike u okviru računalnog programa za simulaciju optike metodom praćenja svjetlosnih zraka (tzv. raytracing), POV Ray. Program je slobodno dostupan i vrlo pogodan za primjene u matematici i fizici jer se geometrijska i fizikalna svojstva optičkog sustava kodiraju/programiraju. U ovom radu krećem od pretpostavke da čitatelj nije upoznat sa POV Ray-em i njegovim programskim jezikom, baš poput mene prije nego što sam počeo pisati ovaj rad, stoga prvo prolazim kroz osnovne elemente potrebne za stvaranje postava eksperimenta u virtualnom prostoru POV Ray-a. Nakon osnova prelazim na naprednije funkcije koje su potrebne da bismo simulirali stvaranje kaustika u virtualnim postavima. U drugom dijelu rada objašnjavam glavne metode iscrtavanja virtualnog postava: metoda praćenja zraka i metoda mapiranja fotona. Razumijevanje tih metoda bitno je za shvaćanje načina na koji POV Ray simulira fizikalne pojave. U svijetu računalne grafike, metoda praćenja svjetlosnih zraka se koristi u izradi vjerodostojnih fotorealističnih simulacija te izrada slika u kojima su fizikalni zakoni refleksije i refrakcije svjetlosti ispoštovani i suštinski važni za vjerodostojnost prikaza npr. prikaz vode, zrcala, stakla, i sl. Za neke zahtjevnije fizikalne pojave poput kaustika potrebna nam je metoda mapiranja fotona koja predstavlja metodu globalnog osvjetljenja koja nam omogućuje kreiranje još vjerodostojnijih foto-realističnih prikaza. Tako moderni programski paketi/jezici za iscrtavanje foto-realističnih slika postaju virtualni fizikalni laboratoriji i omogućuju vjernu simulaciju različitih pojava vezanih uz prostiranje svjetlosti i njeno međudjelovanje s makroskopskom okolinom. Treći dio rada posvećen je kaustikama, njihovim geometrijskim svojstvima i načinu njihove konstrukcije unutar granica geometrijske optike. Za odabrane primjere 7 kaustike provedeni su odgovarajući eksperimenti, te su numerički/ raytracing rezultati uspoređeni s eksperimentom. Zadnje poglavlje predstavlja metodičku obradu fenomena prirodnog fokusiranja svjetlosti – kaustika. Tu predlažem način na koji bi kaustike mogli uključiti u skolski program i povezati ga sa paraaksijalnim modelom fokusiranja koji se obrađuje u nastavnom programu. Natrag na sadržaj 8 2. POV Ray POV Ray 1 (Persistence Of Vision Ray-tracer) je program koji se koristi za izradu 3D računalne grafike i animacija. Pomoću njega možemo kreirati trodimenzionalne fotorealistične slike koristeći tehniku iscrtavanja koja se zove praćenje zraka (eng. raytracing). POV Ray je besplatan (open source) program što ga čini često korištenim programom za izradu 3D kompjutorske grafike. Za razliku od ostalih komercijalnih programa on nije modeler, tj. nema grafičko sučelje za modeliranje objekata. Sve što modeliramo moramo programirati u integriranom editoru teksta (eng. text editor). To znači da sve elemente definiramo unošenjem tekstualnih naredbi. Jezik koji POV Ray koristi naziva se jezik opisa scene (eng. scene description language) i njegova je sintaksa vrlo slična sintaksi C i C++ programskog jezika. No čak i bez poznavanja programiranja ili nekih od sličnih programskih jezika korištenje POV Ray-a je vrlo intuitivno, a uz njega dolazi i odlična datoteka za pomoć (eng. help file). Sve elemente scene koje smo definirali u editoru teksta spremaju se u tekstualnu datoteku sa ekstenzijom .pov. Ta tekstualna datoteka sadrži sve informacije koje opisuju objekte, osvjetljenje i položaj kamere u sceni. POV Ray čita sadržaj te tekstualne datoteke, te na osnovu podataka iz datoteke izračunava i iscrtava finalnu sliku scene iz perspektive kamere. Nakon što iscrta cijelu sliku virtualne scene on ju sprema u BMP, TGA ili neku drugu podržanu slikovnu datoteku. Iscrtavanje slike tehnikom praćenja zraka nije nipošto brzi proces, no on stvara slike vrlo visoke kvalitete sa realističnim refleksijama, sjenama, perspektivom i mnogim drugim efektima. Natrag na sadržaj 2.1. Koordinatni sustav POV Ray-a Pri definiranju kamere, objekata i izvora svjetlosti u POV Ray-u moramo odrediti njihov položaj. Koordinatni sustav POV Ray-a ima pozitivnu y os usmjerenu prema gore, pozitivnu x os usmjerenu udesno i pozitivnu z os usmjerenu u ekran. Iz navedenoga nam je vidljivo da POV Ray kao i većina drugih programa za kompjutersku grafiku koristi lijevi koordinatni sustav prikazan na slici: 1 POV Ray for Windows Help 9 Slika 1. Koordinatni sustav POV Ray-a Jedinični vektori x, y i z predstavljaju bazu koja razapinje naš virtualni prostor. Kako se na našim prostorima u praksi najčešće koristi desni koordinatni sustav dok se ne naviknemo na upotrebu lijevog koordinatnog sustava možemo si pomoći pravilom lijeve ruke. Palac postavimo u smjeru pozitivne x osi (udesno), kažiprst u smjeru pozitivne y osi (prema gore) i srednji prst u smjeru pozitivne z osi (prema naprijed). To jedino možemo napraviti sa našom lijevom rukom. Pravilo lijeve ruke koristimo i za određivanje smjera rotacije. Ako palac postavimo da pokazuje u pozitivnom smjeru osi rotacije naši savinuti prsti pokazivati će pozitivni smjer rotacije. Ako palac postavimo postavimo u negativnom smjeru osi rotacije naši savinuti prsti će pokazivati negativni smjer rotacije. Slika 2. Određivanje pozitivnog smjera rotacije pravilom lijeve ruke1 Objekti, svjetla i kamera pozicioniraju se koristeći 3D koordinatni sustav. Položaji unutar tog koordinatnog sustava definiraju se vektorom položaja. Tri vrijednosti komponenata vektora odgovaraju njegovom x, y i z smjeru. Na primjer vektor <1,1,1> predstavlja točku koja se nalazi jednu jedinicu udesno, jednu jedinicu iznad i jednu jedinicu ispred centra virtualnog prostora koji se nalazi u <0,0,0>. Vektor počinje u ishodištu <0,0,0>, a završava u točki <1,1,1>. 10 Vektorima se ne definiraju samo točke. Pomoću njih možemo definirati iznose veličina, pomake ili rotacije elemenata scene, te promjene uzorka teksture koji je primijenjen na određenom objektu. Natrag na sadržaj 2.1.1. Transformacije Veličina, položaj, orijentacija i deformacija objekata unutar koordinatnog sustava kontrolira se modifikatorima koji se nazivaju transformacije. Transformacije koje podržava POV Ray-u su rotacija (rotate), skaliranje (scale) , translacija (translate) i matrica (matrix). Koriste se za okretanje, promjenu veličine i pomicanje objekta ili teksture. Bitno je napomenuti da u POV Ray-u ne postoje mjerne jedinice. Npr. translate <10,15,5> će pomaknuti objekt -10 jedinica u x smjeru, 15 jedinica u y smjeru i 5 jedinica u z smjeru. Da li su te jedinice metri, centimetri, stope, inči, svjetlosne godine ili bilo koja druga mjerna jedinica ovisi o programeru. On mora voditi brigu pri preračunavanju jedinica kako bi mu definirana scena bila konzistentna. Natrag na sadržaj 2.1.1.1. Translacija Objekti se pomiču dodavanjem modifikatora translacije. On se sastoji od ključne riječi translate nakon koje slijedi vektor pomaka. Tri veličine u vektorskom izrazu određuju broj jedinica pomaka u x, y i z smjeru. Modifikator translacije pomiče element relativno obzirom na njegov trenutni položaj, a ne apsolutno. Na primjer: sphere { <15, 20, 10>, 1 pigment { color rgb <0, 1, 0> } translate <-10, 15, 5> } Sfera će se pomaknuti sa položaja <15,20,10> na <5,35,15>. Modifikator translacije je ne pomiče na apsolutni položaj <-10,15,5>. Translacije su uvijek relativne prema položaju objekta prije pomaka. Natrag na sadržaj 2.1.1.2. Skaliranje Kada želimo promijeniti veličinu objekta ili uzorka teksture koristimo modifikator skaliranja. On se sastoji od ključne riječi scale nakon koje slijedi vektor skaliranja. Veličine u vektorskom izrazu određuju iznos skaliranja u x, y i z smjeru. 11 Neproporcionalno skaliranje se koristi za rastezanje ili stiskanje elementa. Vrijednosti veće od jedan rastežu element duž određene osi, dok vrijednosti manje od jedan i veće od nule stišću element. Skala je relativna prema trenutnoj veličini elementa. Ako je veličina objekta bila prethodno promijenjena korištenjem modifikatora skaliranja, tada će novo skaliranje promijeniti veličinu relativno u odnosu na trenutnu veličinu objekta. Mogu se koristiti višestruke vrijednosti skale kao na primjer: sphere { <0, 0, 0>, 1 scale <2, 1, 0.5> } što će sferu pretvoriti u elipsoid koji je dvostruko veći duž x osi, iste veličine duž y osi i upola manji duž z osi. Ako definiramo samu brojku (skalar) u izrazu skale ona se shvaća kao vektor čije su komponente jednakog iznosa. Tada je objekt uniformno (proporcionalno) skaliran za jednak iznos u svim smjerovima. Na primjer: object { Moj_Objekt scale 5 // jednako <5, 5, 5> } Kada je jedna od komponenata vektora skaliranja jednaka nuli, POV Ray mijenja njezinu vrijednost u 1 jer pretpostavlja da 0 znači bez skaliranja u tom smjeru. Tada se na ekranu ispisuje upozorenje: "Illegal Value: Scale X, Y or Z by 0.0. Changed to 1.0." Natrag na sadržaj 2.1.1.3. Rotacija Ako želimo promijeniti orijentaciju objekta ili uzorka teksture koristimo modifikator rotacije. On se sastoji od ključne riječi rotate nakon koje slijedi vektor rotacije. Veličine u vektorskom izrazu određuju broj stupnjeva rotacije oko x, y i z osi. Važno je napomenuti da je bitan redoslijed rotacija. Prvo se primjenjuje rotacija oko x osi, nakon toga oko y osi i na kraju oko z osi. Ako nismo sigurni da li je to rotacija koju želimo, objekt možemo rotirati korištenjem višestrukih izraza rotacije oko zasebne osi kako bi dobili željenu orijentaciju objekta. Na primjer: rotate <0, 30, 0> rotate <-20, 0, 0> rotate <0, 0, 10> će objekt prvo rotirati 30 stupnjeva oko y osi, zatim -20 stupnjeva oko x osi i na kraju 10 stupnjeva oko z osi, dok će: rotate <-20, 30, 10> 12 prvo rotirati objekt -20 stupnjeva oko x osi, zatim 30 stupnjeva oko y osi i onda 10 stupnjeva oko z osi. Iako koristimo iste iznose rotacija oko x, y i z osi ovi primjeri imaju za ishod potpuno drugačiju orijentaciju objekta. Rotacija se uvijek izvodi relativno obzirom na os. Osi rotacije smještene su u središtu virtualnog prostora, stoga ako je objekt udaljen od osi rotacije on neće samo rotirati, već će kružiti po orbiti oko osi. POV Ray koristi lijevi sustav rotacije. Natrag na sadržaj 2.1.1.4. Matrica Transformacijska matrica koristi se direktno određivnje složenih transformacija. Ključnom riječi matrix eksplicitno određujemo transformacijsku matricu koju možemo primjeniti na objeke ili njegove teksture. Sintaksa je sljedeća: matrix < Val_00, Val_10, Val_20, Val_30, Val_01, Val_02, Val_11, Val_12, Val21, Val22, Val_31, Val_32 > Vrijednosti od Val_00 do Val_32 su brojčane vrijednosti koje određuju elemente 4 puta 4 matrice. Bilo koja točka P=<px, py, pz>, je transformirana u točku Q=<qx, qy, qz> na sljedeći način: qx = Val_00 * px + Val_10 * py + Val_20 * pz + Val_30 qy = Val_01 * px + Val_11 * py + Val_21 * pz + Val_31 qz = Val_02 * px + Val_12 * py + Val_22 * pz + Val_32 Natrag na sadržaj 2.1.1.5. Redoslijed transformacija Kako su rotacije relativne obzirom na osi, a skaliranje relativno obzirom na ishodište, preporuka je da se objekt definira u ishodištu i da se u ishodištu rotira i skalira. Tada se može translatirati na željeni položaj. Najčešća pogreška je da se objekt precizno namjesti u željeni položaj, a zatim rotira. Kako rotacija udaljenog objekta uzrokuje kruženje objekta po orbiti oko osi rotacije, položaj objekta se može toliko promijeniti da nam objekt izađe iz područja vidljivosti kamere. Skaliranje objekta nakon translacije također pomiče objekt na neobičan način. Ako skaliramo objekt nakon translacije, skaliranje će pomnožiti iznos translacije. Na primjer: translate <5,6,7> scale 4 13 će translatirati objekt na položaj <20,24,28> umjesto na <5,6,7>. Pri korištenju transformacija se treba paziti na redoslijed, jer u protivnom nećemo dobiti ono što smo željeli. Natrag na sadržaj 2.1.1.6. Inverzna transformacija transform { scale <20, 24, 28> translate y*3 inverse } Inverzna transformacija ima suprotan učinak od obične transformacije i može se koristiti za poništavanje učinka običnih transformacija. Da postignemo učinak inverzne transformacije korištenjem običnih transformacija moramo duplicirati svaku transformaciju, promijeniti ih da čine suprotno onome što bi normalno činile (npr. translate -y*3 umjesto translate y*3) i okrenuti njihov redosljed. Ova transformacija je korisna kako ne bismo pisali nepotrebne linije koda. Natrag na sadržaj 2.2. Dodavanje promatrača (kamere) Kako bi POV Ray „vidio“ našu scenu i time bio u mogućnosti iscrtati je, POV Ray-u je moramo reći gdje se nalazi kamera, tj. definirati njezinu položaj i točku kuda ona gleda. Ključna riječ camera opisuje gdje i kako kamera tj. promatrač vidi scenu. Ona sadrži x, y i z koordinate koje određuju položaj kamere i na koji dio scene ona gleda. Položaj kamere i njezinu točku gledišta definiramo vektorom položaja. Kameru dodajemo na slijedeći način: camera { location <0, 2, -3> look_at <0, 1, 2> } Ukratko location <0,2,-3> postavlja kameru dvije jedinice iznad i tri jedinice ispred centra virtualnog prostora koji se nalazi u <0,0,0>. Po osnovnim postavkama +z smjer pokazuje u ekran, a –z iz ekrana. Naredba look_at <0,1,2> rotira kameru da gleda u točku sa koordinatama <0,1,2>. Točka se nalazi 1 jedinicu iznad i 2 jedinice iza ishodišta. Točka u koju je kamera uperena se stoga nalazi 5 jedinica ispred i jednu jedinicu ispod kamere. Točka definirana naredbom look_at predstavlja središte naše slike. Natrag na sadržaj 14 2.3. Opisivanje objekta Kada smo postavili kameru da snima scenu slijedi postavljanje objekta u scenu. Recimo da u našu scenu želimo dodati sferu: sphere { <0, 1, 2>, 2 texture { pigment { color Yellow } } } Prvi vektor definira položaj središta sfere. U ovom primjeru x koordinata jednaka je nuli stoga je sfera centrirana lijevo i desno. Koordinata y jednaka je 1 ,tj. središte sfere nalazi jednu jedinicu iznad ishodišta. z koordinata jednaka je 2 što znači da se središte sfere nalazi 2 jedinice ispred središta virtualnog prostora. Nakon vektora položaja središta sfere dolazi radijus koji je u našem slučaju jednak 2 jedinice. Natrag na sadržaj 2.3.1. Dodavanje teksture objektu Kad smo definirali položaj i veličinu objekta slijedeće što trebamo učiniti je definirati parametre površine objekta. Ključna riječ texture definira parametre teksture objekta. Blok koda teksture opisuje parametre poput boje, nepravilnosti i završne obrade površine objekta. Minimum koji moramo ispuniti kod dodavanja teksture je definirati boju površine. Ostala svojstva teksture će poprimiti zadane vrijednosti programa. texture { pigment { color Yellow } } Boju koju definiramo je boja koju će objekt imati kad je potpuno osvjetljen. Kad bi slikali naš objekt na platnu koristili bi tamne tonove boje da naglasimo osjenčanu stranu objekta, a svjetlije tonove boje bi koristili za osvjetljenu stranu objekta. No ovdje metoda praćenja zraka vodi brigu o tome umjesto nas. Mi samo trebamo odabrati osnovnu boju koja će se dodijeliti objektu, a POV Ray će ju posvjetliti ili potamniti ovisno o osvjetljenju scene. Kako mi definiramo osnovnu boju koju objekt zapravo posjeduje, a ne definiramo boju izgleda objekta na ekranu, taj parametar naziva se pigment. Riječ color definira da će cijeli objekt biti samo jedne boje, a ne obojan nekim šarenim uzorkom. Možemo koristiti jedan od predefiniranih identifikatora boje iz standardne datoteke colors.inc koju uključujemo na početku teksta. Ako neka standardna boja koju želimo nije dostupna ili ako želimo definirati vlastitu boju, mi je jednostavno definiramo koristeći ključnu riječ color nakon koje slijede ključne riječi red, green i blue koje određuju količinu crvene, zelene i plave boje koje će se pomiješati. Na primjer nijansu roze boje možemo definirati sa: 15 color red 1.0 green 0.8 blue 0.8 Vrijednosti nakon svake ključne riječi trebaju biti u rasponu od 0.0 do 1.0. Ako bilo koja od tri komponente nije definirana, ona poprima osnovnu postavljenu vrijednost 0. Gore navedena definicija roze boje se skraćeno piše: color rgb <1.0, 0.8, 0.8> U mnogim slučajevima ključna rijeć color je suvišna, stoga je najkraći način definiranja roze boje sljedeći: rgb <1.0, 0.8, 0.8> Opčenito vektor boje se sastoji od pet komponenata: rgbft = <red, green, blue, filter, transmit> Četvrta komponenta filter, određuje količinu filtrirane svjetlosti koja prolazi kroz materijal objekta. Primjer bi bilo obojano staklo. Svjetlost koja prolazi kroz takav objekt poprima djelomično ili u potpunosti boju materijala objekta, jer on selektivno apsorbira određene frekvencije svjetlosti dok druge propušta. Materijal filtirira svjetlost i stoga se ta komponenta naziva filterom. Peta komponenta transmit određuje količinu nefiltrirane svjetlosti koja prolazi kroz površinu objekta. Primjer bi bio obično prozirno staklo. U takvom primjeru sve frekvencije svjetlosti nesmetano prolaze kroz površinu objekta. Boja svjetlosti ostaje nepromijenjena, no njezin intenzitet je smanjen. Finalnoj boji objekta doprinose definirana boja objekta i iznos propuštene svjetlosti. Ako imamo: rgbt <1.0, 0.8, 0.8, 0.9> transmit je postavljen na 0.9 što znači da objekt propušta 90% svjetlosti. Ta svjetlost doprinosi finalnoj boji objekta u iznosu od 90%, dok definirana boja doprinosi samo 10 %. Sve vrijednosti unutar definicije boje trebaju biti u rasponu vrijednosti od 0 do 1 u protivnom nećemo dobiti realistične efekte. Ukoliko ne definiramo neku komponentu boje POV Ray je postavlja na nulu. Natrag na sadržaj 16 2.4. Definiranje izvora svjetlosti Uz kameru i objekt u našoj sceni potreban nam je i izvor svjetlosti. Za definiranje izvora svjetlosti u našoj sceni koristimo ključnu riječ light_source koja je popraćena sljedećim parametrima: light_source { <2, 4, -3> color White } Vektor u izrazu light_source definira položaj svjetla koje se nalazi dvije jedinice desno, četiri jedinice iznad i tri jedinice ispred ishodišta virtualnog prostora. Uz njegov položaj definirana je i boja svjetla, a to je u našem slučaju bijela. Svjetlosni izvor je sićušna nevidljiva točka koja emitira svjetlost radijalno prema van u svim smjerovima. Ona nema fizički oblik (nema dimenzije) stoga izvoru svjetla nije potrebno definirati teksturu. Natrag na sadržaj 2.4.1. Točkasti izvor svjetlosti Točkasti izvori su točno ono što im sam naziv govori - točke. Točkasti izvor nema veličinu, nevidljiv je i cijeli prostor scene osvjetljava jednoliko, bez obzira koliko su objekti u sceni udaljeni od samog izvora svjetlosti. Takvo ponašanje svjetla nije realno i može se promijeniti ako je potrebno. Točkasti izvor predstavlja najjednostavniji i najosnovniji izvor svjetlosti. Postoje samo dva bitna parametra kod točkastog izvora, a to su položaj i boja. Točkasti izvor svjetlosti i njegove parametre definiramo na sljedeći način: light_source { <2, 10, -3> color White } Natrag na sadržaj 2.4.2. Usmjereni izvor svjetlosti (spotlight izvor, reflektor) Usmjereni izvori svjetlosti se koristite za naglašavanje i osvjetljavanje dijelova scene baš kao što se koriste u svakodnevnom životu pri osvjetljavanju scena u kazalištu ili na filmskim setovima. Da bismo definirali usmjereni izvor svjetlosti bloku koda običnog točkastog svjetla dodajemo ključnu riječ spotlight. Usmjereni izvori svjetlosti imaju nešto više parametara od točkastih izvora. To su radius, falloff, tightness i point_at. Parametar radius je kut potpuno osvjetljenog stošca. Parametar falloff predstavlja kut stošca penumbre gdje intenzitet svjetlosti opada u nulu, tj. područje djelomične sjene gdje svjetlost prelazi u tamu. Parametar tightness određuje oštrinu opadanja intenziteta svjetlosti u penumbri (polusjeni). Parametar point_at predstavlja točku u koju je usmjeren izvor svjetlosti. 17 Slika 3. Parametri usmjerenog izvora svjetlosti1 light_source { <0, 10, -3> color White spotlight radius 10 falloff 20 tightness 0 point_at <0, 0, 0> } U gore navedenom bloku koda definiran je izvor svjetlosti (light_source). On je centriran lijevo i desno, deset jedinica iznad ishodišta i tri jedinice ispred ishodišta (<0,10,-3>). Izvor svjetlosti je tipa reflektora što nam govori ključna riječ spotlight. Kut stošca potpune osvjetljenosti iznosi 10 stupnjeva (radius 10) i to je kut koji zatvara ploha stošca sa njegovom centralnom linijom. Kut stošca penumbre iznosi 20 stupnjeva (falloff 20), što predstavlja kut koji zatvara ploha stošca gdje počinje totalni mrak sa centralnom linijom stošca. Tim parametrom definiramo širinu područja smanjenja intenziteta svjetlosti od maksimuma do minimuma, tj. područje djelomične sjene. Kut opadanja intenziteta svjetlosti uvijek treba biti veći od kuta maksimalne osvjetljenosti. Ako su oni jednaki ili ako je kut opadanja intenziteta nula dobivamo oštar prijelaz intenziteta iz maksimuma u minimum. Količina smanjenja intenziteta iznosi 0 (tightness 0). Ključna riječ tightness određuje dodatno eksponencijalno „omekšavanje“ rubova. Ukoliko je njezina vrijednost različita od nule ona utjeće na svjetlost unutar stošca potpune osvjetljenosti kao i na svjetlost u stošcu penumbre. Intenzitet svjetlosti na nekom kutu od centralne linije dana je sa: intenzitet*cos(kut)*tightness. Izvor svjetlosti je usmjeren u točku <0,0,0>. Natrag na sadržaj 18 2.4.3. Cilindrični izvor svjetlosti Svjetlost reflektora je oblika stošca što znači da se njezin efekt mijenja sa udaljenošću. Što je objekt udaljeniji od reflektora veći je radijus projicirane svjetlosti. No ako nam treba usmjereni izvor svjetlosti čiji radijus površine maksimalnog intenziteta projicirane svjetlosti i radijus površine smanjenja intenziteta projicirane svjetlosti budu stalne veličine bez obzira koliko daleko se taj izvor nalazi tada koristimo cilindrični izvor svjetlosti. Cilindrični izvor svjetlosti je poput reflektora, a razlikuje se po tome što su je područje maksimalnog intenziteta i područje opadanja intenziteta svjetlosti jednake veličine bez obzira koliko je naš objekt udaljen od izvora svjetlosti. Oblik svjetlosti stoga više nije stožac već cilindar. Cilindrični izvor svjetlosti definiramo poput reflektora, no ovdje umjesto ključne riječi spotlight koristimo ključnu riječ cylinder. Svi ostali parametri izvora svjetlosti jednaki su parametrima reflektora. Natrag na sadržaj 2.4.4. Površinski izvor svjetlosti (Area light) Sva dosad opisana svjetla imaju jedno zajedničko svojstvo, a to je da proizvode oštre sjene. To proizlazi iz činjenice da je izvor svjetla točka koja je infinitezimalno mala. Objekti su ili pod direktnim utjecajem svjetla, u tom slučaju su potpuno osvjetljeni, ili nisu pod utjecajem svjetla, te su tada u sjeni. U stvarnom životu takva situacija potpune svjetlosti i tame postoji samo u dalekom svemiru. No na zemlji svjetlost se ogiba na objektima, odbija se od objekata i izvor ima neku dimenziju što za posljedicu ima pojavu sjena koje više nisu oštre, već se pojavljuju i područja djelomične sjene. Djelomična sjena (penumbra) je područje koje se nalazi između područja potpune osvjetljenosti i potpune sjene. To je područje prijelaza gdje se intenzitet svjetlosti smanjuje iz maksimuma u minimum. Da bismo simulirali takve glatke sjene program za praćenje zraka mora svojim izvorima svjetlosti dati neku dimenziju. U POV Ray-u to postižemo korištenjem površinskih izvora svjetlosti. Površinska svjetla imaju dvije dimenzije. Ovdje se radi o mreži, tj. matrici svjetala. Ona se definiraju pomoću dva vektora koja slijede nakon ključne riječi area_light. Moramo definirati i koliko će svjetala biti u nizu. Više svjetala će nam dati glađu sjenu, no tada će nam trebati više vremena da se slika scene iscrta na ekranu. Također imamo mogućnost definiranja vrijednosti prilagođenja. Ključna riječ adaptive govori programu za praćenje zraka da se može prilagoditi situaciji i da šalje samo zrake potrebne za određivanje vrijednosti piksela. Kad ne koristimo ključnu riječ adaptive iz svakog svjetla koje se nalazi na površinskom izvoru šalju se zasebne zrake i to usporava proces iscrtavanja slike. Veća vrijednost prilagodbe daje nam čišće područje polusjena, tj. dobiveni prikaz je realniji. Povećanje vrijednosti prilagodbe povečava vrijeme praćenja zraka. Još jedna ključna riječ koju ovdje 19 koristimo je jitter. Ona govori programu za praćenje zraka da lagano pomakne položaj svakog svjetla na površini kako bi dobili što glađe sjene. light_source { <2, 10, -3> color White area_light <5, 0, 0>, <0, 0, 5>, 5, 5 adaptive 1 jitter } U gore navedenom bloku koda imamo bijelo svjetlo sa središtem u točki <2,10,-3>. Ono je veliko pet jedinica duž x osi (<5,0,0>) i pet jedinica duž z osi (<0,0,5>). Sadrži 25 (5*5) svjetala na toj površini. Definirana je vrijednost prilagodbe, te su izvori su međusobno lagano odmaknuti. Reflektori i cilindrična svjetla također mogu biti površinska svjetla. Oštre sjene koje smo dobivali takvim izvora sada postaju glatke i realne. Primjer pretvaranja reflektora i cilindričnog izvora u površinski izvor svjetlosti: light_source { <2, 10, -3> color White cylinder radius 15 falloff 18 tightness 10 area_light <1, 0, 0>, <0, 0, 1>, 2, 2 adaptive 1 jitter point_at <0, 0, 0> } light_source { <10, 10, -1> color Red spotlight radius 12 falloff 14 tightness 10 area_light <1, 0, 0>, <0, 0, 1>, 2, 2 adaptive 1 jitter point_at <2, 0, 0> } Natrag na sadržaj 2.4.5. Ambijentalni izvor svjetlosti Ambijentalni izvor svjetlosti koristi se za simulaciju efekta međudifuzne refleksije. Kad ne bi bilo međudifuzne refleksije sva područja koja nisu direktno obasjana svjetlošću bila bi potpuno tamna. POV Ray koristi ključnu riječ ambient za određivanje koliko je svjetla koje dolazi iz ambijentalnog izvora reflektirano na površini objekata. 20 Po osnovnim postavkama ambijentalni izvor emitira svjetlost bijele boje (rgb <1,1,1>). On emitira svjetlo svugdje i u svim smjerovima duž virtualnog prostora. Promjenu boje ambijentalnog svjetla možemo jednostavno učiniti u globalnim postavkama. Umjesto da mijenjamo vrijednosti ambijenta u postavkama završne obrade svih objekata, mi mijenjamo samo postavke ambijentalnog izvora svjetlosti. U nastavku je primjer koda koji definira crveno ambijentalno svjetlo. global_settings { ambient_light rgb <1, 0, 0> } Natrag na sadržaj 2.5. Osnovni objekti u POV Ray-u Postoje mnogi beskonačni i konačni oblici koji mogu biti iscrtani u POV-Ray-u. U sljedećem poglavlju opisani su osnovni oblici, njihovi parametri i načini na koji se definiraju. Natrag na sadržaj 2.5.1. Kvadar Kvadar je jedan od najčešće korištenih objekata. Definiramo ga ključnom riječi box. Primjer definiranja kvadra: box { <-1, 0, -1>, < 1, 0.5, 3> rotate y*20 // jednako "rotate <0, 20, 0>" } Kvadar se definira vektorima položaja dva nasuprotna kuta. Prvi vektor općenito predstavlja minimum (prednji donji lijevi kut), a drugi vektor predstavlja x, y i z koordinate maksimuma (stražnji gornji desni kut). Kvadar može biti definiran samo paralelno osima koordinatnog sustava našeg virtualnog prostora. Tek kada ga definiramo koristimo rotaciju da ga postavimo u željenu poziciju. Sa vrijednostima parametara i vektorima možemo izvoditi jednostavne matematičke operacije. U gore navedenom bloku koda u parametru rotacije smo vektorski identifikator y pomnožili sa 20. To je isto kao da smo napisali <0,1,0>*20 ili <0,20,0>. Natrag na sadržaj 2.5.2. Sfera Sfera se definira pomoću ključne riječi sphere: sphere { <0, 1, 2>, 2 texture { pigment { color rgb <0, 0, 1> } } 21 } Vektor <0,1,2> predstavlja vektor položaja središte sfere. Ono se u ovom slučaju nalazi u točki (0,1,2), tj. jednu jedinicu iznad i dvije jedinice iza ishodišta koordinatnog sustava. Vrijednost nakon položaja središta sfere definira njezin radijus koji iznosi dvije jedinice. Boja površine sfere (pigment) izražen je pomoću rgb (red, green, blue) oznake i u ovom slučaju sfera je plave boje. Natrag na sadržaj 2.5.3. Stožac Kod definiranja stošca koristimo ključnu riječ cone: cone { <0, 1, 0>, 0.3 <1, 2, 3>, 1.0 } Odrezani stožac se definira pomoću vektora položaja središta i radijusa gornje i donje baze. U našem primjeru središte jedne baze je u točki <0,1,0> i ona ima radijus 0.3, dok se središte druge baze nalazi u točki <1,2,3> i njezin radijus je 1. Ako želimo da odrezani stožac postane stožac, radijus jedne baze mora biti jednak nuli. Baze stošca su međusobno paralelne i okomite na os stošca. Želimo li dobiti otvoreni odrezani stožac bez baza, moramo definirati ključnu riječ open nakon drugog radijusa: cone { <0, 1, 0>, 0.3 <1, 2, 3>, 1.0 open // središte i radijus jedne baze // središte i radijus druge baze // makni baze stošca } Natrag na sadržaj 2.5.4. Cilindar Kada želimo definirati objekt u obliku cilindra koristimo ključnu riječ cylinder: cylinder { <0, 1, 0>, <1, 2, 3>, 0.5 open } // // // // središte jedne baze središte druge baze radijus makni baze cilindra Parametri cilindra su slični parametrima stošca. Ovdje također definiramo položaj središta baza cilindra, no pokraj njih ne definiramo njihov radijus. Radijus se definira nakon vektora položaja središta druge baze cilindra. Želimo li imati otvoreni cilindar, ovdje također koristimo ključnu riječ open. 22 Natrag na sadržaj 2.5.5. Ravnina Ravninu definiramo koristeći ključnu riječ plane na slijedeći način: plane { <0, 1, 0>, -1 pigment { checker color Red, color White } } Definirani objekt je beskonačna ravnina. Vektor <0,1,0> je vektor normale ravnine. Kad bismo stajali na toj ravnini njezina normala bi pokazivala ravno gore tj. ona je usmjerena u y smjeru. Broj nakon vektora predstavlja udaljenost za koju je ta ravnina pomaknuta od ishodišta duž normale. U našem slučaju ravnina je postavljena u položaj y = -1. Iako u bloku koda nije korištena ključna riječ texture, definiranoj ravnini je primijenjena tekstura hrvatske šahovnice. Često tipkanje naredbi koje se nalaze zatvorene u vitičastim zagradama poput texture { pigment } može postati zamorno, stoga nam POV Ray u mnogim slučajevima dozvoljava da ispustimo ključnu riječ texture. Naredba pigment prvo koristi uzorak boje šahovnice koji je predefiniran, te tada određuje da umjesto njih koristi crvenu i bijelu boju koju smo mi definirali. Kako se vektori <1,0,0>, <0,1,0> i <0,0,1> često koriste, POV Ray ima ugrađene vektorske identifikatore x, y i z koje možemo koristiti kao skraćenice. Tako pomoću njih našu ravninu možemo definirati na sljedeći način: plane { y, -1 pigment { ... } } Natrag na sadržaj 2.5.6. Torus Torus je jedan od vrlo korištenih oblika stoga ga je POV Ray uvrstio u svoju datoteku primitivnih oblika. Definiramo ga ključnom riječi torus. Dvije vrijednosti koje slijede predstavljaju glavni radijus i radijus presjeka torusa. Torus definiramo na sljedeći način: torus { 4, 1 pigment { Green } } Natrag na sadržaj 23 2.6. CSG CSG 2 je akronim od Constructive Solid Geometry i on predstavlja koncept skupovnih operacija sa primitivnim oblicima. To je tehnika koja se koristi u programima za modeliranje i iscrtavanje poput POV-Ray-a. Ona nam omogućuje konstruiranje složenijih objekata kombinacijom jednostavnih primitivnih objekata poput kvadra, sfere, cilindra, itd. CSG 3 je ukratko rečeno tehnika koja nam dopušta da na objektima radimo operacije koje su uobičajene za Booleovu algebru. Operacije možemo primjenjivati na svim objektima koji su dobro definirani, tj. imaju dobro definiranu površinu i unutrašnjost. Objekte dobivene CSG tehnikom kraće nazivamo CSG objekti. Takvi objekti mogu biti vrlo složeni. Oni mogu biti dobiveni mnogostrukim kombinacijama osnovnih CSG operacija. Bez obzira na njihovu složenost oni su uglavnom konačni objekti, te se mogu transformirati kao bilo koji primitivni oblik. Natrag na sadržaj 2.6.1. Unija Slika 4. Unija1 Unija (eng.union) se koristi za spajanje grupe objekata u jedan entitet kojim se može manipulirati kao zasebnim objektom. Koristimo ključnu riječ union nakon koje definiramo objekte i njihove parametre. Na primjer: union { sphere { <0, 0, 0>, 1 pigment { Red } translate -0.5*x } sphere { <0, 0, 0>, 1 pigment { Yellow } translate 0.5*x 2 Antonio Šiber, Ekstremno brzi uvod u Povray s primjerima, http://asiber.ifs.hr/papers/povray_tutorial.pdf 3 Friedrich A. Lohmüller, Descriptions and Examples for the POV-Ray Raytracer, http://www.flohmueller.de/pov_tut/csg/povcsg1e.htm 24 } } Slika 5. CSG objekt dobiven operacijom unije3 Gore navedenim blokom koda POV Ray nam iscrtava istu sliku koju bismo dobili samim definiranjem dviju sfere bez operacije unije. No razlika je u tome što POV Ray objekt dobiven unijom vidi kao samostalni objekt. Sada više ne moramo zasebno transformirati svaki sastavni objekt, već sve transformacije i promjene teksture možemo jednostavno primijeniti na novi objekt. union { } sphere { <0, 0, 0>, 1 translate -0.5*x } sphere { <0, 0, 0>, 1 translate 0.5*x } pigment { Red } scale <1, .25, 1> rotate <30, 0, 45> Važno je napomenuti da površine sastavnih objekata unutar unije neće biti maknute. U našem primjeru nevidljivi dijelovi površine sfera unutar unije još uvijek postoje. To može predstavljati problem ako koristimo objekte od prozirnih ili djelomično prozirnih materijala poput stakla. U tom slučaju koristimo operaciju merge koja je objašnjena u poglavlju 1.6.4. Natrag na sadržaj 2.6.2. Presjek Slika 6. Presjek1 25 Druga CSG operacija kojom kreiramo CSG objekte je presjek (eng. intersection). Ključnu riječ koju koristimo je intersection: intersection { sphere { <0, 0, 0>, 1 pigment { Red } translate -0.5*x } sphere { <0, 0, 0>, 1 pigment { Yellow } translate 0.5*x } } Slika 7. CSG objekt dobiven operacijom presjeka3 Operacija presjeka stvara objekt koji se sastoji od djelova površina sastavnih objekata gdje se oni međusobmo preklapaju. U našem slučaju dobili smo objek u obliku debele leće koji se sastoji od dijelova površina sfera gdje se one preklapaju. Kao što smo već spomenuli sastavni objekti na kojima se primjenjuju CSG operacije moraju imati dobro definiranu unutrašnjost i vanjštinu. Kako POV Ray objekt shvaća kao skup točaka, on mora znati da li se neka točka prostora nalazi unutar ili izvan objekta. Točka je dio presjeka ako se nalazi unutar oba objekta, tj. ako se nalazi na području gdje se oni preklapaju. To je važno napomenuti jer u protivnom kada se dva sastavna objekta ne preklapaju, CSG objekt dobiven operacijom presjeka nestaje. To je matematički ispravno jer tada ne postoji presjek skupova točaka sastavnih objekata. Natrag na sadržaj 2.6.3. Razlika Slika 8. Razlika1 26 Operacijom difference dobivamo CSG objekt tako da se od prvog sastavnog objekta oduzima svaki sljedeći definirani objekt: difference { sphere { <0, 0, 0>, 1 pigment { Red } translate -0.5*x } sphere { <0, 0, 0>, 1 pigment { Yellow } translate 0.5*x } } Slika 9. CSG objekt dobiven operacijom razlike3 Rezultat gore navedenog koda je razlika koju smo dobili oduzimanjem druge sfere od prve. Operaciju difference možemo shvatiti kao presjek prvog sastavnog objekta i inverza svih sljedećih definiranih objekata što i POV Ray interno radi kada mi definiramo razliku objekata.On jednostavno dodaje ključnu riječ inverse drugom i svim sljedećim sastavnim objektima, te tada koristi operaciju intersection s prvim sastavnim objektom. Stoga u našem slučaju točke unutar prve sfere i izvan druge sfere pripadaju njihovoj razlici. Rezultat operacije difference mogli smo dobiti u kombinacijom operacije intersection i operacije inverse. Ako se prvi sastavni objekt u cijelosti nalazi unutar drugog sastavnog objekta, njihova razlika nestaje. Matematički gledano imamo slučaj kada oduzimamo skup točaka koji se nalazi izvan objekta kojeg oduzimamo od skupa točaka koje se nalaze unutar objekta od kojeg oduzimamo. Skup točaka objekta od kojeg oduzimamo nalazi se unutar objekta kojeg oduzimamo i njihova razlika je prazan skup, što se ne može fizički reprezentirati i stoga takav objekt nestaje sa ekrana. Natrag na sadržaj 2.6.4. Spajanje Operaciju union možemo gledati kao proces lijepljenja dvaju objekata gdje površine objekta unutar unije ostaju definirane. U većini slučajeva to nam ne predstavlja problem, no ako koristimo operaciju unije na prozirnim objektima njihove površine unutar unije biti će vidljive. Tada koristimo operaciju merge da riješimo nastali problem. Operacija merge djeluje na isti način kao i union, jedina razlika je što ona miče površine unutar nastalog CSG objekta kao što je prikazano na slici: 27 Slika 10. Spajanje1 Uzmimo za primjer definiciju dva CSG objekta u obliku pijuna istih parametara, jedan pomoću union operacije, a drugi pomoću merge operacije. union { sphere { <0, 1, 0>, 0.35 } cone { <0, 0, 0>, 0.45, <0, 1.2, 0>, 0 } texture { Glass3 } translate <-0.5, 0, 0> } merge { sphere { <0, 1, 0>, 0.35 } cone { <0, 0, 0>, 0.45, <0, 1.2, 0>, 0 } texture { Glass3 } translate <0.5, 0, 0> } Slika 11. Razlika između unije i spajanja3 Na desnoj strani se nalazi pijun dobiven operacijom merge, a na ljevoj strani pijun dobiven operacijom union. Operacija union nije maknula dio stošca koji probija sferu i time nismo dobili foto-realističnu sliku pijuna kakvu nam daje operacija merge. Operacija merge je sporija od operacije union na neprozirnim tijelima, no ukoliko kreiramo neki složeni CSG objekt koji se satoji od mnoštva manjih objekata imati ćemo puno površina objekata koje su nam nepotrebne i samim time usporiti proces iscrtavanja. Natrag na sadržaj 28 2.6.5. Inverz Ako objekt predočimo kao skup definiranih točaka, operacija inverse predstavlja komplement tog skupa točaka. Ona se često koristi za okretanje objekata iznutra prema van, pri čemu se ne mijenja geometrija objekta, već samo način na koji POV Ray shvaća sam objekt. Pri definiranju sfere točke unutar sfere predstavljaju njezinu unutrašnjost, a točke izvan sfere njezinu okolinu. Kad na nju primijenimo operaciju inverse, POV Ray je sada gleda kao novi objekt koji je definiran točkama izvan sfere. Pri tome se ne mijenja njegova geometrija, već samo način na koji se reprezentira. Glavna prednost komplementa je u tome što nam uvelike skraćuje dužinu koda kod definiranja kompleksnih CSG objekata. Na primjer: umjesto koda: kraće pišemo: difference { intersection { object {A} object {B} } Object {C} } intersection { object {A} object {B} object {C inverse} } POV Ray nam iscrtava isti objekt, no u primjeru korištenja operacije inverse imamo manje linija koda što će ubrzati sam proces iscrtavanja. Znamo da sljedeća tvrdnja istinita: A\B=A∩𝐵 Stoga CSG objekt dobiven razlikom objekta A i B možemo dobiti i unijom objekta A i komplementa objekta B. Uzmimo za primjer CSG objekt dobiven operacijom difference iz poglavlja 1.6.3. Njega ćemo također dobiti korištenjem operacije intersection i operacije inverse: intersection { sphere { <0, 0, 0>, 1 pigment { Red } translate -0.5*x } sphere { <0, 0, 0>, 1 pigment { Yellow } translate 0.5*x inverse } } Slika 12. CSG objekt dobiven kombinacijom operacije presjeka i inverza3 29 To je ujedno i način na koji POV Ray interno reprezentira operaciju difference. Drugom i svakom sljedećem objektu dodaje naredbu inverse i tada radi presjek sa prvim sastavnim objektom. Natrag na sadržaj 2.6.6. Naredba Clipped By Slika 13. Rezultat naredbe clipped by1 Naredba clipped_by spada u modifikatore objekta, no njome dobivamo CSG objekte slične objektima dobivenih operacijom intersection. Sintaksa je sljedeća: sphere { <0, 0, 0>, 0.5 texture { pigment { color rgb <1, 0, 0.2> } } clipped_by { sphere { <0, 0, 0>, 0.5 translate <0.5, 0, -0> inverse } } } Slika 14. CSG objekt dobiven naredbom clipped by3 Vidimo da nam korištenje naredbe clipped_by u našem primjeru daje CSG objekt sličan onome dobivenom razlikom sfera. No ovdje dobivamo otvoreni CSG objekt izgleda prerezane ljuske sfere. Dio crvene sfere koji se nalazi unutar drugog objekta (komplementa sfere) se zadržava dok se ostatak odrezuje i odbacuje. Vidljivo nam da je naredba clipped_by korisna za izrezivanje dijelova bilo kojeg oblika. Njezina prednost je kraće vrijeme iscrtavanja za razliku od bilo koje druge metode kojom mijenjamo geometriju objekta. 30 Natrag na sadržaj 2.7. Naredba finish Naredbom finish u virtualnom POV Ray prostoru dobivamo ono što u stvarnosti dobivamo završnom obradom objekta. Svojstva završne obrade površine objekta uveliko utječu na njegov izgled. O njima ovisi način reflektiranja svjetlosti sa objekta, izgled područja scene u sjeni i koje su vrste naglešenoga osvjetljenja vidljive. Naredba finish je završni dio definiranja teksture objekata u POV Ray-u kojom kontroliramo svojstvima površine objekata. Pomoću nje možemo objekte učiniti sjajnima i reflektivnima ili bez sjaja. Ona nam također služi kako bi odredili što se događa sa svjetlošću koja prolazi kroz prozirne pigmente i što se događa kada je svjetlost raspršena na nesavršeno glatkim površinama objekata. Postoje dvanaest različitih svojstava završnog izgleda objekta dostupnih u POV Ray-u. U nastavku su opisana najčešće korištena svojstva završne obrade objekata kojima se kontrolira ključnim riječima ambient, diffuse, phong, specular, metallic i reflection. Naredbu finish definiramo unutar bloka koda texture: object { Moj_objekt texture { finish { phong 0.5 } } } Natrag na sadržaj 2.7.1. Naredba ambient Svjetlost koja se vidi u tamnim područjima sjene dolazi od difuznih refleksija sa drugih objekata. Takva svjetlost se ne može direktno modelirati korištenjem metode praćenja zraka. Iz tog razloga se često koristi trik koji se naziva ambijentalno osvjetljenje kako bi se simuliralo svjetlo unutar područja scene u sjeni. Ambijentalna svjetlost je svjetlost koja je raspršena duž cijelog virtualnog prostora. Ona se odbija duž cijelog prostora i jednoliko osvjetljava sva područja scene na koje ne dolazi direktna svjetlost tj. područja sjene. Računanje stvarnog ambijentalnoga osvjetljenja iziskuje previše vremena stoga se ambijentalna svjetlost simulira dodavanjem malog iznosa bijele svjetlosti svim teksturama objekata bez obzira da li su one obasjane svjetlošću ili ne. To znači da će dijelovi objekta koji se nalaze u sjeni posjedovati mali dio boje svoje površine, a neće biti potpuno crni. Ambijentalna svjetlost stvara dojam kao da tekstura objekta sjaji, no ambijentalna svjetlost u teksturi utječe samo na objekt na kojem je primijenjena. Ključnom riječju ambient kontroliramo količinu ambijentalnoga osvjetljenja. Njegovu vrijednost možemo izraziti brojčanom vrijednošću, no POV Ray ju shvaća kao vektor 31 boje sa komponentama iznosa koji smo zadali brojčanom vrijednošću. Na primjer vrijednost 0.5 POV Ray shvaća kao vektor boje <0.5,0.5,0.5,0.5,0.5> i koristi samo njegove RGB komponente vektora. Standardno postavljena vrijednost je 0.1 što predstavlja vrlo blago ambijentalno osvjetljenje. Iznos vrijednosti se može kretati u rasponu od 0 do 1. Ambijentalno osvjetljenje utječe na područja objekta u sjeni kao i na područja objekta koja su osvijetljena direktnom svjetlošću, stoga pri povećanju vrijednosti naredbe ambient moramo smanjiti vrijednosti naredbi diffuse i reflection (vidi naprijed). Iako ova metoda stvara dojam da površina objekta emitira blagu svjetlost njome ne utječemo na boju objekata koji ga okružuju. U stvarnosti kada bi ušli u sobu koja je obojana u crveno noseći pritom bijelu majicu ona bi izgledala ružičasto zbog svjetlosti reflektirane sa zidova. Korištenjem metode ambijentalnog osvjetljenja nećemo dobiti taj učinak, već ona samo predstavlja prečac kako bi dobili realniji prikaz naše scene i skratili vrijeme potrebno za izračunavanje i iscrtavanje slike naše scene. Boja ambijentalnog osvjetljenja ne mora biti bijela, već je možemo definirati na dva načina. Prvi je da boju definiramo vektorom boje nakon ključne riječi ambient: finish { ambient rgb <0.3, 0.1, 0.1> } //ružičasti ambijent Natrag na sadržaj 2.7.1.1. Radiosity tehnika Radiosity tehnika predstavlja dodatni izračun koji realistično simulira difuznu međurefleksiju svjetlosti tj. ona predstavlja tehniku osvjetljenja koja simulira difuznu izmjenu zračenja između objekata scene. Tu difuznu međurefleksiju možemo vidjeti npr. u situaciji kada sa bijelom majicom uđemo u sobu sa crvenim zidovima, stropom i podom. Naša majica će poprimiti crvenkastu boju zbog svjetlosti koja se reflektira sa zidova, plafona i poda sobe. Područja sjena našeg okruženja također neće biti potpuno u mraku iako izvor svjetlosti direktno ne obasjava ta područja. Difuzna svjetlost koja se reflektira sa drugih objekata upada u područja sjena i zato ona nisu potpuno tamna. POV Ray po standardnim postavkama računa samo direktni utjecaj izvora svjetlosti na objekte, te su područja sjena tada potpuno mračna. Za simulaciju međudifuzne refleksije samom metodom pračenja zraka koristi se pojednostavljeni model, mogli bismo reći „trik“, koji se zove ambijentalno svjetlo, no ono nije vrlo precizno. Ako želimo precizni izračun difuzne međurefleksije koristimo radiosity tehniku koju uključujemo sa radiosity{} blokom unutar globalnih postavki programa. 32 Za radiosity tehniku najvažniji su ambient i diffuse parametri završne obrade objekata. Njihov utjecaj se ovdje dosta razlikuje od utjecaja u standardno osvjetljenoj sceni. Parametar ambient određuje količinu svjetlosti koju objekt emitira. To je baza za radiosity tehniku bez izvora svjetlosti, no važna je i u sceni gdje se koriste izvori svjetlosti. Kako većina materijala ne emitira svjetlost standardno postavljena vrijednost od 0.1 može biti prevelika te je treba postaviti na 0.0. To možemo postaviti i u glavnim postavkama programa tako da podesimo vrijednost ambient_light. Parametar diffuse utječe na iznos difuzne refleksije upadne svjetlosti. U scenama gdje se koristi radiosity tehnika taj parametar ne utječe samo na direktan izgled površine već i na to koliko će drugi objekti biti osvjetljeni indirektnom svjetlošću sa te površine. Standardno postavljene vrijednosti radiosity bloka su sljedeće: radiosity { pretrace_start 0.08 pretrace_end 0.04 count 35 nearest_count 5 error_bound 1.8 recursion_limit 3 low_error_factor 0.5 gray_threshold 0.0 minimum_reuse 0.015 brightness 1 adc_bailout 0.01/2 } Korištenjem Radiosity tehnike POV Ray računa iznos ambijenta za svaku točku tako što šalje više zraka iz te točke u različitim smjerovima i usrednjuje rezultate. Za svaku točku mogu se koristiti 200 ili više zraka kako bi se izračunala ispravna razina ambijentalnog osvjetljenja. Preciznost radiosity tehnike zahtjeva više vremena potrebnog za izračun, stoga je korisno ju ugasiti dok gradimo scenu i upaliti kada smo zadovoljni njezinim izgledom. U tom slučaju radiosity bloku dodajemo: #declare Radiosity = off; global_settings { #if(Radiosity) radiosity { ... } #end } Natrag na sadržaj 2.7.2. Difuzna refleksija Kad se svjetlost reflektira sa površine objekta zakon refleksije nalaže da reflektirana svjetlost napušta površinu pod istim kutom pod kojim je upala na nju. Takva savršena 33 refleksija naziva se spekularnom ili zrcalnom refleksijom. No samo vrlo glatke ispolirane površine reflektiraju svjetlost na takav način. Ono što se najčešće događa je da se svjetlost reflektira i raspršuje u svim smjerovima zbog nesavršenosti tj. hrapavosti površine. To raspršenje se naziva se difuznom refleksijom jer se svjetlost raspršuje i širi u raznim smjerovima. Difuzna refleksija doprinosi većini reflektirane svjetlosti koju vidimo. Ključna riječ diffuse se koristi za definiranje koliko je svjetlosti koja dolazi direktno iz bilo kojeg izvora svjetlosti reflektirano preko difuzne refleksije. Na primjer: finish { diffuse 0.6 } znači da je 60% svjetlosti koju vidimo u određenoj točki površine objekta dolazi direktno iz izvora svjetlosti. Natrag na sadržaj 2.7.3. Područja naglašene osvjetljenosti Područja naglašene osvjetljenosti su blještava mjesta koja se pojavljuju kada se izvor svjetlosti reflektira sa glatkih površina objekata. Ona su mješavina spekularne i difuzne refleksije. Kako bi se točno modelirala područja naglašenog osvjetljenja trebalo bi se izračunati sve spekularne refleksije sa tisuću mikroskopskih izbočina/ nepravilnosti koja se nazivaju mikro plohama (eng. micro facets). Što je više mikro ploha usmjereno prema promatraču to je objekt sjajniji i to su uža područja naglašenog osvjetljenja. POV Ray koristi dva različita modela kojima simulira područja naglašene osvjetljenosti bez računanja doprinosa mikro ploha. To su spekularni i Phong modeli. Natrag na sadržaj 2.7.3.1. Naredba phong Ključnom riječi phong definiramo područja naglašene osvjetljenosti na objektu dobivene Phong modelom 4. Njome stvaramo svijetla sjajna područja na površini objekta koja su boje izvora koji se reflektira na površini objekta. Phong model određuje prosječni broj mikro ploha koje su usmjerene tako da reflektiraju svjetlost izvora u ravninu promatranja tj. u promatrača. Vrijednosti phong naredbe se kreću u rasponu od 0 do 1, gdje 1 predstavlja situaciju kada područja naglašene osvjetljenosti u svome središtu u potpunosti poprimaju boju izvora svjetlosti. Standardno postavljena vrijednost je phong 0.0 i to je situacija kada nema područja naglašene osvjetljenosti. 4 Wikipedia, Phong reflection model, http://en.wikipedia.org/wiki/Phong_reflection_model 34 Veličina područja naglašene osvjetljenosti definira se vrijednošću koja slijedi nakon ključne riječi phong_size. Što ta vrijednost veća to je područje naglašene osvjetljenosti zbijenije i sjajnije. Što je vrijednost manja to je područje naglašene osvjetljenosti šire i manjeg sjaja. Tipične vrijednosti se kreću u rasponu od 1 što predstavlja neizražajnu površinu do 250 što predstavlja visko poliranu površinu. Standardno postavljena vrijednost veličine phong područja naglašene osvjetljenosti je 40 ukoliko eksplicitno ne definiramo vrijednost phong_size. Vrijednost 40 stvara dojam kao da je objekt načinjen od plastike. finish { phong 0.9 phong_size 60 } Ako ne definiramo naredbu phong naredba phong_size nema učinka. Natrag na sadržaj 2.7.3.2. Naredba specular Ključnom riječi specular definiramo područja naglašene osvjetljenosti slična Phong područjima, no koristimo drugačiji model. Spekularni model više sliči pravoj spekularnoj refleksiji i proizvodi preciznija područja naglašene osvjetljenosti. Vrijednosti naredbe specular mogu biti u rasponu od 0 do 1, gdje 1 predstavlja potpuno zasičenje područja naglašenog osvjetljenja bojom svjetlosnog izvora u području gdje je ono najsjajnije tj. središtu. Postavljena vrijednost je specular 0.0 što nam daje objekt bez područja naglašenosti. Veličinu područja definiramo ključnom riječi roughness. Njezine vrijednosti se kreću od 1.0 što predstavlja vrlo grubu površinu tj. veliko područje naglašenosti, do 0.0005 što odgovara vrlo glatkim površinama tj. malim područjima naglašenosti. Postavljena vrijednost je 0.05 što odgovara plastičnim površinama. finish { specular 0.9 roughness 0.02 } Ako ne definiramo specular naredba roughness nema učinka. Bitno je za naglasiti da naredbom specular ne definiramo spekulrne refleksije, već samo područja naglašenog osvjetljenja. Natrag na sadržaj 35 2.7.3.3. Modifikator područja naglašenog osvjetljenja metala Ključnu riječ metallic možemo koristiti sa phong ili specular naredbom. Ona naznačuje da će se boja područja naglašenog osvjetljenja računati po empirijskoj funkciji koja simulira reflektivnost metalnih površina. Područja naglašene osvjetljenosti posjeduju istu boju kao i izvor svjetlosti. Kada definiramo modifikator metallic filtriramo područje naglašenog osvjetljenja tako da bijela svjetlost reflektirana sa metalne površine poprima boju koji smo definirali u pigmentu objekta. Iza ključne riječi metallic možemo definirati brojčanu vrijednost kojom definiramo jačinu efekta, no ona nije nužna. finish { phong 0.9 phong_size 60 metallic } Ako nisu definirane ključne riječi phong ili specular tada modifikator metallic nema učinka. Natrag na sadržaj 2.7.4. Spekularna refleksija Spekularnom refleksijom nazivamo refleksiju pri kojoj se svjetlost ne raspršuje i gdje se ona reflektira pod istim kutom pod kojim je upala na površinu objekta. Takve zrcalne refleksije u POV Ray-u definiramo blokom koda reflection {} unutar definicije finalne obrade objekta. Na primjer: finish {reflection {1.0} ambient 0 diffuse 0} nam daje objekt čija je površina poput zrcala. Ona reflektira sve elemente naše scene. Nakon ključne riječi definirali smo iznos 1.0 koji POV Ray shvaća kao vektor boje čije su sve komponente jednake 1.0. Vrijednost može varirati od 0 što znači da nema refleksije, do 1 što znači da se na površini reflektira svo okruženje. Dodavanje refleksije teksturi objekta usporava iscrtavanje naše virtualne scene jer se prate dodatne zrake. Natrag na sadržaj 36 2.7.4.1. Varijabilna refleksija Mnogi materijali poput vode, keramike, linoleuma itd. reflektiraju više svjetlosti kad se promatraju pod malim kutevima gledanja. Takvo ponašanje možemo simulirati definiranjem minimalne refleksije u naredbi reflection {...}. Na primjer: finish { reflection { 0.0, 1.0 fresnel on } } koristi istu funkciju kao i standardna refleksija, samo ovdje prvi parametar predstavlja minimalnu reflektivnost. Ta minimalna vrijednost određuje koliko je reflektivna površina kada je promatramo u smjeru paralelnom sa normalom površine objekta. Drugi parametar predstavlja maksimalnu reflektivnost koja određuje koliko je reflektivna površina kada je promatramo pod kutom od 90 stupnjeva obzirom na normalu površine objekta. Obje vrijednosti POV Ray shvaća kao vektor boje i on ne vodi računa o tome da li je definirani iznos minimalne vrijednosti manji od definiranog iznosa maksimalne vrijednosti refleksije. To može prouzročiti nerealne efekte i stoga trebamo paziti da ispravno definiramo vrijednosti tih parametara. Kada dodajemo ključnu riječ fresnel više se ne koristi funkcija standardne refleksije već Fresnelova funkcija reflektivnosti. Naredba fresnel simulira fiziku refleksije i refrakcije svjetlosti na prozirnim objektima ovisno o kutu upadne svjetlosti i indeksu loma.Ona računa reflektivnost površine koristeći indeks loma (eng. index of refraction (IOR)) površine objekta, tj. materijala od kojeg je načinjen objekt. Stoga sa fresnelovom refleksijom moramo koristiti i naredbu interior { ior indeks_loma } čak i kod neprozirnih objekata. U stvarnosti mnogi neprozirni objekti imaju tanki sloj glazure na svojoj površini. Ta glazura je ta koja posjeduje indeks loma i reflektira svjetlost. Fresnelove jedndžbe 5 opisuju refleksiju i transmisiju elektromagnetskih valova na granici dvaju sredstva. One nam daju koeficijente refleksije i transmisije za valove paralelno i okomito polarizirane obzirom na upadnu ravninu. Fresnelove jednadžbe za proizvoljni upadni kut na granicu dvaju sredstava dobivaju se iz Maxwellovih jednadžbi i rubnih uvjeta. Rubne uvjete za EM val dobivamo pomoću Gaussovog �⃗ ) i oni glase: teorema (𝐸�⃗ ) i Stokesovog teorema (𝐵 5 𝑛�⃗12 × �𝐸�⃗2 − 𝐸�⃗1 � = 0 Rick Trebino, Fresnel's Equations for Reflection and Refraction, http://www.teknik.uu.se/ftf/education/ftf2/Optics_FresnelsEqns.pdf 37 �⃗2 − 𝐵 �⃗1 � = 0 𝑛�⃗12 ∙ �𝐵 ,gdje �𝒏⃗𝟏𝟐 predstavlja vektor okomice granice sredstava. Okomita polarizacija EM vala: Slika 15. Skica okomito polariziranog EM vala5 𝐸𝑖 (𝑥, 𝑦 = 0, 𝑧, 𝑡) + 𝐸𝑟 (𝑥, 𝑦 = 0, 𝑧, 𝑡) = 𝐸𝑡 (𝑥, 𝑦 = 0, 𝑧, 𝑡) Ukupno električno polje u ravnini granice dvaju medija (tangencijalno električno polje) je kontinuirano. −𝐵𝑖 (𝑥, 𝑦 = 0, 𝑧, 𝑡) 𝑐𝑜𝑠 𝜃𝑖 + 𝐵𝑟 (𝑥, 𝑦 = 0, 𝑧, 𝑡) 𝑐𝑜𝑠 𝜃𝑟 = −𝐵𝑡 (𝑥, 𝑦 = 0, 𝑧, 𝑡) 𝑐𝑜𝑠 𝜃𝑡 Ukupno magnetsko polje u ravnini granice dvaju medija (tangencijalno magnetsko polje) je kontinuirano. Poništavanjem naglo promjenjivih dijelova svjetlosnog vala i zadržavanjem samo kompleksnih amplituda dobivamo: 𝐸0𝑖 + 𝐸0𝑟 = 𝐸0𝑡 −𝐵0𝑖 𝑐𝑜𝑠 𝜃𝑖 + 𝐵0𝑟 𝑐𝑜𝑠 𝜃𝑟 = −𝐵0𝑡 𝑐𝑜𝑠 𝜃𝑡 Kako je 𝐵 = 𝐸/(𝑐0 /𝑛) = 𝑛𝐸/𝑐0 i 𝜃𝑟 = 𝜃𝑖 imamo: 𝑛𝑖 (𝐸0𝑟 − 𝐸0𝑖 ) cos 𝜃𝑖 = −𝑛𝑡 𝐸0𝑡 cos 𝜃𝑡 I uvrštavanjem 𝐸0𝑡 = 𝐸0𝑖 + 𝐸0𝑟 dobivamo: 𝑛𝑖 (𝐸0𝑟 − 𝐸0𝑖 ) cos 𝜃𝑖 = −𝑛𝑡 (𝐸0𝑖 + 𝐸0𝑟 ) cos 𝜃𝑡 Kada to sredimo i riješimo za 𝐸0𝑟 /𝐸0𝑖 dobivamo koeficijent refleksije: 𝑟⊥ = 𝐸0𝑟 𝑛𝑖 𝑐𝑜𝑠 𝜃𝑖 − 𝑛𝑡 𝑐𝑜𝑠 𝜃𝑡 = 𝐸0𝑖 𝑛𝑖 𝑐𝑜𝑠 𝜃𝑖 + 𝑛𝑡 𝑐𝑜𝑠 𝜃𝑡 38 Analogno napravimo i za koeficijent transmisije 𝐸0𝑡 /𝐸0𝑖 i dobivamo: 𝑡⊥ = 𝐸0𝑡 2𝑛𝑖 𝑐𝑜𝑠 𝜃𝑖 = 𝐸0𝑖 𝑛𝑖 𝑐𝑜𝑠 𝜃𝑖 + 𝑛𝑡 𝑐𝑜𝑠 𝜃𝑡 Jednadžbe za 𝑟⊥ i 𝑡⊥ predstavljaju Fresnelove jednadžbe za okomito polarizitanu svjetlost. U slučaju paralelno polarizirane svjetlosti imamo: Slika 16. Skica paralelno polariziranog EM vala5 𝐵0𝑖 − 𝐵0𝑟 = 𝐵0𝑡 𝐸0𝑖 𝑐𝑜𝑠 𝜃𝑖 + 𝐸0𝑟 𝑐𝑜𝑠 𝜃𝑟 = 𝐸0𝑡 𝑐𝑜𝑠 𝜃𝑡 Rješavanjem za 𝐸0𝑟 /𝐸0𝑖 dobivamo koeficijent refleksije 𝑟|| : 𝑟|| = 𝐸0𝑟 𝑛𝑖 𝑐𝑜𝑠 𝜃𝑡 − 𝑛𝑡 𝑐𝑜𝑠 𝜃𝑖 = 𝐸0𝑖 𝑛𝑖 𝑐𝑜𝑠 𝜃𝑡 + 𝑛𝑡 𝑐𝑜𝑠 𝜃𝑖 𝑡|| = 𝐸0𝑡 2𝑛𝑖 𝑐𝑜𝑠 𝜃𝑖 = 𝐸0𝑖 𝑛𝑖 𝑐𝑜𝑠 𝜃𝑡 + 𝑛𝑡 𝑐𝑜𝑠 𝜃𝑖 Analogno koeficijent transmisije 𝑡|| = 𝐸0𝑡 /𝐸0𝑖 i dobivamo: I te jednadžbe predstavljaju Fresnelove jednadžbe za paralelno polariziranu svjetlost. Iz ovih jednadžbi vidimo da koeficijenti refleksije (odnosno refleksija) ovise u upadnom kutu svjetlosti i o indeksima loma. Natrag na sadržaj 39 2.7.5. Očuvanje energije pri refleksiji Kada u POV Ray-u koristimo varijabilnu refleksiju uključujući fresnelovu refleksiju na prozirnim površinama objekata njihove teksture mogu izgledaju nerealno. To je rezultat nepoštivanja zakona očuvanja energije unutar virtualnog prostora. Kako se korištenjem varijabilne refleksije količina reflektirane svjetlosti mijenja ovisno o kutu promatranja, količina propuštene svjetlosti se stoga također mora mijenjati. Koliko se jedna vrijednost smanji druga se mora povećati i obrnuto. To postižemo tako da dodajemo ključnu riječ conserve_energy unutar bloka koda finish {}. Kada smo uključili zakon očuvanja energije POV Ray će množiti iznos filtrirane i propuštene svjetlosti s iznosom koji je ostao nakon refleksije npr. ako površina reflektira 80% upadne svjetlosti, iznos filtrirane/ propuštene svjetlosti će biti pomnožen sa 20%. Natrag na sadržaj 2.8. Naredba interior Naredba interior sadrži sve postavke koje opisuju svojstva unutrašnjosti objekta. Ona je komplementarna naredbi texture koja opisuje svojstva površine objekta. Definiranje svojstava interijera je od važnosti samo kod objekata koji posjeduju prozirnu teksturu koja nam dopušta da vidimo njegovu unutrašnjost. Naredbu interior primjenjujemo samo na čvrstim tijelima koja imaju dobro definiranu i određenu unutrašnjost i vanjštinu. POV Ray računa refrakciju samo kad zraka ulazi ili izlazi iz objekta, te objekte dijeli na krute, šuplje i objekte ispunjene česticama. Kruti objekt napravljen je od materijala kojeg definiramo njegovim pigmentom i završnom obradom. Po standardnim postavkama POV Ray-a svi objekti spadaju u krute. Ako nekom objektu dodijelimo teksturu drveta dobiti ćemo objekt koji je u potpunosti načinjen od drveta kao da smo ga izrezali iz nekog velikog komada drveta. Ako pak objektu dodijelimo teksturu stakla dobiti ćemo stakleni objekt itd. No važno je napomenuti da je kruti objekt samo koncept jer ako izrežemo dio objekta vidjeti ćemo da je njegova unutrašnjost prazna i da ima vrlo tanku površinu. Isti takav koncept koristi i POV Ray koji pretpostavlja da je prostor unutar objekta opisan njegovom unutrašnjošću kojeg definiramo naredbom interior. Na svjetlost koja prolazi kroz takav objekt utječu svojstva refrakcije i atenuacije objekta. U takvim krutim objektima nema mjesta za ikakve čestice koje možemo definirati maglom ili unutrašnjim medijem. Šuplje objekte definiramo dodavanjem ključne riječi hollow unutar bloka koda kojim definiramo objekt. Šuplji ili prazni objekt se smatra načinjenim od vrlo tanke površine 40 materijala kojeg smo definirali sa pigmentom i završnom obradom objekta. Njegova unutrašnjost je prazna, kao da je ispunjen molekulama zraka. Šuplji objekt možemo ispuniti česticama tako da definiramo maglu ili atmosferski medij u našoj sceni ili da objektu dodijelimo unutrašnji medij. No da bismo neki objekt ispunili bilo kakvom vrstom čestica prvo ga moramo učiniti šupljim tj. praznim. Natrag na sadržaj 2.8.1. Refrakcija svjetlosti Kada svjetlost prelazi iz optički rjeđeg u optički gušće sredstvo i obrnuto ona se lomi na granici tih sredstava.Ta pojava naziva se refrakcija. Pri refrakciji putanje zraka svjetlosti se mijenjaju ovisno o gustoći materijala kroz koji svjetlost prolazi. Zrak, voda, dijamant, itd. imaju različite gustoće i stoga različito refraktiraju svjetlost. Koliko neki materijal refraktira svjetlost opisujemo indeksom loma (eng. ior). U POV Ray-u ključnu riječ ior koristimo unutar naredbe interior kako bi uključili refrakciju svjetlosti i definirali indeks loma. Na primjer: object { Moj_objekt pigment {Clear} interior {ior 1.5} } Standardno postavljena vrijednost indeksa loma je 1 i ona na ne daje refrakciju svjetlosti. Ta vrijednost predstavlja indeks loma zraka, indeks loma vode je 1.33, stakla 1.4 i dijamanta 2.4. Po standardnim postavkama prozirne i poluprozirne površine u POV Ray-u ne refraktiraju svjetlost. Definiranje vrijednosti indeksa loma različitog od jedan uključuje refrakciju. Važno je naglasiti da ključnim riječima ior ili refraction nećemo objekt učiniti prozirnim. Prozirnost objekta dobiva se samo ako se definira vrijednost filter ili transmit različita od nule unutar definicije boje objekta tj. unutar definicije njegove površine. Natrag na sadržaj 2.8.2. Disperzija svjetlosti Za materijale čiji je indeks loma različit od 1 (zrak) indeks loma nije jednak za cijeli spektar svjetlosti. Znamo da je bijela svjetlost sastavljena je od kontinuiranog niza svih boja vidljivog spektra. Efekt disperzije vidljiv je u dugama kao i prizmama gdje se vidi ovisnost refrakcije svjetlosti o njezinoj boji tj. valnoj duljini. 41 Disperzija je pojava u kojoj fazna brzina vala ovisi o njegovoj frekvenciji tj. valovi različitih valnih duljina putuju različitim faznim brzinama. Fazna brzina vala u uniformnom sredstvu dana je sa: 𝑣= 𝑐 𝑛 gdje je c brzina svjetlosti u vakuumu i n je indeks refrakcije sredstva. Indeks refrakcije je funkcija frekvencije svjetlosti f, stoga je n = n(f), ili ako ga želimo izraziti preko valne duljine n = n(λ). Ovisnost indeksa refrakcije materijala o valnoj duljini dan je empirijskom formulom: 𝑛(𝜆) = 𝐴 + koja predstavlja Cauchyjevu jednadžbu. 𝐵 𝐶 + +⋯ 𝜆2 𝜆4 Najčešće viđena posljedica disperzije u optici je razlaganje bijele svjetlosti na prizmi u spektar boja. Iz Snellovog zakona je vidljivo da kut refrakcije svjetlosti u prizmi ovisi o indeksu refrakcije materijala od kojeg je prizma napravljena. Kako indeks refrakcije ovisi o valnoj duljini slijedi da kut refraktirane svjetlosti također ovisi o valnoj duljini. To za posljedicu ima kutno razlaganje svjetlosti na prizmi. Za vidljivu svjetlost indeksi refrakcije za većinu prozirnih materija kao zrak, stakla, itd. opada sa povećanjem valne duljine: 1 < 𝑛(𝜆𝑐𝑟𝑣𝑒𝑛𝑎 ) < 𝑛(𝜆ž𝑢𝑡𝑎 ) < 𝑛(𝜆𝑝𝑙𝑎𝑣𝑎 ) Na granici sredstava između prozirnih materijala sa zrakom ili vakuumom (čiji su indeksi refrakcije ~ 1) Snellov zakon predviđa de će se upadna svjetlost koja upada pod kutem θ obzirom na normalu granice medija biti refraktirana pod kutom arcsin(sin(θ)/n). Stoga plava svjetlost, sa većim indeksom refrakcije, biti refraktirana pod većim kutom nego crvena svjetlost. Po standardnim postavkama POV Ray ne računa disperziju prilikom prolaska svjetlosti kroz proziran objekt. Ako želimo dobiti realističan efekt razlaganja svjetlosti dodajemo ključne riječi dispersion i dispersion_samples unutar bloka koda interior{}. Vrijednost naredbe dispersion je omjer indeksa loma ljubičaste i crvene svjetlosti tj. frekvencija s rubova spektra vidljive svjetlosti. Njome kontroliramo jačinu disperzije tj. koliko će boje biti raširene. Ako je njezina vrijednost jednaka 1 tada nema disperzije, a ukoliko želimo da je bude koristimo vrijednosti od 1.01 do 1.1. Važno je naglasiti da ukoliko ne definiramo ključnu riječ ior neće doći do pojave disperzije svjetlosti na nekom objektu. 42 POV Ray pri praćenju zraka ne koristi valne duljine svjetlosti, već samo simulira spektar. Vrijednošću naredbe dispersion_samples određujemo koliko će boja imati spektar i koliko gladak će biti njihov prijelaz. Standardno postavljena vrijednost je 7, a najmanja moguća vrijednost je 2. Ako želimo dobiti dobre glatke rezultate disperzije trebamo koristiti vrijednosti od 100 pa na više. Natrag na sadržaj 2.8.3. Slabljenje svjetlosti Pojavu smanjenja intenziteta svjetlosti prilikom prolaska kroz neko sredstvo tj. prozirni objekt nazivamo slabljenjem (atenuacijom) svjetlosti. Kako bi ju simulirali u POV Ray-u koristimo ključne riječi fade_power, fade_distance i fade_color koje definiramo unutar bloka koda interior{...}. Iznos naredbe fade_distance određuje udaljenost koju svjetlost mora proći kako bi se njezin intenzitet smanjio upola. Iznos naredbe fade_power određuje kako brzo će opadati intenzitet svjetlosti. Naredbom fade_color bojamo slabljenje svjetlosti. Ako želimo dobiti realistične efekte koristimo vrijednost fade_power 2 jer intenzitet svjetlosti opada s drugom potencijom udaljenosti. Standardno postavljena vrijednost za naredbe fade_power i fade_distance je 0 i to predstavlja situaciju kad nema slabljenja svjetlosti. Standardno postavljena vrijednost za naredbu fade_color je <0,0,0>, a ako ju postavimo na <1,1,1> tada nema slabljenja svjetlosti. Ako definiramo neku boju kao npr. <1,0,0> tada dobivamo crveno slabljenje svjetlosti. Slabljenje svjetlosti se računa po formuli koja je slična formuli za slabljenje svjetlosti svjetlosnog izvora: 𝑠𝑙𝑎𝑏𝑙𝑗𝑒𝑛𝑗𝑒 = 1+� 1 𝑓𝑎𝑑𝑒_𝑝𝑜𝑤𝑒𝑟 𝑑 � 𝑓𝑎𝑑𝑒_𝑑𝑖𝑠𝑡𝑎𝑛𝑐𝑒 Ako vrijednost naredbe fade_power postavimo na 1000 ili više tada se koristi eksponencijalna funkcija slabljenja svjetlosti: 𝑠𝑙𝑎𝑏𝑙𝑗𝑒𝑛𝑗𝑒 = 𝑒 −𝑑𝑒𝑝𝑡ℎ �𝑓𝑎𝑑𝑒_𝑑𝑖𝑠𝑡𝑎𝑛𝑐𝑒� 43 Natrag na sadržaj 3. Iscrtavanje scene Iscrtavanje 6 (eng.rendering) je proces generiranja foto-realistične virtualne slike modela pomoću računala. Modeli koji se koriste jednoznačno se nazivaju datotekom scene. Ona sadrži objekte strogo definirane strukture koji su definirani nekim od programskih jezika. U njoj se nalaze sve informacije o geometriji, točki gledišta, teksturama, osvjetljenju, sjenčanju, ukratko cjelokupni opis naše virtualne scene. Podaci koje sadrži datoteka scene šalju se programu za iscrtavanje (rendereru) da ih obradi i nakon toga spremi kao digitalnu slikovnu datoteku. Proces iscrtavanja 7 sastoji se od primjene mnogih metoda iscrtavanja. U kompjutorskoj grafici želi se prikazati izgled 3D scene gledajući kroz virtualnu kameru. Metoda za računanje slike koju takva virtualna kamera stvara naziva se metodom iscrtavanja. Tehnički detalji pripreme mogu varirati, no krajni ishod je dobiti realnu 2D sliku danog 3D prikaza tj. scene. Razvoj tih metoda započeo je 70-ih godina 20. stoljeća kako bi se računalno mogle generirati foto-realistične slike. Metode iscrtavanja se dijele na metode lokalnog osvjetljenja (eng. local illumination) i metode globalnog osvjetljenja (eng. global illumination). Metode lokalnog osvjetljenja uzimaju u obzir samo svjetlo koje dolazi direktno iz izvora svjetlosti, tj. samo direktno osvjetljenje. Za razliku od njih metode globalnog osvjetljenja kako im samo ime govori, uzimaju u obzir svu svjetlost, i direktno osvjetljenje i indirektno osvjetljenje kao na primjer svjetlost koja se reflektira od drugih objekata. Metodama iscrtavanja generiramo mnoge fizičke pojave koje iscrtanoj slici daju fotorealističnost. Te metode su i razvijane sa svrhom da bi se mogle stvoriti slike koje će biti fizički točne i da ih neće biti moguće razlikovati od fotografija. Slika iscrtana tim metodama će posjedovati vizualne efekte koje možemo vidjeti u stvarnom svijetu. To su na primjer način na koji se mijenja boja objekta ovisno o osvjetljenju, posjedovanje tekstura, nepravilnosti površine tijela, širenje svjetlosti kroz različite medije, magla, dim, stvaranje područja penumbre, refleksije, refrakcije, prozirnost objekata, difrakcija svjetlosti, indirektno osvjetljenje, zračenje užarenih tijela, kaustike, mutnost objekata koji su izvan fokusa ili u gibanju i još mnogi drugi. Natrag na sadržaj 3.1. Metoda praćenja zraka U prirodi 8 svjetlosni izvor emitira zrake svjetlosti koje putuju prostorom i nailaze na objekte koje im se nađu na putu. Zraku svjetlosti zamišljamo kao roj fotona koji putuju 6 Wikipedia, Rendering, http://en.wikipedia.org/wiki/Rendering_%28computer_graphics%29 A. J. van der Ploeg, Interactive Ray Tracing, http://www.few.vu.nl/~kielmann/theses/avdploeg.pdf 8 Wikipedia, Ray tracing, http://en.wikipedia.org/wiki/Ray_tracing_%28graphics%29 7 44 duž iste linije. U savršenom vakuumu zrake svjetlosti su savršeno ravne linije. U stvarnosti kada zraka svjetlosti naiđe na objekt moguća su četiri ishoda: apsorpcija, refleksija, refrakcija ili fluorescencija svjetlosne zrake. Površina objekta može reflektirati svu ili samo dio svjetlosti u jednom ili više smjerova. Može također apsorbirati dio svjetlosti što će rezultirati smanjenjem intenziteta reflektirane i/ili refraktirane svjetlosti. Ako je površina prozirna ili djelomično prozirna, prepreka refraktira dio svjetlosti u sebe u različitim smjerovima i pritom apsorbira dio ili cijeli spektar što može rezultirati promjenom boje objekta. Najrjeđe se dešava pojava fluorescencije, tj. pojava kada objekt apsorbira dio svjetlosti i reemitira ga kao svjetlost druge valne duljine. Kako je takva pojava rijetka ona se često ne uzima u obzir kod većine programa za iscrtavanje. Između refleksije, refrakcije, apsorpcije i fluorescencije uzima se u obzir ni manje ni više od ukupne upadne svjetlosti. Na primjer tijelo ne može reflektirati 80% i refraktirati 60% upadne svjetlosti, jer bi to tada bilo 40% više svjetlosti nego što je došlo na tijelo. Uzimajući to u obzir, reflektirane i/ili refraktirane zrake svjetlosti mogu doprijeti do površina drugih tijela gdje doprinose utjecaju upadne svjetlosti i ovisno o njihovim svojstva refleksije, apsorpcije, refrakcije i fluorescencije također utječu na daljnje širenje svjetlosnih zraka. Neke od tih zraka dođu do našeg oka omogućujući nam da vidimo scenu, te samim time one doprinose konačnoj iscrtanoj slici. Prisjetimo se Empedoklove teorije svjetlosti i vida iz 5. st. pr. Kr. Njegova teorija se zasnivala na ideji da vidimo uz pomoć zraka koje izlaze iz naših očiju. Ta teorija je odbačena i dobro je poznato da to nije način kako se svjetlost širi prostorom niti način na koji vidimo objekte. Ono što se događa jest da se svjetlost emitirana iz izvora širi prostorom i prilikom međudjelovanja sa objektima reflektira se u svim smjerovima. Dio reflektirane svjetlosti sa objekta koji ulazi u naše oko stvara njegovu sliku. Ako govorimo u terminima svjetlosnih zraka to znači da se zrake svjetlosti koje dođu iz izvora svjetlosti u neku točku objekta difuzno reflektiraju u svim smjerovima, a konstrukciji slike koju vidimo doprinose samo zrake koje upadaju u naše oko i fokusiraju se na mrežnici našeg oka kreirajući sliku objekta. Korištenje oka promatrača (kamere) kao izvora zraka ne predstavlja pokušaj oživljavanja odbačene Empedoklove ideje već samo upotrebu jedne vrlo korisne konstrukcije. Kako svaka točka objekta reflektira grupu zraka u svim smjerovima prostora, zamršenu situaciju praćenja svih tih zraka možemo izbjeći tako da pratimo samo zrake koje doprinose formaciji slike, tj. zrake koje dopiru do oka. Njih možemo promatrati kao grupu zraka koje su emitirane iz oka i stoga ih pratimo u suprotnom smjeru od stvarnog smjera širenja svjetlosnih zraka. Metoda praćenja zraka1 (eng. ray tracing) je metoda ili tehnika iscrtavanja koja izračunava prikaz slike virtualne scene simulirajući širenje svjetlosnih zraka kao u 45 stvarnosti. No ona to radi unatraške. U stvarnom svijetu izvor svjetlosti emitira zrake svjetlosti koje tada osvjetljavaju objekte. Svjetlost se reflektira na objektima ili prolazi kroz transparentne objekte. Reflektirano svjetlo dolazi do našeg oka ili do leće kamere. Kako većina svjetlosnih zraka nikad ne dođe do promatrača, trebalo bi beskonačno mnogo vremena da iscrtamo scenu. Slika 17. Način rada metode praćenja zraka8 Za svaki piksel u našoj finalnoj slici šalje se jedna ili više „zraka gledanja“ iz kamere u scenu kako bi se vidjelo da li se ona siječe sa nekim od objekata u sceni. Te „zrake gledanja“ dolaze od promatrača kojeg predstavlja kamera i prolaze kroz ravninu gledanja koju predstavlja naša finalna slika. Svaki put kada zraka gledanja pogodi objekt izračunava se boja površine objekta u toj točki. U svrhu određivanja boje šalju se zrake prema svakom izvoru svjetlosti kako bi se odredio iznos svjetlosti koji dolazi iz izvora tj. direktno osvjetljenje. Te zrake nazivaju se „zrakama sjene“ i njima se provjerava da li točka površine objekta leži u sjeni ili ne. Ako je površina reflektivna ili prozirna, šalju se nove zrake kako bi odredile doprinos reflektirane i refraktirane svjetlosti ukupnoj boji površine objekta. Natrag na sadržaj 3.2. Metoda mapiranja fotona Metoda mapiranja fotona 9 (eng. photon mapping) predstavlja metodu iscrtavanja globalne iluminacije koja se sastoji od dva koraka. Prvi korak je praćenje fotona koji se sastoji od tri djela. Prvo se emitiraju fotoni iz izvora, nakon toga se oni prate, jer se oni raspršuju na objektima naše scene. I zadnji dio prve faze predstavlja pohranjivanje informacije o fotonima pri svakom sudaru sa objektom u mapu fotona. Pri prvom udaru fotona u objekt intenzitet sudara je najveći, nakon toga se bira samo jedan smjer refleksije fotona koji onda udara u drugi objekt manjim intenzitetom, itd. 9 Andries van Dam, Realism in Computer Graphics, http://www.cs.brown.edu/courses/csci1230/lectures/realism.pdf 46 Druga faza je praćenje zraka, gdje se pri svakom sjecanju zrake sa objektom sakupljaju informacije o najbližim fotonima u okolici točke sjecišta kako bi se izračunalo osvjetljenje. Sve informacije o fotonima se nalaze u prethodno spremljenoj mapi fotona. Slika 18. Metoda mapiranja fotona9 Natrag na sadržaj 3.2.1. Prvi korak - praćenje fotona Praćenje fotona 10 je proces koji se sastoji od emitiranja fotona iz izvora svjetlosti i njihovo praćenje kroz scenu. Cilj tog koraka je kreiranje mape fotona koje se koristi u koraku iscrtavanja za izračun ukupnog indirektnog osvjetljenja. Natrag na sadržaj 3.2.1.1. Emisija fotona Putanja fotona počinje u svjetlosnom izvoru. Za svaki svjetlosni izvor 11 koji smo definirali u našoj sceni kreira se roj fotona koji međusobno dijele ukupnu snagu izvora. Ako snaga izvora iznosi Psvjetlo i ako je broj emitiranih fotona jednak nfotona , tada snaga svakog emitiranog fotona iznosi: 𝑃𝑓𝑜𝑡𝑜𝑛 = 𝑃𝑠𝑣𝑗𝑒𝑡𝑙𝑜 /𝑛𝑓𝑜𝑡𝑜𝑛𝑎 Ovisno o vrsti izvora svjetla koriste se različiti modeli emisije fotona. Kod točkastih izvora svjetlosti fotoni se emitiraju uniformno u svim smjerovima. Kod površinskog 10 Zack Waters, Photon Mapping, http://web.cs.wpi.edu/~emmanuel/courses/cs563/write_ups/zackw/photon_mapping/PhotonMapping.ht ml 11 Henrik Wann Jensen, A practical guide to global illumination using ray tracing and photon mapping, 2004, ACM SIGGRAPH 2004 Course Notes (SIGGRAPH '04), Article 20 47 izvora svjetlosti uzima se nasumična pozicija na površini izvora, te se tada nasumično određuje smjer kuda će se foton emitirati. Smjer fotona ograničen je hemisferom koja je određena normalom površine svjetla. Najveća je vjerojatnost da će foton biti emitiran u smjeru okomitom na ravninu površine, a za smjer paralelan sa ravninom vjerojatnost iznosi nula. Ako scena sadrži više izvora svjetlosti, fotoni se emitiraju iz svakog izvora. Sjajniji izvori emitiraju više fotona od prigušenih izvora. Česta kriva predodžba je da scena sa više izvora svjetlosti zahtijeva mnogo više emitiranih fotona nego scena sa samo jednim izvorom. Kada imamo više izvora svjetlosti svaki izvor manje doprinosi ukupnom osvjetljenju i stoga se emitira manji broj fotona sa svakog izvora. Slika 19. Emisija fotona iz izvora svjetlosti10 Natrag na sadržaj 3.2.1.2. Raspršenje fotona Emitirani fotoni iz izvora svjetlosti raspršuju se kroz scenu i na kraju su apsorbirani ili izgubljeni. Oni se prate u suprotnom smjeru od metode praćenja svjetlosnih zraka, tj. oni se prate u smjeru kojim se svjetlost širi u stvarnosti. Kad foton udari u površinu objekta određuje se koliko je njegove energije apsorbirano, reflektirano i refraktirano ovisno o površinskim svojstvima objekta. Za određivanje vrste interakcije fotona sa površinom koristi se Monte Carlo tehnika. Bacanjem kocke i odlučujemo hoće li foton opstati i da li će se izvršiti sljedeći korak praćenja fotona. Uzmimo za primjer monokromatski slučaj. Za reflektivnu površinu sa koeficijentom difuzne refleksije d i koeficijentom spekularne refleksije s (sa time da d + s ≤ 1) koristimo nasumično odabranu varijablu ξ ∈ [0,1] i donosimo sljedeću odluku: ξ ∈ [0,d] → difuzna refleksija ξ ∈ [d,s+d] → spekularna refleksija ξ ∈ [s+d,1] → apsorpcija 48 Bitno je naglasiti da Monte Carlo tehnika ne mijenja snagu reflektiranog fotona. To možda na prvi pogled predstavlja problem, no točnost ukupnog rezultata konvergira sa većim brojem uzorka, tj. emitiranih fotona. Uzmimo za primjer površinu koja reflektira 50% upadnog svjetla. Monte Carlo tehnikom će samo polovica upadnih fotona biti reflektirana sa maksimalnom energijom, dok će druga polovica fotona biti apsorbirana. Ako ispaljujemo 1000 fotona na površinu, možemo reflektirati 1000 fotona sa upola manjom energijom ili 500 fotona sa maksimalnom energijom. Vidimo da je Monte Carlo moćna tehnika koja smanjuje računalne zahtjeve kao i zahtjeve pohrane podataka davajući pritom točan rezultat. Natrag na sadržaj 3.2.1.3. Pohranjivanje fotona Zadnji dio prve faze je pohranjivanje fotona. U scenu možemo ispaljivati milijune fotona iz svjetlosnih izvora. Foton je pohranjen kada udari u difuznu površinu. Za površine koje totalno reflektiraju fotone se ne pohranjuju informacije jer nam one ne daju nikakvu korisnu informaciju. Za iscrtavanje (renderiranje) totalnih refleksija koristi se standardno praćenje zraka. Za sve ostale interakcije fotona i površine podaci se pohranjuju u globalnu strukturu podataka koja se naziva mapa fotona. Važno je napomenuti da svaki emitirani foton može biti pohranjen više puta duž svoje putanje. Informacija o fotonu je pohranjena na površini objekta gdje je apsorbiran ukoliko je ta površina difuzna. Za svaku interakciju fotona sa površinom u mapu se pohranjuje položaj, snaga upadnog fotona i njegov upadni kut. Kako bi informacije o interakcijama fotona bile što efikasnije one se često pohranjuju u više različitih mapa fotona. U mapu kaustičkih fotona pohranjuju se fotoni koji generiraju kaustike, tj. fotoni koji su prošli najmanje jednu totalnu refleksiju prije nego što su došli do difuzne površine. Mapa globalnih fotona sadrži informacije fotona zaslužnih za globalno osvjetljenje scene na svim difuznim površinama objekata. Treća mapa je mapa volumnih fotona koja sadrži informacije o indirektnom osvjetljenju medija koji sudjeluju u sceni. Ona se kreira samo ako u našoj sceni postoji medij kao npr. magla. Isto kako fotoni mogu biti emitirani iz površine ili točke oni mogu biti emitirani iz nekog volumena. Na primjer plamen svijeće se simulira na način da emitiramo fotone iz volumena u obliku plamena svijeće. Kad fotoni prolaze nekim medijem oni se mogu raspršiti u njemu ili biti apsorbirani. Ishod ovisi o gustoći medija. Na položajima gdje se događa raspršenje fotona u mediju spremaju se informacije u mapu volumnih fotona. Za konstrukciju mapa fotona koriste se dva odvojena procesa praćenja fotona. Jedan se koristi za konstrukciju mape kaustičkih fotona, jer je za konstrukciju kaustika potreban veći broj fotona nego za konstrukciju mapa globalnih i volumnih fotona. Drugi proces praćenja fotona se koristi za kreiranje mape globalnih fotona koja 49 uključuje i mapu volumnih fotona. Fotoni se generiraju samo za vrijeme koraka praćenja fotona, dok se u drugom koraku, koraku iscrtavanja, koristi mapa fotona kako bi se izračunalo svo indirektno osvjetljenje. Zbog toga je potrebno pripremiti mapu fotona za korak iscrtavanja. Pri iscrtavanju potrebno je locirati najbliže fotone u mapi. Kako se ta operacija često ponavlja u koraku iscrtavanja, prezentacija mape fotona se optimizira prije nego počinje drugi korak. Na taj način se ubrzava operacija pronalaženja najbližih fotona u koraku iscrtavanja. Kada je mapa fotona optimizirana ona se sprema u radnu memoriju računala za kasnije korištenje. Natrag na sadržaj 3.2.2. Drugi korak - iscrtavanje Nakon što je kreirana mapa fotona kreće drugi korak metode mapiranja fotona – iscrtavanje. Finalna slika se kreira korištenjem metode praćenja zraka. Prate se zrake svjetlosti iz oka promatrača kroz svaki piksel slike u scenu. Kad ta zraka dođe do prve točke sjecišta sa površinom objekta računa se iznos količine svjetlosti koja dolazi iz te točke duž smjera zrake. Količina svjetlosti koja dolazi iz točke sjecišta jednaka je ukupnoj izlaznoj svjetlosti u toj točki. Izlazna svjetlost Lo u toj točki jednaka je zbroju emitirane svjetlosti Le i reflektirane svjetlosti Lr. 𝐿𝑜 = 𝐿𝑒 + 𝐿𝑟 Le je emitirana svjetlost sa površine objekta i ona se uzima direktno iz definicije površine objekta. Reflektirana svjetlost Lr ovisi o količini svjetlosti u ostatku scene i ona je jednaka ukupnoj svjetlosti koja dolazi u tu točku. Reflektirana svjetlost Lr je stoga jednaka zbroju: 𝐿𝑟 = 𝐿𝑑 + 𝐿𝑠 + 𝐿𝑐 + 𝐿𝑖 Ld = direktna svjetlost koja dolazi iz izvora svjetlosti Ls = indirektna svjetlost koja dolazi preko totalnih refleksija Lc = kaustike tj. indirektna svjetlost iz izvora svjetlosti koja dolazi preko spekularnih refleksija i transmisije Li = indirektna svjetlost koja je bila difuzno reflektirana barem jednom Gore navedena jednadžba predstavlja jednadžbu iscrtavanja i ona se računa svaki put kada je potrebno odrediti iznos reflektirane svjetlosti sa površine objekta. Ld predstavlja direktnu svjetlost koja dolazi iz izvora svjetlosti. Ona se računa slanjem zrake sjene iz točke sjecišta prema svim izvorima svjetlosti kako bi se provjerila vidljivost, tj. da li neki drugi objekt zaklanja izvor svjetlosti. Način računanja direktnog osvjetljenja se razlikuje ovisno treba li nam točno ili aproksimativno rješenje. 50 Pri računanju doprinosa direktnog osvjetljenja koristimo opservaciju da su veće površine ili potpuno osvjetljene ili su u sjeni. Za identifikaciju tih površina koristimo informacije iz globalne mape fotona kako bismo izbjegli korištenje zraka sjene. Zrake sjene samo koristimo u situacijama gdje se najbliži fotoni u globalnoj mapi sastoje od mješavine fotona direktnog osvjetljenja i fotona sjene ili ako broj lociranih fotona osvjetljenja i sjene u mapi nije dovoljno velik. Ls predstavlja svjetlost koja je potpuno reflektirana sa površina objekata. Ona se izračunava praćenjem zraka pošto ta metoda vrlo dobro rješava slučajeve refleksija. Lc predstavlja kaustike koje vidimo na difuznim i djelomično sjajnim površinama objekata. Postupak računanja doprinosa kaustika ovisi da li nam je potreban točan ili aproksimativan rezultat. Iznos doprinosa kaustika računa se korištenjem informacija iz mape fotona kaustika. Kako se doprinos kaustika računa direktno iz mape fotona kaustika iz tog razloga broj fotona u mapi mora biti velik kako bi dobili precizni prikaz kaustika na ekranu. Aproksimativan iznos doprinosa kaustika se pak računa iz mape globalnih fotona gdje je broj fotona puno manji od broja fotona u mapi fotona kaustike. Li predstavlja upadnu svjetlost koja je bila difuzno reflektirana barem jednom od kako je napustila izvor svjetlosti. Kako je ona još difuzno reflektirana i na površini objekta u kojoj računamo njezin doprinos, njezin utjecaj je malen. Slika 20. Primjer foto-realistične slike kreirane metodom mapiranja fotona u jednom od programskih paketa za iscrtavanje 51 Bitno je naglasiti da je metoda mapiranja fotona neovisna o točki gledanja. Jednom kad su kreirane mape fotona one sadrže sve potrebne informacije o osvjetljenju naše scene. Mi pritom možemo mijenjati položaj kamere i to neće mjenjati izgled mape fotona. Bez obzira gdje se naša kamera nalazi koriste se iste mape fotona za izračun ukupne svjetlosti u danoj točki. To vrijedi sve dok ne promijenimo vrstu ili parametre izvora svjetlosti, geometriju objekata ili materijale od kojih su objekti napravljeni. Tada se mora ponovno računati mapa fotona kako bi dobili realistične rezultate. Natrag na sadržaj 3.3. Metoda mapiranja fotona i POV Ray Kao i mnogi drugi programi za iscrtavanje, POV Ray također podržava metodu mapiranja fotona. Glavni cilj implementacije mape fotona je iscrtavanje realističnih kaustika u refleksiji i refrakciji. Kod mapiranja fotona POV Ray ispaljuje paketiće svjetlosti, tj fotone iz svjetlosnog izvora u scenu. Fotoni su usmjereni prema određenim objektima. Kad foton pogodi objekt on prolazi kroz njega ili se odbija od ciljanoga objekta, te se tada točka gdje zraka fotona sjeće objekt sprema u memoriju. Ti podaci se kasnije koriste za procjenu količine svjetlosti koja doprinosi kaustikama u refleksiji i refrakciji. Natrag na sadržaj 3.3.1. Korištenje metode mapiranja fotona u POV Ray-u Kada u POV Ray-u stvaramo scenu sa fotonima, objekte scene možemo podijeliti u dvije kategorije. U prvu kategoriju spadaju objekti koji na svojim površinama pokazuju kaustike kada su pogođeni fotonima. Druga kategorija su objekti koji stvaraju kaustike reflektiranjem i refraktiranjem fotona. Neki objekti mogu spadati u obje kategorije, a neki niti u jednu. Prva kategorija – objekti koji pokazuju kaustiku fotona Po postavljenim postavkama programa svi objekti se nalaze u prvoj kategoriji. Kad god foton pogodi objekt on se pohranjuje i kasnije se koristi za iscrtavanje kaustike na tom objektu. To znači da se po osnovnim postavkama kaustike mogu pojaviti na bilo kojoj površini. Kako bi ubrzali iscrtavanje, objekte možemo isključiti iz ove kategorije. Trebamo samo napisati liniju koda photons{collect off}. Kada napišemo tu liniju koda na objektu se neće pojavljivati kaustike. Time ćemo uštedjeti memoriju i vrijeme potrebno za izračun osvjetljenja u procesu iscrtavanja. Druga kategorija – objekti koji sudjeluju u stvaranju kaustika 52 Po postavljenim postavkama programa u drugoj kategoriji nema ni jednog objekta. Ako želimo da objekt sudjeluje u stvaraju kaustika trebamo učiniti dvije stvari. Prvo taj objekt trebamo pretvoriti u metu. To činimo korištenjem ključne riječi target. Time svjetlosnim izvorima govorimo da ispaljuju fotone u objekt. Drugo što trebamo učiniti je definirati da li objekt reflektira fotone, refraktira fotone ili oboje. To definiramo korištenjem ključnih riječi reflection on i refraction on. Da bismo omogućili objektu da reflektira i refraktira fotone unutar definicije objekta trebamo upotrijebiti sljedeći blok koda: photons { target reflection on refraction on } Generalno gledajući mi ne želimo da objekt bude u obje kategorije. Većina objekata koji uzrokuju kaustike nemaju puno boje niti su svijetli. Oni samo reflektiraju ili refraktiraju svoje okruženje. Iz tog razloga je prikazivanje kaustika na takvim površinama samo nepotrebno trošenje vremena. Čak i kada se izračuna efekt kaustika bi bio toliko prigušen da bi one bile nezamjetljive. Takvim slučajevima dodajemo photons {collect off} kako bismo spriječili nepotrebno računanje kaustičkog osvjetljenja. Imamo slučajeve kada želimo uključiti refleksiju i refrakciju fotona na površini iako ona nije meta. Time omogućujemo indirektnim fotonima (fotoni koji su pogodili metu i reflektirali ili reflaktirali se od nje) kako bi nastavili svoje putovanje nakon udaranja objekta. Natrag na sadržaj 3.3.2. Globalne postavke fotona Kako bismo definirali opcije sakupljanja i pohrane fotona u globalne postavke tekstualne datoteke scene potrebno je dodati sljedeći blok koda: global_settings { photons { count 20000 autostop 0 jitter .4 } } Blok koda koji nam određuje globalne postavke fotona ima puno više parametara koje možemo definirati: photons { spacing <photon_spacing> | count <photons_to_shoot> [gather <min_gather>, <max_gather>] 53 [media <max_steps> [,<factor>]] [jitter <jitter_amount>] [max_trace_level <photon_trace_level>] [adc_bailout <photon_adc_bailout>] [save_file "filename" | load_file "filename"] [autostop <autostop_fraction>] [expand_thresholds <percent_increase>, <expand_min>] [radius <gather_radius>, <multiplier>, <gather_radius_media>, <multiplier>] } Zadane vrijednosti globalnih postavki fotona su sljedeće: Global : expand_min gather jitter media : : : : 40 20, 100 0.4 0 Natrag na sadržaj 3.3.2.1. Naredbe spacing i count Broj generiranih fotona možemo definirati sa ključnom riječi spacing ili count. Ako koristimo razmak između fotona njime definiramo srednju vrijednost razmaka između fotona na površini. Ako razmak smanjimo na pola dobiti ćemo četiri puta više fotona na površini i osam puta više fotona u mediju tj. volumenu. Ako koristimo brojač POV Ray će ispaliti otprilike onoliko fotona koliko smo definirali. Broj fotona koji su stvarno emitirani će se skoro uvijek barem malo razlikovati od broja koji smo definirali. On može biti manji jer POV Ray ispaljuje fotone u kvadar (eng. bounding box) koji zatvara ciljani objekt što znači da će neki fotoni promašiti ciljani objekt. No broj fotona može biti i veći jer svaki objekt koji ima svojstvo refleksije i refrakcije, kreiraju se dva fotona jedan za refleksiju i drugi za refrakciju. Natrag na sadržaj 3.3.2.2. Naredba gather Ključna riječ gather omogućuje nam definirati koliko će se fotona sakupiti u svakoj točki za vrijeme koraka renderiranja. Prva vrijednost predstavlja minimalni broj fotona koji će se sakupiti, a drugi vrijednost predstavlja maksimalni broj. Zadana vrijednost je 20 za minimalni broj fotona i 100 za maksimalni broj fotona koji se sakupljaju. Natrag na sadržaj 3.3.2.3. Naredba jitter Ključna riječ jitter određuje količinu varijacija u pomaku uzorka svjetlosnih zraka. Naredbom jitter dodaje se šum u razne procedure. Time će se izbjeći efekti periodičnosti koji se jako vide u slici. 54 Ključne riječi max_trace_level i adc_bailout omogućuju nam definiranje atributa potrebnih za korak praćenja fotona. Natrag na sadržaj 3.3.2.4. Naredba max trace level U scenama koje imaju mnogo reflektirajućih i prozirnih površina POV Ray može zapeti na računanju višestrukih refleksija i refrakcija koje vrlo malo doprinose boji određenog piksela. Parametar max_trace_level definira maksimalni broj razina rekurzije koje POV Ray koristi pri praćenju zraka. On se koristi kada je zraka reflektirana ili prolazi kroz prozirni objekt i kada se šalju zrake sjene. Kada zraka pogodi reflektirajuću površinu, šalje se druga zraka da se vidi što ta površina reflektira. To predstavlja prvu razinu. Ako ta zraka pogodi drugi reflektirajuću površinu šalje se nova zraka i tada smo na drugoj razini. Maksimalni broj razina po zadanim postavkama programa je pet. Ako je je dosegnuta vrijednost max_trace_level prije nego što je pronađena nereflektirajuća površina i ako ADC ne dozvoljava raniji prekid praćenja zraka (vidi ispod), vraćena je crna boja. Ako vidimo crna područja u reflektivnim površinama na mjestima gdje bi trebala biti boja tada moramo povećati vrijednost max_trace_level. Drugi česti problem pojavljuje se kod prozirnih objekata. Npr. ako napravimo uniju deset sfera različitih radijusa i dodijelimo im prozirnu teksturu, iscrtana slika će prvih par sfera prikazati točno, dok će ostatak biti crni. To se događa jer svaki prolaz kroz prozirnu površinu predstavlja novu razinu. Takve probleme također rješavamo povećanjem vrijednosti max_trace_level. Maksimalan iznos vrijednosti parametra max_trace_level je 256. Ako vrijednost parametra max_trace_level nije postavljena i ako je za vrijeme iscrtavanja dosegnuta zadana vrijednost na ekranu ne pojavljuje upozorenje. Povećanje iznosa vrijednosti parametra max_trace_level uzrokuje povećanje korištene memorije i vremena potrebnog za praćenje zraka, te može uzrokovati rušenje programa, no ADC će to uvelike ublažiti. Natrag na sadržaj 3.3.2.5. ADC i naredba adc bailout U scenama koje imaju mnogo reflektirajućih i prozirnih površina POV Ray može zapeti na računanju višestrukih refleksija i refrakcija koje vrlo malo doprinose boji određenog piksela. Stoga POV Ray koristi sustav koji se zove Adaptive Depth 55 Control (ADC) kako bi zaustavio računanje dodatnog reflektiranih i refraktiranih zraka kada je njihov doprinos beznačajan. Svaki put kada se šalje nova zraka kao rezultat refleksije ili refrakcije njezin doprinos ukupnoj boji piksela smanjen je za iznos refleksije ili za vrijednost iznosa filtera reflektirajuće površine. U nekim točkama doprinos može biti beznačajan i tu nema smisla da šaljemo i pratimo nove zrake. Kontrola prilagodljive dubine (ADC) je ta koja prati doprinos zraka i određuje kada treba zaustaviti njihovo praćenje. U scenama koje koriste puno djelomično reflektirajućih i refraktirajućih površina korištenje ADC-a rezultira znatnim smanjenjem broja zraka koje se ispaljuju i omogućuje sigurno korištenje većeg iznosa parametra max_trace_level. To smanjenje u doprinosu boje zrake je rezultat množenja sa iznosom refleksije i/ ili sa vrijednošću filtera svake površine. Stoga savršeno reflektirajuće površine poput zrcala i savršeno prozirne površine neće biti korištene u optimizaciji ADC-a. Točka u kojoj se doprinos zrake smatra beznačajnim kontroliramo ga sa vrijednošću parametra adc_bailout. Standardna postavka njegove vrijednosti je 1/255 ili otprilike 0.0039, jer manja vrijednost od toga ne bi bila vidljiva u 24 bitnoj slici. Općenito ta postavka je dovoljna i ne treba je mijenjati. Ako adc_bailout postavimo na nulu isključujemo ADC i tada se POV Ray oslanja samo na vrijednost max_trace_level parametra koji predstavlja maksimalan broj zraka koje će se ispaliti. Natrag na sadržaj 3.3.2.6. Naredbe save file i load file Ključne riječi save_file i load_file omogućuju nam spremanje mapa fotona u datoteku i njezino ponovno pozivanje kada nam je potrebno. Pri prvom iscrtavanju scene možemo definirati datoteku u koju želimo pohraniti informacije o fotonima u našoj sceni tj.mapu fotona. Kako je metoda mapiranja fotona neovisna o točki gledišta, mi možemo promijeniti položaj kamere i to neće utjecati na interakciju fotona sa objektima naše scene. Da bismo pohranili mapu fotona jednostavno koristimo sljedeću liniju koda: save_file "moja_datoteka.ph" Trebamo kreirati datoteku proizvoljnog imena i dodati joj ekstenziju .ph kako bi POV Ray znao da se radi o datoteci mape fotona. Kada promijenimo položaj kamere možemo jednostavno pozvati spremljenu datoteku u kojoj je pohranjena mapa fotona i pri sljedećem iscrtavanju scene se neće ispaljivati i pratiti fotoni, već će se koristiti njihove informacije pohranjene u mapi. Ona sadrži sve fotone pohranjene na površinama objekata kao i u mediju ako je prisutan. 56 Pozivanje mape fotona se radi na isti način kao i spremanje, samo ovdje koristimo naredbu load_file umjesto save_file. Istovremeno ne možemo pohranjivati fotone u mapu i pozivati ju iz datoteke. Ako pozivamo mapu fotona iz datoteke POV Ray ne ispaljuje fotone u scenu već koristi informacije iz datoteke. Kako tamo nema informacija o fotonima i kako POV Ray ne ispaljuje fotone, u mapu se ništa ne može pohraniti. Sve ostale opcije poput radijusa sakupljanja fotona moraju biti definirane u POV datoteci scene i one se ne pozivaju sa mapom fotona. Spremanje i pozivanje mape fotona omogućuje nam brže iscrtavanje scene ako nismo mijenjali geometriju scene i parametre kojima definiramo površine objekata, jer ćemo u protivnom dobiti neispravan prikaz virtualne scene. Općenito bilo kakva promjena na geometriji scene zahtjeva novo ispaljivanje fotona, dok promjene položaja kamere i rezolucije slike to ne zahtjevaju. Natrag na sadržaj 3.3.2.7. Naredba autostop Za razumijevanje opcije autostop trebamo razumjeti način na koji se iz izvora svjetlosti ispaljuju fotoni. Fotoni se iz izvora ispaljuju po spiralnom uzorku. Ako zamislimo sferu sa spiralom koja počinje u njezinom polu i širi se u krugovima koji se stalno povećavaju prema ekvatoru. Tu su uključena dva kuta. Prvi kut ϕ nam govori koliko smo daleko došli kruženjem po spirali. Drugi kut θ nam govori koliko smo udaljeni od pola prema ekvatoru. Sada zamislimo da je ta sfera centrirana u izvor svjetlosti gdje je njezin pol usmjeren prema centru objekta koji prima fotone i on predstavlja početak spirale. Fotoni se ispaljuju iz svjetla po takvom spiralnom uzorku. Slika 21. Ispaljivanje fotona u ciljani objekt1 POV Ray ne prestaje ispaljivati fotone sve dok cijeli ciljani granični kvadar (eng. bounding box) objekta nije temeljito prekriven fotonima. Ponekad su naime objekti puno manji nego njihovi granični kvadri. U takvim slučajevima želimo zaustaviti ispaljivanje fotona ako smo napravili jedan cijeli krug spirale bez da smo pogodili objekt. Neki objekti poput prstenova imaju rupe u sredini. Kako ispaljivanje fotona 57 kreće od sredine objekta, fotoni prođu kroz rupu prstena zavaravajući POV Ray da je proces ispaljivanja izvršen. Kako bi izbjegli takve slučajeve koristimo ključnu riječ autostop nam omogućuje određivanje koliko daleko POV Ray mora ići prije nego što se automatski zaustavi. Vrijednost koju definiramo predstavlja dio graničnog kvadra objekta koji POV Ray mora prekriti ispaljenim fotonima, a ispravne vrijednosti su od 0.0 do 1.0 (0% do 100%). Ako cijeli krug ispucanih fotona ne uspije pogoditi ciljani objekt nakon što je spirala prošla graničnu vrijednost automatskog zaustavljanja, POV Ray tada prestaje ispaljivati fotone. Opcija autostop se ne uključuje sve dok barem jedan foton ne pogodi ciljani objekt što nam omogućuje korištenje autostop 0 čak i kad objekti imaju rupe u sredini. Natrag na sadržaj 3.3.2.8. Prilagodljiv radijus traženja POV Ray kod sakupljanja fotona koristi prilagodljivi radijus traženja ukoliko se ne radi o fotonima koji su u interakciji sa medijima. Ako se u prvom traženju ne pronađe neki minimalni broj fotona, POV Ray povećava radijus traženja i započinje novu potragu. Korištenje prilagodljivog radijusa traženja može smanjiti vrijeme potrebno za iscrtavanje slike kao i pooštriti prikaz graničnih područja u kaustičkom uzorku. Ponekad tehnika prilagodljive potrage stvara neželjene pojave na graničnim područjima. Kako bi ih maknuli koristimo dvije granične vrijednosti koje definiramo naredbom expand_thresholds. Prva granična vrijednost predstavlja postotak povećanja radijusa traženja fotona i njezina zadana vrijednost je 20% ili 0.2. Ako povećanje radijusa rezultira prevelikim brojem prikupljenih fotona, proširena potraga se odbacuje i koriste se vrijednosti dobivene iz prijašnje potrage. Druga granična vrijednost expand_min predstavlja minimalni broj prikupljenih fotona u proširenoj potrazi i njezina zadana vrijednost je 40. No ako se u proširenoj potrazi sakupi premalo fotona tada se koristi nova potraga čak i ako to znači povećanje broja prikupljenih fotona za više od 20 %. Natrag na sadržaj 3.3.2.9. Naredba radius Parametar radius koristi se za sakupljanje fotona. Što je veći radijus POV Ray-u će trebati više vremena za prikupljanje fotona. Ako pak postavimo premalen radijus POV Ray neće prikupiti dovoljno fotona za izračun njihovog doprinosa boji određene točke. Stoga je vrlo bitno odabrati primjeren radijus. POV Ray sam procjenjuje primjeren radijus analizirajući informacije spremljene u mapi fotona. U većini slučajeva POV Ray dobro procjenjuje primjeren radijus, no mogu se pojaviti slučajevi 58 gdje to i nije baš tako. Tada koristimo ključnu riječ radius kako bi prepisali ili prilagodili procjenu POV Ray-a. Radijus sakupljanja za fotone na površini objekata možemo definirati ručno upisivanjem željene vrijednosti. Ako je ona nula ili ako je izostavimo POV Ray sam analizira informacije o fotonima i procjenjuje potreban radijus. Radijus možemo prilagoditi i definiranjem množitelja. Ako smatramo da je radijus kojeg je POV Ray procijenio prevelik, možemo ga smanjiti korištenjem množitelja. Recimo ako želimo smanjiti procijenjeni radijus na pola koristimo „radius ,0.5“ kako bi smanjili radijus i time ubrzali iscrtavanje scene po cijenu kvalitete. Na isti način kao što možemo definirati i prilagođavati radijus sakupljanja fotona na površinama objekata, možemo i činiti sa radijusom sakupljanja fotona u mediju. Natrag na sadržaj 3.3.3. Ispaljivanje fotona u objekt Da bi POV Ray ispaljivao fotone u neki objekt moramo mu reći da taj objekt prima fotone. To činimo upisivanjem bloka koda photons {} unutar bloka koda u kojem definiramo objekt. Općeniti izgled bloka koda je: photons { [target [<spacing_multiplier>]] [refraction on|off] [reflection on|off] [collect on|off] [pass_through] } Njegove zadane vrijednosti su: collect refraction reflection split_union target : : : : : on off off on 1.0 Uzmimo za primjer sljedeći slučaj definiranja objekta: object { Moj_objekt photons { target refraction on reflection on collect off } } U gore navedenom primjeru prvo smo napisali ključnu riječ target i time smo naš objekt učinili metom fotona koji će biti spaljeni iz izvora svjetlosti. Ukoliko bismo trebali povećati gustoću fotona koji pogađaju objekt pokraj riječi target definiramo 59 množitelj razmaka. Ako bi na primjer definirali njegovu vrijednost od 0.5 tada bi razmak fotona koji pogađa naš objekt bio upola manji od razmaka kod ostalih objekata. To bi značilo da na tom objektu imamo 4 puta više fotona na površini i 8 puta više fotona u mediju. Objekt reflektira i refraktira fotone. Po potrebi možemo ugasiti ugasiti bilo koju od opcija jednostavnim definiranjem ključne riječi off pokraj opcije koju želimo ugasiti. Time možemo uštedjeti na memoriji i brzini iscrtavanja no nauštrb kvaliteti iscrtane slike. Korištenjem ključne riječi collect POV Ray-u možemo reći želimo li da on sprema i pohranjuje fotone na određenom objektu. U gornjem primjeru korišteno je collect off što znači da fotoni neće biti ni spremljeni ni sakupljani na našem objektu. Oni će se samo reflektirati i refraktirati na objektu i nastaviti svoje širenje scenom. Ključna riječ pass_through uzrokuje da fotoni prolaze kroz objekte nepromijenjeni na svom putu do ciljanog objekta. Nakon što foton pogodi ciljani objekt on zanemaruje opciju pass_through. Recimo da imamo slučaj u kojem se jedan objekt nalazi između izvora svjetlosti i drugog objekta. Kako on zaklanja izvor gledajući iz prspektive drugog objekta mi možemo definirati da prvi objekt ne utječe na emitirane fotone korištenjem nardbe pass_through u deklaracijskom kodu prvog objekta. Fotoni emitirani iz izvora nesmetano prolaze kroz prvi objekt i pogađaju drugi ciljani objekt. Nakon što pogode ciljani objekt oni zanemaruju naredbu pass_through i dalje normalno međudjeluju sa prvim objektom ako im se on nađe na putu pri njihovom daljnjem širenju. Na taj način emitirani fotoni dolaze direktno do ciljanog objekta i tek onda se reflektiraju i refraktiraju na prvom objektu ako dođu do njega. Bitno je naglasiti da POV Ray neće ispaljivati fotone u objekt sve dok ne napišemo ključnu riječ target. Samo definiranje refleksije i refrakcije u bloku koda objekta neće biti dovoljno. Kod interakcije fotona sa objektima bitno je spomenuti još jednu ključnu riječ, a to je split_union. Kad god se fotoni ispaljuju u objekt dobiven CSG operacijama koristi se naredba split_union. Ona može imati dva stanja i njezina zadano stanje je on. To znači da POV Ray razdvaja CSG objekt na njegove sastavne dijelove i zasebno ispaljuje fotone u svaki dio. Na taj način se sprečava ispaljivanje fotona u šupljine objekta, kao npr. rupe u rešetci. No ako imamo složene objekte koji nemaju rupa tj. šupljina definiranjem split_union off ćemo prisiliti POV Ray da ispaljuje fotone u cijeli objekt umjesto da ga rastavi i fotone ispaljuje u sastavne dijelove.Time možemo poboljšati proces pohranjivanja i sakupljanja fotona na objektu i time rezultirati točnijim iscrtavanjem slike. 60 Ključnu riječ split_union off upisujemo unutar koda unije u deklaraciji objekta na sljedeći način: union { object {...} object {...} split_union off } Natrag na sadržaj 3.3.4. Fotoni i izvori svjetlosti Kada imamo više izvora svjetlosti ponekad želimo da fotoni budu ispaljeni samo iz određenih izvora. U takvom slučaju kada smo definirali da objekt prima fotone, a ne želimo da oni budu emitirani iz određenih izvora u definiciju svjetlosnog izvora trebamo dodati photons {reflection off refraction off}. Također po potrebi možemo paliti i gasiti fotone koji se reflektiraju ili refraktiraju na ciljanom objektu. Općeniti izgled bloka koda fotona koji stavljamo u definiciju svjetlosnog izvora je: photons { [refraction on | off] [reflection on | off] [area_light] } Postavljene vrijednosti za izvor svjetlosti su: area_light refraction reflection : off : off : off Primjer: light_source { Moje_svjetlo photons { refraction on reflection off } } U gore navedenom primjeru definicije svjetlosnog izvora odredili smo da taj svjetlosni izvor emitira fotone koji sudjeluju samo u refrakciji svjetlosti pri interakciji sa ciljanim objektom. POV Ray pri mapiranju fotona sve izvore svjetlosti tretira kao točkaste izvore svjetlosti. Ako želimo da POV Ray koristi postavke našeg površinskog svjetla pri mapiranju fotona u deklaracijskom kodu našeg izvora svjetlosti moramo definirati ključnu riječ area_light. Time ne povećavamo broj fotona koje emitira izvor svjetlosti, no možemo dobiti lijepe uzorke kaustika. Natrag na sadržaj 61 4. Kaustika Kod širenja svijetlosti 12 kroz prostor često je pojavljivanje fokusiranja svjetlosti. U jednostavnom prikazu fokusiranja imamo slučaj da sve zrake prolaze kroz fokus. Arhimed 13 je navodno još 212 pr. Kr. branio Sirakuzu pomoću svojih „gorećih zrcala“ paleći jarbole rimskih brodova za vrijeme Drugog Punskog rata. Arhimed je već tada proučavao geometrijska svojstva reflektirajućih površina i fokusiranje svjetlosti. Takvi primjeri fokusiranja svjetlosti gdje sve reflektirane ili refraktirane zrake prolaze kroz jednu točku tj. fokus su nam poznati još iz školskih dana. Proizvođači leća posvećuju mnogo vremena i truda kako bi kreirali objekte koji savršeno fokusiraju svjetlost. No vrlo je mala je vjerojatnost da takvu situaciju sretnemo u prirodi. On što se događa u prirodi jest da se svjetlosne zrake fokusiraju duž fokalnih površina, a ne u točki. Uzmimo za primjer zrcalo oblika presjeka cilindra. Ako gledamo 2D projekciju situacije ono što se dešava je da se svjetlost fokusira duž fokalne krivulje a ne u točki tj. fokusu. Ako to proširimo na tri dimenzije imamo pojavu fokusiranja duž površine, a ne duž linije. 12 M.V. Berry, C. Upstill, IV Catastrophe Optics: Morphologies of Caustics and Their Diffraction Patterns, In: E. Wolf, Editor(s), Progress in Optics, Elsevier, 1980, Volume 18, Pages 257-346 13 Assunta Bonanno, Michele Camarca, Peppino Sapia and Annarosa Serpe, Archimedes and Caustics: A Twofold Multimedia and Experimental Approach, The Genius of Archimedes - 23 Centuries of Influence on Mathematics, Science and Engineering, History of Mechanism and Machine Science, 2010, Volume 11, Part 1, 45-56, Springer 62 Slika 22. 2D 14 i 3D 15 reprezentacija kaustičkih površina Zbog povećanog intenziteta svjetlosti fokusirane duž fokalne plohe njezina projekcija na neku plohu vidljiva je golim okom kao i projekcija fokusa jednog povećala. Fokalne površine duž kojih se fokusira svjetlost nazivaju se kaustičkim površinama, a fokalne krivulje koje predstavljaju projekciju kaustičkih površina na ravninu promatranja nazivaju se kaustičke krivulje ili kaustike. Intenzitet 16 svjetlosti na kaustikama može biti dovoljan da zapali papir što objašnjava porijeklo riječi koja dolazi od lat. Causticus što znači gorenje. Usprkos sveprisutnosti kaustika njihovo postojanje i proces stvaranja nije poznat većini ljudi. Razlog tome je što se proces stvaranja kaustika i njihova geometrijska svojstva ne uče u srednješkolskom i akademskom programu već se samo zadržava na savršenom fokusiranju tj. paraaksijalnom modelu i aberacijama svjetlosti kada izlazimo iz modela i imamo stvarni slučaj. No ne govori se o geometrijskim svojstvima aberacijama i eventualnom povezanošću sa prirodnim fokusiranjem svjetlosti tj. kaustikama. Kaustike kao fizički fenomeni su zasigurno bile promatrane kroz sva razdoblja povijesti fizike što proizlazi iz činjenice da su kaustike svjetlosti vidljive golim okom. 14 Michael Rogers, Catacaustics Generated by a Point Source, http://demonstrations.wolfram.com/CatacausticsGeneratedByAPointSource 15 Georg Glaeser, Reflections on Spheres and Cylinders of Revolution, Journal for Geometry and Graphics, 1999, Volume 3, No. 2, 121-139 16 Yu. A. Kravtsov and Yu. I. Orlov, Caustics, Catastrophes and Wave Fields, 1999, Springer 63 Stavroudis 17 je u svojoj knjizi Matematika geometrijske i fizikalne optike prekrasno sročio: „Među artefaktima geometrijske optike zrake ne posjeduju fizikalnu stvarnost; valne fronte ne možemo vidjeti, njihovu prisutnost moramo promatrati indirektno pomoć interferometrije. Za razliku od zraka i valnih fronti kaustičke površine su zaista realne i one se mogu vidjeti i fotografirati. No ta „materija“ geometrijske optike je najmanje shvaćena i skoro u potpunosti zanemarena.“ Bez obzira na fizikalnu realnost svjetlosnih kaustika i mogućnost da ih vidimo golim okom one su se počele istraživati tek u 17. st. Razlog tome je što se kaustike usko vežu na geometrijsku optiku jer se njih objašnjava konceptima tj. apstraktnim objektima geometrijske optike - zrakama ili valnim frontama. Tek kad je geometrijska optika postala dobro zaokružena cjelina počelo se sa objašnjavanjem pojave kaustika i istraživanjem njihovih geometrijskih svojstava. Leonardo DaVinci je predvidio njihovu pojavu u 16.st. što je vidljivo iz njegovih skica. Slika 23. Da Vincijeve konstrukcije kaustika Kaustike 18 je prvi proučavao i predstavio Tschirnhaus 1682. godine. Tschirnhaus 19, Le Hire i Leibnitz su radili na teoriji kaustika, području koje je usko vezano uz geometrijsku optiku. Kaustičke krivulje proučavali su svi eminentni matematičari 17. st. poput Huygensa, Barrowa, Newtona, Bernoullia, a zatim su proučavane analitički od vremena Tschirnhausa pa sve do 19. st. Leibnitz je bio veoma zainteresiran kaustikama i nagađa se da su ga one inspirirale u otkriću koncepta ovojnica (envelopa) linija. Uzmimo za primjer Leonardovu skicu kaustike dobivene sfernim zrcalom na slici 23. Vidljivo je da kaustika ima svoj vrh koji se pojavljuje u blizini optičke osi i njegova vršna točka leži na osi. Kada bi zrake sa optičkom osi optičkog sustava (zrcala) zatvarale male kutove i bile u njezinoj neposrednoj blizini vidljiva bi bila samo vršna točka kaustike na optičkoj osi. Ta točka predstavlja paraksijalni fokus tj. savršeni 17 O. N.Stavroudis, The Mathematics of Geometrical and Physical Optics, 2006, Wiley Robert C. Yates, Curves and Their Properties, 1947, The National Council of Teachers of Mathematics 19 Giovanni Mingari Scarpello and Aldo Scimone, The Work of Tschirnhaus, La Hire and Leibniz on Catacaustics and the Birth of the Envelopes of Lines in the 17th Century, 2005, Springer Berlin/ Heidelberg 18 64 točkasti fokus koji nam je poznat iz elementarne geometrijske optike. Kaustike12 stoga predstavljaju perturbacije savršenog fokusa tj. aberacije leća. Izgled17 i položaj kaustičke površine u prostoru opisuje geometrijske aberacije vezane uz dani optički sustav. Na kaustikama leže sve monokromatske aberacije. Struktura kaustika potpuno opisuje greške u stvaranju slike predmeta: sfernu aberaciju, komu i astigmatizam. Njezin položaj u prostoru ukazuje na greške polja: distorziju i zakrivljenost polja. Na elementarnoj razini kaustike tretiramo kao geometrijske objekte. Kada se za njihovu konstrukciju koristimo zrakama kaustika tada predstavlja ovojnicu (envelopu) sustava reflektiranih ili refraktiranih svjetlosnih zraka. Ovojnica je krivulja koja tangencijalno dodiruje svakog člana sustava krivulja, u našem slučaju to su zrake koje su predočene ravnim linijama. Intenzitet svjetlosti je najveći na kaustikama, i one dominiraju optičkom slikom sve dok je valna duljina dovoljno mala kako bi geometrijska optika bila ispravna aproksimacija valnog polja. To znači da je ona ispravna aproksimacija sve dok je valna duljina puno manja od dimenzija objekta. No kada je valna duljina jednaka ili veća od veličine predmeta (kada idemo na mikroskopsku razinu) teorija kratkih valova, područje geometrijske optike gdje zrake posjeduju amplitudu i fazu i dozvoljeno im je da interferiraju na mjestima gdje se sijeku, predviđa nefizikalne rezultate intenziteta svjetlosti. U situacijama kada je valna duljina jednaka ili veća od predmeta do izražaja dolaze valna svojstva svjetlosti, te imamo pojavu difrakcije i tada geometrijska optika više nije ispravna aproksimacija. Kaustike na mikroskopskoj razini pokazuju fine difrakcijske uzorke. Stoga su znanstvenici koji su se bavili istraživanjem kaustika krenuli u potragu teorije koja bi fizikalno točno opisala pojave u takvim uvjetima. Današnja fizička mjerenja16 kaustike tretiraju kao valne objekte - difuzna područja sa pojačanom amplitudom valnog polja. Ja ću u ovom radu kao alat za konstrukciju kaustika koristiti geometrijsku optiku, tj. kaustike ću tretirati kao geometrijske objekte. Naravno moramo poštivati pravila i granice u kojim geometrijska optika predstavlja ispravnu aproksimaciju. U nastavku rada bavim se svjetlosnim kaustikama na makroskopskoj razini, kaustike koje zamjećujemo u stvarnosti i time geometrijska optika predstavlja odličan alat za konstrukciju kaustika. Prije nego što krenem na proces konstruiranja kaustika želim naglasiti da kaustike nisu vezane isključivo uz svjetlost. One se pojavljuju u svim valnim poljima poput akustičkog, elektromagnetskog, seizmičkog, itd. Dok kaustike svjetlosnih valova16 i valova na površini vode možemo zamijetiti golim okom, za većinu drugih valnih polja kao recimo akustičko, elektromagnetsko i seizmičko, kaustike možemo snimiti samo pomoću fizičkih naprava. Opis valnih polja u području kaustika je bitan za mnoge discipline fizike kao za npr. instrumentalnu optiku( leće, prizme, zrcala, itd.) Problem kaustičkih polja pojavljuje se u radio inženjerstvu, optici i akustici prirodnih medija. 65 Fokusiranje i fenomen kaustike uzima se u obzir u promatranju propagacije radio valova kroz solarnu plazmu i zemljinu atmosferu. Natrag na sadržaj 4.1. Konstrukcija kaustika metodom praćenja zraka Geometrijska optika 20 je dio optike koja opisuje širenje svjetlosti pomoću koncepta svjetlosnih zraka. Svjetlosna zraka17 je apstraktni objekt koji predstavlja trajektoriju čestica svjetlosti tj. fotona. Po Fermatovom principu te trajektorije su putanje duž kojih je vrijeme prijelaza čestice svjetlosti iz točke A do točke B u nekom sredstvu ekstrem tj. minimum. U homogenom sredstvu, gdje je indeks loma konstantan, vrijeme prijelaza čestice je minimum i stoga zrake svjetlosti u takvim sredstvima predočujemo ravnim linijama. To objašnjava zašto se Fermatov princip u homogenom sredstvu naziva zakon pravocrtnog širenja svjetlosti. Te ravne linije, koje nemaju nikakvu fizičku realnost, predstavljaju alat kojim analiziramo i dizajniramo optičke sustave. One se lome na prijelazu između dva sredstva, savijaju se u nehomogenom sredstvu gdje indeks loma nije stalan, apsorbiraju se i reflektiraju. Pomoću Fermatovog principa17, postulata o „intrinzičnoj lijenosti prirode“ koja odabire putanju koju čestice svjetlosti prelaze u najkraćem vremenu, dolazimo do zakona refleksije i Snellovog zakona refrakcije (loma). Zakon refleksije nam govori da se zraka koja upada na neku reflektirajuću površinu reflektira pod istim kutom pod kojim je upala na površinu. Kut koji reflektirana zraka zatvara sa normalom površine u točki refleksije jednak je kutu koja upadna zraka zatvara sa normalom površine u istoj točki, tj. upadni kut jednak je kutu refleksije. Upadna i reflektirana zraka leže u istoj ravnini i ona je okomita na ravninu koja je određena okomicom površine u točki refleksije. Snellov zakon ili zakon refrakcije (loma) nam govori kako se zraka lomi na granici dva sredstva. Kada zraka svjetlosti upada na granicu dva sredstva ona se lomi tako da obje zrake, upadna i refraktirana, leže u istoj ravnini koja je okomita na ravninu određenu okomicom ravnine u točki refrakcije. Omjer sinusa upadnog kuta i sinusa kuta refrakcije proporcionalan je omjeru brzine širenja svjetlosti u danim sredstvima ili obrnuto proporcionalan indeksima loma danih sredstava. 𝑛= 20 sin 𝛼 𝑣1 = sin 𝛽 𝑣2 𝑐 𝑐 𝑐 𝑐 ⇒ 𝑣 = ; 𝑣1 = ; 𝑣2 = 𝑛 𝑛1 𝑛2 𝑣 𝑐 sin 𝛼 𝑣1 𝑛1 𝑛2 = = 𝑐 = sin 𝛽 𝑣2 𝑛1 𝑛2 Wikipedia, Geometrical Optics, http://en.wikipedia.org/wiki/Geometric_optics 66 U homogenom izotropnom17 optičkom sredstvu n je konstantan. U nehomogenom izotropnom sredstvu n je funkcija položaja, a u anizotropnom sredstvu indeks loma ovisi o smjeru zrake. U nastavku ovog rada kao optička sredstva koristim zrak i vodu, što su homogeni izotropni mediji i u tim slučajevima n je konstantan. Stoga je i omjer sinusa kuta upada i loma konstantan i imamo skalarni oblik Snellovog zakona: 𝑛1 sin 𝛼 = 𝑛2 sin 𝛽 𝑛1 , 𝑛2 = 𝑘𝑜𝑛𝑠𝑡. Pravila geometrijske optike opisuju kako se zrake šire kroz optički sustav. U geometrijskoj optici često se koristi paraaksijalni model širenja zraka koji predstavlja slučaj kada zrake zatvaraju male kutove sa optičkom osi i nalaze se u njezinoj blizini. Ja taj model neću koristiti iz dva razloga. Prvi je što se u tom slučaju zrake svjetlosti nakon refleksije ili refrakcije na nekom objektu fokusiraju u točki, koja predstavlja savršeni točkasti fokus, i u takvim slučajevima nema aberacija. Kako aberacije predstavljaju kaustike takvim modelom ih ne možemo konstruirati niti istražiti njihova geometrijska svojstva. Drugi razlog je to što takvu situaciju moramo stvoriti umjetno, nju ne nalazimo u prirodi i nju koristimo samo pri traženju savršenog fokusa nekog optičkog sustava. Zrake svjetlosti u prirodi skoro nikad ne zatvaraju male kutove sa optičkom osi niti se nalaze u njezinoj neposrednoj blizini. To znači da nema pojave savršenog fokusiranja tj. fokusiranja u točki, već se svjetlost fokusira duž kaustičkih površina. Takav način fokusiranja predstavlja prirodno fokusiranje svjetlosti. Kada znamo sva pravila koja nam opisuju širenje svjetlosti u terminu zraka možemo krenuti sa procesom praćenja zraka. Metoda praćenja zraka se u fizici najčešće koristi za provjeravanje da li leće zadovoljavaju propisane specifikacije prije nego što se krene na njihovu proizvodnju. Ja ću je ovdje koristiti za određivanje fokalnih krivulja tj. kaustika. Površinu svakog objekta u 2D projekciji možemo predočiti nekom krivuljom. Izvor svjetlosti predočujemo točkastim izvorom svjetlosti koji nazivamo točka zračenja i ona je fiksirana. Svjetlosne zrake izlaze iz točke zračenja i reflektiraju ili refraktiraju se na danoj krivulji. Refraktirane ili reflektirane zrake se ne sjeku u točki, već se sjeku duž krivulje koje nazivamo kaustičkom krivuljom. Ona predstavlja ovojnicu (envelopu) reflektiranih ili refraktiranih zraka. Ovojnica je krivulja koja tangencijalno dodiruje svakog člana sustava krivulja, a u našem slučaju su to ravne linije kojima predočujemo zrake. Imamo dva slučaja dobivanja kaustike; u refleksiji i refrakciji 21. Kada se zrake iz točke zračenja reflektiraju od dane krivulje dobivamo ovojnicu reflektiranih svjetlosnih zraka koju zovemo katakaustika, a kada se zrake refraktiraju (lome) na krivulji dobivamo ovojnicu refraktiranih svjetlosnih zraka koju zovemo diakaustika. Svjetlosne zrake 21 Xah Lee, Caustics, http://xahlee.org/SpecialPlaneCurves_dir/Caustics_dir/caustics.html 67 mogu biti paralelne što odgovara slučaju kada se točka zračenja nalazi u beskonačnosti. Uzmimo za prvi primjer kružnicu. Ovisno o položaju točke zračenja dobivamo različite katakaustike. Slika 24. Katakaustike kružnice14 Kada je točka zračenja u beskonačnosti na kružnici dobivamo katakaustiku oblika nefroide (lijevi primjer slike 24). Kada točku zračenja postavimo na kružnicu dobivamo katakaustiku koja ima oblik kardioide (desni primjer slike 24). Za razliku od savršenog fokusa kaustike predstavljaju stabilne strukture. Već najmanja promjena geometrije tijela ili položaja izvora svjetlosti će uništiti savršeni točkasti fokus i „razmazati“ ga duž krivulje tj. kaustike, dok kaustike ne možemo uništiti. Promjenom geometrije tijela ili položaja izvora one će samo promijeniti svoj oblik tj. pložaj. Pri promjeni ona neće nestati i pojaviti se u drugom obliku već će kontinuirano mijenjati svoj oblik. Stoga za stvaranje kaustika nije potrebno da površine imaju neki specijalni oblik, one mogu biti bilo kojeg oblika. Jedini uvjet je da reflektirajuća ili refraktirajuća površina bude zakrivljena. Svaku površinu objekta možemo predočiti nekom krivuljom i tada praćenjem zraka možemo konstruirati njezinu katakaustiku. Slika 25. Katakaustike14, 22 krivulja funkcija sin(x), -x3+x5 i sin(x)3 22 Michael Rogers, Catacaustics for Some Graphs, http://demonstrations.wolfram.com/CatacausticsForSomeGraphs 68 U nastavku su tri slike katakaustike kardioide koja mijenja svoj oblik ovisno o promjeni položaja točke zračenja. Slika 26.Katakaustike kardioide14 Svaka proizvoljna krivulja ovisno o položaju točke zračenja ne mora imati svoju kaustiku. Primjer tome bi bila parabola sa točkom zračenja u fokusu. Zrake koje dolaze iz te točke nakon reflektiranja od parabole su paralelne i ne tvore kaustiku. Također primjer je i kružnica sa točkom zračenja u ishodištu i ona ne posjeduje diakaustiku. Slika 27. Parabola i njezin fokus, kružnica i njezino ishodište14 Vidljivo je da katakaustika u slučaju paralelnih zraka koje upadaju paralelno x osi parabole degenerirana u točku koja predstavlja njezin fokus. Također u slučaju kad se točkasti izvor nalazi u ishodištu kružnice njezina katakaustika je degenerirana u točku u ishodištu. Diakaustiku konstruiramo na sličan način. Imamo neku proizvoljnu krivulju i točku zračenja. Pratimo zrake iz točke do krivulje na kojoj se refraktiraju i tada konstruramo diakaustike duž koje se zrake sijeku. U nastavku su dvije slike diakaustika sinusne krivulje i elipse sa točkom zračenja u beskonačnosti. 69 Slika 28. Diakaustika sinusne krivulje i elipse21 U nastavku je tabela sa slikama katakaustika nekih poznatih krivulja ovisno o položaju točke zračenja 23. 23 Krivulja Položaj točke zračenja Katakaustika Kardioida Vrh kardioide Nefroida Kružnica Na krivulji Kardioida Kružnica Paralelne zrake (točka u beskonačnosti) Nefroida Wolfram MathWorld, Catacaustic, http://mathworld.wolfram.com/Catacaustic.html 70 Slika Dioklova cisoida Fokus Kardioida Jedan luk cikloide Paralelne zrake okomite na os Dva luka cikloide Deltoida Paralelne zrake Astroida Elipsa Bilo koji položaj Neimenovana krivulja Prirodni logaritam Paralelne zrake paralelne osi x Lančanica 71 Logaritamska spirala Ishodište Jednaka logaritamska spirala Parabola Paralelne zrake okomite na x os Tschirnhausenova kubična krivulja Tschirnhausenova kubična krivulja Fokus Semikubična parabola Natrag na sadržaj 72 4.2. Kaustika u refleksiji i POV Ray Jedan on najčešćih primjera kaustike u svakidašnjem životu je svijetla linija u šalici kave koja se pojavljuje dok je ispijamo na terasi po sunčanom danu. Sunce predstavlja točkasti izvor svjetlosti u beskonačnosti koji emitira paralelne zrake svjetlosti. Paralelne zrake upadaju na unutarnju zakrivljenu stjenku šalice i nakon refleksije zatvaraju zakrivljenu površinu u tri dimenzije koja predstavlja kaustiku. Projicirane na dno šalice ukoliko je šalica prazna ili na ravninu površine kave zrake tvore ovojnicu kao na slici. Slika 29. Katakaustika – envelopa svjetlosnih zraka projicirana na horizontalnu ravninu 24 Razlog zašto je vidljiva svijetla linija na dnu šalice ili na površini kave je taj što ona predstavlja presjek kaustičke površine sa površinom kave ili dnom šalice. Dno šalice ili površina kave nam predstavljaju zaslon na kojem promatramo presjek kaustike. To je vrsta fokusiranja, no ne u savršenom fokusu u točki koji se najčešće povezuje sa sa refleksijom cilindričnog ogledala kada zrake zatvaraju male kuteve sa optičkom osi i/ili se nalaze se u njenoj neposrednoj blizini - tzv. paraaksijalni slučaj koji se promatra u elementarnoj geometrijskoj optici. Kaustika sadrži vrh, i ako zrake ograničimo da zatvaraju male kuteve sa osi i/ili da se zrake nalaze blizu optičke osi vidjeti ćemo samo vrh kaustike - to je paraaksijalni vrh koji predstavlja savršeni fokus. Ostatak kaustike je formiran pomoću zraka koje zatvaraju veće kuteve sa osi i/ili se ne nalaze u neposrednoj blizini optičke osi. Kako sunce mijenja svoj položaj na nebu mijenja se upadni kut zraka svjetlosti. Oblik kaustike mijenja se ovisno o upadnom kutu zraka. Smanjivanjem upadnog kuta kaustika postaje manje oštra i pojavljuje se dodatna vrlo blijeda krivulja. Do istog efekta dolazi ako se mijenja razina kave u šalici. Efekt se može bolje vidjeti u visoko poliranom metalnom cilindru, prstenu ili cilindričnom zrcalu. 24 J. F. Nye, Natural focusing and fine structure of light, 1999, Institute of Physics Publishing 73 Slika 30. Eksperimentalno opažanje kaustike u šalici kave fotografijom Kod kaustike u šalici kave upadne zrake reflektiraju se jednom, te takve kaustike nazivamo kaustikama prvog reda. Oblik takvih kaustika ovisi o dva parametra, upadnom kutu i visini objekta na kojem promatramo kaustiku, u našem slučaju to je visina područja šalice gdje nema kave. Uzmimo za primjer situaciju sa lijevog primjera slike 30. Slika 31. Skica postava šalice sa kavom Po skici sa slike 31 možemo konstruirati virtualni postav u POV Ray-u: #include "coffeemug.inc" /---deklaracija varijabli---/ #declare mjerna_jedinica = 0; //varijable šalice #declare radijus = 4.1; #declare debljina_stjenke = 0.5; #declare visina_salice = 9.5; #declare parametri_drske = <1.5, 6.5, 3.8>; #declare prostor_drske = 2; #declare Use_merge = yes; //varijable tekućine #declare visina_tekucine = 7; #declare epsilon = 0.001; 74 //varijable izvora svjetlosti #declare udaljenost_od_stola = 35.5; #declare udaljenost_od_salice = 15.5; #declare bijela_svjetlost = <1, 1, 1>; #declare snaga_izvora = 1; /---deklaracija materijala---/ //materijal drvo #declare drvo = texture { pigment { wood color_map { [0.00 color [0.40 color [0.60 color [1.00 color } scale <1.5, 1, 2> turbulence 0.07 scale <0.5, 1, 2> rotate <0,90,0> } finish { ambient 0.1 diffuse 0.9 reflection 0.3 phong 1 phong_size 200 } } rgb rgb rgb rgb <0.5, <1.0, <1.0, <0.5, 0.25, 0.50, 0.50, 0.25, 0.125>] 0.250>] 0.250>] 0.125>] //materijal keramika #declare keramika = texture { pigment { color rgb <1, 1, 1> } finish { ambient 0.1 diffuse 0.9 reflection 0.2 specular 0.1 roughness 0.1 } } //materijal kava #declare kava = texture { pigment { color rgb <0.58, 0.41, 0.22> } finish { ambient 0.1 diffuse 0.9 reflection 0.2 specular 0.8 roughness 0.001 phong 1 phong_size 400 } } //---deklaracija objekata---// //okruženje 75 #declare okruzenje = sky_sphere { pigment { image_map { png "C:\Users\Bruno\Desktop\123.png" map_type 1 } } rotate <0, 120, 0> translate <0, 0.5, 0> } //objekt stol #declare stol = box { <-100, -1, -100>, < 100, 0, 100> texture { drvo } } //objekt izvor paralelnih zraka svjetlosti #declare paralelni_izvor_svjetlosti = light_source { <udaljenost_od_salice, udaljenost_od_stola, 0> color rgb bijela_svjetlost*snaga_izvora parallel point_at <0, 0, 0> } //objekt izvor svjetlosti stolna lampa #declare izvor_svjetlosti_lampa = light_source { <udaljenost_od_salice, udaljenost_od_stola, 0> color rgb bijela_svjetlost*snaga_izvora spotlight radius 35 falloff 37 tightness 0.2 area_light <1, 0, 0>, <0, 1, 0>, 10, 10 adaptive 1 jitter point_at <udaljenost_od_salice, 0, 0> } //objekt šalica #declare salica = object { CoffeeMug_Detail (radijus, debljina_stjenke, visina_salice, mjerna_jedinica, parametric_drske, prostor_drske, Use_merge) rotate <0, 180, 0> texture { keramika } } //objekt pice #declare pice = object { CoffeeMug_Beverage (radijus, debljina_stjenke, visina_tekucine, mjerna_jedinica, epsilon) texture { kava } } //---glavni dio programa---// global_settings { max_trace_level 2 photons { spacing 0.002 76 autostop 0 jitter .4 save_file "C:\Users\Bruno\Desktop\fotoni_salica.ph" } } sky_sphere { okruzenje } object { paralelni_izvor_svjetlosti photons { reflection on } } object { stol } object { salica photons { target reflection on } } object { pice } camera { perspective location <-4, 20, -4> look_at <0, 6, 0> rotate <0, 180,0> } U kodu sam koristio objekt šalice kave kojeg je modelirao Richard Callwood III. Objekt se nalazi na POV Ray stranici pod kolekcijom objekata koji se mogu slobodno koristiti u vlastitim projektima. Definicija šalice se nalazi u datoteci coffeemug.inc koju pozivam na početku koda. Imamo šalicu visine h1, unutarnjeg radijusa r, debljine dna d, faktora reflektivnosti fr ispunjene kavom do neke visine šalice h2. Za formaciju kaustika bitan nam je dio šalice koji nije ispunjen kavom. To odgovara situaciji kao da imamo prsten radijusa r, faktora reflektivnosti fr i visine ℎ = ℎ1 − (ℎ2 + 𝑑) koji leži na nekoj površini na kojoj promatramo kaustiku. Slika 32. Ovisnost oblika kaustike o upadnom kutu α Slika 32 predstavlja slučaj kada je razina kave u šalici konstantna, a mijenja se položaj izvora svjetlosti, tj. mijenja se upadni kut zraka. Iste oblike kaustike dobivamo kada je položaj izvora svjetlosti stalan (imamo konstantni upadni kut α), a mijenjamo razinu kave u šalici kao na slici 33. Iz oblika sjene u šalici na slikama 32 i 33 se jasno vidi promjena položaja izvora i promjena razine tekućine u šalici. 77 Slika 33. Ovisnost oblika kaustike o visini tekućine h Oblik kaustike prvog reda ovisi o upadnom kutu α i visini cilindra h. Na lijevoj slici imamo slučaj kada je ℎ ∙ 𝑐𝑡𝑔𝛼 < 𝑟/2, srednja slika predstavlja situaciju kada je ℎ ∙ 𝑐𝑡𝑔𝛼 = 𝑟/2 i tada dobivamo „klasičnu“ kaustiku sa oštrim vrhom i na desnoj slici je prikazan slučaj kada je ℎ ∙ 𝑐𝑡𝑔𝛼 > 𝑟/2. U slučaju kada je ℎ ∙ 𝑐𝑡𝑔𝛼 > 𝑟/2 pojavljuje se klasična kaustika i dodatna krivulja. Slika 34. Skica 25 kaustike u šalici za h*ctgα > r/2 U slučaju malog upadnog kuta α oblik svjetlosti koji se pojavljuje na površini kave sastoji se od dvije krivulje: klasične kaustike koja predstavlja epicikloidu kod koje je radijus kruga koji se kotrlja upola manji od radijusa kruga koji miruje. Druga krivulja je epitrohoida kod koje točka ne leži na obodu kružnice već na nekoj udaljenosti izvan kruga kao na slici 34. Klasičnu kaustiku u slučaju paralelnih zraka tj. kada je izvor svjetlosti u beskonačnosti možemo opisati parametarskim jednadžbama epicikloide: 𝑥(𝜙) = 𝑟 [3 𝑐𝑜𝑠 𝜙 + 𝑐𝑜𝑠(3𝜙)] 4 𝑟 𝑦(𝜙) = [3 𝑠𝑖𝑛 𝜙 + 𝑠𝑖𝑛(3𝜙)] 4 25 Christian Ucke and Christoph Engelhardt, Playing with caustic phenomena, published in the proceedings of the GIREP/ICPE conference ‘New ways in physics teaching’, Ljubljana 21.-27.8.1996, page 440-444 78 Kut 𝜙 je označen na slici 42 koja slijedi u nastavku teksta. Oblik kaustika ovisi još o jednom parametru – broju refleksija. U slučaju kaustike u šalici kave imamo samo jednu refleksiju jer je šalica napravljena od keramike i njezina površina nije dovoljno reflektivna, no ukoliko imamo neki visoko polirani metalni predmet možemo vidjeti kaustiku zraka reflektiranih više od jednom. Slika 35. Skice i slike kaustika prvog, drugog i trećeg reda na metalnom prstenu25, 26 Slika 36. POV Ray simulacija kaustika prvog, drugog i trećeg reda na metalnom prstenu 26 Christian Ucke und Christian Engelhardt , Kaustik in der Kaffeetasse, 1998, Physik in unserer Zeit 29, Seite 120-122 79 Slika 35 predstavlja skice i eksperimentalna opažanja kaustika višeg reda, dok slika 36 prikazuje POV Ray simulacije primjera iz slike 35. Na lijevom primjeru slike 35 i 36 vidimo klasičnu kaustiku prvog reda dobivenu zrakama koje su se reflektirale jednom od stjenke prstena. Takvu kaustiku možemo zamjetiti u šalici kave ili bilo kojem cilindričnom objektu. Srednji primjer predstavlja kaustiku drugog reda dobivenu dvostrukom refleksijom zraka, a na desnom primjeru slika je kaustika trećeg reda. Kao što sam napomenuo kaustike višeg reda ne možemo zamjetiti u šalici kave. Za njih nam treba visoko polirani metalni objekti, a najbolji objekt za njihovo promatranje bi bio prsten koji sa unutrašnje strane ima zrcalo. Slika 37. POV Ray simulacija kaustika četvrtog i petog reda U nastavku je POV Ray kod kojim sam simulirao kaustike višeg reda. //---deklaracija varijabli---// //parametri prstena #declare unutarnji_radijus = 2; #declare vanjski_radijus = 2.5; #declare visina_prstena = 2; //parametri izvora #declare udaljenost_od_sredista_prstena = -60; #declare udaljenost_od_stola = 123; #declare snaga_izvora = 1; #declare bijela_svjetlost = <1, 1, 1>; //red kaustike #declare kaustika_prvog_reda = 2; #declare kaustika_drugog_reda = 3; #declare kaustika_treceg_reda = 4; #declare kaustika_cetvrtog_reda = 5; #declare kaustika_petog_reda = 6; //---deklaracija materijala---// //materijal prstena #declare srebro = texture { pigment { color rgb <0.94, 0.93, 0.90> } finish { ambient 0.1 diffuse 0.6 80 brilliance 6 specular 0.8 roughness 1/120 metallic reflection 0.8 } } // materijal stola #declare drvo = texture { pigment { wood color_map { [0.00 color [0.40 color [0.60 color [1.00 color } scale <1.5, 1, 2> turbulence 0.2 scale <0.6, 1, 4> rotate <0, 90, 0> } finish { ambient 0.1 diffuse 0.9 reflection 0.3 phong 1 phong_size 200 } } rgb rgb rgb rgb <0.5, <1.0, <1.0, <0.5, 0.25, 0.50, 0.50, 0.25, 0.125>] 0.250>] 0.250>] 0.125>] //---deklaracija objekata---// //okruženje #declare okruzenje = sky_sphere { pigment { image_map { jpeg "C:\Users\Bruno\Desktop\dnevna_soba.jpg" map_type 1 } } rotate <0, 120, 0> translate <0.5, 0, 0> } //objekt stol #declare stol = plane { y, 0 texture { drvo } } //objekt točkasti izvor svjetlosti #declare tockasti_izvor_svjetlosti = light_source { <udaljenost_od_sredista_prstena, udaljenost_od_stola, 0> color rgb bijela_svjetlost*snaga_izvora } //objekt paralelni izvor svjetlosti 81 #declare paralelni_izvor_svjetlosti = light_source { <udaljenost_od_sredista_prstena, udaljenost_od_stola, 0> color rgb bijela_svjetlost*snaga_izvora parallel point_at <0, 0, 0> } //objekt prsten #declare prsten = difference { cylinder{<0, 0, 0>, <0, visina_prstena, 0>, vanjski_radijus } cylinder{<0,-0.001, 0>, <0, visina_prstena+0.001, 0>, unutarnji_radijus } texture { srebro } } //---glavni dio programa---// global_settings { max_trace_level kaustika_prvog_reda photons { spacing 0.002 autostop 0 jitter .4 } } object { okruzenje } object { tockasti_izvor_svjetlosti photons { reflection on } } object { stol } object { prsten photons { target reflection on } } camera { perspective location <0, 8, 0> look_at <0, 0, 0> } U uvodu koda deklariram varijable prstena, izvora svjetlosti i red kaustike. Njih kasnije koristim u deklaraciji globalnih postavki scene, objekta izvora svjetlosti i prstena. U globalnim postavkama određujem red kaustike i broj fotona koje emitira izvor. Nakon toga slijedi deklaracija objekata stola, vrste izvora svjetlosti i prstena. Nakon što sam definirao sve parametre objekata i objekte scene pozivam ih kako bi ih POV Ray iscrtao i na kraju definiram kameru koja predstavlja položaj i način na koji promatramo virtualnu scenu. Ovdje neću objašnjavati svaku naredbu zasebno jer sam ih detaljno objasnio u poglavlju vezanim uz POV Ray, već ću se ovdje posvetiti parametrima i naredbama bitnim za kreiranje kaustika višeg reda. Kod kreiranja kaustika višeg reda važno je samo nekoliko naredbi i parametara koda. Prvi je max_trace _level koji predstavlja broj refleksija koje POV Ray slijedi. Njime utječemo na red kaustike gdje max_trace_level 2 odgovara prvoj jednostrukoj refleksiji tj. općenito max_trace_level n odgovara n+1 redu kaustike. „Kvalitetu“ kaustike određujemo brojem fotona kojeg definiramo sa photons {spacing 0.001}. Kao što sam ranije naveo kaustike višeg reda vidljive su tek kod objekata koji posjeduju visoku reflektivnost poput visoko poliranih metala ili zrcala. U POV Ray-u 82 reflektivnost objekata reguliramo parametrom reflection unutar naredbe finish koja predstavlja završnu obradu objekta. Parametar reflektivnosti je taj o kojem ovisi jakost kaustika u višem redu tj. o njemu ovisi do kojeg reda će kaustike biti vidljive. Na primjer bez obzira što je max_trace_level postavljen na 4 ne znači da ćemo imati kaustiku petog reda. Da li će ona biti vidljiva ili ne ovisi o reflektivnosti površine objekta tj. o parametru reflection. Da bi na u našoj sceni uopće vidjeli kaustike treabamo uključiti fotone u refleksiji za izvor svjetlosti naredbom photons { reflection on }, te prsten pretvoriti u metu fotona i uključiti njihovu refleksiju naredbom photons { target reflection on }. Slika 38. Skica virtualnog postava Gornjim POV Ray kodom iscrtao sam kaustike od prvog do petog reda u slikama 36 i 37. Reflektivnost prstena držao sam konstantnom na 80%. Visina prstena je konstantna kao i njegov unutarnji i vanjski radijus. Jedini parametar koji sam mijenjao je udaljenost izvora od stola, dok je udaljenost izvora od središta prstena također stalna i pritom ne mislim na prostornu udaljenost već njezinu projekciju na ravninu stola. Kao izvor koristio sam točkasti izvor svjetlosti. Iz slika je vidljivo da sam uspio „izolirati“ samo kaustike n-tog reda. To sam učinio podešavanjem parametara max_trace_level i udaljenost_izvora_od_stola. Recimo za kaustiku trećeg reda vrijednost max_trace_level je 4 i time POV Ray-u govorimo da iscrtava samo kaustike do trećeg reda, tj. da pratiti samo zrake koje se reflektiraju do maksimalno tri puta. Time sprečavamo da se u našoj slici iscrtavaju dijelovi ili cijele kaustike višeg reda. Kaustike nižeg reda „maknuo“ sam na način da sam smanjio udaljenost izvora od stola i time maknuo zrake koje upadaju u šupljinu prstena pod upadnim kutevima većim od αmax. Zrake koje bi upadale pod kutevima većim od αmax bile bi odgovorne za kaustike nižeg reda i ovakvim podešavanjem položaja izvora one se mogu eliminirati. Iz slike je vidljivo da postoji neki raspon upadnih kuteva od αmin do αmax. No zrake čiji je upadni kut veći od αmin i manji od αmax i reflektiraju se više od tri puta sam već maknuo željenom vrijednošću 83 max_trace_level. Za kaustiku prvog reda udaljenost izvora od stola je 123, za kaustiku drugog reda 21.5, trećeg reda 14.2, četvrtog reda 10 i petog reda 8.2. U stvarnom eksperimentu kaustike nižeg reda možemo eliminirati pomnim odabiranjem položaja izvora tj. ograničavanjem maksimalnog upadnog kuta α max koji predstavlja zrake koje sujeluju u kaustici reda kojeg želimo promatrati. No vidljivo je da će u šupljinu prstena upadati i zrake koje upadaju pod manjim kutevima sve do αmin i one predstavljaju kaustike višeg reda koje će biti vidljive u cijelosti ili samo djelomično. Njih ne možemo eliminirati na način koji nam pruža POV Ray u našem virtualnom eksperimentu. U stvarnosti nam za to treba prsten identičnih dimenzija i manjeg faktora reflektivnosti. No čak i tada kaustika maksimalnog reda ne bi bila toliko dobro vidljiva kao kaustika istog reda koju smo izolirali u POV Ray-u jer intenzitet kaustika ovisi o faktoru reflektivnosti. Iz toga možemo vidjeti prednost eksperimenta rađenih u POV Ray-u, a to je izolacija struktura od interesa. Slika 39. Kaustike prvog i drugog reda u metalnom cilindru 27 Odabiranjem povoljnog položaja izvora svjetlosti, pritom mislim i na povoljnu udaljenost izvora svjetlosti od cilindra, ovisno o reflektivnosti prstena možemo vidjeti kaustike svih redova koje se pojavljuju u šupljini prstena kao na slici 39. Slika 40. POV Ray simulacija kaustika višeg reda Iz slike 39 i 40 vidimo da kada se izvor svjetlosti nalazi uz prsten vidljive su cijele kaustike određenog reda. U primjerima sa slike 40 točkasti izvor svjetlosti postavio sam iznad unutrašnjeg ruba prstena na njegovoj lijevoj strani. Što je izvor više udaljen od prstena to je vidljiv manji dio kaustike određenog reda koju promatramo. 27 Grace Weir, The Coffee Cup Caustic, http://www.graceweir.com/project20/The_Coffee_Cup_Caustic 84 Kada točkasti izvor svjetlosti postavimo beskonačno daleko od prstena dobivamo izvor paralelnih zraka svjetlosti. Pogledajmo kako izgledaju kaustike dobivene paralelnim zrakama svjetlosti. U POV Ray kodu uključio sam izvor paralelnih zraka svjetlosti i njemu definirao iste udaljenosti od stola kao i u slučaju kaustika prvog, drugog i trećeg reda dobivenih sa točkastim izvorom (slika 37). Time sam dobio paralelni snop zraka koji upada na prsten pod istim kutevima pod kojima su upadale „izolirane“ zrake u slučaju točkastog izvora. Slika 41. Kaustike prvog, drugog i trećeg reda dobivene paralelnim zrakama svjetlosti Iz usporedbe slika kaustika dobivenih paralelnim zrakama i zrakama iz točkastog izvora vidljivo je da se veći dio kaustika određenog reda vidi za slučaj točkastog izvora. Razlog tome je što paralene zrake ne zatvaraju kuteve sa optičkom osi prstena već paralelno osi upadaju u šupljinu prstena, dok kod točkastog izvora imamo zrake koje zatvaraju određene kuteve sa osi prstena. Stoga paralelne zrake koje je emitira točkasti izvor koji se nalazi u beskonačnosti lijevo od prstena i koje upadaju pod nekim kutem α reflektiraju se samo sa desne strane unutrašnje plohe prstena, dok u slučaju kada se točkasti izvor svjetlosti nalazi na rubu unutrašnje plohe prstena u formaciji kaustika sudjeluju zrake koje zatvaraju kuteve −90° < 𝛽 < 90° sa optičkom osi prstena i one se reflektiraju duž cijele unutrašnje plohe prstena. Ta dva slučaja prikazana su na slikama 41 i 40. Mijenjanjem udaljenosti izvora paralelne svjetlosti od stola i od središta prstena u POV Ray kodu određujemo kut paralelnih upadnih zraka svjetlosti, dok kod točkastog izvora udaljenošću izvora od stola određujemo interval vrijednosti upadnih kuteva zraka koje će upasti u šupljinu prstena, a udaljenošću od prstena određujemo interval kuteva koje zrake svjetlosi mogu zatvarati sa optičkom osi prstena, a da upadaju u šupljinu prstena. Iz primjera je vidljiva ovisnost određenog reda kaustika o upadnom kutu, dok izgled kaustika višeg reda tj. da li će one biti u cijelosti vidljive kao na slici 40 ili samo djelomično ovisi o kutevima koje zrake zatvaraju sa optičkom osi cilindra. A taj kut ovisi o udaljenosti od središta prstena. Za prstenovu kaustiku u prvom redu refleksije možemo izvesti jednadžbu. Kaustika je krivulja koja nastaje u presjecištima reflektiranih zraka. Projicirajmo realnu u 2D i promotrimo gdje se sijeku zrake reflektirane od kružnog prstena: 85 Slika 42. Skica konstrukcije kaustike prvog reda refleksije Kaustika nastaje na presjecištu dvije bliske upadne zrake (trake 1 i 2 sa slike) kada se reflektiraju od prstena (zrake 1' i 2'), tj. u točki (x0, y0). Odredimo jednadžbu pravca 1'. Koeficijent smjera pravca 1' je: 𝜋 𝑎 = 𝑡𝑔 𝛾 = 𝑡𝑔 � − 2𝛽� = 𝑐𝑡𝑔(2𝛽) (1) 𝑏 = 𝑅 cos 𝛽 − 𝑐𝑡𝑔(2𝛽)𝑅 sin 𝛽 (2) 2 a njegov odsječak 𝑏 = 𝑦𝑝 − 𝑎𝑥𝑝 gdje je 𝑦𝑝 = 𝑅 cos 𝛽 i 𝑥𝑝 = 𝑅 sin 𝛽 jednak je: Pravac 2' će imati infinitezimalno različite koeficijente jer su upadni pravci 1 i 2 infinitezimalno bliski. Jednadžba presjecišta dva pravca dana kao 𝐴1 𝑥 + 𝐵1 𝑦 + 𝐶1 = 0 i 𝐴2 𝑥 + 𝐵2 𝑦 + 𝐶2 = 0 je: 𝐵1 𝐵 𝑥0 = 2 𝐴 � 1 𝐴2 � 𝐶1 𝐶 𝐴1 � � � 1 𝐶2 𝐶2 𝐴2 ; 𝑦0 = 𝐵1 𝐴 𝐵1 � � 1 � 𝐵2 𝐴2 𝐵2 Kako su naši pravci infinitezimalno bliski to je 𝐴2 = 𝐴1 + 𝑑𝐴1 , 𝐵2 = 𝐵1 + 𝑑𝐵1 i 𝐶2 = 𝐶1 + 𝑑𝐶1 . U reprezentaciji pravca kao 𝑦 = 𝑎𝑥 + 𝑏, 𝑎𝑥 − 𝑦 + 𝑏 = 0, vidimo da je 𝐵1 = −1, donosno 𝑑𝐵1 = 0, pa se lako pokaže da je: 𝑥0 = − 𝑑𝑏 𝑑𝑎 Uvrštavajući jednadžbe (1) i (2) i provodeći diferencijaciju dobivamo da je: 𝑥0 = 𝑅(𝑠𝑖𝑛 𝛽)3 = y0 možemo dobiti iz 𝑦0 = 𝐶 𝐴1 � 1 � 𝐶2 𝐴2 𝐵1 𝐴 � � 1 𝐴2 𝐵2 𝑅 [3 𝑠𝑖𝑛 𝛽 − 𝑠𝑖𝑛(3𝛽)] 4 ili iz 𝑦0 = 𝑎𝑥0 + 𝑏, što daje: 86 𝑦0 = 𝑅 [3 𝑐𝑜𝑠 𝛽 − 𝑐𝑜𝑠(3𝛽)] 4 Jednadžbu kaustike u prvom redu refleksije možemo izraziti i preko kuta φ. Tako dobivamo parametarske jednadžbe kaustike u obliku: 𝑥0 (φ) = 𝑦0 (φ) = 𝑅 [3 𝑐𝑜𝑠 φ + 𝑐𝑜𝑠(3φ)] 4 𝑅 [3 𝑠𝑖𝑛 φ + 𝑠𝑖𝑛(3φ)] 4 Kaustika u prvom redu refleksije dobivena paralelnim upadnim zrakama svjetlosti prikazana je na slici ispod. Slika 43. Rezultat konstrukcije kaustike prvog reda refleksije Na sličan način se mogu izvesti i jednadžbe za kaustike višeg reda. Ako slučaj poopćimo na kaustiku u n-tom redu refleksije dobivamo parametarske jednadžbe: 𝑥(𝜙): 𝑦(𝜙): 𝑟 [(2𝑛 + 1) cos((2𝑛 − 1)𝜙) + (2𝑛 − 1) cos((2𝑛 + 1)𝜙)] 4𝑛 𝑟 [(2𝑛 + 1) sin((2𝑛 − 1)𝜙) + (2𝑛 − 1) sin((2𝑛 + 1)𝜙)] 4𝑛 Natrag na sadržaj 87 4.3. Kaustika u refrakciji i POV Ray Jedan od primjera kaustike u refrakciji koji nam je svima dobro poznata su svijetle linije vidljive na dnu bazena ili u morskom plićaku. Valovita površina vode koja je obasjana sunčevom svjetlošću projicira svjetlosne uzorke na obližnje površine i te uzorke nazivamo kaustičkom mrežom. Kaustičke mreže možemo dobiti kako refrakcijom tako i refleksijom sunčeve svjetlosti na površini vode. U slučaju refrakcije sunčeva svjetlost pada na površinu vode i refraktira se. Ovisno o upadnom kutu svjetlosti kaustičke mreže možemo vidjeti na dnu bazena kao i na zidovima bazena. Kaustičku mrežu koju svjetlost proizvodi na dnu i stranama bazena vidljiva je i iznad površine vode, no ona je u tom slučaju izobličena dodatnom refrakcijom. Uzorci svjetlosti tj. kaustičke mreže mnogo se bolje vide kada koristimo masku za ronjenje i nalazimo se u vodi. Sličan mijenjajući uzorak dobivamo refleksijom sunčevih zraka i često ga možemo vidjeti u lukama na trupovima brodova i na donjim stranama i stupovima mostova nad kanalima i rijekama. Slika 44. Kaustička mreža na brodu i u bazenu. Geometrijska reprezentacija nastajanja kaustičkih mreža 28 28 David K. Lynch, William Charles Livingston, Color and Light in Nature, 2001, Cambridge University Press 88 POV Ray-em možemo simuiriati i ovakve vrlo kompleksne kaustičke uzorke. Prije nego krenem na geometrijsku konstrukciju kaustike u refrakciji, u ovom slučaju kaustičke mreže u bazenu, objasniti ću kako u POV Ray-u simuliramo realističnu vodu. Na izgled vode utječu razni fizički efekti, oblik njezine površine, kemijska svojstva kao i okruženje u kojem se ona nalazi. POV Ray pruža mnogo naredbi, funkcija i parametara kojima možemo kreirati vjerodostojnu sliku vodenih površina. Okruženje u kojem se voda nalazi je vrlo važna za scene u kojima simuliramo vodene površine jer one reflektiraju veliki dio svog okruženja ovisno o kutu promatranja same površine vode. Ja sam u kodu okruženje simulirao naredbom sky_sphere. Ona predstavlja sferu koja okružuje našu virtualnu scenu. Na nju sam zalijepio slikovnu datoteku visoke rezolucije koja je prethodno pripremljena za stavljanje na sferne objekte. Na slici se nalazi prizor neba. Time sam osigurao da u mojoj sceni nema refleksija standardno postavljene crne pozadine u POV Ray-u. Definicija materijala vode koji koristi je sljedeća: #declare voda = material { texture { pigment { color rgbt <1, 1, 1, 1> } finish { ambient 0.0 diffuse 0.0 conserve_energy reflection { 0.0, 1.0 fresnel on } specular 0.4 roughness 0.003 } } interior { ior indeks_refrakcije_vode fade_distance 4 fade_power 1002 } } Prvo što je vidljivo da sam definirao materijal. Ne samo teksturu površine već i njegovu unutrašnjost. U prijašnjim primjerima objektima sam definirao samo teksturu, što je korektno jer sam radio sa krutim neprozirnim objektima. Svjetlost koja je upadala na te objekte bila je u interakciji samo sa površinom objekata i njihova definicija unutrašnjosti nam nije bila važna, jer svjetlost neće prodrijeti u nju. Kada radimo sa prozirnim i djelomično prozirnim objektima moramo definirati parametre njezine unutrašnjosti kako bi POV Ray fizikalno ispravno pratio zrake kroz unutrašnjost objekata i kako bi fotoni koje emitira izvor svjetlosti imali ispravnu interakciju sa objektima, a to je od velike važnosti za realističnost slike koju će POV Ray iscrtati. 89 Najvažniji parametri za simulaciju vode su parametri pigmenta i završne obrade površine teksture površine. Pigment određuje boju površine, dok završna obrada opisuje interakciju površine sa svjetlošću. Ja sam koristio pigment { color rgbt <1, 1, 1, 1> } što predstavlja potpuno prozirni pigment. Iako voda sadrži čestice i samim time nije potpuno prozirna njezina površina ne utječe na smanjenje intenziteta svjetlosti. Stoga definiranje potpuno prozirnog pigmenta daje najrealnije rezultate. Na zrake svjetlosti koje uđu u unutrašnjost vode utječemo parametrima koje definiramo unutar naredbe interior. Parametri završne obrade površine ambient i diffuse postavio sam u nulu. Njihove vrijednosti ovdje nemaju utjecaja jer je parametar transmit jednak 1. Kako je površina vode je potpuno prozirna i vrijednost transmit mora biti jednaka 1, parametre ambient i diffuse možemo zanemariti. Kako u površini vode vidimo odsjaje tj. područja naglašenog osvjetljenja definirao sam spekularna područja naglašenog osvjetljenja. Osim spekularnog modela tu možemo koristiti i phong model koje sam detaljno opisao u POV Ray poglavlju. Još jedno važno svojstvo vodene površine je spekularna refleksija 29. Bez refleksije površina vode bi izgledala nerealno, stoga ovdje definiram parametar reflection. Za razliku od prijašnjih primjera ovdje koristim varijabilnu refleksiju. Imamo dvije vrijednosti koje redom predstavljaju minimalnu i maksimalnu refleksiju površine. To predstavlja realni slučaj jer reflektivnost vodene površine ovisi o kutu pod kojim ju promatramo. Refleksija ovisi o optičkim svojstvima materijala, točnije o indeksu refrakcije. POV Ray nudi model koji simulira fiziku refleksije i refrakcije svjetlosti na prozirnim objektima ovisno o kutu upadne svjetlosti i indeksu loma koji se naziva modelom fresnelove refleksije. Njega uključujem naredbom fresnel on. Matematičku pozadinu modela opisao sam u poglavlju o POV Ray-u. Nakon što sam odredio parametre pigmenta i završne obrade teksture površine vode slijedi određivanje parametara unutrašnjosti vode. Njih određujemo unutar bloka interior koji opisuje sve što se događa unutar objekta vode. Prvi parametar koji se određuje unutar bloka interior je indeks refrakcije - ior. On predstavlja omjer brzine svjetlosti u vakuumu i brzine svjetlosti u danom materijalu i o njemu ovisi kako će se refraktirati svjetlost na površini vode. Za indeks refrakcije koristio sam vrijednost 1.33 koju sam definirao na početku programa. Ovisnost indeksa refrakcije o valnoj duljini svjetlosti opisujemo parametrom dispersion. On predstavlja omjer vrijednosti indeksa refrakcije sa oba kraja vidljivog 29 Christoph Hormann, Realistic water with Povray, http://www.imagico.de/pov/water/index.html 90 spektra. Parametar disperzije svjetlosti u vodi možemo zanemariti, a njezina realna vrijednost je 1.01. Osim refrakcije o parametrima unutrašnjosti ovisi i atenuacija svjetlosti tj. opadanje intenziteta svjetlosti. Kako voda nikada nije savršeno čista čestice koje se nalaze u vodi dovode do raspršenja i apsorpcije svjetlosti. Zbog njih dolazi do atenuacije svjetlosti koja prolazi vodom. Atenuaciju svjetlosti simuliramo parametrima fade_distance koji predstavlja udaljenost na kojoj intenzitet svjetlosti opada za 50% i fade_power koji definira eksponent kojim intenzitet svjetlosti opada sa udaljenošću i koja se funkcija koristi za izračun atenuacije. Za fade_power uzeo sam vrijednost 1002 što znači da intenzitet opada sa kvadratom udaljenosti i da POV Ray koristi realnu eksponencijalnu funkciju za izračun atenuacije. Parametar fade_distance postavio sam na četiri što znači da intenzitet svjetlosti padne na pola iznosa svoje početne vrijednosti nakon četiri metra. Nakon što se definira materijal vode sljedeći korak je definiranje samog objekta vode. Objekt vode definirao sam isoplohom na sljedeći način: #declare tekucina = isosurface { function { y + f_noise3d(x, 0, z) } contained_by { box { <-5, -5, -10>, <7, 1, 10> } accuracy 0.001 material { voda } translate <0, 5, 0> Isoplohe predstavljaju oblike definirane matematičkim funkcijama. Isoplohe su vrlo pogodne za kreiranje realnih deformacija i pomaka površina i iz tog razloga sam ih koristio za kreiranje objekta vode. Slike površina vode koje sam definirao isoplohama prikazane su na slikama 53 i 54 na kraju ovog poglavlja. Unutar naredbe function definiramo matematičku funkciju koja opisuje površinu. Površinu vode definirao sam funkcijom f_noise3d(x,y,z) koja je pogodna za kreiranje nepravilnih površina. Parametar contained_by definiramo kontejner ili „objekt“ kojim ograničavamo područje gdje POV Ray generira površinu definiranom funkcijom. Kontejner može biti kvadar ili sfera koje definiramo standardnom sintaksom. Površina isoplohe se pojavljuje gdje je iznos funkcije jednak iznosu parametra threshold. Parametrom accuracy definiramo preciznost površine tj. glatkoću površine. Kako POV Ray aproksimira isoplohe one nikada neće biti savršeno glatke funkcije. Ako isoplohu podijelimo na dijelove parametar accuracy određuje najmanju duljinu intervala podjele gdje će POV Ray pronaći točku površine. Što je manja vrijednost 91 parametra površina će biti preciznije aproksimirana tj. glađa, no POV Ray-u će trebati više vremena da iscrta isoplohu. Kao što sam već spomenuo u uvodu ovog poglavlja površina vode obasjana svjetlošću stvara svjetlosne uzorke tj. kaustičku mrežu koju možemo vidjeti na dnu i zidovima bazena. Kaustička mreža predstavlja strukturu koja nastaje refrakcijom svjetlosti na površini vode. Fotone dodajemo u globalnim postavkama programa sa blokom koda photons{spacing 0.005} unutar kojeg definiramo broj fotona o kojem će ovisiti kvaliteta kaustike. I na kraju objekt vode pretvorimo u metu fotona kako bi ona stvarala kaustike. To činimo blokom object{voda photons{target reflection on refraction on}}. Rezultat gore navedenog materijala i objekta vode vidljiv je na slici 45. Cijeli kod kojim je definirana scena nalazi se u nastavku teksta. Slika 45. POV Ray simulacija kaustičke mreže u bazenu Kompleksan izgled kaustičke mreže rezultat je kompleksne geometrije površine vode. Pojednostavljenom geometrijom površine vode možemo konstruirati nastajanje kaustike u refrakciji. Krenimo prvo od 2D slučaja. Sve kaustike u refrakciji možemo geometrijski konstruirati pomoću Snell-ovog zakona 30. Površinu vode možemo predočiti sinusoidom, a za izvor uzeti sunce tj. izvor paralelnih zraka svjetlosti koje vertikalno padaju na površinu vode. U svakoj dodirnoj točki zrake sa površinom vode konstruiramo normalu površine. Zrake svjetlosti sa normalama površine vode zatvaraju upadne kutove α. Poznati su nam indeksi loma zraka 𝑛𝑧 = 1 i vode 𝑛𝑣 = 1.33, te upadni kut zraka u u dodirnim točkama α, te pomoću zakona refrakcije određujemo kute refrakcije β refraktiranih zraka. Kada smo odredili kut refrakcije odredili smo smjer refraktirane zrake i tada za svaku upadnu zraku možemo konstruirati njezinu refraktiranu zraku, te ih možemo nacrtati kao nas slici 46. Mojca Čepič, Why underwater caustic network appears on the vertical walls?, V: JURDANA-ŠEPIĆ, Rajka (ur.), Frontiers of physics education : selected contributions, Rijeka: Zlatni rez, 2008, p. 301-305 30 92 Slika 46. Određivanje smjera refraktirane zrake i konstrukcija kaustičkih krivulja u slučaju refrakcije svjetlosnih zraka na površini vode predočene sinusnom krivuljom Sa konstrukcije je vidljivo da se refraktirane zrake ne fokusiraju u točki već duž fokalnih krivulja koje predstavljaju kaustike. Pomoću POV Ray-a možemo simulirati i provjeriti navedeni slučaj: #include "bazen.inc" #include "functions.inc" //---deklaracija varijabli---// #declare Radiosity = on; #declare quality = off; //varijable izvora svjetlosti #declare jakost_izvora_svjetlosti = 2; //varijable vode #declare indeks_refrakcije_vode = 1.33; //---deklaracija materijala---// //voda #declare voda = material { texture { pigment { color rgbt <1, 1, 1, 1> } finish { ambient 0.0 diffuse 0.0 conserve_energy reflection { 0.0, 1.0 fresnel on } specular 0.4 roughness 0.003 } } interior { ior indeks_refrakcije_vode fade_distance 40 93 fade_power 1001 } } //---deklaracija objekata---// //okruženje #declare okruzenje = sky_sphere { pigment { image_map { jpeg "C:\Users\Bruno\Desktop\nebo.jpg" map_type 1 } } rotate <0,-90, 0> } //izvor svjetlosti #declare sunce = light_source { <50, 100, 0>, rgb <1, 1, 1> * jakost_izvora_svjetlosti parallel point_at <0, 0, 0> } //tekucina #declare tekucina = isosurface { function { y + f_sine_wave(z, 0.1, 1) } contained_by { box { <-5, -5, -10>, <7, 1, 10> } } threshold 0.0 accuracy 0.001 material { voda } translate <0, 5, 0> } //---vrste kamera---// //ortografska kamera #declare ortografska = camera { orthographic location <7,3.5,0> rotate <0, 0, 0> look_at <0, 3.5, 0> } //perspektiva #declare perspektiva = camera { perspective location <9,5,0> rotate <0, 0, 0> look_at <0, 2, 0> } //---glavni dio programa---// global_settings { max_trace_level 100 #if (Radiosity) radiosity { pretrace_start 0.08 #if (quality) count 110 error_bound 1.29 94 nearest_count 9 recursion_limit 3 pretrace_end 0.01 #else count 40 error_bound 1.29 nearest_count 7 recursion_limit 3 pretrace_end 0.01 #end low_error_factor .5 gray_threshold 0.0 minimum_reuse 0.015 brightness 0.95 adc_bailout 0.01/2 normal on media on } #end photons { spacing 0.003 autostop 0 jitter .4 } noise_generator 2 } object { sunce photons { reflection on refraction on } } object { bazen photons { target reflection off refraction off } } object { voda photons { target reflection on refraction on } } sky_sphere { okruzenje } camera { ortografska } Objekt bazena i njegovu teksturu definirao sam u zasebnoj datoteci bazen.inc kao ne bismo stvarao nepotrebne linije koda i odvlačio pažnju sa objekta vode koji je bitan u kreiranju kaustičke mreže. Površinu vode predočio sam isoplohom koja je definirana funkcijom {y + f_sine_wave(z,0.1,1)}. Funkcija f_sine_wave(z,0.1,1) je interna funkcija POV Ray-a čija je matematička reprezentacija zapravo 𝑠𝑖𝑛(𝑥 ∙ 𝑧 ∙ 𝜋) ∙ 𝑦. Vrijednosti koje dodjeljujemo funkciji f_sine_wave redom predstavljaju: vrijednost, amplitudu i frekvenciju. Stoga sam ja površinu vode zapravo prikazao funkcijom {y + sin(1*z*pi)*0.1}. Rezultat gore navedenog koda vidljiv je na sljedećim slikama: Slika 47. POV Ray simulacija kaustike u bazenu dobivene sinusoidalnom površinom vode 95 Lijeva slika predstavlja rezultat gore navedenog koda dobivena ortografskom kamerom koja je pogodna za 2D reprezentacije. Vidimo da smo dobili rezultat kao i na slici 46 gdje smo konstruirali reflektirane zrake i kaustike. Slika predstavlja 2D prikaz kaustike vidljive na stražnjoj strani bazena. Iz slike se može pretpostaviti izgled kaustika na dnu bazena. Ako taj slučaj proširimo na 3D imamo ravne valove na vodi i kad u POV Ray kodu promijenimo kameru u perspektivu dobivamo sliku na desnoj strani. Kaustičke krivulje na dnu bazena dobivene sinusoidalnom površinom vode su ravne linije. Slika 48. 3D reprezentacija kaustičkih površina u bazenu dobivenih sinusoidalnom površinom vode12 i POV Ray simulacija kaustike u bazenu Kaustičke krivulje koje vidimo na zidu i dnu bazena su presjek kaustičkih površina i ravnina promatranja, tj. ravnine zida i ravnine dna bazena. Također vidimo da je intenzitet svjetlosti ispod kaustičkih površina mnogo veći nego izvan njih. Razlog tome je što područjem ispod kaustičke površine prolazi daleko više zraka svjetlosti neko područjem izvan njih. Intenzitet svjetlosti u tim područjima je pojačan i njih na dnu bazena vidimo kao svijetle pruge. Rubovi tih pruga predstavljaju kaustike duž kojih se fokusiraju zrake i njihov intenzitet je najveći. Kaustičke površine se mogu i sjeći što ovisi o dubini bazena i geometriji površine vode. Ako npr. promijenimo frekvenciju sinusnih valova na vodi, a amplitudu valova i dubinu bazena ostavimo istom dobivamo sljedeći slučaj: Slika 49. POV Ray simulacije kaustike u bazenu dobivene sinusoidalnom površinom vode frekvencije 2Hz 96 Iz lijevog primjera slike 49 vidljivo je da se kaustičke površine sijeku i time kaustički uzorak postaje sve kompleksniji. Ravni valovi na vodi predstavljaju specijalni slučaj koji dobivamo u izoliranim uvjetima. Površina vode češće je funkcija dvije varijable tj. njezin profil se mijenja duž širine i dužine bazena. Kada površinu vode predočimo funkcijama {y + f_sine_wave(z,0.1,1) + f_sine_wave(x,0.1,1)} i {y + f_sine_wave(z,0.3,1) * f_sine_wave(x,0.3,1)} dobivamo sljedeće rezultate: Slika 50. POV Ray simulacije kaustika u bazenu dobivenih površinama vode predočenih funkcijama {y + f_sine_wave(z,0.1,1) + f_sine_wave(x,0.1,1)} i {y + f_sine_wave(z,0.3,1) * f_sine_wave(x,0.3,1)} Vidimo da u slučajevima kad površinu vode definiramo danim funkcijama na dnu bazena dobivamo kaustike koje tvore strukturu nalik mreži. Geometrija strukture sama po sebi nameće naziv kaustička mreža. U stvarnosti sinusne valove na vodi također dobivamo samo u izoliranim uvjetima. Realna površina vode ima nasumičnu strukturu stoga je možemo predočiti nekom nasumičnom funkcijom. Pogledajmo prvo primjer gdje je površina vode predočena nasumičnom funkcijom jedne varijable. Za funkciju sam uzeo {y + f_noise3d(0,0,z)} i ona predstavlja funkciju jedne varijable tj. širine bazena. Funkcija f_noise3d(x,y,z) je interna funkcija POV Ray-a koja ima nasumičnu strukturu nalik šumu. Ona koristi generator šuma noise generator kojeg definiramo u globalnim postavkama programa. Funkcija je pogodna za kreiranje objekata poput reljefa, u mome slučaju nepravilne površine vode, a prednost joj je što možemo dobiti objekte visoke rezolucije bez korištenja velike količine memorije. Ona se često koristi za kreiranje realnih nepravilnosti površina objekata jer ona u stvarnosti zapravo i imaju nasumičnu strukturu. Rezultat površine vode čiji je profil konstantan je po osi duljine, a nasumično se mijenja po osi širine je sljedeći: 97 Slika 51. POV Ray simulacija kaustike u bazenu dobivene nasumičnom površinom vode predočene funkcijom {y + f_noise3d(0,0,z)} I finalno kada površinu vode predočimo nasumičnom funkcijom dviju varijabli, u mom slučaju su to širina i duljina bazena, {y + f_noise3d(x,0,z)*0.5} dobivamo realnu simulaciju vodene površine i kaustičke mreže koju ona stvara: Slika 52. POV Ray simulacija kaustike u bazenu dobivene nasumičnom površinom vode predočene funkcijom {y + f_noise3d(x,0,z)*0.5} Vidimo da je kaustički uzorak postao vrlo kompleksan. Ovakve kompleksne uzorke kaustičkih mreža susrečemo u stvarnosti u bazenima i morkim plićacima. Štoviše ti uzorci su često još složeniji. Iz gore simuliranih primjera kaustika u refrakciji vidimo kako kompleksnost njihog izgleda proizlati iz kompleksnosti geometrije površine na kojoj se svjetlost refraktira. Kako je geometrija površine vode koju sam koristio u primjerima nedovoljno vidljiva u nastavku prikazujem izgled površina dobivenih funkcijama koje sam koristio u primjerima. Slika 53. Izgled površina vode predočenih funkcijama {y + f_sine_wave(z,0.1,1) + f_sine_wave(x,0.1,1)} i {y + f_sine_wave(z,0.7,1) * f_sine_wave(x,0.7,1)} 98 Slika 54. Izgled površina vode predočenih funkcijama {y + f_noise3d(0,0,z)} i {y + f_noise3d(x,0,z)*0.5} Natrag na sadržaj 99 5. POV Ray u nastavi fizike U okviru ovog poglavlja razmatram mogućnost uporabe POV Ray-a u nastavi fizike kao interaktivnog nastavnog pomagala. Područje fizike koje se odnosi na optiku, za razliku od nekih drugih područja prepuno je interesantnih fizikalnih fenomena koji se mogu vidjeti golim okom. No ta prednost često ne dolazi do izražaja u nastavi fizike zbog skromnog instrumentarija kojeg škole posjeduju, te se nerijetko takvi intrigantni fenomeni učenicima mogu uživo demonstrirati samo ugrubo. U takvim slučajevima vrlo elegantno rješenje predstavlja korištenje nekog od programskih paketa kojim možemo simulirati virtualni instrumentarij. Ja ne predlažem kompletnu zamjenu realnog eksperimenta virtualnim, već rješenje problema eksperimenata u kojima se koriste skupi instrumenti često teško nabavljivi školskim ustanovama. Upotrebom virtualnih laboratorija također možemo riješiti problem održavanja instrumenata kao i problem kompliciranog rukovanja određenim instrumentima. Prednost virtualnih laboratorija dolazi do izražaja i kod složenijih eksperimenata koje možemo napraviti školskim instrumentarijem. U realnim eksperimentima mogu se pojaviti problemi na čije otklanjanje možemo potrošiti većinu nastavnog sata kako bi učenicima demonstrirali ispravan rezultat. Također detalji i pojave koje promatramo eksperimentom često traju vrlo kratko i gotovo su nezamjetljive tromom oku promatrača. Instrumenti koje koristimo mogu biti nedovoljno precizni ili neispravani da željenu pojavu uopće ne možemo reproducirati. U tim slučajevima virtualni laboratoriji i simulacije predstavljaju nezamjenljivo nastavno pomagalo. Realni pokusi nerijetko uključuju mnoštvo parametara i fizikalnih uvjeta koji moraju biti zadovoljeni da bi uočili željenu pojavu, dok fizikalni zakoni koji se proučavaju eksperimentom zapravo predstavljaju aproksimaciju slučaja u stvarnosti. Većinu tih parametara koji se pojavljuju u eksperimentu stoga nastojimo poništiti kako bi izolirali samo djelić stvarnosti kojeg želimo opisati. Stoga najveća prednost virtualne simulacije je mogućnost pojednostavljenog modela stvarnosti usmjerenog direktno na pojavu koju želimo promatrati i opisati. Time se koncentriramo samo na ono bitno i ne moramo se mučiti sa otklanjanjem utjecaja okoline, a to u realnom eksperimentu za učenike često predstavlja vremenski, mentalno i fizički iscrpljujući proces. U nastavku teksta predlažem nastavnu jedinicu za nastavni sat fizike iz područja optike gdje bi se koristili virtualnim laboratorijem – POV Ray programom. Pomoću njega bi simulirali eksperimente čiji rezultat bi bio generiranje kaustika – prirodnog fokusiranja svjetlosti. Za nastavnu jedinicu bi bila potrebna dva školska sata. Iako fenomen prirodnog fokusiranja svjetlosti nije dio školskog programa smatram da bi bilo korisno ga povezati sa paraaksijalnim primjerom fokusiranja svjetlosti koji je uključen u školski program. Svjetlosne kaustike su fenomeni sa kojima se često susrećemo u svakodnevnom životu, stoga postoji velika vjerojatnost da ih je većina učenika vidjela samo nije znala da je to vrsta fokusiranja svjetlosti. Stoga predlažem sljedeću pripremu nastavnog sata u kojem bi ukratko obradili fenomen kaustika 100 unutar blok sata nakon što su učenici obradili svo gradivo iz optike definirano nastavnim programom. Natrag na sadržaj 5.1. Konstruktivistički pristup PLAN IZVOĐENJA SATA RAZRED: 4. razred prirodoslovno-matematičke gimnazije NASTAVNI PREDMET: Fizika NASTAVNO PODRUČJE: Optika NASTAVNA JEDINICA: Prirodno fokusiranje svjetlosti i virtualni laboratorij TIP NASTAVNOG SATA: Računalna simulacija u nastavi fizike - optike TRAJANJE NASTAVNE JEDINICE: dva školska sata Odgojno-obrazovni ciljevi: A. Obrazovni zadaci: • • • • Upoznati učenike sa prirodnim fokusiranjem svjetlosti - kaustikama Upoznati učenike sa virtualnim laboratorijem poput POV Ray-a Upoznati učenike sa prednostima i manama virtualnih laboratorija Upoznati učenike sa osnovama POV Ray programa B. Funkcionalni zadaci: • • • • Razvijanje motoričke i intelektualne sposobnosti učenika Razvijanje sposobnosti usvajanja znanja Razvijanje logičkog mišljenja i zaključivanja Poticanje učenika na aktivno sudjelovanje na satu C. Odgojni zadaci: • • • Razvijanje radnih navika i kulture rada Poticanje i razvijanje kulture komunicirana i suradnje Motiviranje učenika za daljne učenje i rad te povezivanje računala i fizike Nastavni zadaci: A. Kognitivni (učenici će znati): • • • • Učenici će razumijeti zašto i kada se uopće koriste virtualni laboratoriji Učenici će znati osnovne stvari o POV Ray-u kao virtualnom laboratoriju Učenici će biti sposobni pokrenuti već gotovu simulaciju Učenici će biti sposobni kreirati prikaz virtualnog eksperimenta B. Psihomotorni(učenici će steći vještine): 101 • • Učenici će steći vještine prepoznavanja problema u kojima primjenjujemo prednosti virtualnih laboratorija Učenici će steći vještine analize programa i odabira optimalnog rješenja Nastavne metode: • • • • Metoda usmenog izlaganja pri tumačenju i obradi gradiva Metoda demonstracije pri prikazivanju rješenja zadataka na računalu (projektor/ ploča) Metoda samostalnih vježbi gdje učenici samostalno izvode postavljeni zadatak na računalu Razgovor kod analize zadataka Potrebna nastavna sredstva i pomagala: • • • Ploča Projektor Računalo Tijek nastavnog procesa: Prvi sat: Uvodni dio sata: Sat započinjem ponavljanjem fizikalnih pojmova iz optike bitnih za ovu nastavnu jedinicu. Zakon refleksije. Konstruiranje fokusa cilindričnog ogledala pomoću svjetlosnih zraka primjenom zakona refleksije. Zakon loma. Konstruiranje nekoliko reflektiranih zraka svjetlosti pomoću zakona loma na sinusnoj krivulji (lijevi primjer slike 46). Glavni dio sata: Nakon ponavljanja zakona refleksije i refrakcije i konstuiranja reflektiranih i refraktiranih zraka prelazim na općeniti slučaj fokusiranja u prirodi. Učenicima pojašnjavam kako je fokusiranje svjetlosti u točki iznimna pojava u prirodi. Da bi se svjetlost fokusirala u točki potrebni su nam „umjetno“ stvoreni objekti poput leća. One su stvorene sa namjerom da svjetlost fokusiraju u točki (fokusu) i proizvođači leća ulažu puno vremena i truda kako bi stvorili takve objekte. Objašnjavam da način na koji smo konstruirali fokus cilindričnog ogledala u uvodnom dijelu sata predstavlja aproksimaciju kada se zrake svjetlosti koje upadaju na zrcalo nalaze blizu optičke osi i kada one sa optičkom osi zatvaraju male kuteve. Kada izađemo iz tih granica svjetlost se više ne fokusira u točki već duž krivulja. Učenicima pokazujem konstrukciju fokusiranja cilindričnog zrcala za slučaj paralelnih zraka koje upadaju duž cijele širine cilindričnog zrcala (slika 22 i 28). Govorim kako se takve kruvulje duž kojih se fokusiraju zrake svjetlosti nazivaju kaustike. Na konstrukciji naglašavam da se zrake koje se nalaze blizu optičke osi zrcala sjeku u vrhu kaustike i kako taj vrh 102 predstavlja fokus zrcala kada se nalazimo u paraaksijalnom modelu. Učenicima pokazujem slike kaustika u refrakciji koje možemo zamjetiti u stvarnosti (slika 29 i lijevi primjer slike 36). Nakon primjera kaustike u refleksiji prelazim na primjer fokusiranja zraka svjetlosti u refrakciji. Učenicima pokazujem konstrukciju refraktiranih zraka na površini vode predočene sinusoidom (desni primjer slike 46). Pokazujem im oblik kaustika dobiven refraktiranim zrakama na površini vode. Pokazujem im slike kaustike u bazenu (slika) i u morskom plićaku. Objašnjavam im kako su to sve primjeri fokusiranja svjetlosti u refrakciji koji si slični konstrukciji koju sam im demonstrirao samo puno složeniji jer u slikama nemamo ravne valove na vodi kao u primjeru konstrukcije. Završni dio sata: U završnom dijelu prvog sata ponavljamo što gradivo koje smo obradili u glavnom dijelu sata i odgovaram na eventualna pitanja učenika. Drugi sat: Uvodni dio sata: U uvodu drugog sata učenicima predstavljam POV Ray kao virtualni laboratorij. Diskutiramo čemu nam virtualni laboratoriji služe i koje bi bile njegove prednosti ili mane. Glavni dio sata: U glavnom dijelu drugog sata demonstriram dva primjera korištenja virtualnog laboratorija (POV Ray program kaustike u šalici kave i kaustike u bazenu). Na primjerima virtualnih eksperimenata učenicima pokazujem kako se koristi POV Rayem i pokazujem prednosti virtualnog eksperimenta naspram istog kojeg bi radili u stvarnosti. Navedeni primjeri u POV Ray-u se mogu lako i brzo mogu mijenjati. Prednost je ušteda na vremenu kod promjene parametara šalice ili tekućine, promjene profila vodene površine i zamjene izvora svjetlosti. Također realni pokusi često ne uspijevaju ili ponekad mogu duže potrajati. Glavna prednost virtualnog laboratorija je to što se relativno jednostavno mogu simulirati pokusi koji nisu jednostavno izvedivi u realnim laboratorijima. Nakon prednosti govorim o manama virtualnih laboratorija, kao što su, pogrešno isprogramirani fizikalni zakoni, krivo definirani parametri i problemi koji se mogu javiti u vizualizaciji virtualnog eksperimenta. Naglašavam kako simulacija nikada ne može u potpunosti zamijeniti stvarni eksperiment, Svaki virtualni laboratorij, pa tako i POV Ray ima svoje granice i mogućnosti. Neke stvari i POVRay radi samo u aproksimaciji, pa s toga simulacija ne može davati rezultate s točnošću kakve dobivamo stvarnim eksperimentom. 103 Kada završim sa demonstracijom upotrebe POV Ray-a i njegovih prednosti i mana učenici samostalno kreću na simulacije eksperimenata koje sam unaprijed pripremio i stavio na računala kojima se učenici služe. Učenicima su dana dva primjera virtualnog eksperimenta: jedan je fokusiranje svjetlosti u refrakciji, a drugi fokusiranje svjetlosti u refrakciji. Učenici samo trebaju otvoriti datoteke u POV Ray programu te pokrenuti. Slike virtualnog eksperimenta spremaju se na radnu površinu računala, te ih je samo potrebno otvoriti u nekom od programa za prikaz slikovnih datoteka. Završni dio sata: Usporedba slika virtualnih eksperimenata sa slikama koje sam ja dobio i projicirao na ploču. Usporedba rezultata eksperimenata sa primjerima koje smo obradili na prvom satu. Rasprava o dobivenim slikama i eventualnim pogreškama koje su se javile pri izvođenju virtualnog pokusa kod određenih učenika. Natrag na sadržaj 104 6. Zaključak Računala danas u znanosti predstavljaju nezaobilazno sredstvo pomoću kojeg se spoznaju nova znanja o prirodi. Razvoj računala i računalne tehnologije otvorio je nove mogućnosti i doveo do razvoja mnogih interdisciplinarnih znanosti. Jedna od njih je i računalna fizika koja je postala sastavnim dijelom znanstvenog istraživanja. Ona predstavlja novi način dolaska do spoznaja zamjenjujući složenu fizikalnu aparaturu računalom koje uz programske pakete poput POV Ray-a postaje virtualni laboratorij. Kako su računala danas prisutna skoro u svakom kućanstvu izvođenje složenijih eksperimenata postaje dostupno svakome tko posjeduje potrebno znanje o pojavi koju želi promatrati. Računalna simulacija kao glavni proces računalne fizike predstavlja postupak upotrebe informacijske tehnologije koja oponaša realne sustave, objekte i procese u apstraktnom tj. virtualnom prostoru. Računalnom simulacijom u ovom diplomskom radu simulirao sam pojave prirodnog fokusiranja svjetlosti – kaustike. Za simulaciju kaustika koristio sam POV Ray, slobodno dostupan programski paket za izradu 3D slikovnih datoteka i animacija. POV Ray je vrlo moćan alat kojim se mogu na vjerodostojan način prikazati i simulirati razne fizikalne pojave poput prirodnog fokusiranja svjetlosti. POV Ray je čvrsto matematički ukorijenjen, pa uz poznavanje fizikalnih zakona i zakonitosti postaje odličan program za promatranje i prikaz raznih fizikalnih fenomena. Računalne simulacije kaustika simuliranih unutar ovog diplomskog rada bazirao sam na teorijskim i eksperimentalnim rezultatima. Svaka simulacija temelji se na eksperimentalnom rezultatu tj. fotografiji realnog eksperimenta, te na teorijskom rezultatu tj. opisu matematičkih i fizikalnih modela na kojima počiva pojava kaustika. Time je osigurana vjerodostojnost foto-realističnih prikaza kaustika dobivenih metodom praćenja svjetlosnih zraka u virtualnom laboratoriju – POV Ray-u. Danas se češće skupi eksperimenti zamjenjuju računalnom simulacijom tj. virtualnim laboratorijima zbog njihove ekonomičnosti. Virtualni laboratorij predstavlja sigurno okruženje u kojem se dolazi do bitnih spoznaja. Korisnik na bezazlen naćin dolazi do rezultata eksperimenata kao posljedice odluka donesenih prije ili tokom izvođenja virtualnog eksperimenta. POV Ray kao virtualni laboratorij predstavlja alat uz koji se na interaktivan način stječu nova znanja i iskustva. Pomoću njega se kroz ekran računala može jednostavno zaviriti u svijet fizike i promatrati pojave i zakonitosti koje ga karakteriziraju. Natrag na sadržaj 105 7. Literatura 1. POV Ray for Windows Help 2. Antonio Šiber, Ekstremno brzi uvod u Povray s primjerima, http://asiber.ifs.hr/papers/povray_tutorial.pdf, stranica posjećena 24.06.2011. 3. Friedrich A. Lohmüller, Descriptions and Examples for the POV-Ray Raytracer, http://www.f-lohmueller.de/pov_tut/csg/povcsg1e.htm, stranica posjećena 24.06.2011. 4. Wikipedia, Phong reflection model, http://en.wikipedia.org/wiki/Phong_reflection_model, stranica posjećena 04.09.2011. 5. Rick Trebino, Fresnel's Equations for Reflection and Refraction, http://www.teknik.uu.se/ftf/education/ftf2/Optics_FresnelsEqns.pdf, stranica posjećena 04.09.2011. 6. Wikipedia, Rendering, http://en.wikipedia.org/wiki/Rendering_%28computer_graphics%29, stranica posjećena 25.06.2011. 7. A. J. van der Ploeg, Interactive Ray Tracing, http://www.few.vu.nl/~kielmann/theses/avdploeg.pdf, stranica posjećena 25.06.2011. 8. Wikipedia, Ray tracing, http://en.wikipedia.org/wiki/Ray_tracing_%28graphics%29, stranica posjećena 25.06.2011. 9. Andries van Dam, Realism in Computer Graphics, http://www.cs.brown.edu/courses/csci1230/lectures/realism.pdf, stranica posjećena 25.06.2011. 10. Zack Waters, Photon Mapping, http://web.cs.wpi.edu/~emmanuel/courses/cs563/write_ups/zackw/photon_ma pping/PhotonMapping.html, stranica posjećena 25.06.2011. 11. Henrik Wann Jensen, A practical guide to global illumination using ray tracing and photon mapping, 2004, ACM SIGGRAPH 2004 Course Notes (SIGGRAPH '04), Article 20 12. M.V. Berry, C. Upstill, IV Catastrophe Optics: Morphologies of Caustics and Their Diffraction Patterns, In: E. Wolf, Editor(s), Progress in Optics, Elsevier, 1980, Volume 18, Pages 257-346 13. Assunta Bonanno, Michele Camarca, Peppino Sapia and Annarosa Serpe, Archimedes and Caustics: A Twofold Multimedia and Experimental Approach, The Genius of Archimedes - 23 Centuries of Influence on Mathematics, Science and Engineering, History of Mechanism and Machine Science, 2010, Volume 11, Part 1, 45-56, Springer 14. Michael Rogers, Catacaustics Generated by a Point Source, http://demonstrations.wolfram.com/CatacausticsGeneratedByAPointSource, stranica posjećena 30.07.2011. 106 15. Georg Glaeser, Reflections on Spheres and Cylinders of Revolution, Journal for Geometry and Graphics, 1999, Volume 3, No. 2, 121-139 16. Yu. A. Kravtsov and Yu. I. Orlov, Caustics, Catastrophes and Wave Fields, 1999, Springer 17. O. N.Stavroudis, The Mathematics of Geometrical and Physical Optics, 2006, Wiley 18. Robert C. Yates, Curves and Their Properties, 1947, The National Council of Teachers of Mathematics 19. Giovanni Mingari Scarpello and Aldo Scimone, The Work of Tschirnhaus, La Hire and Leibniz on Catacaustics and the Birth of the Envelopes of Lines in the 17th Century, 2005, Springer Berlin/ Heidelberg 20. Wikipedia, Geometrical Optics, http://en.wikipedia.org/wiki/Geometric_optics, stranica posjećena 29.07.2011. 21. Xah Lee, Caustics, http://xahlee.org/SpecialPlaneCurves_dir/Caustics_dir/caustics.html, stranica posjećena 30.07.2011. 22. Michael Rogers, Catacaustics for Some Graphs, http://demonstrations.wolfram.com/CatacausticsForSomeGraphs, stranica posjećena 30.07.2011. 23. Wolfram MathWorld, Catacaustic, http://mathworld.wolfram.com/Catacaustic.html, stranica posjećena 01.08.2011. 24. J. F. Nye, Natural focusing and fine structure of light, 1999, Institute of Physics Publishing 25. Christian Ucke and Christoph Engelhardt, Playing with caustic phenomena, published in the proceedings of the GIREP/ICPE conference ‘New ways in physics teaching’, Ljubljana 21.-27.8.1996, page 440-444 26. Christian Ucke und Christian Engelhardt , Kaustik in der Kaffeetasse, 1998, Physik in unserer Zeit 29, Seite 120-122 27. Grace Weir, The Coffee Cup Caustic, http://www.graceweir.com/project20/The_Coffee_Cup_Caustic, stranica posjećena 10.08.2011. 28. David K. Lynch, William Charles Livingston, Color and Light in Nature, 2001, Cambridge University Press 29. Christoph Hormann, Realistic water with Povray, http://www.imagico.de/pov/water/index.html, stranica posjećena 05.09.2011. 30. Mojca Čepič, Why underwater caustic network appears on the vertical walls?, V: JURDANA-ŠEPIĆ, Rajka (ur.), Frontiers of physics education : selected contributions, Rijeka: Zlatni rez, 2008, p. 301-305 Natrag na sadržaj 107
© Copyright 2024 Paperzz