Metoda e gjurmimit të rrezeve në lojërat kompjuterike. Lufta e metodave të vizualizimit

Kohët e fundit, në internet, hasa në gjurmuesin e rrezeve në kartën e biznesit të Paul Huckbert. Për ata që nuk e dinë, ky është një problem shumë i famshëm, i propozuar fillimisht nga Paul Huckbert më 4 maj 1984 në comp.graphics. Çështja është të shkruani një demonstrim të hedhjes së rrezeve që... përshtatet në një kartëvizitë (lexoni më shumë rreth kësaj në seksionin Ray Tracing në Graphic Gems IV)!

Versioni i Andrew Kensler është një nga implementimet më mahnitëse dhe më të bukura të këtij problemi që kam parë. Nga kurioziteti, vendosa ta shqyrtoj. Në këtë artikull do të shkruaj gjithçka që mund të kuptoja vetë.

Ana e pasme e kartës së biznesit

Kështu duket vetë kodi:

#përfshi // kartë > aek.ppm #include #përfshi typedef int i;typedef float f;struct v( f x,y,z;v operator+(v r)(return v(x+r.x,y+r.y,z+r.z);)v operator*(f r)(return v( x*r,y*r,z*r);)f operator%(v r)(kthim x*r.x+y*r.y+z*r.z;)v()()v operator^(v r) (kthejeni v(y*r.z-z*r.y,z*r.x-x*r.z,x*r. y-y*r.x);)v(f a,f b,f c)(x=a;y=b;z=c ;) v operator!())(kthim*this*(1/sqrt(*this%* this));));i G=(247570,280596,280600, 249748,18578,18577,231184,16,16 ) ;f R())( return(f)rand()/RAND_MAX;)i T(v o,v d,f &t,v&n)(t=1e9;i m=0;f p=-o.z/d.z;if(. 01 0)(f s=-b-sqrt(q);nëse(s .01)t=s,n=!(p+d*t),m=2;))kthim m;)v S(v o,v d)(f t ;v n;i m=T(o,d,t, n);nëse(!m)kthehet v(.7, .6,1)*pow(1-d.z,4);v h=o+d*t,l=!(v(9+R(),9 +R(),16)+h*-1),r=d+n*(n%d*-2);f b=l% n;if(b<0||T(h,l,t,n))b=0;f p=pow(l%r*(b >0),99);if(m&1)(h=h*.2;kthim((i)(tavan(h.x)+tavan(h.y))&1?v(3,1,1):v(3,3 ,3))*(b *.2+.1);)kthimi v(p,p,p)+S(h,r)*.5;)i main())(printf("P6 512 512 255 " );v g=!v (-6,-16,0),a=!(v(0,0,1)^g)*.002,b=!(g^a)*.002,c= (a+b)*-256+g;for(i y=512;y--;) for(i x=512;x--;)(v p(13,13,13);for(i r =64;r - -;)(v t=a*(R()-.5)*99+b*(R()-.5)* 99;p=S(v(17,16,8)+t,!( t *-1+(a*(R()+x)+b *(y+R())+c)*16))*3.5+p;)printf("%c%c%c" ,( i )p.x, (i) p.y, (i) p.z);))

Kodi i mësipërm duket... i frikshëm, por përpilohet dhe funksionon pa probleme! Mund ta ruani në desktopin tuaj si card.cpp, hapni një tastierë dhe shkruani:

C++ -O3 -o card card.cpp ./card > card.ppm

Pas 27 sekondash imazhi i mëposhtëm do të shfaqet në ekran:

Karakteristikat e kartës së biznesit të Ray Tracer

Mundësitë janë thjesht të mahnitshme!

  • një botë e përbërë nga sfera të organizuara rreptësisht;
  • dysheme me teksturë;
  • qiell me gradient;
  • hije të buta;
  • OMG, thellësia e fushës! Po talleni?!

Dhe e gjithë kjo në njërën anë të kartëvizitës! Le të shohim se si funksionon.

Klasa vektoriale

Le të shohim pjesën e parë të kodit:

#përfshi // kartë > aek.ppm #include #përfshi typedef int i;typedef float f;struct v( f x,y,z;v operator+(v r)(return v(x+r.x,y+r.y,z+r.z);)v operator*(f r)(return v( x*r,y*r,z*r);)f operator%(v r)(kthim x*r.x+y*r.y+z*r.z;)v()()v operator^(v r) (kthejeni v(y*r.z-z*r.y,z*r.x-x*r.z,x*r. y-y*r.x);)v(f a,f b,f c)(x=a;y=b;z=c ;)v operator!())(return*this*(1/sqrt(*this%* this));));

Truku kryesor këtu është reduktimi i fjalëve kyçe int dhe float në i dhe f duke përdorur typedef. Një tjetër truk që mund të përdoret për të zvogëluar sasinë e kodit është klasa v, e cila përdoret jo vetëm si vektor, por edhe për përpunimin e pikselëve.

#përfshi // kartë > aek.ppm #include #përfshi typedef int i; // Kurseni hapësirën duke reduktuar int në i typedef float f; // Kurseni edhe më shumë hapësirë ​​me f në vend të float // Klasa vektoriale me konstruktor dhe operatorë struct v( f x,y,z; // Tre koordinata vektoriale v operator+(v r)(kthim v(x+r.x,y+r.y, z +r.z);) // Shuma e vektorëve v operator*(f r)(kthimi v(x*r,y*r,z*r);) // Shkallëzimi i vektorëve f operator%(v r)(kthimi x* r.x +y*r.y+z*r.z;) // Prodhimi me pika i vektorëve v()() // Konstruktor bosh v operator^(v r)(kthim v(y*r.z-z*r.y,z*r.x- x* r.z,x*r.y-y*r.x);) // Prodhimi kryq i vektorëve v(f a,f b,f c)(x=a;y=b;z=c;) // Konstruktor v operator!() )(kthim * this*(1 /sqrt(*this%*this));) // Normalizimi i vektorit );

Rand() dhe të dhënat e gjenerimit botëror

i G=(247570,280596,280600, 249748,18578,18577,231184,16,16);f R())(kthim(f)rand()/RAND_MAX;)

Kodi i mëposhtëm kursen gjithashtu shumë hapësirë ​​duke deklaruar një funksion R që kthen një vlerë lundruese të rastësishme midis 0 dhe 1. Kjo është e dobishme për marrjen e mostrave stokastike, e përdorur për efektet e turbullimit dhe hijet e buta.

Vargu G përmban pozicionin e sferave në botë të koduar në numra të plotë. Bashkësia e të gjithë numrave është një vektor bit prej 9 rreshtash dhe 19 kolonash.

Këtu është kodi i mësipërm, por i formatuar dhe me komente:

// Një grup pozicionesh sferash që përshkruan botën // Të gjithë këta numra janë në thelb një vektor bit i G=(247570,280596,280600,249748,18578,18577,231184,16,16); // Gjeneruesi i numrave të rastësishëm që kthen një numër me pikë lundruese në rangun 0-1 f R())(kthim(f)rand()/RAND_MAX;)

Metoda kryesore

i main())(printf("P6 512 512 255 ");v g=!v (-6,-16,0),a=!(v(0,0,1)^g)*.002,b = !(g^a)*.002,c=(a+b)*-256+g;for(i y=512;y--;) for(i x=512;x--;)(v p(13 , 13,13);për(i r =64;r--;)(v t=a*(R()-.5)*99+b*(R()-.5)* 99;p=S( v (17,16,8)+t,!(t*-1+(a*(R()+x)+b *(y+R())+c)*16))*3.5+p; ) printf("%c%c%c" ,(i)p.x,(i)p.y,(i)p.z);))

Metoda kryesore përdor formatin e thjeshtë dhe të mirënjohur të imazhit PPM të bazuar në tekst. Imazhi përbëhet nga një kokë e formës P6 [Gjerësia] [Lartësia] [Vlera maksimale] e ndjekur nga vlera RGB e çdo piksel.

Për çdo piksel në imazh, programi mostrave (S) ngjyrën e 64 rrezeve, grumbullon rezultatin dhe e nxjerr atë në stdout.

Ky kod gjithashtu ndryshon pak çdo koordinatë të origjinës së rrezes dhe drejtimin e saj. Kjo është bërë për të krijuar efektin e thellësisë së fushës.

Këtu është kodi i mësipërm, por i formatuar dhe me komente:

// Funksioni kryesor. Shfaq një imazh. // Përdorimi i programit është i thjeshtë: ./card > erk.ppm i main())( printf("P6 512 512 255 "); // Titulli PPM // Operatori "!" normalizon vektorin v g=!v( -6,- 16,0), // Drejtimi i kamerës a=!(v(0,0,1)^g)*.002, // Vektori përgjegjës për lartësinë e kamerës... b=!(g^a )*.002 , // Vektori djathtas i përftuar duke përdorur produktin vektorial c=(a+b)*-256+g // WTF https:// news.ycombinator.com/item?id=6425965; në lidhje me këtë në mënyrë më të detajuar for(i y=512;y--;) // Për secilën kolonë for(i x=512;x--;)( // Për çdo piksel në rresht // Përdorni një klasë vektoriale për të ruajtur. ngjyra në RGB v p(13, 13,13 // Ngjyra standarde e pikselit është pothuajse e zezë // Hidhni 64 rreze nga çdo piksel për(i r=64;r--;)( // Ndrysho pak majtas/djathtas dhe lart); /poshtë koordinatat e fillimit të rrezes (për efektin e thellësisë së fushës) v t=a*(R()-.5)*99+b*(R()-.5)*99 // Cakto fokalen drejtojeni kamerën në v(17,16,8) dhe hidhni rrezen / / Akumuloni ngjyrën e kthyer në variablin t p=S(v(17,16,8)+t, // Fillimi i rrezes!(t *-1+(a*(R()+x)+b*(y+R ())+c)*16) // Drejtimi i rrezes me shtrembërim të lehtë // për efektin e kampionimit stokastik)*3,5+p ; // +p për grumbullimin e ngjyrave ) printf("%c%c%c",(i)p.x,(i)p.y,(i)p.z); ))

Kampionuesi

v S(v o,v d)(f t;v n;i m=T(o,d,t,n);nëse(!m)kthehet v(.7, .6,1)*pow(1-d.z,4) ;v h=o+d*t,l=!(v(9+R(),9+R(),16)+h*-1),r=d+n*(n%d*-2) ;f b=l% n;nëse(b<0||T(h,l,t,n))b=0;f p=pow(l%r*(b >0),99);if(m&1)(h=h*.2;kthim((i)(tavan(h.x)+tavan(h.y))&1?v(3,1,1):v(3,3 ,3))*(b *.2+.1);)ktheje v(p,p,p)+S(h,r)*.5;)

Mostra S është një funksion që kthen ngjyrën e një piksel bazuar në koordinatat e dhëna të pikës së origjinës së rrezes o dhe drejtimin e saj d. Nëse godet sferën, atëherë ai e quan veten në mënyrë rekursive, dhe përndryshe (nëse rrezja nuk ka pengesa në rrugën e saj) në varësi të drejtimit, ai kthen ose ngjyrën e qiellit ose ngjyrën e dyshemesë (bazuar në strukturën e saj me kuadrate ).

Vini re thirrjen e funksionit R kur llogaritni drejtimin e dritës. Kjo krijon efektin e "hijeve të buta".

Këtu është kodi i mësipërm, por i formatuar dhe me komente:

// (S) kampiononi botën dhe ktheni ngjyrën e pikselit me // një rreze që fillon në pikën o (Origjina) dhe ka drejtim d (Drejtimi) v S(v o,v d)( f t; v n; // Kontrolloni nëse rrezja përplaset me diçka i m=T(o,d,t,n if(!m) // m==0 // Sfera nuk u gjet, dhe rrezja shkon lart: gjeneron kthimin e ngjyrës së qiellit v(.7); , 6,1)*pow(1-d.z,4) // Ndoshta rrezja prek sferën v h=o+d*t, // h - koordinata e kryqëzimit l=!(v(9+R(); 9+R) (),16)+h*-1), // "l" = drejtimi i dritës (me shtrembërim të lehtë për efekt të butë hije) r=d+n*(n%d*-2); r = gjysmë-vektor / / Llogaritni koeficientin e Lambertit f b=l%n // Llogaritni faktorin e ndriçimit (koeficienti Lambert > 0 ose jemi në hije) nëse(b)<0||T(h,l,t,n)) b=0; // Рассчитываем цвет p (с учетом диффузии и отражения света) f p=pow(l%r*(b>0),99); if(m&1)( // m == 1 h=h*.2; // Sfera nuk u prek dhe rrezja zbret në dysheme: gjeneroni kthimin e ngjyrës së dyshemesë((i)(tavani(h.x)+ ceil(h.y ))&1?v(3,1,1):v(3,3,3))*(b*.2+.1 // m == 2 Sfera u godit: gjeneroj një rreze kërcim jashtë kthimit të sferës sipërfaqësore v(p,p,p)+S(h,r)*.5; // Dobësoni ngjyrën me 50% ndërsa ajo tërhiqet nga sipërfaqja (*.5) )

Gjurmues

i T(v o,v d,f &t,v&n)(t=1e9;i m=0;f p=-o.z/d.z;if(.01 0)(f s=-b-sqrt(q);nëse(s .01)t=s,n=!(p+d*t),m=2;))ktheje m;)

Funksioni T (Tracer) është përgjegjës për hedhjen e një rreze nga një pikë e caktuar (o) në një drejtim të caktuar (d). Ai kthen një numër të plotë që është kodi për rezultatin e hedhjes së rrezes. 0 - rrezja shkoi në qiell, 1 - rrezja hyri në dysheme, 2 - rrezja goditi sferën. Nëse sfera është goditur, funksioni përditëson variablat t (parametri i përdorur për të llogaritur distancën e kryqëzimit) dhe n (gjysmë-vektori kur kërcehet nga sfera).

Këtu është kodi i mësipërm, por i formatuar dhe me komente:

// Testi i kryqëzimit të vijës // Kthejeni 2 nëse sfera është goditur (si dhe distanca e kryqëzimit t dhe gjysmë-vektori n). // Kthehu 0 nëse rrezja nuk godet asgjë dhe shkon lart në qiell // Kthehu 1 nëse rrezja nuk godet asgjë dhe zbret në dysheme i T(v o,v d,f& t,v& n)( t=1e9 i m=0 f p=-o.z/d.z; 0)( // Po. Llogaritni distancën nga kamera në sferën f s=-b-sqrt(q); nëse(s .01) // Kjo është distanca minimale, ruajeni. Dhe gjithashtu // njehso vektorin e rrezes kërcyese dhe shkruaje në "n" t=s, n=!(p+d*t), m=2; ) ) kthim m; )

Numri Leet

Shumë programues janë përpjekur të zvogëlojnë kodin edhe më tej. Vetë autori u vendos në versionin e dhënë në këtë artikull. A e dini pse?

Fabien$ wc card.cpp 35 95 1337 card.cpp - shumë matematikë, por gjithçka shpjegohet në detaje dhe qartë.

Gjurmimi i rrezeve dhe rasterizimi - cili është ndryshimi?

Ne nuk jemi të sigurt se të gjithë lexuesit tanë e dinë ose mbajnë mend se çfarë është gjurmimi i rrezeve, sa ndryshojnë në parim metodat e ndryshme të renderimit dhe cilat janë avantazhet dhe disavantazhet e tyre. Prandaj, para së gjithash, le të përpiqemi të flasim për të shumë shkurt, pa matematikë komplekse dhe pak a shumë qartë. Para se të kalojmë në gjurmimin e rrezeve, duhet të kujtojmë bazat e algoritmit klasik rasterizimi me z-bufer.

Në metodën e rasterizimit, e pranuar përgjithësisht tani në grafikat moderne në kohë reale, për të vizatuar çdo objekt, ekziston një projeksion në rrafshin e ekranit nga primitivet gjeometrikë (poligone, më shpesh trekëndëshat) që përbëjnë objektin. Trekëndëshat vizatohen piksel pas piksel duke përdorur një tampon thellësie, i cili përmban distancën deri në rrafshin e ekranit dhe është i nevojshëm për të siguruar që trekëndëshat më afër kamerës të mbivendosen me ata më larg gjatë paraqitjes.

Përveç kulmeve dhe poligoneve që i lidhin ato, ruan gjithashtu informacion në lidhje me ngjyrën, koordinatat e teksturës dhe normalet e nevojshme për të përcaktuar pjesën e përparme dhe të pasme të secilës sipërfaqe. Ngjyra e pikselit përcaktohet përmes llogaritjeve komplekse në kulmet dhe hijet e pikselëve, dhe efektet si hijet jepen duke përdorur kalime shtesë, por edhe duke përdorur rasterizimin.

Procesi i hijezimit ( hijezim) konsiston në llogaritjen e sasisë së ndriçimit për një piksel, duke marrë parasysh mbivendosjen e një ose më shumë teksteve në piksel, e cila përcakton ngjyrën e tij përfundimtare. E gjithë kjo kërkon shumë llogaritje, sepse skenat e lojërave moderne përmbajnë disa miliona poligone dhe disa miliona pikselë në ekranet me rezolucion të lartë, dhe informacioni në ekran duhet të përditësohet me një shpejtësi prej të paktën 30 korniza për sekondë, dhe akoma më mirë. , 60 FPS. Për të mos përmendur helmetat e realitetit virtual, ku duhet të vizatoni njëkohësisht imazhe për të dy sytë me një frekuencë prej 90 FPS.

Por meqenëse GPU-të funksionojnë me shpejtësi shumë të larta të orës dhe kanë një numër të madh njësive harduerike të specializuara në llogaritje të caktuara, dhe rasterizimi i përshtatet shumë mirë paralelizimit, nuk ka probleme të veçanta me performancën e paraqitjes dhe shumica dërrmuese e lojërave kompjuterike 3D përdorin rasterizimin . Në realitet, gjërat janë pak më të ndërlikuara, pasi përdoren shumë optimizime shtesë për të shmangur vizatimin e shumë trekëndëshave të padukshëm, por në përgjithësi ky është thelbi i rasterizimit.

Gjatë zhvillimit të GPU-ve gjatë zhvillimit të tyre, është shpenzuar një kohë e madhe për të optimizuar punën e heqjes së gjeometrisë së padukshme dhe reduktimin e ngarkesës llogaritëse. Së pari, ata hodhën rendering e objekteve jashtë syve, pastaj objektet e errësuar nga të tjerët, më afër kamerës, etj të punës së kërkuar për rasterizimin e vendit të ngjarjes. Do të kuptoni më tej pse ne prekim temën e objekteve të padukshme.

Për të llogaritur ndriçimin global, për të vizatuar hijet dhe efekte të tjera, duhet të përdorni hakime dinake bazuar në të njëjtin rasterizim. Si rezultat, me kalimin e viteve, GPU-të janë bërë shumë të sofistikuara, duke mësuar të përshpejtojnë përpunimin e gjeometrisë në shader kulme, t'i japin pikselët në mënyrë efikase duke përdorur shader pikselësh dhe madje të përdorin shader universale llogaritëse për të llogaritur fizikën, post-efektet dhe shumë llogaritje të tjera. Por baza e funksionimit të GPU mbeti e njëjtë gjatë gjithë kohës.

Gjurmimi i rrezeve ka një ide themelore krejtësisht të ndryshme, por në teori është pothuajse më e thjeshtë. Gjurmimi simulon përhapjen e rrezeve të dritës nëpër një skenë 3D. Gjurmimi i rrezeve mund të kryhet në dy drejtime: nga burimet e dritës ose nga çdo piksel në drejtim të kundërt, atëherë zakonisht disa reflektime nga objektet e skenës përcaktohen përkatësisht në drejtimin e kamerës ose burimit të dritës. Llogaritja e rrezeve për çdo piksel në skenë është më pak e kërkuar nga ana llogaritëse dhe projektimi i rrezeve nga burimet e dritës jep cilësi më të lartë të interpretimit.

Gjurmë prapa u përshkrua për herë të parë në vitin 1969 nga një punonjës i IBM në vepër "Disa teknika për paraqitjen e makinerive hijezuese të lëndëve të ngurta" dhe kjo teknikë llogarit rrugën e rrezes së dritës për çdo piksel në ekran në varësi të modeleve 3D në skenë. 10 vjet më vonë, pati një tjetër përparim në teknologji, kur studiuesi Turner Whitted (tani punon në Nvidia Research, meqë ra fjala) publikoi një punim. "Një model i përmirësuar i ndriçimit për ekran me hije", i cili tregoi se si të llogariten hijet, reflektimi dhe thyerja e dritës gjatë gjurmimit.

Disa letra të tjera në vitet 1980 përshkruan më tej bazat e gjurmimit të rrezeve për grafikën kompjuterike, gjë që çoi në një revolucion në imazhet sintetike në industrinë e filmit. Pra, në vitin 1984, disa punonjës Lucasfilm përshkroi se si të përdoret gjurmimi i rrezeve për të krijuar efekte të tilla si turbullira e lëvizjes, thellësia e fushës, hijet e buta, reflektimet e paqarta dhe thyerjet. Disa vjet më vonë, profesori i Caltech Jim Kajiya në punën e tij "Ekuacioni i interpretimit" përshkroi një mënyrë më të saktë të shpërndarjes së dritës në një skenë. Dhe që atëherë, gjurmimi i rrezeve është përdorur fjalë për fjalë kudo në industrinë e filmit.

Pra, në metodën e zakonshme të gjurmimit të rrezeve të anasjellta, për çdo piksel në ekran, një rreze imagjinare tërhiqet nga kamera në një objekt në skenë. Në këtë mënyrë, simulohet një rreze drite që hyn në kamerë nga një burim drite në këtë drejtim dhe kryqëzimi i parë me objektin përdoret për të përcaktuar ngjyrën e pikselit. Rrezet primare përcaktojnë dukshmërinë e objekteve (si një tampon Z në rasterizimin), dhe për të përcaktuar ngjyrën, duhet të vizatoni rreze të tjera dytësore nga pikat e kryqëzimit në burime të ndryshme drite (nëse rrezet bllokohen nga një objekt, atëherë drita burimi nuk do të ndikojë në ndriçimin e pikselit), dhe grupi i rrezeve dytësore përcaktohet nga ndriçimi që bie mbi piksel.


Por të gjitha gjërat më interesante ndodhin edhe më tej - për të arritur fotorealizmin, duhet të merrni parasysh karakteristikat e materialeve në formën e sasisë së dritës së reflektuar dhe të thyer prej tyre, dhe për të llogaritur ngjyrën e një piksel, ju duhet të vizatoni më shumë rreze reflektimi dhe përthyerjeje. Ato nuk tregohen në figurën e mësipërme, por mund të imagjinohen mendërisht si rreze të reflektuara nga sipërfaqja e topit dhe të thyera prej tij. Ky algoritëm i përmirësuar i gjurmimit të rrezeve u shpik disa dekada më parë, dhe këto shtesa ishin një hap i madh drejt rritjes së realizmit të një imazhi sintetik. Deri më sot, metoda ka fituar shumë modifikime, por ato bazohen gjithmonë në gjetjen e kryqëzimit të rrezeve të dritës me objektet e skenës.

Eksperimentet e para praktike në zbatimin e gjurmimit të rrezeve në kohë reale filluan shumë kohë më parë, në një konferencë të njohur SIGGrafi Zhvillime të ngjashme u shfaqën shpesh. Demonstrimet e gjurmimit në kohë reale datojnë nga fundi i viteve 1980 dhe arritën shpejtësi prej disa kornizash në sekondë duke përdorur teknika shumë të optimizuara dhe sisteme të shumta llogaritëse të memories së përbashkët. Që atëherë, shumë zhvillime janë shfaqur të dizajnuara për të përshpejtuar gjurmimin për punë, përfshirë në një PC.

Për të mos përmendur entuziastët e shumtë të motorëve 3D në skenën demo në fund të viteve '90 dhe më tej, të cilët u frymëzuan nga aftësitë dhe thjeshtësia themelore e metodës, duke sjellë shumë optimizime të dobishme në gjurmimin e rrezeve. Në një kohë, ne publikuam në faqen tonë të internetit një seri të tërë materialesh kushtuar një prej motorëve të softuerit të gjurmimit të rrezeve, shumë specifik dhe me shumë kufizime serioze që nuk na lejuan të krijonim projekte serioze lojërash bazuar në të:

Prodhuesit e pajisjeve nuk mbetën prapa dhe për një kohë të gjatë ata kishin shfaqur prototipe eksperimentale të përshpejtuesve të gjurmimit dhe programeve demo të optimizuara për ta në ekspozita. Pra, në qershor 2008 kompania Intel tregoi një version të veçantë të lojës Territori i armikut: Quake Wars (Quake Wars: Ray Traced), i cili përdor gjurmimin e rrezeve kur jepet me një rezolucion 1280x720 me një shpejtësi 15-30 korniza për sekondë, që tashmë konsiderohet në kohë reale. Ai demonstrim nuk përdori përshpejtues harduerësh, por funksionoi në 16 bërthama Xeon me një frekuencë prej 3 GHz.

Projekti Intel demonstroi përfitimet e interpretimit të gjurmuar me rreze, duke demonstruar ujin realist, hijet e objekteve përmes sipërfaqeve transparente dhe reflektimeve. Zhvillimi i demonstratës u bë projekt Wolfenstein: Ray Traced, dhe entuziastë të ndryshëm shpesh marrin motorin e serialit Tërmet për të shtuar gjurmimin - kështu me sugjerimin e modders në Tërmeti 2 U shfaqën reflektime realiste, të cilat u prishën nga zhurma shumë e fortë dhe kërkesat më të larta të sistemit.

Dhe kompania tregoi prototipe të përshpejtuesve të gjurmimit të harduerit për disa vite (nga 2012 deri në 2016). Teknologjitë e imagjinatës, e cila madje ofron një API të hapur për gjurmimin e rrezeve - OpenRL. U deklarua se përshpejtuesi i zhvillimit të harduerit të kompanisë është i aftë të ekzekutojë Autodesk Maya dhe të sigurojë gjurmimin e rrezeve në kohë reale. Megjithatë, kompania nuk kishte fonde të mjaftueshme për të promovuar përshpejtimin harduerik të gjurmimit të rrezeve për sukses, si dhe “peshën” e kësaj kompanie në tregun grafikë për të qenë lokomotiva e saj. Dhe programet demo nuk ishin më mbresëlënësit, për të qenë i sinqertë, megjithëse ato treguan disa nga avantazhet e gjurmimit:

Kompania bëri shumë më mirë Nvidia, i cili e shpalli teknologjinë përsëri në SIGGraph 2009 OptiX, i projektuar për gjurmimin e rrezeve në kohë reale në GPU-të e tyre. API-ja e re ka hapur aksesin në gjurmimin e rrezeve në aplikacionet profesionale me fleksibilitetin e nevojshëm, në veçanti - gjurmimin e rrugëve me dy drejtime dhe algoritme të tjera.

Renderuesit e bazuar në teknologjinë OptiX tashmë ekzistojnë për softuer të shumtë profesional, si Adobe AfterEffects, Bunkspeed Shot, Autodesk Maya, 3ds max dhe aplikacione të tjera, dhe përdoren nga profesionistë në punën e tyre. Kjo mund t'i atribuohet paraqitjes në kohë reale vetëm me supozime të caktuara, sepse me një shpejtësi të lartë kuadri rezultati ishte një pamje shumë e zhurmshme. Vetëm disa vite më vonë industria iu afrua përdorimit të përshpejtimit të harduerit të gjurmimit të rrezeve në lojëra.

Të mirat dhe të këqijat e gjurmimit të rrezeve

Teknika e interpretimit të gjurmimit të rrezeve është shumë realiste në krahasim me rasterizimin, pasi simulon përhapjen e rrezeve të dritës shumë të ngjashme me mënyrën se si ato ndodhin në realitet (natyrisht, ende jo 100% e saktë). Gjurmimi mund të prodhojë hije shumë realiste, reflektime dhe përthyerje të dritës, dhe si e tillë është vlerësuar prej kohësh në aplikimet arkitekturore dhe dizajnin industrial. Teknologjia i ndihmon specialistët në këtë fushë, shumë përpara zbatimit fizik, të kuptojnë se si do të duken materialet në kushte të ndryshme ndriçimi në botën reale.

Përparësitë e dukshme të gjurmimit mund të përfshijnë gjithashtu faktin se kompleksiteti llogaritës i metodës varet pak nga kompleksiteti gjeometrik i skenës, dhe llogaritjet janë paralelizuar në mënyrë të përkryer - mund të gjurmoni lehtësisht dhe në mënyrë të pavarur disa rreze në të njëjtën kohë, duke ndarë ekranin sipërfaqe në zona për gjurmimin e tyre në bërthama të ndryshme kompjuterike. Është gjithashtu shumë e dobishme që prerja e sipërfaqeve të padukshme është një pasojë logjike e algoritmit.

Por ajo që është më e rëndësishme është se metoda simulon përhapjen reale të rrezeve të dritës, duke marrë një imazh përfundimtar me cilësi më të lartë në krahasim me rasterizimin. Rasterizimi ka disavantazhe të dukshme - për shembull, një objekt që nuk përfshihet në skenë nuk do të jepet në GPU, por mund të lëshojë një hije të dukshme ose duhet të jetë i dukshëm në një sipërfaqe reflektuese (pasqyrë), dhe optimizimet e rasterizimit e hodhën poshtë dhe nuk e ta marrë parasysh. Për të mos përmendur, ky objekt i padukshëm mund të ndikojë shumë në ndriçimin global të skenës duke reflektuar dritën në sipërfaqe të dukshme. Këto probleme janë zgjidhur pjesërisht, në veçanti, përdorimi i hartave të hijeve ju lejon të vizatoni hije nga objektet e padukshme në skenë, por fotografia që rezulton është ende larg idealit. Dhe çështja këtu është në parim, sepse rasterizimi funksionon krejtësisht ndryshe nga vizioni njerëzor.

Efekte të tilla si reflektimet, thyerjet dhe hijet, të cilat janë mjaft të vështira për t'u zbatuar mirë gjatë rasterizimit, janë një rezultat i natyrshëm i algoritmit të gjurmimit të rrezeve. Merrni reflektime - kjo është vetëm një nga fushat në të cilat gjurmimi i rrezeve është dukshëm më i mirë se rasterizimi. Në lojërat moderne, reflektimet zakonisht simulohen duke përdorur hartat e mjedisit (statike ose dinamike) ose reflektimet në hapësirën e ekranit ( Ekran-Hapësirë), të cilat japin një simulim të mirë të reflektimeve në shumicën e rasteve, por megjithatë kanë kufizime shumë të mëdha, në veçanti, ato nuk janë të përshtatshme për objekte të vendosura afër.

Llogaritja e reflektimeve në hapësirën e ekranit bën të mundur marrjen e reflektimeve që janë pak a shumë të ngjashme me të vërtetën, duke iu nënshtruar disa kufizimeve, por me përshpejtim harduerik në GPU duke përdorur rasterizimin. Dhe me gjurmimin e rrezeve, reflektimet gjithmonë jepen në mënyrë të përsosur pa pasur nevojë për algoritme komplekse shtesë. Një avantazh tjetër i rëndësishëm i gjurmimit është shfaqja e reflektimeve të pjesëve të të njëjtit objekt mbi njëra-tjetrën (për shembull, në mënyrë që doreza e një çajniku ose gryka e saj të reflektohet në vetvete), gjë që është shumë më e vështirë për t'u bërë duke përdorur rasterizimin.

Një shembull tjetër i një avantazhi të qartë të gjurmimit të rrezeve është paraqitja e objekteve transparente. Duke përdorur rasterizimin, është shumë e vështirë të simulosh efektet e transparencës, pasi llogaritja e saj varet nga rendi i paraqitjes dhe për këtë ju duhet të renditni paraprakisht poligonet transparente, madje edhe atëherë mund të shfaqen artefakte vizuale. Janë shpikur disa hake për të anashkaluar renditjen e poligoneve, por e gjithë kjo rezulton në komplikime të metodës dhe komplikime shtesë. Por vetë algoritmi i gjurmimit të rrezeve ju lejon të vizatoni çdo efekt transparence me cilësi të përsosur.

Epo, shembulli i fundit (për fillim) është vizatimi i hijeve. Gjatë rasterizimit në shumicën e rasteve, përdoren hartat hije ( hartëzimi i hijes), të cilat bazohen edhe në rasterizimin, thjesht renderimi bëhet nga një pikë tjetër e skenës dhe me parametra të ndryshëm. Siluetat e objektit tërhiqen në një tampon të veçantë nga burimi i dritës, përmbajtja e tamponit filtrohet dhe mbivendoset në sipërfaqen ku duhet të hidhet hija. Këto metoda kanë disa probleme, duke përfshirë skajet e dhëmbëzuara që keni parë të gjithë në lojëra, si dhe rritjen e konsumit të kujtesës video. Gjurmimi i rrezeve ju lejon të zgjidhni automatikisht problemin e hijeve, pa kërkuar algoritme dhe memorie shtesë. Për më tepër, në rastin e një sulmi rasterizimi, rezultati do të jetë një hije fizikisht e pasaktë në çdo rast, por një hije e butë e tërhequr duke përdorur gjurmimin e rrezeve do të jetë realiste.

Por gjurmimi i rrezeve ka gjithashtu një disavantazh. Një, por shumë e rëndësishme, është se vizatimi i gjithçkaje të përshkruar më sipër është disa herë më i vështirë nga pikëpamja llogaritëse. Performanca e ulët në pajisjet ekzistuese është pengesa kryesore e metodës së gjurmimit, e cila për një kohë të gjatë mohoi të gjitha avantazhet e saj. Gjetja e kryqëzimit të rrezeve me objektet e skenës nuk përshpejtohet aq lehtë sa operacionet relativisht të thjeshta gjatë rasterizimit të trekëndëshave, për të cilat përshpejtuesit specialë 3D janë përdorur për shumë vite, kjo është arsyeja pse në grafikat në kohë reale përdoret ende metoda e rasterizimit, e cila lejon të vizatoni një fotografi mjaft shpejt, megjithëse disi inferiore në cilësi ndaj një gjurmimi të plotë, është ende mjaft realiste.

Kur gjurmoni, ju duhet të llogaritni mijëra rreze për çdo burim drite, shumica e të cilave do të kenë pak efekt në imazhin përfundimtar, kështu që ju nevojiten optimizime shtesë për algoritmin e gjurmimit të rrezeve dhe pajisje të reja që mund të shpejtojnë operacionet përkatëse. Plus, vetëm përdorimi i gjurmimit nuk garanton fotorealizëm. Nëse përdorni algoritme të thjeshta, rezultati do të jetë i mirë, por ende jo mjaftueshëm real, dhe për të simuluar plotësisht realitetin duhet të përdorni teknika shtesë, si p.sh. hartëzimi i fotoneve Dhe gjurmimi i rrugës, të cilat simulojnë më saktë përhapjen e dritës në botë.

Nga ana tjetër, meqenëse algoritmi i gjurmimit të rrezeve është i paralelizuar mirë, ai mund të zgjidhet me metodën më të thjeshtë teknike - duke rritur numrin e bërthamave llogaritëse të procesorit (grafik), numri i të cilave rritet çdo vit. Në të njëjtën kohë, sigurohet një rritje lineare e performancës gjatë gjurmimit. Dhe duke pasur parasysh mungesën e dukshme të optimizimit si në harduer ashtu edhe në softuer për gjurmimin e rrezeve në GPU tani, aftësitë e gjurmimit të rrezeve të harduerit potencialisht mund të rriten me shpejtësi.

Por këtu lindin probleme më të vogla. Renditja vetëm e rrezeve primare në vetvete nuk është shumë e komplikuar, por nuk do të sigurojë një përmirësim të dukshëm në cilësinë e paraqitjes në krahasim me rasterizimin klasik, madje edhe me hakimet e ndërlikuara. Por rrezet dytësore janë shumë më të vështira për t'u llogaritur sepse nuk kanë koherencë - njëdrejtimshmëri. Për çdo piksel duhet të llogariten të dhëna krejtësisht të reja, gjë që nuk është shumë e mirë për ruajtjen e tij në memorie, gjë që është e rëndësishme për arritjen e shpejtësisë së lartë. Prandaj, llogaritja e rrezeve dytësore është shumë e varur nga vonesat e kujtesës, të cilat pothuajse nuk janë në rënie, në ndryshim nga gjerësia e brezit të memories (MBB), e cila po rritet me ritme të shpejta.

Gjurmimi i rrezeve, megjithëse duket si një metodë mjaft e thjeshtë dhe elegante që mund të zbatohet në vetëm disa rreshta kodi, është një algoritëm plotësisht i pa optimizuar dhe kodi i gjurmimit të rrezeve me performancë të lartë është jashtëzakonisht i vështirë për t'u bërë. Nëse me rasterizimin algoritmi funksionon shpejt, por ju duhet të gjeni metoda të zgjuara për efekte vizuale komplekse, atëherë gjurmimi i rrezeve mund t'i tërheqë të gjitha fillimisht, por ju detyron të optimizoni me shumë kujdes kodin në mënyrë që të funksionojë mjaft shpejt në kohë reale.

Ka shumë metoda për përshpejtimin e gjurmimit, algoritmet më produktive të gjurmimit të rrezeve nuk i përpunojnë rrezet një nga një, por përdorin grupe rrezesh, gjë që përshpejton procesin e përpunimit të rrezeve të të njëjtit drejtim. Këto optimizime janë të shkëlqyera për funksionimin në CPU dhe GPU moderne SIMD, ato janë efektive për rrezet kryesore të përbashkëta dhe rrezet hije, por ende nuk janë të përshtatshme për rrezet e thyerjes dhe reflektimit. Prandaj, është e nevojshme të kufizohet seriozisht numri i rrezeve të llogaritura për çdo piksel të skenës dhe të hiqet "zhurma" e shtuar e figurës duke përdorur filtrim special.

Përveç kësaj, gjurmimi i rrezeve kërkon një strukturë të përshtatshme të dhënash për të ruajtur elementët e skenës, dhe kjo mund të ketë një ndikim në performancë. Disa struktura janë më të përshtatshme për të dhëna statike, të tjera për ato që ndryshojnë në mënyrë dinamike. Pra, gjurmimi i rrezeve vetëm në një vështrim sipërfaqësor duket të jetë një metodë e thjeshtë dhe jashtëzakonisht elegante, por për të marrë performancën e dëshiruar prej saj do t'ju duhet të bëni shumë punë optimizimi - jo më pak se simulimi i efekteve komplekse gjatë rasterizimit. Dhe kjo punë në fakt sapo ka filluar.

Ka disa çështje që duhen adresuar përpara se gjurmimi i rrezeve të bëhet një alternativë e mundshme ndaj rasterizimit për lojëra. Tani për tani, duket se përfitimet e gjurmimit nuk janë aq të mëdha sa dënimi i rëndësishëm i performancës që lidhet me përdorimin e tij. Po, gjurmimi ka avantazhe shumë të rëndësishme në formën e reflektimeve realiste, hijeve dhe përpunimit të objekteve transparente, gjë që është e vështirë të bëhet me rasterizimin, por... a ka mjaft objekte të tilla në lojëra që mungesa e realizmit të bëhet serioze. ? Nga njëra anë, shumica e objekteve në botë reflektojnë dritë, nga ana tjetër, lojërat kanë vërtetuar se sytë dhe truri ynë janë të kënaqur vetëm me realizmin e përafërt. Në shumicën e lojërave moderne, reflektimet mbi objektet, megjithëse jo plotësisht fotorealiste, shpesh janë të mjaftueshme për të mashtruar trurin tonë.

Po, gjurmimi i rrezeve mund të ofrojë cilësi më të mirë se rasterizimi, por me çfarë mjetesh? Nëse përpiqeni për realizëm të plotë, atëherë gjurmimi i plotë me llogaritjen e shumë rrezeve për ndriçimin dhe reflektimet, si dhe një kombinim teknikash si p.sh. radiositeti Dhe hartëzimi i fotoneve, do të jetë super-kërkues për fuqinë informatike. Shpesh, edhe paraqitjet jashtë linje që nuk funksionojnë në kohë reale përdorin thjeshtime. Sigurisht, pas ca kohësh, fuqia llogaritëse mjaft e lartë do të bëhet e disponueshme për të fituar një avantazh ndaj rasterizimit, duke përfshirë edhe performancën, por tani për tani ne jemi ende shumë larg nga kjo pikë.

Edhe me renderimin offline për industrinë e filmit, me rritjen e fuqisë kompjuterike, koha e renderimit nuk zvogëlohet me kalimin e kohës, pasi orekset e artistëve rriten edhe më shpejt! Dhe madje edhe kompanitë kryesore në prodhimin e filmave të animuar, si Pixar, përpiquni të optimizoni procesin e interpretimit duke përdorur gjurmimin e rrezeve vetëm për disa nga efektet - pikërisht për shkak të ndikimit të rëndësishëm në performancë. Kështu që ju duhet të kuptoni se ditët e gjurmimit të plotë për të gjithë skenën në lojërat në kohë reale janë ende shumë larg. Dhe për renderim të plotë në kohë reale duke përdorur gjurmimin e rrezeve në lojëra, fuqia llogaritëse nuk është ende e mjaftueshme. Kjo është një rrugë e gjatë për të bërë edhe me zhvillimin e GPU-ve që është ende në vazhdim.

Por në çdo rast, gjurmimi i rrezeve është mënyra fizikisht e saktë që mund të zgjidhë shumë probleme të mëdha dhe të vogla të qasjes ekzistuese. Duke përdorur hake dhe truke të ndryshme të përdorura aktualisht në rasterizimin, mund të arrini rezultate të mira, por kjo sigurisht nuk mund të quhet një metodë universale dhe ideale për paraqitjen e grafikave 3D. Së shpejti, në ndjekje të realizmit, zhvilluesit e aplikacioneve 3D në kohë reale do të arrijnë kufirin e metodës ekzistuese të rasterizimit dhe do të duhet të kalojnë në një metodë me një model ndriçimi të avancuar të ngjashëm me atë që ndodh në realitet. Me shumë mundësi, do të jetë gjurmimi i rrezeve. Por meqenëse gjurmimi i rrezeve është një metodë shumë e shtrenjtë dhe nuk ka gjasa të mbështetet edhe nga sistemet më të fuqishme, fillimisht duhet të mbështeteni në metodat e paraqitjes hibride që kombinojnë performancën e rasterizimit dhe cilësinë e gjurmimit të rrezeve.

Renderim hibrid për tranzicion

Për shkak të natyrës kërkuese të gjurmimit të rrezeve, edhe me një numër të vogël rrezesh që do të llogariten për çdo piksel, kjo metodë nuk ka gjasa të përdoret ekskluzivisht dhe nuk do të zëvendësojë ende rasterizimin. Por ekziston një mundësi për të përzier të dy metodat. Për shembull, gjeometria themelore mund të rasterizohet me performancë të lartë, dhe më pas mund të jepen vetëm hijet dhe reflektimet e buta duke përdorur gjurmimin e rrezeve. Megjithëse rasterizimi do të vazhdojë të luajë një rol kritik në vitet e ardhshme me ardhjen e paraqitjes hibride, pjesa e algoritmeve të gjurmimit të rrezeve në motorë të tillë do të rritet gradualisht bazuar në rritjen e aftësive llogaritëse të GPU-ve të ardhshme.

Kjo qasje është përdorur prej kohësh në të njëjtat karikatura të kompanisë Pixar, pavarësisht se kërkesat e tyre duket se nuk kanë kufizime strikte në kohën e paraqitjes. Megjithatë, është më e lehtë dhe më e shpejtë të jepet gjeometria duke përdorur të njëjtat mikropoligone të sistemit të pasqyrimit Reyes, dhe përdorni gjurmimin vetëm aty ku nevojiten efekte specifike. Pothuajse të gjithë filmat e animuar të Pixar kanë përdorur më parë mikropoligone dhe rasterizimin, dhe gjurmimin e rrezeve në motorin e interpretimit RenderMan u shtua më vonë për filmin vizatimor "Makina", ku u përdor në mënyrë selektive - për të llogaritur mbylljen globale (mbyllje ambienti) dhe për të dhënë reflektime.

Por në realitet, zgjidhjet hibride nuk janë aq të thjeshta, sepse për gjurmimin efektiv të rrezeve ju duhet të organizoni strukturën e të dhënave në një mënyrë të veçantë për të zvogëluar numrin e kontrolleve për kryqëzimin e rrezeve me objektet e skenës. Prandaj, edhe me paraqitjen hibride, do t'ju duhet të krijoni një strukturë të optimizuar të të dhënave. Dhe në anën e performancës, një problem i madh është qasja në kujtesë e lidhur me rrezet dytësore që nevojiten për paraqitjen hibride. Rezulton se kur kombinohen dy metoda renderimi, shumë nga disavantazhet e tyre kombinohen, në veçanti, humbet thjeshtësia e metodës së gjurmimit të rrezeve dhe performanca e lartë e rasterizimit.

Por kur avantazhet janë akoma më të mëdha, një qasje e tillë hibride ka kuptim. Një kombinim i disa aftësive të rasterizimit dhe gjurmimit është tashmë i disponueshëm, duke përfshirë përgatitjen e hartës së dritës GPU të përshpejtuar nga hardueri, paraqitjen e hartave dinamike të dritës dhe hijeve të pjesshme, paraqitjen e reflektimeve dhe objekteve të tejdukshme me përthyerje. Kjo tashmë është një arritje e madhe, pasi kjo qasje ka qenë e disponueshme vetëm me paraqitje jashtë linje për shumë vite. Në fund të viteve '90, interpretimi hibrid u përdor në filmat e animuar për të përmirësuar efikasitetin, dhe tani ai po bëhet i disponueshëm për aplikime në kohë reale.


Por ky është vetëm fillimi para ardhjes së "Epokës së Artë" të interpretimit në kohë reale. Në të ardhmen, kjo qasje hibride do të evoluojë në diçka më shumë, dhe në vend të efekteve selektive, do të jetë e mundur të përdoren teknika të plota me ndriçim të avancuar, hije dhe efekte të ndryshme komplekse.

Pothuajse në të njëjtën mënyrë që erdhi përpunimi jashtë linje "Jeta e Bug" te filmat e animuar shumë më kompleksë, si p.sh "Coco", i cili tashmë përdor një gjurmim të plotë të rrugës me dhjetëra, apo edhe qindra rreze të llogaritura për pixel. Për dallim nga vitet e mëparshme, nuk kishte harta hije ose kalime të veçanta për llogaritjen e ndriçimit, por vetëm gjurmim të plotë - kjo është ajo për të cilën po përpiqen zhvilluesit e lojërave, thjesht rruga e tyre do të jetë pak më e gjatë, por qëllimi është i njëjtë.


Dhe përpara se të ndodhë kalimi nga rasterizimi në gjurmimin e plotë, duhet të përdorni interpretimin hibrid dhe të ndryshoni qasjen tuaj të zhvillimit në shumë mënyra. Për shembull, transferoni një pjesë të punës për përgatitjen paraprake dhe "pjekjen" e disa të dhënave në GPU, ribërni tubacionin tuaj të prodhimit dhe përgatitni motorët e renderimit për faktin se një pjesë në rritje e llogaritjeve do të kalojë gradualisht në gjurmim. Dhe përfitimet e pjesshme të gjurmimit mund të përdoren tani, megjithëse me një numër jashtëzakonisht të vogël rrezesh për pixel dhe me reduktim të detyrueshëm të zhurmës.


Por edhe me një kalim gradual në gjurmim, nuk ka nevojë të hidhet poshtë nevoja për optimizime që nuk janë specifike për rasterizimin. Optimizimet e nivelit të lartë si niveli i detajeve (LOD), heqja e okluzionit, vendosja e pllakave dhe transmetimi do të funksionojnë gjithashtu shkëlqyeshëm me gjurmimin e rrezeve. Derisa industria të kalojë drejt gjurmimit të plotë, ne duhet të vazhdojmë të aplikojmë teknika efikase duke përdorur hapësirën e ekranit ku kërkohet performancë e lartë dhe cilësia nuk është kritike.


