Šta je praćenje zraka i da li nam je potrebno u igricama? Šta je Nvidia RTX, kako tehnologija praćenja zraka mijenja grafiku u igricama i zašto kupiti novi GeForce (ukratko i sa primjerima).

Pretplatite se
Pridružite se zajednici “koon.ru”!
U kontaktu sa:

Čini se da je u posljednjih nekoliko godina praćenje zraka postalo "san broj jedan" u svijetu 3D grafike u realnom vremenu. Interes za ovu tehnologiju renderiranja dostigao je vrhunac kada je mladi istraživač Daniel Pohl najavio svoj projekat na ovoj tehnologiji još 2004. godine.

Razlog za interesovanje šire javnosti za ovaj rad je uglavnom bio zbog Pohlove usredsređenosti na čuvene id Software igre Quake III, Quake IV i pucačku franšizu Quake Wars 3D. Istraživač je privukao veliku pažnju štampe, a igrači su počeli sanjati o svijetloj budućnosti kada će njihove omiljene igre biti prikazane pomoću praćenja zraka i oslobode se rasterizacije.

Intel je brzo skrenuo pažnju na projekat i kompanija ga je pronašla savršen način da opravda povećanje broja jezgara u procesorima. Kompanija je brzo pokrenula sopstveni istraživački program, a danas Intel nikada ne propušta priliku da naglasi da je praćenje zraka budućnost 3D igara u realnom vremenu. Ali da li je to zaista tako? Koja se tehnološka stvarnost krije iza marketinške pompe? Koje su stvarne prednosti praćenja zraka? Možemo li očekivati ​​da će praćenje zraka zamijeniti rasterizaciju? Pokušaćemo da odgovorimo na ova pitanja.


Kliknite na sliku za uvećanje.

Osnovni principi

Osnovna ideja praćenja zraka je vrlo jednostavna: za svaki piksel na ekranu, mehanizam za renderiranje izvlači direktnu zraku iz oka promatrača (kamere) do elementa renderirane scene. Prvi presek se koristi za određivanje boje piksela kao funkcije površine elementa koji se preseca.

Ali ovo samo po sebi nije dovoljno za stvaranje realistične scene. Mora se odrediti osvjetljenje piksela, što zahtijeva crtanje sekundarnih zraka (za razliku od primarnih zraka, koje određuju vidljivost različitih objekata koji čine scenu). Da bi se izračunali efekti osvetljenja scene, sekundarni zraci se povlače od tačaka preseka do različitih izvora Sveta. Ako su ove zrake blokirane objektom, tada je ta tačka u sjeni koju baca dotični izvor svjetlosti. U suprotnom, izvor svjetlosti utiče na osvjetljenje. Zbir svih sekundarnih zraka koji dopiru do izvora svjetlosti određuje kvalitetu osvjetljenja koje pogađa naš element scene.

Ali to nije sve. Da bi se postigao što realističniji prikaz, karakteristike refleksije i prelamanja materijala moraju se uzeti u obzir. Drugim riječima, morate znati koliko svjetlosti se reflektira na mjestu gdje se primarni snop ukršta, kao i količinu svjetlosti koja prolazi kroz materijal u toj tački. Opet, refleksija i zrake prelamanja moraju se nacrtati da bi se izračunala konačna boja piksela.

Kao rezultat, dobijamo nekoliko vrsta zraka. Primarne zrake se koriste za određivanje vidljivosti objekta i slične su vrsti Z-bafera koji se koristi u rasterizaciji. A sekundarni zraci se dijele na sljedeće:

  • zraci senke/svetlosti;
  • refleksijske zrake;
  • refrakcijske zrake.

Klasični algoritam za praćenje zraka. Kliknite na sliku za uvećanje.

Ovaj algoritam za praćenje zraka rezultat je rada Turnera Whitteda, istraživača koji je izumio algoritam prije 30 godina. Do tada je algoritam za praćenje zraka radio samo s primarnim zracima. A poboljšanja koju je Whitted napravio ispostavilo se kao ogroman korak ka realizmu u prikazivanju scene.

Ako ste upoznati s fizikom, vjerovatno ste primijetili da algoritam za praćenje zraka radi „in poleđina"od pojava koje se dešavaju u stvarnom svijetu. Suprotno popularnom vjerovanju u srednjem vijeku, naše oči ne emituju zrake svjetlosti, već naprotiv, primaju zrake svjetlosti iz izvora svjetlosti koji se reflektiraju na raznim objektima oko nas. U principu, ovako su radili prvi algoritmi za praćenje zraka.

Ali glavni nedostatak prvih algoritama bio je to što su nametnuli ogromno računarsko opterećenje. Za svaki izvor svjetlosti trebate baciti hiljade zraka, od kojih mnogi uopće neće utjecati na renderiranu scenu (pošto ne sijeku ravan slike). Moderni algoritmi Praćenje zraka je optimizacija osnovnih algoritama, koristeći ono što se zove obrnuto praćenje zraka, budući da se zrake crtaju u smjeru suprotnom od stvarnosti.


Originalni algoritam za praćenje zraka rezultirao je veliki broj nepotrebne kalkulacije. Kliknite na sliku za uvećanje.

Prednosti praćenja zraka

Kao što ste već vidjeli, glavna prednost metode praćenja zraka je njena jednostavnost i elegancija. Algoritam koristi samo jedan primitivni objekat za prikaz efekata koji često zahtevaju netrivijalan pristup i složene tehnologije stimulacije kada se koristi standardna metoda rasterizacije.


Mapa okruženja daje dobru aproksimaciju simulacije odraza okoline, ali praćenje zraka može čak simulirati refleksiju očiju Luigijevog automobila na haubi. Kliknite na sliku za uvećanje.

Refleksije su jedno područje u kojem je praćenje zraka izvrsno. Danas u 3D motorima moderne igre refleksije se izračunavaju pomoću mapa okruženja. Ova tehnologija daje dobru aproksimaciju refleksijama objekata koji se nalaze "u beskonačnosti" ili na okruženje(kao što se vidi iz naziva), ali za blisko locirane objekte pristup pokazuje svoja ograničenja.

Programeri trkaćih igara, posebno su kreirali trikove za simulaciju refleksije obližnjih objekata koristeći takozvane dinamičke kocke mape. Kamera je postavljena na nivou igračke mašine, nakon čega se vrši renderovanje u glavnim pravcima. Rezultati renderiranja se zatim pohranjuju u kubemape, koje se koriste za prikaz refleksije.


Dinamičke kocke mape mogu simulirati refleksiju obližnjih objekata, kao što je avion na čajniku. Ali ne mogu se nositi s refleksijama dijelova predmeta jedan na drugom, na primjer, izljev čajnika na njegovom tijelu. Kliknite na sliku za uvećanje.

Naravno, dinamičke kubemape imaju i svoje nedostatke. Prilično je skupo u smislu računarske snage izračunati nekoliko rezultata renderiranja, a kako bi se spriječilo preveliko opadanje performansi, karte kocke se ne preračunavaju toliko puta kao glavna slika. Ovo može uzrokovati neznatno odlaganje refleksije. Da bi se smanjilo opterećenje stope popunjavanja, renderiranje se izvodi u nižoj rezoluciji, što može dovesti do pikselacije u refleksijama. Konačno, ova tehnologija je često ograničena na igračevu mašinu, a svi ostali objekti koriste jednostavnije (sferične) mape okruženja.

Sa metodom praćenja zraka refleksije se prikazuju savršeno i bez složenih algoritama, jer se sve izračunava glavnim algoritmom renderiranja. Još jedna prednost se može smatrati prikazom refleksija dijelova objekta jedan na drugom, na primjer, refleksijom bočnog ogledala na karoseriji automobila, što je vrlo teško dobiti metodom rasterizacije - ali ovdje je ovo refleksija se dobija na isti način kao i ostali.


Metoda praćenja zraka omogućava vam da simulirate refleksiju dijelova objekata jedan na drugom, na primjer, refleksiju bočnog ogledala na karoseriji automobila. Kliknite na sliku za uvećanje.

Još jedna neosporna prednost metode praćenja zraka je visokokvalitetna obrada efekti transparentnosti. Izuzetno je teško prikazati efekte transparentnosti koristeći algoritam rasterizacije, jer proračun transparentnosti direktno zavisi od redosleda renderovanja. Za dobijanje dobri rezultati, trebate sortirati prozirne poligone po redoslijedu najudaljenije od kamere do najbliže, a tek onda renderirati.

Ali u praksi je ovaj zadatak pretežak sa računske tačke gledišta, a moguće su i greške u transparentnosti, jer se sortiranje vrši na poligonima, a ne pikselima. Postoji nekoliko tehnologija koje vam omogućavaju da zaobiđete sortiranje poligona scene (poput dubinskog peelinga i A-bafera), ali trenutno se nijedna od njih ne može nazvati spašavanjem. U isto vrijeme, algoritam za praćenje zraka vam omogućava elegantno rukovanje efektima transparentnosti.


Pravilno rukovanje efektima transparentnosti pomoću rasterizatora zahtijeva korištenje složenih algoritama kao što su A-baferi. Kliknite na sliku za uvećanje.

Još jedna važna prednost je proračun senki. U svijetu rasterizacije, tehnologija mapiranja sjena je postala standard. Ali ima nekoliko problema, kao što su "merdevine" na kolima i količina memorije koja se koristi. Algoritam praćenja zraka rješava problem sjene vrlo elegantno, bez pribjegavanja složenim algoritmima, koristeći isti primitivni objekt i bez potrebe za dodatnom memorijom.

Konačno, još jedna jaka prednost metode praćenja zraka je njena izvorna sposobnost rada sa zakrivljenim površinama. Moderni GPU-ovi imaju podršku za zakrivljene površine već nekoliko godina (pojavljuje se i nestaje kako se izdaju novi drajveri i nove arhitekture). Ali ako rasterizatori moraju da urade početni prolaz teselacije da bi stvorili trouglove (što je jedini primitiv sa kojim mašina za rasterizaciju može da radi), onda mašina za praćenje zraka može jednostavno raditi sa presekom zraka, bez precizne matematičke definicije površine .

Mitovi o praćenju zraka

Ali praćenje zraka još uvijek ne treba idealizirati, tako da je vrijeme da razbijemo neke od mitova koji okružuju ovaj algoritam.

Počnimo s činjenicom da mnogi igrači smatraju da je algoritam za praćenje zraka fundamentalno bolji od rasterizacije, budući da se koristi u filmovima. Ovo je pogrešno. Većina sintetičkih/ručno crtanih filmova (kao i svi Pixar filmovi) koristi algoritam nazvan REYES, koji se temelji na rasterizaciji. Pixar je samo dodao praćenje zraka u svoj RenderMan mehanizam za renderiranje kasnije, tokom proizvodnje automobila. Ali čak i za ovaj film, praćenje zraka je korišteno selektivno kako se ne bi nadmašila postojeća računarska snaga. Prije ovog projekta, Pixar je koristio dodatak za ograničenu upotrebu praćenja zraka, kao što su efekti senčenja ambijentalne okluzije (AO).


Kliknite na sliku za uvećanje.

