Praćenje zraka u odnosu na rasterizaciju: sljedeća generacija kvaliteta grafike? Šta je praćenje zraka i da li nam je potrebno u igricama?

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

Direktno praćenje. U metodi direktnog praćenja generira se snop zraka koji ostavlja izvor u svim mogućim smjerovima.

Većina zraka koje emituje izvor ne dopire do prijemnika, pa stoga ne utječu na sliku koja se u njemu formira. Samo vrlo mali dio zraka, nakon svih refleksija i prelamanja, na kraju stigne do prijemnika, stvarajući sliku scene u njegovim receptorima. Na grubim površinama pojavljuju se mnoge difuzno reflektirane zrake. Sve ih je potrebno programski generirati i pratiti, što uvelike otežava zadatak praćenja.

Prolazak snopa u neidealnom mediju praćen je rasipanjem i apsorpcijom svjetlosne energije na njegovim mikročesticama. Ove fizičke procese je izuzetno teško adekvatno modelirati na računaru sa svojim ograničenim računarskim resursima. U praksi su ograničeni na korištenje koeficijenta slabljenja energije zraka po jedinici udaljenosti koju on prijeđe. Slično, uvedeni su koeficijenti za smanjenje energije zraka prilikom njegovog odbijanja i prelamanja na granici između medija. Uzimajući u obzir ove koeficijente, prati se smanjenje energije svih primarnih i sekundarnih zraka dok lutaju kroz prostor scene. Čim energija određenog zraka postane manja od određenog apsolutnog nivoa ili se smanji za određeni broj puta, praćenje ovog zraka se zaustavlja.

Dakle, glavni Nedostaci metode direktnog praćenja su njegov visoki intenzitet rada i niska efikasnost. Prilikom implementacije metode, većina rada na izračunavanju presjeka zraka sa objektima je uzaludna.

Backtrace. Traceback metoda je razvijena 80-ih godina. Radovi Whitteda i Kaya smatraju se fundamentalnim.

Da bi se odsjekli zraci koji ne stignu do prijemnika, dovoljno je posmatrača posmatrati kao izvor povratnih zraka. Primarni zrak će se smatrati zrakom V od posmatrača do bilo koje tačke na površini objekta.

Koristeći metode o kojima smo gore govorili, izračunavaju se sekundarni, tercijarni, itd. zraci. Kao rezultat toga, za svaki primarni zrak, gradi se stablo praćenja, čije grane čine sekundarne zrake. Grana rute se završava ako:

● zrak ide dalje od scene,

● zrak se susreće sa neprozirnim tijelom koje apsorbira svjetlost,

● snop udara u izvor svjetlosti,

● intenzitet zraka pada ispod praga osjetljivosti,

● broj primarnih podjela zraka postaje prevelik za raspoložive resurse mašine.

Rezultirajuća direktna svjetlosna energija (boja i intenzitet) ulazi u prijemnik iz pravca V, se sastoji od energija terminalnih vrhova stabla, uzimajući u obzir njihove gubitke tokom širenja u optičkim medijima.


Metoda povratnog traga zapravo akumulira sve zrake koje stvarno stignu do prijemnika iz određenog smjera, bez obzira na njihovo porijeklo. Ovo vam omogućava da vidite i prikažete na ekranu:

● neprozirni objekti koji apsorbuju povratne zrake;

● prozirni objekti kroz koje su drugi objekti vidljivi posmatraču zbog prelamanja;

● refleksije objekata na površinama ogledala, uključujući odsjaj koji odgovara povratnim zracima koji udaraju u izvor svjetlosti;

● senke formirane na tačkama površine koje su zaklonjene od izvora drugim objektima;

● razne druge optičke efekte.

Broj "sondirajućih" povratnih zraka koji su podložni praćenju ograničen je brojem tačaka na površinama objekata scene vidljivih sa posmatračeve lokacije i pomeranih sa poslednjim korakom u zavisnosti od rezolucije ekrana. Zbog toga je iznos računskih troškova u metodi praćenja unatrag značajno smanjen u odnosu na metodu praćenja naprijed. Moguće je kombinirati obje metode radi optimizacije algoritama i smanjenja njihove složenosti.

Algoritmi praćenja su rekurzivna procedura koja se poziva kada se pojavi sekundarni zrak (analizirani zrak se reflektira ili prelama). Većina proračuna pri implementaciji metoda praćenja uključuje izračunavanje presjeka zraka s površinama, pa se stoga koriste za prikaz optičkih efekata u scenama s malim brojem objekata.

Prilikom implementacije metode praćenja unazad u praksi, uvode se sljedeća 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 metode praćenja:

1. Među svim vrstama objekata, izdvojimo izvore svjetlosti. Mogu samo emitovati svjetlost, ali je ne mogu reflektirati ili prelamati. Obično se razmatraju tačkasti izvori.

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

3. Spekularnost se, pak, također opisuje sa dvije komponente. Prvi (refleksija) uzima u obzir refleksiju od drugih objekata koji nisu izvori svjetlosti. Izgrađen je samo jedan reflektirani snop r za dalje praćenje. Druga komponenta (spekularna) znači odsjaj od izvora svjetlosti. Da bi se to postiglo, zraci se usmjeravaju na sve izvore i određuju se uglovi koje ovi zraci formiraju sa reflektiranom zrakom za praćenje pozadi ( r). Kod zrcalne refleksije, boja tačke na površini određena je bojom onoga što se reflektuje. U najjednostavnijem slučaju, ogledalo nema svoju boju površine.

4. Kod difuzne refleksije uzimaju se u obzir samo zraci iz izvora svjetlosti. Zraci sa reflektirajućih površina se zanemaruju. 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.

5. Za prozirne objekte, ovisnost indeksa loma o talasnoj dužini se obično ne uzima u obzir. Ponekad se prozirnost modelira bez prelamanja, tj. smjer prelomljenog zraka t poklapa se sa smjerom upadnog snopa.

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

7. Da bi se završilo praćenje, uvodi se određena vrijednost praga osvjetljenja, koja više ne bi trebala doprinositi rezultujućoj boji, ili je broj iteracija ograničen.

Pozitivne karakteristike metode praćenja:

● svestranost, primenljivost za sintezu slike prilično složenih prostornih scena. Utjelovljuje mnoge zakone optike. Razne projekcije se jednostavno ostvaruju;

● č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, spekularnost i transparentnost;

● sve transformacije koordinata (ako ih ima) su linearne, tako da je prilično lako raditi sa teksturama;

● za jedan piksel rasterske slike, možete pratiti nekoliko blisko raspoređenih zraka, a zatim usredsrediti njihovu boju da biste eliminisali efekat aliasinga;

● budući da se izračunavanje jedne tačke slike vrši nezavisno od drugih tačaka, ovo se može efikasno koristiti prilikom implementacije ove metode u paralelnim računarskim sistemima u kojima se zraci mogu pratiti istovremeno.

Nedostaci metode praćenja:

● problemi sa modeliranjem difuzne refleksije i prelamanja;

● za svaku tačku na slici potrebno je izvršiti mnogo računskih operacija. Praćenje zraka jedan je od najsporijih algoritama za sintezu slike.

Praćenje zraka i rasterizacija - u čemu je razlika?

Nismo sigurni da svi naši čitaoci znaju ili pamte šta je to praćenje zraka, koliko se različite metode renderiranja u principu razlikuju i koje su njihove prednosti i mane. Stoga, prije svega, pokušajmo o tome govoriti vrlo kratko, bez složene matematike i manje-više jasno. Prije nego što pređemo na praćenje zraka, moramo se sjetiti osnova klasičnog algoritma rasterizacija sa Z-baferom.

U metodi rasterizacije, koja je danas opšteprihvaćena u modernoj grafici u realnom vremenu, za crtanje svakog objekta postoji projekcija na ravan ekrana iz geometrijskih primitiva (poligona, najčešće trouglova) koji čine objekat. Trokuti se crtaju piksel po piksel pomoću bafera dubine, koji sadrži udaljenost do ravni ekrana i neophodan je kako bi se osiguralo da se trouglovi koji su najbliži kameri preklapaju s daljim tokom renderiranja.

Osim vrhova i poligona koji ih povezuju, on također pohranjuje informacije o boji, teksturnim koordinatama i normalama potrebnim za definiranje prednjeg i stražnjeg dijela svake površine. Boja piksela se određuje složenim proračunima u vertex i pixel shaderima, a efekti kao što su senke se renderuju korišćenjem dodatnih prolaza, ali i rasterizacijom.

Proces sjenčanja ( senčenje) sastoji se od izračunavanja količine osvjetljenja za piksel, uzimajući u obzir preklapanje jedne ili više tekstura na piksel, što određuje njegovu konačnu boju. Sve to zahtijeva mnogo kalkulacija, jer scene modernih igrica sadrže nekoliko miliona poligona i nekoliko miliona piksela na ekranima visoke rezolucije, a informacije na ekranu moraju se ažurirati brzinom od najmanje 30 sličica u sekundi, a još bolje , 60 fps. Da ne spominjemo kacige za virtuelnu stvarnost, gde morate istovremeno da crtate slike za oba oka na frekvenciji od 90 FPS.

Ali budući da GPU-ovi rade na vrlo visokim brzinama takta i imaju veliki broj hardverskih jedinica specijaliziranih za određene proračune, a rasterizacija je vrlo dobra za paralelizaciju, nema posebnih problema s performansama renderiranja, a velika većina 3D kompjuterskih igara koristi rasterizaciju . U stvarnosti, stvari su malo složenije, jer se koriste mnoge dodatne optimizacije kako bi se izbjeglo crtanje puno nevidljivih trouglova, ali to je suština rasterizacije općenito.

Tokom razvoja GPU-a tokom njihovog razvoja, ogromna količina vremena je potrošena na optimizaciju rada odbacivanja nevidljive geometrije i smanjenje računarskog opterećenja. Prvo smo odbacili renderovanje objekata izvan zone vidljivosti, zatim objekata zaklonjenih drugima, bliže kameri, itd. Razvijene optimizacije za rasterizaciju su prilično efikasne, u moderne igre nevidljivi objekti ne troše gotovo nikakve računarske resurse, značajno smanjujući količinu posla potrebnog za rasterizaciju scene. Dalje ćete razumjeti zašto se dotičemo teme nevidljivih objekata.

Da biste izračunali globalno osvjetljenje, nacrtali sjene i druge efekte, morate koristiti lukave hakove zasnovane na istoj rasterizaciji. Kao rezultat toga, tokom godina, GPU-ovi su postali veoma sofisticirani, učeći da ubrzaju obradu geometrije u verteks shaderima, efikasno renderuju piksele koristeći pikselne shadere, pa čak koriste univerzalne računarske shadere za izračunavanje fizike, post-efekata i mnogih drugih proračuna. Ali osnova rada GPU-a ostala je ista cijelo vrijeme.

Praćenje zraka ima potpuno drugačiju osnovnu ideju, ali u teoriji je gotovo jednostavnije. Praćenje simulira širenje svjetlosnih zraka kroz 3D scenu. Tragiranje zraka se može izvesti u dva smjera: od izvora svjetlosti ili od svakog piksela u suprotnom smjeru, tada se obično određuju nekoliko refleksija od objekata scene u smjeru kamere, odnosno izvora svjetlosti. Izračunavanje zraka za svaki piksel u sceni je manje zahtjevno za računanje, a projektovanje zraka iz izvora svjetlosti daje veći kvalitet renderiranja.

Backtrace prvi put je opisao 1969. godine zaposlenik IBM-a u radu "Neke tehnike za mašinsko zasjenjenje čvrstih tijela" i ova tehnika izračunava putanju svetlosnog snopa za svaki piksel na ekranu u zavisnosti od 3D modela u sceni. 10 godina kasnije, dogodio se još jedan napredak u tehnologiji, kada je istraživač Turner Whitted (sada radi u Nvidia Research, inače) objavio rad "Poboljšani model osvjetljenja za zasjenjeni displej", koji je pokazao kako izračunati senke, refleksiju i prelamanje svjetlosti prilikom praćenja.

Nekoliko drugih radova iz 1980-ih dalje je opisivalo osnove praćenja zraka za kompjutersku grafiku, što je dovelo do revolucije u sintetičkim slikama u filmskoj industriji. Dakle, 1984. godine nekoliko zaposlenih Lucasfilm opisuje kako koristiti praćenje zraka za stvaranje efekata kao što su zamućenje pokreta, dubina polja, meke sjene, zamućene refleksije i prelamanja. Nekoliko godina kasnije, profesor Caltecha Jim Kajiya u svom radu "Jednačina prikazivanja" opisao precizniji način raspršivanja svjetlosti u sceni. I od tada, praćenje zraka se koristi bukvalno svuda u filmskoj industriji.

Dakle, u uobičajenoj metodi inverznog praćenja zraka, za svaki piksel na ekranu, imaginarni zrak se povlači iz kamere do objekta u sceni. Na taj način se simulira zraka svjetlosti koja ulazi u kameru iz izvora svjetlosti u tom smjeru, a prvo sjecište s objektom se koristi za određivanje boje piksela. Primarni zraci određuju vidljivost objekata (poput Z-bafera u rasterizaciji), a da biste odredili boju, potrebno je da povučete dalje sekundarne zrake od presječnih točaka do različitih izvora svjetlosti (ako su zrake blokirane od strane objekta, tada svjetlo izvor neće uticati na osvjetljenje piksela), a skup sekundarnih zraka određen je osvjetljenjem koje pada na piksel.


