Kiirtejälitus

Allikas: Vikipeedia

Kiirtejälitus[1] (inglise keeles ray tracing) on kiirte väljasaatmisel põhinev algoritm peidetud pindade määramiseks või kolmemõõtmeliste objektide nähtavuse väljaselgitamiseks ühe punkti suhtes ruumis. Kiirtejälituse all peetakse silmas ka mitmeid selle protsessi laiendatud versioone, kus ka peale pinnaga lõikumist kiirte edasist teed arvutatakse.

Kiirtejälituse läbi saadud pilt.

Suurt kasutust leiab kiirtejälituse protsess 3D-arvutigraafikas. Kiirtejälitamise algoritm võimaldab 3D-stseenide kujutamist. Stseenis olevaid valgusolusid aitab kalkuleerida kiirte tee simuleerimine kiirtejälituse meetodi läbi.

Kiirtejälituse juured ja tähendus[muuda | redigeeri lähteteksti]

Enne kiirtejälituse arengut koosnes 3D-arvutigraafika põhiliselt "nippidest", mille kaudu üritati matkida objektide valgustatust. Kiirtejälitus oli esimene selle aja algoritm, mis ka füüsikalist põhja omas.

Esimese kiirtejälituse meetodit rakendav pilt arvutati välja Marylandi Ülikoolis aastal 1960. Väljaarvutatud pilt kuvati ostsilloskoobi ekraanil.[2] Kiirtejälituse algoritmi peaarendajateks loetakse tihti Arthur Apple, Robert Goldstein ja Robert Nagel, kes selle algoritmi 1960. aastate lõpus publitseerisid. [3][4][5] Teised kiirtejälitusega tegelevad uurijad olid Herb Steinberg, Marty Cohen ja Eugen Troubetskoy. [6] Kiirtejälitus põhineb geomeetrilisel optikal, kus valgust kui kiirekimpe mõistetakse. Kiirtejälituse käigus kasutatavad meetodid olid juba palju varem rakendust leidnud, näiteks läätsede tootmise juures. Tänapäeval rakendavad paljud renderdajad (arvutiprogrammid piltide loomiseks 3D-tseenide põhjal) kiirtejälitust, vajadusel kombineerides seda teiste meetoditega.

Lihtsamad kiirejälituse vormid võtavad arvesse vaid otsest valgustatust, st. otse valgusallikalt langevat valgust. Peale tema kasutuselevõttu arvutigraafikas on kiirtejälitust edasi arendatud. Kõrgeltarenenud kiirtejälituse vormid arvestavad arvutustesse ka valguse, mis teistelt objektidelt peegeldub. Sellisel juhul räägime mõistest Global Illumination (otsetõlkes "globaalne valgustatus").

Kiirtejälituse ühte lihtsamat vormi kirjeldatakse ka raycastingu mõiste all. Osaliselt võidakse neid kahte mõistet ka sünonüümidena kasutada.

Tööpõhimõte[muuda | redigeeri lähteteksti]

Rastergraafikal põhineva pildi loomine 3D-stseeni põhjal nimetatakse renderdamiseks, visualiseerimiseks või pildisünteesiks. Sellele eelneb stseeni loomine kasutades modelleerimisprogramme.

Stseenikirjeldusse sisestatakse järgnevad andmed:

  • Primitiivide, näiteks kerade või hulknurkade positsioon stseenis;
  • Lokaalne valgustusmudel ja selle parameetrid, mis määravad stseenis olevate objektide värvi ja materjali;
  • Stseeni valgusallikad.
Kiirejälituse põhimõte, kujutatud graafiliselt.

Lisaks sellele määratakse kiirejälituse puhul ka silma ja pilditasandi positsioon, mille abil stseenist loodava pildi perspektiiv määratakse. Silm on kui virtuaalne kaamera, mis mingis stseeni punktis paikneb. Pilditasand on virtuaalne nelinurk, mis paikneb silmast teatud kaugusel. Rasterpildile omaselt on pilditasand jaotatud punktideks, mis lõpppildi individuaalseid piksleid kujutavad.

Peidetud alade arvutamine[muuda | redigeeri lähteteksti]

Kiirtejälitus on esmalt protsess, et määrata objektide nähtavus vaatleja suhtes. Selline põhimõte on küllalt lihtne.