Drugi uobičajeni mit među zagovornicima praćenja zraka tiče se složenosti scena koje praćenje zraka i rasterizacija mogu prikazati. Da bismo razumjeli, moramo detaljnije pogledati svaki algoritam.

Ispod je kako algoritam rasterizacije radi na svakom trouglu u sceni.

  • Određuje se skup piksela koji pokriva svaki trougao;
  • Za svaki uključeni piksel, njegova dubina se upoređuje sa dubinom susjednog piksela.

Glavno ograničenje metode rasterizacije odnosi se na broj trouglova. Algoritam ima složenost O(n), gdje je n broj trouglova. Algoritam in u ovom slučaju ima linearnu složenost u zavisnosti od broja trouglova, pošto se za svaki okvir sastavlja lista trouglova koji se obrađuju, jedan po jedan.

Nasuprot tome, algoritam za praćenje zraka radi na sljedeći način.

Za svaki piksel okvira:

  • crta se zraka kako bi se odredilo koji je trokut najbliži;
  • Za svaki trokut izračunava se udaljenost od trougla do izlazne ravni slike.

Kao što vidite, redoslijed obrade je obrnut. U prvom slučaju, uzeli smo svaki poligon i pogledali koje piksele pokriva. A u drugom slučaju, uzeli smo svaki piksel i pogledali koji poligon mu odgovara. Stoga biste mogli pomisliti da metoda praćenja zraka manje ovisi o broju poligona nego metoda rasterizacije, budući da broj poligona ne utječe na glavnu petlju. Ali u praksi to nije slučaj. Zapravo, da bismo odredili koji će trokut presjeći zraku, moramo obraditi sve trouglove u sceni. Ovdje će, naravno, zaštitnici metode praćenja zraka reći da nije potrebno obraditi sve trouglove scene sa svakim zrakom. Ako koristimo odgovarajući tip strukture podataka, vrlo je lako organizirati trokute tako da se samo mali postotak njih testira sa svakim zrakom, što znači da metoda praćenja zraka ima složenost od O(log n), gdje je n je broj poligona.

Da, argumenti se mogu smatrati istinitim. Ali zagovornici praćenja zraka su malo neiskreni jer isto vrijedi i za rasterizaciju. Game engines BSP stabla (binarno particionisanje prostora) i druge metode se koriste dugi niz godina da bi se ograničio broj poligona koji se moraju izračunati za svaki okvir. Još jedna kontroverzna tačka je da su takve strukture najefikasnije za statičke podatke. Sve što nam treba je da jednom izračunamo podatke, a zatim jednostavno omogućimo pristup i to daje vrlo dobre rezultate. Ali šta učiniti s dinamičkim podacima? U ovom slučaju, podaci će se morati ponovo izračunati za svaku sliku, a za to ne postoje čudesne formule. Još uvijek morate proučiti svaki poligon.

Jednostavan algoritam?

Posljednji mit se tiče prirodne jednostavnosti i elegancije algoritma za praćenje zraka. Naravno, algoritam za praćenje zraka može se napisati u nekoliko redova koda (neki algoritmi staju na jednu stranu posjetnice), ali algoritam za praćenje zraka visokih performansi je sasvim druga stvar.

David Luebke, inženjer u nVidia-i, dao je sljedeći komentar koji savršeno odražava stvarnost: "Rasterizacija je brza, ali morate pažljivo razmisliti o tome kako napraviti složene vizualne efekte. Praćenje zraka podržava složene vizualne efekte, ali morate pažljivo razmisliti o tome kako to učiniti brzo."


Minimalni kod za praćenje zraka koji je napisao Paul Heckbert da stane na vizit kartu. Kliknite na sliku za uvećanje.

Sve što trebate učiniti je pročitati nekoliko članaka o optimizacijama koje treba napraviti u algoritmu za praćenje zraka da biste razumjeli ono što je Luebke rekao. Na primjer, najmoćniji algoritmi za praćenje zraka ne obrađuju zrake nezavisno; oni koriste ono što se naziva skupovima zraka, što omogućava optimizaciju performansi sa zrakama koje imaju isto porijeklo i smjer. Ova optimizacija je odlična za funkcionalne blokove sa jednom instrukcijom i mnogo podataka (SIMD) unutar CPU-a i GPU-a, a takođe je vrlo efikasna za jezgrene zrake sa određenim stepenom koherencije ili zrake senke. Ali, s druge strane, optimizacija više nije prikladna za prelamanje ili refleksiju zraka.

Štaviše, kako Daniel Pohl ističe u u svom članku o Quake Wars RT, korištenje skupova zraka može postati problematično s prozirnim teksturama (čuvene alfa teksture koje se koriste za drveće), jer ako se svi zraci u setu ne ponašaju na isti način (neki udaraju u površinu, drugi prolaze kroz nju), onda se dodatno povećavaju troškovi može postati mnogo veća od prednosti optimizacija koje se pružaju korištenjem skupova zraka.


Vizualizacija "cijena" renderiranja svakog piksela, pri čemu su crveni pikseli "najskuplji". Kao što možete vidjeti, renderiranje stabala je veoma skupo u verziji Quake Warsa sa praćenjem zraka. Kliknite na sliku za uvećanje.

Konačno, kao što smo već spomenuli, praćenje zraka zahtijeva odgovarajuću strukturu podataka za pohranjivanje različitih elemenata scene, a ta struktura će igrati odlučujuću ulogu u konačnoj izvedbi. Ali odabir i rad s takvom strukturom podataka nije tako jednostavan kao što se čini na prvi pogled. Neke strukture imaju najbolje karakteristike za statičke podatke, dok se drugi mogu brže ažurirati za dinamičke podatke ili zauzeti manje memorije. Kao i obično, sve se svodi na pronalaženje prihvatljivog kompromisa. Nema čuda.

Stoga, kao što vidimo, algoritam za praćenje zraka ne može se uvijek nazvati idealom jednostavnosti i elegancije, kako neki vjeruju. Da biste dobili dobre performanse od algoritma za praćenje zraka, morate pronaći ništa manje netrivijalna programska rješenja nego u slučaju dobivanja složenih vizuelni efekti u metodi rasterizacije.

Sada kada smo razjasnili neke od mitova oko praćenja zraka, pogledajmo stvarne probleme koji dolaze s ovom tehnologijom.

I počećemo sa glavnim problemom povezanim sa ovim algoritmom renderovanja: njegovom sporošću. Naravno, neki entuzijasti će reći da to više nije problem, budući da je algoritam za praćenje zraka vrlo paralelan i da se broj procesorskih jezgara svake godine povećava, tako da bi trebali vidjeti linearni porast performansi praćenja zraka. Osim toga, istraživanje optimizacija koje se mogu primijeniti na praćenje zraka još uvijek je u povojima. Ako pogledate prve 3D akceleratore i uporedite ih sa onim što je dostupno danas, zaista postoji razlog za optimizam.

Međutim, ovo gledište ne uzima u obzir važna tačka: Zanimljiva stvar kod metode praćenja zraka su sekundarne zrake. U praksi, izračunavanje slike samo sa primarnim zracima neće pružiti mnogo poboljšanja kvaliteta slike u poređenju sa klasičnim algoritmom sa Z-baferom. Ali problem sa sekundarnim snopovima je u tome što nemaju apsolutno nikakvu koherentnost (kodirekcija). Prilikom prelaska s jednog piksela na drugi, moraju se izračunati potpuno drugačiji podaci, što negira sve uobičajene tehnike keširanja koje su vrlo važne za dobre performanse. To znači da proračun sekundarnih zraka veoma zavisi od memorijskog podsistema, posebno od njegovog kašnjenja. Ovo je najgori mogući scenario, budući da se od svih memorijskih karakteristika, latencija najmanje poboljšala tokom vremena. poslednjih godina, te nema razloga vjerovati da će se situacija popraviti u dogledno vrijeme. Prilično je lako povećati memorijski propusni opseg korištenjem više čipova paralelno, ali će latencije i dalje ostati iste.


Za video kartice, memorijska latencija (latencija) se smanjuje mnogo sporije nego što se širina pojasa (propusnost) povećava. Ako se potonji poboljša za faktor 10, onda se kašnjenja poboljšaju samo za faktor dva.

Razlog popularnosti GPU-a leži u činjenici da se stvaranje hardvera specijaliziranog za rasterizaciju pokazalo vrlo efikasno rešenje. Sa rasterizacijom, pristupi memoriji se izvode koherentno (paralelno), bez obzira da li radimo sa pikselima, tekselima ili vrhovima. Stoga će male keš memorije, dopunjene ozbiljnim memorijskim propusnim opsegom, moći idealno rešenje za vrhunske performanse. Naravno, povećanje propusni opseg je vrlo skupo, ali ovo rješenje je sasvim prikladno ako se isplati. Nasuprot tome, danas ne postoje rješenja za ubrzanje pristupa memoriji kada se računa više zraka. To je razlog zašto praćenje zraka nikada neće biti tako efikasno kao rasterizacija.

Još jedan čest problem sa praćenjem zraka tiče se anti-aliasinga (AA). Zrake se izvode kao jednostavna matematička apstrakcija, i prirodna veličina ne uzimaju u obzir. Test raskrsnice trokuta je jednostavna Booleova funkcija koja daje odgovor da ili ne, ali ne daje detalje kao što je "zraka siječe trokut 40% puta." Direktna posljedica ovog efekta bit će pojava "ljestava".

Za rješavanje ovog problema predloženo je nekoliko tehnologija, kao što su praćenje zraka i konus, koje uzimaju u obzir debljinu greda, ali njihova složenost onemogućava efektivna implementacija. A jedina tehnologija koja može dati dobre rezultate je izračunavanje više zraka nego što ima piksela, odnosno supersampling (renderiranje u višoj rezoluciji). Teško da je vrijedno još jednom spominjati da je ova tehnologija mnogo skuplja u računskom smislu od multisamplinga koji se koristi u modernim GPU-ovima.

Hybrid rendering engine?

Ako ste pročitali ceo članak do ove tačke, verovatno već mislite da praćenje zraka još uvek ne može da zameni rasterizaciju, ali možda je vredno mešanja dve tehnologije? I na prvi pogled se čini da se te dvije tehnologije međusobno nadopunjuju. Lako je zamisliti rasteriziranje trokuta kako biste definirali ono što je vidljivo, koristeći prednosti izvrsnih performansi tehnologije, a zatim primjenjujući praćenje zraka samo na neke površine, dodajući realizam tamo gdje je to potrebno, kao što je dodavanje sjenki ili postizanje dobrih refleksija i transparentnosti. Zapravo, Pixar je koristio ovaj pristup za crtani film "Automobili". Geometrijski modeli se kreiraju pomoću REYES-a, a praćenje zraka se koristi "na zahtjev" gdje je potrebno simulirati određene efekte.


Za automobile, Pixar je koristio hibridni mehanizam za renderiranje koji je kombinirao REYES za renderiranje i praćenje zraka na zahtjev za refleksije i ambijentalnu okluziju. Kliknite na sliku za uvećanje.

