Ray tracing ( „ray urmărire“ , în franceză) este o tehnica de calcul optice de calculator , folosit pentru redarea grafica pe calculator sau studii de sisteme optice. Acesta constă în simularea traseului invers al luminii : calculăm iluminarea de la cameră la obiecte și apoi la lumini, în timp ce în realitate lumina merge de la scenă la ochi.
Această tehnică reproduce fenomenele fizice ( principiul lui Fermat de întoarcere inversă a luminii , legile Snell-Descartes ) care sunt reflexie și refracție . O implementare naivă a trasării razelor nu poate explica fenomene optice precum caustice , iluminare globală sau chiar dispersia luminii ( este necesară o abordare mai elaborată a trasării razelor , apelând la tehnici probabiliste, cum ar fi metoda de detectare . Monte-Carlo , Metropolis sau radiositatea la rezolva aceste probleme).
Pe de altă parte, spre deosebire de alți algoritmi de sinteză a imaginilor , face posibilă definirea matematică a obiectelor care trebuie reprezentate și nu numai printr-o multitudine de fațete.
Ray tracing a fost prezentat pentru prima dată în 1968 de către Arthur Call.
Această tehnică de redare constă, pentru fiecare pixel al imaginii care trebuie generată, în lansarea unei raze din punctul de vedere („camera”) în „ scena 3D ”. Primul punct de impact al razei asupra unui obiect definește obiectul vizat de pixelul corespunzător.
Razele sunt apoi lansate din punctul de impact către fiecare sursă de lumină pentru a determina luminozitatea acesteia (este iluminată sau în umbra altor obiecte?). Această luminozitate, combinată cu proprietățile suprafeței obiectului ( culoarea , rugozitatea acestuia etc.), precum și alte informații posibile ( unghiuri între normalul față de obiect și sursele de lumină , reflexii , transparență etc.), determină culoarea finală a pixelului.
Această tehnică funcționează împotriva modelelor fizice care, la rândul lor, lansează raze de lumină de la sursele de lumină spre ochi sau cameră în timp ce trec pe lângă obiecte, în timp ce urmărirea razelor se desfășoară de la cameră către sursele de lumină. Experiența arată că acest mod de procedare este în mod clar mai eficient în majoritatea cazurilor (pe de altă parte, pentru a rezolva substanțele caustice, de exemplu, se preferă adesea o metodă directă din surse sau o metodă mixtă).
Diferite tehnici fac posibilă accelerarea acestui tratament greu. În contextul obiectelor poligonale (alcătuite din triunghiuri, de exemplu), desenarea obiectului într-un mod convențional (vezi rasterizarea ) permite să se determine cu precizie ce pixeli vor fi cu adevărat vizibili și face posibilă aruncarea razelor doar pentru acești pixeli limitați. Diferitele tehnici pentru determinarea suprafețelor ascunse fac, de asemenea, posibilă reducerea la minimum a numărului de raze care trebuie aruncate.
Aceste calcule preliminare pot fi efectuate de un procesor dedicat pentru a limita procesarea care trebuie efectuată de procesorul principal. Ray tracing este foarte intensiv calcul vectorial , utilizarea de accelerare hardware, proiectat pentru acest calcul vector ( shader ), poate ajuta foarte mult pentru a optimiza rezultatul final.
Înainte de 1979, algoritmii de urmărire a razelor făceau doar urmărirea razelor și apoi determinau culoarea obiectului pentru fiecare rază fără o implementare recursivă. În 1979, J. Turner Whitted (in) a propus o abordare recursivă, adică să utilizeze algoritmul de turnare a razelor începând de la punctul în cauză pentru a-și calcula culoarea. Aceasta oferă o precizie fizică mai bună, în special pentru reflexii.
Un mod simplu și eficient de a calcula intersecția unei raze cu un triunghi este calcularea coordonatelor punctului de intersecție I în bază . Rezolvați doar ecuația vectorială . Folosind regula lui Cramer , produsul mixt și poziția obținem:
Este suficient să verificăm asta .
Este foarte ușor să extindeți această metodă la dreptunghiuri și chiar poligoane datorită teoremei lui Jordan .
Odată cu răspândirea procesoarelor multi-core și utilizarea bibliotecilor software care implementează această tehnologie ca OpenMP , OpenCL , CUDA sau Vulkan , algoritmul de urmărire a razelor își vede capacitățile extinse. Într-adevăr, acest algoritm se pretează deosebit de bine paralelismului , fiecare punct al imaginii putând fi calculat independent de celelalte. Marea majoritate a software-ului grafic bazat pe urmărirea razelor folosește o implementare cu mai multe fire , permițând suport pentru procesoare multi-core.
Cu apariția chipseturilor grafice multi-core programabile ( GPGPU ) și a limbajelor de programare asociate (OpenCL sau CUDA de exemplu) și cu motoare precum LuxRender ( open source ), Iray și OptiX de la Nvidia , biblioteca Embree de la Intel sau AMD Firerays , trasarea razelor câștigă din ce în ce mai multă importanță în aplicațiile de sinteză a imaginilor în timp real.
Ray tracing permite generarea de imagini realiste, dar poate solicita în schimb un moment foarte important de calcul, în funcție de complexitatea scenei 3D pentru a produce. Până în 2001, puterea computerelor nu permitea calculul imaginilor în timp real. De atunci, în anumite condiții, numeroase optimizări ale algoritmului permit redarea în timp interactiv (câteva imagini pe secundă), sau chiar într-adevăr fluidă (peste 25 de imagini pe secundă).
Utilizarea unor arhitecturi dedicate masiv paralele, cum ar fi procesoare grafice sau carduri de accelerare, cum ar fi MIC- ul Intel, fie prin instrumente dedicate, fie prin utilizarea unor structuri software precum CUDA, OpenCL sau OpenMP, îmbunătățește foarte mult performanța instrumentelor de redare a trasării de raze și tinde spre democratizează utilizarea lor ( Blender oferă în special posibilitatea de a deporta operațiile de redare prin ray tracing către GPU-uri folosind biblioteca Luxrays).
În anii 2010, sunt planificate jocuri comerciale pe scară largă, folosind această tehnică.
Aceste metode computerizate pentru predicția imaginii și-au găsit omologii încă din anii 1990 în diverse domenii, în special predicția propagării undelor sonore sau a microundelor ( telefonie mobilă ) în medii complexe. Modelul fizic care stă la baza algoritmilor de urmărire a razelor ( principiul Fermat ) este într-adevăr comun opticii și acusticii , cu câteva rafinamente, legate de lungimile de undă manipulate (fenomenul de difracție în special).
Cele console de jocuri de generație nouă va face acest lucru în timp real.
Ray tracing este introdus pentru prima dată în 1968 de către Arthur Appel, dar de fapt , a apărut în 1986. Acesta a fost folosit pentru prima dată pentru a transporta mari case de animație de film , cum ar fi DreamWorks sau Pixar . Realizarea acestei tehnici experimentale a fost utilizată doar parțial, deoarece această metodă este prea costisitoare. În 2006, Pixar a decis să promoveze acest proces pentru producerea filmului Cars, deoarece această simulare a luminii în timp real face posibilă adăugarea de realism proiectului, în special pentru reflectarea luminii pe corp, pentru umbre, ca precum și pentru ocluzia ambientală . Acest lucru a făcut posibilă democratizarea acestei tehnici în ochii caselor de producție cinematografică.
Această metodă, până atunci rezervată exclusiv cinematografiei, a apărut doar în lumea jocurilor video pe 23 august 2018 în timpul conferinței unui important producător de plăci grafice , procesoare grafice etc. În timpul acestei conferințe, Nvidia a prezentat acest nou mod care permite pentru a îmbunătăți realismul: reflexia flăcărilor, reflexia oglinzilor ... Ceea ce au fost doar calcule vaste care permit o reprezentare abstractă a reflexiei materialelor precum sticla, metalul sau apa este acum un real algoritm care permite o reprezentare mult mai fidelă. Singurul dezavantaj al utilizării acestui proces este resursele pe care le folosește. Într-adevăr, calculul traiectoriei luminii are un cost, resursele trebuind alocate calculelor. Pentru consolele care utilizează ray tracing, pierderea numărului de cadre pe secundă depinde de mulți factori (jocul, calitatea graficii, calitatea ray tracing-ului , componentele computerului ...). Testele de comparație sunt numeroase. Pentru o definiție Full HD , pierderea numărului de cadre pe secundă pentru un joc precum Control este de 20%, ceea ce poate afecta fluiditatea acestuia. O soluție este utilizarea inteligenței artificiale , care permite o calitate a imaginii similară reducând în același timp definiția, aceasta este tehnologia DLSS la Nvidia.