Metoda sledenja žarkom v računalniških igrah. Boj metod vizualizacije

Pred kratkim sem na internetu naletel na sledilnik žarkov na vizitki Paula Huckberta. Za tiste, ki ne vedo, je to zelo znan problem, ki ga je prvotno predlagal Paul Huckbert 4. maja 1984 na comp.graphics. Bistvo je napisati predstavitev metanja žarkov, ki ... se prilega vizitki (preberite več o tem v razdelku Sledenje žarkom Graphic Gems IV)!

Različica Andrewa Kenslerja je ena najbolj osupljivih in najlepših izvedb tega problema, kar sem jih videl. Iz radovednosti sem se odločil, da ga pogledam. V tem članku bom napisal vse, kar sem razumel sam.

Hrbtna stran vizitke

Tako izgleda sama koda:

#vključi // kartica > aek.ppm #include #vključi 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)(vrni x*r.x+y*r.y+z*r.z;)v()()v operator^(v r) (vrni 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));));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);if(s .01)t=s,n=!(p+d*t),m=2;))return m;)v S(v o,v d)(f t ;v n;i m=T(o,d,t, n);if(!m)return 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;return((i)(ceil(h.x)+ceil(h.y))&1?v(3,1,1):v(3,3 ,3))*(b *.2+.1);)return 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);))

Zgornja koda izgleda ... strašljivo, vendar se prevede in deluje brez težav! Lahko ga shranite na namizje kot card.cpp, odprete konzolo in vnesete:

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

Po 27 sekundah se na zaslonu prikaže naslednja slika:

Funkcije vizitke Ray Tracer

Možnosti so preprosto neverjetne!

  • svet, sestavljen iz strogo organiziranih sfer;
  • teksturirana tla;
  • nebo z gradientom;
  • mehke sence;
  • OMG, globinska ostrina! Se hecaš?!

In vse to na eni strani vizitke! Poglejmo, kako deluje.

Vektorski razred

Poglejmo prvi del kode:

#vključi // kartica > aek.ppm #include #vključi 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)(vrni x*r.x+y*r.y+z*r.z;)v()()v operator^(v r) (vrni 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!())(vrni*to*(1/sqrt(*to%* to));));

Glavni trik tukaj je zmanjšanje ključnih besed int in float na i in f z uporabo typedef. Še en trik, s katerim lahko zmanjšamo količino kode, je razred v, ki se uporablja ne le kot vektor, ampak tudi za obdelavo slikovnih pik.

#vključi // kartica > aek.ppm #include #vključi typedef int i; // Prihranite prostor z zmanjšanjem int na i typedef float f; // Prihranite še več prostora s f namesto float // Vektorski razred s konstruktorjem in operatorji struct v( f x,y,z; // Tri vektorske koordinate v operator+(v r)(return v(x+r.x,y+r.y, z +r.z);) // Vsota vektorjev v operator*(f r)(return v(x*r,y*r,z*r);) // Skaliranje vektorjev f operator%(v r)(return x* r.x +y*r.y+z*r.z;) // Točkovni produkt vektorjev v()() // Prazen konstruktor v operator^(v r)(vrni v(y*r.z-z*r.y,z*r.x- x* r.z,x*r.y-y*r.x);) // Navzkrižni produkt vektorjev v(f a,f b,f c)(x=a;y=b;z=c;) // Konstruktor v operator!() )(return * this*(1 /sqrt(*this%*this));) // Normalizacija vektorja );

Rand() in podatki o generaciji sveta

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

Naslednja koda prav tako prihrani veliko prostora z deklaracijo funkcije R, ki vrne naključno plavajočo vrednost med 0 in 1. To je uporabno za stohastično vzorčenje, ki se uporablja za učinke zameglitve in mehke sence.

Niz G vsebuje položaj krogel v svetu, kodiran v celih številih. Množica vseh števil je bitni vektor 9 vrstic in 19 stolpcev.

Tukaj je zgornja koda, vendar oblikovana in s komentarji:

// Nabor položajev krogle, ki opisuje svet // Vsa ta števila so v bistvu bitni vektor i G=(247570,280596,280600,249748,18578,18577,231184,16,16); // Generator naključnih števil vrne število s plavajočo vejico v območju 0-1 f R())(return(f)rand()/RAND_MAX;)

Glavna metoda

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);))

Glavna metoda uporablja preprost, dobro znan slikovni format PPM, ki temelji na besedilu. Slika je sestavljena iz glave v obliki P6 [Širina] [Višina] [Največja vrednost], ki ji sledi vrednost RGB vsake slikovne pike.

Za vsako slikovno piko na sliki program vzorči (S) barvo 64 žarkov, zbere rezultat in ga izpiše v stdout.

Ta koda prav tako nekoliko spremeni izvorno koordinato žarka in njegovo smer. To se naredi za ustvarjanje učinka globinske ostrine.

Tukaj je zgornja koda, vendar oblikovana in s komentarji:

// Glavna funkcija. Prikaže sliko. // Uporaba programa je preprosta: ./card > erk.ppm i main())( printf("P6 512 512 255 "); // Glava PPM // Operator "!" normalizira vektor v g=!v( -6,- 16,0), // Smer kamere a=!(v(0,0,1)^g)*.002, // Vektor, odgovoren za višino kamere... b=!(g^a )*.002 , // Desni vektor, dobljen z uporabo vektorskega produkta c=(a+b)*-256+g; // WTF? o tem podrobneje for(i y=512;y--;) // Za vsak stolpec for(i x=512;x--;)( // Za vsako slikovno piko v vrstici // Uporabi vektorski razred za shranjevanje. barva v RGB v p(13, 13,13); // Standardna barva slikovnih pik je skoraj črna // Vrzi 64 žarkov iz vsake piksle za (i r=64;r--;)( // Rahlo spremeni levo/desno in navzgor /navzdol koordinate začetka žarka (za učinek globinske ostrine) v t=a*(R()-.5)*99+b*(R()-.5)*99; // Dodeli žarišče usmerite kamero na v(17,16,8) in vrzite žarek / / Akumulirajte barvo, vrnjeno v spremenljivki t p=S(v(17,16,8)+t, // Začetek žarka!(t *-1+(a*(R()+x)+b*(y+R ())+c)*16) // Smer žarka z rahlim popačenjem // za učinek stohastičnega vzorčenja)*3,5+p ; // +p za kopičenje barv ) printf("%c%c%c",(i)p.x,(i)p.y,(i)p.z); ) )

Vzorčevalnik

v S(v o,v d)(f t ;v n;i m=T(o,d,t,n);if(!m)vrni 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;return((i)(ceil(h.x)+ceil(h.y))&1?v(3,1,1):v(3,3 ,3))*(b *.2+.1);)vrni v(p,p,p)+S(h,r)*.5;)

Sampler S je funkcija, ki vrne barvo slikovne pike na podlagi podanih koordinat izhodiščne točke žarka o in njegove smeri d. Če zadene kroglo, se rekurzivno pokliče, sicer pa (če žarek nima ovir na poti) glede na smer vrne bodisi barvo neba bodisi barvo tal (glede na karirasto teksturo). ).

Upoštevajte klic funkcije R pri izračunu smeri svetlobe. To ustvarja učinek "mehkih senc".

Tukaj je zgornja koda, vendar oblikovana in s komentarji:

// (S)vzorči svet in vrni barvo slikovnih pik z // žarkom, ki se začne v točki o (Izhodišče) in ima smer d (Smer) v S(v o,v d)( f t; v n; // Preverite, ali žarek trči v nekaj i m=T(o,d,t,n); if(!m) // m==0 // Krogla ni bila najdena in žarek gre navzgor: generiraj barvo neba return v(.7) ,. 6,1)*pow(1-d.z,4); // Morda se žarek dotakne krogle v h=o+d*t, // h - koordinata presečišča l=!(v(9+R(), 9+R) (),16)+h*-1), // "l" = smer svetlobe (z rahlim popačenjem za učinek mehke sence) r=d+n*(n%d*-2); r = polovični vektor / / Izračunaj Lambertov koeficient f b=l%n; // Izračunaj svetlobni faktor (Lambertov koeficient > 0 ali smo v senci), če (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; // Krogle se nismo dotaknili in žarek se spusti do tal: ustvari barvo tal return((i)(ceil(h.x)+ ceil(h.y ))&1?v(3,1,1):v(3,3,3))*(b*.2+.1); // m == 2 Sfera je bila zadeta: ustvari žarek odboj od površinske krogle vrnitev v(p,p,p)+S(h,r)*.5; // Oslabi barvo za 50 %, ko se odbija od površine (* .5) )

Tracer

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);if(s .01)t=s,n=!(p+d*t),m=2;))vrni m;)

Funkcija T (Tracer) je odgovorna za metanje žarka iz dane točke (o) v dano smer (d). Vrne celo število, ki je koda za rezultat metanja žarka. 0 - žarek je šel v nebo, 1 - žarek je šel v tla, 2 - žarek je zadel kroglo. Če je bila krogla zadeta, funkcija posodobi spremenljivki t (parameter, ki se uporablja za izračun razdalje prečkanja) in n (polovični vektor pri odbijanju od krogle).

Tukaj je zgornja koda, vendar oblikovana in s komentarji:

// Preizkus presečišča črt // Vrne 2, če je bila krogla zadeta (kot tudi razdaljo presečišča t in polvektorja n). // Vrni 0, če žarek ne zadene ničesar in gre gor v nebo // Vrni 1, če žarek ne zadene ničesar in gre navzdol v tla i T(v o,v d,f& t,v& n)( t=1e9; f p=-o.z/d.z; 0)( // Da. Izračunajte razdaljo od kamere do krogle f s=-b-sqrt(q); if(s .01) // To je najmanjša razdalja, shranite jo. In tudi // izračunaj vektor odbijajočega se žarka in ga zapiši v "n" t=s, n=!(p+d*t), m=2; ) ) vrni m; )

Leet številka

Številni programerji so poskušali kodo še bolj zmanjšati. Avtor se je sam odločil za različico, ki je navedena v tem članku. Ali veš zakaj?

Fabien$ wc card.cpp 35 95 1337 card.cpp - veliko matematike, vendar je vse razloženo zelo podrobno in jasno.

Sledenje žarkom in rastrizacija – kakšna je razlika?

Nismo prepričani, da vsi naši bralci vedo ali se spomnijo, kaj je to sledenje žarkom, kako se različni načini upodabljanja načeloma razlikujejo in kakšne so njihove prednosti in slabosti. Zato najprej poskusimo o tem govoriti zelo na kratko, brez zapletene matematike in bolj ali manj jasno. Preden preidemo na sledenje žarkom, se moramo spomniti osnov klasičnega algoritma rastriranje z Z-bufferjem.

Pri metodi rastriranja, ki je zdaj splošno sprejeta v sodobni grafiki v realnem času, za risanje vsakega predmeta obstaja projekcija na ravnino zaslona iz geometrijskih primitivov (poligonov, najpogosteje trikotnikov), ki sestavljajo predmet. Trikotniki so narisani slikovno piko za slikovno piko z uporabo globinskega medpomnilnika, ki vsebuje razdaljo do ravnine zaslona in je potreben za zagotovitev, da se trikotniki, ki so najbližje kameri, med upodabljanjem prekrivajo s tistimi, ki so dlje.

Poleg vozlišč in poligonov, ki jih povezujejo, shranjuje tudi informacije o barvi, koordinatah teksture in normalah, potrebnih za definiranje sprednjih in zadnjih delov vsake površine. Barva slikovnih pik je določena s kompleksnimi izračuni v senčilih točk in pikslov, učinki, kot so sence, pa so upodobljeni z dodatnimi prehodi, pa tudi z rastrizacijo.

Postopek senčenja ( senčenje) je sestavljen iz izračuna količine osvetlitve piksla ob upoštevanju prekrivanja ene ali več tekstur na pikslu, ki določa njegovo končno barvo. Vse to zahteva veliko izračunov, saj prizori sodobnih iger vsebujejo več milijonov poligonov in več milijonov slikovnih pik na zaslonih visoke ločljivosti, informacije na zaslonu pa se morajo posodabljati s hitrostjo vsaj 30 sličic na sekundo, še bolje , 60 FPS. Da ne omenjam čelad za navidezno resničnost, kjer morate hkrati risati slike za obe očesi s frekvenco 90 FPS.

A ker grafični procesorji delujejo pri zelo visokih taktih in imajo veliko število strojnih enot, specializiranih za določene izračune, rasterizacija pa je zelo primerna za paralelizacijo, ni posebnih težav z zmogljivostjo upodabljanja in velika večina 3D računalniških iger uporablja rasterizacijo. . V resnici so stvari nekoliko bolj zapletene, saj se uporablja veliko dodatnih optimizacij, da se izognemo risanju velikega števila nevidnih trikotnikov, a to je na splošno bistvo rastrizacije.

Med razvojem grafičnih procesorjev skozi njihov razvoj je bilo ogromno časa porabljenega za optimizacijo dela z zavračanjem nevidne geometrije in zmanjšanjem računalniške obremenitve. Najprej so zavrgli upodabljanje predmetov izven vidnega polja, nato objektov, ki so jih zakrili drugi, bližje kameri itd. Razvite optimizacije za rastriranje so precej učinkovite; v sodobnih igrah nevidni predmeti skoraj ne porabijo računalniških virov, kar znatno zmanjša količino dela, potrebnega za rastrizacijo scene. Nadalje boste razumeli, zakaj se dotikamo teme nevidnih predmetov.

Če želite izračunati globalno osvetlitev, risati sence in druge učinke, morate uporabiti zvite trike, ki temeljijo na isti rastrizaciji. Posledično so z leti postali grafični procesorji zelo izpopolnjeni, saj so se naučili pospeševati obdelavo geometrije v senčilih oglišč, učinkovito upodabljati slikovne pike z uporabo senčil pikslov in celo uporabljati univerzalne računalniške senčnike za izračun fizike, naknadnih učinkov in številne druge izračune. Toda osnova delovanja GPU je ostala ves čas enaka.

Sledenje žarkom ima popolnoma drugačno osnovno idejo, vendar je v teoriji skoraj preprostejše. Sledenje simulira širjenje svetlobnih žarkov po 3D sceni. Sledenje žarkom se lahko izvede v dveh smereh: od svetlobnih virov ali od vsakega piksla v nasprotni smeri, potem se običajno določi več odbojev od predmetov scene v smeri kamere oziroma svetlobnega vira. Izračunavanje žarkov za vsako slikovno piko v sceni je računsko manj zahtevno, projiciranje žarkov iz svetlobnih virov pa zagotavlja višjo kakovost upodabljanja.

Povratna sled je leta 1969 prvič opisal IBM-ov zaposleni v delu "Nekatere tehnike za senčenje strojnih upodobitev trdnih snovi" in ta tehnika izračuna pot svetlobnega žarka za vsako slikovno piko na zaslonu, odvisno od 3D modelov v sceni. 10 let pozneje je prišlo do novega preboja v tehnologiji, ko je raziskovalec Turner Whitted (mimogrede, zdaj dela pri Nvidia Research) objavil članek "Izboljšan model osvetlitve za zasenčen zaslon", ki je pokazal, kako izračunati sence, odboj in lom svetlobe pri trasiranju.

Nekaj ​​drugih dokumentov v osemdesetih letih prejšnjega stoletja je nadalje opisalo osnove sledenja žarkom za računalniško grafiko, kar je vodilo do revolucije v sintetičnem slikanju v filmski industriji. Torej, leta 1984 več zaposlenih Lucasfilm opisal, kako uporabiti sledenje žarkom za ustvarjanje učinkov, kot so zamegljenost gibanja, globinska ostrina, mehke sence, zamegljeni odsevi in ​​lomi. Nekaj ​​let kasneje je profesor Caltecha Jim Kajiya v svojem delu "Enačba upodabljanja" opisal natančnejši način sipanja svetlobe v prizoru. In od takrat se sledenje žarkom uporablja dobesedno povsod v filmski industriji.

Torej, pri običajni metodi inverznega sledenja žarkom se za vsako slikovno piko na zaslonu nariše namišljeni žarek iz kamere do predmeta v prizoru. Na ta način se simulira svetlobni žarek, ki vstopa v kamero iz svetlobnega vira v tej smeri, prvo presečišče z objektom pa se uporabi za določitev barve piksla. Primarni žarki določajo vidnost predmetov (kot medpomnilnik Z pri rastriranju), za določitev barve pa morate potegniti nadaljnje sekundarne žarke od presečišč do različnih svetlobnih virov (če žarke blokira predmet, potem svetloba vir ne bo vplival na osvetlitev slikovne pike), nabor sekundarnih žarkov pa je določen z osvetlitvijo, ki pade na slikovno piko.


Toda vse najbolj zanimive stvari se zgodijo še dlje - da bi dosegli fotorealizem, morate upoštevati značilnosti materialov v obliki količine svetlobe, ki jo odbijajo in lomijo, in za izračun barve piksla morate narišite več odbojnih in lomnih žarkov. Na zgornji sliki niso označeni, lahko pa si jih mentalno predstavljamo kot žarke, ki se odbijejo od površine krogle in jih ta lomi. Ta izboljšani algoritem za sledenje žarkom je bil izumljen pred nekaj desetletji in ti dodatki so bili velik korak k povečanju realizma sintetične slike. Do danes je metoda pridobila številne modifikacije, ki pa vedno temeljijo na iskanju presečišča svetlobnih žarkov z objekti scene.

Prvi praktični poskusi izvajanja sledenja žarkom v realnem času so se začeli že dolgo nazaj, na znani konferenci SIGGraph Podobni dogodki so se pojavljali pogosto. Predstavitve sledenja v realnem času segajo v pozna osemdeseta leta prejšnjega stoletja in so dosegle hitrosti več sličic na sekundo z uporabo visoko optimiziranih tehnik in več računalniških sistemov s skupnim pomnilnikom. Od takrat se je pojavilo veliko dogodkov za pospešitev sledenja za delo, tudi na enem računalniku.

Da ne omenjam številnih navdušencev nad 3D motorji v demo sceni v poznih 90-ih in kasneje, ki so bili navdihnjeni z zmožnostmi in temeljno preprostostjo metode, ki je prinesla številne uporabne optimizacije za sledenje žarkom. Nekoč smo na naši spletni strani objavili celo vrsto gradiv, posvečenih enemu od programskih mehanizmov za sledenje žarkom, zelo specifičnemu in z veliko resnimi omejitvami, ki nam niso omogočile ustvarjanja resnih projektov iger na njegovi podlagi:

Proizvajalci strojne opreme niso zaostajali in so že dolgo na razstavah prikazovali eksperimentalne prototipe pospeševalnikov sledenja in zanje optimizirane demo programe. Tako je junija 2008 podjetje Intel pokazal posebno različico igre Enemy Territory: Quake Wars (Potresne vojne: Ray Traced), ki uporablja ray tracing pri upodabljanju v ločljivosti 1280x720 s hitrostjo 15-30 sličic na sekundo, kar že velja za realni čas. Ta predstavitev ni uporabljala strojnih pospeševalnikov, temveč je delovala na 16 jedrih Xeon pri frekvenci 3 GHz.

Intelov projekt je pokazal prednosti upodabljanja s sledenjem žarkom, ki prikazuje realistično vodo, sence predmetov skozi prozorne površine in odseve. Razvoj demonstracije je postal projekt Wolfenstein: Ray Traced, in razni navdušenci pogosto vzamejo motor serije Potres za dodajanje sledenja - torej na predlog modderjev v Potres 2 pojavili so se realistični odsevi, ki so jih pokvarili zelo močan šum in najvišje sistemske zahteve.

In podjetje je nekaj let (od 2012 do 2016) pokazalo prototipe pospeševalnikov sledenja strojni opremi. Imagination Technologies, ki ponuja celo odprt API za sledenje žarkom - OpenRL. Navedeno je bilo, da je pospeševalnik razvoja strojne opreme podjetja sposoben poganjati Autodesk Maya in zagotavljati sledenje žarkom v realnem času. Vendar pa podjetje ni imelo dovolj sredstev za spodbujanje strojnega pospeševanja sledenja žarkom za uspeh, pa tudi »teža« tega podjetja na grafičnem trgu, da bi bila njegova lokomotiva. In demo programi niso bili najbolj impresivni, če sem iskren, čeprav so pokazali nekaj prednosti sledenja:

Podjetje je poslovalo veliko bolje Nvidia, ki je tehnologijo napovedal že na SIGGraph 2009 OptiX, zasnovan za sledenje žarkom v realnem času na njihovih grafičnih procesorjih. Novi API je odprl dostop do sledenja žarkom v profesionalnih aplikacijah s potrebno prilagodljivostjo, zlasti - dvosmerno sledenje poti in drugi algoritmi.

Rendererji, ki temeljijo na tehnologiji OptiX, že obstajajo za številne profesionalne programe, kot so Adobe AfterEffects, Bunkspeed Shot, Autodesk Maya, 3ds max in druge aplikacije, uporabljajo pa jih profesionalci pri svojem delu. To lahko pripišemo upodabljanju v realnem času le ob določenih predpostavkah, saj je bila pri visoki hitrosti sličic rezultat zelo hrupna slika. Le nekaj let kasneje se je industrija približala uporabi strojnega pospeševanja sledenja žarkom v igrah.

Prednosti in slabosti sledenja žarkom

Tehnika upodabljanja s sledenjem žarkom je v primerjavi z rastrizacijo zelo realistična, saj simulira širjenje svetlobnih žarkov, ki je zelo podobno, kot se pojavljajo v resnici (seveda še vedno ni 100-odstotno natančno). Sledenje lahko ustvari zelo realistične sence, odboje in lome svetlobe in je kot tako že dolgo cenjeno v arhitekturnih aplikacijah in industrijskem oblikovanju. Tehnologija pomaga strokovnjakom na tem področju veliko pred fizično implementacijo razumeti, kako bodo materiali videti pod različnimi svetlobnimi pogoji v resničnem svetu.

Očitne prednosti sledenja lahko vključujejo tudi dejstvo, da je računalniška kompleksnost metode malo odvisna od geometrijske kompleksnosti prizora, izračuni pa so popolnoma vzporedni - lahko preprosto in neodvisno sledite več žarkom hkrati in tako razdelite zaslon površine v cone za sledenje na različnih računalniških jedrih. Zelo uporabno je tudi, da je rezanje nevidnih površin logična posledica algoritma.

Bolj pomembno pa je, da metoda simulira dejansko širjenje svetlobnih žarkov, s čimer dobimo končno sliko višje kakovosti v primerjavi z rastrizacijo. Rasterizacija ima očitne slabosti - na primer, predmet, ki ni vključen v sceno, ne bo upodobljen na GPE, vendar lahko meče vidno senco ali bi moral biti viden na odsevni površini (ogledalo), optimizacija rastriranja pa ga je zavrgla in ne upoštevajte. Da ne omenjam, ta nevidni predmet lahko močno vpliva na globalno osvetlitev prizora z odbijanjem svetlobe na vidne površine. Te težave so delno rešene, zlasti uporaba senčnih zemljevidov vam omogoča, da narišete sence iz predmetov, ki so nevidni na sceni, vendar je končna slika še daleč od idealne. In bistvo je načeloma, ker rastrizacija deluje popolnoma drugače kot človeški vid.

Učinki, kot so odsevi, lomi in sence, ki jih je precej težko dobro implementirati pri rastriranju, so naravni rezultat algoritma za sledenje žarkom. Posnemite odseve - to je samo eno od področij, kjer je sledenje žarkom opazno boljše od rastriranja. V sodobnih igrah so odsevi običajno simulirani z uporabo zemljevidov okolja (statičnih ali dinamičnih) ali odsevov v prostoru zaslona ( Zaslon-prostor), ki v večini primerov dajejo dobro simulacijo odbojev, vendar imajo še vedno zelo velike omejitve, predvsem niso primerni za bližnje objekte.

Izračun odbojev v prostoru zaslona omogoča pridobitev odbojev, ki so bolj ali manj podobni resnici, ob upoštevanju nekaterih omejitev, vendar s strojnim pospeševanjem na GPU z rastrizacijo. In s sledenjem žarkom so odsevi vedno popolno upodobljeni brez potrebe po dodatnih zapletenih algoritmih. Druga pomembna prednost sledenja je prikazovanje odsevov delov istega predmeta drug na drugem (na primer tako, da se ročaj čajnika ali njegov dulec odseva sam na sebi), kar je veliko težje narediti z rastrizacijo.

Drug primer očitne prednosti sledenja žarkom je upodabljanje prozornih predmetov. Z uporabo rastriranja je zelo težko simulirati učinke prosojnosti, saj je njegov izračun odvisen od vrstnega reda upodabljanja in za to morate vnaprej razvrstiti prosojne poligone, in tudi takrat se lahko pojavijo vizualni artefakti. Za izogibanje poligonskemu razvrščanju je bilo izumljenih več vdorov, vendar vse to povzroča zaplete metode in dodatne težave. Toda sam algoritem sledenja žarkom omogoča risanje kakršnih koli učinkov prosojnosti z idealno kakovostjo.

No, zadnji (za začetek) primer je risanje senc. Pri rastriranju se v večini primerov uporabljajo senčne karte ( kartiranje senc), ki prav tako temeljijo na rastriranju, preprosto upodabljanje poteka z druge točke scene in z različnimi parametri. Siluete predmeta se narišejo v ločen medpomnilnik od vira svetlobe, vsebina medpomnilnika se filtrira in nanese na površino, kjer naj bi bila senca. Te metode imajo več težav, vključno z nazobčanimi robovi, ki ste jih vsi videli v igrah, pa tudi povečano porabo video pomnilnika. Sledenje žarkom vam omogoča, da samodejno rešite problem senc, ne da bi potrebovali dodatne algoritme in pomnilnik. Še več, v primeru rasterizacije bo rezultat v vsakem primeru fizično nepravilna senca, vendar bo mehka senca, narisana s sledenjem žarkom, realistična.

Toda sledenje žarkom ima tudi pomanjkljivost. Eno, a zelo pomembno, je, da je risanje vsega zgoraj opisanega z računalniškega vidika nekajkrat težje. Nizka zmogljivost na obstoječi strojni opremi je glavna pomanjkljivost metode sledenja, ki je dolgo časa izničila vse njene prednosti. Iskanje presečišča žarkov z objekti scene ni pospešeno tako enostavno kot razmeroma enostavne operacije pri rastriranju trikotnikov, za kar se že vrsto let uporabljajo posebni 3D pospeševalniki, zato se v grafiki v realnem času še vedno uporablja metoda rastriranja, ki omogoča lahko narišete sliko precej hitro, čeprav je po kakovosti nekoliko slabša od polnega sledenja, je še vedno precej realistična.

Pri sledenju morate izračunati na tisoče žarkov za vsak vir svetlobe, od katerih bo večina imela majhen učinek na končno sliko, zato potrebujete dodatne optimizacije za algoritem za sledenje žarkom in novo strojno opremo, ki lahko pospeši ustrezne operacije. Poleg tega uporaba samo sledenja ne zagotavlja fotorealizma. Če uporabljate preproste algoritme, bo rezultat dober, vendar še vedno premalo realen, za popolno simulacijo realnosti pa morate uporabiti dodatne tehnike, kot je npr. fotonsko preslikavo in sledenje poti, ki natančneje simulirajo širjenje svetlobe v svetu.

Ker pa je algoritem sledenja žarkom dobro vzporeden, ga je po drugi strani mogoče rešiti z najenostavnejšo tehnično metodo - povečanjem števila računalniških jeder (grafičnega) procesorja, katerih število se vsako leto povečuje. Hkrati je zagotovljeno linearno povečanje zmogljivosti med sledenjem. In glede na trenutno očitno pomanjkanje optimizacije v strojni in programski opremi za sledenje žarkom na grafičnih procesorjih, se lahko zmogljivosti strojnega sledenja žarkom potencialno hitro povečajo.

Tu pa se pojavijo manjše težave. Upodabljanje le primarnih žarkov samo po sebi ni preveč zapleteno, vendar ne bo zagotovilo opaznega izboljšanja kakovosti upodabljanja v primerjavi s klasično rastrizacijo in celo z zapletenimi vdori. Sekundarne žarke pa je veliko težje izračunati, ker nimajo koherence – enosmernosti. Za vsako slikovno piko je treba izračunati popolnoma nove podatke, kar ni ravno dobro za predpomnjenje, ki je pomembno za doseganje visoke hitrosti. Zato je izračun sekundarnih žarkov močno odvisen od pomnilniških zakasnitev, ki se skoraj ne zmanjšujejo, v nasprotju s pomnilniško pasovno širino (MBB), ki hitro narašča.

Čeprav se zdi sledenje žarkom dokaj preprosta in elegantna metoda, ki jo je mogoče implementirati v le nekaj vrsticah kode, je popolnoma neoptimiziran algoritem, visoko zmogljivo kodo za sledenje žarkom pa je izjemno težko narediti. Če pri rastriranju algoritem deluje hitro, vendar se morate domisliti pametnih metod za zapletene vizualne učinke, potem lahko sledenje žarkom na začetku nariše vse, vendar vas prisili, da zelo natančno optimizirate kodo, tako da deluje dovolj hitro v realnem času.

Obstaja veliko metod za pospešitev sledenja; najproduktivnejši algoritmi za sledenje žarkom ne obdelujejo enega po enega, ampak uporabljajo nize žarkov, kar pospeši proces obdelave žarkov iste smeri. Te optimizacije so odlične za delovanje na sodobnih CPE in GPE SIMD, učinkovite so za glavne sožarke in senčne žarke, vendar še vedno niso primerne za lomne in odbojne žarke. Zato je treba resno omejiti število žarkov, izračunanih za vsako slikovno piko scene, in odstraniti povečan "šum" slike s posebnim filtriranjem.

Poleg tega sledenje žarkom zahteva ustrezno podatkovno strukturo za shranjevanje elementov scene, kar lahko vpliva na zmogljivost. Nekatere strukture so bolj primerne za statične podatke, druge za dinamično spreminjajoče se. Tako se samo na površen pogled zdi sledenje žarkom preprosta in izjemno elegantna metoda, a če želite doseči želeno zmogljivost, boste morali opraviti veliko optimizacijskega dela - nič manj kot simulacijo zapletenih učinkov med rastrizacijo. In to delo se je pravzaprav šele začelo.

Obstaja več težav, ki jih je treba obravnavati, preden sledenje žarkom postane izvedljiva alternativa rastrizaciji za igre. Trenutno se zdi, da prednosti sledenja niso tako velike kot znatno zmanjšanje zmogljivosti, povezano z njegovo uporabo. Da, sledenje ima zelo pomembne prednosti v obliki realističnih odsevov, senc in obdelave prosojnih objektov, kar je težko narediti z rastrizacijo, ampak ... ali je v igrah dovolj takšnih predmetov, da nerealistične postanejo resne. ? Po eni strani večina predmetov na svetu odbija svetlobo, po drugi strani pa so igre dokazale, da so naše oči in možgani zadovoljni le s približnim realizmom. V večini sodobnih iger so odsevi na predmetih, čeprav niso popolnoma fotorealistični, pogosto dovolj, da pretentajo naše možgane.

Da, sledenje žarkom lahko zagotovi boljšo kakovost kot rastriranje, toda na kakšen način? Če stremite k popolnemu realizmu, potem popolno sledenje z izračunom številnih žarkov za osvetlitev in odseve, pa tudi kombinacijo tehnik, kot so radiosity in fotonsko preslikavo, bo izjemno zahtevna glede računalniške moči. Pogosto celo upodobitve brez povezave, ki ne delujejo v realnem času, uporabljajo poenostavitve. Seveda bo čez nekaj časa na voljo dovolj velika računalniška moč, da bomo pridobili prednost pred rastrizacijo, tudi v zmogljivosti, vendar smo zaenkrat še zelo daleč od te točke.

Tudi pri upodabljanju brez povezave za filmsko industrijo se z večanjem računalniške moči časi upodabljanja sčasoma ne zmanjšujejo, saj apetiti umetnikov rastejo še hitreje! In celo vodilna podjetja v produkciji animiranih filmov, npr Pixar, poskusite optimizirati postopek upodabljanja z uporabo sledenja žarkom le za nekatere učinke – prav zaradi pomembnega vpliva na zmogljivost. Zato morate razumeti, da so dnevi popolnega sledenja celotne scene v igrah v realnem času še zelo daleč. In za popolno upodabljanje v realnem času z uporabo sledenja žarkom v igrah računalniška moč zagotovo še ni dovolj. To je dolga pot, tudi z razvojem grafičnih procesorjev, ki še poteka.

Toda v vsakem primeru je sledenje žarkom fizično pravilen način, ki lahko reši številne velike in majhne težave obstoječega pristopa. Z različnimi heki in triki, ki se trenutno uporabljajo pri rastrizaciji, lahko dosežete dobre rezultate, vendar tega zagotovo ne moremo imenovati univerzalna in idealna metoda za upodabljanje 3D grafike. Kmalu bodo razvijalci 3D aplikacij v realnem času v iskanju realizma dosegli mejo obstoječe metode rastriranja in bodo morali preiti na metodo z naprednim modelom osvetlitve, ki je podoben temu, kar se dogaja v realnosti. Najverjetneje bo šlo za sledenje žarkom. Ker pa je sledenje žarkom zelo draga metoda in je malo verjetno, da bi jo podpirali tudi najzmogljivejši sistemi, se morate najprej zanesti na metode hibridnega upodabljanja, ki združujejo rasterizacijo in kakovost sledenja žarkom.

Hibridno upodabljanje za prehod

Zaradi zahtevne narave sledenja žarkom, tudi z majhnim številom žarkov, ki jih je treba izračunati za vsako slikovno piko, ta metoda verjetno ne bo izključno uporabljena in še ne bo nadomestila rastrizacije. Obstaja pa možnost mešanja obeh metod. Na primer, osnovno geometrijo je mogoče rastrizirati z visoko zmogljivostjo, nato pa je mogoče s sledenjem žarkom upodobiti samo mehke sence in odseve. Čeprav bo rasterizacija še naprej igrala ključno vlogo v prihodnjih letih s prihodom hibridnega upodabljanja, se bo delež algoritmov za sledenje žarkom v takšnih motorjih postopoma povečeval na podlagi vse večjih računalniških zmogljivosti prihodnjih grafičnih procesorjev.

Ta pristop se že dolgo uporablja v istih risankah podjetja Pixar, kljub dejstvu, da se zdi, da njihove zahteve nimajo strogih omejitev glede časa upodabljanja. Vendar pa je lažje in hitreje upodabljati geometrijo z uporabo istih mikropoligonov sistema upodabljanja Reyes in uporabite sledenje samo tam, kjer so potrebni posebni učinki. Skoraj vsi Pixarjevi animirani filmi so prej uporabljali mikropoligone in rastriranje ter sledenje žarkom za mehanizem upodabljanja RenderMan dodan kasneje za risanko "Avtomobili", kjer je bil uporabljen selektivno - za izračun globalne okluzije (okluzije okolice) in upodabljanje odbojev.

Toda v resnici hibridne rešitve niso tako preproste, saj morate za učinkovito sledenje žarkom strukturo podatkov organizirati na poseben način, da zmanjšate število preverjanj presečišča žarkov s predmeti scene. Zato boste morali tudi pri hibridnem upodabljanju ustvariti optimizirano strukturo podatkov. In na strani zmogljivosti je velika težava dostop do pomnilnika, povezan s sekundarnimi žarki, ki so potrebni za hibridno upodabljanje. Izkazalo se je, da se pri združevanju dveh metod upodabljanja združijo številne njihove pomanjkljivosti, zlasti se izgubi preprostost metode sledenja žarkom in visoka zmogljivost rastriranja.

Ko pa prednosti še vedno odtehtajo, je takšen hibridni pristop smiseln. Kombinacija nekaterih zmogljivosti rastriranja in sledenja je že na voljo, vključno s strojno pospešeno pripravo svetlobnih zemljevidov GPU, upodabljanjem dinamičnih svetlobnih zemljevidov in delnih senc, upodabljanjem odsevov in prosojnih predmetov z lomom. Že to je velik dosežek, saj je bil ta pristop že vrsto let na voljo samo za upodabljanje brez povezave. Že v poznih 90. letih so hibridno upodabljanje uporabljali v animiranih filmih za izboljšanje učinkovitosti, zdaj pa postaja na voljo za aplikacije v realnem času.


Toda to je šele začetek pred prihajajočo "zlato dobo" upodabljanja v realnem času. V prihodnosti se bo ta hibridni pristop razvil v nekaj več in namesto selektivnih učinkov bo mogoče uporabiti polnopravne tehnike z napredno osvetlitvijo, senčenjem in različnimi kompleksnimi učinki.

Približno na podoben način, iz katerega je šlo upodabljanje brez povezave "Bugovo življenje" do veliko bolj zapletenih animiranih filmov, npr "Koko", ki že uporablja popolno sledenje poti z desetinami ali celo stotinami izračunanih žarkov na piksel. Za razliko od prejšnjih let ni bilo zemljevidov senc ali ločenih prehodov za izračun osvetlitve, ampak samo popolno sledenje - to je tisto, za kar si prizadevajo razvijalci iger, le da bo njihova pot nekoliko daljša, vendar je cilj enak.


In preden pride do prehoda z rastriranja na popolno sledenje, morate uporabiti hibridno upodabljanje in na več načinov spremeniti svoj razvojni pristop. Na primer, del dela na predhodni pripravi in ​​"pečenju" nekaterih podatkov v GPU prepustite zunanjemu izvajalcu, predelajte svoj proizvodni cevovod in pripravite mehanizme za upodabljanje na dejstvo, da se bo vedno večji del izračunov postopoma preusmeril na sledenje. Zdaj je mogoče uporabiti delne prednosti sledenja, čeprav z izjemno majhnim številom žarkov na slikovno piko in z obveznim zmanjšanjem šuma.


Toda tudi s postopnim prehodom na sledenje ni treba zavreči potrebe po optimizacijah, ki niso specifične za rastrizacijo. Optimizacije na visoki ravni, kot so raven podrobnosti (LOD), izločanje okluzije, razporeditev po ploščicah in pretakanje, bodo prav tako odlično delovale s sledenjem žarkom. Dokler se industrija ne premakne na popolno sledenje, moramo še naprej uporabljati učinkovite tehnike z uporabo prostora na zaslonu, kjer je potrebna visoka zmogljivost in kakovost ni kritična.


No, upodabljanje s sledenjem žarkom je treba optimizirati. Na primer, ko upodabljate dinamične svetlobne zemljevide z uporabo DXR, je učinkovito predpomniti osvetlitev v svetlobnih zemljevidih ​​in nato uporabiti kopičenje podatkov skozi čas za naslednji okvir. Postopek je razmeroma hiter in ga je treba uporabiti, ker sledenje žarkom v prostoru svetlobnega zemljevida zagotavlja boljše rezultate v primerjavi s sledenjem žarkom v prostoru zaslona. Res je, morali boste uporabiti dušenje hrupa, saj v realnem času ne bo mogoče izračunati posebej veliko žarkov.

Celo običajni filtri za dušenje šuma z nastavitvami posebej za specifiko sledenja žarkom delujejo dobro, in če uporabite zmanjšanje šuma z uporabo zmogljivosti nevronskih mrež, kar je Nvidia že dokazala, in celo strojno pospešeno na tenzorskih jedrih grafičnih procesorjev arhitekture Volta, potem prihodnost hibridnega upodabljanja Zdi se precej jasno, da bodo vsaj nekateri učinki, ki jih je mogoče preprosto dodati obstoječim motorjem (izračuni senc ali globalna osvetlitev in senčenje), ki uporabljajo rastriranje, kmalu dodani igram.

Očiten način uporabe hibridnega upodabljanja je torej rastrizacija scene in uporaba sledenja žarkom le za del izračunov osvetlitve, pa tudi za izračune odbojev z lomi. Ta pristop zagotavlja hitrost rastriranja in kakovost sledenja v obliki natančne simulacije osvetlitve, vključno z globalno osvetlitvijo, odboji in lomi svetlobnih žarkov ter risanjem optično pravilnih senc. Poleg tega bo simulacija teh učinkov z rasterizacijskimi vdori in njihova bolj zapletena nekega dne pripeljala do točke, ko bo postalo tako intenzivno, da bo izračune lažje nadomestiti z resničnim sledenjem žarkom. In na splošno je to edina pravilna pot, če gledamo v prihodnost razvoja grafike.