Nažalost, iako ova metoda zvuči obećavajuće, hibridna rješenja nije tako lako implementirati. Kao što smo već vidjeli, jedan od važnih nedostataka metode praćenja zraka je potreba da se struktura podataka organizira na takav način da se ograniči broj provjera za sjecište zraka i objekata. A korištenje hibridnog modela umjesto čistog praćenja zraka to ne mijenja. Potrebno je organizirati strukturu podataka zajedno sa svim nedostacima koji sa njom dolaze. Na primjer, pretpostavimo da je metoda praćenja zraka zasnovana na statičkim podacima, ali se dinamički podaci prikazuju rasterizacijom. Ali u ovom slučaju gubimo sve prednosti praćenja zraka. Budući da nema dinamičkih podataka za praćenje zraka, nećete moći natjerati objekte da bacaju sjene ili vide refleksije.

Štoviše, kada je riječ o performansama, najveći problem je pristup memoriji povezan sa sekundarnim zracima, a ovi zraci su upravo ono što nam je potrebno u našem hibridnom stroju za renderiranje. Dakle, povećanje performansi neće biti tako veliko kao što biste u početku očekivali. Budući da će većina vremena renderiranja biti potrošena na sekundarne zrake, dobitak od nerenderiranja glavnih zraka će biti zanemarljiv.

Drugim rečima, pokušavajući da kombinujemo prednosti obe metode, neizbežno kombinujemo njihove nedostatke, gubeći eleganciju metode praćenja zraka i visoke performanse rasterizacije.

Kao što smo nekoliko puta spomenuli u našem članku, postoji mnogo problema koje treba riješiti prije nego što praćenje zraka postane a dostojna alternativa rasterizacija u realnom vremenu. A ako razmislite, hoće li ova metoda postati lijek za sve bolesti? Prednosti praćenja zraka nisu toliko revolucionarne da bi opravdale značajnu kaznu performansi. Snage algoritma odnose se na refleksije i transparentnost, budući da je ova dva efekta najteže postići sa postojećim algoritmima rasterizacije. Ali, opet, da li je ovo tako ozbiljan nedostatak? Svijet oko nas ne sastoji se u potpunosti od vrlo prozirnih ili sjajnih objekata, tako da se naša vizija može zadovoljiti grubom aproksimacijom.

Ako pogledate najnovije simulatore automobila, na primjer, Gran Turismo i Forza, možete jasno vidjeti sasvim zadovoljavajuću kvalitetu renderiranja, čak i ako su refleksije na tijelu potpuno lažne. A tačan odraz retrovizora na farbi teško se može smatrati dovoljnim da se prepozna još jedan korak ka fotorealizmu.


U stvarnosti nema odraza. Na primjer, bočni retrovizor se ne odražava na karoseriju automobila. Ali da li vam je potreban "fer" prikaz Audija R8 pomoću praćenja zraka? Kliknite na sliku za uvećanje.

Većina entuzijasta vjeruje da praćenje zraka inherentno proizvodi bolju sliku od rasterizacije - ali svoje mišljenje često zasnivaju na slici koju proizvodi offline, ne-real-time engine. Međutim, rezultati takvih motora su mnogo bolji od mogućnosti modernih igara. Osim toga, postoji određena zabuna oko praćenja zraka. Entuzijasti često uspoređuju fotorealistične slike, koje se proizvode kombinacijom nekoliko tehnika, sa rasterizacijom, kao što je praćenje zraka za direktne refleksije, radiost za difuznu refleksiju, fotonsko mapiranje za kaustike, itd. Sve ove tehnologije kombinuju se kako bi pružile najfotorealističniji mogući kvalitet.


Da biste postigli fotorealističan prikaz, potrebno je kombinirati nekoliko tehnologija. Samo praćenje zraka nije dovoljno za simulaciju složenih interakcija između materijala različite vrste i svjetlo. Kliknite na sliku za uvećanje.

U svojoj osnovnoj verziji, praćenje zraka, kada se razmatraju postojeće implementacije u realnom vremenu, pogodno je samo za idealne refleksije i tvrde (oštre) sjene. Doom 3 je prije nekoliko godina dokazao da je moguće stvoriti pouzdan 3D motor koji može savršeno podnijeti dinamičke sjene i rasterizaciju, ali retrospektivno, igra je također pokazala da tvrde sjene nisu realne.


Kliknite na sliku za uvećanje.

Za stvaranje mekih sjenki ili difuznih refleksija (vrsta koju vidite na teksturiranom metalu, na primjer), potrebne su naprednije tehnike praćenja zraka kao što je praćenje putanje i/ili distribuirano praćenje zraka. Ali takve tehnike zahtijevaju znatno veći broj zraka, pa su još uvijek slabo prilagođene za realno vrijeme.

Neki korisnici vjeruju da će prije ili kasnije biti dostupna tolika procesorska snaga da prednost u performansama rasterizacije više neće biti odlučujući faktor. Zbog zakona opadajućeg prinosa, dobici u performansama od rasterizacije će brzo biti zaboravljeni u korist elegancije praćenja zraka. Na isti način kao i ranije, zaboravljene su prednosti kodiranja asemblerskog jezika u pogledu produktivnosti, koje se pokazalo nedovoljnim da nadmaše prednosti jezika visokog nivoa.

Međutim, malo je vjerovatno da će nas ovo uvjeriti. U svakom slučaju, još smo daleko od vremena kada možemo žrtvovati performanse za eleganciju i jednostavnost. Pogledajte samo šta se desilo u poslednjih 10 godina u svetu oflajn renderovanja. Dok je za renderovanje jednog kadra Priče o igračkama trebalo u prosjeku dva sata, za jedan kadar Ratatouillea bilo je potrebno šest i po sati, uprkos povećanju procesorske snage između dva filma, više od 400 puta. Drugim riječima, što više procesorske snage i resursa pružite kompjuterskim umjetnicima, to ih brže troše.

Ako čak i kompanija poput Pixara, koja sebi može priuštiti da posveti nekoliko sati računanja stvaranju jednog okvira, odluči koristiti praćenje zraka samo povremeno zbog negativnog utjecaja na performanse, to znači da ćemo vrijeme prije imati dovoljno procesorske snage u 3D igre u realnom vremenu za izvođenje svih renderiranja pomoću praćenja zraka su vrlo, vrlo daleko. I u budućnosti će entuzijasti sigurno imati gdje potrošiti takvu računarsku snagu.

Metode praćenja zraka trenutno se smatraju najviše moćne metode stvaranje realističnih slika. Svestranost metoda praćenja uvelike je posljedica činjenice da se one temelje na jednostavnim i jasnim konceptima koji odražavaju naše iskustvo opažanja svijeta oko nas.

Pogledajmo kako se formira slika. Slika se proizvodi svjetlošću koja ulazi u kameru. Pustimo mnogo zraka iz izvora svjetlosti. Nazovimo ih primarnim zracima. Neki od ovih zraka će odletjeti u slobodni prostor, a neki će pogoditi objekte. Zrake se mogu lomiti i reflektirati na njih. U tom slučaju, dio energije zraka će se apsorbirati. Prelomljene i reflektirane zrake formiraju mnoge sekundarne zrake. Tada će se ovi zraci ponovo lomiti i reflektovati i formirati novu generaciju zraka. Na kraju će neki zraci pogoditi kameru i formirati sliku.

Postoje algoritmi koji rade po ovom algoritmu. Ali oni su izuzetno neefikasni, jer većina zraka koje izlaze iz izvora ne dopire do kamere. A prihvatljiva slika se dobija ako se uđe u trag veliki broj zraka, što će trajati veoma dugo. Ovaj algoritam se zove direktno praćenje zraka.

Metoda obrnutog praćenja zraka može značajno smanjiti potragu za svjetlosnim zrakama. Ovu metodu su 1980-ih razvili Whitted i Kaye. U ovoj metodi, zraci se ne prate iz izvora, već iz kamere. Tako se to prati određeni broj zrake jednake rezoluciji slike.

Pretpostavimo da imamo kameru i ekran koji se nalaze na udaljenosti h od nje. Podijelimo ekran na kvadrate. Zatim ćemo naizmjence crtati zrake od kamere do centra svakog kvadrata (primarne zrake). Nađimo raskrsnicu svakog takvog zraka sa objektima scene i odaberimo onaj koji je najbliži kameri među svim raskrsnicama. Zatim, primjenom željenog modela osvjetljenja, možete dobiti sliku scene. Ovo je najjednostavniji metod praćenja zraka. Omogućava vam samo da odsiječete nevidljive ivice.

Ali možemo ići dalje. Ako želimo da simuliramo fenomene kao što su refleksija i refrakcija, moramo da lansiramo sekundarne zrake sa najbližeg raskrsnice. Na primjer, ako površina reflektira svjetlost i savršeno je ravna, tada je potrebno reflektirati primarni zrak od površine i poslati sekundarni zrak u tom smjeru. Ako je površina neravna, tada je potrebno pokrenuti mnogo sekundarnih zraka. To se ne radi u programu, jer će to uvelike usporiti praćenje.

Ako je objekt proziran, tada je potrebno konstruirati sekundarnu zraku tako da kada se prelama proizvodi izvornu zraku. Neka tijela mogu imati svojstvo difuzne refrakcije. U ovom slučaju nastaje ne jedna, već mnogo prelomljenih zraka. Kao i kod refleksije, zanemarujem ovo.

Dakle, primarna zraka, nakon što je pronašla raskrsnicu s objektom, općenito se dijeli na dvije zrake (odbijene i prelomljene). Zatim se ova dva zraka dijele na još dva i tako dalje.

Glavna procedura obrnutog praćenja zraka u mom programu je Ray procedura. Ima sledeću strukturu:

Ako je generiranje zraka jednako maksimalnoj dubini rekurzije, tada vraćamo prosječnu svjetlinu za sve komponente. Ako ne, onda idite dalje

Određujemo najbliži trougao sa kojim se zraka siječe.

Ako takvog trokuta nema, vratite boju pozadine, ako postoji, idite dalje.

Ako je površina s kojom je pronađena raskrsnica reflektirajuća, tada formiramo reflektiranu zraku i rekurzivno pozivamo proceduru Ray s generiranjem zraka uvećanim za 1.

Ako se površina s kojom je pronađena raskrsnica lomi, tada formiramo prelomljenu zraku i rekurzivno pozivamo Ray proceduru s povećanjem generiranja zraka za 1.

Određujemo konačno osvjetljenje piksela, uzimajući u obzir lokaciju izvora, svojstva materijala, kao i intenzitet reflektiranog i prelomljenog zraka.

Već sam raspravljao o brojnim ograničenjima metode praćenja kada smo govorili o difuznoj refrakciji i neujednačenim zrcalima. Pogledajmo neke druge.

Samo specijalni objekti - izvori svjetlosti - mogu osvijetliti scenu. Oni su točkasti i ne mogu apsorbirati, prelamati ili reflektirati svjetlost.

Svojstva reflektirajuće površine sastoje se od dvije komponente - difuzne i zrcalne.

Kod difuzne refleksije uzimaju se u obzir samo zraci iz izvora svjetlosti. Ako izvor osvjetljava tačku kroz ogledalo (sa zečićem), onda se smatra da tačka nije osvijetljena.