Kiirtejälitus töötab andmestruktuuriga, mis kannab nime kiir. Iga piksli jaoks arvutatakse välja kiire suund silma ja talle vastava pilditasandi punkti abil. Seejärel arvutatakse iga kiire jaoks välja lõikepunkt vaateväljas paiknevate primitiivide suhtes. Selle protsessi käigus arvutatakse välja ka objekti kaugus silmast. "Võitjaks" kuulutatakse lõikumispunkt, mis silmale kõige lähemal oli ja ülejäänud lõikumispunktid klassifitseeritakse lähima objekti poolt varjatuks.

Meetod, mille käigus saadetakse silmpunktist välja kiiri, meenutab läätseta kaamerat (valguskindel kast, milles on väike auk). Kiirejälituse käigus on aga augu ja filmi positsioon vahetuses. Sarnaselt kaamerale määrab ka kiirejälituse puhul valgusava ja filmi kaugus üksteisest fookuskauguse, mille põhjal stseeni töödeldakse.

Kuna kiired väljuvad silmast ja mitte valgusallikast, nagu looduses, räägitakse vahel ka backwards ray tracing'ust. Kiirtejälitus tegeleb küsimusega, et kust valgus tuleb. Mõningad publikatsioonid kutsuvad seda meetodit aga Eye Ray tracing või Forward Ray Tracing nime all.

Lõikumisputki väljaselgitamine[muuda | redigeeri lähteteksti]

Eelpoolmainitud meetod keha ja kiire lõikumispunktide määramiseks on kiirejälituse meetodi tuum. Lõikumispunkti väljaselgitamiseks kasutatavaid teste annab rakendada hulgaliselt erinevate geomeetriliste kujundite peal. Lisaks kolmnurkadele ja keradele on võimalik neid teste rakendada ka silindritel, kuupidel, punktpilvedel või isegi fraktalitel.

Kerade puhul on lõikumispunkti väljaarvutamine küllalt lihtne ja kiire protsess, mis selgitab konkreetse kujundi populaarsust kiirejälitusel põhinevate renderdajate testpiltidel. Siiski lubavad paljud renderdajad tänapäeval primitiividena (baas ehitusjupid) vaid kolmnurkasid, millest vajalikke objekte kokku ehitatakse.

Lühikest aega on olnud võimalik ka keerukamaid geomeetrilisi põhimõtteid, näiteks NURBS, kasutus. [7] Eeliseks on suurendatud täpsus, kuna pinnad ei koosne vaid kolmnurkadest. Tagajärjeks on samas pikemad töötlusajad, kuna lõikumispunkte on vaja arvutada keerukate valemitega. NURBS'le omast täpsust on küll ka kolmnurkadega võimalik saavutada, samas nõuab see suure koguse kolmnurkade kasutamist, mis omakorda töötlusaega suurendab.

Varjutamine[muuda | redigeeri lähteteksti]

Lähima primitiivi määramise protsessi käigus leitakse lisaks lõikepunktile ja kaugusele silmast ka primitiivi pinnanormaal. Nõnda on olemas vajalik informatsioon, et määrata silmpunkti peegelduva "valguskiire" värv. Selle käigus kasutatakse ka stseenis paiknevate valgusallikate kirjeldatud omadusi. Kõik arvutused baseeruvad lokaalsel valgusmudelil, mis on võimeline materjalide olemust simuleerima. Seda pilditöötluse isa, mis värvi edastamise eest vastutab, nimetatakse varjutajaks.

Näitekood[muuda | redigeeri lähteteksti]

Lihtsama kiirejälitusel baseeruva programmi loomine ei ole väga töömahukas. Pseudokoodis lasevad ennast vajalikud põhimõtted nõnda kirjeldada:

Funktsioon Pildi_töötlemine
   Kiir.Allikas = Silmpunkt
   For every (x,y)-Rastergraafika pikslid
       Kiir.suund = [Pilditasandil asuva punkti 3D-koordinaadid] − Silmpunkt
       Värv (x,y)-Pixel = Värv_suunast(kiir)
Funktsioon Värv_suunast(kiir)
   Lõikepunkt := Lähim_lõikepunkt(kiir)
   If Lõikepunkt.võitja = (False):
       Värv_suunast := Värv_taust
   Else:
       Värv_suunast := Värv_lõikepunktist(kiir, lõikepunkt)
Funktsioon Lähim_lõikepunkt(kiir)
   MaxKaugus := ∞
   Lõikepunkt.võitja := (False)
   For every primitiiv steenis
       Lõikepunkt := Testi_primitivi(primitiv, kiir)
       If Lõikepunkt.kaugus < MaxKaugus :
           MaxKaugus := Lõikepunkt.kaugus
           Lõikepunkt.võitja := Primitiv
   Lähim_lõikepunkt := lõikepunkt