DirectX Raytracing - standardni API za sledenje žarkom

Tako so se sčasoma naučili narediti rastrizacijo zelo impresivno z dodajanjem različnih algoritmov in vdorov, kot je preslikava paralakse, ki doda volumen ne preveč zapletenim površinam, pa tudi z uporabo senčnih zemljevidov. Za izboljšanje grafike je bilo potrebno le povečati hitrost grafičnih procesorjev in jih narediti nekoliko bolj univerzalne, pri čemer je osnova v obliki rasterizacije ostala praktično nedotaknjena (če ne štejemo metod optimizacije v obliki razbitja okvirja na ploščice itd.) .

Sodobne tehnike, kot so refleksije zaslonskega prostora in simulacija globalne osvetlitve, so potisnile rastriranje do praktičnih meja, saj ti algoritmi zahtevajo pametne obdelave in zapletene izračune, ki se včasih izvajajo asinhrono z upodabljanjem. In v bližnji prihodnosti bo kompleksnost in intenzivnost virov takih algoritmov še naprej rasla. Sledenje žarkom vam omogoča, da naredite zapletene učinke na preprost način, prav tako pa odpre vrata popolnoma novim tehnikam, ki prej niso bile mogoče pri upodabljanju v realnem času. Toda kako je to mogoče doseči, če lahko GPE samo rasterizirajo?

Trenutna verzija DirectX 12 Zdi se le precej nov, v resnici pa je bil ta grafični API napovedan že na GDC 2014 in je bil javno izdan kot del sistema Windows 10 leto kasneje. Dosedanja uporaba te različice je daleč od želenega, kar se je zgodilo iz več razlogov. Prvič, razvojni cikel za igre in motorje je precej dolg in dejstvo, da DirectX 12 deluje le na najnovejši različici sistema Windows in ima omejeno podporo na konzolah trenutne generacije, samo zmanjšuje argumente v prid njegovi uporabi na osebnem računalniku. Vendar smo v več igrah že videli uporabo nizkonivojskih API-jev, a kaj potem? In potem je razvojna linija DirectX naredila še en oster zasuk in predstavila orodja za podporo sledenja žarkom.

V okviru konference razvijalcev iger GDC 2018 Microsoft je predstavil nov dodatek k API-ju DirectX, pri katerem so tako ali drugače sodelovali številni partnerji, ki se ukvarjajo z razvojem programske in strojne opreme. Dodatek se imenuje DirectX Raytracing in njegovo ime pove, da gre za standardni API za programsko in strojno podporo za sledenje žarkom v aplikacijah DirectX, ki razvijalcem omogoča uporabo algoritmov in učinkov z uporabo omenjene tehnike. DirectX Raytracing (na kratko DXR) zagotavlja standardiziran pristop za implementacijo sledenja žarkom, ki ga pospešijo grafični procesorji. Ta razširitev se združuje z zmožnostmi obstoječega API-ja DirectX 12, kar vam omogoča uporabo tradicionalne rastrizacije in sledenja žarkom, kot tudi njihovo mešanje v želenih razmerjih.

Vse delo DXR API, povezano s sledenjem žarkom, je nadzorovano s seznami ukazov, ki jih pošlje aplikacija. Sledenje žarkom je tesno integrirano z rastrizacijo in računskimi ukazi in se lahko izvaja večnitno. Senčniki za sledenje žarkom (pet novih tipov senčil!) se nadzorujejo podobno kot računski senčniki, kar jim omogoča vzporedno obdelavo v GPU, kar nadzoruje njihovo izvajanje na relativno nizki ravni. Aplikacija je v celoti odgovorna za sinhronizacijo dela GPE in uporabo njegovih virov, tako med rastrizacijo kot med izračuni, kar razvijalcem omogoča nadzor nad optimizacijo izvajanja vseh vrst dela: rastrizacija, sledenje žarkom, izračuni, prenos podatkov.

Različni tipi upodabljanja si delijo vse vire, kot so teksture, medpomnilniki in konstante, ne da bi zahtevali pretvorbo, prenos in podvajanje, do katerih je treba dostopati iz sledilnih senčil. Vire, ki shranjujejo podatke, specifične za sledenje žarkom, kot so pospeševalne strukture (podatkovne strukture, ki se uporabljajo za pospešitev sledenja – iskanje presečišč med žarki in geometrijo) in tabele senčil (ki opisujejo razmerje med senčniki sledenja žarkom, viri in geometrijo), v celoti upravlja aplikacija , sam DXR API ne izvaja nobenega premika podatkov sam po sebi. Shaderje je mogoče prevesti posamezno ali v serijah, njihovo prevajanje popolnoma nadzoruje aplikacija in jih je mogoče vzporedno izvajati v več nitih CPU.

Na najvišji ravni DXR API-ju DirectX 12 doda štiri nove koncepte:

  1. Struktura pospeška ( struktura pospeška) je objekt, ki predstavlja 3D sceno v formatu, ki je optimalen za izračun žarkov na grafičnih procesorjih. Predstavljena kot dvonivojska hierarhija, ta struktura zagotavlja optimizirano upodabljanje žarkov na GPU in učinkovito spreminjanje dinamičnih podatkov.
  2. Nova metoda seznama ukazov ( seznam ukazov) z naslovom DispatchRays je osnova za sledenje žarkom v sceni. Tako igra prenese delovne obremenitve DXR na GPE.
  3. Nabor novih vrst senčil žarkov, ki določajo, kaj bo DXR izračunal. Ko pokličete DispatchRays, se zažene senčnik za generiranje žarkov. Pri uporabi nove funkcije TraceRay v HLSL senčnik za generiranje žarkov pošlje žarek v prizor in glede na to, kje žarek zadene v prizoru, se lahko na točki presečišča prikliče eden od več senčil zadetkov ( udarec) ali gospodična ( zgrešiti), ki vam omogoča, da vsakemu predmetu dodelite svoj niz senčil in tekstur ter ustvarite edinstvene materiale.
  4. Stanje cevovoda za sledenje, dodano obstoječim stanjem cevovoda za grafiko in računalništvo, prevaja senčnike za sledenje žarkov in druga stanja, pomembna za delovne obremenitve sledenja.

Tako DXR obstoječemu grafičnemu in računalniškemu motorju v DirectX 12 ne dodaja novega motorja GPE. Delovno obremenitev DXR je mogoče izvajati na obstoječih motorjih, saj je DXR v svojem bistvu računalniška naloga. Naloge DXR so predstavljene kot računalniške delovne obremenitve, ker grafični procesorji tako ali tako postajajo bolj vsestranski in so sposobni izvajati skoraj vsako nalogo, ki ni nujno povezana z grafiko, v prihodnosti pa bo večina fiksnih funkcij grafičnih procesorjev verjetno nadomeščena s kodo senčil.

Pri uporabi DXR je prvi korak izgradnja pospeševalnih struktur na dveh ravneh. Na najnižji ravni strukture aplikacija definira nabor geometrijskih podatkov (vozlišča in indeksni medpomnilniki), ki definirajo objekte v sceni. Na najvišji ravni strukture je definiran seznam opisov, ki vsebuje sklicevanja na določene geometrijske podatke, pa tudi dodatne podatke, kot so transformacijske matrike, ki se posodabljajo vsak okvir, podobno kot to počnejo igre za dinamično spreminjanje predmetov. To zagotavlja učinkovito prečkanje velikega števila kompleksnih geometrij.

Drugi korak pri uporabi DXR je ustvariti stanje cevovoda sledenja. Razpisi skupinskega žrebanja sodobnih iger ( žrebanje klicev) za povečanje učinkovitosti njihovega izvajanja v posebne skupine - pakete ( serija), na primer risanje vseh kovinskih predmetov v eni seriji in vseh plastičnih predmetov v drugi. Toda pri sledenju je nemogoče vnaprej natančno vedeti, kateri material bo zadel določen žarek, in serij ni mogoče uporabiti. Namesto tega stanje cevovoda usmerjanja omogoča dodelitev več nizov usmerjevalnih senčil in virov teksture. Na ta način lahko na primer določite, da morajo vsa sečišča žarkov z enim objektom uporabljati tak in tak specifičen senčnik in takšno in takšno teksturo, presečišča z drugim objektom pa naj uporabljajo drugačno senčilo in drugačno teksturo. To aplikaciji omogoča uporabo pravilne kode senčil s pravilnimi teksturami za materiale, ki jih zadenejo žarki.

Zadnji korak v DXR je klic DispatchRays, ki pokliče senčnik za generiranje žarka. Znotraj aplikacije kliče funkcijo TraceRay, ki povzroči prečkanje strukture pospeševanja in izvedbo ustreznega senčila ob zadetku ali zgrešenem (dve različni vrsti senčil). TraceRay je mogoče priklicati tudi znotraj teh dveh senčil, ko uporabljate rekurzijo žarka ali učinke z več odboji.


Zakaj ne bi za sledenje žarkom uporabili računalniških senčil, ki jih poznamo že iz DirectX-a? Prvič, DXR vam omogoča zagon ločenih senčil, ko žarki zadenejo in zgrešijo, in drugič, postopek upodabljanja je mogoče pospešiti na grafičnih procesorjih (z uporabo Nvidia RTX ali analogi konkurentov), ​​in tretjič, novi API vam omogoča povezovanje virov z uporabo tabel senčil.

Nvidia RTX je niz algoritmov programske in strojne opreme, ki pospešijo sledenje na rešitvah Nvidia, ki temeljijo na grafični arhitekturi Volta. Zakaj niso podprte prejšnje arhitekture, ki niso tako zelo drugačne od Volte? Morda je to delno marketinška poteza, da bi pritegnili kupce k novim izdelkom, ali pa so v Volti nekatere optimizacije strojne opreme, ki lahko resno pospešijo sledenje žarkom na GPU, o čemer nam še niso povedali. Da, edini GPU s to arhitekturo ima zaenkrat tenzorska jedra, ki pospešujejo naloge umetne inteligence, a če ga je mogoče uporabiti pri upodabljanju s sledenjem žarkov, potem le v procesu zmanjševanja šuma, pa še to - po dostopnih podatkih v obstoječi algoritmi za zmanjšanje hrupa. Take možnosti še niso bile uporabljene.

DXR in RTX imata koristi od zmogljivega in prilagodljivega programskega modela, podobnega Nvidia OptiX, ki omogoča razmeroma preprosto pisanje učinkovitih algoritmov za sledenje žarkom. Če želite začeti razvijati aplikacije z uporabo sledenja žarkom DXR, strojno pospešenega z RTX, boste potrebovali grafično kartico, ki temelji na arhitekturi Volta (trenutno samo Titan V) in različico gonilnika 396 ali novejšo, kot tudi operacijski sistem Windows 10 RS4 in komplet za razvijalce Microsoft DXR, ki vsebuje vse, kar potrebujete. Uporabno bo tudi za odpravljanje napak Microsoft PIX oz Grafika NSight Podjetja Nvidia, ki že imajo podporo za DXR API.

Za lažji razvoj in odpravljanje napak je Microsoft takoj izdal novo različico pripomočka PIX za Windows s podporo za zmogljivosti DXR. To orodje vam omogoča zajemanje in analizo okvirjev, izdelanih z uporabo DXR, tako da razvijalci natančno razumejo, kako DXR deluje s strojno opremo, ujamejo morebitne napake in optimizirajo svojo kodo. S PIX lahko programerji raziskujejo klice API-ja, si ogledajo stanje objektov in virov, povezanih s sledenjem, ter si ogledajo strukture pospeševanja. Vse to zelo pomaga pri razvoju aplikacij DXR.


Navsezadnje DirectX Raytracing API dopolnjuje razvijalsko izkušnjo s specializiranimi senčniki in strukturami, ki so priročne za sledenje žarkom, zmožnostjo hkratnega dela s preostalim tradicionalnim grafičnim cevovodom in računalniškimi senčniki itd. Konceptualno se to ne razlikuje veliko od tistega, kar Imagination Tech je več let ponujal OpenRL in njegove strojne rešitve. Žal, ImgTec je bil s svojimi čipi PowerVR Wizard predaleč pred svojim časom, vendar morate imeti dovolj sredstev ne le za začetni razvoj, ampak tudi za promocijo svoje ideje. DXR je API tako velikega in splošno priznanega podjetja, kot je Microsoft, in oba proizvajalca igričarskih grafičnih procesorjev (Nvidia in AMD, morda se jima kmalu pridruži še Intel, kdo ve) že sodelujeta z Microsoftom pri optimizaciji novega API-ja. za njihovo arhitekturo strojne opreme.

Kot vsi zaprti API-ji ima tudi DXR določeno pomanjkljivost, saj razvijalec preprosto ne ve, kako določene stvari delujejo znotraj API-ja, katere specifične pospeševalne strukture se uporabljajo za zagotavljanje učinkovitega vzporednega upodabljanja na GPE-jih in kakšne so prednosti in slabosti, kaj značilnosti (poraba pomnilnika, zakasnitev itd.), kako deluje razporejevalnik sledenja žarkom, ali je doseženo ravnovesje med uporabo pomnilnika, zakasnitvijo, uporabo registra itd., kateri del dela sledilnika se izvaja v strojni opremi na GPU in kaj v gonilniku in API-ju. Vse tovrstne rešitve trpijo zaradi svoje zaprte narave in DXR ni izjema.

Mimogrede, obstaja alternativa uporabi API-ja DXR - zaposleni v Nvidii delajo na razširitvi več platform Vulkan API, zasnovan za sledenje žarkom - VK_NV_raytracing. Razvojna ekipa sodeluje s sodelavci iz Khronos ustvariti odprti standard za več platform, eden od glavnih ciljev pa je poskušati narediti sledenje žarkom v DirectX in Vulkanu čim bolj podobno.

Igre, ki uporabljajo rastrizacijo, so pogosto videti zelo verodostojne in realistične, saj so njihovi razvijalci porabili veliko časa za dodajanje vseh potrebnih učinkov in algoritmov, ki simulirajo širjenje svetlobnih žarkov v realnosti. In v zgodnjih letih se bodo zmožnosti DXR uporabljale tudi za dopolnitev obstoječih tehnik upodabljanja, kot so refleksije zaslonskega prostora – za zapolnjevanje podatkov o skriti geometriji, ki ni vidna na zaslonu, kar bo privedlo do povečanja kakovosti teh učinkov. . Toda v naslednjih nekaj letih lahko pričakujete povečanje uporabe DXR za tehnike, ki se ne uporabljajo pri rastrizaciji, kot je popolna globalna osvetlitev. V prihodnosti bo lahko sledenje žarkom popolnoma nadomestilo rastriranje pri upodabljanju 3D prizorov, čeprav bo rastriranje še dolgo ostalo nosilec idealnega razmerja med zmogljivostjo in kakovostjo.

Trenutno imajo popolno strojno podporo za DirectX Raytracing le rešitve Nvidia iz družine Volta (ki uporabljajo tehnologijo RTX), torej danes le dragi Titan V, na prejšnjih grafičnih procesorjih tega podjetja, pa tudi na grafičnih procesorjih AMD, sledenje žarkom se v celoti izvaja z uporabo računskih senčil – to pomeni, da je pri nižji zmogljivosti na voljo le osnovna podpora za DXR. Vendar je AMD že izjavil, da sodelujejo z Microsoftom pri izvajanju pospeševanja sledenja strojni opremi in bodo kmalu zagotovili gonilnik za to podporo, čeprav se za zdaj zdi, da obstoječe arhitekture AMD verjetno ne bodo mogle zagotoviti visoke stopnje pospeševanja, podobnega na Nvidia Volta. Tehnologija sledenja žarkom s strojnim pospeševanjem RTX izkorišča zmožnosti pospeševanja strojnega sledenja žarkom arhitekture Volta, ki še niso bile objavljene, in naj bi podpirala igralne rešitve pozneje to jesen.

Če pogledamo še dlje v prihodnost, je pojav API-jev za pospeševanje rastriranja nekoliko v nasprotju s splošno univerzalizacijo grafičnih procesorjev, ki postajajo vse bolj podobni običajnim procesorjem, zasnovanim za katero koli vrsto računalništva. Že vrsto let se govori o popolni odstranitvi vseh blokov, ki opravljajo fiksne funkcije iz grafičnega procesorja, čeprav se to doslej ni najbolje obneslo (spomnite se ne ravno uspešnega Intel Larrabee). Toda na splošno bo večja programabilnost grafičnih procesorjev še olajšala mešanje rastriranja in sledenja, popolno sledenje pa morda ne bo več zahtevalo nobenih API-jev za podporo strojnega pospeševanja. Ampak to je pogled predaleč, za zdaj se ukvarjamo z DXR.

DirectX Raytracing in podpora te razširitve API-ja s strani razvijalcev programske in strojne opreme nudita praktično možnost uporabe sledenja žarkom v kombinaciji z znanim API-jem za "rasterizacijo". Zakaj je to potrebno, saj so sodobni grafični procesorji že sposobni izvajati skoraj vse izračune z uporabo računalniških senčil, razvijalci pa lahko z njimi izvajajo sledenje žarkom? Bistvo je standardizirati zmožnosti strojnega pospeševanja sledenja na specializiranih enotah v GPU, kar pa se ne bo zgodilo, če za to niso namenjeni univerzalni računalniški shaderji. Nekatere nove strojne zmogljivosti sodobnih grafičnih arhitektur omogočajo hitrejše sledenje žarkom in te funkcionalnosti ni mogoče izpostaviti z obstoječim API-jem DirectX 12.

Microsoft ostaja zvest samemu sebi – tako kot rasterizacijski del DirectX-a tudi novi API ne določa natančno, kako naj strojna oprema deluje, ampak omogoča razvijalcem GPE, da pospešijo le določene Microsoftove standardizirane zmogljivosti. Razvijalci strojne opreme lahko svobodno podpirajo izvajanje ukazov DXR API tako, kot želijo, Microsoft jim ne pove natančno, kako naj to počnejo grafični procesorji. Microsoft uvaja DXR kot računsko nalogo, ki jo je mogoče izvajati vzporedno z delom "rasterizacije", DXR pa prinaša tudi več novih vrst senčil za obdelavo žarkov, kot tudi optimizirano strukturo za 3D sceno, priročno za sledenje žarkom.

Ker je novi API namenjen razvijalcem programske opreme, jim Microsoft daje osnovno raven podpore za sledenje žarkom v DXR, ki lahko uporablja vso obstoječo strojno opremo, ki podpira DirectX 12. In prve poskuse z DXR je mogoče začeti na obstoječih grafičnih procesorjih, čeprav bo ne bo dovolj hiter za uporabo v resničnih aplikacijah. Vsa strojna oprema s podporo za DirectX 12 bo podpirala sledenje žarkom in nekatere preproste učinke je mogoče narediti tudi z obstoječo bazo video kartic v rokah igralcev. Nekaj ​​učinkov z uporabo DXR v igrah bomo videli letos, vsekakor pa leta 2019 – vsaj kot zgodnjo predstavitev zmogljivosti novih tehnologij.

Verjetno se bo začetna zmogljivost sledenja na različnih grafičnih procesorjih zelo razlikovala. Rešitve brez izvorne podpore, ki uporabljajo osnovno raven podpore prek računalniških senčnikov, bodo zelo počasne, grafični procesorji s podporo za sledenje strojne opreme pa bodo takoj nekajkrat pospešili proces - tako kot v dobrih starih časih začetnega razvoja podpore za rasterizacijo strojne opreme. . Sčasoma se bo vedno več izračunov med sledenjem izvajalo bolj optimalno in bistveno učinkoviteje, a to bo zahtevalo nove grafične rešitve. Prvi naj bi se pojavil v prihodnjih mesecih.

Vzporedna primerjava rastriranja in sledenja

Poskusimo pogledati konkretne primere, kaj lahko zagotovi sledenje žarkom. Pravzaprav se že zdaj uporablja v igrah, vendar v nekoliko drugačnih, bolj primitivnih oblikah. Zlasti v algoritmih, ki uporabljajo zaslonski prostor ali algoritem sledenja vokselskega stožca pri izračunu globalne osvetlitve, vključno z dobro znanim algoritmom Voxel Ambient Occlusion (VXAO) Podjetje Nvidia. Toda to še vedno ni polnopravno sledenje žarkom, temveč hekerji z njegovo uporabo v takšni ali drugačni obliki med rastriranjem, danes pa govorimo o popolnem sledenju žarkom za celotno geometrijo scene.