Ali sve najzanimljivije stvari se dešavaju i dalje - da biste postigli fotorealizam, morate uzeti u obzir karakteristike materijala u obliku količine svjetlosti koja se odbija i prelama od njih, a da biste izračunali boju piksela, morate nacrtati više zraka refleksije i prelamanja. Oni nisu naznačeni na gornjoj slici, ali se mentalno mogu zamisliti kao zrake koje se odbijaju od površine lopte i lome od nje. Ovaj poboljšani algoritam za praćenje zraka izmišljen je prije nekoliko decenija, a ovi dodaci su bili veliki korak ka povećanju realizma sintetičke slike. Do danas, metoda je dobila mnoge modifikacije, ali one se uvijek zasnivaju na pronalaženju sjecišta svjetlosnih zraka sa objektima scene.

Prvo praktični eksperimenti o implementaciji praćenja zraka u realnom vremenu počelo je dosta davno, na poznatoj konferenciji SIGGraph Slična dešavanja su se često pojavljivala. Demonstracije praćenja u realnom vremenu datiraju iz kasnih 1980-ih i postizale su brzine od nekoliko frejmova u sekundi koristeći visoko optimizirane tehnike i višestruke računarske sisteme dijeljene memorije. Od tada su se pojavili mnogi razvoji dizajnirani da ubrzaju praćenje za rad, uključujući i na jednom računaru.

Da ne spominjemo brojne entuzijaste 3D engine-a na demo sceni kasnih 90-ih i dalje, koji su bili inspirirani mogućnostima i fundamentalnom jednostavnošću metode, uvodeći mnoge korisne optimizacije u praćenje zraka. Svojevremeno smo na našoj web stranici objavili čitav niz materijala posvećenih jednom od softverskih motora za praćenje zraka, vrlo specifičnih i s puno ozbiljnih ograničenja koja nam nisu dozvoljavala da na osnovu njega kreiramo ozbiljne projekte igara:

Proizvođači hardvera nisu zaostajali i dugo su na izložbama pokazivali eksperimentalne prototipove akceleratora praćenja i za njih optimizirane demo programe. Tako je kompanija u junu 2008 Intel pokazao posebnu verziju igre Neprijateljska teritorija: Quake Wars (Quake Wars: Ray Traced), koji koristi praćenje zraka prilikom renderiranja u rezoluciji od 1280x720 pri brzini od 15-30 sličica u sekundi, što se već smatra realnim vremenom. Ta demonstracija nije koristila hardverske akceleratore, već je radila na 16 Xeon jezgri na frekvenciji od 3 GHz.

Intelov projekat je demonstrirao prednosti ray-traced renderovanja, demonstrirajući realističnu vodu, senke objekata kroz prozirne površine i refleksije. Razvoj demonstracije postao je projekat Wolfenstein: Ray Traced, a razni entuzijasti često uzimaju motor serije Potres za dodavanje praćenja - tako na prijedlog moddera u Potres 2 pojavile su se realistične refleksije, koje je pokvarila veoma jaka buka i najviši sistemski zahtevi.

A kompanija je nekoliko godina (od 2012. do 2016.) pokazala prototipove akceleratora za praćenje hardvera. Imagination Technologies, koji čak nudi otvoreni API za praćenje zraka - OpenRL. Navedeno je da je akcelerator razvoja hardvera kompanije sposoban da pokreće Autodesk Maya i pruža praćenje zraka u realnom vremenu. Međutim, kompanija nije imala dovoljno sredstava da promovira hardversko ubrzanje praćenja zraka za uspjeh, kao ni „težinu“ ove kompanije na grafičkom tržištu da bude njena lokomotiva. A demo programi nisu bili najimpresivniji, da budem iskren, iako su pokazali neke od prednosti praćenja:

Kompanija je radila mnogo bolje Nvidia, koji je najavio tehnologiju još na SIGgraphu 2009 OptiX, dizajniran za praćenje zraka u realnom vremenu na njihovim GPU-ovima. Novi API je otvorio pristup praćenju zraka u profesionalnim aplikacijama uz potrebnu fleksibilnost, posebno - dvosmjerno praćenje putanje i druge algoritme.

Rendereri bazirani na OptiX tehnologiji već postoje za brojne profesionalne softvere, kao što su Adobe AfterEffects, Bunkspeed Shot, Autodesk Maya, 3ds max i druge aplikacije, a koriste ih profesionalci u svom radu. Ovo se može pripisati renderovanju u realnom vremenu samo uz određene pretpostavke, jer je pri velikoj brzini kadrova rezultat bila vrlo bučna slika. Samo nekoliko godina kasnije industrija se približila korištenju hardverskog ubrzanja praćenja zraka u igrama.

Prednosti i nedostaci praćenja zraka

Tehnika renderiranja praćenja zraka je vrlo realistična u poređenju sa rasterizacijom, jer simulira širenje svjetlosnih zraka vrlo slično onome kako se javljaju u stvarnosti (naravno, još uvijek nije 100% tačna). Trasiranje može proizvesti vrlo realistične sjene, refleksije i prelamanje svjetlosti, i kao takvo je dugo cijenjeno u arhitektonskim aplikacijama i industrijskom dizajnu. Tehnologija pomaže stručnjacima u ovoj oblasti, mnogo prije fizičke implementacije, da shvate kako će materijali izgledati pod različitim svjetlosnim uvjetima u stvarnom svijetu.

Očigledne prednosti praćenja mogu uključivati ​​i činjenicu da računska složenost metode malo ovisi o geometrijskoj složenosti scene, a proračuni su savršeno paralelizirani - možete lako i neovisno pratiti nekoliko zraka istovremeno, dijeleći ekran površine u zone za njihovo praćenje na različitim računskim jezgrama. Takođe je veoma korisno da je odsecanje nevidljivih površina logična posledica algoritma.

Ali ono što je još važnije je da metoda simulira stvarno širenje svjetlosnih zraka, čime se dobija konačna slika višeg kvaliteta u odnosu na rasterizaciju. Rasterizacija ima očigledne nedostatke - na primjer, objekat koji nije uključen u scenu neće biti prikazan na GPU-u, ali može baciti vidljivu sjenu ili bi trebao biti vidljiv u reflektirajućoj površini (ogledalu), a optimizacije rasterizacije su ga odbacile i nisu uzeti u obzir. Da ne spominjemo, ovaj nevidljivi objekt može u velikoj mjeri utjecati na globalno osvjetljenje scene reflektirajući svjetlost na vidljive površine. Ovi problemi su djelimično riješeni, posebno korištenje mapa sjena omogućava vam da nacrtate sjene od objekata nevidljivih u sceni, ali rezultirajuća slika je još uvijek daleko od idealne. A poenta je ovdje u principu, jer rasterizacija funkcionira potpuno drugačije od ljudskog vida.

Efekti kao što su refleksije, prelamanja i sjene, koje je prilično teško dobro implementirati prilikom rasterizacije, prirodni su rezultat algoritma za praćenje zraka. Uzmite refleksije - ovo je samo jedno od područja u kojima je praćenje zraka primjetno bolje od rasterizacije. U modernim igrama, refleksije se obično simuliraju pomoću mapa okruženja (statičkih ili dinamičkih) ili refleksije u prostoru ekrana ( Screen-space), koji u većini slučajeva daju dobru simulaciju refleksije, ali i dalje imaju vrlo velika ograničenja, posebno nisu prikladni za blisko locirane objekte.

Izračunavanje refleksije u prostoru ekrana omogućava da se dobiju refleksije koje su manje-više slične istini, uz određena ograničenja, ali uz hardversko ubrzanje na GPU-u koristeći rasterizaciju. A uz praćenje zraka, refleksije se uvijek savršeno prikazuju bez potrebe za dodatnim složenim algoritmima. Još jedna bitna prednost trasiranja je prikazivanje odsjaja dijelova istog objekta jedan na drugom (na primjer, tako da se drška čajnika ili njegov izljev reflektuje na samu sebe), što je znatno teže izvesti rasterizacijom.

Još jedan primjer jasne prednosti praćenja zraka je prikazivanje prozirnih objekata. Koristeći rasterizaciju, veoma je teško simulirati efekte transparentnosti, jer njegovo izračunavanje zavisi od redosleda renderovanja i za to morate prethodno sortirati transparentne poligone, a čak i tada se mogu pojaviti vizuelni artefakti. Izmišljeno je nekoliko hakova kako bi se zaobišlo sortiranje poligona, ali sve to rezultira komplikacijama metode i dodatnim poteškoćama. Ali sam algoritam za praćenje zraka vam omogućava da nacrtate sve efekte transparentnosti sa savršenim kvalitetom.

Pa, posljednji (za početak) primjer je crtanje sjena. Prilikom rasteziranja u većini slučajeva koriste se mape sjena ( mapiranje senki), koji se takođe zasnivaju na rasterizaciji, jednostavno renderovanje se vrši sa druge tačke u sceni i sa različitim parametrima. Siluete objekta se uvlače u poseban pufer od izvora svjetlosti, sadržaj pufera se filtrira i nanosi na površinu na kojoj treba baciti sjenku. Ove metode imaju nekoliko problema, uključujući nazubljene ivice koje ste svi vidjeli u igrama, kao i povećanu potrošnju video memorije. Praćenje zraka vam omogućava da automatski riješite problem sjenki, bez potrebe za dodatnim algoritmima i memorijom. Štaviše, u slučaju haka za rasterizaciju, rezultat će u svakom slučaju biti fizički neispravna senka, ali će meka senka nacrtana pomoću praćenja zraka biti realna.

Ali praćenje zraka također ima nedostatak. Jedan, ali vrlo važan, je da je crtanje svega gore opisanog nekoliko puta teže sa računske tačke gledišta. Niske performanse na postojećem hardveru glavni su nedostatak metode praćenja, koja dugo vremena precrtao sve njegove prednosti. Pronalaženje presjeka zraka sa objektima scene nije ubrzano tako lako kao relativno jednostavne operacije kod rasterizacije trokuta, za šta se već dugi niz godina koriste posebni 3D akceleratori, zbog čega se u grafici u realnom vremenu i dalje koristi metoda rasterizacije koja omogućava možete nacrtati sliku prilično brzo, iako je nešto lošije u kvaliteti u odnosu na punopravno praćenje, ipak je prilično realistično.

Prilikom praćenja potrebno je izračunati hiljade zraka za svaki izvor svjetlosti, od kojih će većina imati mali utjecaj na konačnu sliku, tako da su vam potrebne i dodatne optimizacije za algoritam praćenja zraka i novi hardver koji može ubrzati odgovarajuće operacije. Osim toga, samo korištenje praćenja ne garantuje fotorealizam. Ako koristite jednostavne algoritme, rezultat će biti dobar, ali još uvijek nedovoljno realističan, a za potpunu simulaciju stvarnosti potrebno je koristiti dodatne tehnike, kao npr. fotonsko mapiranje I trasiranje putanje, koji preciznije simuliraju širenje svjetlosti u svijetu.

S druge strane, kako je algoritam za praćenje zraka dobro paraleliziran, on se može riješiti najjednostavnijim tehničkim metodom – povećanjem broja računskih jezgara (grafičkog) procesora, čiji se broj povećava svake godine. Istovremeno, osigurano je linearno povećanje performansi tokom praćenja. A s obzirom na očigledan nedostatak optimizacije u hardveru i softveru za praćenje zraka na GPU-ima trenutno, mogućnosti hardverskog praćenja zraka potencijalno mogu brzo rasti.

Ali ovdje nastaju manji problemi. Renderovanje samo primarnih zraka samo po sebi nije previše komplikovano, ali neće obezbediti primetno poboljšanje u kvalitetu renderovanja u poređenju sa klasičnom rasterizacijom, pa čak ni sa lukavim hakovima. Ali sekundarne zrake je mnogo teže izračunati jer nemaju koherentnost – jednosmjernost. Za svaki piksel se moraju izračunati potpuno novi podaci, što nije baš dobro za njihovo keširanje, što je važno za postizanje velike brzine. Stoga proračun sekundarnih zraka u velikoj mjeri ovisi o memorijskim kašnjenjima, koja se gotovo ne smanjuju, za razliku od memorijskog pojasa (MBB), koji raste velikom brzinom.

Praćenje zraka, iako izgleda kao prilično jednostavna i elegantna metoda koja se može implementirati u samo nekoliko linija koda, potpuno je neoptimiziran algoritam, a kod za praćenje zraka visokih performansi je izuzetno teško napraviti. Ako s rasterizacijom algoritam radi brzo, ali morate smisliti pametne metode za složene vizualne efekte, onda praćenje zraka može ih sve iscrtati u početku, ali vas prisiljava da vrlo pažljivo optimizirate kod tako da radi dovoljno brzo za realno vrijeme.

Postoji mnogo metoda za ubrzanje praćenja; najproduktivniji algoritmi za praćenje zraka ne obrađuju zrake jednu po jednu, već koriste skupove zraka, što ubrzava proces obrade zraka istog smjera. Ove optimizacije su odlične za rad na modernim SIMD CPU-ima i GPU-ima, efikasne su za glavne ko-zrake i zrake sjene, ali još uvijek nisu pogodne za zrake prelamanja i refleksije. Stoga je potrebno ozbiljno ograničiti broj zraka izračunatih za svaki piksel scene i ukloniti povećani "šum" slike pomoću posebnog filtriranja.

Osim toga, praćenje zraka zahtijeva odgovarajuću strukturu podataka za pohranjivanje elemenata scene, a to može imati utjecaj na performanse. Neke strukture su prikladnije za statičke podatke, druge za one koji se dinamički mijenjaju. Dakle, praćenje zraka samo na površni pogled izgleda kao jednostavan i izuzetno elegantan metod, ali da biste dobili željene performanse iz njega, moraćete da uradite mnogo posla na optimizaciji - ništa manje od simulacije složenih efekata tokom rasterizacije. A ovaj posao je, zapravo, tek počeo.

