Traversal Shaders, ce sunt și ce aplicații are pe GPU

Traversal Shaders

De la apariția lui DirectX 8 numărul de noi tipuri de shader a crescut de-a lungul timpului, următoarele care vor fi incluse în listă sunt numite Traversal Shaders, care au de-a face cu progresele către adoptare cu pauză, dar fără ray tracing brake în jocuri. Să vedem în ce constă și ce îmbunătățiri va aduce jocurilor în ceea ce privește performanța.

Traversal Shaders sunt una dintre cele două filosofii pentru a pune problema căii structurii de date spațiale în Ray Tracing, care constă în utilizarea programelor de shader pentru a parcurge structura de date spațiale care reprezintă scena, în loc să se utilizeze specializate sau dedicate. hardware.

În primul rând, să ne amintim ce este un Shader

Exemplu de funcționare shader

În software, cunoaștem în mod colocvial ca shader un program care rulează pe nucleele GPU, care au denumiri diferite în funcție de producător. Asa de AMD numește aceste piese hardware Unități de computer în Radeon-ul său, NVIDIA le numește Stream Multiprocessors sau SM în GeForce și Intel le dă în numele ARC aceste unități Xe Core.

Deci shader-ul în sine este software-ul care rulează pe una dintre acele unități, care funcționează foarte aproape de a Procesor, diferența este că un shader este un program care rulează pe o primitivă grafică în diferitele etape ale conductei de randare: vârfuri, primitive, triunghiuri, fragmente sau pixeli. Deși aceste categorii nu sunt altceva decât abstractizări pe care le facem, pentru unitatea de shader totul sunt date și asta înseamnă că pot executa tot felul de programe.

Deci de ce să nu folosești un procesor? Ei bine, din cauza faptului că sunt probleme că GPU-urile, fiind concepute să funcționeze în paralel, funcționează mult mai bine atunci când rezolvă anumite contexte decât ceea ce face un CPU, și la fel se întâmplă și în cazul GPU-urilor.

Microsoft, DirectX Ray Tracing și shaders-urile sale

Microsoft DirectX 12 Ray Tracing

Când Redmond a vorbit pentru prima dată despre implementarea ray tracing-ului la Conferința dezvoltatorilor de jocuri din 2018, au mai rămas câteva luni până la lansarea NVIDIA RTX 20 și la acel moment era complet necunoscut, cel puțin public, despre Există unități de accelerat. Ray Tracing, cum ar fi nucleele RT ale NVIDIA și unitățile de accelerare a radiațiilor AMD.

Ce a fost Microsoftpropunerea lui de a-și extinde API-ul multimedia? Ei bine, adăugați o serie de etape suplimentare, care sunt definite în următoarea diagramă:

Etapas DXR

Înțelegerea diagramei este ușoară:

  • Blocurile în albastru sunt programe shader care rulează la nivel de GPU.
  • Blocurile în verde sunt executate în CPU, driver, în tandem cu GPU.
  • Diamantele în gri sunt condiții care pot apărea atunci când fulgerul trece prin scenă.

Acum, în această diagramă există un element care nu este inclus și este deocamdată una dintre cele mai mari probleme care există în ceea ce privește Ray Tracing: calea structurii de accelerație. Și ce este asta? Am vorbit despre asta în tutorialele noastre de ray tracing, dar nu strică niciodată să-ți amintești.

Structuri de date pentru a accelera ray tracing

Árbol BVH

Pentru a accelera, și, prin urmare, a rula mai repede, algoritmii de urmărire a razelor, ceea ce se face este maparea poziției obiectelor din scenă într-o structură de date, care are forma unui arbore binar decât GPU-ul. ar trebui să plece.

Pentru a înțelege procesul de parcurgere a structurii de date, ceea ce se face este să pornești de la rădăcina care reprezintă întreaga scenă și este specificată pe niveluri până la atingerea ultimului nivel. În fiecare nivel, ceea ce se face este să se facă o cerere către RT Core sau unitatea echivalentă pentru a calcula dacă există o intersecție, dacă există una atunci se coboară la nivelul următor, dacă nu există, atunci calea se oprește complet. Aceasta se face până la atingerea capătului arborelui, care este locul în care nu se mai face intersecția cu rază și se realizează intersecția rază-poligon.