Sodobni grafični procesorji so že precej zmogljivi in ​​so sposobni slediti svetlobnim žarkom pri visoki hitrosti s programsko opremo, kot je npr Arnold (Autodesk), V-Ray (Chaos Group) ali Renderman (Pixar), številni arhitekti in oblikovalci pa že uporabljajo strojno pospešeno sledenje žarkom za hitro ustvarjanje fotorealističnih upodobitev svojih izdelkov, kar zmanjšuje stroške celotnega razvojnega procesa. Nvidia že več kot desetletje sodeluje pri razvoju tehnik strojno pospešenega sledenja žarkom v profesionalnem svetu in zdaj je prišel čas, da te zmogljivosti prenesemo v igre.

Da bi razvijalcem iger pomagali pri implementaciji sledenja žarkom, je Nvidia napovedala prihajajoči dodatek k GameWorks SDK funkcije, kot so posebni algoritmi za zmanjševanje hrupa, visokokakovostno globalno senčenje, sence območnih svetlobnih virov ( območne luči) in algoritem za risanje visokokakovostnih odsevov.

Najboljše upodobitve s sledenjem žarkom zahtevajo veliko število vzorcev (žarkov, izračunanih na slikovno piko), da se doseže visoka kakovost – od sto do tisoč! Odvisno je od kompleksnosti prizora, vendar tudi nekaj ducatov žarkov ni primernih za izračune v realnem času, saj bodo celo grafični procesorji bližnje prihodnosti s podporo za strojno sledenje lahko zagotovili sprejemljivo zmogljivost z veliko manjšim številom žarkov na piksel. - samo nekaj. Se sploh ima smisel truditi?

Da, če dobljeno sliko dodatno obdelate (želeli smo se izogniti vdorom rastriranja, a zdi se, da se bomo morali za zdaj sprijazniti z drugimi). Zlasti izvajanje sledenja na produktivni arhitekturni rešitvi Volta omogoča zmogljivost v realnem času pri izračunu 1-2 vzorcev na slikovno piko z obvezno uporabo zmanjšanja šuma. Že obstajajo obstoječi algoritmi za odpravo hrupa, ki lahko znatno izboljšajo kakovost slike po sledenju žarkom, in to je le prvi razvoj, ki še poteka.

Zahteve za algoritme za zmanjšanje hrupa v realnem času so precej visoke; morate biti sposobni obdelati zelo šumne vhodne slike z izjemno majhnim številom žarkov na slikovno piko (do 1 vzorca), zagotoviti stabilno kakovost v gibanju z uporabo informacij iz prejšnjih okvirjev. , in se izvajajo izjemno hitro, ne da bi porabili več 1 ms časa GPU. Obstoječi algoritmi Nvidia lahko dosežejo zelo dobre rezultate pri upodabljanju odsevov, mehkih senc in globalne okluzije. Za vsak učinek se uporabljajo specifični algoritmi, ki uporabljajo tudi informacije o 3D sceni.


Sledenje žarkom je bilo uporabljeno za upodabljanje senc z enim vzorcem na slikovno piko in omogočenim zmanjšanjem šuma


Za izračun globalne okluzije smo uporabili dva žarka na slikovno piko z zmanjšanjem šuma


In pri upodabljanju odbojev je bil izračunan le en žarek na slikovno piko;

Ray Tracing Denoiser kot del GameWorks SDK je nabor knjižnic za uporabo več tehnik hitrega sledenja žarkom, ki uporabljajo zmanjšanje šuma, kar je zelo pomembno pri sledenju z majhnim številom žarkov na slikovno piko, saj je rezultat običajno izjemno šumen. Algoritmi vključujejo upodabljanje mehkih senc iz površinskih svetlobnih virov in algoritme za upodabljanje odsevov in globalno senčenje ambientalne okluzije. Uporaba zmanjševanja šuma omogoča doseganje visoke hitrosti z majhnim številom vzorcev na slikovno piko, vendar kakovost slike ostaja odlična – veliko boljša od tehnik, ki se trenutno uporabljajo za simulacijo širjenja svetlobe po prizoru in uporabe prostora na zaslonu.

Pogovorimo se o prednostih sledenja žarkom pri upodabljanju senc. S sledenjem lahko narišete fizično pravilne sence z mehkimi robovi, ki so veliko bolj realistične kot najbolj izpopolnjene tehnike, ki so na voljo z uporabo zemljevidov senc in filtriranja. Celo pri zelo velikih svetlobnih virih so realistične mehke sence pridobljene brez napak, do katerih pride pri rastriranju.


Sence s sledjo žarkov


Sence, pridobljene z rastrizacijo in senčnimi zemljevidi

Pri simulaciji senčnih zemljevidov lahko uporabite tudi algoritme, ki so nemogoči ali zapleteni, kot so sence območnih svetlobnih virov. In kar je najpomembnejše, to popolnoma odpravi vse možne vizualne artefakte: utripajoče slikovne pike na robovih, nazobčane črte itd. Da, med razvojem rastrizacije je bilo izumljenih veliko vdorov za zatiranje artefaktov, vendar sledenje žarkom naredi vse naravno.

Za izračun globalnega senčenja ( Ambientalna okluzija) Rad bi uporabil tudi sledenje žarkom, saj zagotavlja znatno višjo kakovost v primerjavi z vsemi obstoječimi tehnikami zaslonskega prostora (vse te SSAO, HBAO in celo VXAO). Skoraj vsi algoritmi, ki se danes uporabljajo, preprosto dodajo temo vogalom, ki jih najdemo na ravni sliki, le simulirajo širjenje svetlobe, uporaba sledenja pa omogoča, da se to naredi na fizično pravilen način.


Globalna okluzija z uporabo sledenja žarkom


Globalno senčenje s simulacijo učinka z uporabo prostora na zaslonu

Poleg tega vse tehnike, ki uporabljajo zaslonski prostor, ignorirajo vpliv geometrijskih objektov zunaj prizorišča in za kamero ter dodajo enako senčenje popolnoma različnim površinam. V zgornjem primeru je veliko teh težav jasno vidnih - jasno je, da gre le za poskus simulacije širjenja svetlobe v 3D-prizoru, vendar sledenje doseže opazno bolj fotorealističen videz.

Pri upodabljanju razmišljanja Sledenje lahko zagotovi tudi opazno boljšo kakovost kot sedanje metode, ki uporabljajo prostor na zaslonu, ki nimajo podatkov izven zaslona (fizično ne morejo narisati v odsevu, kar ni vidno na zaslonu) in ki nepravilno narišejo poudarke na odsevih - od -due na dejstvo, da se uporablja direktna smer pogleda, in ne odbita.


Odsevi, pridobljeni s sledenjem žarkom


Odsevi, ki izhajajo iz rastrizacije zaslona

Nvidijin primer je morda pretiran in preveč očiten glede težav s tehnikami refleksije, ki uporabljajo prostor na zaslonu, vendar je bistvo jasno - fizično pravilne refleksije je mogoče upodobiti samo s sledenjem žarkom. Druge metode upodabljanja odsevov niso univerzalne in zagotavljajo slabšo kakovost - ravninski odsevi na primer delujejo samo na ravnih površinah. Toda metoda sledenja ima tudi pomanjkljivost - pri majhnem številu vzorcev bo potrebno zmanjšanje šuma, saj z enim izračunanim žarkom na slikovno piko slika postane izjemno hrupna.

Izkazalo se je, da je treba trenutno vedno uporabljati zmanjšanje hrupa, trenutna različica posebnih tehnik z zmanjšanjem šuma Nvidia pa ima svoje omejitve in slabosti. Tehnika upodabljanja senc bo na primer ustvarila degradirane okludirane sence iz dveh predmetov, ki oddajata senco z velikimi razlikami v oddaljenosti od površine, ki jo senčita. Kakovost algoritma za upodabljanje refleksije se poslabša s povečano hrapavostjo površine, algoritem za upodabljanje globalne okluzije pa lahko zahteva ne enega, ampak dva ali celo več izračunanih žarkov na slikovno piko za upodabljanje drobnih podrobnosti.

Toda to so le začetne različice tehnik, ki uporabljajo filtre za zmanjševanje šuma, ki se bodo še naprej izboljševale v kakovosti in zmogljivosti. Poleg tega je v prihodnosti mogoče uporabiti zmanjševanje hrupa s pomočjo tehnologij umetne inteligence, ki so že vključene v Nvidia OptiX 5.0, vendar se še ne uporablja pri sledenju z RTX. Verjetno bo v prihodnosti za vse komponente osvetlitve uporabljeno eno samo zmanjšanje hrupa hkrati (namesto treh ločenih, kot se izvaja zdaj), da se zmanjšajo stroški pomnilnika in zmogljivost. Prav tako vas nič ne ovira pri uporabi hibridnega pristopa k upodabljanju z uporabo elementov algoritmov zaslonskega prostora z dodatnim sledenjem žarkom.

Poleg uporabe sledenja žarkom v motorjih za igre v realnem času je moč GPU-pospešenega DXR mogoče uporabiti tudi pri ustvarjanju vsebine. Na primer za visokokakovostne izračune osvetlitve, ki se nato postavijo v svetlobne zemljevide, za ustvarjanje vnaprej upodobljenih prizorov v igralnem mehanizmu, vendar z višjo kakovostjo, itd. Poleg tega lahko uporabite sledenje žarkom sploh ne za upodabljanje, ampak v zvočnih motorjih za virtualno resničnost ( Nvidia VRWorks Audio), v fizičnih izračunih ali celo v algoritmih umetne inteligence.

Sledenje žarkom je uporabno v procesu ustvarjanja vsebine: fino prilagajanje značilnosti materialov z visokokakovostnim in hitrim upodabljanjem, dodajanje in prilagajanje značilnosti svetlobnih virov, odpravljanje napak algoritmov za zmanjševanje hrupa itd. Dobite lahko tudi še višje- kakovostno upodabljanje brez povezave z uporabo enakih struktur z relativno malo truda in sredstev kot motor v realnem času. To je bilo na primer že storjeno v Unreal Engine 4- Nvidia je sama napisala eksperimentalno Sledilnik poti takoj po integraciji zmožnosti DXR v motor, ki sicer še ne zagotavlja dovolj kakovosti za popolno izrisovanje brez povezave, kaže takšno možnost.

Da o možnostih hitre in učinkovite priprave svetlobnih kart niti ne govorimo – "pečenje" svetlobe v posebne zemljevide osvetlitve (lightmaps) za statične objekte v sceni. Tak motor lahko uporablja isto kodo v igri in urejevalniku ter omogoča pripravo različnih vrst svetlobnih zemljevidov (2D, 3D) in kubičnih zemljevidov okolja.


To ni pomembno le zato, ker bo sledenje žarkom pospešilo proces končne generacije svetlobnih zemljevidov, temveč bo zagotovilo tudi boljši predogled takšnih svetlobnih zemljevidov, kar vam bo omogočilo hitro spreminjanje lokacije in značilnosti svetlobnih virov in predmetov v prizoru, takoj dobili rezultat na zaslonu - skoraj enako, kakšna bo končna osvetlitev.

Na koncu predlagamo, da si ogledate vse prednosti sledenja žarkom v dinamiki. Nvidia je izdala celotno zbirko tehnoloških predstavitev, ki prikazujejo prednosti strojno pospešenega sledenja žarkom z uporabo tehnologije Nvidia RTX z uporabo DXR API (samo v obliki videa Youtube, žal).

Predstavitev jasno prikazuje prednosti upodabljanja sledljivih senc, vključno z mehkimi in barvnimi, razliko v kakovosti globalne okluzije pri uporabi rastriranja in prostora na zaslonu v primerjavi s sledenjem žarkom, realistične odseve na različnih vrstah materialov z več odboji, pametne sisteme za zmanjšanje hrupa in uporaba sledenja pri pripravi vnaprej upodobljenih statičnih svetlobnih zemljevidov.

Predstavitev zmožnosti sledenja žarkom

Da bi prikazali zmogljivosti API-ja DirectX Raytracing in tehnologije Nvidia RTX, je več vodilnih razvijalcev motorjev za igre in meril uspešnosti izdalo svoje tehnološke predstavitve za GDC 2018, ki prikazujejo nekatere zmogljivosti novih tehnologij, ki uporabljajo sledenje žarkom: 4A igre, Electronic Arts, Epic Games, Remedy Entertainment, Unity in drugi. Žal, zaenkrat so na voljo le v obliki posnetkov zaslona, ​​predstavitev in videov na Youtube.

Medtem ko so bile prejšnje podobne demonstracije sledenja žarkom v realnem času prikazane v zelo preprostih prizorih s preprostimi učinki ali pri nizki zmogljivosti, lahko zmogljivosti prihodnjih grafičnih procesorjev naredijo sledenje žarkom resnično tudi v igralnih pogojih s sprejemljivo zmogljivostjo. Razvijalca Epic Games in Remedy Entertainment verjameta, da bosta zmožnosti DXR in RTX prihodnjim igram prinesli boljšo grafiko, implementacija osnovne podpore za nov API v njihovih motorjih pa se je izkazala za razmeroma enostavna.

Predstavitev tehnologije DirectX Raytracing (Futuremark)

Na primer podjetje, ki ga vsi navdušenci nad 3D grafiko poznajo po svojih testnih paketih Futuremark je prikazal tehnološki demo DXR, narejen s posebej razvitim hibridnim motorjem, ki uporablja sledenje žarkom za visokokakovostne refleksije v realnem času.

Rekli smo že, da je pri uporabi trenutno običajnih metod risanje realističnih in fizično pravilnih odsevov v 3D sceni zelo težko, razvijalci se soočajo s številnimi težavami, ki jih sčasoma premagajo z različnimi metodami, vendar ostajajo; daleč od idealnega odseva. V zadnjih nekaj mesecih so razvijalci pri Futuremarku raziskovali uporabo DXR v hibridnem upodabljanju in dosegli nekaj precej dobrih rezultatov.

Z uporabo strojno pospešenega sledenja žarkom GPU so dobili fizično pravilne odboje za vse objekte v sceni, vključno z dinamičnimi. Odprite naslednjih nekaj slik v polni velikosti, saj gre za animacije GIF, ki jasno prikazujejo razliko med sledenjem in bolj običajnimi metodami, ki uporabljajo prostor na zaslonu:

Razlika je očitna. Poleg razlik v podrobnostih odsevov lahko s sledenjem DXR dobite odseve predmetov, ki obstajajo zunaj prostora zaslona, ​​tj. ne v območju gledanja igralne kamere, kot je razvidno iz primerjalnih posnetkov zaslona, ​​in sam odsev na splošno izgleda veliko bolj verodostojno. Tu je še en primer, ki je morda manj očiten, a precej daje idejo:

Uporaba sledenja žarkom ustvari natančne, perspektivno popravljene odseve na vseh površinah prizora v realnem času. Jasno je razvidno, da je sledenje veliko bližje realizmu kot bolj znani odsevi zaslonskega prostora, ki se uporabljajo v večini sodobnih iger. Evo še ena primerjava:

Če ne pogledate odsevov, pridobljenih z uporabo DXR, se morda zdi, da običajne metode dajejo dobro kakovost, vendar se samo zdi tako. Poleg tega odsevi niso pomembni samo za ogledala z visoko odbojnostjo, ampak tudi za vse druge površine - vse postanejo bolj realistične, tudi če niso takoj vidne.

Futuremark v svoji predstavitvi uporablja zmožnosti sledenja žarkom samo za reševanje problemov, s katerimi se je težko boriti z običajnimi metodami, kot so odsevi dinamičnih objektov, ki se nahajajo zunaj glavnega prostora zaslona, ​​odsevi na neravnih površinah in odboji s korekcijo perspektive za kompleksne predmete. . Tukaj so kakovostnejši posnetki zaslona iz predstavitve DXR:




Sodobni grafični procesorji že lahko uporabljajo hibridno upodabljanje, z uporabo rastriranja za večino dela in relativno malo vnosa sledenja za izboljšanje kakovosti senc, odsevov in drugih učinkov, ki jih je težko obvladati s tradicionalnimi tehnikami rastriranja. In predstavitveni program Futuremark samo prikazuje primer takšnega pristopa; deluje v realnem času na obstoječem GPU, čeprav je eden najmočnejših.

Glavna stvar je, da je bilo po besedah ​​razvijalcev iz Futuremarka precej enostavno implementirati podporo za sledenje žarkom v obstoječi motor DirectX 12 iz primerjalne vrednosti 3DMark Time Spy, z uporabo modelov in tekstur iz njihovih testov. Skupaj s tehnično predstavitvijo so znani razvijalci 3D testov napovedali uporabo zmogljivosti DirectX Raytracing v svojem naslednjem merilu uspešnosti 3DMark, ki naj bi izšel proti koncu tega leta.

Reflections Real-Time Ray Tracing Demo (Epic Games)

Podjetje Epske igre skupaj z ILMxLAB in Nvidia je tudi pokazala svojo možnost, da v motor vključi zmožnosti sledenja žarkom v realnem času Unreal Engine 4. Projekcija je potekala ob otvoritvi GDC 2018, kjer so tri od teh podjetij predstavile eksperimentalno filmsko realistično predstavitev na temo filmske serije "Vojna zvezd" z uporabo likov iz serije "Sila se prebuja" in "Zadnji Jedi".


Demo Epic Games uporablja spremenjeno različico Unreal Engine 4 in tehnologije Nvidia RTX, katere zmogljivosti so razkrite prek API-ja DirectX Raytracing. Za izdelavo 3D scene so razvijalci uporabili resnične vire iz filmov Vojna zvezd: Zadnji Jedi z Kapitan Phasma v sijočih oklepih in dva jurišnika s prizorom v ladijskem dvigalu Prvo naročilo.

Zadevna tehnološka predstavitev vključuje dinamično spreminjajočo se osvetlitev, ki jo je mogoče prilagajati sproti, kot tudi učinke sledenja žarkom, vključno z visokokakovostnimi mehkimi sencami in fotorealističnimi odsevi – vse upodobljeno v realnem času in z zelo visoko kakovostjo. Takšne kakovosti slike preprosto ni na voljo brez uporabe sledenja žarkom, zdaj pa jo lahko zagotovi znani Unreal Engine, nad katerim je bil zelo navdušen ustanovitelj in predsednik Epic Games. Tim Sweeney.

Napredne tehnike v predstavitvi tehnologije vključujejo: območne luči, vključno z mehkimi sencami, upodobljene s sledenjem žarkom, kot tudi upodabljanje refleksije in globalne okluzije s sledenjem žarkom, zmanjšanje šuma rezultata sledenja žarkom iz paketa Nvidia GameWorks, kot tudi visoko kakovosten učinek globinske ostrine (ne uporablja sledenja, je pa tudi srčkan).


Posnetki zaslona in video prikazujejo zelo visoko kakovost vseh teh učinkov, še posebej pa navdušujejo realistični odsevi, ki jih je v prizoru ogromno. Vsi predmeti se odražajo v vseh objektih, kar je zelo težko, če ne nemogoče, upodobiti pri rastriranju. Metoda upodabljanja odsevov v zaslonskem prostoru bi dala le imitacijo realnosti, v kateri se ne bi zrcalilo vse, kar ni vključeno v okvir, ostalo pa bi bilo zelo težko kakovostno upodobiti.

Poleg odsevov lahko opazimo najmehkejše sence, ki ne padejo v oči s svojimi raztrganimi in/ali zelo ostrimi robovi, kot se to zgodi pri uporabi zemljevidov senc. No, naknadna obdelava tukaj je zelo kakovostna. Na splošno so razvijalci dali vse od sebe in ta predstavitev se je izkazala za eno najbolj impresivnih za strojno pospeševanje sledenja žarkom.