Iga kiirtejälitaja, ükskõik millist kiirtejälgimisega seotud meetodit rakendades, jälgib sarnast struktuuri., mis sisaldavad veel lõikepunktitest (Testi_primitivi) ja varjutajat (Värv_Lõikepunktis).

Võimekus[muuda | redigeeri lähteteksti]

Kiirendusmeetodid[muuda | redigeeri lähteteksti]

Esimese kiirt tabava primitiivi määramiseks võib, nagu ülevaltoodud näitekoodis, testida kiirt iga stseenis oleva primitiivi suhtes. Samas pole see enamasti vajalik, kui on teada, et osad primitiivid ei paikne kiire läheduses ja seega on võimatu, et nad kiirega pihta saavad. Lõikepunktide väljaarvutamiseks on kiirtejälituse meetodi puhul töötluse kõige aeganõudvam protsess ja seetõttu on tähtis arvutustesse kaasata nii vähe primitiive, kui võimalik, et säästa arvutusaega.

Kiirendusmeetodite käigus jaotatakse stseen mingite süsteemide järgi automaatselt alamtükkideks. Nendesse alamtükkidesse grupeeritakse sealpaiknevad primitiivid. Kui kiir saadetakse stseeni läbima, ei arvutata tema lõikumist kogu stseeni suhtes, vaid hoopis alamtükkide suhtes, mida ta läbib. Nõnda peab lõikumispunktide arvutustesse kaasama vaid alamtükkides paiknevad primitiivid ja mitte kogu stseeni informatsioon.

Kiire liikumine läbi voxelvõrgustiku.

Kiirtejälituse jaoks on välja arendatud mitmeid selliseid kiirendusmeetodeid. Näited alajaotussüsteemidest on näiteks voxelvõrgustik, BSP-puud ja Bounding volumes, mis primitiive ümbritsevad ja stseeni osadeks jagavad. Samuti on võimalik eelmainitud meetodeid kombineerida. Animatsioonide jaoks on disainitud sarnaseid kiirendusmeetodeid.

Ükski kiirendusmeetod pole universaalselt optimaalne. Efektiivsusaste sõltub suurel määral siiski stseenist. Samas vähendavad kiirendusmeetodid stseeni üleüldist töötlusaega väga suurel määral ja võimaldavad kiirtejälitus algoritmi praktiliselt rakendada. K-dimensioonilistel puudel baseeruvad kiirendusmeetodid on enamus mitteanimeeritud stseenide jaoks üks efektiivsemaid tehnikaid, kuna seda on heuristikat kasutades veelgi optimeerimisvõimalusi. [8][9] On ka kindlaks tehtud, et stseeni ajaline keerukus on logaritmilises sõltuvuses temas paiknevate primitiivide hulgaga.

On näidatud, et tänapäevaste arvutite puhul pole kiirtejälituse pudelikaelaks mitte protsessor, vaid hoopis mälule ligipääsukiirus. Vahemälu hoolika majandamise abil on võimalik algoritmi märgatavalt kiirendada. Samuti saab kasutada protsessorite SIMD arhitektuuri, mis võimaldab paralleelseid arvutusi ning spetsiaalselt optimeeritud eraldusskeeme. Sedasi on võimalik üheaegselt jälgida mitmeid "pakettidesse" kokkuseotud kiirepuntraid. Seda põhjusel, et enamus silmpunktist väljasaadetud kiiri on üksteisele väga sarnased ja nad tabavad tihti sama objekti. SSE käsustikega saadakse korraga testida nelja kiire lõikumist objekti suhtes. Spetsiaalsete riistvaralahendustega on võimalik ka suuremaid, üle 1000 kiirt sisaldavaid pakette, jälgida. Kahjuks kaotavad vahemälu- ja SIMD-optimeeringud enda ajaeelise komplitseeritumate kiirejälitusmeetodite kasutamisel.

Veel on võimalik kogu kiirtejälitus protsess paralleliseerida. Selle realiseerimine on küllalt lihtne, kui anda konkreetsele protsessorile/arvutile pildi erinevaid juppe töötlemiseks. Paralleliseerimisega toimetulekuks on vaja vaid mõningaid optimeerimismeetodeid kohandada.