Postoji nekoliko problema koje treba riješiti prije nego što praćenje zraka postane održiva alternativa rasterizaciji za igre. Trenutno se čini da prednosti praćenja nisu tako velike kao značajna kazna za performanse povezana s njegovim korištenjem. Da, trasiranje ima veoma bitne prednosti u vidu realističnih refleksija, senki i obrade prozirnih objekata, što je teško izvodljivo rasterizacijom, ali... ima li takvih objekata u igricama dovoljno za nedostatak realizma da bi oni postali ozbiljni ? S jedne strane, većina objekata na svijetu reflektira svjetlost, s druge strane, igre su dokazale da se naše oči i mozak zadovoljavaju samo aproksimacijom realizma. U većini modernih igara, refleksije na objektima, iako nisu potpuno fotorealistične, često su dovoljne da prevare naš mozak.

Da, praćenje zraka može pružiti najbolji kvalitet, nego rasterizacija, ali kojim silama? Ako težite potpunom realizmu, onda punopravno praćenje s proračunom mnogih zraka za osvjetljenje i refleksije, kao i kombinacijom tehnika poput radiost I fotonsko mapiranje, biće super-zahtjevna računska snaga. Često čak i offline renderi koji ne rade u realnom vremenu koriste pojednostavljenja. Naravno, nakon nekog vremena, dovoljno velika računarska snaga će postati dostupna kako bi se dobila prednost u odnosu na rasterizaciju, uključujući i performanse, ali za sada smo još jako daleko od ove tačke.

Čak i uz offline renderiranje za filmsku industriju, kako se računarska snaga povećava, vrijeme renderiranja se s vremenom ne smanjuje, jer apetiti umjetnika rastu još brže! Pa čak i vodeće kompanije u proizvodnji animiranih filmova, poput Pixar, pokušajte optimizirati proces renderiranja koristeći praćenje zraka samo za neke efekte - upravo zbog značajnog utjecaja na performanse. Dakle, morate shvatiti da su dani punog praćenja cijele scene u igrama u realnom vremenu još uvijek vrlo daleko. A za potpuno renderiranje u realnom vremenu pomoću praćenja zraka u igrama, računarska snaga definitivno još nije dovoljna. Ovo je dug put čak i sa razvojem GPU-a koji je još uvijek u toku.

Ali u svakom slučaju, praćenje zraka je fizički ispravan način koji može riješiti mnoge velike i male probleme postojećeg pristupa. Koristeći razne hakove i trikove koji se trenutno koriste u rasterizaciji, možete postići dobre rezultate, ali to se svakako ne može nazvati univerzalnom i idealnom metodom za renderiranje 3D grafike. Uskoro, u potrazi za realizmom, programeri 3D aplikacija u realnom vremenu će dostići granicu postojeće metode rasterizacije i moraće da pređu na metodu sa naprednim modelom osvetljenja sličnim onome što se dešava u stvarnosti. Najvjerovatnije će to biti praćenje zraka. Ali pošto je praćenje zraka vrlo skupa metoda i malo je vjerovatno da će je podržavati čak ni najmoćniji sistemi, u početku biste se trebali osloniti na hibridne metode renderiranja koje kombinuju performanse rasterizacije i kvalitet praćenja zraka.

Hibridni prikaz za tranziciju

Zbog zahtjevne prirode praćenja zraka, čak i sa malim brojem zraka koje treba izračunati za svaki piksel, malo je vjerovatno da će se ova metoda koristiti isključivo i još uvijek neće zamijeniti rasterizaciju. Ali postoji mogućnost miješanja ove dvije metode. Na primjer, osnovna geometrija se može rasterizirati s visokim performansama, a zatim se samo meke sjene i refleksije mogu prikazati pomoću praćenja zraka. Iako će rasterizacija nastaviti da igra ključnu ulogu u narednim godinama sa pojavom hibridnog renderovanja, udio algoritama za praćenje zraka u takvim motorima će se postepeno povećavati na osnovu rastućih računarskih mogućnosti budućih GPU-ova.

Ovaj pristup se već dugo koristi u istim crtanim filmovima kompanije Pixar, uprkos činjenici da njihovi zahtjevi izgleda nemaju stroga ograničenja u vremenu renderiranja. Međutim, lakše je i brže renderirati geometriju koristeći iste mikropoligone sistema za renderiranje Reyes, i koristite praćenje samo tamo gdje su potrebni specifični efekti. Gotovo svi Pixar animirani filmovi ranije su koristili mikropoligone i rasterizaciju, te praćenje zraka do mašine za renderiranje RenderMan dodan kasnije za crtani film "Automobili", gdje je korišten selektivno - za izračunavanje globalne okluzije (ambijentalne okluzije) i renderiranje refleksije.

Ali u stvarnosti, hibridna rješenja nisu tako jednostavna, jer za efikasno praćenje zraka potrebno je organizirati strukturu podataka na poseban način kako biste smanjili broj provjera ukrštanja zraka sa objektima scene. Stoga, čak i kod hibridnog renderiranja, morat ćete kreirati optimiziranu strukturu podataka. A sa strane performansi, veliki problem je pristup memoriji povezan sa sekundarnim zracima koji su potrebni za hibridno prikazivanje. Ispostavilo se da se kombiniranjem dvije metode renderiranja kombiniraju mnogi njihovi nedostaci, a posebno se gube jednostavnost metode praćenja zraka i visoke performanse rasterizacije.

Ali kada su prednosti još uvijek veće, takav hibridni pristup ima smisla. Kombinacija nekih rasterizacije i mogućnosti praćenja je već dostupna, uključujući hardverski ubrzanu pripremu svjetlosne karte GPU-a, prikazivanje dinamičkih svjetlosnih mapa i djelomičnih sjenki, renderiranje refleksija i prozirnih objekata s refrakcijom. Ovo je već veliko dostignuće, jer je ovaj pristup dugi niz godina dostupan samo za offline renderiranje. Još kasnih 90-ih, hibridno prikazivanje se koristilo u animiranim filmovima za poboljšanje efikasnosti, a sada je postalo dostupno za aplikacije u realnom vremenu.


Ali ovo je samo početak prije nadolazeće "zlatne ere" renderiranja u realnom vremenu. U budućnosti će ovaj hibridni pristup evoluirati u nešto više, a umjesto selektivnih efekata, moći će se koristiti potpune tehnike s naprednim osvjetljenjem, sjenčanjem i raznim složenim efektima.

Na sličan način na koji je došlo i offline renderiranje "Bug's Life" na mnogo složenije animirane filmove, npr "koko", koji već koristi potpuno praćenje putanje sa desetinama ili čak stotinama izračunatih zraka po pikselu. Za razliku od prethodnih godina, nije bilo mapa sjena ili zasebnih prolaza za izračunavanje osvjetljenja, već samo potpuno praćenje - to je ono čemu teže programeri igara, samo će njihov put biti malo duži, ali cilj je isti.


I prije nego što dođe do prijelaza sa rasterizacije na potpuno praćenje, morate koristiti hibridno renderiranje i promijeniti svoj razvojni pristup na mnogo načina. Na primjer, prepustite dio posla na preliminarnoj pripremi i “pečenju” nekih podataka u GPU-u, prepravite svoj proizvodni cevovod i pripremite rendering enginee za činjenicu da će se sve veći dio proračuna postupno prebaciti na praćenje. I djelomične prednosti praćenja mogu se koristiti sada, iako s izuzetno malim brojem zraka po pikselu i uz obavezno smanjenje šuma.


Ali čak i uz postepeni prijelaz na praćenje, nema potrebe odbaciti potrebu za optimizacijama koje nisu specifične za rasterizaciju. Optimizacije visokog nivoa kao što su nivo detalja (LOD), uklanjanje okluzije, postavljanje pločica i striming takođe će odlično raditi sa praćenjem zraka. I dok industrija ne pređe na potpuno praćenje, moramo nastaviti koristiti efikasne tehnike korištenje prostora na ekranu gdje su potrebne visoke performanse, a kvalitet nije kritičan.


Pa, renderiranje pomoću praćenja zraka mora biti optimizirano. Na primjer, kada se prikazuju dinamičke svjetlosne mape pomoću DXR-a, efikasno je keširati osvjetljenje u svjetlosnim kartama, a zatim koristiti akumulaciju podataka tokom vremena za sljedeći okvir. Proces je relativno brz i trebalo bi ga koristiti jer omogućava praćenje zraka u lightmap prostoru najbolji rezultat, u poređenju sa praćenjem zraka u prostoru na ekranu. Istina, morat ćete koristiti suzbijanje buke, jer neće biti moguće izračunati posebno mnogo zraka u realnom vremenu.

Čak i obični filteri za suzbijanje buke sa postavkama posebno za specifičnosti praćenja zraka rade dobro, a ako primijenite smanjenje buke koristeći mogućnosti neuronskih mreža, što je Nvidia već demonstrirala, pa čak i hardverski ubrzani na tenzorskim jezgrama GPU-a Volta arhitekture, onda budućnost hibridnog renderovanja Čini se prilično jasnim da će barem neki od efekata koji se lako mogu dodati postojećim mašinama (proračuni senki ili globalno osvetljenje i senčenje) koji koriste rasterizaciju biti dodati igrama vrlo brzo.

Dakle, očigledan način korištenja hibridnog renderiranja je rasterizacija scene i korištenje ray tracing-a samo za dio proračuna osvjetljenja, kao i za proračune refleksija s lomovima. Ovaj pristup obezbeđuje brzinu rasterizacije i kvalitet praćenja u vidu tačne simulacije osvetljenja, uključujući globalno osvetljenje, refleksije i prelamanja svetlosnih zraka, i crtanje optički ispravnih senki. Štaviše, simulacija ovih efekata korišćenjem hakova za rasterizaciju i njihovo usložnjavanje jednog dana će dovesti do tačke u kojoj će postati toliko intenzivan resursima da će biti lakše zameniti proračune pravim praćenjem zraka. I općenito, ovo je jedini ispravan način ako gledamo u budućnost razvoja grafike.

DirectX Raytracing - standardni API za praćenje zraka

Tako su vremenom naučili da rasterizaciju učine veoma impresivnom dodavanjem razni algoritmi i hakove poput mapiranja paralakse, koje dodaje volumen ne previše složenim površinama, kao i korištenje mapa sjena. Da bi se poboljšala grafika, bilo je potrebno samo povećati brzinu GPU-a i učiniti ih malo univerzalnijima, ostavljajući osnovu u obliku rasterizacije praktički netaknutom (ne računajući metode optimizacije u obliku razbijanja okvira na pločice, itd.) .

Moderne tehnike poput refleksije prostora na ekranu i simulacije globalnog osvjetljenja dovele su rasterizaciju do njenih praktičnih granica, jer ovi algoritmi zahtijevaju pametne hakove za obradu i složene proračune, koji se ponekad izvode asinhrono s renderiranjem. I u bliskoj budućnosti, složenost i intenzitet resursa takvih algoritama nastavit će rasti. Praćenje zraka vam omogućava da napravite složene efekte na jednostavan način, otvarajući također vrata potpuno novim tehnikama koje ranije nisu bile moguće u realnom vremenu. Ali kako se to može postići ako GPU-ovi mogu samo rasterizirati?

Trenutna verzija DirectX 12 Samo izgleda sasvim novo, ali u stvari ovaj grafički API je najavljen još na GDC 2014, a javno je objavljen kao dio Windows 10 godinu dana kasnije. Do sada je upotreba ove verzije bila daleko od željene, a to se dogodilo iz mnogo razloga. Prvo, razvojni ciklus za igre i motore je prilično dug, a činjenica da DirectX 12 radi samo na najnovijoj verziji Windows-a i ima ograničenu podršku na konzolama trenutne generacije samo umanjuje argumente u korist korištenja na PC-u. Međutim, već smo vidjeli upotrebu API-ja niskog nivoa u nekoliko igara, ali što dalje? A onda je DirectX razvojna linija napravila još jedan oštar zaokret, uvodeći alate za podršku praćenja zraka.

U sklopu Konferencije programera igara GDC 2018 Microsoft je predstavio novi dodatak DirectX API-ju, u kojem su na ovaj ili onaj način učestvovali mnogi partneri uključeni u razvoj softvera i hardvera. Dodatak se zove DirectX Raytracing a njegovo ime sugerira da je to standardni API za softversku i hardversku podršku za praćenje zraka u DirectX aplikacijama, omogućavajući programerima da koriste algoritme i efekte koristeći pomenutu tehniku. DirectX Raytracing (skraćeno DXR) pruža standardizirani pristup za implementaciju praćenja zraka koji se ubrzava pomoću GPU-a. Ovo proširenje kombinuje se sa mogućnostima postojećeg DirectX 12 API-ja, omogućavajući vam da koristite i tradicionalnu rasterizaciju i praćenje zraka, kao i da ih mešate u željenim proporcijama.

Sav rad DXR API-ja koji se odnosi na praćenje zraka kontrolira se korištenjem lista naredbi koje šalje aplikacija. Praćenje zraka je usko integrirano sa rasterizacijom i računalnim naredbama i može se pokrenuti u više niti. Šejderi za praćenje zraka (pet novih tipova shadera!) se kontrolišu slično kao i računarski shaderi, što im omogućava da se paralelno obrađuju na GPU-u, kontrolirajući njihovo izvršavanje na relativno niskom nivou. Aplikacija je u potpunosti odgovorna za sinhronizaciju rada GPU-a i korišćenje njegovih resursa, kako tokom rasterizacije tako i prilikom proračuna, što programerima daje kontrolu nad optimizacijom izvođenja svih vrsta poslova: rasterizacije, praćenja zraka, proračuna, prenosa podataka.