Da bi ustvarili to predstavitev, je Epic Games tesno sodeloval z umetniki iz ILMxLAB in inženirji iz Nvidie, da bi prikazal zmogljivosti tehnologije Nvidia RTX, ki teče prek API-ja DXR. Predstavitev Unreal Engine, ki se izvaja v realnem času na delovni postaji Postaja DGX Nvidia, ki vključuje kar štiri grafične procesorje arhitekture Volta. Z združevanjem moči Unreal Engine, grafičnega API-ja za sledenje žarkom DXR in tehnologije Nvidia RTX, ki deluje na družini grafičnih procesorjev Volta, smo bližje kinematografskemu realizmu v realnem času.

Poleg tehnološke predstavitve so imeli strokovnjaki iz Epic Games veliko enourno sejo na GDC "Kinematografska osvetlitev v Unreal Engine", posvečen novostim njihovega motorja. In sam demo je prikazan vsem z možnostjo gledanja prizora v različnih načinih, vključno z upodabljanjem žičnih okvirjev. Predvidevamo lahko, da bo vse to prej ali slej na voljo v igrah, saj je Unreal Engine zelo priljubljen. Epic Games je obljubil, da bo letos zagotovil dostop do zmogljivosti API-ja DXR - verjetno bližje jeseni, ko bodo izdani novi grafični procesorji Nvidia.


Podpora za DirectX Raytracing in Nvidia RTX odpira pot za Unreal Engine 4 do novega razreda tehnik in algoritmov, ki prej niso bili na voljo s prevlado rastrizacije. V bližnji prihodnosti bodo razvijalci iger lahko uporabili hibridni pristop, pri čemer bodo za nekatere učinke uporabili nekaj visokokakovostnega sledenja žarkom, za večino dela pa visoko zmogljivo rastrizacijo. To je dobra podlaga za prihodnost, saj bodo zmogljivosti grafičnih procesorjev, povezane z učinkovitim pospeševanjem sledenja žarkom, le rasle.

Pica Pica – Eksperiment sledenja žarkom v realnem času (Electronic Arts/SEED)

Najnovejši razvijalec, ki se zanima za sledenje žarkom prek DXR, je studio SEME od Electronic Arts, ki je ustvaril poseben demo program Pica Pica, z uporabo poskusnega motorja Halcyon, ki uporablja hibridno upodabljanje kot prejšnje predstavitve. Ta predstavitev je zanimiva tudi zato, ker je ustvarila proceduralni svet brez predhodnih izračunov.

Zakaj so se raziskovalci SEED odločili za uporabo hibridnega upodabljanja s sledenjem žarkom? Eksperimentalno so ugotovili, da lahko ta metoda proizvede veliko bolj realistično sliko v primerjavi z rastrizacijo, zelo blizu polnopravnemu sledenju žarkom (path tracing), ki je preveč zahtevno po virih ali ustvari preveč šumno sliko z majhnim številom izračunanih vzorcev. Vse to je jasno razvidno iz primerjalnih posnetkov zaslona:


Popolno sledenje


Hibridno upodabljanje


Rasterizacija

V sodobnih igrah se za izračun odbojev in osvetlitve uporabljajo različni heki, vključno s predhodnim izračunom osvetlitve (vsaj njen statični del). Vse to zahteva dodatno delo oblikovalcev nivojev, ki premeteno postavijo lažne svetlobne vire, začnejo s predračunom osvetlitve, ki se nato zabeleži v svetlobne karte. In uporaba sledenja žarkom za naloge upodabljanja omogoča odpravo tega dodatnega dela, saj sledenje žarkom omogoča naraven izračun vsega, kar potrebujete, kot smo že opisali zgoraj.

In ker popolno sledenje še ni mogoče, motor Halcyon uporablja hibridni pristop. Za izračun odloženega senčenja se uporablja rastriranje, za izračun direktnih senc lahko po potrebi uporabite rastrizacijo ali sledenje žarkom, za neposredno osvetlitev uporabite računske senčnike, za odseve lahko uporabite tudi tradicionalni pristop in sledenje, za globalno osvetlitev vedno uporabite sledenje in za simulacijo ambientalne okluzije se lahko zanesete na običajne zaslonske metode, kot je SSAO, ali omogočite tudi sledenje žarkom. Za upodabljanje prosojnih predmetov se uporablja samo sledenje, za naknadno obdelavo pa se uporabljajo računski senčniki.


Zlasti sledenje žarkom se uporablja za izračun senc in odsevov – veliko bolje in bolj naravno kot pri trenutno običajnih tehnikah. Na primer, takih odbojev na splošno ni mogoče narediti z uporabo algoritmov za izračun odbojev pri rastriranju in uporabi prostora na zaslonu:


Sledenje žarkom pri izračunu odbojev poteka pri polovični ločljivosti, kar pomeni, da se 0,25 žarka/piksel uporablja za odseve in 0,25 žarka/piksel za sence. In tu se pojavi problem majhnega števila izračunanih žarkov v obliki izjemno hrupne slike z odsevi, ko je brez posebne dodatne obdelave rezultat sledenja žarkom videti pregrob:


Zato se po sledenju slika rekonstruira do polne ločljivosti upodabljanja na poseben način - več zelo pametnih algoritmov (podrobnosti najdete v predstavitvi razvojne ekipe na GDC 2018), ko se prejeti podatki filtrirajo in informacije iz prejšnjih okvirjev se dodatno zbira in upošteva. Rezultat je povsem sprejemljiv rezultat z realističnimi odsevi, ki se ne razlikuje veliko od polnega sledenja poti:


Toda morda običajne metode v prostoru na zaslonu ne bodo dale nič slabših rezultatov in preprosto ne potrebujemo "dragega" sledenja? Oglejte si to vzporedno primerjavo: na levi so odsevi zaslonskega prostora, na sredini je hibridno sledenje žarkom, na desni pa je referenčno upodabljanje s popolnim sledenjem žarkom:


Razlika je očitna. Metoda zaslonskega prostora je zelo približna, nerealistična in le simulira odseve, čeprav na nekaterih mestih ni slaba, vendar z očitnimi artefakti in težavami s pomanjkanjem ločljivosti. Tega problema s sledenjem ni, tudi ob upoštevanju zmanjšane ločljivosti pri upodabljanju žarkov. V Pica Pica se sledenje žarkom uporablja tudi za upodabljanje prozornih in prosojnih predmetov. Demo program izračuna lom svetlobe brez potrebe po predhodnem razvrščanju, kot tudi podpovršinsko sipanje svetlobe:

Zaenkrat motor še ni bil v celoti razvit in ima eno pomanjkljivost, ki je pomembna za fotorealizem - še ne more risati senc iz prosojnih predmetov, vendar je to vprašanje časa. Toda predstavitev uporablja algoritem globalne osvetlitve, ki ne uporablja predhodnih izračunov in podpira tako statične kot dinamične objekte, kar zmanjšuje potrebo po dodatnem delu s strani umetnikov:


Globalna osvetlitev je izklopljena


Globalna osvetlitev omogočena

Globalna osvetlitev pomembno vpliva na nekatere predmete v prizoru in dodaja realistično osvetlitev. V predstavitvi lahko dodatno uporabite tudi tehnike za simulacijo globalnega senčenja, kar daje dodatne sence. Podprti so tudi algoritmi v prostoru zaslona - Zaslon okolice zaslona (SSAO):


Morda bi bilo še bolje z nečim, kot je VXAO, ki ga promovira Nvidia, a že zdaj izgleda kar dobro. Toda slika bo še boljša in bolj realistična s popolnim izračunom globalnega senčenja s sledenjem žarkom. Poglejte primerjalne slike, razlika je očitna:



Medtem ko SSAO daje le videz globalnih senc in zakrije le najočitnejše vogale, polno sledenje naredi vse popolno in daje globoko senco tam, kjer bi morala biti, na podlagi zakonov širjenja svetlobe.

Kar zadeva sence od neposrednih žarkov svetlobnih virov, je pri trdih sencah med sledenjem vse precej preprosto - žarki se usmerijo v smeri svetlobnih virov in preverijo zadetke. Pri mehkih sencah je algoritem podoben, vendar je rezultat z enim vzorcem na slikovno piko preveč "šumen" in ga je treba dodatno filtrirati, potem pa postane slika bolj realistična:


Trde sence, mehke nefiltrirane in mehke filtrirane sence

Razvijalci iz studia SEED posebej poudarjajo, da čeprav so njihove raziskave hibridnega upodabljanja v zgodnji fazi, ta pristop omogoča zamenjavo številnih vdorov s kopico objektivnih pomanjkljivosti z enotnim pristopom sledenja žarkom, ki zagotavlja boljšo kakovost upodabljanja. Še posebej pomembno je, da imajo zdaj razvijalci programske opreme en sam, splošno sprejet API za sledenje žarkom in da je potrebno samo nadaljnje izboljšanje algoritmov tako za izboljšanje kakovosti upodabljanja kot za optimizacijo njegove učinkovitosti, saj sledenje žarkom ostaja dokaj zahtevno glede strojne opreme. .

Trenutno demo program Pica Pica izračuna le 2,25 žarkov na slikovno piko (skupaj, vključno z vsemi učinki), rezultat pa je fotorealistična slika s kakovostjo, ki je blizu polnemu sledenju, čeprav z nekaterimi omejitvami. In zdaj - muha v mazilo: kot v primeru demo Epic Games, moramo za pospešitev postopka upodabljanja še vedno uporabljati zmogljivosti več vrhunskih grafičnih procesorjev hkrati in prenesti minimalno količino podatkov prek relativno počasnega PCI. Ekspresni avtobus. Toda nadaljnji razvoj pospeševanja strojne opreme na grafičnih procesorjih bi nam moral pomagati, da se v prihodnosti znebimo takšnih sistemskih zahtev.

Poskusi z DirectX Raytracing v Northlight (Remedy Entertainment)

Drugi demo program za promocijo DXR in RTX, predstavljen na GDC 2018, so bili poskusi z motorjem za igre Northlight Engine Finsko podjetje Remedy Entertainment, javnosti poznan po igrah, kot sta Max Payne, Alan Wake in Quantum Break. Northlight Engine intenzivno razvija podjetje, ki je znano po zanimanju za najnovejše grafične tehnologije. Zato ni čudno, da so se začeli zanimati za strojno pospešeno sledenje žarkom.

Na GDC je podjetje pokazalo razvoj, na katerem so delali z Nvidio in Microsoftom. Med številnimi razvijalci je Remedy prejel zgodnji dostop do Nvidijinih zmogljivosti RTX in DXR API, ki so bile utelešene v posebni različici motorja Northlight. Glavni grafični programer Tatu Aalto je predstavil govor na konferenci "Poskusi z DirectX Raytracing v Remedyjevem Northlight Engineu", v katerem je spregovoril o značilnostih hibridnega pristopa, ki so ga sprejeli.


Ta predstavitev tradicionalno uporablja rastrizacijo za hitrost in sledenje žarkom za nekatere učinke, ki bi jih sicer težko izvedli. Izboljšave kakovosti vključujejo fizično zasnovane mehke sence, visokokakovostno globalno okluzijo in osvetlitev ter realistične odseve. Video prikazuje rezultat Northlight Engine z vsemi omogočenimi učinki, izračunan s sledenjem žarkom s povečanim številom izračunanih žarkov:

Za izvajanje poskusov o uvajanju sledenja žarkom je Remedy ustvaril novo sceno, ki nikakor ni bila povezana z igrami podjetja. Kot smo že povedali, DXR API podpira dve ravni struktur pospeševanja: spodnjo in zgornjo. Ideja je, da je struktura spodnje ravni namenjena shranjevanju geometrije, zgornja raven pa vsebuje strukture nižje ravni. To pomeni, da je vsaka poligonalna mreža ena struktura nižje ravni, vsaka zgornja raven pa vsebuje več struktur nižje ravni z možnimi geometrijskimi transformacijami (rotacije itd.).


Struktura nižje ravni je potrebna za statične dele scene; rdeči kvadratki v diagramu so meje drevesa nižje ravni. Na primer, v prizoru so štirje primeri majhnega stola (majhni rdeči kvadrati), ki imajo enako geometrijo, vendar lastne geometrijske transformacije. Srednji kvadrati so majhne sedežne garniture, veliki kvadrati so velike okrogle sedežne garniture. Če želite ustvariti sceno sledenja žarkom, morate te strukture nižje ravni vstaviti v strukturo najvišje ravni, za katero ima DXR API posebno funkcijo, ki sprejme več primerkov strukture nižje ravni s transformacijami.

Delo z dinamično spreminjajočo se geometrijo je nekoliko težje, saj graditelj na nižji ravni sprejema samo statične medpomnilnike. A tudi tu je možna deformacija – s pomočjo računalniškega senčila, ki sprejme geometrijo in skinning matrike ter zapiše že spremenjeno geometrijo. Nato lahko začnete delati na izračunu žarkov.

Najprej vzemimo ambientalno okluzijo, algoritem, ki temelji na vidljivosti, ki ga je mogoče preprosto implementirati s sledenjem žarkom. Naslednja slika je bila ustvarjena z upodabljanjem štirih žarkov na slikovno piko, z največjo dolžino, nastavljeno na štiri metre, in rezultat je vsekakor videti boljši od metode SSAO, ki uporablja samo prostor na zaslonu.


Leva polovica prikazuje tradicionalno metodo izračuna globalne okluzije, tista s sledenjem žarkom pa je na desni. Čeprav tehnika SSAO dobro opravi delo pri zajemanju nekaterih robov, ji očitno manjkajo geometrijske informacije o prizoru – takšni algoritmi ne vedo, kaj je izven zaslona ali za površinami, ki jih vidi kamera. Zato rezultat očitno ni idealen, čeprav je očitno boljši kot brez senčenja.

Na žalost je zmogljivost sledenja žarkom razmeroma nizka in veliko dražja od metod zaslonskega prostora. Po navedbah Remedyja v njihovem predstavitvenem programu upodabljanje enega žarka na slikovno piko za globalno okluzijo z največjo dolžino 4 metre pri ločljivosti Full HD traja približno 5 ms in lestvice zmogljivosti skoraj linearne, tako da bo upodabljanje 16 žarkov trajalo približno 80 ms. Ob nenehnem izboljševanju kakovosti seveda:


Ti posnetki zaslona so bili posneti z običajnim celozaslonskim izravnavanjem, ob upoštevanju časovne komponente (podatki iz prejšnjih okvirjev) in brez zapletenega filtriranja, kot je storjeno v večini drugih predstavitev, prikazanih na GDC. S pametnim zmanjševanjem šuma lahko dosežete sprejemljivo kakovost z 1-2 žarkoma na slikovno piko.

Poleg globalnega senčenja Remedy demo uporablja tudi sledenje žarkom za upodabljanje navadnih senc, ki zdaj pri rastriziranju najpogosteje uporabljajo kaskadne zemljevide senc ( kaskadne senčne karte - CSM). Razvijalci ugotavljajo, da če motor zapolni sence iz usmerjenih svetlobnih virov pred upodabljanjem osvetlitve, potem bo zelo enostavno zamenjati senčnik kaskadnega zemljevida senc s kodo, ki uporablja sledenje, ki bo zapisala izračunane podatke v isti medpomnilnik.


V tem primeru bo razlika v kakovosti očitno v korist sledi (prikazano na desni). Slika s sledenjem žarkom uporablja 8 žarkov na piksel brez dodatnega filtriranja, medtem ko tehnika CSM uporablja 16 Odstotno bližje filtriranje (PCM) vzorcev s posebnim filtrom, nanesenim na pufer. Vendar morate upoštevati, da razvijalci v tem primeru očitno niso optimizirali dela CSM, saj je bilo mogoče prilagoditi ločljivost zemljevidov senc in njihovo filtriranje, da bi dobili boljše sence, vendar je to le senca z privzete nastavitve svojega motorja.

A tudi ob upoštevanju tega popusta je razlika očitna - s sledenjem žarkom so sence veliko bolj realistične, imajo gladke robove brez nazobčanih robov, boljšo zamegljenost robov, tudi majhni detajli (nogice stola) mečejo fizično pravilno senco. . Končni rezultat so spodobne sence z mehkimi in trdimi senčnimi robovi točno tam, kjer bi morali biti. Prav tako lahko preprosto narišete sence iz območnih svetlobnih virov, kar je izjemno težko narediti z rastrizacijo.

Kar zadeva zmogljivost, ta predstavitev upodablja en žarek za ločljivost Full HD v manj kot 4 ms, kar je nekoliko hitreje kot globalna okluzija, čeprav so žarki daljši. Implementacija sledenja žarkom v obstoječi mehanizem za upodabljanje senc DX12 bo zahtevala več dni programerskega dela, vendar bo rezultat vreden, če bo zmogljivost na koncu zadostna.

Zdi se, da je Remedy v začetni fazi razvoja DXR svojemu motorju dodal skoraj vse možne učinke s sledenjem. Vključno z odsevi, upodobljenimi s sledenjem žarkom. Hkrati pa ni tako očitne uporabe v obliki čisto zrcalnih površin, temveč bolj subtilen pristop z odsevi na vseh predmetih, a manj očiten. Naslednji posnetek zaslona prikazuje primerjavo tehnik, ki uporabljajo sledenje žarkom (desno) in prostor na zaslonu (levo):


Sledena slika je bila pridobljena z upodabljanjem samo enega žarka odbojev na piksel brez filtriranja. Odsevi v prostoru na zaslonu so očitno manj realistični in upoštevajo samo predmete, ki jih vidi glavna kamera, medtem ko vam sledenje žarkov omogoča, da jih tudi prikažete, čeprav ima svoje pomanjkljivosti v obliki znatnega hrupa slikovnih pik. Toda to je načeloma mogoče rešiti, kot kažejo drugi demo programi, in v različici finskega podjetja zmanjšanje hrupa preprosto še ni uporabljeno, z izjemo uporabe vrednosti slikovnih pik iz prejšnjih okvirjev za celozaslonsko izravnavo.

Northlight Engine že uporablja izračun globalne osvetlitve ( G.I.) - posebej v igri Quantum Break in ta učinek je privzeto omogočen v motorju. Za izračun GI se uporabljajo vokseli velikosti približno 25 cm, ki se kombinirajo z rezultatom tehnike globalnega senčenja SSAO, ki uporablja prostor na zaslonu. Kot poskus je Remedy nadomestil SSAO s podobnim učinkom z uporabo sledenja žarkom in rezultat je bil boljši.


Vidi se, da površine niso zasenčene, kot bi morale biti in je z njimi očitno nekaj narobe. Težavo rešimo s spremembo metode uporabe volumetričnih podatkov GI, s katero odpravimo večino artefaktov:


Zakaj sploh potrebujete izračun globalne osvetlitve/senčenja in ali je mogoče brez tega izjemno zahtevnega koraka? Poglejte vizualni primer, kako izgleda rezultat izračuna samo neposredne osvetlitve:


Podobno kot Doom s svojo stalno temo in ostrimi šablonskimi sencami. Toda na naslednjem posnetku zaslona je neposredni osvetlitvi dodana tudi posredna osvetlitev - to so žarki svetlobe, ki se odbijajo od drugih predmetov v prizoru:


Postalo je veliko bolje, kljub hrupu je prizor pridobil volumen in ni videti, kot da so vsi njegovi predmeti v prostoru s prisotnostjo enega samega svetlega vira svetlobe (sonca). In tako je videti končna slika s prekritimi barvnimi informacijami, popolno osvetlitvijo in naknadno obdelavo:


Odsevi in ​​senčenje v prizoru so po našem mnenju videti zelo realistični. Svetilka zlasti odseva vse predmete, vključno s svetlim oknom, nevidnim glavni kameri. In skodelica na desni odseva lastno pero - tega ni mogoče storiti z rastrizacijo brez pametnih vdorov. Edina očitna težava pri sledenju je veliko hrupa pikslov, ki ga Remedy še ni poskušal odstraniti. Toda isti algoritem Nvidia GameWorks bi lahko veliko pomagal, da ne omenjam zmanjšanja hrupa z uporabo umetne inteligence.

Seveda bi bilo zelo lepo uporabiti sledenje žarkom, kjer koli je to mogoče, vendar je optimalna rešitev za hibridno upodabljanje optimizacija z uporabo senčnih zemljevidov, ki se uporabljajo v predstavitvi Remedy za večino svetlobnih virov, razen za sonce. In to bo sprva storjeno v vsaki aplikaciji s sledenjem žarkom, ker bo neposredna uporaba povsod predraga in še ni mogoča v realnem času, tudi z uporabo več grafičnih procesorjev hkrati.