Mälutarve[muuda | redigeeri lähteteksti]

Kiirtejälituse protsess iseenestes palju mälu ei tarvita. Hoopis stseen hõivab suuri mäluhulkasid, keerukamad stseenid võivad koosneda miljonitest primitiividest, mis võivad ulatuda gigabaitideni. Lisaks sellele peab arvesse võtma ka kiirendusmeetodite mäluvajadusi. Kuna väga suured stseenid korraga arvuti mällu ei mahu, on vajalik lehekülgede saalimine.

Suuremate ja keerukamate objektide puhul, mis stseenis mitmekordselt esinevad ja vaid positsiooni ning suuruse poolest erinevad (näiteks mets), ei ole vajalik kogu geomeetri korduvsalvestamine mällu. Läbi eksemplaarimise (inglise keeles Instancing) on võimalik suuri koguseid mälu kokku hoida, kuna objekt laetakse mällu vaid üks kord.

Edasiarendused[muuda | redigeeri lähteteksti]

Üks kiirtejälituse meetodi edukuse põhjuseid on tema edasiarenduspotentsiaali rohkus. Eelpoolkirjeldatud algeline metoodika pildisünteesi jaoks ei ole enam tänapäevastele nõudlustele vastav. Tõusva arvutusvõimsuse ja füüsikast ammutatud inspiratsiooni abil (esmalt optika ja radiomeetria) on loodud mitmeid edasiarendusi ja variatsioone, millest mõned siis lühidalt kirjeldatud on.

Üleüldiselt kehtib, et iga edasiarendusega tõuseb võimalik kvaliteet, aga ka vajaminev ajakulu, mis Path Tracing 'ga oma maksimumi saavutas. Alles hiljem seati arenduses siht protsessi ajavajaduste vähendamiseks ilma, et kvaliteet selle käigus langeks.

Vari[muuda | redigeeri lähteteksti]

Lichtquelle - Valgusallikas; Shattenwerfer - Varjuheirja; Shattenstrahl - Varjukiir; Strahl - Kiir

Kiirtejälitus algoritmi paindlikkuse tõttu on võimalik valguskiiri mitte ainult silmpunktist, vaid ka suvalistest muudest punktidest ruumis, välja saata. Seda demonstreeris 1968. aastal Arthur Apple ja näitas, et seda meetodit saab rakendada varjude simuleerimiseks.

Pinna suvaline punkt asub just siis varjus, kui tema ja valgusallika vahel objekt paikneb. Seda saab kindlaks teha, kui saata silmast tulnud kiire lõikepunktist välja kiir valgusallikasse et näha, kas uus väljasaadetud kiir mingi objektiga lõikub. Kui nõnda juhtub, asub lõikepunkt varjus ning silmpunkti kiire heleduseks määratakse 0. Vastasel juhul leiab aset tavaline varjutamine.

Rekursiivne kiirtejälitus[muuda | redigeeri lähteteksti]

Kiirtejälitust saab rakendad lihtsatele, valgust mitteläbilaskvate, kehadele ka läbipaistvatele ja peegelduvate kehadele. Sellel puhul saadetakse lõikepunktist välja uusi valguskiiri. Peegelduvate pindade puhul on vaja välja arvutada peegeldumisseaduste põhjal uue kiire suund ning välja saata vastav peegelduskiir.

Valgust läbilaskvate objektide puhul saadetakse välja kiir vastavalt Snell-Descartese seadusele, seekord objekti sisse. Üldiselt peegeldavad läbipaistvad objektid osa valgusest tagasi. Murdunud ja peegeldunud valguse värve annab arvutada Fresneli valemitega. Selliseid kiiri nimetatakse sekundaarkiirteks.

Kuna sekundaarkiired võivad ka teisi objekte tabada, kutsutakse esile algoritm rekursiivselt, et võimaldada mitmekordne valguse peegeldumine ja valguse murdumine. Kogu protsessi hierarhilist ülesehitust kutsutakse ka töötluspuuks (inglise keeles render-tree).

Rekursiivse kiirtejälituse töötasid välja Kay ja Whitted 1980. aastatel. [10][11]

Rekursiivse kiirtejälituse puhul näeb pseudokoodis kirjutatud varjuti sedasi välja:

Funktsioon Värv_Lõikepunktis(Kiir, Lõikepunkt)
   If Lõikepunkt.Võitja.Materjal = peegelduv or läbipaistev
       Peegeldav_Osa := Fresnel(Kiir, Lõikepunkt)
       Värv := Peegeldav_Osa × Värv_Suunast(Peegeldumiskiir)
              + Murdunud_Osa × Värv_Suunast(Murdumiskiir)
   Else:
       Värv := 0
       For every Valgusallikas
           Varjukiir := Valgusallikas.Positsioon - Lõikepunkt.Positsioon
           VarjuLõikepunkt := Lähim_Lõikepunkt(Varjukiir)
           If VarjuLõikepunkt.Võitja = Valgusallikas
               Värv := Värv + Otsene_Valgustus(Kiir, Valgusallikas)
   Värv_Lõikepunktis := Värv

Ülejäänud programmi osad võivad jääda samaks, nagu nad lihtsa kiirejälituse puhul olid. Siin näidatud funktsioon Värv_Suunast võib esile kutsuda funktsiooni Värv_Lõikepunktis, millega tuleb esile funktsiooni rekursiivne olemus.

Difuusne kiirejälitus[muuda | redigeeri lähteteksti]

Rekursiivne kiirtejälitus võimaldab lisaks valguse murdumisele ja valguse peegeldumisele ka teravate varjude simulatsiooni. Reaalsuses on siiski valgusallikatel olemas mõõtmed, mis varjud pehmeks ja uduseks muudavad.

See efekt, nagu ka sakitõrje (inglise keeles antialiasing), läikivad peegeldused, jne. lasevad ennast difuusse kiirejälitusega (inglise keeles distributed ray tracing) abil simuleerida. Selle kohta publitseeris von Cook aastal 1984 paberi. [12] Meetodi idee seisneb ühe kiire asemel mitme kiire väljasaatmises ning nende kiirte värviinformatsiooni keskmise väljaarvutamises. Nõnda on võimalik luua näiteks pehmeid varje. Protsessi miinuseks on müra, mis tekib, kui liiga vähe kiiri välja saadetakse. On siiski olemas meetodeid, nt. importance sampling, mis müra vähendab.

Path tracing ja light tracing[muuda | redigeeri lähteteksti]

Difuusne kiirtejälitus võimaldab küll paljusid efekte simuleerima, ei ole see võimeline simuleerima globaalset valgustatust koos efektidega, näiteks difuusne interreflektsioon ja kaustik efektid (läbi valguskiirte koondamise tekkivad valged valguslaigud). See on põhjustatud tõsiasjast, et difuusse kiirejälituse puhul tekivad sekundaarsed kiired vaid valguse peegeldumise ja murdumise korral, mitte aga difuussete objektidega kokkupuutel.

Globaalse valgustuse näide.

Aastal 1986 avalikustatud publikatsioonis kirjeldas James Kajiya töötlemisvõrrandit, mis lõi matemaatilise aluse globaalsele valgustatusele. [13] Ühe kiire "heledus" defineeritakse nõnda raadiomeetriliselt korrektselt kui kiiretihedust. Kaijya näitas, et globaalse valgustuse jaoks peab iga pind välja saatma sekundaarseid kiiri. Lisaks näitas ta, et render-tree ei tööta piisavalt efektiivselt, kuna palju tööd raisatakse suurtes hierarhiasügavustes arvutamise peale, ning on parem, kui välja saadetakse vaid üks kiir. Seda meetodit tuntakse täna Path tracing nime all, kuna valguskiir otsib endale silmpunktist teed läbi stseeni. Path tracing omab matemaatiliselt ja füüsikaliselt mittepaindliku struktuuri.

Visualiseeritud Causics Photon Map. Punktikesed tähistavad kaustik.

Kui Path tracin käigus difuusse pinna poolt välja saadetud sekundaarkiir valgusallikat otse tabab, ignoreeritakse selle heledusosa. Heledusastet arvutatakse hoopis varjukiirte põhjal. Alternatiivselt võidakse otsest valgustatust arvutada nii, et välja saadetakse vaid üks sekundaarkiir ja kui ta valgusallikat tabab, tagastatakse tolle valgustihedus. Kumb kahest mudelist efektiivsem on sõltub pinna lokaalsest valgusmudelist ja jälgitava objekti nurgast valgusallika suhtes. [14] Eksisteerib ka kontseptuaalselt lihtsama Path tracing variant nimega Adjoint Photon Tracing, kus varjukiiri välja ei saadeta.