Različiti tipovi prikazivanja dijele sve resurse kao što su teksture, baferi i konstante bez potrebe za konverzijom, prijenosom i dupliciranjem da im se pristupi iz tragova shadera. Resursi koji pohranjuju podatke specifične za praćenje zraka, kao što su strukture ubrzanja (strukture podataka koje se koriste za ubrzanje praćenja - pronalaženje raskrižja između zraka i geometrije) i tabele shadera (koje opisuju odnos između shadera za praćenje zraka, resursa i geometrije) u potpunosti upravlja aplikacija , sam DXR API ne vrši kretanje podataka sam po sebi. Shaderi se mogu kompajlirati pojedinačno ili u grupama, njihovu kompilaciju u potpunosti kontrolira aplikacija i može se paralelizirati u više CPU niti.

Na najvišem nivou, DXR dodaje četiri nova koncepta DirectX 12 API-ju:

  1. Struktura ubrzanja ( struktura ubrzanja) je objekat koji predstavlja 3D scenu u formatu koji je optimalan za izračunavanje zraka na GPU-ovima. Predstavljena kao hijerarhija na dva nivoa, ova struktura obezbeđuje optimizovano prikazivanje zraka na GPU-u i efikasnu modifikaciju dinamičkih podataka.
  2. Nova metoda lista komandi ( lista komandi) pod naslovom DispatchRays je osnova za praćenje zraka u sceni. Ovako igra prenosi DXR radna opterećenja na GPU.
  3. Skup novih tipova ray shadera koji definiraju šta će DXR izračunati. Kada se DispatchRays pozove, pokreće se shader generacije zraka. Kada koristite novu funkciju TraceRay u HLSL-u, shader generacije zraka šalje zrak u scenu, a ovisno o tome gdje zrak pogađa u sceni, jedan od nekoliko pogođenih shadera može se pozvati u točki presjeka ( hit) ili propustiti ( nedostajati), koji vam omogućava da svakom objektu dodijelite vlastiti set sjenčanja i tekstura i kreirate jedinstvene materijale.
  4. Stanje cjevovoda praćenja dodano postojećoj grafici i stanju cevovoda za izračunavanje, prevođenje shadera za praćenje zraka i drugih stanja relevantnih za radna opterećenja praćenja.

Dakle, DXR ne dodaje novi GPU motor postojećem grafičkom i računarskom mehanizmu u DirectX 12. Radno opterećenje DXR-a može se pokrenuti na postojećim mašinama, budući da je DXR računski zadatak u svojoj srži. DXR zadaci su predstavljeni kao računarska radna opterećenja jer GPU-ovi ionako postaju svestraniji i sposobni su za obavljanje gotovo bilo kojeg zadatka koji nije nužno povezan s grafikom, a u budućnosti će većina fiksnih funkcija GPU-a vjerojatno biti zamijenjena shader kodom.

Kada koristite DXR, prvi korak je izgradnja struktura ubrzanja na dva nivoa. Na najnižem nivou strukture, aplikacija definiše skup geometrijskih podataka (bafere vrhova i indeksa) koji definišu objekte u sceni. Na najvišem nivou strukture definisana je lista opisa koja sadrži reference na specifične geometrijske podatke, kao i dodatne podatke kao što su matrice transformacije, koje se ažuriraju svaki okvir, slično kao što igre to rade da bi dinamički menjale objekte. Ovo osigurava efikasno prelaženje velikog broja složenih geometrija.

Drugi korak kada koristite DXR je kreiranje stanja cevovoda praćenja. Moderne igre grupni pozivi za izvlačenje ( izvući pozive) za povećanje efikasnosti njihovog izvođenja u posebne grupe- paketi ( serija), na primjer, crtanje svih metalnih predmeta u jednoj seriji, a svih plastičnih predmeta u drugoj. Ali prilikom praćenja, nemoguće je unaprijed znati u koji će točno materijal određeni snop pogoditi, a serije se ne mogu primijeniti. Umjesto toga, stanje cjevovoda za usmjeravanje omogućava dodjeljivanje više skupova shadera za usmjeravanje i teksturnih resursa. Na ovaj način možete specificirati, na primjer, da sve raskrsnice zraka s jednim objektom trebaju koristiti taj i takav specifičan shader i takvu i takvu teksturu, a sjecišta s drugim objektom trebaju koristiti različite shadere i drugu teksturu. Ovo omogućava aplikaciji da koristi ispravan kod shadera sa ispravnim teksturama za materijale koji su pogođeni zracima.

Poslednji korak u DXR-u je pozivanje DispatchRays-a, koji poziva shader da generiše zraku. Unutar nje, aplikacija poziva funkciju TraceRay, koja uzrokuje da se pređe struktura ubrzanja i da se odgovarajući shader izvrši prilikom pogodaka ili promašaja (dva različite vrste shaderi). TraceRay se također može pozvati iz ova dva shadera kada se koristi rekurzija zraka ili efekti s višestrukim odbijanjem.


Zašto ne bismo koristili kompjuterske shadere koji su nam već poznati iz DirectX-a za praćenje zraka? Prvo, DXR vam omogućava da pokrenete odvojene shadere kada zraci udare i promaše, a drugo, proces renderiranja može se ubrzati na GPU-ovima (koristeći Nvidia RTX ili analoga konkurenata), i treće, novi API vam omogućava da povežete resurse pomoću tabela shadera.

Nvidia RTX je skup softverskih i hardverskih algoritama koji ubrzavaju praćenje na Nvidia rješenjima baziranim na grafičkoj arhitekturi Volta. Zašto prethodne arhitekture koje se ne razlikuju toliko od Volte nisu podržane? Možda je ovo djelimično marketinški trik, da privuče kupce na nove proizvode, a možda Volta ima neke hardverske optimizacije koje mogu ozbiljno ubrzati praćenje zraka na GPU-u, o čemu nam još uvijek nije rečeno. Da, jedini GPU sa ovom arhitekturom do sada ima tenzorska jezgra koja ubrzavaju zadatke umjetne inteligencije, ali ako se može koristiti u renderiranju s praćenjem zraka, onda samo u procesu smanjenja šuma, pa čak i tada - prema dostupnim podacima, u postojeći algoritmi za smanjenje buke. Takve mogućnosti još nisu primijenjene.

DXR i RTX imaju koristi od moćnog i fleksibilnog modela programiranja, sličnog Nvidia OptiX, koji čini relativno lakim pisanje efikasnih algoritama za praćenje zraka. Da biste počeli razvijati aplikacije koristeći DXR praćenje zraka, hardverski ubrzan s RTX-om, trebat će vam grafička kartica bazirana na Volta arhitekturi (trenutno samo Titan V) i verzija drajvera 396 ili novija, kao i operativni sistem Windows 10 RS4 i Microsoft DXR Developer Kit koji sadrži sve što vam treba. Također će biti korisno za otklanjanje grešaka Microsoft PIX ili NSight Graphics Nvidia kompanije koje već imaju podršku za DXR API.

Radi lakšeg razvoja i otklanjanja grešaka, Microsoft je odmah objavio novu verziju uslužnog programa PIX za Windows sa podrškom za DXR mogućnosti. Ovaj alat vam omogućava da uhvatite i analizirate okvire napravljene pomoću DXR-a tako da programeri tačno razumiju kako DXR radi s hardverom, uhvati sve greške i optimizira svoj kod. Uz PIX, programeri mogu istraživati ​​API pozive, vidjeti stanje objekata i resursa povezanih s radom praćenja i vidjeti strukture ubrzanja. Sve ovo mnogo pomaže pri razvoju DXR aplikacija.


Na kraju krajeva, DirectX Raytracing API dopunjuje iskustvo programera sa specijalizovanim shaderima i strukturama koje su pogodne za praćenje zraka, sposobnošću da se istovremeno radi s ostatkom tradicionalnog grafičkog cevovoda i kompjuterskih shadera, itd. Konceptualno, ovo se ne razlikuje mnogo od onoga što Imagination Tech je nekoliko godina unazad nudio OpenRL i njegova hardverska rješenja. Nažalost, ImgTec je bio previše ispred svog vremena sa svojim PowerVR Wizard čipovima, ali morate imati dovoljno sredstava ne samo za početni razvoj, već i za promociju svoje zamisli. DXR je API tako velike i opšte priznate kompanije kao što je Microsoft, a oba proizvođača grafičkih procesora za igre (Nvidia i AMD, a možda će im se uskoro dodati i Intel, ko zna) već rade zajedno sa Microsoftom na optimizaciji novog API-ja za njihovu hardversku arhitekturu.

Kao i svi zatvoreni API-ji, DXR također ima određeni nedostatak u tome što programer jednostavno ne zna kako određene stvari funkcionišu unutar API-ja, koje specifične strukture za ubrzavanje se koriste da bi se osiguralo efikasno paralelno renderiranje na GPU-ovima i koje su prednosti i nedostaci, šta karakteristike (potrošnja memorije, latencija, itd.), kako radi planer praćenja zraka, da li je postignuta ravnoteža između upotrebe memorije, kašnjenja, korištenja registra, itd., koji dio rada tracera se izvodi u hardveru na GPU-u i šta u drajveru i API-ju. Sva takva rješenja pate od svoje zatvorenosti, a DXR nije izuzetak.

Usput, postoji alternativa korištenju DXR API-ja - zaposlenici Nvidie rade na proširenju multi-platforme Vulkan API, dizajniran za praćenje zraka - VK_NV_raytracing. Razvojni tim sarađuje sa kolegama iz Khronos stvoriti multiplatformski otvoreni standard, a jedan od glavnih ciljeva je pokušati učiniti da praćenje zraka u DirectX-u i Vulkanu radi što sličnije.

Igre koje koriste rasterizaciju često izgledaju vrlo uvjerljivo i realno, jer su njihovi programeri potrošili dosta vremena dodajući sve potrebne efekte i algoritme koji simuliraju širenje svjetlosnih zraka u stvarnosti. I u ranim godinama, DXR-ove mogućnosti će se koristiti i za dopunu postojećih tehnika renderovanja, kao što su refleksije u prostoru ekrana - za popunjavanje podataka o skrivenoj geometriji koja nije vidljiva na ekranu, što će dovesti do povećanja kvaliteta ovih efekata. . Ali u narednih nekoliko godina možete očekivati ​​povećanje upotrebe DXR-a za tehnike koje se ne koriste u rasterizaciji, kao što je potpuno globalno osvjetljenje. U budućnosti, praćenje zraka može u potpunosti zamijeniti rasterizaciju pri renderiranju 3D scena, iako će rasterizacija dugo vremena ostati idealan balans između performansi i kvaliteta.

Trenutno samo Nvidia rješenja Volta porodice (koristeći RTX tehnologiju) imaju punu hardversku podršku za DirectX Raytracing, odnosno danas samo skupi Titan V, a na prethodnim GPU-ovima ove kompanije, kao i na AMD GPU-ima, praćenje zraka u potpunosti se izvodi pomoću računalnih shadera – to jest, dostupna je samo osnovna podrška za DXR sa nižim performansama. Međutim, AMD je već izjavio da rade zajedno s Microsoftom na implementaciji ubrzanja praćenja hardvera i uskoro će osigurati drajver koji će ga podržati, iako se za sada čini da postojeće AMD arhitekture vjerojatno neće moći pružiti visok nivo ubrzanja sličnog za Nvidia Volta. RTX hardverski ubrzana tehnologija praćenja zraka koristi Volta arhitekturu koja tek treba da bude najavljena mogućnosti ubrzanja hardverskog praćenja zraka, a očekuje se da će podržati rješenja za igre kasnije ove jeseni.

Gledajući još dalje u budućnost, pojava API-ja za ubrzanje rasterizacije je donekle u suprotnosti sa opštom univerzalizacijom GPU-a, koji postaju sve sličniji konvencionalnim procesorima dizajniranim za bilo koju vrstu računanja. Dugi niz godina se govori o potpunom uklanjanju iz GPU-a svih blokova koji obavljaju fiksne funkcije, iako to do sada nije dobro funkcioniralo (možete se sjetiti ne baš uspješnog Intel Larrabee). Ali općenito, veća programibilnost GPU-a će učiniti još lakšim miješanje rasterizacije i praćenja, a potpuno praćenje možda više neće zahtijevati nikakve API-je za podršku hardverskog ubrzanja. Ali ovo gleda predaleko, za sada imamo posla sa DXR-om.

DirectX Raytracing i podršku za ovu ekstenziju API-ja od strane programera softvera i hardvera praktična mogućnost koristeći praćenje zraka u kombinaciji sa uobičajenim API-jem za "rasterizaciju". Zašto je to potrebno, budući da su moderni GPU-i već u stanju da izvedu gotovo bilo koje proračune koristeći kompjuterske shadere, a programeri mogu izvršiti praćenje zraka pomoću njih? Cijela poenta je standardizirati mogućnosti hardverskog ubrzanja praćenja na specijaliziranim jedinicama u GPU-u, što se neće dogoditi ako se koriste univerzalni računarski shaderi koji nisu za to namijenjeni. Neke nove hardverske mogućnosti modernih grafičkih arhitektura omogućavaju brže praćenje zraka i ova funkcionalnost se ne može izložiti korištenjem postojećeg DirectX 12 API-ja.

Microsoft ostaje vjeran sebi – kao i dio za rasterizaciju DirectX-a, novi API ne definira točno kako bi hardver trebao funkcionirati, ali omogućava programerima GPU-a da ubrzaju samo određene Microsoft standardizirane mogućnosti. Programeri hardvera su slobodni da podrže izvršavanje DXR API komandi na način na koji žele, Microsoft im ne govori tačno kako GPU-ovi to treba da urade. Microsoft uvodi DXR kao računski zadatak koji se može izvoditi paralelno sa dijelom "rasterizacije", a DXR donosi i nekoliko novih tipova shadera za obradu zraka, kao i optimizovanu strukturu za 3D scenu, pogodnu za praćenje zraka.