Epo, interpretimi duke përdorur gjurmimin e rrezeve duhet të optimizohet. Për shembull, kur jepni harta dinamike të dritës duke përdorur DXR, është efektive të ruhet në memorien e duhur ndriçimi në hartat e dritës dhe më pas të përdoret akumulimi i të dhënave me kalimin e kohës për kuadrin tjetër. Procesi është relativisht i shpejtë dhe duhet përdorur sepse gjurmimi i rrezeve në hapësirën e hartës së dritës ofron rezultate më të mira në krahasim me gjurmimin e rrezeve në hapësirën e ekranit. Vërtetë, do të duhet të përdorni shtypja e zhurmës, pasi nuk do të jetë e mundur të llogariten veçanërisht shumë rreze në kohë reale.

Edhe filtrat e zakonshëm për shtypjen e zhurmës me cilësime posaçërisht për specifikat e gjurmimit të rrezeve funksionojnë mirë, dhe nëse aplikoni reduktimin e zhurmës duke përdorur aftësitë e rrjeteve nervore, të cilat Nvidia i ka demonstruar tashmë, dhe madje edhe harduerin e përshpejtuar në bërthamat tensore të GPU-ve të arkitekturës Volta, pastaj e ardhmja e paraqitjes hibride Duket mjaft e qartë se të paktën disa nga efektet që mund të shtohen lehtësisht në motorët ekzistues (llogaritjet e hijeve ose ndriçimi dhe hijezimi global) që përdorin rasterizimin do t'u shtohen lojërave shumë shpejt.

Pra, mënyra e dukshme për të përdorur interpretimin hibrid është rasterizimi i skenës dhe përdorimi i gjurmimit të rrezeve vetëm për një pjesë të llogaritjeve të saj të ndriçimit, si dhe për llogaritjet e reflektimeve me përthyerje. Kjo qasje siguron shpejtësinë e rasterizimit dhe cilësinë e gjurmimit në formën e simulimit të saktë të ndriçimit, duke përfshirë ndriçimin global, reflektimet dhe thyerjet e rrezeve të dritës dhe vizatimin e hijeve optikisht korrekte. Për më tepër, simulimi i këtyre efekteve duke përdorur hakerat e rasterizimit dhe duke i bërë ato më komplekse një ditë do të çojë në pikën ku bëhet aq intensive me burime sa do të jetë më e lehtë të zëvendësohen llogaritjet me gjurmimin e vërtetë të rrezeve. Dhe në përgjithësi, kjo është e vetmja mënyrë e saktë nëse shikojmë në të ardhmen e zhvillimit të grafikës.

DirectX Raytracing - API standard i gjurmimit të rrezeve

Kështu, me kalimin e kohës, ata mësuan ta bënin rasterizimin shumë mbresëlënës duke shtuar algoritme dhe hake të ndryshme, si për shembull hartografimi paralaks, i cili shton volumin në sipërfaqe jo shumë komplekse, si dhe duke përdorur harta hije. Për të përmirësuar grafikën, ishte e nevojshme vetëm rritja e shpejtësisë së GPU-ve dhe bërja e tyre pak më universale, duke e lënë bazën në formën e rasterizimit praktikisht të paprekur (duke mos llogaritur metodat e optimizimit në formën e ndarjes së kornizës në pllaka, etj.) .

Teknikat moderne si reflektimet e hapësirës së ekranit dhe simulimi i ndriçimit global e kanë çuar rasterizimin në kufijtë e tij praktik, pasi këto algoritme kërkojnë hakime të zgjuara të përpunimit dhe llogaritje komplekse, ndonjëherë të kryera në mënyrë asinkrone me paraqitjen. Dhe në të ardhmen e afërt, kompleksiteti dhe intensiteti i burimeve të algoritmeve të tilla do të vazhdojë të rritet. Gjurmimi i rrezeve ju lejon të bëni efekte komplekse në një mënyrë të thjeshtë, duke hapur gjithashtu derën për teknika krejtësisht të reja që nuk ishin të mundshme më parë në interpretimin në kohë reale. Por si mund të arrihet kjo nëse GPU-të mund të rasterizohen vetëm?

Versioni aktual DirectX 12 Duket mjaft e re, por në fakt kjo API grafike u njoftua përsëri në GDC 2014 dhe u lëshua publikisht si pjesë e Windows 10 një vit më vonë. Deri më tani, përdorimi i këtij versioni është larg asaj që dëshirohej dhe kjo ndodhi për shumë arsye. Së pari, cikli i zhvillimit për lojërat dhe motorët është mjaft i gjatë, dhe fakti që DirectX 12 funksionon vetëm në versionin më të fundit të Windows dhe ka mbështetje të kufizuar në konzollat ​​e gjeneratës aktuale vetëm pakëson argumentet në favor të përdorimit të tij në PC. Sidoqoftë, ne kemi parë tashmë përdorimin e API-ve të nivelit të ulët në disa lojëra, por çfarë më pas? Dhe më pas linja e zhvillimit të DirectX mori një kthesë tjetër të mprehtë, duke prezantuar mjete për të mbështetur gjurmimin e rrezeve.

Si pjesë e Konferencës së Zhvilluesve të Lojërave GDC 2018 Microsoft ka prezantuar një shtesë të re në DirectX API, në të cilën shumë partnerë të përfshirë në zhvillimin e softuerit dhe harduerit kanë marrë pjesë në një mënyrë ose në një tjetër. Shtesa quhet DirectX Raytracing dhe emri i tij sugjeron se është një API standard për mbështetjen e softuerit dhe harduerit për gjurmimin e rrezeve në aplikacionet DirectX, duke i lejuar zhvilluesit të përdorin algoritme dhe efekte duke përdorur teknikën e përmendur. DirectX Raytracing (shkurt DXR) ofron një qasje të standardizuar për zbatimin e gjurmimit të rrezeve që përshpejtohet nga GPU. Ky zgjerim kombinohet me aftësitë e DirectX 12 API ekzistuese, duke ju lejuar të përdorni si rasterizimin tradicional ashtu edhe gjurmimin e rrezeve, si dhe t'i përzieni ato në përmasat e dëshiruara.

E gjithë puna e DXR API në lidhje me gjurmimin e rrezeve kontrollohet duke përdorur listat e komandave të dërguara nga aplikacioni. Gjurmimi i rrezeve është i integruar ngushtë me komandat e rasterizimit dhe llogaritjes dhe mund të ekzekutohet me shumë fije. Shaderët e gjurmimit të rrezeve (pesë lloje të reja shader!) kontrollohen në mënyrë të ngjashme me shaderat e llogaritjes, duke i lejuar ata të përpunohen paralelisht në GPU, duke kontrolluar ekzekutimin e tyre në një nivel relativisht të ulët. Aplikacioni është plotësisht përgjegjës për sinkronizimin e punës së GPU-së dhe përdorimin e burimeve të tij, si gjatë rasterizimit ashtu edhe gjatë llogaritjeve, gjë që u jep zhvilluesve kontroll mbi optimizimin e ekzekutimit të të gjitha llojeve të punës: rasterizimi, gjurmimi i rrezeve, llogaritjet, transferimi i të dhënave.

Lloje të ndryshme renderimi ndajnë të gjitha burimet si teksturat, buferat dhe konstantet pa kërkuar që konvertimi, transferimi dhe dyfishimi të aksesohen nga trace shaders. Burimet që ruajnë të dhëna specifike për gjurmimin e rrezeve, të tilla si strukturat e përshpejtimit (strukturat e të dhënave të përdorura për të përshpejtuar gjurmimin - gjetja e kryqëzimeve midis rrezeve dhe gjeometrisë) dhe tabelat shader (që përshkruajnë marrëdhëniet midis shaderëve të gjurmimit të rrezeve, burimeve dhe gjeometrisë) menaxhohen tërësisht nga aplikacioni , DXR vetë API nuk bën asnjë lëvizje të të dhënave vetë. Shaderët mund të përpilohen individualisht ose në grupe, kompilimi i tyre kontrollohet plotësisht nga aplikacioni dhe mund të paralelizohet nëpër fije të shumta CPU.

Në nivelin më të lartë, DXR shton katër koncepte të reja në DirectX 12 API:

  1. Struktura e nxitimit ( struktura e nxitimit) është një objekt që përfaqëson një skenë 3D në një format që është optimal për llogaritjen e rrezeve në GPU. Paraqitur si një hierarki me dy nivele, kjo strukturë ofron pasqyrim të optimizuar të rrezeve në GPU dhe modifikim efikas të të dhënave dinamike.
  2. Metoda e re e listës së komandave ( lista e komandave) me të drejtë DispatchRaysështë baza për gjurmimin e rrezeve në skenë. Kjo është mënyra se si loja transferon ngarkesat e punës DXR në GPU.
  3. Një grup i llojeve të reja të hijezuesit të rrezeve që përcaktojnë se çfarë do të llogarisë DXR. Kur thirret DispatchRays, hapet shaderi i gjenerimit të rrezeve. Kur përdorni një veçori të re TraceRay në HLSL, shaderi i gjenerimit të rrezeve dërgon një rreze në skenë dhe në varësi të vendit ku rrezja godet në skenë, një nga disa shader të goditjes mund të thirret në pikën e kryqëzimit ( goditi) ose humbas ( zonjushe), i cili ju lejon të caktoni çdo objekt grupin e vet të hijeve dhe teksturave dhe të krijoni materiale unike.
  4. Një gjendje gjurmimi e tubacionit i shtuar në grafikët ekzistues dhe llogarit gjendjet e tubacionit, duke përkthyer shaderët e gjurmimit të rrezeve dhe gjendje të tjera të rëndësishme për gjurmimin e ngarkesave të punës.

Kështu, DXR nuk shton një motor të ri GPU në motorin ekzistues grafik dhe kompjuterik në DirectX 12. Ngarkesa e punës DXR mund të ekzekutohet në motorët ekzistues, pasi DXR është një detyrë llogaritëse në thelbin e saj. Detyrat DXR paraqiten si ngarkesa pune llogaritëse sepse GPU-të gjithsesi po bëhen më të gjithanshme dhe janë të afta të kryejnë pothuajse çdo detyrë që nuk lidhet domosdoshmërisht me grafikë, dhe në të ardhmen shumica e funksioneve fikse të GPU-së ka të ngjarë të zëvendësohen nga kodi shader.

Kur përdorni DXR, hapi i parë është ndërtimi i strukturave të nxitimit në dy nivele. Në nivelin më të ulët të strukturës, aplikacioni përcakton një grup të dhënash gjeometrike (buferat e kulmit dhe të indeksit) që përcaktojnë objektet në skenë. Në nivelin më të lartë të strukturës, përcaktohet një listë përshkrimesh që përmban referenca për të dhëna specifike gjeometrike, si dhe të dhëna shtesë si matricat e transformimit, të cilat përditësohen çdo kornizë, ngjashëm me mënyrën se si lojërat e bëjnë këtë për të ndryshuar dinamikisht objektet. Kjo siguron kalim efikas të një numri të madh gjeometrish komplekse.

Hapi i dytë kur përdorni DXR është krijimi i një gjendje gjurmimi të tubacionit. Lojëra moderne thirrjet e tërheqjes në grup ( vizatoni thirrje) për të rritur efikasitetin e ekzekutimit të tyre në grupe të veçanta - paketa ( grumbull), për shembull, duke vizatuar të gjitha objektet metalike në një grumbull dhe të gjitha objektet plastike në një tjetër. Por kur gjurmoni, është e pamundur të dihet paraprakisht saktësisht se çfarë materiali do të godasë një rreze e veçantë, dhe tufat nuk mund të aplikohen. Në vend të kësaj, gjendja e tubacionit të rrugëzimit lejon që të caktohen grupe të shumta të shaderëve të rrugëzimit dhe burimeve të teksturës. Në këtë mënyrë mund të specifikoni, për shembull, që të gjitha kryqëzimet e rrezeve me një objekt duhet të përdorin një shader specifik dhe një teksturë të tillë, dhe kryqëzimet me një objekt tjetër duhet të përdorin një hijezues të ndryshëm dhe një teksturë të ndryshme. Kjo i lejon aplikacionit të përdorë kodin e duhur të shader-it me teksturat e duhura për materialet që goditen nga rrezet.

Hapi i fundit në DXR është thirrja e DispatchRays, e cila thërret shaderin për të gjeneruar rreze. Brenda tij, aplikacioni bën thirrje për funksionin TraceRay, i cili bën që struktura e përshpejtimit të përshkohet dhe shader-i përkatës të ekzekutohet në një goditje ose humbje (dy lloje të ndryshme shaderash). TraceRay mund të thirret gjithashtu nga brenda këtyre dy shaderëve kur përdoret rekursioni i rrezeve ose efektet me kërcime të shumta.


Pse të mos përdorni shader kompjuterikë të njohur tashmë nga DirectX për gjurmimin e rrezeve? Së pari, DXR ju lejon të ekzekutoni shader të veçantë kur rrezet godasin dhe humbasin, dhe së dyti, procesi i renderimit mund të përshpejtohet në GPU (duke përdorur Nvidia RTX ose analoge nga konkurrentët), dhe së treti, API i ri ju lejon të lidhni burimet duke përdorur tabela shader.

Nvidia RTXështë një grup algoritmesh softuerësh dhe harduerësh që përshpejtojnë gjurmimin në zgjidhjet Nvidia bazuar në arkitekturën grafike Volta. Pse nuk mbështeten arkitekturat e mëparshme që nuk janë aq të ndryshme nga Volta? Ndoshta kjo është pjesërisht një dredhi marketingu për të tërhequr blerësit në produkte të reja, ose ndoshta ka disa optimizime harduerike në Volta që mund të shpejtojnë seriozisht gjurmimin e rrezeve në GPU, për të cilën ende nuk na është thënë. Po, i vetmi GPU me këtë arkitekturë deri më tani ka bërthama tensore që përshpejtojnë detyrat e inteligjencës artificiale, por nëse mund të përdoret në paraqitjen me gjurmimin e rrezeve, atëherë vetëm në procesin e zvogëlimit të zhurmës, dhe madje edhe atëherë - sipas të dhënave të disponueshme, në algoritmet ekzistuese të reduktimit të zhurmës Mundësi të tilla ende nuk janë zbatuar.

DXR dhe RTX përfitojnë nga një model programimi i fuqishëm dhe fleksibël, i ngjashëm me Nvidia OptiX, që e bën relativisht të lehtë shkrimin e algoritmeve efikase të gjurmimit të rrezeve. Për të filluar zhvillimin e aplikacioneve duke përdorur gjurmimin e rrezeve DXR, pajisje të përshpejtuara me RTX, do t'ju duhet një kartë grafike e bazuar në arkitekturën Volta (aktualisht vetëm Titan V) dhe versionin 396 ose më të lartë të drejtuesit, si dhe sistemin operativ Windows 10 RS4 dhe kompletin e zhvilluesit Microsoft DXR që përmban gjithçka që ju nevojitet. Do të jetë gjithashtu e dobishme për korrigjimin e gabimeve Microsoft PIX ose Grafika NSight Kompanitë Nvidia që tashmë kanë mbështetje DXR API.

Për lehtësinë e zhvillimit dhe korrigjimit, Microsoft lëshoi ​​menjëherë një version të ri të programit PIX për Windows me mbështetje për aftësitë DXR. Ky mjet ju lejon të kapni dhe analizoni kornizat e ndërtuara duke përdorur DXR në mënyrë që zhvilluesit të kuptojnë saktësisht se si funksionon DXR me harduerin, të kapni çdo gabim dhe të optimizoni kodin e tyre. Me PIX, programuesit mund të eksplorojnë thirrjet API, të shikojnë gjendjen e objekteve dhe burimeve që lidhen me punën e gjurmimit dhe të shikojnë strukturat e përshpejtimit. E gjithë kjo ndihmon shumë gjatë zhvillimit të aplikacioneve DXR.