Pomembno je, da je bila integracija podpore DXR in RTX v motor Northlight precej hitra in neboleča. Finski razvijalci so bili presenečeni nad tem, kako hitro jim je uspelo izdelati prototip izboljšane osvetlitve, senčenja in odsevov z uporabo sledenja žarkom – vse z veliko boljšo kakovostjo kot tradicionalni rasterizacijski vdori. Čeprav so prikazane tehnologije trenutno v zgodnjem razvoju in še zdaleč niso vključene v igre, je to odličen začetek za prihodnjo uporabo.

Sledenje žarkom v realnem času v Metro Exodus (igre 4A)

Verjetno bomo v prihodnjih letih videli več kot eno igro, ki uporablja hibridno upodabljanje s sledenjem žarkom za upodabljanje nekaterih učinkov. Zlasti prva (ali vsaj ena od prvih) bi morala biti igra Metro Exodus, ki bo uporabljal sledenje žarkom DXR z uporabo tehnologije Nvidia RTX za izračun globalne osvetlitve in senčenja.

Predpostavlja se, da ta metoda izračuna G.I. bo na voljo v igri kot alternativa bolj znanim algoritmom SSAO in IBL(osvetlitev na podlagi slike, osvetlitev na podlagi teksture okolja). Seveda je to še vedno izjemno omejena uporaba sledenja, vendar je kakovost globalne osvetlitve/senčenja s sledenjem žarkom veliko višja kot celo pri VXAO, da ne omenjam SSAO. Tukaj je vizualna primerjava metod zaslonskega prostora s sledenjem, ki so jo naši nemški kolegi posneli z zaslona razstavnega sistema (zato se vnaprej opravičujemo za kakovost):

Teksture so bile med demonstracijo izklopljene, tako da je bila jasno vidna razlika v osvetlitvi scene. In to je res, metode rastriranja zaslona dajejo ravno sliko, ki le nejasno posnema senčenje v kotih med robovi predmetov, sledenje žarkom pa daje fizično pravilno globalno senčenje in osvetlitev s temnimi sencami točno tam, kjer bi morale biti - na primer, poglejte v notranjost sod ob vstopu v hišo skozi razpoke - pri SSAO notri sploh ni zakrit, pri ray tracingu pa je v globini temen, kot mora biti.

Tukaj je samo eno vprašanje - če video prikazuje statično sceno, brez dinamičnih objektov in njihovega vpliva na globalno osvetlitev, kaj vam potem preprečuje, da bi najprej vse izračunali offline in te podatke vnesli v statične svetlobne karte? Zdi se nam, da bi bilo treba pri dinamičnem izračunu globalne osvetlitve v realnem času prizorišče za demonstracijo zmožnosti izbrati nekako bolj živahno, vsaj s premikajočimi se svetlobnimi viri, da o premikajočih se predmetih niti ne govorimo. V nasprotnem primeru se človek vpraša, zakaj igralci niso razumeli, kaj točno se jim je pokazalo in zakaj je to zdaj nemogoče narediti z rastrizacijo.

zaključki

Sledenje žarkom zagotavlja veliko boljšo kakovost slike v primerjavi z rastrizacijo in se že dolgo uporablja tam, kjer je to mogoče - v filmski industriji, oglaševanju, oblikovanju itd. Toda dolgo časa preprosto ni bilo primerno za upodabljanje v realnem času zaradi ogromnega vira intenzivnost - navsezadnje je treba za vsak piksel izračunati več žarkov, ki se odbijejo od predmetov v sceni in lomijo vanje. Pri upodabljanju brez povezave, ki ne zahteva hitrih rezultatov, je bil ta pristop vedno najkakovostnejši, pri grafiki v realnem času pa smo se morali zadovoljiti z rastrizacijo – najenostavnejšim in najhitrejšim načinom projiciranja 3D-scene na 2D-zaslon. Seveda ima visoka zmogljivost rastriranja to pomanjkljivost, da so le približni izračuni barve slikovnih pik v sceni, ki ne upoštevajo številnih dejavnikov: odboja svetlobnih žarkov, nekaterih lastnosti materialov itd. Rasterizacija, tudi s kupom zvitosti hacks, le približno reproducira prizor in tudi najbolj zapleteni slikovni in računalniški shaderji ne bodo zagotovili kakovosti polnega sledenja žarkom, preprosto na podlagi načela njihovega delovanja.

Objava API-ja DXR in tehnologije Nvidia RTX je razvijalcem omogočila, da začnejo raziskovati algoritme, ki uporabljajo visoko zmogljivo sledenje žarkom – morda najpomembnejša sprememba v grafiki v realnem času, odkar so bili predstavljeni programabilni senčniki. Zainteresirani razvijalci so javnosti že pokazali nekaj zelo impresivnih tehnoloških predstavitev z uporabo le majhnega števila vzorcev na slikovno piko med sledenjem in prihodnost igranja je v njihovih rokah. In v rokah proizvajalcev grafičnih procesorjev, ki bi morali izdati nove rešitve, ki podpirajo sledenje strojni opremi, kar se pričakuje v več projektih iger konec tega leta in v začetku naslednjega leta.

Seveda bodo prvi poskusi uporabe sledenja hibridni in resno omejeni v količini in kakovosti učinkov, na popolno sledenje pa bo treba čakati desetletja. Vsi prikazani demo programi uporabljajo 1-2 žarka na slikovno piko ali celo manj, medtem ko jih imajo profesionalne aplikacije na stotine! Če želite doseči kakovost upodobitev brez povezave v realnem času, morate še vedno čakati zelo dolgo. Toda zdaj je čas, da začnemo delati na uvajanju sledenja v obstoječe motorje in kdor bo prvi obvladal zmožnosti DXR, bo morda v prihodnosti pridobil določeno prednost. Poleg tega lahko sledenje žarkom olajša razvoj virtualnih svetov, saj bo odpravilo številne majhne naloge ročnega spreminjanja senc, svetlobnih zemljevidov in odsevov, kar je treba opraviti z nepopolnimi algoritmi rastriranja. Že zdaj je strojno pospešeno sledenje mogoče uporabiti v samem razvojnem procesu – za pospešitev stvari, kot je predhodno upodabljanje svetlobnih zemljevidov, odbojev in statičnih zemljevidov senc.

Obstaja veliko možnosti za optimizacijo hibridnega upodabljanja in zdi se, da je ena najbolj impresivnih lastnosti v zgoraj prikazanih primerih učinkovitost zmanjševanja šuma, ki je izjemno pomembna pri sledenju žarkom z majhnim številom vzorcev na slikovno piko – to je znano, kdorkoli je že kdaj videl delo offline sledilnikov, ki sliko renderirajo postopoma in je na samem začetku izjemno hrupno. Pristop z majhnim številom izračunanih žarkov in dodatnim zmanjšanjem šuma omogoča pridobitev sprejemljive končne kakovosti v delčku časa, ki je potreben za celotno sledenje scene. In to kljub dejstvu, da zmožnosti umetne inteligence pri zmanjševanju hrupa še niso bile izkoriščene, čeprav je to mogoče storiti.

Globalnih zmožnosti sledenja žarkom ne bi smeli soditi samo po naglo izdanih predstavitvenih programih. Namenoma poudarjajo glavne učinke, saj gre za tehnološke predstavitve, narejene z enim samim namenom. Slika s sledjo žarkov na splošno postane veliko bolj realistična, vendar uporabniki ne razumejo vedno, kam točno naj pogledajo, tudi če se jim zdi, da je na splošno postala bolj verjetna. Še posebej, če razlika na začetku ni tako velika in so se množice pripravljene sprijazniti z artefakti, ki so del algoritmov za izračun odbojev in globalnega senčenja v prostoru zaslona ter drugih rasterizacijskih vdorov.

Toda s fizično pravilno globalno osvetlitvijo, senčenjem in odboji, izračunanimi s sledenjem žarkom, postane upodobljena slika bolj realistična tudi brez prisotnosti spektakularnih ogledal in drugih jasno odsevnih površin. Sodobne igre skoraj vedno uporabljajo fizično zasnovano upodabljanje, pri katerem imajo materiali lastnosti hrapavosti in odbojnosti, pa tudi kubične zemljevide okolja, tako da so odsevi vedno prisotni, tudi če niso vidni s prostim očesom. V takšni igri lahko hitro zamenjate kockaste zemljevide okolja s sledenjem, kar ponuja to možnost lastnikom visoko zmogljivih sistemov. Sledene sence so prav tako videti bolje in rešujejo temeljne težave zemljevidov senc, čeprav so nekatere od njih rešene v zapletenih naprednih algoritmih, kot je npr. Nvidia Hybrid Frustum Traced Shadows (HFTS), tudi z uporabo neke oblike sledenja, vendar je enoten pristop še vedno najboljši. Upodabljanje zelo mehkih senc iz območnih svetlobnih virov lahko v večini primerov ustvari idealne, ultrarealistične sence.

Glavna težava sledenja je v tem, da vse prve izvedbe ne bodo takoj videti opazno bolje kot zapletene metode zaslonskega prostora, vendar lahko zagotovo rečemo, da je to točno smer, v katero se moramo premakniti, da dosežemo fotorealizem. Ker imajo algoritmi prostora na zaslonu temeljne omejitve, ki jih ni mogoče preskočiti. V mnogih pogledih je slika celo obstoječih predstavitvenih programov precej dobra, tudi če jo upodablja več zmogljivih grafičnih procesorjev in uporablja zapleteno zmanjšanje hrupa. Za zdaj moramo uporabljati majhno število žarkov na piksel in dušiti šum, v prihodnosti pa bomo to rešili s pomočjo primitivnega ekstenzivnega razvoja. To so le prvi testi s sledenjem žarkom v realnem času; v prihodnosti se bo kakovost slike povečala skupaj z zmogljivostjo.

Zaenkrat bomo v naslednjih nekaj letih lahko vključili eno ali dve novi tehniki, ki uporabljata sledenje žarkom za dopolnitev rastrizacije ali nadomestitev le dela njenega dela. To se vedno naredi na začetku življenja novih tehnologij, ko je mogoče onemogočiti nove algoritme, ki so pretežki za povprečen igralni računalnik. Če pa se osredotočate samo nanje, potem napredka enostavno ne bo. In Nvidijina podpora za sledenje strojni opremi je pomembna, ker vedo, kako pomagati razvijalcem pri implementaciji novih tehnologij. In prepričani smo, da Metro Exodus še zdaleč ni edina igra, v kateri Nvidia promovira sledenje, saj z razvijalci iger sodelujejo pri več projektih hkrati. Razvpito Tim Sweeney iz Epic Games je napovedal, da bodo GPE v dveh letih pridobili zadostno zmogljivost za široko uporabo sledenja žarkom v igrah, in lahko verjamete.

Razvijalci, ki so najbližje Microsoftu, so začeli raziskovati zmogljivosti DXR pred skoraj enim letom in to je šele začetek novega API-ja. Poleg tega na trgu preprosto ni razpoložljivih grafičnih rešitev, ki podpirajo strojno pospeševanje sledenja. Objava DXR je namenjena spodbujanju razvijalcev strojne in programske opreme, da začnejo delati na razumevanju in optimizaciji sledenja žarkom ter začnejo zgodnjo fazo uvajanja novih tehnologij v igre. Zainteresirani razvijalci so že začeli eksperimentirati z DXR in sodobnimi grafičnimi procesorji, podjetja, kot so Epic Games, Futuremark, DICE, Unity in Electronic Arts, pa so celo objavila načrte za uporabo zmogljivosti DXR v prihodnjih različicah motorjev za igre in iger.

Verjetno bodo navdušenci morali počakati (to je naš del), da bodo strojno pospešeni grafični procesorji na voljo, da bodo lahko videli celo prve učinke sledenja žarkom, saj je osnovna raven podpore prek računalniških senčil morda prepočasna za še enostavnejše algoritme. Igre, ki smiselno uporabljajo DXR, bodo zahtevale strojno podporo za sledenje, ki bo sprva na voljo samo na Nvidia Volta, vendar grozi, da se bo sčasoma aktivno izboljšala. Možno je tudi, da se bodo pojavile relativno preproste igre s stilizirano grafiko, ki bodo uporabljale izključno sledenje žarkom.

Druga pomembna točka je, da trenutna generacija igralnih konzol ne podpira strojnega pospeševanja sledenja žarkom, Microsoft ni rekel ničesar o DXR v Xbox One. Najverjetneje takšne podpore preprosto ne bo, kar bi lahko postalo še ena ovira za aktivno uporabo zmožnosti sledenja žarkom v igrah. Čeprav ima Xbox One skoraj popolno podporo za DirectX 12, nima strojne enote za pospešitev sledenja, tako da obstaja velika verjetnost, da bo vsaj do naslednje generacije konzol omejen na nekaj sledenja žarkom. učinke v nekaj projektih iger, ki jih podpira Nvidia in promovira svojo tehnologijo RTX. Res bi rad, da se motim, saj so navdušenci nad računalniško grafiko že čakali na takšne globalne izboljšave pri upodabljanju v realnem času.

Tehnike sledenja žarkom danes veljajo za najmočnejše metode za ustvarjanje realističnih slik. Vsestranskost metod sledenja je v veliki meri posledica dejstva, da temeljijo na preprostih in jasnih konceptih, ki odražajo naše izkušnje dojemanja sveta okoli nas.

Poglejmo, kako nastane slika. Sliko ustvari svetloba, ki vstopi v kamero. Izpustimo veliko žarkov iz svetlobnih virov. Imenujmo jih primarni žarki. Nekateri od teh žarkov bodo odleteli v prosti prostor, nekateri pa bodo zadeli predmete. Žarki se na njih lahko lomijo in odbijajo. V tem primeru bo del energije žarka absorbiran. Lomljeni in odbiti žarki tvorijo veliko sekundarnih žarkov. Nato se ti žarki spet lomijo in odbijajo ter tvorijo novo generacijo žarkov. Sčasoma bodo nekateri žarki zadeli kamero in oblikovali sliko.

Obstajajo algoritmi, ki delujejo po tem algoritmu. Vendar so izjemno neučinkoviti, saj večina žarkov, ki izhajajo iz vira, ne doseže kamere. Toda sprejemljivo sliko dobite, če sledite velikemu številu žarkov, kar bo trajalo zelo dolgo. Ta algoritem se imenuje neposredno sledenje žarkom.

Metoda obratnega sledenja žarkom lahko bistveno zmanjša iskanje svetlobnih žarkov. To metodo sta v osemdesetih letih razvila Whitted in Kaye. Pri tej metodi se žarki ne sledijo iz virov, temveč iz kamere. Tako se sledi določeno število žarkov, ki je enako ločljivosti slike.

Predpostavimo, da imamo kamero in zaslon na razdalji h od nje. Razdelimo zaslon na kvadratke. Nato bomo izmenično risali žarke od kamere do središča vsakega kvadrata (primarni žarki). Poiščimo presečišče vsakega takega žarka z objekti scene in med vsemi presečišči izberimo tisto, ki je najbližje kameri. Nato z uporabo želenega modela osvetlitve lahko dobite sliko scene. To je najpreprostejša metoda sledenja žarkom. Omogoča samo rezanje nevidnih robov.

Lahko pa gremo še dlje. Če želimo simulirati pojave, kot sta odboj in lom, moramo izstreliti sekundarne žarke iz najbližjega presečišča. Na primer, če površina odbija svetlobo in je popolnoma ravna, potem je potrebno odbiti primarni žarek od površine in v to smer poslati sekundarni žarek. Če je površina neravna, je potrebno sprožiti veliko sekundarnih žarkov. Tega v programu ne naredimo, saj bo to močno upočasnilo sledenje.

Če je predmet prozoren, je treba sestaviti sekundarni žarek tako, da ob lomu ustvari originalni žarek. Nekatera telesa imajo lahko lastnost difuznega loma. V tem primeru ne nastane en, ampak veliko lomljenih žarkov. Tako kot pri razmišljanju tudi to zanemarjam.

Tako se primarni žarek, ki je našel presečišče s predmetom, običajno razdeli na dva žarka (odbitega in lomljenega). Nato se ta dva žarka razdelita še na dva in tako naprej.

Glavni postopek obratnega sledenja žarkom v mojem programu je postopek Ray. Ima naslednjo strukturo:

Če je generacija žarka enaka največji globini rekurzije, vrnemo povprečno svetlost vseh komponent. Če ne, potem naprej

Določimo najbližji trikotnik, s katerim se žarek seka.

Če takega trikotnika ni, vrnite barvo ozadja, če obstaja, nadaljujte.

Če je ploskev, s katero smo našli presečišče, odbojna, potem oblikujemo odbit žarek in rekurzivno pokličemo postopek žarka, pri čemer se generacija žarka poveča za 1.

Če se ploskev, s katero smo našli presečišče, lomi, potem oblikujemo lomljeni žarek in rekurzivno pokličemo postopek Ray s povečano generacijo žarka za 1.

Končno osvetlitev piksla določimo ob upoštevanju lokacije virov, lastnosti materiala, pa tudi jakosti odbitega in lomljenega žarka.

Razpravljal sem že o številnih omejitvah metode sledenja, ko smo govorili o difuznem lomu in neravnih zrcalih. Poglejmo še nekatere druge.

Samo posebni predmeti - viri svetlobe - lahko osvetlijo prizorišče. So točkasti in ne morejo absorbirati, lomiti ali odbijati svetlobe.

Lastnosti odsevne površine so sestavljene iz dveh komponent - difuzne in zrcalne.

Pri razpršenem odboju se upoštevajo samo žarki svetlobnih virov. Če vir osvetli točko skozi ogledalo (z zajčkom), se šteje, da točka ni osvetljena.

Tudi zrcalnost je razdeljena na dve komponenti.

odboj - upošteva odboj od drugih predmetov (ne virov svetlobe)

zrcalno - upošteva bleščanje svetlobnih virov

Sledenje ne upošteva odvisnosti od valovne dolžine svetlobe:

lomni količnik

absorpcijski koeficient

odbojni koeficient

Ker ne modeliram difuznega odboja in loma, ne bom mogel dobiti osvetlitve ozadja. Zato uvajamo minimalno osvetlitev ozadja. Pogosto vam preprosto omogoča bistveno izboljšanje kakovosti slike.

Algoritem sledenja vam omogoča risanje zelo kakovostnih senc. To ne bo zahtevalo veliko predelave algoritma. Temu boste morali nekaj dodati. Pri izračunu osvetlitve točk je treba v vsakem od svetlobnih virov postaviti "senčno fronto". "Senčna fronta" je žarek, ki preverja, ali obstaja kaj med točko in izvorom. Če je med njima neprozoren predmet, je točka v senci. To pomeni, da ta vir ne prispeva h končni osvetlitvi točke. Če leži prozoren predmet, se intenziteta vira zmanjša. Risanje senc je zelo zamudno. Torej so v nekaterih situacijah onemogočeni.

Moj program ima možnost omogočiti glajenje slike. Antialiasing je tisto, kar počne za določanje barve slikovne pike. Ne sproži se en žarek, ampak štirje in določi se povprečna vrednost barve teh žarkov. Če je treba najti barvo piksla (i,j), se pošljejo 4 žarki na točke na ravnini zaslona s koordinatami (i-0,25,j-0,25), (i-0,25,j+0,25), (i+0,25,j-0,25) , (i+0,25,j+0,25).

Ministrstvo za izobraževanje Ruske federacije

Moskovski državni inštitut za elektroniko in matematiko

(Tehnična univerza)

Oddelek za informiranje in komuniciranje

tehnologije

Tečajna naloga na temo:

“Analiza možnosti uporabe metode sledenja žarkom v 3D modeliranju”

Dokončano:

Gulijan Boris

Podzorov Ivan

Skupina C -35

Moskva 2010

1. 3D grafika. Uvod

3. Algoritmi za sledenje žarkom

4. Glavne prednosti in slabosti sledenja žarkom

5. Uporaba metode sledenja žarkom

6. Eksperimentirajte.

Naloga: "Analiza možnosti uporabe metode sledenja žarkom v 3D modeliranju"

Oblikovanje problema