Spekularnost je također podijeljena na dvije komponente.

refleksija - uzima u obzir refleksiju od drugih objekata (ne izvora svjetlosti)

spekularni - uzima u obzir odsjaj od izvora svjetlosti

Praćenje ne uzima u obzir zavisnosti od talasne dužine svetlosti:

indeks prelamanja

koeficijent apsorpcije

koeficijent refleksije

Pošto ne modeliram difuznu refleksiju i prelamanje, neću moći da dobijem pozadinsko osvetljenje. Stoga uvodimo minimalno pozadinsko osvjetljenje. Često vam jednostavno omogućava da značajno poboljšate kvalitetu slike.

Algoritam praćenja vam omogućava da nacrtate vrlo kvalitetne sjene. Ovo neće zahtijevati mnogo prerade algoritma. Morat ćete nešto dodati. Prilikom izračunavanja osvjetljenja tačaka, potrebno je u svaki od izvora svjetlosti postaviti „Frond sjene“. "Prednja sjena" je zrak koji provjerava da li postoji nešto između tačke i izvora. Ako se između njih nalazi neproziran predmet, onda je tačka u sjeni. To znači da ovaj izvor ne doprinosi konačnom osvjetljenju tačke. Ako prozirni predmet leži, onda se intenzitet izvora smanjuje. Crtanje senki oduzima mnogo vremena. Dakle, u nekim situacijama su onesposobljene.

Moj program ima mogućnost da omogući izglađivanje slike. Antialiasing se odnosi na određivanje boje piksela. Ne lansira se jedan, već četiri i određuje se prosječna vrijednost boje ovih zraka. Ako je potrebno pronaći boju piksela (i,j), tada se 4 zraka šalju u tačke na ravni ekrana sa koordinatama (i-0.25,j-0.25), (i-0.25,j+0.25), (i+0,25,j-0,25) , (i+0,25,j+0,25).

Na Gamescom 2018 Nvidia je najavila seriju video kartica Nvidia GeForce RTX, koji će podržavati Nvidia RTX tehnologiju praćenja zraka u realnom vremenu. Naši urednici su shvatili kako će ova tehnologija funkcionirati i zašto je potrebna.

Šta je Nvidia RTX?

Nvidia RTX je platforma koja sadrži nekoliko korisni alati za programere koji otvaraju pristup novom nivou kompjuterske grafike. Nvidia RTX je dostupan samo za novu generaciju Nvidia video kartice GeForce RTX, izgrađen na Turing arhitekturi. Glavna karakteristika platforme je dostupnost praćenje zraka u realnom vremenu(koji se naziva i praćenje zraka).

Šta je praćenje zraka?

Praćenje zraka je funkcija koja vam omogućava da simulirate ponašanje svjetlosti, stvarajući uvjerljivo osvjetljenje. Sada se u igrama zraci ne pomiču u realnom vremenu, zbog čega slika, iako često izgleda lijepo, još uvijek nije dovoljno realna - tehnologije koje se sada koriste zahtijevale bi ogromne količine resursa za praćenje zraka.

Ovo je ispravljeno novom serijom Nvidia GeForce RTX video kartica, koje imaju dovoljno snage da izračunaju putanju zraka.

Kako radi?

RTX projektuje zrake svetlosti sa tačke gledišta igrača (kamere) na okolni prostor i tako izračunava gde bi se piksel boje trebao pojaviti. Kada zraci udare u nešto, oni mogu:

  • Odraziti - to će izazvati pojavu refleksije na površini;
  • Zaustavite se - ovo će stvoriti sjenu na strani objekta na koju svjetlost nije udarila
  • Prelomiti - ovo će promijeniti smjer zraka ili utjecati na boju.
Prisutnost ovih funkcija omogućava vam stvaranje uvjerljivijeg osvjetljenja i realističnije grafike. Ovaj proces je veoma intenzivan i dugo se koristi u stvaranju filmskih efekata. Jedina razlika je u tome što pri renderiranju filmskog kadra autori imaju pristup velikom broju resursa i, moglo bi se reći, neograničenom vremenskom periodu. U igricama uređaj ima samo djelić sekunde za generiranje slika, a najčešće se koristi jedna video kartica, a ne nekoliko, kao kod obrade filmova.

Ovo je navelo Nvidiju da uvede dodatna jezgra u GeForce RTX grafičke kartice, koje će preuzeti većinu opterećenja, poboljšavajući performanse. Opremljeni su i umjetnom inteligencijom, čiji je zadatak izračunavanje moguće greške tokom procesa praćenja, što će pomoći da se izbjegnu unaprijed. Ovo će, kako kažu programeri, povećati i brzinu rada.

I kako praćenje zraka utječe na kvalitetu?

Tokom prezentacije video kartica, Nvidia je demonstrirala niz primjera praćenja zraka: posebno je postalo poznato da neke nadolazeće igre, uključujući Shadow of grobnica Raider i Battlefield 5 će raditi na RTX platformi. Ova funkcija će, međutim, biti opciona u igri, jer je za praćenje potrebna jedna od novih video kartica. Prikolice koje je kompanija prikazala tokom prezentacije možete pogledati u nastavku:

Shadow of the Tomb Raider, koji će biti objavljen 14. septembra ove godine:

Battlefield 5, koji će biti objavljen 19. oktobra:

Metro Exodus, planirano za puštanje 19. februara 2019.:

Kontrola, čiji datum izlaska još uvijek nije poznat:

Uz sve ovo, Nvidia, koje druge igre će dobiti funkciju praćenja zraka.

Kako omogućiti RTX?

U pogledu na tehničke karakteristike Sa ovom tehnologijom, praćenje praćenja će biti podržano samo na video karticama sa Turing arhitekturom - trenutno dostupni uređaji ne mogu da se nose sa količinom posla koji zahteva praćenje. U ovom trenutku, jedine video kartice sa ovom arhitekturom su Nvidia GeForce RTX serija, čiji modeli su dostupni za pretprodaju od 48.000 do 96.000 rubalja.

Da li AMD ima analoge?

AMD ima svoju verziju tehnologije praćenja zraka u realnom vremenu, koja je prisutna u njihovom Radeon ProRender engine-u. Kompanija je najavila svoj razvoj još na GDC 2018, koji se održao u martu. Glavna razlika između AMD-ove i Nvidijine metode je u tome što AMD daje pristup ne samo praćenju, već i rasterizaciji, tehnologiji koja se sada koristi u svim igrama. Ovo vam omogućava da koristite praćenje, dobijete bolje osvetljenje i uštedite resurse na mestima gde bi praćenje bilo nepotrebno opterećenje za video karticu.

Tehnologija koja će raditi na Vulkan API-ju je još u razvoju.

Kako je Nvidia navela tokom svoje prezentacije, savladavanje RTX tehnologije značajno će poboljšati grafičku komponentu igara, proširujući set alata dostupnih programerima. Međutim, prerano je govoriti o općoj grafičkoj revoluciji – neće sve igre podržavati ovu tehnologiju, a cijena video kartica koje je podržavaju je prilično visoka. Prezentacija novih video kartica znači napredak u grafički detalji postoji, i vremenom će rasti i rasti.

Metoda povratnog traganja

Metoda backtrace zraci vam omogućavaju značajno smanjenje prekomjernog broja svjetlosnih zraka. Metoda je razvijena 80-ih godina, razmatraju se osnovni radovi Whitted I Kaya. Prema ovoj metodi, zraci se ne prate iz izvora svjetlosti, već u suprotnom smjeru - tačke posmatranja. Na ovaj način se uzimaju u obzir samo oni zraci koji doprinose formiranju slike.

Pogledajmo kako možete dobiti rastersku sliku neke trodimenzionalne scene koristeći metodu backtracinga. Pretpostavimo da je ravnina projekcije podijeljena na mnogo kvadrata - piksela. Odaberimo centralnu projekciju sa centrom koji nestaje na određenoj udaljenosti od ravni projekcije. Nacrtajmo pravu liniju od centra koji nestaje kroz sredinu kvadrata (piksela) ravni projekcije. Ovo će biti primarni zrak za praćenje pozadi. Ako ravna linija ove zrake pogodi jedan ili više objekata u sceni, odaberite najbližu točku presjeka. Da biste odredili boju piksela slike, morate uzeti u obzir svojstva objekta, kao i to koje svjetlosno zračenje pada na odgovarajuću tačku objekta.

Ako je objekt zrcaljen (barem djelomično), tada konstruiramo sekundarnu zraku - upadnu zraku, smatrajući prethodni, primarni trasirani zrak kao refleksiju. Iznad smo razmotrili zrcalni odraz i dobili formule za vektor reflektovanog zraka na osnovu datih vektora normalne i upadne zrake. Ali ovdje znamo vektor reflektirane zrake, ali kako možemo pronaći vektor upadne zrake? Da biste to učinili, možete upotrijebiti istu formulu zrcalne refleksije, ali definirajući potrebni vektor upadne zrake kao reflektiranu zraku. Odnosno, suprotan odraz i.

Za idealno ogledalo, tada je dovoljno pratiti samo sledeću tačku preseka sekundarne zrake sa nekim objektom. Nesavršeno ogledalo uvelike otežava praćenje - morate pratiti ne jednu, već mnogo upadnih zraka i uzeti u obzir doprinos zračenja drugih objekata vidljivih iz date tačke.

Ako je objekt transparentan, onda morate izgraditi nova greda, takav da bi, kada se prelama, dao prethodni trasirani zrak. Ovdje također možete iskoristiti prednost reverzibilnosti, što vrijedi i za refrakciju.

Ako predmet ima svojstva difuzne refleksije i prelamanja, tada je, u općem slučaju, kao i za neidealno ogledalo, potrebno pratiti zrake koje dolaze iz svih postojećih objekata. Za difuznu refleksiju, poznato je da je intenzitet reflektovane svjetlosti proporcionalan kosinusu ugla između vektora zraka iz izvora svjetlosti i normale. Ovdje izvor svjetlosti može biti bilo koji objekt vidljiv iz date tačke koji može prenositi svjetlosnu energiju.

Kad se ispostavi; da trenutna zraka za praćenje unazad ne siječe nijedan objekt, već ide u slobodni prostor, tada se praćenje za ovu zraku završava.

Rice. 14.1 Primjer obrnutog praćenja zraka.

Traženje zraka unazad u obliku u kojem smo ga ovdje razmatrali, iako smanjuje pretragu, ne dozvoljava nam da se riješimo beskonačnosti broja analiziranih zraka. U stvari, ova metoda vam omogućava da odmah dobijete jednu primarnu zraku za praćenje unazad za svaku tačku slike. Međutim, već može postojati beskonačan broj sekundarnih refleksijskih zraka. Tako, na primjer, ako objekt može reflektirati svjetlost od bilo kojeg drugog objekta, i ako su ti drugi objekti dovoljno veliki, onda koje točke emitujućih objekata treba uzeti u obzir da bi se konstruirale odgovarajuće zrake, na primjer, u difuznoj refleksiji ? Očigledno, sve tačke.

Kako radi metoda praćenja zraka:

1. Zamišljeni zrak se emituje iz oka posmatrača kroz određeni piksel na ekranu i prati se njegova putanja sve dok ne preseče objekat.

2. Reflektovani zrak se emituje iz prve tačke preseka zraka sa sferom. Neka površina bude neprozirna. Tada ne crtamo prelomljene zrake. Označavamo zraku sjene od točke presjeka do izvora svjetlosti. Pošto ovaj zrak ne siječe drugu neprozirnu površinu, izvor svjetlosti direktno utiče na intenzitet osvjetljenja u datoj tački.

3. Neka reflektirana zraka presječe drugi objekt, ovaj put prozirnu sferu koja reflektira i propušta svjetlost. Odbijene i prelomljene zrake emituju se zajedno sa zrakom sjene koji ide do izvora svjetlosti. Propuštena zraka mijenja svoj smjer prije i nakon ulaska u sferu u skladu sa efektom refrakcije.

4. Neka tačka u kojoj zraka seče sferu ne bude direktno osvijetljena izvorom, jer je put zraka sjene blokirana neprozirnom površinom. Ako bi scena sadržavala više izvora svjetlosti, tada bi se zrake sjene morale ispaliti na svaki od njih.

5. Utjecaj svih zraka generiranih eksplicitno ili implicitno od strane početnog zraka se sumira i rezultat određuje RGB vrijednost te tačke.

UVOD

Postoji nekoliko metoda za generiranje realističnih slika, kao što je praćenje zraka naprijed (praćenje fotona) i obrnuto praćenje zraka.

Metode praćenja zraka smatraju se najmoćnijim i univerzalne metode stvaranje realističnih slika. Postoji mnogo primjera implementacije algoritama praćenja za visokokvalitetan prikaz najsloženijih trodimenzionalnih scena. Može se primijetiti da je univerzalnost metoda praćenja u velikoj mjeri posljedica činjenice da se one temelje na jednostavnim i jasnim konceptima koji odražavaju naše iskustvo sagledavanja svijeta oko nas.

Predmeti oko nas imaju sledeća svojstva u odnosu na svetlost:

zračiti;

reflektuju i apsorbuju;

prolaze kroz sebe.

Svako od ovih svojstava može se opisati određenim skupom karakteristika.

Zračenje se može okarakterisati po intenzitetu i spektru.

Svojstvo refleksije (apsorpcije) može se opisati karakteristikama difuznog raspršenja i zrcalne refleksije. Transparentnost se može opisati slabljenjem intenziteta i lomom.

Zraci svjetlosti izlaze iz tačaka na površini (volumen) objekata koji emituju. Takve zrake možete nazvati primarnim - oni osvjetljavaju sve ostalo. Bezbroj primarnih zraka emanira iz izvora zračenja u različitim smjerovima. Neki zraci idu u slobodan prostor, a neki pogađaju druge objekte.

Kao rezultat djelovanja primarnih zraka na objekte, nastaju sekundarne zrake. Neki od njih završe na drugim objektima. Tako, reflektujući se i prelamajući mnogo puta, pojedinačni svetlosni zraci dolaze do tačke posmatranja. Dakle, sliku scene formira određeni broj svjetlosnih zraka.

Boja pojedinačnih tačaka slike određena je spektrom i intenzitetom primarnih zraka izvora zračenja, kao i apsorpcijom svetlosne energije u objektima koji se susreću na putu odgovarajućih zraka.

Direktna implementacija ovog modela snimanja zraka izgleda teško. Možete pokušati da konstruišete algoritam za izgradnju slike koristeći naznačenu metodu. U takvom algoritmu potrebno je obezbijediti nabrajanje svih primarnih zraka i odrediti one koji pogađaju objekte i kameru. Zatim iterirajte sve sekundarne zrake i uzmite u obzir samo one koji pogađaju objekte i kameru. I tako dalje. Ovaj algoritam se zove direktno praćenje zraka. Glavni nedostatak Ova metoda uključuje mnogo nepotrebnih operacija povezanih s izračunavanjem zraka, koje se tada ne koriste.

1. OBRATNO PRANJE ZRAKA

Ovaj rad je posvećen ovoj metodi generiranja realističnih slika.

Metoda obrnutog praćenja zraka može značajno smanjiti potragu za svjetlosnim zrakama. Metoda je razvijena 80-ih godina; djela Whitteda i Kaya smatraju se fundamentalnim. Prema ovoj metodi, zraci se ne prate iz izvora svjetlosti, već u suprotnom smjeru - od točke posmatranja. Na ovaj način se uzimaju u obzir samo oni zraci koji doprinose formiranju slike.

Projekciona ravnina je podijeljena na mnogo piksela. Odaberimo centralnu projekciju sa centrom koji nestaje na određenoj udaljenosti od ravni projekcije. Nacrtajmo pravu liniju od centra koji nestaje kroz sredinu piksela ravni projekcije. Ovo će biti primarni zrak za praćenje pozadi. Ako ovaj zrak pogodi jedan ili više objekata u sceni, odaberite najbližu točku raskrsnice. Da biste odredili boju piksela slike, morate uzeti u obzir svojstva objekta, kao i to koje svjetlosno zračenje pada na odgovarajuću tačku objekta.

Ako je objekt zrcaljen (barem djelomično), tada konstruiramo sekundarnu zraku - upadnu zraku, smatrajući prethodni, primarni trasirani zrak kao refleksiju.

Za idealno ogledalo, tada je dovoljno pratiti samo sledeću tačku preseka sekundarne zrake sa nekim objektom. Idealno ogledalo ima savršeno glatku poliranu površinu, tako da jedna reflektovana zraka odgovara samo jednoj upadnoj. Ogledalo se može zatamniti, odnosno apsorbirati dio svjetlosne energije, ali pravilo i dalje ostaje: jedan zrak upada, jedan se odbija.

Ako je objekt proziran, onda je potrebno konstruirati novu zraku, koja bi, kada se prelama, proizvela prethodnu trasiranu zraku.

Za difuznu refleksiju, poznato je da je intenzitet reflektovane svjetlosti proporcionalan kosinusu ugla između vektora zraka iz izvora svjetlosti i normale.

Kada se ispostavi da trenutna zraka za praćenje unazad ne siječe nijedan objekt, već ide u slobodni prostor, tada se praćenje za ovu zraku završava.

At praktična implementacija Metoda praćenja uvodi ograničenja. Neki od njih su neophodni da bi se u principu mogao riješiti problem sinteze slike, a neka ograničenja mogu značajno poboljšati performanse praćenja.

Ograničenja pri implementaciji praćenja

Među svim vrstama objekata izdvojićemo neke koje ćemo nazvati izvorima svjetlosti. Izvori svjetlosti mogu samo emitovati svjetlost, ali je ne mogu reflektirati ili prelamati. Razmotrit ćemo samo tačkaste izvore svjetlosti.

Svojstva reflektirajućih površina opisuju zbirom dvije komponente - difuzne i zrcalne.

Zauzvrat, spekularnost se također opisuje sa dvije komponente. Prvi (refleksija) uzima u obzir refleksiju od drugih objekata koji nisu izvori svjetlosti. Samo jedna zrcalna zraka r je konstruisana za dalje praćenje. Druga komponenta (spekularna) znači odsjaj od izvora svjetlosti. Da bi se to postiglo, zraci se usmjeravaju na sve izvore svjetlosti i određuju se uglovi koje ti zraci formiraju sa reflektiranom zrakom za praćenje unatrag (r). Kod spekularne refleksije, boja tačke na površini određena je unutrašnjom bojom onoga što se reflektuje.

Kod difuzne refleksije uzimaju se u obzir samo zraci iz izvora svjetlosti. Zraci sa reflektirajućih površina se IGNORISTE. Ako je snop usmjeren na dati izvor svjetlosti blokiran drugim objektom, tada je ova tačka objekta u sjeni. Kod difuzne refleksije, boja osvijetljene tačke na površini određena je vlastitom bojom površine i bojom izvora svjetlosti.

Za prozirne objekte, ovisnost indeksa loma o talasnoj dužini se ne uzima u obzir. (Ponekad se prozirnost modelira bez prelamanja, odnosno, smjer prelomljene zrake t poklapa se sa smjerom upadne zrake.)

Da bi se uzela u obzir osvjetljenje objekata svjetlošću raspršenom drugim objektima, uvodi se pozadinska komponenta (ambijent).

Da bi se završilo praćenje, uvodi se ograničenje broja iteracija (dubina rekurzije).

Zaključci iz metode praćenja

Prednosti:

Svestranost metode, njena primjenjivost za sintezu slika prilično složenih prostornih shema. Utjelovljuje mnoge zakone geometrijske optike. Razne projekcije se jednostavno provode.

Čak i skraćene verzije ove metode omogućavaju dobijanje prilično realističnih slika. Na primjer, ako se ograničimo samo na primarne zrake (od tačke projekcije), onda to rezultira uklanjanjem nevidljivih tačaka. Praćenje samo jedne ili dvije sekundarne zrake daje senke i zrcalna transparentnost.

Sve transformacije koordinata su linearne, tako da je prilično lako raditi sa teksturama.

Nedostaci:

Problemi s modeliranjem difuzne refleksije i prelamanja.

Za svaku tačku na slici potrebno je izvršiti mnoge računske operacije. Praćenje je jedan od najsporijih algoritama za sintezu slike.

2. DIO DIZAJNA

Algoritmi.

Traženje zraka unazad.

Rice. 1 - Blok dijagram ponavljajućeg algoritma inverznog praćenja zraka

programski jezik za praćenje zraka

U ovom programu, algoritam praćenja unazad se implementira na ponavljajući način. Funkcija izračunavanja intenziteta primarne zrake se ponavlja kako bi pronašla reflektovane i prelomljene intenzitete zraka.

algoritam:

Da biste izračunali boju svakog piksela u baferu okvira, uradite sljedeće:

Pronađite koordinate piksela u svjetskom koordinatnom sistemu.

Pronađite koordinate primarnog zraka.

Pokrenite funkciju proračuna intenziteta primarnog snopa.

Pronađite raskrsnice zraka sa svim primitivima scene i odaberite najbliži.

Ako se raskrsnica ne pronađe, onda je greda otišla u slobodan prostor.

Da bismo izračunali boju, uzimamo da je ukupan intenzitet jednak intenzitetu pozadine. Idite na korak 12. Ako se pronađe raskrsnica, idite na korak 6.

Izračunavamo „lokalni“ intenzitet boje objekta kojem pripada tačka presjeka. Pod „lokalnim“ intenzitetom podrazumevamo intenzitet koji uzima u obzir intenzitet difuzno reflektovane svetlosti i intenzitet odsjaja.

Ako materijal reflektira svjetlost samo difuzno, onda smatramo da su intenziteti reflektirane i prelomljene svjetlosti jednaki nuli. Idite na korak 12. U suprotnom idite na korak 8.

Ako se dostigne maksimalna dubina rekurzije, onda uzmite intenzitete reflektovane i prelomljene svjetlosti kao nula. Idite na korak 12. U suprotnom idite na korak 9.

Izračunajte vektor reflektovanog zraka. Izvođenje rekurzije za pronalaženje intenziteta reflektovanog snopa.