Në fund të fundit, DirectX Raytracing API plotëson përvojën e zhvilluesit me shader dhe struktura të specializuara që janë të përshtatshme për gjurmimin e rrezeve, aftësinë për të punuar njëkohësisht me pjesën tjetër të linjës tradicionale grafike dhe llogaritjen e hijeve, etj. Konceptualisht, kjo nuk është shumë e ndryshme nga ajo që Imagination Tech ofrohet prej disa vitesh në OpenRL dhe zgjidhjet e tij harduerike. Mjerisht, ImgTec ishte shumë përpara kohës së tij me çipat e tij PowerVR Wizard, por ju duhet të keni fonde të mjaftueshme jo vetëm për zhvillimin fillestar, por edhe për të promovuar idenë tuaj. DXR është një API e një kompanie kaq të madhe dhe të njohur përgjithësisht si Microsoft, dhe të dy prodhuesit e GPU-ve të lojërave (Nvidia dhe AMD, dhe ndoshta Intel së shpejti do t'u shtohet atyre, kush e di) tashmë po punojnë së bashku me Microsoft-in për të optimizuar API-në e re. për arkitekturat e tyre harduerike.

Si të gjitha API-të e mbyllura, DXR gjithashtu ka një disavantazh të caktuar në atë që zhvilluesi thjesht nuk e di se si funksionojnë disa gjëra brenda API-së, cilat struktura specifike përshpejtuese përdoren për të siguruar paraqitje efikase paralele në GPU dhe cilat janë avantazhet dhe disavantazhet, cilat janë karakteristikat (konsumi i memories, vonesa, etj.), si funksionon planifikuesi i gjurmimit të rrezeve, është një ekuilibër i arritur midis përdorimit të kujtesës, vonesës, përdorimit të regjistrit, etj., cila pjesë e punës së gjurmuesit kryhet në harduer në GPU dhe çfarë në shofer dhe API. Të gjitha zgjidhjet e tilla vuajnë nga natyra e tyre e mbyllur, dhe DXR nuk bën përjashtim.

Nga rruga, ekziston një alternativë për përdorimin e DXR API - punonjësit e Nvidia po punojnë për zgjerimin e multi-platformës Vulkan API, i projektuar për gjurmimin e rrezeve - VK_NV_tracing. Ekipi i zhvillimit bashkëpunon me kolegët nga Khronos për të krijuar një standard të hapur me shumë platforma dhe një nga qëllimet kryesore është të përpiqemi të bëjmë gjurmimin e rrezeve në DirectX dhe Vulkan të funksionojë sa më të ngjashëm.

Lojërat që përdorin rasterizimin shpesh duken shumë të besueshme dhe realiste, pasi zhvilluesit e tyre shpenzuan shumë kohë duke shtuar të gjitha efektet dhe algoritmet e nevojshme që simulojnë përhapjen e rrezeve të dritës në realitet. Dhe në vitet e para, aftësitë e DXR do të përdoren gjithashtu për të plotësuar teknikat ekzistuese të paraqitjes, të tilla si reflektimet në hapësirën e ekranit - për të plotësuar të dhënat rreth gjeometrisë së fshehur që nuk shihet brenda ekranit, gjë që do të çojë në një rritje të cilësisë së këtyre efekteve. . Por gjatë viteve të ardhshme, mund të prisni të shihni një rritje në përdorimin e DXR për teknikat që nuk përdoren në rasterizim, siç është ndriçimi i plotë global. Në të ardhmen, gjurmimi i rrezeve mund të zëvendësojë plotësisht rasterizimin kur jepni skena 3D, megjithëse rasterizimi do të mbetet ekuilibri ideal midis performancës dhe cilësisë për një kohë të gjatë.

Për momentin, vetëm zgjidhjet Nvidia të familjes Volta (duke përdorur teknologjinë RTX) kanë mbështetje të plotë harduerike për DirectX Raytracing, domethënë sot vetëm Titan V i shtrenjtë, dhe në GPU-të e mëparshme të kësaj kompanie, si dhe në GPU-të AMD, gjurmimi i rrezeve kryhet plotësisht duke përdorur shaders kompjuterike - domethënë, vetëm mbështetja bazë DXR është e disponueshme me performancë më të ulët. Megjithatë, AMD ka deklaruar tashmë se ata po punojnë së bashku me Microsoft për të zbatuar përshpejtimin e gjurmimit të harduerit dhe së shpejti do të ofrojnë një drejtues për ta mbështetur atë, megjithëse tani për tani duket se arkitekturat ekzistuese AMD nuk kanë gjasa të jenë në gjendje të ofrojnë një nivel të lartë përshpejtimi të ngjashëm te Nvidia Volta. Teknologjia e gjurmimit të rrezeve të përshpejtuara me harduer RTX shfrytëzon aftësitë e përshpejtimit të gjurmimit të rrezeve harduerike të arkitekturës Volta që ende nuk janë shpallur dhe pritet të mbështesë zgjidhjet e lojërave më vonë këtë vjeshtë.

Duke parë edhe më tej në të ardhmen, shfaqja e API-ve për përshpejtimin e rasterizimit bie disi në kundërshtim me universalizimin e përgjithshëm të GPU-ve, të cilat po bëhen gjithnjë e më shumë të ngjashme me procesorët konvencionalë të krijuar për çdo lloj kompjuteri. Për shumë vite është folur për heqjen e plotë të të gjitha blloqeve që kryejnë funksione fikse nga GPU, megjithëse kjo nuk ka funksionuar shumë mirë deri më tani (mund të mbani mend jo shumë të suksesshme Intel Larrabee). Por në përgjithësi, programueshmëria më e madhe e GPU-ve do ta bëjë edhe më të lehtë përzierjen e rasterizimit dhe gjurmimit, dhe gjurmimi i plotë mund të mos kërkojë më asnjë API për të mbështetur përshpejtimin e harduerit. Por kjo po shikon shumë përpara, tani për tani kemi të bëjmë me DXR.

DirectX Raytracing dhe mbështetja e këtij zgjerimi API nga zhvilluesit e softuerit dhe harduerit ofrojnë mundësinë praktike të përdorimit të gjurmimit të rrezeve në kombinim me API-në e njohur të "rasterizimit". Pse është e nevojshme kjo, pasi GPU-të moderne janë tashmë të afta të kryejnë pothuajse çdo llogaritje duke përdorur shader kompjuterikë, dhe zhvilluesit mund të kryejnë gjurmimin e rrezeve duke përdorur ato? E gjithë çështja është të standardizohen aftësitë e përshpejtimit të harduerit të gjurmimit në njësitë e specializuara në GPU, gjë që nuk do të ndodhë nëse shaderët kompjuterikë universalë nuk janë të destinuar për këtë qëllim. Disa aftësi të reja harduerike të arkitekturave grafike moderne lejojnë gjurmimin më të shpejtë të rrezeve dhe ky funksionalitet nuk mund të ekspozohet duke përdorur DirectX 12 API ekzistuese.

Microsoft mbetet besnik ndaj vetvetes - si pjesa e rasterizimit të DirectX, API-ja e re nuk përcakton saktësisht se si duhet të funksionojë hardueri, por lejon zhvilluesit e GPU të përshpejtojnë vetëm disa aftësi të standardizuara të Microsoft. Zhvilluesit e harduerit janë të lirë të mbështesin ekzekutimin e komandave DXR API ashtu siç dëshirojnë, Microsoft nuk u tregon atyre saktësisht se si duhet ta bëjnë GPU-të. Microsoft prezanton DXR si një detyrë llogaritëse që mund të ekzekutohet paralelisht me pjesën e "rasterizimit", dhe DXR gjithashtu sjell disa lloje të reja shader për përpunimin e rrezeve, si dhe një strukturë të optimizuar për skenën 3D, e përshtatshme për gjurmimin e rrezeve.

Meqenëse API-ja e re synon zhvilluesit e softuerit, Microsoft po u siguron atyre një nivel bazë të mbështetjes për gjurmimin e rrezeve në DXR që mund të përdorë të gjithë harduerin ekzistues që mbështet DirectX 12. Dhe eksperimentet e para me DXR mund të fillojnë në GPU-të ekzistuese, megjithëse nuk do të jetë mjaftueshëm i shpejtë për t'u përdorur në aplikacione reale. I gjithë hardueri me mbështetje për DirectX 12 do të mbështesë gjurmimin e rrezeve dhe disa efekte të thjeshta mund të bëhen edhe me bazën ekzistuese të kartave video në duart e lojtarëve. Do të shohim disa efekte duke përdorur DXR në lojëra këtë vit, por patjetër në 2019 - të paktën si një demonstrim i hershëm i aftësive të teknologjive të reja.

Ka të ngjarë që performanca fillestare e gjurmimit në GPU të ndryshme do të ndryshojë shumë. Zgjidhjet pa mbështetje vendase, duke përdorur një nivel bazë të mbështetjes përmes shaderëve të llogaritjes, do të jenë shumë të ngadalta dhe GPU-të me mbështetje për gjurmimin e harduerit do ta përshpejtojnë menjëherë procesin disa herë - ashtu si në ditët e mira të vjetra të zhvillimit fillestar të mbështetjes së rasterizimit të harduerit . Me kalimin e kohës, gjithnjë e më shumë llogaritje gjatë gjurmimit do të kryhen në mënyrë më optimale dhe dukshëm më efikase, por kjo do të kërkojë zgjidhje të reja grafike. E para prej të cilave duhet të shfaqet në muajt e ardhshëm.

Një krahasim krah për krah i rasterizimit dhe gjurmimit

Le të përpiqemi të shohim shembuj specifikë të asaj që mund të sigurojë gjurmimi i rrezeve. Në fakt, ajo tashmë përdoret në lojëra tani, por në forma paksa të ndryshme, më primitive. Në veçanti, në algoritmet që përdorin hapësirën e ekranit ose algoritmin e gjurmimit të konit voxel gjatë llogaritjes së ndriçimit global, duke përfshirë algoritmin e mirënjohur Mbyllja e ambientit Voxel (VXAO) Kompania Nvidia. Por kjo nuk është ende gjurmim i plotë i rrezeve, por përkundrazi hakim me përdorimin e tij në një formë ose në një tjetër gjatë rasterizimit, dhe sot po flasim për gjurmim të plotë të rrezeve për të gjithë gjeometrinë e skenës.

GPU-të moderne janë tashmë mjaft të fuqishme dhe janë të afta të gjurmojnë rrezet e dritës me shpejtësi të lartë duke përdorur softuer të tillë si Arnold (Autodesk), V-Ray (Chaos Group) ose Renderman (Pixar), dhe shumë arkitektë dhe dizajnerë po përdorin tashmë gjurmimin e rrezeve të përshpejtuar të harduerit për të krijuar shpejt paraqitjet fotorealiste të produkteve të tyre, duke ulur kostot në procesin e përgjithshëm të zhvillimit. Nvidia është përfshirë në zhvillimin e teknikave të gjurmimit të rrezeve të përshpejtuara nga hardueri në botën profesionale për më shumë se një dekadë, dhe tani ka ardhur koha për t'i sjellë këto aftësi në lojëra.

Për të ndihmuar zhvilluesit e lojërave të zbatojnë gjurmimin e rrezeve, Nvidia njoftoi një shtesë të ardhshme në GameWorks SDK veçori të tilla si algoritme specifike për reduktimin e zhurmës, hijet globale me cilësi të lartë, hijet nga burimet e dritës së zonës ( dritat e zonës) dhe një algoritëm për vizatimin e reflektimeve me cilësi të lartë.

Renderimet më të mira të gjurmuara nga rrezet kërkojnë një numër të madh mostrash (rrezet e llogaritura për piksel) për të arritur cilësi të lartë - qindra deri në mijëra! Varet nga kompleksiteti i skenës, por edhe disa dhjetëra rreze nuk janë të përshtatshme për llogaritjet në kohë reale, pasi edhe GPU-të e së ardhmes së afërt me mbështetje për gjurmimin e harduerit do të jenë në gjendje të ofrojnë performancë të pranueshme me një numër shumë më të vogël rrezesh për pixel. - vetem pak. A ka ndonjë kuptim të shqetësohesh?

Po, nëse përpunoni më tej imazhin që rezulton (ne donim të largoheshim nga hakerat e rasterizimit, por duket se do të duhet të durojmë me të tjerët për momentin). Në veçanti, kryerja e gjurmimit në një zgjidhje produktive të arkitekturës Volta lejon performancën në kohë reale kur llogariten 1-2 mostra për pixel me përdorimin e detyrueshëm të reduktimit të zhurmës. Tashmë ekzistojnë algoritme denoising që mund të përmirësojnë ndjeshëm cilësinë e imazhit pas gjurmimit të rrezeve, dhe këto janë vetëm zhvillimet e para që janë në vazhdim.

Kërkesat për algoritmet e zvogëlimit të zhurmës në kohë reale janë mjaft të larta, ju duhet të jeni në gjendje të përpunoni imazhe hyrëse shumë të zhurmshme me një numër jashtëzakonisht të ulët rrezesh për pixel (deri në 1 mostër), të siguroni cilësi të qëndrueshme në lëvizje duke përdorur informacione nga kornizat e mëparshme; , dhe ekzekutoni jashtëzakonisht shpejt pa shpenzuar më shumë 1 ms kohë GPU. Algoritmet ekzistuese Nvidia mund të arrijnë rezultate shumë të mira kur japin reflektime, hije të buta dhe mbyllje globale. Për çdo efekt përdoren algoritme specifike, të cilat përdorin gjithashtu informacione për skenën 3D.


Gjurmimi i rrezeve u përdor për të dhënë hijet me një mostër për piksel dhe reduktimi i zhurmës i aktivizuar


Për të llogaritur mbylljen globale, ne përdorëm dy rreze për pixel me reduktim të zhurmës


Dhe gjatë paraqitjes së reflektimeve, vetëm një rreze për pixel është llogaritur gjithashtu e domosdoshme

Ray Tracing Denoiser si pjese e GameWorks SDKështë një grup bibliotekash për përdorimin e disa teknikave të gjurmimit të shpejtë të rrezeve që përdorin reduktimin e zhurmës, gjë që është shumë e rëndësishme për gjurmimin me një numër të vogël rrezesh për pixel, pasi rezultati është zakonisht jashtëzakonisht i zhurmshëm. Algoritmet përfshijnë paraqitjen e hijeve të buta nga burimet e dritës së zonës dhe algoritme për pasqyrimin e reflektimeve dhe mbylljen e ambientit të hijeve globale. Përdorimi i reduktimit të zhurmës ju lejon të arrini shpejtësi të lartë me një numër të vogël mostrash për piksel, por cilësia e imazhit mbetet e shkëlqyer - shumë më e mirë se teknikat që përdoren aktualisht për të simuluar përhapjen e dritës nëpër skenë dhe përdorimin e hapësirës së ekranit.

Le të flasim për përfitimet e gjurmimit të rrezeve gjatë paraqitjes së hijeve. Duke përdorur gjurmimin, mund të vizatoni hije fizikisht të sakta me skaje të buta, shumë më realiste se teknikat më të sofistikuara të disponueshme duke përdorur hartat e hijeve dhe filtrimin. Edhe për burime shumë të mëdha drite, përftohen hije të buta realiste pa të metat që hasen në rasterizimin.


Hijet e gjurmuara nga rrezet


Hijet e marra duke përdorur rasterizimin dhe hartat e hijeve

Mund të përdorni gjithashtu algoritme që janë të pamundura ose komplekse kur simuloni harta hije, të tilla si hijet nga burimet e dritës së zonës. Dhe më e rëndësishmja, kjo eliminon plotësisht të gjitha artefaktet e mundshme vizuale: pikselat që dridhen në skajet, vijat e dhëmbëzuara, etj. Po, gjatë zhvillimit të rasterizimit, tashmë janë shpikur shumë hake për të shtypur artefaktet, por gjurmimi i rrezeve bën gjithçka në mënyrë natyrale.

Për të llogaritur hijezimin global ( Mbyllja e ambientit) Do të doja të përdorja gjithashtu gjurmimin e rrezeve, pasi ofron cilësi dukshëm më të lartë në krahasim me të gjitha teknikat ekzistuese të hapësirës së ekranit (të gjitha këto SSAO, HBAO dhe madje VXAO). Pothuajse të gjithë algoritmet e përdorura sot thjesht shtojnë errësirën në qoshet e gjetura në një foto të sheshtë, duke simuluar vetëm përhapjen e dritës, dhe përdorimi i gjurmimit lejon që kjo të bëhet në një mënyrë fizikisht korrekte.


Mbyllja globale duke përdorur gjurmimin e rrezeve


Hije globale duke simuluar efektin duke përdorur hapësirën e ekranit

Për më tepër, të gjitha teknikat që përdorin hapësirën e ekranit injorojnë ndikimin e objekteve gjeometrike jashtë skenës dhe pas kamerës, dhe gjithashtu shtojnë të njëjtën hijezim në sipërfaqe krejtësisht të ndryshme. Në shembullin e treguar më sipër, shumë nga këto probleme janë qartë të dukshme - është e qartë se kjo është vetëm një përpjekje për të simuluar përhapjen e dritës në një skenë 3D, por gjurmimi arrin një pamje dukshëm më fotorealiste.

Kur jepet reflektimet Gjurmimi mund të ofrojë gjithashtu cilësi dukshëm më të mirë se metodat aktuale që përdorin hapësirën e ekranit, të cilave u mungojnë të dhënat jashtë ekranit (ato nuk janë fizikisht në gjendje të vizatojnë në reflektim atë që nuk është e dukshme në ekran) dhe që nxjerrin theksimet në reflektimet gabimisht - nga -për shkak për faktin se përdoret drejtimi i drejtpërdrejtë i shikimit dhe jo ai i pasqyruar.


Reflektimet e marra duke përdorur gjurmimin e rrezeve


Reflektime që rezultojnë nga rasterizimi i hapësirës së ekranit

Shembulli i Nvidia mund të jetë tepër i ekzagjeruar dhe shumë i dukshëm në lidhje me problemet me teknikat e reflektimit që përdorin hapësirën e ekranit, por çështja është e qartë - reflektimet e sakta fizikisht mund të jepen vetëm duke përdorur gjurmimin e rrezeve. Metodat e tjera për paraqitjen e reflektimeve nuk janë universale dhe ofrojnë cilësi inferiore - për shembull, reflektimet e rrafshët funksionojnë vetëm në sipërfaqe të sheshta. Por metoda e gjurmimit ka gjithashtu një pengesë - me një numër të vogël mostrash, do të kërkohet reduktim i zhurmës, pasi me një rreze të llogaritur për pixel fotografia del jashtëzakonisht e zhurmshme.

Rezulton se për momentin reduktimi i zhurmës duhet të përdoret gjithmonë, dhe versioni aktual i teknikave specifike me reduktimin e zhurmës Nvidia ka kufizimet dhe disavantazhet e veta. Për shembull, një teknikë e paraqitjes së hijes do të prodhojë hije të degraduara të mbyllura nga dy objekte që hedhin hije me dallime të mëdha në distancë nga sipërfaqja që do të hijesohet. Algoritmi i pasqyrimit të reflektimit degradon cilësinë me rritjen e vrazhdësisë së sipërfaqes dhe algoritmi global i paraqitjes së okluzionit mund të kërkojë jo një, por dy ose edhe më shumë rreze të llogaritura për piksel për të dhënë detaje të imta.

Por këto janë vetëm versionet fillestare të teknikave që përdorin filtra për reduktimin e zhurmës, të cilat do të vazhdojnë të përmirësohen si në cilësi ashtu edhe në performancë. Përveç kësaj, në të ardhmen është e mundur të përdoret reduktimi i zhurmës duke përdorur teknologjitë e inteligjencës artificiale, të cilat tashmë janë përfshirë në Nvidia OptiX 5.0, por nuk përdoret ende kur gjurmohet me RTX. Ka të ngjarë që në të ardhmen të përdoret një reduktim i vetëm i zhurmës për të gjithë komponentët e ndriçimit menjëherë (në vend të tre të veçantë, siç bëhet tani) për të reduktuar kostot dhe performancën e memories. Gjithashtu nuk ka asgjë që ju ndalon të përdorni një qasje hibride për paraqitjen, duke përdorur elementë të algoritmeve të hapësirës së ekranit me gjurmim shtesë të rrezeve.

Përveç përdorimit të gjurmimit të rrezeve në motorët e lojërave në kohë reale, fuqia e DXR të përshpejtuar nga GPU mund të përdoret gjithashtu në krijimin e përmbajtjes. Për shembull, për llogaritjet e ndriçimit me cilësi të lartë, të cilat më pas vendosen në harta të lehta, për krijimin e skenave të parapërgatitura në një motor loje, por me cilësi më të lartë, etj. Për më tepër, mund të përdorni gjurmimin e rrezeve jo fare për renderim, por në motorët e zërit për realitetin virtual ( Nvidia VRWorks Audio), në llogaritjet fizike apo edhe në algoritmet e inteligjencës artificiale.

Gjurmimi i rrezeve është i dobishëm në procesin e krijimit të përmbajtjes: rregullimi i hollësishëm i karakteristikave të materialeve me interpretim cilësor dhe të shpejtë, shtimi dhe rregullimi i karakteristikave të burimeve të dritës, korrigjimi i algoritmeve për reduktimin e zhurmës, etj. Ju gjithashtu mund të merrni një nivel edhe më të lartë renderim cilësor jashtë linje duke përdorur të njëjtat struktura me relativisht pak përpjekje dhe burime si motori në kohë reale. Për shembull, kjo tashmë është bërë në Motori Unreal 4- Vetë Nvidia shkroi eksperimentin Gjurmuesi i rrugës menjëherë pas integrimit të aftësive DXR në motor, i cili, megjithëse nuk ofron ende cilësi të mjaftueshme për renderim të plotë offline, tregon një mundësi të tillë.

Nuk po flasim as për mundësinë e përgatitjes së shpejtë dhe efikase të hartave të lehta - "pjekje" dritë në harta të veçanta ndriçimi (harta dritë) për objektet statike në skenë. Një motor i tillë mund të përdorë të njëjtin kod në lojë dhe redaktues dhe të sigurojë përgatitjen e llojeve të ndryshme të hartave të lehta (2D, 3D) dhe hartave kubike të mjedisit.


Kjo është e rëndësishme jo vetëm sepse gjurmimi i rrezeve do të përshpejtojë procesin e gjenerimit përfundimtar të hartave të dritës, por gjithashtu do të sigurojë një pamje më të mirë të hartave të tilla të dritës, duke ju lejuar të ndryshoni me shpejtësi vendndodhjen dhe karakteristikat e burimeve të dritës dhe objekteve në skenë, menjëherë. marrja e rezultatit në ekran - pothuajse e njëjtë si do të jetë ndriçimi përfundimtar.

Së fundi, ne sugjerojmë të shikojmë të gjitha avantazhet e gjurmimit të rrezeve në dinamikë. Nvidia ka lëshuar një koleksion të tërë demonstrimesh teknologjike që tregojnë përfitimet e gjurmimit të rrezeve të përshpejtuara nga hardueri duke përdorur teknologjinë Nvidia RTX duke përdorur API DXR (vetëm në formën e një videoje në Youtube, mjerisht).

Demoja tregon qartë përfitimet e paraqitjes së hijeve të gjurmuara, duke përfshirë ato të buta dhe me ngjyra, ndryshimin në cilësinë e mbylljes globale kur përdorni rasterizimin dhe hapësirën e ekranit në krahasim me gjurmimin e rrezeve, reflektimet realiste në lloje të ndryshme materialesh me reflektime të shumëfishta, sistemet e zgjuara të reduktimit të zhurmës dhe përdorimi i gjurmimit gjatë përgatitjes së hartave të dritës statike të parapërgatitura.

Demonstrimi i aftësive të gjurmimit të rrezeve

Për të demonstruar aftësitë e DirectX Raytracing API dhe teknologjisë Nvidia RTX, disa zhvillues kryesorë të motorëve dhe standardeve të lojërave lëshuan demonstrimet e tyre të teknologjisë për GDC 2018, duke treguar disa nga aftësitë e teknologjive të reja duke përdorur gjurmimin e rrezeve: 4A Games, Electronic Arts, Epic Games, Remedy Entertainment, Unity dhe të tjerët. Mjerisht, tani për tani ato janë të disponueshme vetëm në formën e pamjeve të ekranit, prezantimeve dhe videove në Youtube.

Ndërsa më parë demonstrime të ngjashme të gjurmimit të rrezeve në kohë reale u shfaqën ose në skena shumë të thjeshta me efekte të thjeshta ose me performancë të ulët, aftësitë e GPU-ve të ardhshme mund ta bëjnë gjurmimin e rrezeve reale edhe në kushtet e lojës me performancë të pranueshme. Zhvilluesit Epic Games dhe Remedy Entertainment besojnë se aftësitë DXR dhe RTX do të sjellin grafikë më të mirë në lojërat e ardhshme dhe zbatimi i mbështetjes bazë për API-në e re në motorët e tyre ka rezultuar të jetë relativisht i drejtpërdrejtë.

Demoja e teknologjisë DirectX Raytracing (Futuremark)

Për shembull, kompania e njohur për të gjithë entuziastët e grafikës 3D për paketat e saj të testimit Shenja e së ardhmes tregoi një demonstrim teknologjik të DXR, i bërë duke përdorur një motor hibrid të zhvilluar posaçërisht duke përdorur gjurmimin e rrezeve për reflektime me cilësi të lartë në kohë reale.

Ne kemi thënë tashmë se kur përdoren metoda të zakonshme aktualisht, vizatimi i reflektimeve realiste dhe fizikisht të sakta në një skenë 3D është shumë i vështirë në procesin e krijimit të algoritmeve, zhvilluesit përballen me shumë vështirësi, të cilat përfundimisht tejkalohen duke përdorur metoda të ndryshme, por ato mbeten; larg reflektimit ideal. Gjatë muajve të fundit, zhvilluesit në Futuremark kanë eksploruar përdorimin e DXR në paraqitjen hibride dhe kanë arritur disa rezultate mjaft të mira.

Duke përdorur gjurmimin e rrezeve GPU të përshpejtuar nga hardueri, ata morën reflektime të sakta fizikisht për të gjitha objektet në skenë, duke përfshirë ato dinamike. Hapni disa fotografi të ardhshme në madhësinë e plotë, pasi ato janë animacione GIF që tregojnë qartë ndryshimin midis gjurmimit dhe metodave më konvencionale duke përdorur hapësirën e ekranit:

Dallimi është i dukshëm. Përveç dallimeve në detajet e reflektimit, duke përdorur gjurmimin DXR mund të merrni reflektime të objekteve që ekzistojnë jashtë hapësirës së ekranit, d.m.th., jo brenda rrezes së shikimit të kamerës së lojës, siç mund të shihet në pamjet krahasuese të ekranit, dhe vetë reflektimin në përgjithësi. duket shumë më e besueshme. Këtu është një shembull tjetër, ndoshta më pak i dukshëm, por mjaft duke dhënë një ide:

Përdorimi i gjurmimit të rrezeve prodhon reflektime të sakta, të korrigjuara nga perspektiva në të gjitha sipërfaqet në skenë në kohë reale. Është qartë e dukshme se gjurmimi është shumë më afër realizmit sesa reflektimet më të njohura të hapësirës së ekranit të përdorura në shumicën e lojërave moderne. Këtu është një krahasim tjetër:

Nëse nuk shikoni reflektimet e marra duke përdorur DXR, atëherë metodat konvencionale mund të duken se japin cilësi të mirë, por ato duken vetëm kështu. Për më tepër, reflektimet janë të rëndësishme jo vetëm për pasqyrat me reflektim të lartë, por edhe për të gjitha sipërfaqet e tjera - të gjitha ato bëhen më realiste edhe nëse nuk janë menjëherë të dukshme.

Në demonstrimin e tij, Futuremark përdor aftësitë e gjurmimit të rrezeve vetëm për të zgjidhur problemet që janë të vështira për t'u luftuar me metodat konvencionale, të tilla si reflektimet e objekteve dinamike të vendosura jashtë hapësirës kryesore të ekranit, reflektimet në sipërfaqe jo planare dhe reflektimet e korrigjuara nga perspektiva për objektet komplekse. . Këtu janë pamjet e ekranit me cilësi më të lartë nga demonstrimi i DXR:




GPU-të moderne tashmë mund të përdorin interpretimin hibrid, duke përdorur rasterizimin për pjesën më të madhe të punës dhe relativisht pak të dhëna nga gjurmimi për të përmirësuar cilësinë e hijeve, reflektimeve dhe efekteve të tjera që janë të vështira për t'u trajtuar duke përdorur teknikat tradicionale të rasterizimit. Dhe programi demo Futuremark vetëm tregon një shembull të një qasjeje të tillë që funksionon në kohë reale në një GPU ekzistuese, megjithëse një nga më të fuqishmet.

Gjëja kryesore është se sipas zhvilluesve nga Futuremark, ishte mjaft e lehtë për ta të zbatonin mbështetjen e gjurmimit të rrezeve në motorin ekzistues DirectX 12 nga standardi 3DMark Time Spy, duke përdorur modele dhe tekstura nga testet e tyre. Së bashku me demonstrimin e teknologjisë, zhvilluesit e mirënjohur të testeve 3D njoftuan përdorimin e aftësive të DirectX Raytracing në standardin e tyre të ardhshëm 3DMark, i cili është planifikuar të lëshohet në fund të këtij viti.

Demoja e gjurmimit të rrezeve të reflektimeve në kohë reale (Lojëra epike)

Kompania Lojëra epike së bashku me ILMxLAB Dhe Nvidia tregoi gjithashtu opsionin e saj për të përfshirë aftësitë e gjurmimit të rrezeve në kohë reale në motor Motori Unreal 4. Shfaqja u zhvillua në hapjen e GDC 2018, ku tre prej këtyre kompanive prezantuan një demonstrim eksperimental-realist filmik me temën e serisë së filmit. "Lufta e Yjeve" duke përdorur personazhe nga seriali "Forca zgjohet" Dhe "Xhedi i fundit".


Demoja e Epic Games përdor një version të modifikuar të teknologjisë Unreal Engine 4 dhe Nvidia RTX, aftësitë e të cilave zbulohen përmes DirectX Raytracing API. Për të ndërtuar skenën 3D, zhvilluesit përdorën burime reale nga filmat Star Wars: The Last Jedi Me Kapiten Phasma në forca të blinduara të shndritshme dhe dy ushtarë me stuhi me një skenë në ashensorin e anijes Porosia e pare.

Demoja e teknologjisë në fjalë përmban ndriçim në ndryshim dinamik që mund të rregullohet në fluturim, si dhe efekte të gjurmuara nga rrezet, duke përfshirë hije të buta me cilësi të lartë dhe reflektime fotorealiste - të gjitha të paraqitura në kohë reale dhe me cilësi shumë të lartë. Kjo lloj cilësie fotografie thjesht nuk është e disponueshme pa përdorimin e gjurmimit të rrezeve, dhe tani mund ta sigurojë motori i njohur Unreal Engine, gjë që themeluesit dhe presidentit të Epic Games i la shumë përshtypje. Tim Sweeney.

Teknikat e avancuara në demonstrimin e teknologjisë përfshijnë: dritat e zonës duke përfshirë hijet e buta të shfaqura duke përdorur gjurmimin e rrezeve, si dhe pasqyrimin dhe pasqyrimin global të okluzionit duke përdorur gjurmimin e rrezeve, reduktimin e zhurmës së rezultatit të gjurmimit të rrezeve nga paketa Nvidia GameWorks, si dhe një pasqyrim të lartë efekti cilësor i thellësisë së fushës (nuk përdor gjurmimin, por është gjithashtu i lezetshëm).


Pamjet e ekranit dhe video tregojnë cilësinë shumë të lartë të të gjitha këtyre efekteve, dhe ajo që është veçanërisht mbresëlënëse janë reflektimet realiste, nga të cilat ka shumë në skenë. Të gjitha objektet pasqyrohen në të gjitha objektet, gjë që është shumë e vështirë, nëse jo e pamundur, të jepet gjatë rasterizimit. Metoda e paraqitjes së reflektimeve në hapësirën e ekranit do të jepte vetëm një imitim të realitetit, në të cilin gjithçka që nuk përfshihej në kornizë nuk do të pasqyrohej, dhe pjesa tjetër do të ishte shumë e vështirë për t'u paraqitur në mënyrë cilësore.

Përveç reflektimeve, mund të vërehen hijet më të buta, të cilat nuk bien në sy me skajet e tyre të grisura dhe/ose shumë të mprehta, siç ndodh kur përdorni hartat e hijeve. Epo, pas-përpunimi këtu është me cilësi shumë të lartë. Në përgjithësi, zhvilluesit bënë më të mirën e tyre dhe ky demonstrim doli të ishte ndoshta një nga më mbresëlënësit për përshpejtimin e harduerit të gjurmimit të rrezeve.

Për të krijuar këtë demonstrim, Epic Games punoi ngushtë me artistë nga ILMxLAB dhe inxhinierë nga Nvidia për të demonstruar aftësitë e teknologjisë Nvidia RTX që funksionon përmes DXR API. Demoja e Unreal Engine që funksionon në kohë reale në një stacion pune Stacioni DGX Nvidia, e cila përfshin deri në katër GPU të arkitekturës Volta. Duke kombinuar fuqinë e Unreal Engine, API-në grafike të gjurmimit të rrezeve DXR dhe teknologjinë Nvidia RTX që funksionon në familjen e GPU-ve Volta, ne i afrohemi realizmit kinematografik në kohë reale.

Përveç demonstrimit të teknologjisë, specialistët e Epic Games zhvilluan një sesion të madh njëorësh në GDC "Ndriçimi kinematografik në motorin joreal", kushtuar veçorive të reja të motorit të tyre. Dhe vetë demonstrimi i shfaqet të gjithëve me mundësinë për të parë skenën në mënyra të ndryshme, duke përfshirë paraqitjen me kornizë teli. Mund të supozojmë se e gjithë kjo herët a vonë do të jetë e disponueshme në lojëra, sepse Unreal Engine është shumë i popullarizuar. Epic Games premtoi të sigurojë akses në aftësitë e DXR API këtë vit - ndoshta më afër vjeshtës, kur lëshohen GPU-të e reja Nvidia.


Mbështetja për DirectX Raytracing dhe Nvidia RTX hap rrugën për Unreal Engine 4 drejt një klase të re teknikash dhe algoritmesh që nuk ishin më parë të disponueshme me dominimin e rasterizimit. Në të ardhmen e afërt, zhvilluesit e lojërave do të jenë në gjendje të përdorin një qasje hibride, duke përdorur disa gjurmime rrezesh me cilësi të lartë për disa efekte dhe rasterizimin me performancë të lartë për pjesën më të madhe të punës. Ky është një bazë e mirë për të ardhmen, sepse aftësitë e GPU-ve në lidhje me përshpejtimin efektiv të gjurmimit të rrezeve vetëm do të rriten.

Pica Pica — Eksperiment i gjurmimit të rrezeve në kohë reale (Electronic Arts/SEED)

Zhvilluesi më i fundit i interesuar për gjurmimin e rrezeve nëpërmjet DXR është studio FARA nga Artet Elektronike, i cili krijoi një program të veçantë demo Pica Pica, duke përdorur një motor eksperimental Halcyon, i cili përdor paraqitjen hibride si demonstrimet e mëparshme. Kjo demo është gjithashtu interesante sepse krijoi një botë procedurale pa ndonjë llogaritje paraprake.

Pse studiuesit e SEED vendosën të përdorin interpretimin hibrid të gjurmuar me rreze? Ata zbuluan eksperimentalisht se kjo metodë mund të prodhojë një imazh shumë më realist në krahasim me rasterizimin, shumë afër gjurmimit të rrezeve të plota (gjurmimi i rrugës), i cili kërkon shumë burime ose prodhon një imazh shumë të zhurmshëm me një numër të vogël mostrash të llogaritura. E gjithë kjo mund të shihet qartë nga pamjet krahasuese të ekranit:


Gjurmim i plotë


Renderim hibrid


Rasterizimi

Në lojërat moderne, hake të ndryshme përdoren për të llogaritur reflektimet dhe ndriçimin, duke përfshirë llogaritjen paraprake të ndriçimit (të paktën pjesa e tij statike). E gjithë kjo kërkon punë shtesë nga projektuesit e nivelit, të cilët vendosin me zgjuarsi burime të rreme drite, fillojnë parallogaritjen e ndriçimit, i cili më pas regjistrohet në hartat e dritës. Dhe përdorimi i gjurmimit të rrezeve për paraqitjen e detyrave bën të mundur shmangien e kësaj pune shtesë, sepse gjurmimi i rrezeve ju lejon të llogaritni natyrshëm gjithçka që ju nevojitet, siç e kemi përshkruar tashmë më lart.

Dhe meqenëse gjurmimi i plotë nuk është ende i mundur, motori Halcyon përdor një qasje hibride. Për të llogaritur hijet e shtyra, përdoret rasterizimi, për të llogaritur hijet e drejtpërdrejta mund të përdorni ose rasterizimin ose gjurmimin e rrezeve nëse është e nevojshme, për ndriçimin e drejtpërdrejtë përdorni shader llogaritës, për reflektimet mund të përdorni gjithashtu qasjen tradicionale dhe gjurmimin, për ndriçimin global gjithmonë përdorni gjurmimin dhe për të simuluar mbylljen e ambientit, mund të mbështeteni ose në metodat konvencionale të ekranit si SSAO ose gjithashtu të aktivizoni gjurmimin e rrezeve. Vetëm gjurmimi përdoret për të dhënë objekte transparente, dhe përpunimet e llogaritura përdoren për përpunim pas.


Në veçanti, gjurmimi i rrezeve përdoret për të llogaritur hijet dhe reflektimet - shumë më mirë dhe më natyrale sesa me teknikat e zakonshme aktualisht. Për shembull, reflektime të tilla në përgjithësi nuk mund të bëhen duke përdorur algoritme për llogaritjen e reflektimeve gjatë rasterizimit dhe përdorimit të hapësirës së ekranit:


Gjurmimi i rrezeve gjatë llogaritjes së reflektimeve ndodh në gjysmë rezolucion, domethënë, 0,25 rreze/piksel përdoret për reflektimet dhe 0,25 rreze/piksel për hijet. Dhe këtu problemi i një numri të vogël të rrezeve të llogaritura shfaqet në formën e një fotografie jashtëzakonisht të zhurmshme me reflektime, kur pa përpunim të veçantë shtesë rezultati i gjurmimit të rrezeve duket shumë i përafërt:


Prandaj, pas gjurmimit, imazhi rindërtohet në rezolucion të plotë të paraqitjes në një mënyrë të veçantë - disa algoritme shumë të zgjuara (detajet mund të gjenden në fjalimin e ekipit të zhvillimit në GDC 2018), kur të dhënat e marra filtrohen dhe informacionet nga kornizat e mëparshme janë shtesë. mblidhen dhe merren parasysh. Rezultati është një rezultat plotësisht i pranueshëm me reflektime realiste, jo shumë i ndryshëm nga një gjurmim i plotë i rrugës:


Por ndoshta metodat e zakonshme në hapësirën e ekranit nuk do të japin rezultate më të këqija dhe thjesht nuk kemi nevojë për gjurmim "të shtrenjtë"? Shikoni këtë krahasim krah për krah: Në të majtë janë reflektimet e hapësirës së ekranit, në mes është gjurmimi hibrid i rrezeve dhe në të djathtë është një pasqyrim referencë me gjurmim të plotë të rrezeve:


Dallimi është i dukshëm. Metoda e hapësirës së ekranit është shumë e përafërt, joreale dhe vetëm simulon reflektime, megjithëse jo të këqija në disa vende, por me artefakte të dukshme dhe probleme të mungesës së rezolucionit. Nuk ka një problem të tillë me gjurmimin, edhe duke marrë parasysh rezolucionin e reduktuar kur jepni rrezet. Në Pica Pica, gjurmimi i rrezeve përdoret gjithashtu për të bërë objekte transparente dhe të tejdukshme. Programi demonstrues llogarit përthyerjen e dritës pa pasur nevojë për klasifikim paraprak, si dhe shpërndarje të dritës nëntokësore:

Deri më tani, motori nuk është zhvilluar plotësisht dhe ka një pengesë që është e rëndësishme për fotorealizmin - ende nuk mund të tërheqë hije nga objektet e tejdukshme, por kjo është çështje kohe. Por demonstrimi përdor një algoritëm global të ndriçimit që nuk përdor llogaritjet paraprake dhe mbështet objekte statike dhe dinamike, duke minimizuar nevojën për punë shtesë nga ana e artistëve:


Ndriçimi global i fikur


Ndriçimi global i aktivizuar

Ndriçimi global ndikon ndjeshëm në disa objekte në skenë, duke shtuar realizëm në ndriçimin e tyre. Në demonstrim, mund të përdorni gjithashtu teknika për të simuluar hijet globale, duke dhënë hije shtesë. Algoritmet në hapësirën e ekranit mbështeten gjithashtu - Mbyllja e ambientit të hapësirës së ekranit (SSAO):


Ndoshta do të kishte funksionuar edhe më mirë me diçka si VXAO, të cilën Nvidia po e promovon, por tashmë duket mjaft mirë. Por imazhi do të jetë edhe më i mirë dhe më real me një llogaritje të plotë të hijes globale duke përdorur gjurmimin e rrezeve. Shikoni fotot e krahasimit, ndryshimi është i habitshëm:



Ndërsa SSAO jep vetëm një pamje të hijeve globale, duke errësuar vetëm qoshet më të dukshme, atëherë gjurmimi i plotë bën gjithçka në mënyrë perfekte, duke dhënë hije të thellë aty ku duhet, bazuar në ligjet e përhapjes së dritës.

Sa i përket hijeve nga rrezet e drejtpërdrejta të burimeve të dritës, me hije të forta gjatë gjurmimit gjithçka është mjaft e thjeshtë - rrezet lëshohen në drejtim të burimeve të dritës dhe kontrollohen goditjet. Për hijet e buta, algoritmi është i ngjashëm, por rezultati me një mostër për pixel është shumë "i zhurmshëm" dhe duhet të filtrohet shtesë, pas së cilës fotografia bëhet më realiste:


Hije të forta, hije të buta të pafiltruara dhe hije të buta të filtruara

Zhvilluesit nga studioja SEED theksojnë në mënyrë specifike se megjithëse kërkimi i tyre në paraqitjen hibride është në një fazë të hershme, kjo qasje lejon zëvendësimin e hakimeve të shumta me një sërë mangësish objektive me një qasje të unifikuar të gjurmimit të rrezeve që siguron cilësi më të mirë të paraqitjes. Ajo që është veçanërisht e rëndësishme është se tani zhvilluesit e softuerit kanë një API të vetme, përgjithësisht të pranuar për gjurmimin e rrezeve, dhe kërkohet vetëm përsosje e mëtejshme e algoritmeve si për të përmirësuar cilësinë e paraqitjes ashtu edhe për të optimizuar performancën e tij, pasi gjurmimi i rrezeve mbetet mjaft i kërkuar për harduerin. .

Për momentin, programi demo Pica Pica llogarit vetëm 2,25 rreze për pixel (në total, duke përfshirë të gjitha efektet), dhe rezultati është një imazh fotorealist me cilësi afër gjurmimit të plotë, megjithëse me disa kufizime. Dhe tani - miza në vaj: si në rastin e demonstrimit të Epic Games, për të përshpejtuar procesin e paraqitjes, ne ende duhet të përdorim aftësitë e disa GPU-ve më të mira njëkohësisht dhe të transferojmë një sasi minimale të dhënash mbi PCI relativisht të ngadaltë Autobus ekspres. Por zhvillimi i mëtejshëm i përshpejtimit të harduerit në GPU duhet të na ndihmojë të shpëtojmë nga kërkesat e tilla të sistemit në të ardhmen.

Eksperimentet me DirectX Raytracing në Northlight (Remedy Entertainment)

Një tjetër program demo për të promovuar DXR dhe RTX, i prezantuar në GDC 2018, ishin eksperimentet me motorin e lojës Motori Northlight Kompania finlandeze Ilaç Argëtim, i njohur për publikun për lojëra si p.sh Max Payne, Alan Wake dhe Quantum Break. Motori Northlight zhvillohet intensivisht nga një kompani e njohur për interesin e saj në teknologjitë më të fundit grafike. Prandaj, nuk është çudi që ata u interesuan për gjurmimin e rrezeve të përshpejtuara nga hardueri.

Në GDC, kompania tregoi zhvillimet për të cilat po punonin me Nvidia dhe Microsoft. Midis disa zhvilluesve, Remedy mori akses të hershëm në aftësitë RTX dhe DXR API të Nvidia, të cilat u mishëruan në një version të veçantë të motorit Northlight. Programuesi kryesor i grafikës së Tatu Aalto prezantoi një fjalim në konferencë "Eksperimente me DirectX Raytracing në Remedy's Northlight Engine", në të cilën ai foli për veçoritë e qasjes hibride që ata adoptuan.


Kjo demonstrim tradicionalisht përdor rasterizimin për shpejtësinë dhe gjurmimin e rrezeve për disa efekte që do të ishte e vështirë të bëheshin ndryshe. Përmirësimet e cilësisë përfshijnë hijet e buta të bazuara fizikisht, mbyllje dhe ndriçim global me cilësi të lartë dhe reflektime realiste. Videoja tregon rezultatin e motorit Northlight me të gjitha efektet e aktivizuara, të llogaritura duke përdorur gjurmimin e rrezeve me një numër të rritur të rrezeve të llogaritura:

Për të kryer eksperimente për prezantimin e gjurmimit të rrezeve, Remedy krijoi një skenë të re që nuk lidhej në asnjë mënyrë me lojërat e kompanisë. Siç kemi thënë tashmë, DXR API mbështet dy nivele të strukturave të nxitimit: të ulët dhe të sipërm. Ideja është që struktura e nivelit të poshtëm është për ruajtjen e gjeometrisë, dhe niveli i sipërm përmban strukturat e nivelit më të ulët. Kjo do të thotë, çdo rrjetë poligonale është një strukturë e nivelit më të ulët, dhe çdo nivel i sipërm përmban disa struktura të nivelit më të ulët me transformime të mundshme gjeometrike (rotacione, etj.).


Struktura e nivelit më të ulët është e nevojshme për pjesët statike të skenës, katrorët e kuq në diagram janë kufijtë e pemës së nivelit më të ulët. Për shembull, në një skenë ka katër shembuj të një karrige të vogël (katrore të vogla të kuqe) që kanë të njëjtën gjeometri, por transformimet e tyre gjeometrike. Sheshet e mesme janë divane të vogla, katrorët e mëdhenj janë divanë të mëdhenj të rrumbullakët. Për të krijuar një skenë të gjurmimit të rrezeve, duhet të futni këto struktura të nivelit më të ulët në një strukturë të nivelit të lartë, për të cilën API DXR ka një funksion të veçantë që pranon shembuj të shumtë të strukturës së nivelit të ulët me transformime.

Puna me gjeometrinë që ndryshon në mënyrë dinamike është bërë pak më e vështirë, pasi ndërtuesi i nivelit të ulët pranon vetëm buferë statikë. Por deformimi është gjithashtu i mundur këtu - me ndihmën e një shader kompjuterik që pranon gjeometrinë dhe matricat e lëkurës dhe shkruan gjeometrinë tashmë të ndryshuar. Tjetra, mund të filloni punën për llogaritjen e rrezeve.

Së pari, le të marrim mbylljen e ambientit, një algoritëm i bazuar në dukshmëri që mund të zbatohet lehtësisht duke përdorur gjurmimin e rrezeve. Imazhi i mëposhtëm është prodhuar duke dhënë katër rreze për piksel, me një gjatësi maksimale të vendosur në katër metra, dhe rezultati sigurisht duket më i mirë se metoda SSAO, e cila përdor vetëm hapësirën e ekranit.


Metoda tradicionale e llogaritjes së okluzionit global tregohet në gjysmën e majtë, dhe gjurmimi i rrezeve tregohet në të djathtë. Ndërsa teknika SSAO bën një punë të mirë për të kapur disa skaje, asaj i mungon qartë informacioni gjeometrik për skenën - algoritme të tilla nuk e dinë se çfarë ka jashtë ekranit ose pas sipërfaqeve të dukshme nga kamera. Prandaj, rezultati nuk është qartësisht ideal, megjithëse është qartësisht më i mirë sesa pa hije fare.

Fatkeqësisht, performanca e gjurmimit të rrezeve është relativisht e ulët dhe është shumë më e shtrenjtë se metodat e hapësirës në ekran. Sipas Remedy, në programin e tyre demo, përkthimi i një rrezeje për piksel për mbyllje globale me një gjatësi maksimale prej 4 metrash me rezolucion Full HD kërkon afërsisht 5 ms dhe performanca shkallëzohet pothuajse në mënyrë lineare, kështu që përpunimi i 16 rrezeve do të marrë rreth 80 ms. Me përmirësim të vazhdueshëm të cilësisë, sigurisht:


Këto pamje të ekranit janë marrë me antializimin e rregullt të ekranit të plotë, duke marrë parasysh komponentin e kohës (të dhënat nga kornizat e mëparshme) dhe pa filtrim të ndërlikuar, siç bëhet në shumicën e demonstrimeve të tjera të shfaqura në GDC. Me reduktimin e zgjuar të zhurmës, mund të arrini cilësi të pranueshme me 1-2 rreze për pixel.

Përveç hijezimit global, demonstrimi i Remedy përdor gjithashtu gjurmimin e rrezeve për të dhënë hije të rregullta, të cilat tani përdorin më shpesh hartat e hijeve me kaskadë kur rasterizohen ( hartat e hijeve me kaskadë - CSM). Zhvilluesit vërejnë se nëse motori mbush hijet nga burimet e dritës së drejtuar përpara se të jepet ndriçimi, atëherë do të jetë shumë e lehtë të zëvendësohet shaderi i hartës së hijes me kod me kod duke përdorur gjurmimin, i cili do të shkruajë të dhënat e llogaritura në të njëjtin bufer.


Në këtë rast, ndryshimi në cilësi do të jetë qartë në favor të gjurmës (treguar në të djathtë). Një imazh i gjurmuar me rreze përdor 8 rreze për pixel pa filtrim shtesë, ndërsa teknika CSM përdor 16 Përqindja e filtrimit më afër (PCM) mostrat me një filtër të veçantë të aplikuar në tampon. Sidoqoftë, duhet të keni parasysh që zhvilluesit qartësisht nuk e optimizuan punën e CSM në këtë rast, sepse ishte e mundur të rregullohej rezolucioni i hartave hije dhe filtrimi i tyre për të marrë hije më të mira, por kjo është vetëm një hije me cilësimet e paracaktuara të motorit të tyre.

Por edhe duke marrë parasysh këtë zbritje, ndryshimi është i dukshëm - me gjurmimin e rrezeve, hijet janë shumë më realiste, ato kanë skaje të lëmuara pa skaje të dhëmbëzuara, turbullim më të mirë në skajet, madje edhe detaje të vogla (këmbët e karriges) hedhin një hije të saktë fizikisht. . Rezultati përfundimtar është hije të përshtatshme me skajet e buta dhe të forta të hijeve pikërisht aty ku duhet të jenë. Ju gjithashtu mund të vizatoni lehtësisht hijet nga burimet e dritës së zonës, gjë që është jashtëzakonisht e vështirë të bëhet me rasterizimin.

Për sa i përket performancës, kjo demonstrim jep një rreze të vetme për rezolucion Full HD në më pak se 4 ms, që është pak më e shpejtë se mbyllja globale, edhe pse rrezet janë më të gjata. Zbatimi i gjurmimit të rrezeve në një motor ekzistues të paraqitjes së hijes DX12 do të kërkojë disa ditë punë programuesi, por rezultati do t'ia vlejë nëse performanca është e mjaftueshme në fund.

Duket se Remedy shtoi pothuajse të gjitha efektet e mundshme me gjurmimin në motorin e tyre në fazën fillestare të zhvillimit të DXR. Përfshirë reflektimet e dhëna duke përdorur gjurmimin e rrezeve. Në të njëjtën kohë, nuk ka një përdorim kaq të dukshëm në formën e sipërfaqeve thjesht pasqyre, por një qasje më delikate me reflektime në të gjitha objektet, por më pak të dukshme. Pamja e mëposhtme e ekranit tregon një krahasim të teknikave duke përdorur gjurmimin e rrezeve (djathtas) dhe hapësirën e ekranit (majtas):


Imazhi i gjurmuar është marrë duke dhënë vetëm një rreze reflektimesh për pixel pa filtrim. Reflektimet në hapësirën e ekranit janë qartësisht më pak realiste dhe marrin parasysh vetëm objektet e dukshme nga kamera kryesore, ndërsa gjurmimi i rrezeve ju lejon t'i shfaqni edhe ato, megjithëse ka të metat e veta në formën e zhurmës së konsiderueshme të pikselit. Por kjo mund të zgjidhet në parim, siç tregojnë programet e tjera demo, dhe në versionin e kompanisë finlandeze, ulja e zhurmës thjesht nuk zbatohet ende, me përjashtim të përdorimit të vlerave të pikselëve nga kornizat e mëparshme për anti-aliasing në ekran të plotë.

Motori Northlight tashmë përdor llogaritjen globale të ndriçimit ( G.I.) - konkretisht në lojën Quantum Break, dhe ky efekt aktivizohet si parazgjedhje në motor. Për llogaritjen e GI, përdoren voksele me madhësi afërsisht 25 cm, të cilat kombinohen me rezultatin e teknikës së mbylljes globale SSAO duke përdorur hapësirën e ekranit. Si një eksperiment, Remedy zëvendësoi SSAO me një efekt të ngjashëm duke përdorur gjurmimin e rrezeve dhe rezultati ishte më i mirë.


Mund të shihet se sipërfaqet nuk janë të hijezuara siç duhet dhe diçka nuk është në rregull me to. Problemi zgjidhet duke modifikuar metodën e përdorimit të të dhënave vëllimore GI, me të cilat eliminohen shumica e objekteve:


Pse keni nevojë të llogaritni fare ndriçimin/hijen globale dhe a është e mundur të bëhet pa këtë hap jashtëzakonisht intensiv të burimeve? Shikoni shembullin vizual se si duket vetëm rezultati i llogaritjes së ndriçimit të drejtpërdrejtë:


Ngjashëm me Doom me errësirën e vazhdueshme dhe hijet e ashpra të shablloneve. Por në pamjen tjetër të ekranit, ndriçimit të drejtpërdrejtë i është shtuar edhe ndriçimi indirekt - domethënë rrezet e dritës të reflektuara nga objektet e tjera në skenë:


Është bërë shumë më mirë, pavarësisht zhurmës, skena ka fituar vëllim dhe nuk duket sikur të gjitha objektet e saj janë të vendosura në hapësirë ​​me praninë e një burimi të vetëm të ndritshëm drite (dielli). Dhe kjo është se si duket imazhi përfundimtar, me informacionin e ngjyrave të mbivendosur, ndriçimin e plotë dhe pas-përpunimin:


Reflektimet dhe hijezimet në skenë duken shumë realiste për ne. Në veçanti, llamba pasqyron të gjitha objektet, duke përfshirë një dritare të ndritshme të padukshme për kamerën kryesore. Dhe turi në të djathtë pasqyron stilolapsin e vet - kjo nuk mund të bëhet duke përdorur rasterizimin pa hakime të zgjuara. I vetmi problem i dukshëm i gjurmimit këtu është zhurma e madhe e pikselëve, të cilën Remedy ende nuk është përpjekur ta heqë vërtet. Por i njëjti algoritëm nga Nvidia GameWorks mund të ndihmojë shumë, për të mos përmendur reduktimin e zhurmës duke përdorur inteligjencën artificiale.

Sigurisht, do të ishte shumë mirë të përdorni gjurmimin e rrezeve kudo që të jetë e mundur, por zgjidhja optimale për paraqitjen hibride është optimizimi duke përdorur hartat hije, të cilat përdoren në demonstrimin e Remedy për shumicën e burimeve të dritës, përveç diellit. Dhe kjo fillimisht do të bëhet në çdo aplikacion duke përdorur gjurmimin e rrezeve, sepse përdorimi i tij direkt kudo do të jetë shumë i shtrenjtë dhe nuk është ende i mundur në kohë reale, madje edhe duke përdorur disa GPU në të njëjtën kohë.

Është e rëndësishme që integrimi i mbështetjes DXR dhe RTX në motorin Northlight ishte mjaft i shpejtë dhe pa dhimbje. Zhvilluesit finlandezë u mahnitën se sa shpejt ishin në gjendje të prototiponin ndriçimin, hijezimin dhe reflektimet e përmirësuara duke përdorur gjurmimin e rrezeve - të gjitha me cilësi shumë më të mirë se hakerat tradicionale të rasterizimit. Ndërsa teknologjitë e shfaqura janë aktualisht në zhvillim të hershëm dhe larg përfshirjes në lojëra tani, është një fillim i mrekullueshëm për adoptimin e ardhshëm.

Gjurmimi i rrezeve në kohë reale në Metro Exodus (lojëra 4A)

Ka të ngjarë që në vitet e ardhshme të shohim më shumë se një lojë që përdor paraqitjen hibride me gjurmimin e rrezeve për të dhënë disa nga efektet. Në veçanti, e para (ose një nga të parat, të paktën) duhet të jetë loja Eksodi i Metrosë, i cili do të përdorë gjurmimin e rrezeve DXR duke përdorur teknologjinë Nvidia RTX për të llogaritur ndriçimin dhe hijezimin global.

Supozohet se kjo metodë e llogaritjes G.I. do të jetë i disponueshëm në lojë si një alternativë ndaj algoritmeve më të njohura SSAO Dhe IBL(ndriçimi i bazuar në imazh, ndriçimi i bazuar në strukturën e mjedisit). Natyrisht, ky është ende një përdorim jashtëzakonisht i kufizuar i gjurmimit, por cilësia e ndriçimit/hijesimit global me gjurmimin e rrezeve është shumë më e lartë se madje në VXAO, për të mos përmendur SSAO. Këtu është një krahasim vizual i metodave të hapësirës së ekranit me gjurmimin, marrë nga kolegët tanë gjermanë nga ekrani i një sistemi ekspozimi (kështu që ju kërkojmë falje paraprakisht për cilësinë):

Teksturat u fikën gjatë demonstrimit në mënyrë që ndryshimi në ndriçimin e skenës të ishte qartë i dukshëm. Dhe kjo është e vërtetë, metodat e rasterizimit të ekranit japin një pamje të sheshtë që imiton vetëm në mënyrë të paqartë hijezimin në qoshet midis skajeve të objekteve, dhe gjurmimi i rrezeve jep hijezim dhe ndriçim global fizikisht korrekt me hije të errëta pikërisht aty ku duhet të jenë - për shembull, shikoni brenda fuçi kur hyn nëpër të çara në shtëpi - me SSAO nuk errësohet fare brenda, por me gjurmimin e rrezeve në thellësitë e tij është e errët, siç duhet.

Këtu ka vetëm një pyetje - nëse videoja tregon një skenë statike, pa objekte dinamike fare dhe ndikimin e tyre në ndriçimin global, atëherë çfarë ju pengon që së pari të llogaritni gjithçka jashtë linje dhe t'i futni këto të dhëna në hartat e dritës statike? Na duket se gjatë llogaritjes dinamike të ndriçimit global në kohë reale, skena për demonstrimin e aftësive duhet të ishte zgjedhur disi më e gjallë, të paktën me burime drite lëvizëse, për të mos përmendur objektet në lëvizje. Përndryshe, mbetet të pyesim veten pse lojtarët nuk e kuptuan se çfarë u tregua saktësisht dhe pse është e pamundur ta bësh këtë duke përdorur rasterizimin tani.

konkluzionet

Gjurmimi i rrezeve siguron cilësi shumë më të mirë të imazhit në krahasim me rasterizimin dhe është përdorur prej kohësh aty ku është e mundur - në industrinë e filmit, reklamat, dizajnin, etj. Por për një kohë të gjatë ai thjesht nuk ishte i përshtatshëm për interpretim në kohë reale për shkak të burimit të tij të madh. intensiteti - në fund të fundit, për çdo piksel është e nevojshme të llogariten disa rreze të reflektuara nga objektet në skenë dhe të përthyera në to. Për paraqitjen jashtë linje, e cila nuk kërkon rezultate të shpejta, kjo qasje ishte gjithmonë cilësia më e lartë, por në grafikat në kohë reale duhej të kënaqeshim me rasterizimin - mënyra më e thjeshtë dhe më e shpejtë për të projektuar një skenë 3D në një ekran 2D. Natyrisht, performanca e lartë e rasterizimit ka disavantazhin e vetëm llogaritjeve të përafërta të ngjyrës së pikselëve në skenë, të cilat nuk marrin parasysh shumë faktorë: reflektimin e rrezeve të dritës, disa veti materialesh etj. Rasterizimi, qoftë edhe me një mori dinake. hacks, vetëm përafërsisht riprodhon skenën, dhe madje edhe shaderët më kompleksë të pikselit dhe llogaritës nuk do të ofrojnë cilësinë e gjurmimit të plotë të rrezeve, thjesht bazuar në parimin e funksionimit të tyre.

Njoftimi i teknologjisë DXR API dhe Nvidia RTX u ka mundësuar zhvilluesve të fillojnë kërkimin e algoritmeve që përdorin gjurmimin e rrezeve me performancë të lartë - ndoshta ndryshimi më domethënës në grafikat në kohë reale që nga prezantimi i shaderëve të programueshëm. Zhvilluesit e interesuar tashmë i kanë treguar publikut disa demonstrime teknologjike shumë mbresëlënëse duke përdorur vetëm një numër të vogël mostrash për piksel gjatë gjurmimit, dhe e ardhmja e lojërave është në duart e tyre. Dhe në duart e prodhuesve të GPU, të cilët duhet të lëshojnë zgjidhje të reja që mbështesin gjurmimin e harduerit, që priten në disa projekte lojërash në fund të këtij viti dhe në fillim të vitit të ardhshëm.

Natyrisht, përpjekjet e para për të përdorur gjurmimin do të jenë hibride dhe seriozisht të kufizuara në sasinë dhe cilësinë e efekteve, dhe gjurmimi i plotë do të duhet të presë për dekada. Të gjitha programet demo të paraqitura përdorin 1-2 rreze për pixel, ose edhe më pak, ndërsa aplikacionet profesionale kanë qindra të tilla! Dhe për të marrë cilësinë e paraqitjeve jashtë linje në kohë reale, duhet të prisni ende një kohë shumë të gjatë. Por tani është koha për të filluar punën për futjen e gjurmimit në motorët ekzistues dhe kushdo që është i pari në zotërimin e aftësive të DXR mund të fitojë një avantazh të caktuar në të ardhmen. Për më tepër, gjurmimi i rrezeve mund ta bëjë më të lehtë zhvillimin e botëve virtuale, pasi do të eliminojë shumë nga detyrat e vogla të modifikimit manual të hijeve, hartave të dritës dhe reflektimeve, të cilat duhet të bëhen me algoritme të papërsosur të rasterizimit. Tashmë, gjurmimi i përshpejtuar nga hardueri mund të përdoret në vetë procesin e zhvillimit - për të shpejtuar gjëra të tilla si pasqyrimi paraprak i hartave të dritës, reflektimeve dhe hartave statike me hije.

Ka shumë opsione për optimizimin e paraqitjes hibride, dhe një nga karakteristikat më mbresëlënëse në shembujt e paraqitur më sipër duket të jetë efikasiteti i reduktimit të zhurmës, i cili është jashtëzakonisht i rëndësishëm kur gjurmimi i rrezeve me një numër të vogël mostrash për pixel - kjo është e njohur për kushdo që ka parë ndonjëherë punën e gjurmuesve offline, të cilët e bëjnë imazhin gradualisht dhe që në fillim është jashtëzakonisht i zhurmshëm. Një qasje me një numër të vogël rrezesh të llogaritura dhe reduktim shtesë të zhurmës bën të mundur marrjen e një cilësie përfundimtare të pranueshme në një pjesë të kohës së nevojshme për gjurmimin e plotë të skenës. Dhe kjo përkundër faktit se aftësitë e inteligjencës artificiale në reduktimin e zhurmës nuk janë përdorur ende, megjithëse kjo mund të bëhet.

Aftësitë globale të gjurmimit të rrezeve nuk duhet të gjykohen vetëm nga programet demo të lëshuara me nxitim. Ato theksojnë qëllimisht efektet kryesore, pasi janë demo teknologjike të krijuara për një qëllim të vetëm. Fotografia e gjurmuar nga rrezet bëhet shumë më realiste në përgjithësi, por përdoruesit nuk e kuptojnë gjithmonë se ku të shikojnë saktësisht, edhe nëse mendojnë se është bërë më e besueshme në përgjithësi. Sidomos nëse ndryshimi nuk është aq i madh në fillim dhe masat janë të gatshme të durojnë objekte të natyrshme në algoritmet për llogaritjen e reflektimeve dhe hijezimit global në hapësirën e ekranit, si dhe hakimet e tjera të rasterizimit.

Por me ndriçimin global fizikisht korrekt, hijezimin dhe reflektimet e llogaritura duke përdorur gjurmimin e rrezeve, fotografia e paraqitur bëhet më realiste edhe pa praninë e pasqyrave spektakolare dhe sipërfaqeve të tjera qartësisht reflektuese. Lojërat moderne pothuajse gjithmonë përdorin interpretim të bazuar fizikisht, në të cilin materialet kanë veti vrazhdësie dhe reflektimi, si dhe harta kubike të mjedisit, kështu që reflektimet janë gjithmonë të pranishme, edhe nëse nuk janë të dukshme me sy të lirë. Në një lojë të tillë, ju mund të zëvendësoni shpejt hartat kubike të mjedisit me gjurmim, duke ua ofruar këtë mundësi pronarëve të sistemeve me performancë të lartë. Hijet e gjurmuara gjithashtu duken më mirë dhe zgjidhin problemet themelore të hartave hije, megjithëse disa prej tyre zgjidhen në algoritme të ndërlikuara të avancuara, si p.sh. Nvidia Hybrid Frustum Traced Shadows (HFTS), duke përdorur gjithashtu një formë gjurmimi, por një qasje e unifikuar është ende më e mira. Dhe realizimi i hijeve shumë të buta nga burimet e dritës së zonës mund të prodhojë hije ideale, ultra-realiste në shumicën e rasteve.

Vështirësia kryesore e gjurmimit është se jo të gjitha implementimet e para do të duken menjëherë dukshëm më mirë se metodat e ndërlikuara të hapësirës në ekran, por mund të themi me siguri se ky është pikërisht drejtimi në të cilin duhet të lëvizim për të arritur fotorealizmin. Sepse algoritmet e hapësirës së ekranit kanë kufizime themelore që nuk mund të kapërcehen. Në shumë aspekte, fotografia edhe e programeve demo ekzistuese është mjaft e mirë, edhe nëse është dhënë nga disa GPU të fuqishme dhe përdor reduktim të ndërlikuar të zhurmës. Tani për tani ne duhet të përdorim një numër të vogël rrezesh për piksel dhe të shtypim zhurmën, por në të ardhmen kjo do të zgjidhet me ndihmën e zhvillimit të gjerë primitiv. Këto janë vetëm testet e para me gjurmimin e rrezeve në kohë reale në të ardhmen, cilësia e imazhit do të rritet së bashku me performancën.

Tani për tani, në dy vitet e ardhshme do të jemi në gjendje të përfshijmë një ose dy teknika të reja që përdorin gjurmimin e rrezeve për të plotësuar rasterizimin ose për të zëvendësuar vetëm një pjesë të punës së tij. Kjo bëhet gjithmonë në fillim të jetës së teknologjive të reja, kur është e mundur të çaktivizohen algoritme të reja që janë shumë të rënda për kompjuterin mesatar të lojërave. Por nëse fokusoheni vetëm në to, atëherë thjesht nuk do të ketë përparim. Dhe mbështetja e Nvidia për gjurmimin e harduerit është e rëndësishme sepse ata dinë të ndihmojnë zhvilluesit të zbatojnë teknologji të reja. Dhe ne jemi të sigurt që Metro Exodus është larg nga e vetmja lojë në të cilën Nvidia po promovon gjurmimin, sepse ata po bashkëpunojnë me zhvilluesit e lojërave në disa projekte njëherësh. Famëkeq Tim Sweeney nga Epic Games parashikoi që në dy vjet GPU-të do të fitojnë performancë të mjaftueshme për përdorimin e gjerë të gjurmimit të rrezeve në lojëra, dhe mund ta besoni.

Zhvilluesit më të afërt me Microsoft filluan të eksplorojnë aftësitë e DXR pothuajse një vit më parë, dhe ky është vetëm fillimi i API-së së re. Për më tepër, thjesht nuk ka zgjidhje grafike të disponueshme në treg që mbështesin përshpejtimin e gjurmimit të harduerit. Njoftimi i DXR synon të bëjë që zhvilluesit e harduerit dhe softuerit të fillojnë punën për të kuptuar dhe optimizuar gjurmimin e rrezeve dhe të fillojnë fazën e hershme të futjes së teknologjive të reja në lojëra. Zhvilluesit e interesuar tashmë kanë filluar të eksperimentojnë me DXR dhe GPU-të moderne, dhe kompani të tilla si Epic Games, Futuremark, DICE, Unity dhe Electronic Arts madje kanë njoftuar planet për të përdorur aftësitë DXR në versionet e ardhshme të motorëve dhe lojërave të lojërave.

Ka të ngjarë që entuziastëve të duhet të presin (kjo është pjesa jonë) që GPU-të e përshpejtuara nga hardueri të bëhen të disponueshme për të parë edhe efektet e para të gjurmuara nga rrezet, pasi niveli bazë i mbështetjes përmes shaderëve llogaritës mund të jetë shumë i ngadaltë për algoritme edhe më të thjeshta. Lojërat që përdorin DXR do të kërkojnë mbështetje harduerike për gjurmimin, e cila fillimisht do të jetë e disponueshme vetëm në Nvidia Volta, por kërcënon të përmirësohet në mënyrë aktive me kalimin e kohës. Është gjithashtu e mundur që të shfaqen lojëra relativisht të thjeshta me grafikë të stilizuar që do të përdorin ekskluzivisht gjurmimin e rrezeve.

Një pikë tjetër e rëndësishme është se gjenerata aktuale e konzollave të lojërave nuk mbështet përshpejtimin e harduerit të gjurmimit të rrezeve, Microsoft nuk ka thënë asgjë për DXR në Xbox One. Me shumë mundësi, një mbështetje e tillë thjesht nuk do të ekzistojë, gjë që mund të bëhet një pengesë tjetër për përdorimin aktiv të aftësive të gjurmimit të rrezeve në lojëra. Megjithëse Xbox One ka pothuajse mbështetje të plotë për DirectX 12, ai nuk ka asnjë njësi harduerike për të përshpejtuar gjurmimin, kështu që ka një shans të mirë që, të paktën deri në gjeneratën e ardhshme të konzollave, të kufizohet në disa gjurmime rrezesh efekte në disa projekte lojërash të mbështetura nga Nvidia, duke promovuar teknologjinë e saj RTX. Unë me të vërtetë do të doja të jem i gabuar, sepse entuziastët e grafikës kompjuterike tashmë kanë pritur për përmirësime të tilla globale në paraqitjen në kohë reale.

Teknikat e gjurmimit të rrezeve konsiderohen si metodat më të fuqishme për krijimin e imazheve realiste sot. Shkathtësia e metodave të gjurmimit është kryesisht për shkak të faktit se ato bazohen në koncepte të thjeshta dhe të qarta që pasqyrojnë përvojën tonë të perceptimit të botës përreth nesh.

Le të shohim se si formohet një imazh. Imazhi prodhohet nga drita që hyn në kamerë. Le të lëshojmë shumë rreze nga burimet e dritës. Le t'i quajmë rreze primare. Disa nga këto rreze do të fluturojnë larg në hapësirën e lirë, dhe disa do të godasin objektet. Rrezet mund të përthyhen dhe reflektohen mbi to. Në këtë rast, një pjesë e energjisë së rrezes do të absorbohet. Rrezet e përthyera dhe të reflektuara formojnë shumë rreze dytësore. Pastaj këto rreze do të përthyhen dhe reflektohen përsëri dhe do të formojnë një brez të ri rrezesh. Përfundimisht, disa nga rrezet do të godasin kamerën dhe do të formojnë një imazh.

Ka algoritme që punojnë sipas këtij algoritmi. Por ato janë jashtëzakonisht joefektive, pasi shumica e rrezeve që dalin nga burimi nuk arrijnë te kamera. Por një pamje e pranueshme merret nëse gjurmoni një numër të madh rrezesh, të cilat do të zgjasin shumë. Ky algoritëm quhet gjurmim i drejtpërdrejtë i rrezeve.

Metoda e gjurmimit të rrezeve të kundërta mund të zvogëlojë ndjeshëm kërkimin për rrezet e dritës. Kjo metodë u zhvillua në vitet 1980 nga Whitted dhe Kaye. Në këtë metodë, rrezet nuk gjurmohen nga burimet, por nga kamera. Kështu, gjurmohen një numër i caktuar rrezesh, i barabartë me rezolucionin e figurës.

Le të supozojmë se kemi një aparat fotografik dhe një ekran të vendosur në një distancë h prej tij. Le ta ndajmë ekranin në katrorë. Më pas, do të vizatojmë me radhë rrezet nga kamera në qendër të çdo katrori (rrezet primare). Le të gjejmë kryqëzimin e secilës rreze të tillë me objektet e skenës dhe të zgjedhim atë që është më afër kamerës midis të gjitha kryqëzimeve. Më pas, duke aplikuar modelin e dëshiruar të ndriçimit, mund të merrni një imazh të skenës. Kjo është metoda më e thjeshtë e gjurmimit të rrezeve. Kjo ju lejon të prisni vetëm skajet e padukshme.

Por ne mund të shkojmë më tej. Nëse duam të simulojmë fenomene të tilla si reflektimi dhe përthyerja, duhet të lëshojmë rrezet dytësore nga kryqëzimi më i afërt. Për shembull, nëse sipërfaqja reflekton dritën dhe është krejtësisht e sheshtë, atëherë është e nevojshme të reflektohet rreze primare nga sipërfaqja dhe të dërgohet një rreze dytësore në këtë drejtim. Nëse sipërfaqja është e pabarabartë, atëherë është e nevojshme të lëshohen shumë rreze dytësore. Kjo nuk bëhet në program, pasi kjo do të ngadalësojë shumë gjurmimin.

Nëse objekti është transparent, atëherë është e nevojshme të ndërtohet një rreze dytësore e tillë që kur thyhet të prodhojë rrezen origjinale. Disa trupa mund të kenë vetinë e përthyerjes difuze. Në këtë rast, formohen jo një, por shumë rreze të përthyera. Ashtu si me reflektimin, unë e neglizhoj këtë.

Kështu, rrezja primare, pasi ka gjetur një kryqëzim me objektin, përgjithësisht ndahet në dy rreze (të reflektuara dhe të përthyera). Pastaj këto dy rreze ndahen në dy të tjera e kështu me radhë.

Procedura kryesore e gjurmimit të rrezeve të kundërta në programin tim është procedura Ray. Ajo ka strukturën e mëposhtme:

Nëse gjenerimi i rrezes është i barabartë me thellësinë maksimale të rekursionit, atëherë kthejmë ndriçimin mesatar për të gjithë komponentët. Nëse jo, atëherë vazhdoni

Përcaktojmë trekëndëshin më të afërt me të cilin kryqëzohet rrezja.

Nëse nuk ka një trekëndësh të tillë, kthejeni ngjyrën e sfondit nëse ka, vazhdoni.

Nëse sipërfaqja me të cilën është gjetur kryqëzimi është reflektuese, atëherë formojmë një rreze të reflektuar dhe e quajmë procedurën e rrezeve në mënyrë rekursive me gjenerimin e rrezeve të rritur me 1.

Nëse sipërfaqja me të cilën u gjet kryqëzimi thyhet, atëherë formojmë një rreze të përthyer dhe e quajmë procedurën Ray në mënyrë rekursive me gjenerimin e rrezeve të rritur me 1.

Ne përcaktojmë ndriçimin përfundimtar të pikselit, duke marrë parasysh vendndodhjen e burimeve, vetitë e materialit, si dhe intensitetin e rrezes së reflektuar dhe të thyer.

Unë kam diskutuar tashmë një numër kufizimesh të metodës së gjurmimit kur folëm për thyerjen e përhapur dhe pasqyrat e pabarabarta. Le të shohim disa të tjera.

Vetëm objekte të veçanta - burime drite - mund të ndriçojnë skenën. Ato janë si pika dhe nuk mund të thithin, thyejnë ose reflektojnë dritën.

Vetitë e një sipërfaqeje reflektuese përbëhen nga dy komponentë - difuz dhe spekular.

Me reflektimin e përhapur, merren parasysh vetëm rrezet nga burimet e dritës. Nëse burimi ndriçon një pikë përmes një pasqyre (me një lepur), atëherë konsiderohet se pika nuk është e ndriçuar.

Spekulariteti gjithashtu ndahet në dy komponentë.

reflektimi - merr parasysh reflektimin nga objektet e tjera (jo burimet e dritës)

spekulare - merr parasysh shkëlqimin nga burimet e dritës

Gjurmimi nuk merr parasysh varësitë nga gjatësia e valës së dritës:

indeksi i thyerjes

koeficienti i përthithjes

koeficienti i reflektimit

Meqenëse nuk jam duke modeluar reflektimin dhe thyerjen e përhapur, nuk do të jem në gjendje të marr ndriçimin e pasmë. Prandaj, ne prezantojmë ndriçimin minimal të sfondit. Shpesh kjo thjesht ju lejon të përmirësoni ndjeshëm cilësinë e imazhit.

Algoritmi i gjurmimit ju lejon të vizatoni hije me cilësi shumë të lartë. Kjo nuk do të kërkojë shumë ripërpunim të algoritmit. Ju do të duhet të shtoni diçka në të. Kur llogaritni ndriçimin e pikave, është e nevojshme të vendosni një "Front hije" në secilën prej burimeve të dritës. "Përparimi i hijes" është një rreze që kontrollon nëse ka ndonjë gjë midis pikës dhe burimit. Nëse ka një objekt të errët midis tyre, atëherë pika është në hije. Kjo do të thotë se ky burim nuk kontribuon në ndriçimin përfundimtar të pikës. Nëse një objekt transparent është i shtrirë, atëherë intensiteti i burimit zvogëlohet. Vizatimi i hijeve kërkon shumë kohë. Pra, në disa situata ata janë të paaftë.

Programi im ka aftësinë të mundësojë zbutjen e imazhit. Antialiasing ka të bëjë me përcaktimin e ngjyrës së një piksel. Nuk lëshohet një rreze, por katër dhe përcaktohet vlera mesatare e ngjyrave të këtyre rrezeve. Nëse është e nevojshme të gjendet ngjyra e një piksel (i, j), atëherë 4 rreze dërgohen në pikat në planin e ekranit me koordinata (i-0.25, j-0.25), (i-0.25, j+0.25), (i+0.25,j-0.25) , (i+0.25,j+0.25).

Ministria e Arsimit e Federatës Ruse

Instituti Shtetëror i Elektronikës dhe Matematikës në Moskë

(Universiteti Teknik)

Departamenti i Informacionit dhe Komunikimit

teknologjive

Puna e kursit me temën:

"Analiza e perspektivave të përdorimit të metodës së gjurmimit të rrezeve në modelimin 3D"

E përfunduar:

Guliyan Boris

Podzorov Ivan

Grupi C -35

Moskë 2010

1. Grafika 3D. Prezantimi

3. Algoritmet e gjurmimit të rrezeve

4. Përparësitë dhe disavantazhet kryesore të gjurmimit të rrezeve

5. Zbatimi i metodës së gjurmimit të rrezeve

6. Eksperimentoni.

Detyrë: "Analiza e perspektivave të përdorimit të metodës së gjurmimit të rrezeve në modelimin 3D"

Formulimi i problemit

Njihuni me metodën e gjurmimit të rrezeve dhe përdorimin e saj në fushën e grafikës 3D, bëni një eksperiment duke përdorur një nga algoritmet e gjurmimit të rrezeve.

Në eksperimentin tonë ne konsiderojmë:
1) performanca e algoritmit të gjurmimit të rrezeve në varësi të numrit të poligoneve të modelit (3 topa merren si model: mat, transparent dhe pasqyrë).