Seznanite se z metodo sledenja žarkom in njeno uporabo na področju 3D grafike, izvedite poskus z enim od algoritmov sledenja žarkom.

V našem poskusu upoštevamo:
1) delovanje algoritma za sledenje žarkom glede na število poligonov modela (kot model so vzete 3 kroglice: mat, prozorna in zrcalna).

2) Analiza dobljenih slik s sledenjem žarkom in brez njega.

Kot okolje za poskus se uporablja programska oprema Blender.

3D grafika. Uvod.

Tridimenzionalna grafika je del računalniške grafike, nabor tehnik in orodij, namenjenih upodabljanju tridimenzionalnih objektov. Najpogosteje se uporablja za ustvarjanje slik na ravnini zaslona ali lista tiskanega materiala v arhitekturni vizualizaciji, zabavni industriji, tiskanih materialih, pa tudi v znanosti, industriji in tehnologiji obogatene resničnosti.

Vsako 3D sliko določajo naslednji parametri in predmeti:

· Geometrija (konstruiral medels)

· Materiali (podatki o vizualnih lastnostih modela)

· Viri svetlobe (smer, moč, nastavitve svetlobnega spektra)

· Virtualne kamere (izbira točke in kota projekcije)

· Sile in udarci (nastavitve za dinamična popačenja objektov, ki se uporabljajo predvsem v animaciji)

· Dodatni učinki (predmeti, ki simulirajo atmosferske pojave: svetloba v megli, oblaki, plameni itd.)

Naloga tridimenzionalnega modeliranja je opisati te predmete in jih postaviti na sceno z uporabo geometrijskih transformacij v skladu z zahtevami za prihodnjo sliko.

Glavna težava 3D grafike in modeliranja je pridobitev najbolj fotorealistične slike z minimalno porabo računalniških virov in časa za obdelavo scene. Ker so potrebe na različnih področjih različne, se za rešitev določenega problema ustvarijo različne ideje in algoritmi. Ena taka ideja je sledenje žarkom, ki si ga bomo ogledali v našem delu.

Sledenje žarkom naprej in nazaj

Sledenje žarkom je metoda obdelave 3D modelov za izdelavo fotorealistične slike, ki upošteva relativni položaj predmetov, pa tudi fizične lastnosti predmetov, kot sta odsevna in lomna sposobnost.

Obstajata 2 načina sledenja žarkom: naprej in nazaj

Neposredno sledenje žarkom upošteva vse žarke iz svetlobnih virov, ki zadenejo predmete in na koncu dosežejo opazovalčevo oko. Toda ta metoda ni racionalna z vidika izvedbe, saj mora obdelati vse žarke okolja (odhajajoče in lomljene) v vseh smereh, vključno s tistimi, ki ne padejo na opazovalcu vidno prizorišče.

Pri obratnem sledenju žarkom vsi žarki izvirajo iz očesa opazovalca in s tem definirajo prizor s predmeti, ki bodo obdelani pozneje. Ta metoda vam omogoča, da se izognete obdelavi predmetov, ki ne spadajo v vidno območje, kar znatno zmanjša količino potrebnih izračunov.

Vsi algoritmi sledenja žarkom temeljijo na inverzni metodi sledenja žarkom.

Algoritmi sledenja žarkom

Oglejmo si osnovni algoritem sledenja (slika 1). Vzemimo kroglo kot predmet.

1. Za vsako slikovno piko na zaslonu se iz opazovalčevega očesa sproži žarek.

2. Ko žarek preseka predmet, se določi:

· Transparentnost/motnost objekta. Če je predmet prozoren, se iz presečišča oddaja lomni žarek, če je neprozoren, se ne oddaja.

· Svetloba/senca. Iz točke, kjer žarek seka krogle, se na svetlobni vir (ali izmenično za vsak svetlobni vir, če jih je več) izseva žarek. Če ta žarek ne seka drugih neprozornih predmetov ali površin, potem vir svetlobe neposredno vpliva na osvetlitev dane točke. Če je svetlobnih virov več, se učinek, ki ga določa RGB vrednost določene točke, izračuna iz vpliva vseh žarkov.

· Odsevnost. Če je predmet sposoben odbijati žarke, potem se od točke, kjer žarek seka kroglo, odbiti žarek oddaja na predmete, ki se bodo odbili v krogli.

Posledično dobimo več vrst žarkov. Primarni žarki se uporabljajo za določanje vidnosti predmeta, sekundarni žarki pa se delijo na:

· lomni žarki;

· žarki sence/svetlobe;

Odsevni žarki.

riž. 1 Diagram algoritma za sledenje žarkom


Vsi drugi algoritmi temeljijo na zgoraj prikazanem algoritmu in so zasnovani za optimizacijo izračunov.

kd-drevo

Algoritem za gradnjo kd-drevesa lahko predstavimo na naslednji način (pravokotni paralelepiped bomo imenovali angleška beseda "box").

1. "Dodaj" vse primitive v omejevalni okvir. To pomeni, zgradite polje, ki omejuje vse primitive, ki bodo ustrezali korenskemu vozlišču drevesa.

2. Če je v vozlišču malo primitivov ali je bila dosežena omejitev globine drevesa, dokončajte konstrukcijo.

3. Izberite razcepljeno ravnino, ki deli dano vozlišče na dve podrejeni vozlišči. Imenovali jih bomo desno in levo vozlišče drevesa.

4. Levemu vozlišču dodajte primitive, ki se sekajo z levim poljem vozlišča, v desno pa primitive, ki se sekajo z desnim poljem vozlišča.

5. Za vsako vozlišče izvedite ta algoritem rekurzivno, začenši od 2. koraka.

Redna mreža

Celoten 3D prostor je razdeljen na fino pravilno mrežo, sestavljeno iz N*N*N kock. Ideja je, da lahko tečete samo skozi tiste kocke, skozi katere je šel žarek.

Metoda se v praksi ne uporablja.

Dprednosti in slabosti

Poleg dejstva, da metoda sledenja žarkom daje najbolj fotorealistično sliko, ima še vrsto drugih prednosti:

1. Sposobnost upodabljanja gladkih predmetov brez njihove interpolacije s poligonalnimi površinami (na primer trikotniki).

2. Računska zahtevnost metode je rahlo odvisna od kompleksnosti scene.

3. Visoka algoritemska vzporednost izračunov - sledite lahko dvema ali več žarkoma vzporedno in neodvisno.

4. Z metodo sledenja žarkom se odsevi prikažejo popolno (slika 2) in brez zapletenih algoritmov, saj vse izračuna glavni algoritem upodabljanja.

font-size:14.0pt"> Slika 2 Odseva dveh zrcalnih kroglic druga v drugi

Metoda sledenja žarkom ima slabosti, opažene pri vseh algoritmih, ki določajo obseg uporabe te metode.

1. Glavna pomanjkljivost tega algoritma upodabljanja je njegova počasnost. Vendar je algoritem sledenja žarkom zelo vzporeden in število procesorskih jeder se vsako leto povečuje, zato bi morali videti linearno rast zmogljivosti sledenja žarkom. Toda ta pristop ne upošteva sekundarnih žarkov (odboji, lomi in zaznavanje senčenja), upodabljanje s primarnimi žarki pa praktično ne zagotavlja izboljšanja kakovosti slike v primerjavi s klasičnim algoritmom.

2. Težava s sekundarnimi žarki je, da nimajo popolnoma nobene koherence (sosmernosti). Pri prehodu iz enega piksla v drugega je treba izračunati povsem druge podatke, kar izniči vse običajne tehnike predpomnjenja, ki so zelo pomembne za dobro delovanje. To pomeni, da je izračun sekundarnih žarkov zelo odvisen od spominskih zakasnitev.

3. Pomanjkanje strojne podpore za metodo (vsi grafični procesorji so specializirani za rastriranje).

4. Druga pogosta težava pri sledenju žarkom je anti-aliasing (AA). Žarki so narisani kot preprosta matematična abstrakcija in ne upoštevajo realne velikosti. Preizkus presečišča trikotnika je preprosta logična funkcija, ki daje odgovor da ali ne, vendar ne daje podrobnosti, kot je "žarek seka trikotnik 40 % poti." Neposredna posledica tega učinka bo pojav "lestev" (slika 3).

riž. 3 glajenje senc

In edina tehnologija, ki lahko daje dobre rezultate, je izračun več žarkov, kot je slikovnih pik, to je supervzorčenje (Oversampling ali Anti-Aliasing) (upodabljanje pri višji ločljivosti).

Ne pozabite tudi, da sta hitrost in kakovost upodabljanja s sledenjem žarkom zelo odvisni od optimizacije kode.

Uporaba metode sledenja žarkom

Zaradi svojih lastnosti (fotorealistična slika, počasni izračuni) se ta metoda uporablja na področjih, kjer je pomembna kakovost slike in ne čas njenega upodabljanja (v tem primeru se najpogosteje uporabljajo kombinirane metode upodabljanja, kar izboljša zmogljivost ). Ta področja vključujejo:

· 3D animacija;

· posebni učinki filmske industrije;

· Realistično upodabljanje fotografij;

· Cad sistemi.

Posebni pogoji:

Poligonalna mreža je zbirka vozlišč in poligonov, ki določajo obliko prikazanega predmeta.

Upodabljanje - (angleško upodabljanje - "vizualizacija") - postopek pridobivanja slike iz modela.

Tu je model opis kakršnih koli predmetov ali pojavov v strogo določenem jeziku ali v obliki podatkovne strukture. Takšen opis lahko vsebuje geometrijske podatke, položaj opazovalčeve točke, podatke o osvetlitvi, stopnjo prisotnosti neke snovi itd.


Slika 4. poligonalna mreža

Eksperimentirajte.

Kot programsko opremo za izvedbo eksperimenta smo izbrali urejevalnik Blender 3D.

Je zelo enostaven za učenje in vsebuje vse potrebne funkcije:

· Upodabljanje slike z možnostjo priklopa in odklopa sledilnika.

· Preveliko vzorčenje (anti-aliasing ali anti-aliasing)

Izmerili smo čas, potreben za upodabljanje 3 različnih krogel (steklo, ogledalo in mat) na različnih Multeris Equals (vsaka raven poveča število poligonov za 4-krat). Ko se je raven dvignila, se je čas štel od 0.

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

Lv. Multeris

Čas upodabljanja za vsako raven. od 0

Brez RayT [c]

Z 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.

Upodabljanje je bilo izvedeno z maksimalnimi parametri za povečanje razlike v hitrosti obdelave.

Kot rezultat vidimo, da je čas, porabljen za obdelavo treh krogel z nivojem 4 (256 poligonov na vsaki krogli), manjši od časa, porabljenega za obdelavo krogel z nivojem 2 (16 poligonov na vsaki).


Slika 5. Poligonalne mreže za različne ravni

Spodnja črta

Iz izvedenega poskusa je razvidno, da je čas, porabljen za upodabljanje 3 žog z uporabo sledenja žarkom, znatno večji od časa, porabljenega za upodabljanje brez uporabe sledenja žarkom. Toda med eksperimentom je bilo opaženo zanimivo opažanje: čas za obdelavo 3, 4 in 5 nivojskih modelov je krajši od časa za obdelavo dvonivojskega modela.

Analiza nastalih slik:
1) Na sliki, dobljeni brez uporabe sledenja žarkom (v nadaljevanju A), je jasno, da prozorna krogla ne daje učinka leče (z alfa kanalom), medtem ko je na sliki z uporabo sledenja žarkom (v nadaljevanju B) prozorna krogla poveča predmete onstran njega (slika 6).

riž. 6 prozornih krogel (alfa kanal na levi, sledenje žarkom na desni)


2) Na sliki A ni zrcalne krogle, ker pridobivanje odboja na njej temelji na sledenju žarkom (slika 7).

Slika 7. Eksperimentalni model (alfa kanal zgoraj, sledenje žarkom spodaj).


3) Slika 8 prikazuje, da se pri upodabljanju brez uporabe sledenja žarkom osvetlijo notranje votline, kamor po logiki svetloba ne bi smela prodreti.


Slika 8 Vpad svetlobe na konkavnost v krogli (A na levi, B na desni)

Iz te analize je razvidno, da je kakovost slik s sledenjem žarkom bistveno boljša od slik, pridobljenih brez njega, kar upravičuje uporabo te metode na področjih, kjer je pomembna kakovost nastale slike in ne čas njene obdelave.


Zdi se, da je v zadnjih nekaj letih sledenje žarkom postalo "sanje številka ena" sveta 3D grafike v realnem času. Zanimanje za to tehnologijo upodabljanja je doseglo vrhunec, ko je mladi raziskovalec Daniel Pohl leta 2004 napovedal svoj projekt o tej tehnologiji.

Razlog za zanimanje širše javnosti za delo je bil v veliki meri posledica Pohlove osredotočenosti na znane igre id Software Quake III, Quake IV in franšizo strelcev Quake Wars 3D. Raziskovalec je pritegnil veliko pozornosti medijev in igralci so začeli sanjati o svetli prihodnosti, ko bodo njihove najljubše igre upodobljene s sledenjem žarkom in se znebili rastrizacije.

Intel je hitro opazil projekt in podjetju se je zdel idealen način za utemeljitev povečanja števila jeder v procesorjih. Podjetje je hitro zagnalo lasten raziskovalni program in danes Intel nikoli ne zamudi priložnosti, da poudari, da je sledenje žarkom prihodnost igranja 3D v realnem času. Toda ali je res tako? Katere tehnološke realnosti se skrivajo za marketinškim pompom? Kakšne so resnične prednosti sledenja žarkom? Ali lahko pričakujemo, da bo sledenje žarkom nadomestilo rastrizacijo? Na ta vprašanja bomo poskušali odgovoriti.


Kliknite na sliko za povečavo.

Osnovna načela

Osnovna ideja sledenja žarkom je zelo preprosta: za vsako slikovno piko na zaslonu mehanizem za upodabljanje nariše neposreden žarek iz opazovalčevega očesa (kamere) na element upodobljene scene. Prvo presečišče se uporablja za določitev barve slikovne pike kot funkcije površine elementa, ki ga seka.

Toda samo to ni dovolj za ustvarjanje realističnega prizora. Določiti je treba osvetlitev piksla, kar zahteva risanje sekundarnih žarkov (v nasprotju s primarnimi žarki, ki določajo vidnost različnih predmetov, ki sestavljajo sceno). Za izračun učinkov osvetlitve scene se sekundarni žarki narišejo iz presečišč v različne vire svetlobe. Če te žarke blokira predmet, potem je ta točka v senci, ki jo meče zadevni vir svetlobe. V nasprotnem primeru vir svetlobe vpliva na osvetlitev. Vsota vseh sekundarnih žarkov, ki dosežejo vir svetlobe, določa kakovost osvetlitve, ki zadene naš element scene.

A to še ni vse. Da bi dosegli najbolj realistično upodabljanje, je treba upoštevati lastnosti odboja in loma materiala. Z drugimi besedami, vedeti morate, koliko svetlobe se odbije na točki, kjer seka primarni žarek, kot tudi količino svetlobe, ki prehaja skozi material na tej točki. Ponovno je treba narisati odbojne in lomne žarke, da se izračuna končna barva slikovnih pik.

Posledično dobimo več vrst žarkov. Primarni žarki se uporabljajo za določanje vidnosti predmeta in so podobni nekakšnemu medpomnilniku Z, ki se uporablja pri rastrizaciji. In sekundarni žarki so razdeljeni na naslednje:

  • žarki sence/svetlobe;
  • odbojni žarki;
  • lomni žarki.

Klasični algoritem sledenja žarkom. Kliknite na sliko za povečavo.

Ta algoritem za sledenje žarkom je rezultat dela Turnerja Whitteda, raziskovalca, ki je izumil algoritem pred 30 leti. Do takrat je algoritem sledenja žarkom deloval samo s primarnimi žarki. In izboljšave, ki jih je naredil Whitted, so se izkazale za velik korak k realizmu pri upodabljanju prizorov.

Če ste seznanjeni s fiziko, ste verjetno opazili, da algoritem sledenja žarkom deluje »v nasprotni smeri« od pojavov, ki se dogajajo v resničnem svetu. V nasprotju s splošnim prepričanjem v srednjem veku naše oči ne oddajajo svetlobnih žarkov, temveč prejmejo svetlobne žarke iz svetlobnih virov, ki se odbijajo od različnih predmetov okoli nas. Načeloma so tako delovali prvi algoritmi za sledenje žarkom.

Toda glavna pomanjkljivost prvih algoritmov je bila velika računalniška obremenitev. Za vsak vir svetlobe morate oddati na tisoče žarkov, od katerih mnogi sploh ne bodo vplivali na upodobljeno sceno (ker ne sekajo slikovne ravnine). Sodobni algoritmi sledenja žarkom so optimizacije osnovnih algoritmov in uporabljajo tako imenovano reverzno sledenje žarkom, saj se žarki rišejo v nasprotni smeri od realnosti.


Izvirni algoritem sledenja žarkom je povzročil veliko nepotrebnih izračunov. Kliknite na sliko za povečavo.

Prednosti sledenja žarkom

Kot ste že videli, je glavna prednost metode sledenja žarkom njena preprostost in eleganca. Algoritem uporablja samo en primitivni objekt za prikaz učinkov, ki pogosto zahtevajo netrivialen pristop in zapletene tehnologije stimulacije pri uporabi standardne metode rastriranja.


Okoljski zemljevid daje dober približek simulaciji okoljskih odsevov, vendar lahko sledenje žarkom celo simulira odseve Luigijevega avtomobila na pokrovu motorja. Kliknite na sliko za povečavo.

Odsevi so področje, kjer je sledenje žarkom odlično. Danes se v 3D motorjih sodobnih iger odboji izračunavajo z uporabo zemljevidov okolja. Ta tehnologija daje dober približek odbojem predmetov, ki se nahajajo "v neskončnosti" ali v okolju (kot že ime pove), vendar za tesno razmaknjene objekte pristop kaže svoje omejitve.

Predvsem razvijalci dirkalnih iger so ustvarili trike za simulacijo odsevov bližnjih predmetov z uporabo tako imenovanih dinamičnih kockastih zemljevidov. Kamera je nameščena na ravni igralčeve naprave, nato pa se upodabljanje izvede v glavnih smereh. Rezultati upodabljanja se nato shranijo v kubemape, ki se uporabljajo za prikaz odsevov.


Zemljevidi dinamične kocke lahko simulirajo odseve bližnjih predmetov, kot je letalo na čajniku. Vendar se ne morejo spopasti z odsevi delov predmeta drug na drugem, na primer z izlivom čajnika na njegovem telesu. Kliknite na sliko za povečavo.

Seveda imajo dinamični kubemapi tudi svoje slabosti. Izračun več rezultatov upodabljanja je precej drag v smislu računalniške moči in da preprečimo prevelik padec zmogljivosti, se kocki zemljevidov ne preračuna tolikokrat kot glavna slika. To lahko povzroči rahlo zakasnitev odbojev. Da bi zmanjšali obremenitev stopnje polnjenja, se upodabljanje izvede pri nižji ločljivosti, kar lahko povzroči pikseliranje v odsevah. Končno je ta tehnologija pogosto omejena na igralčev stroj, vsi drugi objekti pa uporabljajo enostavnejše (sferične) zemljevide okolja.

Z metodo sledenja žarkom so odsevi prikazani popolno in brez kompleksnih algoritmov, saj vse izračuna glavni algoritem upodabljanja. Druga prednost je prikaz odsevov delov predmeta drug na drugega, na primer odsev stranskega ogledala na karoseriji avtomobila, kar je zelo težko dobiti z metodo rasterizacije - toda tukaj je to odsev dobimo na enak način kot druge.


Metoda sledenja žarkom omogoča simulacijo odboja delov predmetov drug na drugega, na primer odsev stranskega ogledala na karoseriji avtomobila. Kliknite na sliko za povečavo.

Druga nesporna prednost metode sledenja žarkom je visokokakovostna obdelava učinkov prosojnosti. Izjemno težko je upodabljati učinke prosojnosti z algoritmom za rastriranje, saj je izračun prosojnosti neposredno odvisen od vrstnega reda upodabljanja. Če želite doseči dobre rezultate, morate prosojne poligone razvrstiti po vrstnem redu od najbolj oddaljenih od kamere do najbližjih in nato upodobiti.