Izračunajte vektor prelomljenog zraka. Izvođenje rekurzije za pronalaženje intenziteta prelomljenog zraka.

Proračun ukupnog intenziteta boje. Ukupni intenzitet uključuje intenzitet raspršene svjetlosti, lokalni intenzitet i intenzitete reflektiranih i prelomljenih zraka.

Vratite se na tačku gdje je pozvana funkcija proračuna intenziteta zraka.

Ako je primarni zrak bio izračunat, tada se piksel izračunate boje stavlja u bafer okvira. Pređimo na izračunavanje sljedećeg piksela bafera okvira.Ako se računala reflektovana (prelomljena) zraka, onda će izračunati intenzitet biti prihvaćen kao intenzitet reflektovanog (prelomljenog) zraka u prethodnom koraku rekurzije.

Konstrukcija senki.

Čvrste senke.

Da bi se konstruisale čvrste senke u algoritmu praćenja, u fazi izračunavanja „lokalnog“ intenziteta boje u tački objekta, proverava se „vidljivost“ svakog izvora svetlosti iz ove tačke.

Princip rada algoritma.

Snop se konstruiše iz tačke koja se proverava, usmerena na izvor svetlosti.

Pretraživanje se vrši za presecima ovog zraka sa primitivima scene između tačke koja se proverava i izvora.

Ako je pronađeno barem jedno raskršće, tada je tačka koja se provjerava u sjeni. Prilikom izračunavanja njegove boje ne uzima se u obzir izvor za koji je izvršeno ispitivanje.

provjerljivi izvor.

Ova metoda pronalaženja senki daje prihvatljiv rezultat sve dok u sceni nema prozirnih objekata. Međutim, čvrsta crna sjena stakla ne izgleda realistično. Staklo propušta nešto svjetlosti, tako da se intenzitet zamračenog izvora mora uzeti u obzir pri izračunavanju intenziteta svjetlosti u nekoj tački na objektu, ali se mora prigušiti kako svjetlost prolazi kroz staklo.

Matematička i fizička pozadina inverznog algoritma praćenja zraka.

Osvetljenje.

Intenzitet svjetla je zbir intenziteta pozadinskog osvjetljenja scene, intenziteta difuzno reflektirane svjetlosti od izvora, intenziteta odsjaja od izvora („lokalne“ karakteristike osvjetljenja), intenziteta reflektiranog snopa i intenzitet prelomljenog zraka, ako ga ima.

Intenzitet pozadinskog osvetljenja (IA) je postavljen nekom konstantom.

Intenzitet difuzno reflektovane svjetlosti (ID) izračunava se korištenjem klasičnog „kosinusnog zakona“.

ID = IL cos α,(2.2.1.6)

gdje je IL intenzitet izvora svjetlosti, α je ugao između normale na površinu i smjera prema izvoru.

Ako je scena osvijetljena iz više izvora, Id se izračunava za svaki od njih i zatim se zbraja.

IDi =Σ ILI cos αi.(2.2.1.7)

Intenzitet izvorne baklje (IS) izračunat je prema Phong modelu.

IS = IL cosp β,(2.2.1.8)

gdje je IL intenzitet izvora svjetlosti (0<=IL<=1), β - угол между отраженным лучом от источника света и направлением на точку, в которой расположена камера (центр проекции), p - некоторая степень от 1 до 200 -влияет на размытость блика. При

Pri malim p vrijednostima osvjetljenje je mutnije.

Kao i kod izračunavanja ID-a, kada je scena osvijetljena iz više izvora, IS se izračunava zasebno za svaki izvor, a zatim se rezultati zbrajaju.

ISi =Σ ILI cosp β i.(2.2.1.9)

Intenzitet reflektovanog (IR) i prelomljenog (IT) svetlosti se izračunava za reflektovane i prelomljene zrake u sledećem koraku rekurzije. Ako se dostigne granica dubine rekurzije, tada se ovi intenziteti uzimaju kao nula. Od intenziteta IR uzima se r posto, a od IT - t = 1 - r (vidi prethodni odjeljak).

Dodatno se uvode i sljedeći koeficijenti: KD - koeficijent refleksije difuzne površine, KS - koeficijent odsjaja - ovaj koeficijent je karakteristika hrapavosti reflektirajuće površine. Što je površina neravnija, to se manje svjetlosti reflektira od nje reflektirajuće i manje svjetlosti propušta, a samim tim i više svjetlosti reflektira difuzno.<= KD <= 1.

Kod KD = 0, sva svjetlost koja pada na površinu se odbija i lomi. KD = 1 - sva svjetlost se reflektira difuzno. Intenzitet difuzno reflektovane svjetlosti i intenzitet pozadinskog osvjetljenja množe se ovim faktorom. Intenzitet zrcalno reflektovane i prelomljene svjetlosti se množi sa (1 - KD) - ovaj koeficijent je odgovoran za svjetlinu odsjaja iz izvora. 0<=KS<=1.

Kada je KS = 0 - odsjaj nije vidljiv, kada je KS = 1 - svjetlina odsjaja je maksimalna.

Dakle, konačna formula za izračunavanje intenziteta objekta u bilo kojoj tački bit će sljedeća:

I = IAKD + ​​Σ(ILiKDcos αi + ILiKScosp β i) + (1 - KD)(IRr + IT(1 - r)).(2.2.1.10)

Treba napomenuti da konačni intenzitet ne bi trebao biti veći od jedan. Ako se to dogodi, tada će ova tačka na slici biti preeksponirana. Njegov intenzitet se mora vratiti na jedan.

Da biste dobili sliku u boji, potrebno je izvršiti proračune odvojeno za crvenu, zelenu i plavu komponentu svjetlosti. Boja piksela slike će se izračunati množenjem svake komponente intenziteta brojem koji određuje maksimalan broj gradacija intenziteta na slici. Za 32-bitnu sliku to je jednako 255 za svaku boju (R, G, B).

255*IR,= 255*IG,= 255*IB.

Ovde IR (ne treba mešati sa intenzitetom reflektovane svetlosti), IG, IB su intenziteti tri komponente svetlosti u jednoj tački, dobijeni korišćenjem gore navedene formule.

Koeficijenti KD, KS, p su individualne karakteristike objekta koje odražavaju njegova svojstva. Osim toga, postoji još jedan koeficijent - apsolutni indeks loma n. n = c / v, gdje je c brzina svjetlosti u vakuumu, v je brzina svjetlosti u mediju (unutar objekta). Za apsolutno neprozirna tijela, ovaj koeficijent je jednak ∞ (pošto je brzina svjetlosti unutar tijela nula). U programu da biste odredili potpuno neprozirno tijelo, morate postaviti ovaj koeficijent >> 1 (oko 10.000). U ovom slučaju, udio reflektirane svjetlosti r težiće ka jedinici, a dio refraktirane svjetlosti, respektivno, nuli.

Proračun normala.

U algoritmu praćenja, normale na objekte su potrebne za izračunavanje reflektiranih i prelomljenih zraka, kao i za određivanje osvjetljenja prema Phongovom modelu.

Ovaj program sadrži tri vrste primitiva od kojih se gradi scena. To su poligon (trokut), elipsoid i paraboloid. Posljednja dva su uvedena za realističniju simulaciju stakla (mogla je biti napravljena od poligona, ali bi model bio grublji).

Izračunavanje normale na poligon (trokut).

Izračunavanje normale na trokut svodi se na operaciju vektorskog množenja. Neka je trokut ABC zadan koordinatama njegova tri vrha:

XA, YA, ZA, XB, YB, ZB, XC, YC, ZC.

Izračunajmo koordinate dva vektora, na primjer AB i AC:

XB - XA,= XB - XA,

ZAB = XB - XA,(2.2.2.1)= XC - XA,= XC - XA,= XC - XA.

Koordinate vektora normale će se izračunati pomoću formula:

YABZAC - YACZAB,= XABZAC - XACZAB,(2.2.2.2)= XABYAC - XACYAB.

Nema potrebe da se izračunavaju koordinate vektora normale na trokut svaki put u tijelu praćenja, jer su normale iste u bilo kojoj tački trougla. Dovoljno ih je jednom prebrojati u inicijalizacijskom dijelu programa i sačuvati. Kada rotirate trougao, morate rotirati i njegovu normalu.

Proračun normalne površine drugog reda.

Površina drugog reda je data u opštem slučaju jednadžbom oblika:

Q(x,y,z) = a1x2 + a2y2 + a3z2 + b1yz + b2xz + b3xy + c1x +c2y +c3z + d =0.

Ali mi ćemo koristiti drugačiji oblik snimanja. Dakle, jednadžba elipsoida će izgledati ovako:

(x-x0)2/A2 + (y-y0)2/B2 + (z-z0)2 /C2 = 1, (2.2.2.3)

gdje su x0, y0, z0 koordinate centra elipsoida, A, B, C su dužine poluosi elipsoida.

Paraboloidna jednadžba:

(x-x0)2/A2 + (y-y0)2/B2 - (z-z0)2 /C2 = 1, (2.2.2.4)

gdje su x0, y0, z0 koordinate centra paraboloida, A, B, C su dužine poluosi paraboloida. Osa paraboloida nalazi se duž Oz ose svjetskog koordinatnog sistema. Za izračunavanje koordinata vektora normale potrebno je izračunati parcijalne derivacije u odnosu na x, y, z.

Koordinate vektora normale elipsoida:

Yn = 2(y-y0)/B2,= 2(z-z0)/C2.

Smjer vektora se neće promijeniti ako se sve njegove koordinate podijele sa 2:

Xn = (x-x0)/A2,= (y-y0)/B2,(2.2.2.5)

Zn = (z-z0)/C2.

Koordinate paraboloidnog normalnog vektora izračunavaju se na sličan način:

Xn = (x-x0)/A2,= (y-y0)/B2,(2.2.2.6)

Zn = - (z-z0)/C2.

Normala za površinu drugog reda morat će se izračunati direktno u tijelu praćenja, budući da su normale različite u različitim tačkama figure.

Proračun reflektovanog zraka.

Neka je zadan vektor upadne zrake S, a poznat je vektor normale N. Trebamo pronaći vektor reflektovanog zraka R.

Razmotrimo jedinične vektore R1, S1 i N1. Kako su vektori normale, upadne zrake i reflektirane zrake u istoj ravni, možemo napisati R1 + S1 = N`, gdje je N` vektor koji odgovara dijagonali romba i poklapa se u smjeru s normalom . Dužina vektora N` je 2cosθ. Pošto se vektor N` poklapa u pravcu sa N1, onda

N` = N`2cosθ.

Odavde nalazimo jedinični vektor reflektovanog zraka:

R1 = N1 2cosθ - S1 = N/|N| 2cosθ - S/|S|.

Nađimo cosθ. To se može učiniti pomoću skalarnog proizvoda vektora N i S:


Uz pretpostavku da će željeni vektor reflektovanog zraka imati istu dužinu kao i vektor upadnog zraka, odnosno R = |S| R1, dobijamo

N 2NS/|N|2 - S.

Ovo je rješenje u vektorskom obliku. Zapišimo koordinate vektora:

2xN(xNxS+yNyS+zNzS)/(xN2+yN2+zN2) - xS,= 2yN(xNxS+yNyS+zNzS)/(xN2+yN2+zN2) - yS,(2.2.3.1)= 2zN(xNxSx) +zNzS)/(xN2+yN2+zN2) - zS.

Proračun prelomljenog zraka.

Neka su data dva jedinična vektora: S1 je vektor upadne zrake, a N1 je vektor normale na interfejs između dva medija. Takođe, za ove medije moraju biti poznata dva indeksa prelamanja - n1 i n2 (ili njihov odnos).

Potrebno je pronaći jedinični vektor prelomljenog zraka T1. Da bismo to riješili, izvršimo neke geometrijske konstrukcije.

Traženi vektor T1 jednak je zbroju dva vektora:

Nađimo prvo vektor NT. U suprotnom je smjeru od vektora normale, a njegova dužina je |T1| cos α2 = cos α2 (pošto je T1 jedinica). Dakle, NT = -N1 cos α2. Potrebno je odrediti cos α2. Zapišimo zakon loma n1 sin α1 = n2 sin α2 u obliku:

sin α2 = n sin α1,

gdje je n = n1 / n2.

Koristimo identitet cos2α + sin2α = 1. Tada

cos α2 = √ 1 - sin2α2 = √ 1 - n2 sin2α1