Budući da je novi API namijenjen programerima softvera, Microsoft im obezbjeđuje osnovni nivo podrške za praćenje zraka u DXR-u koji može koristiti sav postojeći hardver koji podržava DirectX 12. I prvi eksperimenti s DXR-om mogu se započeti na postojećim GPU-ovima, iako neće biti dovoljno brz za upotrebu u stvarnim aplikacijama. Sav hardver sa podrškom za DirectX 12 će podržavati praćenje zraka, a neki jednostavni efekti se mogu napraviti čak i sa postojećom bazom video kartica u rukama igrača. Vidjet ćemo neke efekte korištenja DXR-a u igrama ove godine, ali definitivno u 2019. - barem kao ranu demonstraciju mogućnosti novih tehnologija.

Vjerovatno će početne performanse praćenja na različitim GPU-ima uvelike varirati. Rješenja bez izvorne podrške, koristeći osnovnu razinu podrške kroz kompjuterske shadere, bit će vrlo spora, a GPU-ovi s podrškom za praćenje hardvera odmah će nekoliko puta ubrzati proces - baš kao u dobrim starim danima početnog razvoja podrške za rasterizaciju hardvera. . Vremenom će se sve više proračuna tokom trasiranja obavljati optimalnije i znatno efikasnije, ali će to zahtijevati nova grafička rješenja. Prvi bi se trebao pojaviti u narednim mjesecima.

Usporedno poređenje rasterizacije i praćenja

Hajde da pokušamo da pogledamo konkretni primjerišta praćenje zraka može pružiti. Zapravo, sada se već koristi u igrama, ali u malo drugačijim, primitivnijim oblicima. Konkretno, u algoritmima koji koriste prostor na ekranu ili algoritam praćenja vokselnog stožca pri izračunavanju globalnog osvjetljenja, uključujući dobro poznati algoritam Voxel Ambient Occlusion (VXAO) Nvidia kompanija. Ali to još uvijek nije punopravno praćenje zraka, već hakovi s njegovom upotrebom u ovom ili onom obliku tokom rasterizacije, a danas govorimo o punopravnom praćenju zraka za cijelu geometriju scene.

Moderni GPU-ovi su već prilično moćni i sposobni su za praćenje svjetlosnih zraka velikom brzinom koristeći softver kao što je npr Arnold (Autodesk), V-Ray (Chaos Group) ili Renderman (Pixar), a mnogi arhitekti i dizajneri već koriste hardverski ubrzano praćenje zraka za brzo kreiranje fotorealističnih prikaza svojih proizvoda, smanjujući troškove u cjelokupnom procesu razvoja. Nvidia je uključena u razvoj hardverski ubrzanih tehnika praćenja zraka u profesionalnom svijetu više od jedne decenije, a sada je došlo vrijeme da se ove mogućnosti uvedu u igre.

Kako bi pomogla programerima igara da implementiraju praćenje zraka, Nvidia je najavila nadolazeći dodatak za GameWorks SDK karakteristike kao što su specifični algoritmi za smanjenje šuma, visokokvalitetno globalno sjenčanje, sjene iz izvora svjetlosti u području ( prostorna svjetla) i algoritam za crtanje visokokvalitetnih refleksija.

Najbolji prikazi sa praćenjem zraka zahtijevaju veliki broj uzoraka (zraka izračunatih po pikselu) da bi se postigao visok kvalitet – stotine do hiljade! Zavisi od složenosti scene, ali čak i nekoliko desetina zraka nije pogodno za proračune u stvarnom vremenu, budući da će čak i GPU-ovi skoro budućnosti s podrškom za praćenje hardvera moći pružiti prihvatljive performanse s mnogo manjim brojem zraka po pikselu - samo nekoliko. Ima li smisla gnjaviti se?

Da, ako dodatno obradite rezultirajuću sliku (htjeli smo pobjeći od hakova za rasterizaciju, ali izgleda da ćemo za sada morati da trpimo druge). Konkretno, izvođenje praćenja na produktivnom rješenju Volta arhitekture omogućava performanse u realnom vremenu pri izračunavanju 1-2 uzorka po pikselu uz obavezno korištenje redukcije šuma. Već postoje algoritmi za smanjenje šuma koji mogu značajno poboljšati kvalitet slike nakon praćenja zraka, a ovo su samo prvi razvoji koji su u toku.

Zahtjevi za algoritme za smanjenje šuma u realnom vremenu su prilično visoki; morate biti u mogućnosti obraditi vrlo bučne ulazne slike s ekstremno malim brojem zraka po pikselu (do 1 uzorak), osigurati stabilan kvalitet u pokretu koristeći informacije iz prethodnih okvira , i izvršavaju se izuzetno brzo bez trošenja više od 1 ms GPU vremena. Postojeći Nvidia algoritmi mogu postići vrlo dobre rezultate pri renderiranju refleksija, mekih sjenki i globalne okluzije. Za svaki efekat se koriste specifični algoritmi koji koriste i informacije o 3D sceni.


Praćenje zraka korišteno je za renderiranje sjenki s jednim uzorkom po pikselu i omogućenom redukcijom šuma


Za izračunavanje globalne okluzije koristili smo dvije zrake po pikselu sa smanjenjem šuma


A prilikom renderiranja refleksije izračunat je samo jedan zrak po pikselu; smanjenje šuma je također neophodno

Ray Tracing Denoiser kao dio GameWorks SDK je skup biblioteka za korištenje nekoliko tehnika brzog praćenja zraka koje koriste smanjenje šuma, što je vrlo važno za praćenje s malim brojem zraka po pikselu, budući da je rezultat obično izuzetno bučan. Algoritmi uključuju renderiranje mekih sjenki iz izvora svjetlosti u području i algoritme za prikazivanje refleksije i globalnog sjenčanja ambijentalne okluzije. Korištenje smanjenja šuma omogućava vam da postignete veliku brzinu s malim brojem uzoraka po pikselu, ali kvalitet slike ostaje odličan – mnogo bolji od tehnika koje se trenutno koriste za simulaciju širenja svjetlosti kroz scenu i korištenje prostora na ekranu.

Hajde da razgovaramo o prednostima praćenja zraka prilikom renderovanja senki. Koristeći praćenje, možete crtati fizički ispravne senke sa mekim ivicama, mnogo realističnije od najsofisticiranijih tehnika koje su dostupne pomoću mapa senki i filtriranja. Čak i za veoma velike izvore svetlosti, realistične meke senke se dobijaju bez nedostataka koji se javljaju u rasterizaciji.


Sjene s tragom zraka


Sjene dobivene rasterizacijom i mapama sjena

Također možete koristiti algoritme koji su nemogući ili složeni kada simulirate mape sjena, kao što su sjene iz izvora svjetlosti područja. I što je najvažnije, ovo potpuno eliminiše sve moguće vizuelne artefakte: treperenje piksela na ivicama, nazubljene linije, itd. Da, tokom razvoja rasterizacije, mnogi hakovi su već izmišljeni za suzbijanje artefakata, ali praćenje zraka sve radi prirodno.

Za izračunavanje globalnog sjenčanja ( Ambijentalna okluzija) Volio bih da koristim i praćenje zraka, jer pruža znatno veći kvalitet u odnosu na sve postojeće tehnike u prostoru ekrana (sve ovo SSAO, HBAO i čak VXAO). Gotovo svi algoritmi koji se danas koriste jednostavno dodaju tamu uglovima koji se nalaze na ravnoj slici, samo simulirajući širenje svjetlosti, a korištenje praćenja omogućava da se to uradi na fizički ispravan način.


Globalna okluzija pomoću praćenja zraka


Globalno senčenje simulacijom efekta korišćenjem prostora na ekranu

Štaviše, sve tehnike koje koriste prostor na ekranu zanemaruju uticaj geometrijskih objekata izvan scene i iza kamere, a takođe dodaju isto senčenje na potpuno različite površine. U gore prikazanom primjeru mnogi od ovih problema su jasno vidljivi - jasno je da je ovo samo pokušaj simulacije širenja svjetlosti u 3D sceni, ali praćenjem se postiže osjetno fotorealističniji izgled.

Prilikom renderiranja refleksije Praćenje također može pružiti primjetno bolji kvalitet od trenutnih metoda koje koriste prostor na ekranu, kojima nedostaju podaci izvan ekrana (fizički nisu u stanju da nacrtaju u refleksiji ono što nije vidljivo na ekranu) i koje iscrtavaju svjetla na odsjajima pogrešno - od -due na činjenicu da se koristi direktni smjer gledanja, a ne reflektirani.


Refleksije dobivene praćenjem zraka


Refleksije koje nastaju rasterizacijom prostora ekrana

Nvidijin primjer može biti preuveličan i previše očigledan u vezi sa problemima sa tehnikama refleksije koje koriste prostor na ekranu, ali poenta je jasna – fizički ispravne refleksije mogu se prikazati samo pomoću praćenja zraka. Druge metode za prikazivanje refleksije nisu univerzalne i pružaju lošiji kvalitet - na primjer, ravne refleksije rade samo na ravnim površinama. Ali metoda praćenja također ima nedostatak - s malim brojem uzoraka bit će potrebno smanjenje šuma, jer s jednom izračunatom zrakom po pikselu slika ispada izuzetno bučna.

Ispostavilo se da u ovom trenutku redukciju šuma uvijek treba koristiti, a trenutna verzija specifičnih tehnika sa Nvidia redukcijom buke ima svoja ograničenja i nedostatke. Na primjer, tehnika renderiranja sjenki će proizvesti degradirane okludirane sjene od dva objekta koji stvaraju sjenku s velikim razlikama u udaljenosti od površine koja se zasjenjuje. Algoritam za renderiranje refleksije degradira u kvalitetu sa povećanom hrapavostom površine, a algoritam za renderiranje globalne okluzije može zahtijevati ne jednu, već dvije ili čak više izračunatih zraka po pikselu za prikazivanje finih detalja.

Ali ovo su samo početne verzije tehnika koje koriste filtere za smanjenje šuma, koji će nastaviti da se poboljšavaju iu kvaliteti i performansama. Osim toga, u budućnosti je moguće koristiti smanjenje buke korištenjem tehnologija umjetne inteligencije, koje su već uključene u Nvidia OptiX 5.0, ali se još ne koristi za praćenje pomoću RTX-a. Vjerovatno je da će se u budućnosti koristiti jedno smanjenje šuma za sve komponente rasvjete odjednom (a ne tri odvojene, kao što je sada učinjeno) kako bi se smanjili troškovi memorije i performanse. Takođe vas ništa ne sprečava da koristite hibridni pristup renderovanju, koristeći elemente algoritama prostora ekrana sa dodatnim praćenjem zraka.

Osim korištenja praćenja zraka u motorima za igre u realnom vremenu, snaga GPU-ubrzanog DXR-a također se može koristiti u kreiranju sadržaja. Na primjer, za visokokvalitetne proračune osvjetljenja, koje se zatim stavljaju u mape svjetla, za kreiranje unaprijed renderiranih scena u igričaru, ali s većim kvalitetom, itd. Štaviše, praćenje zraka možete koristiti ne za uopće renderiranje, već u zvučnim mašinama za virtuelnu stvarnost ( Nvidia VRWorks Audio), u fizičkim proračunima ili čak u algoritmima umjetne inteligencije.

Praćenje zraka je korisno u procesu kreiranja sadržaja: fino podešavanje karakteristika materijala uz kvalitetan i brz rendering, dodavanje i prilagođavanje karakteristika izvora svjetlosti, otklanjanje grešaka u algoritmima za smanjenje šuma, itd. kvalitetan offline render koristeći iste strukture uz relativno malo truda i resursa kao motor u realnom vremenu. Na primjer, to je već urađeno u Unreal Engine 4- Nvidia je sama napisala eksperimentalni Path Tracer odmah nakon integracije DXR mogućnosti u engine, koji, iako još ne pruža dovoljan kvalitet za potpuno offline renderiranje, pokazuje takvu mogućnost.

O mogućnosti brze i efikasne pripreme svjetlosnih mapa čak i ne govorimo - "pečenje" svjetlo u posebne mape osvjetljenja (lightmape) za statične objekte u sceni. Takav motor može koristiti isti kod u igri i editoru i obezbijediti pripremu razne vrste Svetlosne mape (2D, 3D) i ekološke kocke karte.


Ovo je važno ne samo zato što će praćenje zraka ubrzati proces konačnog generiranja svjetlosnih mapa, već će omogućiti i bolji pregled takvih svjetlosnih mapa, omogućavajući vam da brzo promijenite lokaciju i karakteristike izvora svjetlosti i objekata u sceni, odmah. dobijanje rezultata na ekranu - skoro isto kakvo će biti konačno osvetljenje.

Konačno, predlažemo da se sagledaju sve prednosti praćenja zraka u dinamici. Nvidia je objavila kolekciju tehnoloških demonstracija koje pokazuju prednosti hardverski ubrzanog praćenja zraka pomoću Nvidia tehnologije RTX koristeći DXR API (samo u obliku videa na Youtube-u, nažalost).

Demo jasno pokazuje prednosti prikazivanja ucrtanih senki, uključujući meke i obojene, razliku u globalnom kvalitetu okluzije kada se koristi rasterizacija i prostor na ekranu u poređenju sa praćenjem zraka, realistične refleksije na različitim vrstama materijala sa višestrukim refleksijama, pametne sisteme smanjenja šuma i korištenje praćenja prilikom pripreme unaprijed renderiranih statičkih svjetlosnih mapa.

Demonstracija mogućnosti praćenja zraka

Kako bi demonstrirali mogućnosti DirectX Raytracing API-ja i Nvidia RTX tehnologije, nekoliko vodećih programera igara i benchmark programera objavilo je svoje tehnološke demonstracije za GDC 2018, pokazujući neke od mogućnosti novih tehnologija koje koriste praćenje zraka: 4A igre, Electronic Arts, Epic Games, Remedy Entertainment, Unity i drugi. Nažalost, za sada su dostupni samo u obliku snimaka ekrana, prezentacija i videa na Youtube-u.