2)Analiza e imazheve që rezultojnë me dhe pa gjurmim rrezesh.

Softueri Blender përdoret si mjedis për eksperimentin.

grafika 3D. Prezantimi.

Grafika tredimensionale është një seksion i grafikës kompjuterike, një grup teknikash dhe mjetesh të destinuara për paraqitjen e objekteve tredimensionale. Përdoret më së shumti për të krijuar imazhe në rrafshin e një ekrani ose fletë materiali të printuar në vizualizimin arkitektonik, industrinë e argëtimit, materialet e printuara, si dhe në shkencë, industri dhe teknologjinë e realitetit të shtuar.

Çdo imazh 3D përcaktohet nga parametrat dhe objektet e mëposhtme:

· Gjeometria (e ndërtuar nga medelët)

· Materialet (informacion rreth vetive vizuale të modelit)

· Burimet e dritës (drejtimi, fuqia, cilësimet e spektrit të ndriçimit)

· Kamera virtuale (zgjedhja e pikës dhe këndit të projeksionit)

· Forcat dhe ndikimet (cilësimet për shtrembërimet dinamike të objekteve, të përdorura kryesisht në animacion)

· Efekte shtesë (objekte që simulojnë fenomene atmosferike: dritë në mjegull, re, flakë, etj.)