Dacă ați fost perspicace, veți fi văzut că în diagrama secțiunii precedente printre tipurile de shader le avem pe cele de intersecție, dar nu și pe cele însărcinate cu parcurgerea arborelui BVH, adică cu parcurgerea lor, deși este a înțeles că această sarcină este îndeplinită de unitățile shaders, deși nu există un tip specific de shader pentru aceasta.

The Traversal Shaders, ce sunt și care este originea lor?

În documentația DirectX Ray Tracing putem găsi printre cele viitoare și așa-numitele Traversal Shaders, care vor fi adăugate în viitor în cadrul pipeline-ului pentru Ray Tracing într-o versiune ulterioară a API-ului Microsoft, dar cel mai bine este să ne punem noi înșine in situatie.

Exercițiul de parcurgere a structurii de date de până acum în ciuda faptului că este un program de shader, acesta este generic și este controlat de driverul grafic, deci programatorii nu trebuie să facă nimic deoarece se înțelege bine că traversal shader-ul oferă controlul codului aplicației să treacă prin procesul de parcurgere a structurii de date nod cu nod.

Și ce beneficii aduce asta performanței? Principalul este că putem defini scenarii în care una sau mai multe raze sunt aruncate înainte de a face intersecția, ceea ce nu este posibil în acest moment. Un exemplu foarte clar ar fi confruntarea cu obiecte foarte departe de camera in care detaliul de iluminare nu poate fi la fel de apreciat ca la distanta mica. Trebuie avut în vedere că în versiunea actuală a API-ului Redmond putem defini în ceea ce privește iluminarea indirectă dacă un obiect emite raze sau nu prin Ray Generation Shader, dar nu putem crea scenarii în care să excludem razele prin zbor. , mai ales cu distanta.

Traversal Shaders pentru a construi structura datelor spațiale

Traversal Shaders

Divizia Intel graphics R&D a prezentat în 2020 un document intitulat Construire leneșă a structurilor de accelerație cu umbritoare transversale iar cei dintre voi care cunoașteți puțin limba shakespeariană vor fi dedus că aceasta constă în construirea acelorași structuri de date spațiale prin utilizarea Traversal Shaders. Deci acestea nu pot fi folosite doar pentru a controla cursul, ci și pentru a-l construi.

Primul lucru care iese în evidență este Lazy Build, pe care l-am putea traduce fiind educați ca o construcție cu puțin efort. Si in ce consta? Ei bine, ceea ce urmărește această tehnică este ca timpul de construcție al structurii de date să fie redus. Pentru aceasta, se bazează pe informații anterioare din cadrele anterioare adăugate unui algoritm de vizibilitate și dacă acest lucru pare confuz, să definim ce înseamnă vizibilitatea atunci când vorbim despre randarea 3D.

vizibilitate

Trebuie să plecăm de la principiul că, atunci când un GPU redă, ceea ce face este să calculeze vizibilitatea dintre un punct din spațiu și prima suprafață vizibilă într-o direcție dată sau să simplificăm: vizibilitatea între două elemente. Inainte de a continua trebuie sa tinem cont de un lucru, cu siguranta cand citesti asta te-ai imaginat privind la doua obiecte. Ei bine, treaba nu este așa, vorbim despre cum ar vedea un obiect pe altul dacă ar putea vedea, dar din cea mai simplă definiție se referă la camera, care este vederea din care redăm.

În randarea hibridă care combină rasterizarea cu ray tracing, care este acum folosită de toate jocurile, vizibilitatea camerei nu este calculată din algoritmul menționat, ci mai degrabă cu algoritmul raster. Ideea pe viitor este ca vizibilitatea față de cameră să fie realizată din Ray Tracing, astfel încât cu aceste informații GPU-ul ajunge să construiască o structură de date a întregii scene prin Traversal Shaders.