Dok su ranije slične demonstracije praćenja zraka u realnom vremenu bile prikazane ili u vrlo jednostavnim scenama sa jednostavnim efektima ili pri niskim performansama, mogućnosti budućih GPU-a mogu učiniti praćenje zraka stvarnim čak i u uvjetima igranja s prihvatljivim performansama. Programeri Epic Games i Remedy Entertainment vjeruju da će DXR i RTX mogućnosti donijeti bolju grafiku budućim igrama, a implementacija osnovne podrške za novi API u njihovim motorima se pokazala relativno jednostavnom.

DirectX Raytracing tech demo (Futuremark)

Na primjer, kompanija poznata svim entuzijastima 3D grafike po svojim test paketima Futuremark pokazao demo tehnologije DXR-a, napravljen pomoću posebno razvijenog hibridnog motora koji koristi praćenje zraka za visokokvalitetne refleksije u realnom vremenu.

Već smo rekli da je kada se koriste trenutno uobičajene metode, crtanje realističnih i fizički ispravnih refleksija u 3D sceni vrlo teško; u procesu kreiranja algoritama, programeri se suočavaju s puno poteškoća koje na kraju koštaju različite metode, ali odrazi ostaju daleko od idealnih. Tokom proteklih nekoliko mjeseci, programeri u Futuremark-u su istraživali korištenje DXR-a u hibridnom renderiranju i postigli su neke prilično dobre rezultate.

Koristeći hardverski ubrzano GPU praćenje zraka, dobili su fizički ispravne refleksije za sve objekte u sceni, uključujući i dinamičke. Otvorite sljedećih nekoliko slika u punoj veličini, jer su to GIF animacije koje jasno pokazuju razliku između praćenja i konvencionalnijih metoda koristeći prostor na ekranu:

Razlika je očigledna. Osim razlika u detaljima refleksije, korištenjem DXR praćenja možete dobiti i refleksije objekata koji postoje izvan prostora ekrana, tj. nisu u dometu gledanja kamere za igru, kao što se može vidjeti na uporednim snimcima ekrana, a sam odraz općenito izgleda mnogo uverljivije. Evo još jednog primjera, možda manje očitog, ali koji daje ideju:

Upotreba praćenja zraka proizvodi precizne, perspektivno ispravljene refleksije na svim površinama u sceni u realnom vremenu. Jasno je vidljivo da je ucrtavanje mnogo bliže realizmu od poznatijih refleksija prostora ekrana koji se koriste u većini modernih igara. Evo još jednog poređenja:

Ako ne pogledate refleksije dobivene korištenjem DXR-a, onda se može činiti da konvencionalne metode daju dobar kvalitet, ali tako se samo čini. Štaviše, refleksije su važne ne samo za ogledala sa visokom refleksijom, već i za sve druge površine - sve one postaju realnije čak i ako nisu odmah vidljive.

U svom demo-u, Futuremark koristi mogućnosti praćenja zraka samo za rješavanje problema s kojima se teško može boriti konvencionalnim metodama, kao što su refleksije dinamičkih objekata koji se nalaze izvan glavnog prostora ekrana, refleksije na neplanarnim površinama i refleksije ispravljene u perspektivi za složene objekte. . Evo kvalitetnijih snimaka ekrana iz DXR demo:




Moderni GPU-i već mogu koristiti hibridno renderiranje, koristeći rasterizaciju za većinu posla i relativno malo unosa iz praćenja kako bi poboljšali kvalitet sjenki, refleksija i drugih efekata kojima je teško rukovati korištenjem tradicionalnih tehnika rasterizacije. A Futuremark demo program samo pokazuje primjer takvog pristupa; radi u realnom vremenu na postojećem GPU-u, iako jedan od najmoćnijih.

Glavna stvar je da im je, prema riječima programera iz Futuremarka, bilo prilično lako implementirati podršku za praćenje zraka u postojeći DirectX 12 engine iz benchmarka 3DMark Time Spy, koristeći modele i teksture iz njihovih testova. Uz tehnički demo, poznati programeri 3D testova najavili su korištenje mogućnosti DirectX Raytracing u svom sljedećem 3DMark benchmark-u, koji je planiran da bude objavljen krajem ove godine.

Reflections Real-Time Ray Tracing Demo (Epic Games)

Kompanija Epic Games zajedno sa ILMxLAB I Nvidia takođe je pokazala svoju opciju da uključi mogućnosti praćenja zraka u realnom vremenu u motor Unreal Engine 4. Projekcija je održana na otvaranju GDC 2018, gdje su tri od ovih kompanija predstavile eksperimentalnu filmsko-realističnu demonstraciju na temu filmskog serijala "Ratovi zvijezda" koristeći likove iz serije "Sila se budi" I "Posljednji džedaj".


Epic Games demo koristi modificiranu verziju Unreal Engine 4 i Nvidia RTX tehnologije, čije se mogućnosti otkrivaju kroz DirectX Raytracing API. Da bi izgradili 3D scenu, programeri su koristili stvarne resurse iz filmova Ratovi zvijezda: Posljednji džedaji With Kapetane Phasma u sjajnom oklopu i dva jurišna trupa sa scenom u brodskom liftu First Order.

Predmetni tehnički demo sadrži osvjetljenje koje se dinamički mijenja koje se može podesiti u hodu, kao i efekte praćene zrakama, uključujući visokokvalitetne meke sjene i fotorealistične refleksije - sve renderirano u realnom vremenu i vrlo visokog kvaliteta. Ovakav kvalitet slike jednostavno nije dostupan bez upotrebe ray tracinga, a sada ga može pružiti poznati Unreal Engine, kojim je osnivač i predsjednik Epic Gamesa bio veoma impresioniran Tim Sweeney.

Napredne tehnike u demonstraciji tehnologije uključuju: područje svjetla uključujući meke sjene prikazane pomoću praćenja zraka, kao i refleksiju i globalno renderiranje okluzije pomoću praćenja zraka, smanjenje šuma rezultata praćenja zraka iz Nvidia GameWorks paketa, kao i visoko- kvalitetan efekat dubine polja (ne koristi praćenje, ali je i sladak).


Snimci ekrana i video pokazuju veoma visok kvalitet svih ovih efekata, a ono što je posebno impresivno su realistične refleksije kojih u sceni ima dosta. Svi objekti se reflektuju u svim objektima, što je vrlo teško, ako ne i nemoguće, renderovati prilikom rasterizacije. Metoda prikazivanja odraza u prostoru ekrana dala bi samo imitaciju stvarnosti, u kojoj se ne bi reflektovalo sve što nije uključeno u kadar, a ostalo bi bilo vrlo teško kvalitativno prikazati.

Osim odsjaja, mogu se uočiti i najmekše sjene, koje svojim poderanim i/ili vrlo oštrim ivicama ne upadaju u oči, kao što se dešava pri korištenju mapa sjena. Pa, naknadna obrada ovdje je vrlo kvalitetna. Generalno, programeri su dali sve od sebe i ova demonstracija se pokazala kao možda jedna od najimpresivnijih za hardverski ubrzano praćenje zraka.

Da bi kreirali ovaj demo, Epic Games je blisko sarađivao sa umjetnicima iz ILMxLAB-a i inženjerima iz Nvidije kako bi demonstrirali mogućnosti Nvidia RTX tehnologije koja radi kroz DXR API. Unreal Engine demo radi u realnom vremenu na radnoj stanici DGX stanica Nvidia, koja uključuje čak četiri GPU-a Volta arhitekture. Kombinacijom snage Unreal Engine-a, grafičkog API-ja za praćenje zraka DXR i Nvidia RTX tehnologije koja radi na Volta porodici GPU-a, približavamo se kinematografskom realizmu u realnom vremenu.

Pored demonstracije tehnologije, stručnjaci iz Epic Gamesa održali su veliku sesiju od sat vremena na GDC-u "Kinematsko osvetljenje u Unreal Engineu", posvećen novim karakteristikama njihovog motora. I sam demo se prikazuje svima sa mogućnošću da gledaju scenu u različitim modovima, uključujući i wireframe rendering. Možemo pretpostaviti da će sve ovo prije ili kasnije biti dostupno u igricama, jer je Unreal Engine veoma popularan. Epic Games je obećao da će ove godine omogućiti pristup mogućnostima DXR API-ja - vjerovatno bliže jeseni, kada budu objavljeni novi Nvidia GPU-ovi.


Podrška za DirectX Raytracing i Nvidia RTX otvara put za Unreal Engine 4 za novu klasu tehnika i algoritama koji ranije nisu bili dostupni uz dominaciju rasterizacije. U bliskoj budućnosti, programeri igara će moći da koriste hibridni pristup, koristeći visokokvalitetno praćenje zraka za neke efekte i rasterizaciju visokih performansi za većinu posla. Ovo je dobra osnova za budućnost, jer će mogućnosti GPU-a koje se odnose na efektivno ubrzanje praćenja zraka samo rasti.

Pica Pica — Eksperiment praćenja zraka u realnom vremenu (Electronic Arts/SEED)

Najnoviji programer zainteresovan za praćenje zraka putem DXR-a je studio SEED od Electronic Arts, koji je kreirao poseban demo program Pica Pica, koristeći eksperimentalni motor Halcyon, koji koristi hibridno prikazivanje poput prethodnih demonstracija. Ovaj demo je također zanimljiv jer je stvorio proceduralni svijet bez ikakvih preliminarnih proračuna.

Zašto su istraživači SEED-a odlučili koristiti hibridno renderiranje s praćenjem zraka? Eksperimentalno su otkrili da ova metoda može proizvesti mnogo realističniju sliku u usporedbi s rasterizacijom, vrlo blisku punom praćenju zraka (tracing putanje), što je pretjerano zahtjevno za resurse ili proizvodi previše bučnu sliku s malim brojem izračunatih uzoraka. Sve se to može jasno vidjeti iz uporednih snimaka ekrana:


Potpuno praćenje


Hibridni prikaz


Rasterizacija

U modernim igrama koriste se različiti hakovi za izračunavanje refleksije i osvjetljenja, uključujući preliminarni proračun osvjetljenja (barem njegovog statičkog dijela). Sve to zahtijeva dodatni rad od dizajnera nivoa, koji pametno postavljaju lažne izvore svjetlosti, započinju predkalkulaciju rasvjete, koja se potom bilježi u lightmape. A korištenje praćenja zraka za zadatke renderiranja omogućava izbjegavanje ovog dodatnog posla, jer praćenje zraka vam omogućava da prirodno izračunate sve što vam je potrebno, kao što smo već opisali gore.

A pošto potpuno praćenje još nije moguće, Halcyon motor koristi hibridni pristup. Za izračunavanje odloženog senčenja koristi se rasterizacija, za izračunavanje direktnih senki možete koristiti ili rasterizaciju ili praćenje zraka ako je potrebno, za direktno osvetljenje koristite računarske shadere, za refleksije možete koristiti i tradicionalni pristup i praćenje, za globalno osvetljenje uvek koristite praćenje, a za simulaciju ambijentalne okluzije možete se osloniti na konvencionalne metode ekrana kao što je SSAO ili također omogućiti praćenje zraka. Samo praćenje se koristi za prikazivanje prozirnih objekata, a kompjuterski shaderi se koriste za naknadnu obradu.


Konkretno, praćenje zraka se koristi za izračunavanje senki i refleksija – mnogo bolje i prirodnije nego kod trenutno uobičajenih tehnika. Na primjer, takve refleksije općenito se ne mogu napraviti korištenjem algoritama za izračunavanje refleksije prilikom rasterizacije i korištenja prostora na ekranu:


Praćenje zraka pri izračunavanju refleksije odvija se u pola rezolucije, odnosno 0,25 zraka/piksel se koristi za refleksije i 0,25 zraka/piksel za senke. I ovdje se pojavljuje problem malog broja izračunatih zraka u obliku izuzetno bučne slike s refleksijama, kada bez posebnog dodatna obrada Rezultat praćenja zraka izgleda previše grubo:


Stoga se nakon praćenja slika rekonstruiše do pune rezolucije renderovanja na poseban način - nekoliko vrlo pametnih algoritama (detalji se mogu naći u prezentaciji razvojnog tima na GDC 2018), kada se primljeni podaci filtriraju i informacije iz prethodnih okvira dodatno se prikuplja i uzima u obzir. Rezultat je potpuno prihvatljiv rezultat s realističnim odrazima, koji se ne razlikuje mnogo od potpunog praćenja putanje:


Ali možda uobičajene metode u prostoru ekrana neće dati ništa lošije rezultate i jednostavno nam ne treba "skupo" praćenje? Pogledajte ovo usporedno poređenje: na lijevoj strani su refleksije prostora ekrana, u sredini je hibridno praćenje zraka, a desno je referentni render s punim praćenjem zraka:


Razlika je očigledna. Metoda ekranskog prostora je vrlo približna, nerealna i samo simulira refleksije, iako na nekim mjestima nije loša, ali sa očiglednim artefaktima i problemima nedostatka rezolucije. Ne postoji takav problem s praćenjem, čak i ako se uzme u obzir smanjena rezolucija prilikom renderiranja zraka. U Pica Pica, praćenje zraka se također koristi za prikazivanje prozirnih i prozirnih objekata. Demo program izračunava prelamanje svjetlosti bez potrebe za prethodnim sortiranjem, kao i podzemno raspršivanje svjetlosti:

Do sada motor nije u potpunosti razvijen i ima jedan nedostatak koji je važan za fotorealizam - još ne može crtati sjene sa prozirnih objekata, ali to je pitanje vremena. Ali demo koristi globalni algoritam osvjetljenja koji ne koristi preliminarne proračune i podržava i statičke i dinamičke objekte, minimizirajući potrebu za dodatnim radom od strane umjetnika:


Globalno osvjetljenje isključeno


Globalno osvjetljenje omogućeno

Globalno osvjetljenje značajno utiče na neke objekte u sceni, dodajući realizam njihovom osvjetljenju. U demonstraciji možete dodatno koristiti tehnike za simulaciju globalnog senčenja, dajući dodatne senke. Podržani su i algoritmi u prostoru ekrana - Ambientna okluzija prostora ekrana (SSAO):


Možda bi to funkcioniralo još bolje sa nečim poput VXAO-a, koji Nvidia promovira, ali već izgleda prilično dobro. Ali slika će biti još bolja i realističnija s potpunim proračunom globalnog senčenja pomoću praćenja zraka. Pogledajte uporedne slike, razlika je upadljiva:



Dok SSAO daje samo privid globalnih senki, prikrivajući samo najočitije uglove, onda potpuno praćenje sve radi savršeno, dajući duboku senku tamo gde bi trebalo da bude, na osnovu zakona širenja svetlosti.

Što se tiče senki od direktnih zraka izvora svetlosti, kod tvrdih senki pri praćenju je sve prilično jednostavno - zraci se pokreću u pravcu izvora svetlosti i proveravaju se pogoci. Za meke sjene algoritam je sličan, ali rezultat s jednim uzorkom po pikselu je previše „bučan“ i mora se dodatno filtrirati, nakon čega slika postaje realističnija:


Tvrde senke, meke nefiltrirane i meko filtrirane senke

Programeri iz SEED studija posebno napominju da, iako je njihovo istraživanje hibridnog renderiranja u ranoj fazi, ovaj pristup omogućava zamjenu brojnih hakova s ​​gomilom objektivnih nedostataka jedinstvenim pristupom praćenja zraka koji omogućava bolji kvalitet renderiranja. Ono što je posebno važno je da sada programeri softvera imaju jedan, općeprihvaćeni API za praćenje zraka, a potrebno je samo dalje usavršavanje algoritama kako bi se poboljšao kvalitet renderiranja i optimizirali njegove performanse, budući da praćenje zraka ostaje prilično zahtjevno za hardver. .

U ovom trenutku, Pica Pica demo program izračunava samo 2,25 zraka po pikselu (ukupno, uključujući sve efekte), a rezultat je fotorealistična slika sa kvalitetom blizu punog praćenja, iako sa određenim ograničenjima. A sada - muha u masti: kao iu slučaju Epic Games demo verzije, da bismo ubrzali proces renderiranja, i dalje moramo istovremeno koristiti mogućnosti nekoliko vrhunskih GPU-a i prenositi minimalnu količinu podataka preko relativno sporog PCI-a Ekspresni autobus. Ali dalji razvoj hardverskog ubrzanja na GPU-ovima bi trebao pomoći da se riješimo takvih sistemskih zahtjeva u budućnosti.

Eksperimenti s DirectX Raytracing u Northlight-u (Remedy Entertainment)

Još jedan demo program za promociju DXR i RTX, predstavljen na GDC 2018, bili su eksperimenti sa motorom za igre Northlight Engine Finska kompanija Remedy Entertainment, javnosti poznat po igrama kao što su Max Payne, Alan Wake i Quantum Break. Northlight Engine intenzivno razvija kompanija poznata po svom interesovanju za najnovije grafičke tehnologije. Stoga nije ni čudo što su se zainteresirali za hardverski ubrzano praćenje zraka.

Na GDC-u, kompanija je pokazala razvoj na kojem su radili sa Nvidiom i Microsoftom. Među nekoliko programera, Remedy je dobio rani pristup Nvidijinim RTX i DXR API mogućnostima, koje su bile oličene u posebnoj verziji Northlight motora. Glavni grafički programer Tatu Aaltoa održao je govor na konferenciji "Eksperimenti sa DirectX Raytracing u Remedy's Northlight Engine", u kojem je govorio o karakteristikama hibridnog pristupa koji su usvojili.


Ovaj demo tradicionalno koristi rasterizaciju za brzinu i praćenje zraka za neke efekte koje bi inače bilo teško učiniti. Poboljšanja kvaliteta uključuju fizički zasnovane meke senke, visokokvalitetne globalne okluzije i osvetljenje, i realistične refleksije. Video prikazuje rezultat Northlight Engine-a sa svim omogućenim efektima, izračunat korištenjem praćenja zraka s povećanim brojem izračunatih zraka:

Kako bi sproveo eksperimente na uvođenju praćenja zraka, Remedy je stvorio novu scenu koja nije ni na koji način povezana s igricama kompanije. Kao što smo već rekli, DXR API podržava dva nivoa struktura ubrzanja: donji i gornji. Ideja je da struktura donjeg nivoa služi za skladištenje geometrije, a gornji nivo sadrži strukture nižeg nivoa. Odnosno, svaka poligonalna mreža je jedna struktura nižeg nivoa, a svaki gornji nivo sadrži nekoliko struktura nižeg nivoa sa mogućim geometrijskim transformacijama (rotacije, itd.).


Struktura nižeg nivoa je potrebna za statične delove scene; crveni kvadrati na dijagramu su granice stabla nižeg nivoa. Na primjer, u sceni postoje četiri primjera male stolice (mali crveni kvadrati) koji imaju istu geometriju, ali svoje geometrijske transformacije. Srednji kvadrati su male sofe, veliki kvadrati su velike okrugle sofe. Da biste kreirali scenu praćenja zraka, trebate umetnuti ove strukture nižeg nivoa u strukturu najvišeg nivoa, za koju DXR API ima posebnu funkciju koja prihvata višestruke instance strukture nižeg nivoa sa transformacijama.

Rad sa dinamički promjenjivom geometrijom je malo teži, budući da graditelji nižeg nivoa prihvataju samo statičke bafere. Ali i ovdje je moguća deformacija - uz pomoć kompjuterskog shadera koji prihvaća geometriju i matrice skinninga i upisuje već promijenjenu geometriju. Zatim možete započeti rad na izračunavanju zraka.

Prvo, uzmimo ambijentalnu okluziju, algoritam zasnovan na vidljivosti koji se lako može implementirati pomoću praćenja zraka. Sljedeća slika je napravljena renderiranjem četiri zraka po pikselu, sa maksimalnom dužinom postavljenom na četiri metra, a rezultat svakako izgleda bolje od SSAO metode, koja koristi samo prostor na ekranu.


Tradicionalna metoda izračunavanja globalne okluzije je naznačena na lijevoj polovini, a praćenje zraka je naznačeno na desnoj. Dok SSAO tehnika radi pristojan posao hvatanja nekih ivica, očigledno joj nedostaju geometrijske informacije o sceni — takvi algoritmi ne znaju šta je van ekrana ili iza površina vidljivih kameri. Dakle, rezultat očito nije idealan, iako je očito bolji nego bez sjenčanja.

Nažalost, performanse praćenja zraka su relativno niske i mnogo je skuplje od metoda za prostor na ekranu. Prema Remedyju, u njihovom demo programu, renderiranje jedne zrake po pikselu za globalnu okluziju s maksimalnom dužinom od 4 metra u Full HD rezoluciji traje otprilike 5 ms i performanse se skale gotovo linearno, tako da će renderiranje 16 zraka trajati oko 80 ms. Uz stalno unapređenje kvaliteta, naravno:


Ovi snimci ekrana su napravljeni sa redovnim antialiasing-om preko celog ekrana, uzimajući u obzir vremensku komponentu (podaci iz prethodnih okvira), i bez lukavog filtriranja, kao što je urađeno u većini drugih demonstracija prikazanih na GDC-u. Uz pametno smanjenje šuma, možete postići prihvatljiv kvalitet sa 1-2 zraka po pikselu.

Pored globalnog senčenja, Remedy demo takođe koristi praćenje zraka za renderovanje regularnih senki, koje sada najčešće koriste kaskadne mape senki kada su rasterizovane ( kaskadne karte sjena - CSM). Programeri napominju da ako motor ispunjava sjene iz usmjerenih izvora svjetlosti prije renderiranja osvjetljenja, tada će biti vrlo lako zamijeniti kaskadni shader mape sjena s kodom pomoću praćenja, koji će zapisati izračunate podatke u isti bafer.


U ovom slučaju, razlika u kvaliteti će jasno ići u korist traga (prikazano desno). Slika praćena zracima koristi 8 zraka po pikselu bez dodatnog filtriranja, dok CSM tehnika koristi 16 Procentualno bliže filtriranje (PCM) uzorci sa posebnim filterom nanesenim na pufer. Međutim, morate uzeti u obzir da programeri očigledno nisu optimizirali rad CSM-a u ovom slučaju, jer je bilo moguće podesiti rezoluciju mapa sjena i njihovo filtriranje kako bi se dobile bolje sjene, ali ovo je samo sjena sa podrazumevane postavke njihovog motora.

Ali čak i ako se uzme u obzir ovaj popust, razlika je očigledna - s praćenjem zraka sjene su mnogo realnije, imaju glatke rubove bez nazubljenih rubova, bolje zamućenje na rubovima, a čak i mali detalji (nogice stolice) bacaju fizički ispravnu sjenu . Krajnji rezultat su pristojne senke sa mekim i tvrdim ivicama senke tačno tamo gde treba da budu. Također možete lako crtati sjene iz izvora svjetlosti u području, što je izuzetno teško učiniti rasterizacijom.

Što se tiče performansi, ovaj demo prikazuje jedan zrak za Full HD rezoluciju za manje od 4 ms, što je nešto brže od globalne okluzije, iako su zraci duže. Implementacija praćenja zraka u postojeći DX12 mehanizam za iscrtavanje senki zahtijevat će nekoliko dana rada programera, ali rezultat će biti vrijedan toga ako performanse na kraju budu dovoljne.

Čini se da je Remedy dodao skoro sve moguće efekte sa praćenjem na njihov motor u početnoj fazi razvoja DXR-a. Uključujući refleksije prikazane pomoću praćenja zraka. Istovremeno, ne postoji tako očigledna upotreba u obliku čisto zrcalnih površina, već suptilniji pristup s refleksijama na svim objektima, ali manje očigledan. Sljedeći snimak ekrana prikazuje poređenje tehnika koje koriste praćenje zraka (desno) i prostora na ekranu (lijevo):


Trasirana slika je dobijena prikazivanjem samo jedne zrake refleksije po pikselu bez filtriranja. Očigledno je da su refleksije u prostoru ekrana manje realistične i uzimaju u obzir samo objekte vidljive glavnoj kameri, dok praćenje zraka omogućava i njihovo prikazivanje, iako ima svoje nedostatke u vidu značajnog šuma piksela. Ali to se u principu može riješiti, kao što pokazuju i drugi demo programi, a u verziji finske kompanije smanjenje šuma jednostavno još nije primijenjeno, s izuzetkom korištenja vrijednosti piksela iz prethodnih okvira za anti-aliasing preko cijelog ekrana.

Northlight Engine već koristi proračune globalnog osvjetljenja ( G.I.) - konkretno u igri Quantum Break, a ovaj efekat je podrazumevano omogućen u motoru. Za izračunavanje GI koriste se vokseli veličine približno 25 cm, koji su kombinovani sa rezultatom tehnike globalnog senčenja SSAO, koja koristi prostor na ekranu. Kao eksperiment, Remedy je zamijenio SSAO sa sličnim efektom koristeći praćenje zraka i rezultat je bio bolji.


Vidi se da površine nisu zasjenjene kako bi trebalo biti i očito nešto nije u redu s njima. Problem je riješen modifikacijom metode korištenja volumetrijskih podataka GI, čime se eliminira većina artefakata:


Zašto uopće trebate izračunavati globalno osvjetljenje/sjenčanje i da li je moguće bez ovog koraka koji zahtijeva veliku količinu resursa? Pogledajte vizualni primjer kako izgleda rezultat samo izračunavanja direktnog osvjetljenja:


Slično Doomu sa svojom stalnom tamom i oštrim sjenama šablona. Ali u sljedećem snimku ekrana, direktnom osvjetljenju je dodano i indirektno osvjetljenje - to jest, zraci svjetlosti reflektirani od drugih objekata u sceni:


Postalo je mnogo bolje, uprkos buci, scena je dobila volumen i ne izgleda kao da su svi njeni objekti locirani u prostoru uz prisustvo jednog jakog izvora svetlosti (sunce). A ovako izgleda konačna slika, sa postavljenim informacijama o boji, punim osvjetljenjem i naknadnom obradom:


Odrazi i sjenčanje u sceni po našem mišljenju izgledaju vrlo realistično. Konkretno, lampa odražava sve objekte, uključujući svijetli prozor nevidljiv glavnoj kameri. A šolja s desne strane odražava vlastitu olovku - to se ne može učiniti rasterizacijom bez pametnih hakova. Jedini očigledan problem praćenja ovdje je mnogo šuma piksela, koje Remedy još nije pokušao ukloniti. Ali isti algoritam iz Nvidia GameWorks mogao bi puno pomoći, a da ne spominjemo smanjenje buke korištenjem umjetne inteligencije.

Naravno, bilo bi jako lijepo koristiti praćenje zraka gdje god je to moguće, ali optimalno rješenje za hibridno renderiranje je optimizacija pomoću mapa sjena, koje se koriste u Remedy demo za većinu izvora svjetlosti osim sunca. A to će se u početku raditi u svakoj aplikaciji koja koristi praćenje zraka, jer će direktno korištenje svuda biti preskupo i još uvijek nije moguće u realnom vremenu, čak ni korištenjem nekoliko GPU-a odjednom.