Detyra e modelimit tredimensional është të përshkruajë këto objekte dhe t'i vendosë ato në skenë duke përdorur transformime gjeometrike në përputhje me kërkesat për imazhin e ardhshëm.

Problemi kryesor i grafikës 3D dhe modelimit është marrja e imazhit më fotorealist me shpenzime minimale të burimeve kompjuterike dhe kohës për përpunimin e skenës. Meqenëse ka nevoja të ndryshme në fusha të ndryshme, krijohen ide dhe algoritme të ndryshme për të zgjidhur një problem specifik. Një ide e tillë është gjurmimi i rrezeve, të cilin do ta shohim në punën tonë.

Gjurmimi i rrezeve përpara dhe prapa

Gjurmimi i rrezeve është një metodë e përpunimit të modeleve 3D për të prodhuar një imazh fotorealist, i cili merr parasysh pozicionin relativ të objekteve, si dhe vetitë fizike të objekteve si aftësia reflektuese dhe refraktive.

Ekzistojnë 2 metoda të gjurmimit të rrezeve: përpara dhe prapa

Gjurmimi i drejtpërdrejtë i rrezeve merr në konsideratë të gjitha rrezet nga burimet e dritës që godasin objektet dhe në fund arrijnë në syrin e vëzhguesit. Por kjo metodë nuk është racionale nga pikëpamja e performancës, sepse duhet të përpunojë të gjitha rrezet e mjedisit (dalëse dhe të përthyera) në të gjitha drejtimet, përfshirë ato që nuk bien në skenën e dukshme për vëzhguesin.