A v praksi je ta naloga z računalniškega vidika pretežka, možne pa so tudi napake v preglednosti, saj razvrščanje poteka po poligonih, ne po pikslih. Obstaja več tehnologij, ki vam omogočajo, da zaobidete razvrščanje poligonov prizorov (na primer globinsko luščenje in A-odbojniki), vendar trenutno nobene od njih ne moremo imenovati varčevalne. Istočasno vam algoritem sledenja žarkom omogoča elegantno upravljanje učinkov prosojnosti.


Pravilno ravnanje z učinki prosojnosti z rastrizerjem zahteva uporabo kompleksnih algoritmov, kot so A-medpomnilniki. Kliknite na sliko za povečavo.

Druga pomembna prednost je izračun senc. V svetu rastriranja je tehnologija preslikave senc postala standard. Vendar ima več težav, kot so "lestve" na vezjih in količina uporabljenega pomnilnika. Algoritem sledenja žarkom rešuje problem sence zelo elegantno, brez uporabe zapletenih algoritmov, z uporabo istega primitivnega objekta in brez potrebe po dodatnem pomnilniku.

Nazadnje, še ena velika prednost metode sledenja žarkom je njena izvorna zmožnost dela z ukrivljenimi površinami. Sodobni grafični procesorji že nekaj let podpirajo ukrivljene površine (pojavi se in izgine, ko se izdajo novi gonilniki in nove arhitekture). Če pa morajo rasterizatorji izvesti začetni prehod teselacije, da ustvarijo trikotnike (kar je edini primitiv, s katerim lahko deluje rasterizacijski mehanizem), potem lahko motor za sledenje žarkom preprosto deluje s presečiščem žarkov, brez natančne matematične definicije površine. .

Miti o sledenju žarkom

Toda sledenja žarkom še vedno ne bi smeli idealizirati, zato je čas, da razbijemo nekatere mite, ki obkrožajo ta algoritem.

Začnimo z dejstvom, da mnogi igralci iger menijo, da je algoritem sledenja žarkom bistveno boljši od rastrizacije, saj se uporablja v filmih. To je narobe. Večina sintetičnih/ročno narisanih filmov (kot vsi Pixarjevi filmi) uporablja algoritem, imenovan REYES, ki temelji na rastrizaciji. Pixar je šele pozneje, med produkcijo Avtomobilov, dodal sledenje žarkom svojemu mehanizmu za upodabljanje RenderMan. Toda tudi za ta film je bilo sledenje žarkom uporabljeno selektivno, da ne bi preobremenili obstoječe računalniške moči. Pred tem projektom je Pixar uporabljal vtičnik za omejeno uporabo sledenja žarkom, kot so učinki senčenja ambientalne okluzije (AO).


Kliknite na sliko za povečavo.

Drugi skupni mit med zagovorniki sledenja žarkom se nanaša na kompleksnost prizorov, ki jih lahko upodabljata sledenje žarkom in rastriranje. Da bi razumeli, si moramo podrobneje ogledati vsak algoritem.

Spodaj je prikazano, kako algoritem rastriranja deluje na vsakem trikotniku v sceni.

  • Določen je niz slikovnih pik, ki pokriva vsak trikotnik;
  • Za vsako vključeno slikovno piko se njena globina primerja z globino sosednje slikovne pike.

Glavna omejitev metode rastriranja se nanaša na število trikotnikov. Algoritem ima kompleksnost O(n), kjer je n število trikotnikov. Algoritem ima v tem primeru linearno kompleksnost glede na število trikotnikov, saj se za vsak okvir sestavi seznam trikotnikov, ki jih je treba obdelati, enega za drugim.

Nasprotno pa algoritem sledenja žarkom deluje na naslednji način.

Za vsako slikovno piko okvirja:

  • narisan je žarek, ki določa, kateri trikotnik je najbližji;
  • Za vsak trikotnik se izračuna razdalja od trikotnika do izhodne ravnine slike.

Kot lahko vidite, je zaporedje obdelave postalo obratno. V prvem primeru smo vzeli vsak poligon in pogledali, katere slikovne pike pokriva. In v drugem primeru smo vzeli vsak piksel in pogledali, kateri poligon mu ustreza. Zato bi morda mislili, da je metoda sledenja žarkom manj odvisna od števila poligonov kot metoda rastriranja, saj število poligonov ne vpliva na glavno zanko. A v praksi temu ni tako. Pravzaprav, da bi ugotovili, kateri trikotnik bo sekal žarek, moramo obdelati vse trikotnike v sceni. Tu bodo seveda zagovorniki metode sledenja žarkom rekli, da ni treba z vsakim žarkom obdelati vseh trikotnikov scene. Če uporabimo ustrezno vrsto podatkovne strukture, je trikotnike zelo enostavno organizirati tako, da jih je le majhen odstotek testiran z vsakim žarkom, kar pomeni, da ima metoda sledenja žarkom kompleksnost O(log n), kjer n je število mnogokotnikov.

Da, argumenti se lahko štejejo za resnične. Toda zagovorniki sledenja žarkom so nekoliko neiskreni, saj enako velja za rastrizacijo. Motorji iger že leta uporabljajo drevesa BSP (binary space partitioning) in druge tehnike za omejevanje števila poligonov, ki jih je treba izračunati za vsak okvir. Druga sporna točka je, da so takšne strukture najbolj učinkovite za statične podatke. Vse kar potrebujemo je, da enkrat izračunamo podatke in nato preprosto omogočimo dostop do njih, kar daje zelo dobre rezultate. Toda kaj storiti z dinamičnimi podatki? V tem primeru bo treba podatke za vsako sliko preračunati in za to ni nobenih čudežnih formul. Še vedno morate preučiti vsak poligon.

Preprost algoritem?

Zadnji mit se nanaša na naravno preprostost in eleganco algoritma za sledenje žarkom. Seveda je algoritem za sledenje žarkom mogoče zapisati v nekaj vrsticah kode (nekateri algoritmi se prilegajo na eno stran vizitke), vendar je visoko zmogljiv algoritem za sledenje žarkom povsem druga stvar.

David Luebke, inženir pri nVidia, je podal naslednji komentar, ki popolnoma odraža resničnost: "Rasterizacija je hitra, vendar morate skrbno premisliti, kako narediti zapletene vizualne učinke. Sledenje žarkom podpira zapletene vizualne učinke, vendar morate dobro premisliti o tem, kako to narediti hitro."


Minimalna koda za sledenje žarkom, ki jo je napisal Paul Heckbert, da se prilega na vizitko. Kliknite na sliko za povečavo.

Vse kar morate storiti je, da preberete nekaj člankov o optimizacijah, ki jih je treba izvesti v algoritmu za sledenje žarkom, da boste razumeli, kar je rekel Luebke. Na primer, najmočnejši algoritmi za sledenje žarkom ne obdelujejo žarkov neodvisno; uporabljajo tako imenovane nize žarkov, kar omogoča optimizacijo delovanja z žarki, ki imajo enak izvor in smer. Ta optimizacija je odlična za funkcijske bloke s številnimi podatki z enim ukazom (SIMD) znotraj procesorjev in grafičnih procesorjev ter je zelo učinkovita tudi za žarke jedra z določeno stopnjo koherence ali senčne žarke. Po drugi strani pa optimizacija ni več primerna za lomne ali odbojne žarke.

Še več, kot poudarja Daniel Pohl v v svojem članku o Quake Wars RT, uporaba naborov žarkov lahko postane problematična s prozornimi teksturami (znamenite teksture alfa, ki se uporabljajo za drevesa), ker če se vsi žarki v naboru ne obnašajo enako (nekateri udarijo ob površino, drugi gredo skozi njo), potem dodatni režijski stroški lahko postane veliko večja od prednosti optimizacij, ki jih zagotavlja uporaba nizov žarkov.


Vizualizacija "stroška" upodabljanja vsake slikovne pike, pri čemer so rdeče pike najdražje. Kot lahko vidite, je upodabljanje dreves zelo drago v različici Quake Wars s sledenjem žarkov. Kliknite na sliko za povečavo.

Nazadnje, kot smo že omenili, sledenje žarkom zahteva ustrezno podatkovno strukturo za shranjevanje različnih elementov prizora in prav ta struktura bo igrala odločilno vlogo pri končni izvedbi. Toda izbira in nato delo s takšno strukturo podatkov ni tako enostavno, kot se zdi na prvi pogled. Nekatere strukture delujejo bolje za statične podatke, druge pa je mogoče hitreje posodobiti za dinamične podatke ali zavzamejo manj pomnilnika. Kot ponavadi se vse spušča v iskanje sprejemljivega kompromisa. Ni čudežev.

Zato, kot vidimo, algoritma za sledenje žarkom ne moremo vedno imenovati ideal preprostosti in elegance, kot nekateri verjamejo. Da bi dobili dobro delovanje algoritma za sledenje žarkom, morate najti nič manj netrivialne programske rešitve kot v primeru pridobivanja kompleksnih vizualnih učinkov z metodo rasterizacije.

Zdaj, ko smo razjasnili nekatere mite o sledenju žarkom, si poglejmo resnične težave, ki jih prinaša ta tehnologija.

In začeli bomo z glavno težavo, povezano s tem algoritmom upodabljanja: njegovo počasnostjo. Seveda bodo nekateri navdušenci rekli, da to ni več problem, saj je algoritem sledenja žarkom zelo vzporeden in število procesorskih jeder se vsako leto povečuje, zato bi morali videti linearno povečanje zmogljivosti sledenja žarkom. Poleg tega so raziskave optimizacij, ki jih je mogoče uporabiti pri sledenju žarkom, še vedno v povojih. Če pogledate prve 3D pospeševalnike in jih primerjate s tem, kar je danes na voljo, je res razlog za optimizem.

Vendar to stališče zgreši pomembno točko: najbolj zanimiva stvar pri sledenju žarkom so sekundarni žarki. V praksi izračun slike samo s primarnimi žarki ne bo zagotovil veliko izboljšave kakovosti slike v primerjavi s klasičnim algoritmom z Z-bufferjem. Toda problem s sekundarnimi žarki je, da nimajo popolnoma nobene koherence (sosmernosti). Pri prehodu iz enega piksla v drugega je treba izračunati povsem druge podatke, kar izniči vse običajne tehnike predpomnjenja, ki so zelo pomembne za dobro delovanje. To pomeni, da je izračun sekundarnih žarkov zelo odvisen od pomnilniškega podsistema, zlasti od njegovih zakasnitev. To je najslabši možni scenarij, saj se je od vseh pomnilniških lastnosti latenca v zadnjih letih najmanj izboljšala in ni razloga za domnevo, da se bo stanje v doglednem času izboljšalo. Preprosto je povečati pasovno širino pomnilnika z vzporedno uporabo več čipov, vendar bodo zakasnitve še vedno ostale enake.


Pri grafičnih karticah se zakasnitev pomnilnika (latenca) zmanjšuje veliko počasneje, kot se povečuje pasovna širina (pasovna širina). Če se slednji izboljša za faktor 10, se zamude izboljšajo samo za faktor dva.

Razlog za priljubljenost grafičnih procesorjev je v tem, da se je izdelava strojne opreme, specializirane za rastriranje, izkazala za zelo učinkovito rešitev. Pri rastrizaciji se dostopi do pomnilnika izvajajo koherentno (vzporedno), ne glede na to ali delamo s piksli, tekseli ali oglišči. Zato so majhni predpomnilniki, ki jih dopolnjuje resna pasovna širina pomnilnika, idealna rešitev za doseganje odlične zmogljivosti. Povečanje pretočnosti je seveda zelo drago, vendar je ta rešitev povsem primerna, če se splača. Nasprotno pa danes ni rešitev za pospešitev dostopa do pomnilnika pri izračunu več žarkov. To je razlog, zakaj sledenje žarkom nikoli ne bo tako učinkovito kot rastriranje.

Druga pogosta težava pri sledenju žarkom je anti-aliasing (AA). Žarki so narisani kot preprosta matematična abstrakcija in ne upoštevajo realne velikosti. Preizkus presečišča trikotnika je preprosta logična funkcija, ki daje odgovor da ali ne, vendar ne daje podrobnosti, kot je "žarek seka trikotnik 40 % poti." Neposredna posledica tega učinka bo pojav "lestev".

Za rešitev tega problema je bilo predlaganih več tehnologij, kot sta sledenje žarkov in sledenje stožcev, ki upoštevajo debelino žarkov, vendar njihova kompleksnost onemogoča učinkovito izvedbo. In edina tehnologija, ki lahko daje dobre rezultate, je izračun več žarkov, kot je slikovnih pik, to je supersampling (upodabljanje pri višji ločljivosti). Skoraj ni vredno še enkrat omenjati, da je ta tehnologija računsko veliko dražja od večkratnega vzorčenja, ki se uporablja v sodobnih grafičnih procesorjih.

Hibridni mehanizem upodabljanja?

Če ste prebrali celoten članek do te točke, verjetno že razmišljate, da sledenje žarkom še ne more nadomestiti rastrizacije, a morda je vredno mešati obe tehnologiji? In na prvi pogled se zdi, da se obe tehnologiji dopolnjujeta. Zlahka si je predstavljati rastriranje trikotnikov za določitev vidnega, izkoriščanje odlične zmogljivosti tehnologije in nato uporabo sledenja žarkom samo na nekaterih površinah, dodajanje realizma tam, kjer je to potrebno, na primer dodajanje senc ali pridobivanje dobrih odsevov in prosojnosti. Pravzaprav je Pixar ta pristop uporabil za risanko "Avtomobili". Geometrijski modeli so ustvarjeni z uporabo REYES, sledenje žarkom pa se uporablja "na zahtevo", kjer je treba simulirati določene učinke.


Za avtomobile je Pixar uporabil hibridni mehanizem upodabljanja, ki je združeval REYES za upodabljanje in sledenje žarkom na zahtevo za odseve in okluzijo okolja. Kliknite na sliko za povečavo.

Na žalost, čeprav ta metoda zveni obetavno, hibridnih rešitev ni tako enostavno izvesti. Kot smo že videli, je ena od pomembnih pomanjkljivosti metode sledenja žarkom potreba po organizaciji podatkovne strukture na tak način, da se omeji število preverjanj presečišča žarkov in predmetov. In uporaba hibridnega modela namesto čistega sledenja žarkom tega ne spremeni. Treba je organizirati podatkovno strukturo skupaj z vsemi pomanjkljivostmi, ki jih prinaša. Denimo, da metoda sledenja žarkom temelji na statičnih podatkih, dinamični podatki pa so upodobljeni z rastrizacijo. Toda v tem primeru izgubimo vse prednosti sledenja žarkom. Ker ni dinamičnih podatkov za sledenje žarkom, predmetov ne boste mogli prisiliti, da mečejo sence ali vidijo odseve.

Še več, ko gre za zmogljivost, je največja težava dostop do pomnilnika, povezan s sekundarnimi žarki, in ti žarki so točno tisto, kar potrebujemo v našem hibridnem mehanizmu upodabljanja. Tako povečanje zmogljivosti ne bo tako veliko, kot bi sprva pričakovali. Ker bo večina časa upodabljanja porabljena za sekundarne žarke, bo dobiček, če ne upodabljamo glavnih žarkov, zanemarljiv.

Z drugimi besedami, če poskušamo združiti prednosti obeh metod, neizogibno združimo njune slabosti, izgubimo eleganco metode sledenja žarkom in visoko zmogljivost rastriranja.

Kot smo že večkrat omenili v našem članku, je treba premagati veliko izzivov, preden lahko sledenje žarkom postane izvedljiva alternativa rastrizaciji pri upodabljanju v realnem času. In če pomislite, ali bo ta metoda postala zdravilo za vse bolezni? Prednosti sledenja žarkom niso tako revolucionarne, da bi upravičile znatno zmanjšanje zmogljivosti. Prednosti algoritma se nanašajo na odseve in prosojnost, saj je ta dva učinka najtežje doseči z obstoječimi rasterizacijskimi algoritmi. Ampak spet, ali je to tako resna pomanjkljivost? Svet okoli nas ni sestavljen izključno iz zelo prozornih ali sijočih predmetov, zato je naš vid lahko zadovoljen že z grobim približkom.

Če pogledate najnovejše avtomobilske simulatorje, na primer Gran Turismo in Forza, lahko jasno vidite povsem zadovoljivo kakovost upodabljanja, tudi če so odsevi na karoseriji popolnoma lažni. In natančen odsev vzvratnega ogledala na barvi komajda zadostuje za prepoznavo še enega koraka k fotorealizmu.


V resnici odsevov ni. Na primer, stransko ogledalo se ne odbija od karoserije avtomobila. Toda ali potrebujete "pošteno" upodobitev Audija R8 s sledenjem žarkom? Kliknite na sliko za povečavo.

Večina navdušencev verjame, da sledenje žarkom samo po sebi ustvari boljšo sliko kot rastrizacija - vendar svoje mnenje pogosto utemeljijo na sliki, ki jo ustvari mehanizem brez povezave, ki ni v realnem času. Vendar pa so rezultati takih motorjev veliko boljši od zmogljivosti sodobnih iger. Poleg tega obstaja nekaj zmede glede sledenja žarkom. Navdušenci pogosto primerjajo fotorealistične slike, ki nastanejo s kombinacijo več tehnik, z rastrizacijo, kot je sledenje žarkom za neposredne odboje, radiosity za difuzni odboj, fotonsko preslikavo za kavstiko itd. Vse te tehnologije skupaj zagotavljajo kar najbolj fotorealistično kakovost.


Če želite doseči fotorealistično upodabljanje, morate združiti več tehnologij. Samo sledenje žarkom ne zadostuje za simulacijo kompleksnih interakcij med različnimi vrstami materialov in svetlobo. Kliknite na sliko za povečavo.

V osnovni različici je sledenje žarkom, če upoštevamo obstoječe implementacije v realnem času, primerno le za idealne odboje in trde (ostre) sence. Doom 3 je pred nekaj leti dokazal, da je mogoče ustvariti zanesljiv 3D-motor, ki bi odlično obvladal dinamične sence in rastrizacijo, a v retrospektivi je igra tudi pokazala, da trde sence niso realistične.


Kliknite na sliko za povečavo.

Če želite ustvariti mehke sence ali razpršene odseve (takšne, kot jih vidite na primer na teksturirani kovini), so potrebne naprednejše tehnike sledenja žarkom, kot sta sledenje poti in/ali porazdeljeno sledenje žarkom. Toda takšne tehnike zahtevajo bistveno večje število žarkov, zato so še vedno premalo primerne za realni čas.

Nekateri uporabniki verjamejo, da bo prej ali slej na voljo toliko procesorske moči, da zmogljivost rasterizacije ne bo več odločilna. Zaradi zakona padajočih donosov bo povečanje zmogljivosti zaradi rastriranja hitro pozabljeno v korist elegance sledenja žarkom. Na skoraj enak način kot prej so bile pozabljene produktivnostne prednosti kodiranja v zbirnem jeziku, kar se je izkazalo za nezadostno, da bi odtehtalo prednosti jezikov na visoki ravni.

Vendar nas to verjetno ne bo prepričalo. Vsekakor pa smo še daleč od časa, ko bi lahko žrtvovali zmogljivost za eleganco in preprostost. Samo poglejte, kaj se je v zadnjih 10 letih zgodilo v svetu upodabljanja brez povezave. Medtem ko je en okvir Toy Story trajal v povprečju dve uri, je en okvir Ratatouilla trajal šest ur in pol, kljub več kot 400-krat večji procesorski moči. Z drugimi besedami, več računalniške moči in virov kot zagotovite računalniškim umetnikom, hitreje jih porabijo.

Če se celo podjetje, kot je Pixar, ki si lahko privošči več ur računanja za ustvarjanje enega samega kadra, odloči za uporabo sledenja žarkom le občasno zaradi negativnega vpliva na zmogljivost, to pomeni, da bo čas, preden bomo imeli dovolj procesorske moči v 3D-igre v realnem času za izvedbo celotnega upodabljanja s sledenjem žarkom so zelo, zelo daleč. In v prihodnosti bodo navdušenci zagotovo imeli kje porabiti takšno računalniško moč.



Vam je bil članek všeč? Delite s prijatelji!