Važno je da je integracija DXR i RTX podrške u Northlight engine bila prilično brza i bezbolna. Finski programeri su bili zapanjeni koliko su brzo uspjeli napraviti prototip poboljšanog osvjetljenja, sjenčanja i refleksije koristeći praćenje zraka – sve s mnogo boljim kvalitetom od tradicionalnih hakova za rasterizaciju. Iako su prikazane tehnologije trenutno u ranom razvoju i daleko od toga da su trenutno uključene u igre, to je odličan početak budućeg usvajanja.

Praćenje zraka u realnom vremenu u Metro Exodus (4A igre)

Vjerovatno ćemo u narednim godinama vidjeti više od jedne igre koja koristi hibridno renderiranje sa praćenjem zraka za prikazivanje nekih efekata. Konkretno, prva (ili barem jedna od prvih) bi trebala biti igra Metro Exodus, koji će koristiti DXR praćenje zraka koristeći Nvidia RTX tehnologiju za izračunavanje globalnog osvjetljenja i sjenčanja.

Pretpostavlja se da je ova metoda proračuna G.I.će biti dostupan u igri kao alternativa poznatijim algoritmima SSAO I IBL(osvetljenje zasnovano na slici, osvetljenje zasnovano na teksturi okruženja). Naravno, ovo je još uvijek izuzetno ograničena upotreba praćenja, ali kvalitet globalnog osvjetljenja/sjenčenja s praćenjem zraka je mnogo veći od čak u VXAO, da ne spominjem SSAO. Evo vizuelnog poređenja metoda ekranskog prostora sa praćenjem, koje su naše nemačke kolege preuzele sa ekrana izložbenog sistema (zato se unapred izvinjavamo na kvalitetu):

Teksture su tokom demonstracije isključene tako da je razlika u osvjetljenju scene bila jasno vidljiva. I to je istina, metode rasterizacije ekrana daju ravnu sliku koja samo nejasno imitira sjenčanje u uglovima između ivica objekata, a praćenje zraka daje fizički ispravno globalno sjenčanje i osvjetljenje s tamnim sjenama točno tamo gdje bi trebale biti - na primjer, pogledajte unutra cev pri ulasku u kuću kroz pukotine - kod SSAO-a uopšte nije zaklonjena unutra, ali sa trasiranjem zraka u dubini je mračna, kako i treba.

Ovdje se postavlja samo jedno pitanje - ako video prikazuje statičnu scenu, uopće bez dinamičkih objekata i njihovog utjecaja na globalno osvjetljenje, što vas onda sprječava da prvo sve izračunate van mreže i unesete ove podatke u statične svjetlosne mape? Čini nam se da je pri dinamičkom proračunu globalne osvjetljenosti u realnom vremenu, scenu za demonstraciju mogućnosti trebalo izabrati nekako življe, barem kod pokretnih izvora svjetlosti, a da ne govorimo o pokretnim objektima. U suprotnom, ostaje da se pitate zašto igrači nisu shvatili šta im je tačno prikazano i zašto je to sada nemoguće uraditi rasterizacijom.

zaključci

Praćenje zraka pruža mnogo bolji kvalitet slike u odnosu na rasterizaciju i dugo se koristilo tamo gdje je to bilo moguće - u filmskoj industriji, reklamiranju, dizajnu itd. Ali dugo vremena jednostavno nije bilo prikladno za renderiranje u realnom vremenu zbog svojih ogromnih resursa intenzitet - na kraju krajeva, za svaki piksel potrebno je izračunati nekoliko zraka koje se odbijaju od objekata u sceni i prelamaju u njih. Za offline renderiranje, koje ne zahtijeva brze rezultate, ovaj pristup je uvijek bio najvišeg kvaliteta, ali u grafici u realnom vremenu morali smo se zadovoljiti rasterizacijom – najjednostavnijim i najbržim načinom za projektovanje 3D scene na 2D ekran. Naravno, visoke performanse rasterizacije imaju nedostatak samo približnih proračuna boje piksela u sceni, koji ne uzimaju u obzir mnoge faktore: refleksiju svjetlosnih zraka, neka svojstva materijala itd. Rasterizacija, čak i uz gomilu lukavstva hakova, samo približno reproducira scenu, pa čak ni najsloženiji pikselski i kompjuterski shaderi neće pružiti kvalitetu punopravnog praćenja zraka, jednostavno na temelju principa njihovog rada.

Najava DXR API-ja i Nvidia RTX tehnologije omogućila je programerima da počnu istraživati ​​algoritme koji koriste praćenje zraka visokih performansi – što je možda i najznačajnija promjena u grafici u realnom vremenu otkako su uvedeni programabilni shaderi. Zainteresovani programeri su već pokazali javnosti neke vrlo impresivne demonstracije tehnologije koristeći samo mali broj uzoraka po pikselu tokom praćenja, a budućnost igara je u njihovim rukama. I u rukama proizvođača GPU-a, koji bi trebali objaviti nova rješenja koja podržavaju praćenje hardvera, a očekuje se u nekoliko projekata igara krajem ove i početkom sljedeće godine.

Naravno, prvi pokušaji korištenja praćenja bit će hibridni i ozbiljno ograničeni u kvantitetu i kvaliteti efekata, a potpuno praćenje će morati čekati decenijama. Svi prikazani demo programi koriste 1-2 zraka po pikselu, ili čak manje, dok ih profesionalne aplikacije imaju na stotine! A da biste dobili kvalitet offline rendera u realnom vremenu, još uvijek morate čekati jako dugo. Ali sada je vrijeme da se počne raditi na uvođenju tracinga u postojeće motore, a ko prvi savlada mogućnosti DXR-a, može dobiti određenu prednost u budućnosti. Osim toga, praćenje zraka može olakšati razvoj virtuelnih svjetova, jer će eliminirati mnoge male zadatke ručnog modificiranja sjenki, svjetlosnih mapa i refleksija, što se mora obaviti nesavršenim algoritmima rasterizacije. Već sada se hardverski ubrzano praćenje može koristiti u samom procesu razvoja - da se ubrzaju stvari kao što su preliminarni prikaz svjetlosnih mapa, refleksija i statičkih mapa sjena.

Postoji mnogo opcija za optimizaciju hibridnog renderiranja, a čini se da je jedna od najimpresivnijih karakteristika u primjerima prikazanim iznad efikasnost smanjenja šuma, što je izuzetno važno kada se radi o praćenju zraka s malim brojem uzoraka po pikselu – poznato je da svako ko je ikada vidio rad offline tracer-a, koji sliku reproducira postepeno i na samom početku je izuzetno bučan. Pristup s malim brojem izračunatih zraka i dodatnom redukcijom šuma omogućava postizanje prihvatljivog konačnog kvaliteta u djeliću vremena potrebnog za praćenje cijele scene. I to unatoč činjenici da sposobnosti umjetne inteligencije u smanjenju buke još nisu iskorištene, iako se to može učiniti.

Globalne mogućnosti praćenja zraka ne bi trebale biti suđene samo na osnovu onih objavljenih brzo rešenje demo programi. Oni namjerno ističu glavne efekte, budući da su to tehnološke demonstracije napravljene za jednu svrhu. Slika praćena zrakama općenito postaje mnogo realističnija, ali korisnici ne razumiju uvijek gdje tačno da traže, čak i ako smatraju da je generalno postala vjerodostojnija. Pogotovo ako razlika u početku nije tako velika i mase su spremne da podnesu artefakte svojstvene algoritmima za izračunavanje refleksije i globalnog senčenja u prostoru ekrana, kao i drugim hakovima za rasterizaciju.

Ali s fizički ispravnim globalnim osvjetljenjem, senčenjem i refleksijama izračunatim pomoću praćenja zraka, prikazana slika postaje realističnija čak i bez prisustva spektakularnih ogledala i drugih jasno reflektirajućih površina. Moderne igre gotovo uvijek koriste fizički bazirano renderiranje, u kojem materijali imaju svojstva hrapavosti i refleksivnosti, kao i kubične karte okoline, pa su refleksije uvijek prisutne, čak i ako nisu vidljive golim okom. U takvoj igri možete brzo zamijeniti kockaste karte okruženja praćenjem, nudeći ovu priliku vlasnicima sistema visokih performansi. Trasirane sjene također izgledaju bolje i rješavaju fundamentalne probleme mapa sjena, iako se neki od njih rješavaju lukavim naprednim algoritmima, kao što je Nvidia Hybrid Frustum Traced Shadows (HFTS), također koristeći praćenje u određeni oblik, ali bi objedinjeni pristup ipak bio najbolji. A renderovanje veoma mekih senki iz izvora svetlosti na području može proizvesti idealne, ultra-realistične senke u većini slučajeva.

Glavna poteškoća praćenja je u tome što sve prve implementacije neće odmah izgledati primjetno bolje od škakljivih metoda za prostor na ekranu, ali možemo sa sigurnošću reći da je to upravo smjer u kojem se trebamo kretati da bismo postigli fotorealizam. Jer algoritmi prostora na ekranu imaju temeljna ograničenja koja se ne mogu preskočiti. U mnogim aspektima, slika čak i postojećih demo programa je prilično dobra, čak i ako je renderuje nekoliko moćnih GPU-a i koristi nezgodno smanjenje šuma. Za sada moramo koristiti mali broj zraka po pikselu i potisnuti šum, ali u budućnosti će se to rješavati uz pomoć primitivnog ekstenzivnog razvoja. Ovo su samo prvi testovi sa praćenjem zraka u realnom vremenu; u budućnosti će se kvalitet slike povećati zajedno s performansama.

Za sada, u narednih nekoliko godina moći ćemo uključiti jednu ili dvije nove tehnike koje koriste praćenje zraka kako bi dopunile rasterizaciju ili zamijenile samo dio njenog rada. To se uvijek radi na početku života novih tehnologija, kada je moguće onemogućiti nove algoritme koji su preteški za prosječan gaming PC. Ali ako se fokusirate samo na njih, onda jednostavno neće biti napretka. A Nvidijina podrška za praćenje hardvera je važna jer znaju kako pomoći programerima da implementiraju nove tehnologije. I sigurni smo da je Metro Exodus daleko od jedina igra u kojoj Nvidia promoviše tracing, jer sarađuju sa programerima igara na nekoliko projekata odjednom. Notorious Tim Sweeney iz Epic Gamesa predviđaju da će za dvije godine GPU-ovi dobiti dovoljne performanse za široku upotrebu praćenja zraka u igrama, i možete vjerovati.

Programeri najbliži Microsoftu počeli su istraživati ​​mogućnosti DXR-a prije skoro godinu dana, a ovo je tek početak novog API-ja. Štaviše, jednostavno ne postoje dostupna grafička rješenja na tržištu koja podržavaju ubrzanje hardverskog praćenja. Najava DXR-a ima za cilj da navede programere hardvera i softvera da započnu rad na razumijevanju i optimizaciji praćenja zraka i započnu ranu fazu uvođenja novih tehnologija u igre. Zainteresovani programeri su već počeli da eksperimentišu sa DXR-om i modernim GPU-ovima, a kompanije kao što su Epic Games, Futuremark, DICE, Unity i Electronic Arts su čak najavile planove da koriste DXR mogućnosti u budućim verzijama game engine-a i igara.

Vjerovatno će entuzijasti morati čekati (to je naš dio) da hardverski ubrzani GPU-i postanu dostupni kako bi vidjeli čak i prve efekte praćenja zraka, budući da osnovni nivo podrške kroz kompjuterske shadere može biti presporo za čak i jednostavnije algoritme. Igre koje smisleno koriste DXR će zahtijevati hardversku podršku za praćenje, koja će u početku biti dostupna samo na Nvidia Volti, ali prijeti da će se s vremenom aktivno poboljšati. Također je moguće da će se pojaviti relativno jednostavne igre sa stiliziranom grafikom koje će koristiti isključivo praćenje zraka.

Još jedna važna stvar je da trenutna generacija igraćih konzola ne podržava hardversko ubrzanje praćenja zraka, Microsoft nije rekao ništa o DXR-u u Xbox One-u. Najvjerovatnije, takva podrška jednostavno neće postojati, što bi moglo postati još jedna prepreka za aktivno korištenje mogućnosti praćenja zraka u igrama. Iako Xbox One ima gotovo punu podršku za DirectX 12, nema nikakve hardverske jedinice za ubrzanje praćenja, tako da postoji velika šansa da će, barem do sljedeće generacije konzola, biti ograničen na nekoliko ray tracing-a efekte u nekoliko projekata igara koje podržava Nvidia, promovirajući svoju RTX tehnologiju. Zaista bih volio da griješim, jer su entuzijasti kompjuterske grafike već čekali takva globalna poboljšanja u realnom vremenu.

Na Gamescom 2018 Nvidia je najavila seriju Nvidia video kartice 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 niz korisnih alata za programere koji omogućavaju pristup novom nivou kompjuterske grafike. Nvidia RTX je dostupan samo za novu generaciju Nvidia GeForce RTX grafičkih kartica, izgrađenih 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ćih grešaka tokom procesa praćenja, što će pomoći da se one unaprijed izbjegnu. 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 će neke nadolazeće igre, uključujući Shadow of the Tomb Raider i Battlefield 5, 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?

Zbog tehničkih karakteristika ove tehnologije, samo grafičke kartice sa Turing arhitekturom će podržavati praćenje zraka - trenutno dostupni uređaji ne mogu se nositi s količinom posla koji zahtijeva 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.

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 danas se smatraju najmoćnijim i najsvestranijim metodama za 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 ove metode je puno 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.

U praktičnoj implementaciji metode povratnog praćenja uvode se 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. 0<= 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.


Tehnike praćenja zraka danas se smatraju najmoćnijim metodama za 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. Ali prihvatljiva slika se dobija ako pratite veliki broj zraka, što će potrajati jako 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 prati određeni broj zraka, jednak 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).

Povratak

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