Në gjurmimin e kundërt të rrezeve, të gjitha rrezet burojnë nga syri i vëzhguesit, duke përcaktuar kështu një skenë me objekte që do të përpunohen më vonë. Kjo metodë ju lejon të shmangni përpunimin e objekteve që nuk bien brenda zonës së dukshme, gjë që redukton ndjeshëm sasinë e llogaritjeve të nevojshme.

Të gjitha algoritmet e gjurmimit të rrezeve bazohen në metodën e gjurmimit të rrezeve të kundërta.

Algoritmet e gjurmimit të rrezeve

Le të shqyrtojmë algoritmin bazë të gjurmimit (Fig. 1). Le të marrim sferën si objekt.

1. Për çdo piksel në ekran, një rreze lëshohet nga syri i vëzhguesit.

2. Pasi rrezja kryqëzon objektin, përcaktohet:

· Transparenca/patransparenca e objektit. Nëse objekti është transparent, atëherë një rreze përthyerjeje lëshohet nga kryqëzimi, nëse është e errët, ajo nuk lëshohet.

· Dritë/hije. Nga pika ku rrezja kryqëzon sferat, një rreze lëshohet në burimin e dritës (ose në mënyrë alternative për çdo burim drite, nëse ka disa prej tyre). Nëse kjo rreze nuk kryqëzon objekte ose sipërfaqe të tjera të errëta, atëherë burimi i dritës ndikon drejtpërdrejt në ndriçimin e një pike të caktuar. Nëse ka disa burime drite, atëherë efekti i përcaktuar nga vlera RGB e një pike të caktuar llogaritet nga ndikimi i të gjitha rrezeve.

· Reflektueshmëria. Nëse një objekt është i aftë të reflektojë rrezet, atëherë nga pika ku rrezja kryqëzon sferën, një rreze e reflektuar lëshohet te objektet që do të reflektohen në sferë.

Si rezultat, marrim disa lloje rrezesh. Rrezet primare përdoren për të përcaktuar dukshmërinë e një objekti, dhe rrezet dytësore ndahen në vijim:

· rrezet e përthyerjes;

· rrezet e hijes/dritës;

Rrezet e reflektimit.

Oriz. 1 Diagrami i algoritmit të gjurmimit të rrezeve


Të gjithë algoritmet e tjera bazohen në algoritmin e treguar më sipër dhe janë krijuar për të optimizuar llogaritjet.

kd-pemë

Algoritmi për ndërtimin e një peme kd mund të paraqitet si më poshtë (ne do ta quajmë paralelipiped drejtkëndor fjalën angleze "box").

1. "Shtoni" të gjithë primitivët në kutinë kufizuese. Kjo do të thotë, ndërtoni një kuti që kufizon të gjithë primitivët, të cilët do të korrespondojnë me nyjen rrënjësore të pemës.

2. Nëse ka pak primitivë në një nyje ose është arritur kufiri i thellësisë së pemës, përfundoni ndërtimin.

3. Zgjidhni planin e ndarjes që ndan nyjen e dhënë në dy nyje fëmijë. Ne do t'i quajmë ato nyjet e djathta dhe të majta të pemës.

4. Shtoni primitivët që kryqëzohen me kutinë e nyjes së majtë në nyjen e majtë, primitivet që kryqëzohen me kutinë e nyjes së djathtë në atë të djathtë.

5. Për çdo nyje, kryeni këtë algoritëm në mënyrë rekursive duke filluar nga hapi 2.

Rrjetë e rregullt

E gjithë hapësira 3D është e ndarë në një rrjet të rregullt të hollë të përbërë nga N*N*N kube. Ideja është që ju mund të kaloni vetëm nëpër ato kube nëpër të cilat kaloi rrezja.

Metoda nuk përdoret në praktikë.

Davantazhet dhe disavantazhet

Përveç faktit që metoda e gjurmimit të rrezeve jep pamjen më fotorealiste, ajo ka një sërë avantazhesh të tjera:

1. Aftësia për të bërë objekte të lëmuara pa i ndërthurur ato me sipërfaqe poligonale (për shembull, trekëndëshat).

2. Kompleksiteti llogaritës i metodës varet dobët nga kompleksiteti i skenës.

3. Paralelizueshmëri e lartë algoritmike e llogaritjeve - mund të gjurmoni dy ose më shumë rreze paralelisht dhe në mënyrë të pavarur.

4. Me metodën e gjurmimit të rrezeve, reflektimet shfaqen në mënyrë të përsosur (Fig. 2) dhe pa algoritme komplekse, pasi gjithçka llogaritet nga algoritmi kryesor i paraqitjes.

font-size:14.0pt"> Fig. 2 Reflektime të dy topave të pasqyrës në njëri-tjetrin

Metoda e gjurmimit të rrezeve ka disavantazhe të vërejtura në të gjitha algoritmet që përcaktojnë shtrirjen e përdorimit të kësaj metode.

1. Disavantazhi kryesor i këtij algoritmi rendering është ngadalësia e tij. Sidoqoftë, algoritmi i gjurmimit të rrezeve është shumë i paralelizueshëm dhe numri i bërthamave të procesorit po rritet çdo vit, kështu që duhet të shohim rritje lineare në performancën e gjurmimit të rrezeve. Por kjo qasje nuk merr parasysh rrezet dytësore (reflektimet, përthyerjet dhe zbulimin e hijes), dhe pasqyrimi me rrezet primare nuk ofron praktikisht asnjë përmirësim në cilësinë e imazhit në krahasim me algoritmin klasik.

2. Problemi me rrezet dytësore është se ato nuk kanë absolutisht asnjë koherencë (bashkëdrejtim). Kur lëvizni nga një piksel në tjetrin, duhet të llogariten të dhëna krejtësisht të ndryshme, të cilat mohojnë të gjitha teknikat e zakonshme të ruajtjes së memorjes që janë shumë të rëndësishme për performancë të mirë. Kjo do të thotë se llogaritja e rrezeve dytësore është shumë e varur nga vonesat e kujtesës.

3. Mungesa e mbështetjes harduerike për metodën (të gjitha GPU-të specializohen në rasterizimin).

4. Një problem tjetër i zakonshëm me metodën e gjurmimit të rrezeve ka të bëjë me anti-aliasing (AA). Rrezet vizatohen si një abstraksion i thjeshtë matematikor dhe ato nuk marrin parasysh madhësinë reale. Testi i kryqëzimit të trekëndëshit është një funksion i thjeshtë Boolean që jep një përgjigje po ose jo, por nuk jep detaje të tilla si "rrezja e pret trekëndëshin 40% të rrugës". Një pasojë e drejtpërdrejtë e këtij efekti do të jetë shfaqja e "shkallëve" (Fig. 3).

Oriz. 3 zbutja e hijes

Dhe e vetmja teknologji që mund të japë rezultate të mira është llogaritja e më shumë rrezeve se sa ka pikselë, pra supersampling (Oversampling ose Anti-Aliasing) (renderimi me një rezolucion më të lartë).

Duhet të mbani mend gjithashtu se shpejtësia dhe cilësia e interpretimit duke përdorur gjurmimin e rrezeve varen shumë nga optimizimi i kodit.

Përdorimi i metodës së gjurmimit të rrezeve

Për shkak të veçorive të saj (imazhi fotorealist, llogaritjet e ngadalta), kjo metodë përdoret në zonat ku cilësia e figurës është e rëndësishme dhe jo koha e paraqitjes së saj (në këtë rast, më së shpeshti përdoren metoda të kombinuara të renderimit, gjë që përmirëson performancën ). Këto fusha përfshijnë:

· animacion 3D;

· Efektet speciale të industrisë së filmit;

· Përkthim realist i fotografive;

· Sistemet Cad.

Kushtet e veçanta:

Një rrjetë poligonale është një koleksion kulmesh dhe poligonesh që përcakton formën e objektit të shfaqur.

Rendering - (përkthim në anglisht - "vizualizim") - procesi i marrjes së një imazhi nga një model.

Këtu, një model është një përshkrim i çdo objekti ose fenomeni në një gjuhë të përcaktuar rreptësisht ose në formën e një strukture të dhënash. Një përshkrim i tillë mund të përmbajë të dhëna gjeometrike, pozicionin e pikës së vëzhguesit, informacion në lidhje me ndriçimin, shkallën e pranisë së një substance, etj.


Figura 4. rrjetë poligonale

Eksperimentoni.

Ne zgjodhëm redaktorin Blender 3D si softuer për kryerjen e eksperimentit.

Është mjaft e lehtë për t'u mësuar dhe përmban të gjitha funksionet e nevojshme:

· Paraqitja e një imazhi me aftësinë për të lidhur dhe shkëputur gjurmuesin.

· Mbingarkim (anti-aliasing ose zbutje)

Ne matëm kohën e nevojshme për të dhënë 3 sfera të ndryshme (xham, pasqyrë dhe mat) në Multeris Equals të ndryshëm (çdo nivel rrit numrin e shumëkëndëshave me 4 herë). Kur niveli u rrit, koha u llogarit nga 0.

0 " style="margin-left:48.35pt;border-collapse:collapse">

Lv. Multeris

Koha e paraqitjes për çdo nivel. nga 0

Pa RayT [c]

Me RayT [c]

0,53

3,36

0,46

0,54

2,84

0,55

3,02

0,61

3,85

0,96

5,96

10,64

29,12

43,9

Tabela 1.

Renderimi është bërë me parametra maksimalë për të rritur diferencën në shpejtësinë e përpunimit.

Si rezultat, shohim se koha e shpenzuar për përpunimin e tre sferave me nivelin 4 (256 poligone në secilën sferë) është më e vogël se koha e shpenzuar për përpunimin e sferave me nivelin 2 (16 poligone secila).


Figura 5. Rrjeta poligonale për nivele të ndryshme

Fundi

Nga eksperimenti i kryer, mund të shihet se koha e shpenzuar për paraqitjen e 3 topave duke përdorur gjurmimin e rrezeve është dukshëm më e madhe se koha e shpenzuar për renderim pa përdorur gjurmimin e rrezeve. Por gjatë eksperimentit u vu re një vëzhgim interesant: koha për përpunimin e modeleve të nivelit 3, 4 dhe 5 është më e vogël se koha për përpunimin e një modeli me dy nivele.

Analiza e imazheve që rezultojnë:
1) Në foton e marrë pa përdorur gjurmimin e rrezeve (në tekstin e mëtejmë A), është e qartë se sfera transparente nuk jep efektin e një lente (duke përdorur një kanal alfa), ndërsa në foto duke përdorur gjurmimin e rrezeve (në tekstin e mëtejmë B) transparente. topi zmadhon objektet përtej tij (Fig. 6).

Oriz. 6 sfera transparente (kanali alfa në të majtë, gjurmimi i rrezeve në të djathtë)


2) Në foton A nuk ka top pasqyre, sepse marrja e një reflektimi mbi të bazohet në gjurmimin e rrezeve (Fig. 7).

Figura 7. Modeli i eksperimentit (kanali alfa sipër, gjurmimi i rrezeve poshtë).


3) Figura 8 tregon se kur jepet pa përdorur gjurmimin e rrezeve, zgavrat e brendshme ndriçohen, ku, logjikisht, drita nuk duhet të depërtojë.


Fig. 8 Incidenca e dritës në një top konkave (A në të majtë, B në të djathtë)

Nga kjo analizë është e qartë se cilësia e imazheve duke përdorur gjurmimin e rrezeve është dukshëm më e mirë se imazhet e marra pa të, gjë që justifikon përdorimin e kësaj metode në zonat ku cilësia e imazhit që rezulton, sesa koha e përpunimit të tij, është e rëndësishme.


Gjatë viteve të fundit, gjurmimi i rrezeve duket se është bërë "ëndrra numër një" e botës së grafikës 3D në kohë reale. Interesimi për këtë teknologji të paraqitjes arriti kulmin kur studiuesi i ri Daniel Pohl njoftoi projektin e tij mbi këtë teknologji në vitin 2004.

Arsyeja për interesimin e publikut të gjerë për punën ishte kryesisht për shkak të përqendrimit të Pohl në lojërat e famshme id Software Quake III, Quake IV dhe ekskluziviteti i revoleve Quake Wars 3D. Studiuesi tërhoqi shumë vëmendje nga shtypi dhe lojtarët filluan të ëndërrojnë për një të ardhme të ndritur kur lojërat e tyre të preferuara do të jepeshin duke përdorur gjurmimin e rrezeve dhe do të shpëtonin nga rasterizimi.

Intel shpejt e mori parasysh projektin dhe kompanisë iu duk një mënyrë ideale për të justifikuar rritjen e numrit të bërthamave në procesorë. Kompania nisi shpejt programin e saj të kërkimit dhe sot Intel nuk humbet kurrë një mundësi për të theksuar se gjurmimi i rrezeve është e ardhmja e lojërave 3D në kohë reale. Por a është vërtet kështu? Çfarë realitetesh teknologjike fshihen pas zhurmës së marketingut? Cilat janë përfitimet e vërteta të gjurmimit të rrezeve? A mund të presim që gjurmimi i rrezeve të zëvendësojë rasterizimin? Ne do të përpiqemi t'u përgjigjemi këtyre pyetjeve.


Klikoni mbi foto për ta zmadhuar.

Parimet bazë

Ideja themelore e gjurmimit të rrezeve është shumë e thjeshtë: për çdo piksel në ekran, motori i interpretimit tërheq një rreze të drejtpërdrejtë nga syri i vëzhguesit (kamera) në një element të skenës së paraqitur. Kryqëzimi i parë përdoret për të përcaktuar ngjyrën e pikselit në funksion të sipërfaqes së elementit që pritet.

Por vetëm kjo nuk mjafton për të prodhuar një skenë realiste. Duhet të përcaktohet ndriçimi i pikselit, gjë që kërkon vizatimin e rrezeve dytësore (në krahasim me rrezet primare, të cilat përcaktojnë dukshmërinë e objekteve të ndryshme që përbëjnë skenën). Për të llogaritur efektet e ndriçimit të skenës, rrezet dytësore tërhiqen nga pikat e kryqëzimit në burime të ndryshme drite. Nëse këto rreze bllokohen nga një objekt, atëherë ajo pikë është në hijen e hedhur nga burimi i dritës në fjalë. Përndryshe, burimi i dritës ndikon në ndriçimin. Shuma e të gjitha rrezeve dytësore që arrijnë burimin e dritës përcakton cilësinë e ndriçimit që godet elementin e skenës sonë.

Por kjo nuk është e gjitha. Për të arritur paraqitjen më realiste, duhet të merren parasysh karakteristikat e reflektimit dhe thyerjes së materialit. Me fjalë të tjera, ju duhet të dini se sa dritë reflektohet në pikën ku kryqëzohet rrezja kryesore, si dhe sasia e dritës që kalon nëpër material në atë pikë. Përsëri, rrezet e reflektimit dhe të thyerjes duhet të vizatohen për të llogaritur ngjyrën përfundimtare të pikselit.

Si rezultat, marrim disa lloje rrezesh. Rrezet primare përdoren për të përcaktuar dukshmërinë e një objekti dhe janë të ngjashme me një lloj z-buferi të përdorur në rasterizimin. Dhe rrezet dytësore ndahen në vijim:

  • rrezet e hijes/dritës;
  • rrezet e reflektimit;
  • rrezet e përthyerjes.

Algoritmi klasik i gjurmimit të rrezeve. Klikoni mbi foto për ta zmadhuar.

Ky algoritëm i gjurmimit të rrezeve është rezultat i punës së Turner Whitted, studiuesit që shpiku algoritmin 30 vjet më parë. Deri atëherë, algoritmi i gjurmimit të rrezeve funksiononte vetëm me rrezet primare. Dhe përmirësimet që bëri Whitted doli të ishin një hap gjigant drejt realizmit në interpretimin e skenës.

Nëse jeni të njohur me fizikën, atëherë me siguri keni vënë re se algoritmi i gjurmimit të rrezeve funksionon "në drejtim të kundërt" nga fenomenet që ndodhin në botën reale. Ndryshe nga besimi popullor në mesjetë, sytë tanë nuk lëshojnë rreze drite, përkundrazi, ata marrin rreze drite nga burime drite që reflektohen në objekte të ndryshme përreth nesh. Në parim, kështu funksionuan algoritmet e parë të gjurmimit të rrezeve.

Por disavantazhi kryesor i algoritmeve të para ishte se ata imponuan një ngarkesë të madhe llogaritëse. Për çdo burim drite, ju duhet të hidhni mijëra rreze, shumë prej të cilave nuk do të ndikojnë fare në skenën e paraqitur (pasi ato nuk kryqëzojnë rrafshin e imazhit). Algoritmet moderne të gjurmimit të rrezeve janë optimizime të algoritmeve bazë dhe përdorin të ashtuquajturin gjurmim të rrezeve të kundërta, pasi rrezet tërhiqen në drejtim të kundërt në krahasim me realitetin.


Algoritmi origjinal i gjurmimit të rrezeve rezultoi në shumë llogaritje të panevojshme. Klikoni mbi foto për ta zmadhuar.

Përfitimet e Ray Tracing

Siç e keni parë tashmë, përparësia kryesore e metodës së gjurmimit të rrezeve është thjeshtësia dhe eleganca e saj. Algoritmi përdor vetëm një objekt primitiv për të shfaqur efekte që shpesh kërkojnë një qasje jo të parëndësishme dhe teknologji komplekse stimulimi kur përdoret një metodë standardizimi rasterizimi.


Një hartë e mjedisit jep një përafrim të mirë të simulimit të reflektimeve mjedisore, por gjurmimi i rrezeve mund të simulojë edhe reflektimet e syve të makinës së Luigi-t në kapuç. Klikoni mbi foto për ta zmadhuar.

Reflektimet janë një zonë ku gjurmimi i rrezeve shkëlqen. Sot, në motorët 3D të lojërave moderne, reflektimet llogariten duke përdorur hartat e mjedisit. Kjo teknologji jep një përafrim të mirë të reflektimeve të objekteve të vendosura "në pafundësi" ose në mjedis (siç sugjeron emri), por për objektet me distancë të afërt qasja tregon kufizimet e saj.

Zhvilluesit e lojërave të garave, në veçanti, kanë krijuar truke për të simuluar reflektimet e objekteve aty pranë duke përdorur të ashtuquajturat harta kubike dinamike. Kamera është e pozicionuar në nivelin e makinës së lojtarit, pas së cilës bëhet renderimi në drejtimet kryesore. Rezultatet e paraqitjes ruhen më pas në harta kubike, të cilat përdoren për të shfaqur reflektimet.


Hartat dinamike të kubit mund të simulojnë reflektimet e objekteve aty pranë, të tilla si një aeroplan në një çajnik. Por ata nuk mund të përballojnë reflektimet e pjesëve të një objekti mbi njëri-tjetrin, për shembull, gryka e një çajniku në trupin e tij. Klikoni mbi foto për ta zmadhuar.

Natyrisht, hartat dinamike të kubit kanë gjithashtu të metat e tyre. Është mjaft e shtrenjtë për sa i përket fuqisë llogaritëse për të llogaritur disa rezultate të paraqitjes dhe për të parandaluar rënien e shumë të performancës, hartat e kubit nuk rillogariten aq herë sa imazhi kryesor. Kjo mund të shkaktojë një vonesë të lehtë në reflektime. Për të zvogëluar ngarkesën në shkallën e mbushjes, interpretimi kryhet me një rezolucion më të ulët, gjë që mund të çojë në pikselim në reflektime. Së fundi, kjo teknologji shpesh kufizohet në makinën e lojtarit, me të gjitha objektet e tjera që përdorin harta mjedisore më të thjeshta (sferike).

Me metodën e gjurmimit të rrezeve, reflektimet shfaqen në mënyrë të përsosur dhe pa algoritme komplekse, pasi gjithçka llogaritet nga algoritmi kryesor i paraqitjes. Një avantazh tjetër mund të konsiderohet shfaqja e reflektimeve të pjesëve të një objekti mbi njëri-tjetrin, për shembull, reflektimi i një pasqyre anësore në trupin e një makine, e cila është shumë e vështirë për t'u marrë duke përdorur metodën e rasterizimit - por këtu kjo reflektimi përftohet në të njëjtën mënyrë si të tjerët.


Metoda e gjurmimit të rrezeve ju lejon të simuloni reflektimin e pjesëve të objekteve mbi njëri-tjetrin, për shembull, reflektimin e një pasqyre të pamjes anësore në një trup makine. Klikoni mbi foto për ta zmadhuar.

Një tjetër avantazh i padiskutueshëm i metodës së gjurmimit të rrezeve është përpunimi me cilësi të lartë i efekteve të transparencës. Është jashtëzakonisht e vështirë të jepen efektet e transparencës duke përdorur algoritmin e rasterizimit, pasi llogaritja e transparencës varet drejtpërdrejt nga rendi i paraqitjes. Për të marrë rezultate të mira, ju duhet të renditni poligonet transparente në rendin më të largët nga kamera në më të afërt, dhe më pas të rendisni.