cos α2 = √ (1 + n2 (cos2α1 - 1)

Vrijednost cos α1 može se izraziti kroz skalarni proizvod jediničnih vektora S1 i N1, odnosno cos α1 = S1N1. Tada možemo napisati sljedeći izraz za vektor NT:

N1√1+n2((S1N1)2 - 1).

Ostaje da se pronađe izraz za vektor B. Nalazi se na istoj liniji kao i vektor A, a A = S1 - NS. S obzirom da je NS jednak N1 cos α1, onda je A = S1 - N1 cos α1. Pošto je cos α1 = S1N1, onda je A = S1 - N1 (S1N1).

Kako je dužina vektora A jednaka sin α1, a dužina vektora B jednaka sin α2, onda

|B|/|A| = sin α2/ sin α1 = n2/n1 = n,

gdje je |B| = n |A|. Uzimajući u obzir relativni položaj vektora A i B, dobijamo

NA =n(N1(S1N1) - S1).

Sada možemo zapisati željeni izraz za jedinični vektor loma zraka T1:

T1 = nN1 (S1N1) - nS1 - N1√1 + n2 ((S1N1)2 - 1).(2.2.4.1)

Proračun presečne tačke sa primitivima.

U algoritmu praćenja, da bi se konstruisala slika, potrebno je izračunati tačke preseka zraka sa primitivima scene. Zraka je data parametarskom jednačinom prave linije. Bilo koja tačka na zraku zadovoljava jednačinu

R = A + Vt, (2.2.5.1)

gdje je R radijus vektor proizvoljne tačke koja pripada zraku, A je radijus vektor početne tačke zraka, V je vektor smjera zraka, t je parametar.

Ako je vektor smjera V normaliziran, tada će parametar t biti numerički jednak udaljenosti od početne točke zraka A do tačke R.

Ovu jednačinu možete napisati u koordinatnom obliku:

x = x1 + at,= y1 + bt, (2.2.5.2)= z1 + ct.

Ovdje su x1, y1, z1 koordinate početne tačke zraka u pravougaonom kartezijanskom svjetskom koordinatnom sistemu, a, b, c su koordinate vodećih vektora zraka.

Proračun točke presjeka zraka s površinom drugog reda.

Da bismo pronašli točku presjeka zraka date jednadžbama (2) sa površinom drugog reda datom jednačinama (2.2.2.3) ili (2.2.2.4):

(x-x0)2/A2 + (y-y0)2/B2 + (z-z0)2 /C2 = 1 (elipsoid)

(x-x0)2/A2 + (y-y0)2/B2 - (z-z0)2 /C2 = 1 (paraboloid),

trebate zamijeniti odgovarajuće jednačine zraka u jednadžbu površine drugog reda umjesto x, y i z. Kao rezultat toga, nakon otvaranja svih zagrada i donošenja sličnih, dobijamo kvadratnu jednadžbu u odnosu na parametar t. Ako je diskriminant kvadratne jednadžbe manji od nule, tada zraka i površina drugog reda nemaju zajedničke točke presjeka. Inače će biti moguće izračunati dvije vrijednosti za parametar t. Diskriminant može biti jednak nuli - to odgovara graničnom slučaju zraka koji dodiruje površinu, a dobićemo dvije podudarne vrijednosti parametra t.

Da bismo pronašli koordinate točaka presjeka zraka i površine, dovoljno je pronađene vrijednosti parametra t zamijeniti u jednadžbe zraka (2).

U programu, kada se pronađu dvije raskrsnice, odabire se najbliža za vizualizaciju. Najbliža raskrsnica se određuje poređenjem pronađenih parametara t. Bliže tački posmatranja je presek koji odgovara manjem parametru t. Ovdje treba napomenuti da se kao rezultat rješavanja kvadratne jednadžbe jedna ili obje vrijednosti parametra t mogu pokazati negativnim. To znači da tačka preseka leži „iza“ u odnosu na tačku porekla zraka, na polovini prave linije koja se nalazi „na našoj strani“ u odnosu na ravan slike. Takve tačke se odbacuju kada se traži raskrsnica.

Osim toga, program uključuje gornju i donju reznu ravninu za svaku figuru. Prikazuje se samo dio figure koji leži između njih.

Da bi se to postiglo, nakon pronalaženja točke presjeka, analizira se njena z-koordinata.

Izračunavanje tačke preseka zraka sa poligonom (trouglom).

Da bi se izračunala tačka preseka zraka date jednačinama (2), potrebno je prvo odrediti tačku preseka ove zrake sa ravninom koja sadrži ovaj trougao.

Jednačina ravni izgleda ovako:

Q(x, y, z) = Ax + By + Cz +D = 0.(2.2.5.3)

Ovdje se koeficijenti A, B, C poklapaju sa koordinatama normale na ovu ravan. Normalne koordinate ravnine poklapaju se sa normalnim koordinatama trougla, koje smo izračunali u fazi učitavanja scene.

Da biste pronašli slobodni termin D, potrebno je zamijeniti koordinate bilo koje tačke trokuta, na primjer, jednog od vrhova.

Ax -By - Cz.(2.2.5.4)

Tokom izvršavanja programa, vrijednost D se neće mijenjati, pa je preporučljivo izračunati je prilikom inicijalizacije scene i pohraniti, kao koordinate normale. Preračunavanje je potrebno samo kada se promijeni položaj trougla.

Sada, da bismo pronašli tačku presjeka, zamjenjujemo jednačine zraka (2).

ravan jednadžba.

(x1 + at) + B (y1 + bt) + C (z1 + ct) + D = 0

Odakle nam to?

= - (Ax1 + By1 + Cz1 + D) / (Aa + Bb + Cc)(2.2.5.5)

Ako je nazivnik ovog razlomka nula, tada je zraka paralelna s ravninom u kojoj leži trokut. Ne postoji raskrsnica.

Da biste pronašli koordinate točke presjeka, potrebno je da nađenu vrijednost parametra t zamijenite u jednadžbe zraka (2). Nazovimo točku preseka D. Dobijamo koordinate xD, yD, zD.

Sada morate odrediti da li je tačka D unutar trougla. Nađimo koordinate vektora AB, BC, CA (A, B, C su vrhovi trougla) i koordinate vektora AD, BD, CD. Zatim nalazimo tri vektorska proizvoda:

nA = AB x AD,= BC x BD, (2.2.5.6)= CA x CD.

Ovi vektori će biti kolinearni. Ako su sva tri vektora kosmjerna, tada tačka D leži unutar trougla. Kousmjerenost je određena jednakošću predznaka odgovarajućih koordinata sva tri vektora.

Operacija provjere da li tačka D pripada trouglu ABC može se ubrzati. Ako trokut ABC i tačku D ortogonalno projiciramo na jednu od ravnina xOy, yOz ili xOz, tada će projekcija tačke koja pada u projekciju trougla značiti da sama tačka pada u trokut (naravno, ako je već poznato da tačka D leži u ravni koja sadrži trougao ABC). Istovremeno, broj operacija je značajno smanjen. Dakle, da biste tražili koordinate svih vektora, potrebno je tražiti dvije koordinate za svaki vektor, a kada tražite vektorske proizvode, trebate tražiti samo jednu koordinatu (ostale su jednake nuli).

Da biste provjerili kosmjernost vektora dobivenih pri izračunavanju vektorskog proizvoda, trebate provjeriti predznake ove jedinstvene koordinate za sva tri vektora. Ako su svi predznaci veći od nule ili manji od nule, tada su vektori kosmjerni. Ako je jedan od vektorskih proizvoda jednak nuli, to odgovara slučaju kada tačka D pada na pravu koja sadrži jednu od stranica trokuta.

Osim toga, jednostavan dimenzionalni test se može izvesti prije izračunavanja vektora i unakrsnih proizvoda. Ako projekcija tačke D leži desno, lijevo, iznad ili ispod svake od projekcija vrhova trougla, onda ne može ležati unutra.

Ostaje dodati da je za projekciju bolje odabrati ravan na kojoj je površina projekcije trokuta veća. Pod ovim uslovom, slučaj projektovanja trougla u segment je isključen (pod uslovom da trougao koji se testira nije degenerisan u segment). Osim toga, kako se površina projekcije povećava, vjerovatnoća greške se smanjuje. Za određivanje takve ravni projekcije dovoljno je provjeriti tri koordinate normale trokuta. Ako je z-koordinata normale veća (u apsolutnoj vrijednosti) x i y, tada se mora projektovati na ravan xOy. Ako je y veće od x i z, projektiramo na xOz. U preostalom slučaju - na yOz.

Opis tipova podataka. Struktura programa.

Opis programskih modula

Lista modula:.h-opis TTex strukture.h-opis TPlaneTex i TEllipsoidTex struktura.h-opis TPoint2d i TPoint3d struktura.h-opis TRGBColor strukture.h-opis TLamp ​​klase .h-opis TCam klase.h-opis klase TPrimitive Opis h-klase TFrstSurface.h-klase opis TScndSurface.h-klase opis TTriangle.h-klase opis TEllipsoid.h-klase opis TCylinder.h-klase opis THyperboloidVert.h-class opis THyperboloidHor.h-class opis TScene.h- opis klase TTracer

Implementacija modula, programski interfejs:

Options.h-modul obrasca “Opcije”.

ExtraCamOptions.h-modul obrasca “Svojstva kamere”.

MainUnit.h-modul glavnog oblika programa

Kratak opis struktura i klasa programa: TPoint3d - struktura koja opisuje tačku u svjetskom koordinatnom sistemu, TPoint2d - struktura koja opisuje tačku na ravni (u teksturi) sa cjelobrojnim koordinatama, TRGBColor - struktura koji opisuje boju u tri komponente (RGB), TTex - struktura, koja opisuje teksturu - sadrži adresu niza piksela i njegove dimenzije, TPlaneTex - struktura koja opisuje vezivanje teksture za ravan.

Sadrži tri tačke na koje je vezana tekstura: TLamp ​​- klasa koja opisuje izvor svjetlosti.

Sadrži TPoint3d koordinatni objekat sa izvornim koordinatama i tri varijable float (Ir, Ig, Ib) za pohranjivanje intenziteta tri svjetlosne komponente.TCam je klasa koja opisuje kameru.

Sadrži dva ugla (a, b) koji pokazuju smjer gledanja kamere, tačku u koju kamera usmjerava (viewP) i udaljenost od kamere do te tačke (r). TPrimitive je apstraktna primitivna klasa. Površine prvog i drugog reda su naslijeđene od njega TFrstSurface je apstraktna klasa površine prvog reda. Klasa trougla je naslijeđena od nje. TScndSurface je apstraktna površinska klasa drugog reda. Od njega su naslijeđene klase elipsoida i paraboloida.TTriangle je klasa trougla. Sadrži tri vrha trokuta i njegovu normalu TCylinder - klasa cilindra THyperboloidVert - klasa hiperboloida od jednog lista koji leži duž ose oZ THyperboloidHor - klasa hiperboloida od jednog lista koji leži duž ose oX TEllipsoid - klasa - klasa - klasa elipsoida TScene - klasa scene. Sadrži informacije o svim primitivima, izvorima i kameri TTracer je klasa odgovorna za konstruisanje slike. Sadrži bafer veličine 400x400 piksela u kojem se formira slika scene. Prije generiranja, trebate pozvati funkciju, proslijeđujući joj kao parametar pokazivač na scenu koju treba generirati. Za generiranje pozovite funkciju renderiranja.

Sve klase potomaka TPrimitive pružaju sljedeće funkcije: getT(TPoint3d p0, TPoint3d viewDir) - vraća udaljenost od početne točke (p0) zraka viewDir do najbliže točke presjeka s primitivom.

void getTArr(float* arr, int& n, TPoint3d p0, TPoint3d viewDir) - popunjava niz polja sa rastojanjima od početne tačke (p0) viewDir zraka do najbližih svih tačaka preseka sa primitivom.

void getNormal(TPoint3d& n, const TPoint3d& p) - vraća koordinate vektora normale primitivu u tački p.

void getColor(TRGBColor& c, const TPoint3d& p) - vraća boju primitiva u tački p (uzimajući u obzir teksturu).

3. TEHNOLOŠKI DIO

Odabir programskog jezika.

Prilikom razvoja programa korišćen je programski jezik visokog nivoa C++ kao deo vizuelnog programskog okruženja CodeGear RAD Studio za Windows.

Ovaj jezik je odabran zbog činjenice da pruža najpogodnije sredstvo za rad sa RAM-om i omogućava vam da efikasnije implementirate algoritme u poređenju s drugim jezicima visokog nivoa. Programi napisani na C++ rade brže i zauzimaju manje prostora na disku.

Dodatno, vizuelno programsko okruženje CodeGear RAD Studio za Windows

pruža veliki broj standardnih vizuelnih komponenti za kreiranje interfejsa i brojne biblioteke sa raznim uobičajeno korišćenim korisnim funkcijama. Takođe, autor rada ima najveće programsko iskustvo u ovom vizuelnom programskom okruženju.

Obrazac za opcije. Kartica osvetljenja.

Ova kartica sadrži alate za podešavanje osvetljenja scene.

Koordinate izvora - koordinate u svjetskom koordinatnom sistemu izvora svjetlosti odabranog u padajućoj listi.

Intenzitet izvora - vrijednosti tri komponente intenziteta izvora svjetlosti odabrane u padajućoj listi.

Intenzitet pozadine - vrijednosti tri komponente intenziteta pozadine.

Dugme “+” (pored padajuće liste) - dodavanje novog izvora svjetlosti.

Dugme “-” (pored padajuće liste) - briše izvor svjetlosti odabran u padajućoj listi.

Obrazac za opcije. Kartica kamere.

Ova kartica sadrži alate za konfigurisanje opcija kamere.

Pregled - ovdje možete vidjeti približan izgled slike prije nego što je generirana.

Navigacija - postavke položaja kamere.

Dodatno - kada kliknete na ovo dugme, pojavljuje se obrazac

Svojstva kamere sa dodatnim opcijama kamere.

Obrazac za svojstva kamere.

Radijus - udaljenost od kamere do tačke u koju je usmjerena.

Korak promjene radijusa - povećanje radijusa kamere pritiskom na tipku “-” jednom na kartici “Kamera” u obrascu “Opcije” (ili smanjenje pritiskom na tipku “+” jednom).

Obrazac za opcije. kartica "materijali".

Ovaj meni prikazuje parametre materijala stola na kojem stoji bina.

Boja - boja materijala stola.

Coef. difuzna refleksija - koeficijent Kd materijala stola (vidi odjeljak 2.2.1).

Tekstura - ako je polje za potvrdu označeno, tekstura će biti prikazana na tabeli

Odaberite teksturu - odaberite datoteku slike (*.bmp) koja će se koristiti kao tekstura tabele.

Napredno – kada kliknete na ovo dugme, pojavljuje se obrazac Svojstva tabele sa dodatnim parametrima za materijal tabele.

Obrazac svojstava tabele.

Koeficijent odsjaja je KS koeficijent materijala stola (vidi odjeljak 2.2.1).

Zamućenje isticanja je eksponent p materijala tabele.

Ponavljanja teksture - koliko puta će se tekstura tabele ponoviti duž OX i OY osi.

Obrazac za opcije. Sistem kartica.

Na ovoj kartici možete konfigurirati algoritme implementirane u programu.

Dubina rekurzije - ovaj parametar postavlja dubinu rekurzije u algoritmu praćenja. Sa većim vrijednostima ovog parametra poboljšava se kvalitet generirane slike.

PAŽNJA!

Dubina rekurzije JAKO utječe na brzinu generiranja slike. Ne preporučuje se postavljanje ovog parametra na vrijednosti veće od 10.

Antialiasing - omogući algoritam za izravnavanje slike.

Vrsta sjene - odaberite algoritam za generiranje sjene.

4. ISTRAŽIVAČKI DIO

Studije su sprovedene na računaru sa sledećom konfiguracijom:

CPU - Intel Core 2 Duo T5850- 2048Mb DDR2 - Nvidia GForce 9300M 256Mb- Windows 7

4.1 Ovisnost vremena generiranja o dubini rekurzije

Ovaj test je ispitao zavisnost vremena generisanja slike o dubini rekurzije. Studije su provedene za scenu osvijetljenu jednim izvorom svjetlosti - vrijeme generiranja bez sjene u sekundama - vrijeme generiranja sa čvrstom sjenom u sekundama - dubina rekurzije.


4.2 Ovisnost vremena generiranja od broja izvora


4.3 Analiza rezultata istraživanja

Iz prve studije je jasno da se vrijeme generiranja uvelike povećava s brojem nivoa rekurzije. Ovo se dobro uklapa u teoriju, jer broj zraka raste sa povećanjem dubine rekurzije.

Treba napomenuti da za scene s malim brojem poligona nije potrebno postavljati velike vrijednosti za maksimalnu dubinu rekurzije, jer razlika u kvaliteti generirane slike bit će beznačajna.

Druga studija je pokazala da je ovisnost vremena generiranja od broja izvora svjetlosti linearna. Iz dobijenih vrijednosti možete izračunati vrijeme potrebno za izračunavanje jednog izvora. Na mašini na kojoj je sprovedeno istraživanje, sa dubinom rekurzije od 5, ovo vreme iznosi približno 0,5 sekundi.

ZAKLJUČAK

Ovaj program je demonstrirao rezultate algoritma za generisanje realističnih slika - obrnutog praćenja zraka.

Ova implementacija pokazuje sposobnost algoritma da konstruiše slike bliske fotorealističnim. Praćenje je jedan od najnaprednijih algoritama za generiranje realističnih slika. Rezultirajuća kvaliteta slike je neuporedivo bolja od kvaliteta slike dobivene korištenjem algoritama kao što je Z-bafer. Međutim, zahtjevi za računarskom snagom koja je potrebna za generiranje jednog okvira slike su mnogo veći nego u istom Z-baferu. Danas se algoritam obrnutog praćenja zraka u realnom vremenu koristi samo u istraživačke svrhe na super-moćnim računarima koji su nedostupni prosječnom korisniku. Naravno, postoje entuzijasti koji kreiraju 3D igre i druge grafičke aplikacije u realnom vremenu koje se baziraju na algoritmu obrnutog praćenja zraka, ali po pravilu imaju izuzetno nizak FPS, ili je osnova svih objekata u sceni kugla - najlakše je pratiti površinu zraka. Ali da bi ovaj algoritam postao profitabilan za upotrebu u masovnim projektima, kao što su 3D igre, neophodan je primjetan iskorak u području hardvera desktop računara.

Čak i na primjeru kompjuterskih igara, lako se može uočiti redundancija algoritma obrnutog praćenja zraka. Na kraju krajeva, igrač, koji je opčinjen igrom, vjerojatno se neće diviti geometrijski ispravnom prikazivanju sjenki i refleksija objekata igre. U tom smislu, aproksimativno crtanje poligonom danas predstavlja značajnu prednost, jer ne zahtijeva moćan računar, a rezultati su bliski stvarnosti.

Također se vjeruje da je algoritam za praćenje zraka idealan za slike umjetnih objekata geometrijski jednostavnih oblika, na primjer automobila, aviona, zgrada itd. Generiranje objekata poput ljudskog lica, životinjskog krzna ili šume je izuzetno težak zadatak za algoritam, koji se povećava Tako da postoje znatni zahtjevi za hardverom računara.

Međutim, danas već možete vidjeti istraživanja o implementaciji algoritma obrnutog praćenja zraka u realnom vremenu. U pravilu se u takvim projektima automobil koristi kao pozornica. Ali apsolutni fotorealizam slike je već postignut, a osim toga, potrebno je vrlo malo vremena za generiranje jednog kadra. Naravno, ovi projekti su realizovani na super-moćnim računarima, ali nije daleko dan kada će ovakve 3D aplikacije postati dostupne prosječnom korisniku.

BIBLIOGRAFIJA

1. Rogers D. Algoritamske osnove mašinske grafike: trans. s engleskog - M.: Mir, 1989. - 512 str.

Porev V. N. Kompjuterska grafika. - Sankt Peterburg: BHV-Peterburg, 2002. - 432 str.

Nikulin E.A. Računarska geometrija i algoritmi kompjuterske grafike. Sankt Peterburg: BHV-Peterburg, 2003. - 560 str.

Angel E. Interaktivna kompjuterska grafika. - “Williams”, 2001. – 592 str.: ilustr. - Paral. Titus Sa engleskog

Avdeeva S.M., Kurov A.V. Algoritmi za trodimenzionalnu kompjutersku grafiku: Udžbenik. - M.: Izdavačka kuća MSTU im. N.E. Bauman, 1996. - 60 str.


Povratak

×
Pridružite se zajednici “koon.ru”!
U kontaktu sa:
Već sam pretplaćen na zajednicu “koon.ru”