Kuigi Path tracing on võimeline simuleerima globaalset valgustust, väheneb tolle efektiivsus väikeste valgusallikate puhul. Selle all kannatab eriti kaustik ja tolle peegeldused, kuna välja saadetakse väga vähe kiiri. Seetõttu kasutatakse tihti teisi, Path tracingul põhinevaid meetodeid või edasiarendusi.

Light ray tracing on haruldane versioon kiirtejälitusest, kus selle asemel, et valguskiiri silmast välja saata, saadetakse kiired välja valgusallikast. Pikslid, mida pilditasandil tabatakse, värvitakse vastavalt kiire omadustele. Nõnda on võimalik täpselt simuleerida kaustikaid aga teiste efektide simuleerimine kannatab ebaefektiivsuse all, kuna paljud kiired pilditasandit lihtsalt ei taba.

Ülevaade[muuda | redigeeri lähteteksti]

Kiirtejälitus meetod Vari Valguspeegeldused und -murdumised Valgustus Näitepilt
Ainult peidetud pindade määramine Ei Ei Ei Dif hidden objects.jpeg
Varjude simulatsioon
(Ainult ühe varjukiirega)
Ainult kõvad varjud Ei Ainult otsene valgustus Dif dir shadow.jpeg
Rekursiivne kiirtejälitus Ainult kõvad varjud Ainult peegeldavatel pindadel Ainult otsene valgustus või peegegeldus Dif rek ref refract.jpeg
Difuusne kiirtejälitus Täielik Ainult peegelduvate/läikivate pindade puhul Ainult otsene valgustus või peegelduvad/läikivad peegeldus Dif no GI.jpeg
Path Tracing Täielik Täielik Täielik (Globaalne valgustatus) Dif all.jpeg


Viited[muuda | redigeeri lähteteksti]

  1. Vallaste e-teadmik
  2. Terrence Masson: CG 101: A Computer Graphics Industry Reference. S. 267. Digital Fauxtography 2007, ISBN 0-9778710-0-2
  3. Arthur Appel: Some Techniques for Shading Machine Renderings of Solids. In Proceedings of the Spring Joint Computer Conference 1968. S. 37–45. AFIPS Press, Arlington
  4. Mathematical Applications Group, Inc.: 3-D Simulated Graphics Offered by Service Bureau. Datamation 13, 1 (Feb. 1968): 69, ISSN 0011-6963
  5. Robert Goldstein, Roger Nagel: 3-D Visual Simulation. Simulation 16, 1 (Jan. 1971): 25–31, ISSN 0037-5497
  6. Terrence Masson: CG 101: A Computer Graphics Industry Reference. S. 162. Digital Fauxtography 2007, ISBN 0-9778710-0-2
  7. Oliver Abert u. a.: Direct and Fast Ray Tracing of NURBS Surfaces. In Proceedings of IEEE Symposium on Interactive Ray Tracing 2006. S. 161–168. IEEE, Salt Lake City 2006, ISBN 1-4244-0693-5 (PDF, 700 KB)
  8. Vlastimil Havran u. a.: Statistical Comparison of Ray-Shooting Efficiency Schemes. Technical Report TR-186-2-00-14, Institute of Computer Graphics and Algorithms, Vienna University of Technology 2000 (Online)
  9. Ingo Wald, Vlastimil Havran: On building fast kd-trees for ray tracing, and on doing that in O(N log N). In Proceedings of IEEE Symposium on Interactive Ray Tracing 2006. S. 61–69. IEEE, Salt Lake City 2006, ISBN 1-4244-0693-5 (PDF, 230 KB)
  10. Douglas Scott Kay: Transparency, Refraction and Ray Tracing for Computer Synthesized Images. Thesis, Cornell University, Ithaca 1979
  11. Turner Whitted: An Improved Illumination Model for Shaded Display. Communications of the ACM 23, 6 (June 1980): 343–349, ISSN 0001-0782 (PDF, 4,6 MB)
  12. Robert Cook u. a.: Distributed ray tracing. ACM SIGGRAPH Computer Graphics 18, 3 (July 1984): 137–145, ISSN 0097-8930
  13. James Kajiya: The Rendering Equation. ACM SIGGRAPH Computer Graphics 20, 4 (Aug. 1986): 143–150, ISSN 0097-8930
  14. Eric Veach, Leonidas J. Guibas: Optimally combining sampling techniques for Monte Carlo rendering. In SIGGRAPH ’95 Proceedings, S. 419–428. ACM, New York 1995, ISBN 0-89791-701-4 (Online)