Por në praktikë, kjo detyrë është shumë e rëndë nga pikëpamja llogaritëse, dhe gabimet e transparencës janë gjithashtu të mundshme, pasi renditja bëhet në poligone, jo në pikselë. Ka disa teknologji që ju lejojnë të anashkaloni renditjen e poligonit të skenës (siç është peeling thellësia dhe A-buffers), por për momentin asnjëra prej tyre nuk mund të quhet kursim. Në të njëjtën kohë, algoritmi i gjurmimit të rrezeve ju lejon të trajtoni në mënyrë elegante efektet e transparencës.


Trajtimi i duhur i efekteve të transparencës duke përdorur një rasterizues kërkon përdorimin e algoritmeve komplekse të tilla si A-buffers. Klikoni mbi foto për ta zmadhuar.

Një avantazh tjetër i rëndësishëm është llogaritja e hijeve. Në botën e rasterizimit, teknologjia e hartës së hijes është bërë standardi. Por ka disa probleme, të tilla si "shkallët" në qarqe dhe sasia e memories së përdorur. Algoritmi i gjurmimit të rrezeve e zgjidh problemin e hijes në mënyrë shumë elegante, pa iu drejtuar algoritmeve komplekse, duke përdorur të njëjtin objekt primitiv dhe pa kërkuar memorie shtesë.

Së fundi, një tjetër avantazh i fortë i metodës së gjurmimit të rrezeve është aftësia e saj vendase për të punuar me sipërfaqe të lakuara. GPU-të moderne kanë mbështetje për sipërfaqet e lakuara për disa vite tani (ajo shfaqet dhe zhduket ndërsa lëshohen drejtues të rinj dhe arkitektura të reja). Por nëse rasterizuesit duhet të bëjnë një kalim fillestar për të krijuar trekëndëshat (i cili është i vetmi primitiv me të cilin mund të punojë motori i rasterizimit), atëherë një motor gjurmues rrezesh mund të punojë thjesht me kryqëzimin e rrezeve, pa një përcaktim të saktë matematikor të sipërfaqes .

Mitet rreth gjurmimit të rrezeve

Por gjurmimi i rrezeve ende nuk duhet idealizuar, kështu që është koha për të thyer disa nga mitet që rrethojnë këtë algoritëm.

Le të fillojmë me faktin se shumë lojtarë e konsiderojnë algoritmin e gjurmimit të rrezeve si thelbësisht më të mirë se rasterizimi, pasi përdoret në filma. Kjo eshte e gabuar. Shumica e filmave sintetikë/të vizatuar me dorë (si të gjithë filmat e Pixar) përdorin një algoritëm të quajtur REYES, i cili bazohet në rasterizimin. Pixar shtoi vetëm gjurmimin e rrezeve në motorin e tij të renderimit RenderMan më vonë, gjatë prodhimit të Makinave. Por edhe për këtë film, gjurmimi i rrezeve u përdor në mënyrë selektive për të mos mbingarkuar fuqinë ekzistuese kompjuterike. Përpara këtij projekti, Pixar përdori një plug-in për të përdorur të kufizuar gjurmimin e rrezeve, si efektet e hijes së mbylljes së ambientit (AO).


Klikoni mbi foto për ta zmadhuar.

Miti i dytë i zakonshëm në mesin e avokatëve të gjurmimit të rrezeve ka të bëjë me kompleksitetin e skenave që mund të japin gjurmimi i rrezeve dhe rasterizimi. Për të kuptuar, duhet të hedhim një vështrim më të afërt në secilin algoritëm.

Më poshtë është se si funksionon algoritmi i rasterizimit në çdo trekëndësh në skenë.

  • Përcaktohet një grup pikselësh që mbulon çdo trekëndësh;
  • Për çdo piksel të përfshirë, thellësia e tij krahasohet me thellësinë e pikselit fqinj.

Kufizimi kryesor i metodës së rasterizimit ka të bëjë me numrin e trekëndëshave. Algoritmi ka kompleksitet O(n), ku n është numri i trekëndëshave. Algoritmi në këtë rast ka kompleksitet linear në varësi të numrit të trekëndëshave, pasi për çdo kornizë përpilohet një listë e trekëndëshave që duhet të përpunohen, njëri pas tjetrit.

Në të kundërt, algoritmi i gjurmimit të rrezeve funksionon si më poshtë.

Për çdo piksel kornizë:

  • vizatohet një rreze për të përcaktuar se cili trekëndësh është më i afërti;
  • Për çdo trekëndësh, llogaritet distanca nga trekëndëshi në rrafshin e daljes së figurës.

Siç mund ta shihni, sekuenca e përpunimit është bërë e kundërt. Në rastin e parë, ne morëm çdo poligon dhe shikuam se cilat pikselë mbulonte. Dhe në rastin e dytë, ne morëm çdo piksel dhe shikuam se cili poligon i korrespondonte. Prandaj, mund të mendoni se metoda e gjurmimit të rrezeve është më pak e varur nga numri i shumëkëndëshave sesa metoda e rasterizimit, pasi numri i shumëkëndëshave nuk ndikon në ciklin kryesor. Por në praktikë nuk është kështu. Në fakt, për të përcaktuar se cili trekëndësh do të presë rrezen, duhet të përpunojmë të gjithë trekëndëshat në skenë. Këtu, sigurisht, mbrojtësit e metodës së gjurmimit të rrezeve do të thonë se nuk është e nevojshme të përpunohen të gjithë trekëndëshat e skenës me secilën rreze. Nëse përdorim llojin e duhur të strukturës së të dhënave, është shumë e lehtë të organizohen trekëndëshat në mënyrë që vetëm një përqindje e vogël e tyre të testohet me secilën rreze, që do të thotë se metoda e gjurmimit të rrezeve ka një kompleksitet prej O(log n), ku n është numri i shumëkëndëshave.

Po, argumentet mund të konsiderohen të vërteta. Por avokatët e gjurmimit të rrezeve janë paksa të pasinqertë në atë që e njëjta gjë vlen edhe për rasterizimin. Motorët e lojës kanë përdorur pemë BSP (ndarje binar të hapësirës) dhe teknika të tjera për vite me radhë për të kufizuar numrin e poligoneve që duhen llogaritur për çdo kornizë. Një tjetër pikë e diskutueshme është se struktura të tilla janë më efektive për të dhënat statike. Gjithçka që na duhet është të llogarisim të dhënat një herë, dhe më pas thjesht të ofrojmë akses në to, dhe kjo jep rezultate shumë të mira. Por çfarë të bëjmë me të dhënat dinamike? Në këtë rast, të dhënat do të duhet të rillogariten për secilën imazh, dhe nuk ka formula të mrekullueshme për këtë. Ju ende duhet të studioni çdo shumëkëndësh.

Algoritëm i thjeshtë?

Miti i fundit ka të bëjë me thjeshtësinë natyrore dhe elegancën e algoritmit të gjurmimit të rrezeve. Natyrisht, një algoritëm i gjurmimit të rrezeve mund të shkruhet në disa rreshta kodi (disa algoritme përshtaten në njërën anë të një kartevizite), por një algoritëm i gjurmimit të rrezeve me performancë të lartë është një çështje krejtësisht tjetër.

David Luebke, një inxhinier në nVidia, bëri komentin e mëposhtëm që pasqyron në mënyrë të përsosur realitetin: "Rasterizimi është i shpejtë, por duhet të mendoni me kujdes se si të bëni efekte vizuale komplekse. Gjurmimi i rrezeve mbështet efekte vizuale komplekse, por duhet të mendoni me kujdes se si ta bëj atë shpejt."


Kodi minimal i gjurmimit të rrezeve i shkruar nga Paul Heckbert për t'u vendosur në një kartëvizitë. Klikoni mbi foto për ta zmadhuar.

E tëra çfarë ju duhet të bëni është të lexoni disa artikuj rreth optimizimeve që duhen bërë në algoritmin e gjurmimit të rrezeve për të vlerësuar atë që tha Luebke. Për shembull, algoritmet më të fuqishme të gjurmimit të rrezeve nuk përpunojnë rrezet në mënyrë të pavarur, ata përdorin ato që quhen grupe rrezesh, gjë që lejon optimizimin e performancës me rrezet që kanë të njëjtën origjinë dhe drejtim. Ky optimizim është i shkëlqyeshëm për një instruksion të vetëm, blloqe të funksioneve të të dhënave (SIMD) brenda CPU-ve dhe GPU-ve, dhe është gjithashtu shumë efektiv për rrezet bazë me një shkallë koherence ose rreze hije. Por, nga ana tjetër, optimizimi nuk është më i përshtatshëm për rrezet e përthyerjes ose reflektimit.

Për më tepër, siç thekson Daniel Pohl në në artikullin e tij për Quake Wars RT, përdorimi i grupeve të rrezeve mund të bëhet problematik me teksturat transparente (teksturat e famshme alfa që përdoren për pemët), sepse nëse të gjitha rrezet në një grup nuk sillen në të njëjtën mënyrë (disa godasin sipërfaqen, të tjerët kalojnë nëpër të), atëherë sipërfaqja shtesë mund të bëhet shumë më i lartë se përfitimet e optimizimeve të ofruara nga përdorimi i grupeve të rrezeve.


Vizualizimi i "kostos" së paraqitjes së çdo piksel, me pikselët e kuq që janë më "të shtrenjtat". Siç mund ta shihni, përpunimi i pemëve është shumë i shtrenjtë në versionin e gjurmuar me rreze të Quake Wars. Klikoni mbi foto për ta zmadhuar.

Së fundi, siç e kemi përmendur tashmë, gjurmimi i rrezeve kërkon një strukturë të përshtatshme të dhënash për të ruajtur elementët e ndryshëm të skenës, dhe është kjo strukturë që do të luajë një rol përcaktues në performancën përfundimtare. Por zgjedhja dhe më pas puna me një strukturë të tillë të dhënash nuk është aq e thjeshtë sa duket në shikim të parë. Disa struktura performojnë më mirë për të dhënat statike, ndërsa të tjerat mund të përditësohen më shpejt për të dhëna dinamike ose të zënë më pak memorie. Si zakonisht, gjithçka varet nga gjetja e një kompromisi të pranueshëm. Nuk ka mrekulli.

Prandaj, siç e shohim, algoritmi i gjurmimit të rrezeve nuk mund të quhet gjithmonë ideali i thjeshtësisë dhe elegancës, siç besojnë disa. Për të marrë performancë të mirë nga një algoritëm i gjurmimit të rrezeve, duhet të gjeni zgjidhje programimi jo më pak jo të parëndësishme sesa në rastin e marrjes së efekteve vizuale komplekse duke përdorur metodën e rasterizimit.

Tani që kemi pastruar disa nga mitet rreth gjurmimit të rrezeve, le të shohim çështjet reale që vijnë me këtë teknologji.

Dhe ne do të fillojmë me problemin kryesor që lidhet me këtë algoritëm interpretimi: ngadalësia e tij. Sigurisht, disa entuziastë do të thonë se ky nuk është më problem, pasi algoritmi i gjurmimit të rrezeve është shumë i paralelizueshëm dhe numri i bërthamave të procesorit po rritet çdo vit, kështu që duhet të shohim një rritje lineare të performancës së gjurmimit të rrezeve. Për më tepër, kërkimi mbi optimizimet që mund të aplikohen për gjurmimin e rrezeve është ende në fillimet e tij. Nëse shikoni përshpejtuesit e parë 3D dhe i krahasoni me atë që është në dispozicion sot, ka vërtet arsye për optimizëm.

Megjithatë, kjo pikëpamje humbet një pikë të rëndësishme: gjëja më interesante në lidhje me gjurmimin e rrezeve janë rrezet dytësore. Në praktikë, llogaritja e një imazhi vetëm me rreze primare nuk do të sigurojë shumë përmirësim në cilësinë e imazhit në krahasim me algoritmin klasik me një zbutës Z. Por problemi me trarët dytësorë është se ata nuk kanë absolutisht asnjë koherencë (bashkëdrejtim). Kur lëvizni nga një piksel në tjetrin, duhet të llogariten të dhëna krejtësisht të ndryshme, të cilat mohojnë të gjitha teknikat e zakonshme të ruajtjes së memorjes që janë shumë të rëndësishme për performancë të mirë. Kjo do të thotë që llogaritja e rrezeve dytësore është shumë e varur nga nënsistemi i kujtesës, në veçanti, nga vonesat e tij. Ky është skenari më i keq i mundshëm, pasi nga të gjitha karakteristikat e kujtesës, vonesa është përmirësuar më së paku vitet e fundit dhe nuk ka asnjë arsye për të besuar se situata do të përmirësohet në të ardhmen e parashikueshme. Është mjaft e lehtë të rritet gjerësia e brezit të kujtesës duke përdorur çipa të shumtë paralelisht, por vonesat do të mbeten ende të njëjta.


Për kartat video, vonesa e kujtesës (latenca) zvogëlohet shumë më ngadalë sesa rritet gjerësia e brezit (gjerësia e brezit). Nëse kjo e fundit përmirësohet me një faktor 10, atëherë vonesat përmirësohen vetëm me një faktor dy.

Arsyeja e popullaritetit të GPU-ve qëndron në faktin se krijimi i harduerit që specializohet në rasterizimin është dëshmuar të jetë një zgjidhje shumë efektive. Me rasterizimin, akseset e memories kryhen në mënyrë koherente (paralelisht), pavarësisht nëse jemi duke punuar me pikselë, teksele ose kulme. Prandaj, cache-et e vogla, të plotësuara nga gjerësia e brezit serioz të memories, janë zgjidhja ideale për performancë të shkëlqyer. Sigurisht, rritja e xhiros është shumë e shtrenjtë, por kjo zgjidhje është mjaft e përshtatshme nëse shpërblehet. Në të kundërt, sot nuk ka zgjidhje për të përshpejtuar aksesin në kujtesë kur llogaritni rreze të shumta. Kjo është arsyeja pse gjurmimi i rrezeve nuk do të jetë kurrë aq efikas sa rasterizimi.

Një problem tjetër i zakonshëm me metodën e gjurmimit të rrezeve ka të bëjë me anti-aliasing (AA). Rrezet vizatohen si një abstraksion i thjeshtë matematikor dhe nuk marrin parasysh madhësinë reale. Testi i kryqëzimit të trekëndëshit është një funksion i thjeshtë Boolean që jep një përgjigje po ose jo, por nuk jep detaje të tilla si "rrezja e pret trekëndëshin 40% të rrugës". Një pasojë e drejtpërdrejtë e këtij efekti do të jetë shfaqja e "shkallëve".

Për zgjidhjen e këtij problemi janë propozuar disa teknologji, si gjurmimi me rreze dhe gjurmimi i konit, të cilat marrin parasysh trashësinë e rrezeve, por kompleksiteti i tyre pengon zbatimin efikas. Dhe e vetmja teknologji që mund të japë rezultate të mira është llogaritja e më shumë rrezeve se sa ka piksele, pra supersampling (renderimi me rezolucion më të lartë). Vështirë se ia vlen të përmendet edhe një herë se kjo teknologji është shumë më e shtrenjtë nga pikëpamja llogaritëse se sa kampionimi i shumëfishtë i përdorur në GPU-të moderne.

Motor rendering hibrid?

Nëse e keni lexuar të gjithë artikullin deri në këtë pikë, ndoshta tashmë po mendoni se gjurmimi i rrezeve nuk mund të zëvendësojë ende rasterizimin, por ndoshta ia vlen të përzieni të dy teknologjitë së bashku? Dhe në shikim të parë duket se dy teknologjitë plotësojnë njëra-tjetrën. Është e lehtë të imagjinohet rasterizimi i trekëndëshave për të përcaktuar atë që është e dukshme, duke përfituar nga performanca e shkëlqyer e teknologjisë dhe më pas duke aplikuar gjurmimin e rrezeve në vetëm disa sipërfaqe, duke shtuar realizmin aty ku nevojitet, si shtimi i hijeve ose marrja e reflektimeve dhe transparencës së mirë. Në fakt, Pixar e përdori këtë qasje për filmin vizatimor "Makina". Modelet gjeometrike krijohen duke përdorur REYES dhe gjurmimi i rrezeve përdoret "sipas kërkesës" ku duhet të simulohen disa efekte.


Për Makinat, Pixar përdori një motor renderues hibrid që kombinonte REYES për interpretimin dhe gjurmimin e rrezeve sipas kërkesës për reflektimet dhe mbylljen e ambientit. Klikoni mbi foto për ta zmadhuar.

Fatkeqësisht, megjithëse kjo metodë tingëllon premtuese, zgjidhjet hibride nuk janë aq të lehta për t'u zbatuar. Siç e kemi parë tashmë, një nga disavantazhet e rëndësishme të metodës së gjurmimit të rrezeve është nevoja për të organizuar strukturën e të dhënave në atë mënyrë që të kufizojë numrin e kontrolleve për kryqëzimin e rrezeve dhe objekteve. Dhe përdorimi i një modeli hibrid në vend të gjurmimit të pastër të rrezeve nuk e ndryshon këtë. Është e nevojshme të organizohet struktura e të dhënave së bashku me të gjitha disavantazhet që vijnë me të. Për shembull, supozoni se metoda e gjurmimit të rrezeve bazohet në të dhëna statike, por të dhënat dinamike jepen përmes rasterizimit. Por në këtë rast humbasim të gjitha përfitimet e gjurmimit të rrezeve. Meqenëse nuk ka të dhëna dinamike për gjurmimin e rrezeve, nuk do të jeni në gjendje t'i detyroni objektet të bëjnë hije ose të shihni reflektime.

Për më tepër, kur bëhet fjalë për performancën, problemi më i madh është qasja në kujtesë e lidhur me rrezet dytësore, dhe këto rreze janë pikërisht ato që na duhen në motorin tonë të riprodhimit hibrid. Pra, fitimi i performancës nuk do të jetë aq i madh sa mund të prisnit fillimisht. Meqenëse pjesa më e madhe e kohës së renderimit do të shpenzohet në rrezet dytësore, përfitimi nga mos renderimi i rrezeve kryesore do të jetë i papërfillshëm.

Me fjalë të tjera, duke u përpjekur të kombinojmë avantazhet e të dyja metodave, ne në mënyrë të pashmangshme kombinojmë disavantazhet e tyre, duke humbur elegancën e metodës së gjurmimit të rrezeve dhe performancën e lartë të rasterizimit.

Siç e kemi përmendur disa herë në artikullin tonë, ka shumë sfida për të kapërcyer përpara se gjurmimi i rrezeve të bëhet një alternativë e zbatueshme ndaj rasterizimit në interpretimin në kohë reale. Dhe nëse mendoni për këtë, a do të bëhet kjo metodë një ilaç për të gjitha sëmundjet? Përfitimet e gjurmimit të rrezeve nuk janë aq revolucionare sa të justifikojnë dënimin e rëndësishëm të performancës. Pikat e forta të algoritmit lidhen me reflektimet dhe transparencën, pasi këto dy efekte janë më të vështirat për t'u arritur me algoritmet ekzistuese të rasterizimit. Por, përsëri, a është kjo një pengesë kaq serioze? Bota rreth nesh nuk përbëhet tërësisht nga objekte shumë transparente ose të shndritshme, kështu që vizioni ynë mund të jetë i kënaqur me një përafrim të përafërt.

Nëse shikoni simulatorët më të fundit të makinave, për shembull, Gran Turismo dhe Forza, mund të shihni qartë cilësi mjaft të kënaqshme të paraqitjes, edhe nëse reflektimet në trup janë plotësisht të rreme. Dhe reflektimi i saktë i pasqyrës së pamjes së pasme në bojë vështirë se mund të konsiderohet i mjaftueshëm për të njohur një hap tjetër drejt fotorealizmit.


Në realitet nuk ka reflektime. Për shembull, pasqyra e pamjes anësore nuk reflektohet në trupin e makinës. Por a keni nevojë për një paraqitje "të drejtë" të Audi R8 duke përdorur gjurmimin e rrezeve? Klikoni mbi foto për ta zmadhuar.

Shumica e entuziastëve besojnë se gjurmimi i rrezeve në thelb prodhon një imazh më të mirë sesa rasterizimi - por ata shpesh e bazojnë mendimin e tyre në imazhin e prodhuar nga një motor offline, jo në kohë reale. Sidoqoftë, rezultatet e motorëve të tillë janë shumë më të mira se aftësitë e lojërave moderne. Për më tepër, ka një konfuzion rreth gjurmimit të rrezeve. Të pasionuarit shpesh krahasojnë imazhet fotorealiste, të cilat prodhohen nga një kombinim i disa teknikave, me rasterizimin, si gjurmimi i rrezeve për reflektime të drejtpërdrejta, radioziteti për reflektimin difuz, hartëzimi i fotoneve për kaustikën, etj. Të gjitha këto teknologji kombinohen për të ofruar cilësinë më fotorealiste të mundshme.


Për të arritur paraqitjen fotorealiste, duhet të kombinoni disa teknologji. Vetëm gjurmimi i rrezeve nuk është i mjaftueshëm për të simuluar ndërveprime komplekse midis llojeve të ndryshme të materialeve dhe dritës. Klikoni mbi foto për ta zmadhuar.

Në versionin e tij bazë, gjurmimi i rrezeve, kur merren parasysh zbatimet ekzistuese në kohë reale, është i përshtatshëm vetëm për reflektime ideale dhe hije të forta (të mprehta). Doom 3 provoi disa vite më parë se ishte e mundur të krijohej një motor i besueshëm 3D që mund të trajtonte në mënyrë të përsosur hijet dinamike dhe rasterizimin, por në retrospektivë, loja tregoi gjithashtu se hijet e forta nuk ishin realiste.


Klikoni mbi foto për ta zmadhuar.

Për të krijuar hije të buta ose reflektime të përhapura (lloji që shihni në metalin me teksturë, për shembull), kërkohen teknika më të avancuara të gjurmimit të rrezeve, si gjurmimi i rrugës dhe ose gjurmimi i rrezeve të shpërndara. Por teknika të tilla kërkojnë një numër dukshëm më të madh rrezesh, kështu që ato janë ende të papërshtatshme për kohë reale.

Disa përdorues besojnë se herët a vonë aq shumë fuqi përpunuese do të jetë e disponueshme sa avantazhi i performancës së rasterizimit nuk do të jetë më një faktor vendimtar. Për shkak të ligjit të zvogëlimit të fitimeve, përfitimet e performancës nga rasterizimi do të harrohen shpejt në favor të elegancës së gjurmimit të rrezeve. Në të njëjtën mënyrë si më parë, u harruan përfitimet e produktivitetit të kodimit të gjuhës së asamblesë, gjë që doli të ishte e pamjaftueshme për të tejkaluar përfitimet e gjuhëve të nivelit të lartë.

Megjithatë, kjo nuk ka gjasa të na bindë. Në çdo rast, ne jemi ende larg kohës kur mund të sakrifikojmë performancën për elegancën dhe thjeshtësinë. Vetëm shikoni se çfarë ka ndodhur në 10 vitet e fundit në botën e paraqitjes jashtë linje. Ndërsa një kuadro të Toy Story iu deshën mesatarisht dy orë për t'u realizuar, një kuadri i Ratatouille-së iu deshën gjashtë orë e gjysmë, pavarësisht nga fuqia e rritur e përpunimit midis dy filmave. Me fjalë të tjera, sa më shumë fuqi dhe burime kompjuterike t'u jepni artistëve kompjuterikë, aq më shpejt ata i konsumojnë ato.

Nëse edhe një kompani si Pixar, e cila mund të përballojë t'i kushtojë disa orë llogaritje krijimit të një kornize të vetme, vendos të përdorë gjurmimin e rrezeve vetëm herë pas here për shkak të ndikimit negativ në performancë, kjo do të thotë se koha përpara do të kemi fuqi të mjaftueshme përpunimi në Lojërat 3D - në kohë reale për të kryer të gjitha paraqitjet duke përdorur gjurmimin e rrezeve janë shumë, shumë larg. Dhe në të ardhmen, entuziastët me siguri do të kenë ku të shpenzojnë një fuqi të tillë llogaritëse.



Ju pëlqeu artikulli? Ndani me miqtë tuaj!