NVIDIA toi eilen kaikkien saataville Turing-arkkitehtuurin whitepaper-julkaisun. Kävimme eilen läpi arkkitehtuuriin perustuvien piirien ominaisuudet ja merkittävimmät muutokset ja nyt on aika paneutua piirien toimintaan ja uusiin teknologioihin.
Ensimmäinen uusista teknologioista on säteenseurannan kiihdytys. Turing-arkkitehtuurin SM-yksikköihin (Streaming Multiprocessor) on lisätty uusi RT-yksikkö, joka mahdollistaa säteenseurannan kiihdytyksen laskemalla erikoistuneilla yksiköillä BVH-hakupuuhun (Bounding Volume Hierarchy) ja säteiden risteämiseen liittyviä laskuja. Yleiskäyttöisille laskuyksiköille kalliit tehtävät voidaan RT-yksiköiden avulla laskea paitsi nopeammin, myös uhraamatta piirin muuta laskentavoimaa niihin. NVIDIA on puhunut kymmenkertaisesta suorituskykyerosta GeForce RTX 2080 Ti:n ja GTX 1080 Ti:n säteenseurantasuorituskyvyssä, mutta tämän on todettu olevan tapausriippuvaista eikä päde kaikissa säteenseurantatapauksissa.
Säteenseuranta tulee saapumaan peleihin pikkuhiljaa ja tähän mennessä NVIDIA on kertonut yhdentoista pelin tulevan tukemaan ominaisuutta ennemmin tai myöhemmin. Käytännössä julkaisuaikataulua sanelee kehittäjän omien aikataulujen ja lisätyön lisäksi Windows, johon DirectX Ray Tracing eli DXR-rajapinta on luvassa lokakuussa julkaistavan October 2018 Update -versiopäivityksen myötä.
Heti säteenseurannan jälkeen eniten keskustelua on herättänyt Turing-arkkitehtuurin uusi Deep Learning Super Sampling -reunojenpehmennys. Yllä olevat vertailukuvat löydät täydessä koossa tästä: TAA vs DLSS, TAA vs DLSS 2X. DLSS on uusi tekoälyä hyödyntävä reunojenpehmennysteknologia, joka vaatii erillisen tuen peliltä ja NVIDIAlta. Kun pelille lisätään DLSS-tuki, opettaa NVIDIA tekoälylleen kyseisen pelin grafiikan ”perustotuuksia” käyttäen peräti 64-kertaista Super Sampling -reunojenpehmennystä. Muutaman megatavun kokoinen tietopaketti jaetaan joko pelin tai ajureiden mukana ja sitä hyödynnetään lopullisen kuvan muodostamisessa.
DLSS:stä on olemassa kaksi eri versiota, DLSS ja DLSS 2X, joiden toiminta eroaa jonkin verran toisistaan. NVIDIAn whitepaper jättää vielä hieman varaa tulkinnalle, mutta mikäli allekirjoittanut ymmärsi sen oikein normaali DLSS, jonka avulla NVIDIA kertoo RTX 2080:n peittoavan GTX 1080:n parhaimmillaan 100 %:n erolla, renderöi pelin todellisuudessa valittua matalammalla resoluutiolla. Tämän jälkeen hyödyntämällä Tensor-yksiköitään tekoäly käyttää ilmeisesti muutamaa edellistä ruutua sekä opeteltuja perustotuuksia luodakseen lopullisen, halutun resoluution kuvan pehmeine reunojeen.
DLSS 2X puolestaan renderöi kuvan asetetulla resoluutiolla mutta parantaa sitä käyttäen samoja 64xSSAA:lla opeteltuja perustotuuksia. DLSS 2X:n tarjoama reunojenpehmennyksen laatu on erittäin korkea ja NVIDIAn mukaan sitä on lähes mahdotonta erottaa aidosta 64xSSAA-kuvasta. DLSS 2X ei kuitenkaan tarjoa nopeusetua DLSS:n tapaan. DLSS 2X on myös käytännössä vapaa kuvan ylimääräisestä pehmenemisestä.
Uusi ominaisuus on niin ikään mahdollisuus suorittaa samanaikaisesti sekä INT(32)- että FP(32)-laskuja, koska Turingissa on erilliset INT32-yksiköt. Käytännössä kyse on siitä, että NVIDIA puolitti FP32-yksiköiden määrän mutta tehtävien jakelua hoitavat warp schedulerit ja lähetysyksiköt ovat edelleen yhtä järeitä kuin ennenkin. Jäljelle jäävä 50 % kapasiteetista voidaan tällöin käyttää INT32-, Load/Store-, SFU-, Tensori- ja FP64-käskyjen lähettämiseen laskettavaksi samanaikaisesti. Muutokset tehtiin jo Volta-arkkitehtuurissa, mutta nyt ne saapuvat ensimmäistä kertaa varsinaisesti kuluttajakäyttöön.
NVIDIA on lisännyt Turing-arkkitehtuuriin lisäksi tuet uusille tehtävä- ja verkkovarjostimille (Task Shader, Mesh Shader). Verkkovarjostimilla voidaan luoda kolmioita rasteroitavaksi, mutta normaalin yhden säikeen sijasta se käyttää useampaa, rinnakkaista yhteistyötä tekevää säiettä. Tehtävävarjostimet puolestaan toimivat runkovarjostimien (Hull Shader) tapaan ennen tesselointivaihetta, mutta toteuttaa tehtävänsä verkkovarjostimien tapaan rinnakkaisella useamman säikeen toteutuksella. Tämän hetkisen tulkinnan mukaan kyse on hyvin vastaavasta ominaisuudesta kuin AMD:n primitiivivarjostimet (Primitive Shader) ja se vaatii kehittäjiltä erillisen tuen ominaisuudelle. Uudet varjostimet mahdollistavat myös eri objektien kulloisenkin LOD-tason (Level of Detail) valinnan täysin grafiikkapiirin sisällä.
Selvästi aiemmasta kehittyneisiin ominaisuuksiin kuuluu puolestaan Variable Rate Shading, joka mahdollistaa eri ruudun osien varjostimien ajamisen eri tarkkuuksilla. Käytännössä kyse on vastaavasta ominaisuudesta kuin aiempi Multi-Resolution Shading, joka mahdollisti ruudun jakamisen yhteensä 16 osaan ja niiden varjostimien ajon eri tarkkuuksilla, mutta tällä kertaa ruutu voidaan jakaa 16 x 16 pikselin kokoisiin alueisiin, mikä esimerkiksi 4K-resoluutiolla tarkoittaa 32 400 erillistä aluetta.
Samaa jatkokehitelmää on myös Content Adaptive Shading, joka antaa kehittäjille mahdollisuuden käyttää edellisen ruudun tietoja päätelläkseen seuraavan ruudun varjostimien tarkkuuden. Jos esimerkiksi yksi 16 x 16 alue on pelkkää yksiväristä seinää tai taivasta voi kehittäjä Content Adaptive Shadingin avulla renderöidä ko. alueen seuraavassa ruudussa matalammalla tarkkuudella. Motion Adaptive Shading puolestaan käyttää samaa logiikkaa liikkuviin objekteihin, jolloin nopeasti liikkuva objekti, jota ei kuitenkaan havaittaisi tarkkana ruudulla, voidaan varjostaa matalammalla tarkkuudella.
Texture Space Shading puolestaan mahdollistaa varjostimien arvojen laskemisen ja tallentamisen suoraan tekseleihin , joiden avulla esimerkiksi tiettyjen pikseleiden näkyvyystestit (z-test, rasterointi) ja ulkonäkötestit (varjostimet) voidaan laskea toisistaan poikkeavilla tarkkuuksilla, mikä voi parantaa suorituskykyä kuvanlaadun kärsimättä. NVIDIAn antamassa esimerkissä VR-käytössä voidaan renderöidä toisen silmän näkymä ensin ja käyttää tässä tallennettuja tietoja oikean silmän kuvan renderöintiin. Teoriassa tällöin oikeaa silmää varten tarvitsisi laskea täysin uudelleen vain ne tekselit, joita ei näy lainkaan vasemman silmän kuvassa.
Suosittelemme syvempää katsausta kaipaaville luonnollisesti itse whitepaperin lukua sekä esimerkiksi AnandTechin artikkelia.
Kun ajatte testejä RTX 2080 kortilla voisitteko lisätä world of tanks encore benchmarkin testeihin?
Jos ruvetaan kappaleiden reunojen perusteella pehmentämään, jää suuri osa aliasoitumisongelmista käsittelemättä. Aliasoitumista kun ovat sahalaitaisten ääriviivojen lisäksi mm. liikkeessä enemmän tai vähemmän välkkyvät tekstuurit, tekstuureissa esiintyvät oudot kuviot (joita ei usein huomaa still-kuvista, vaikka ne liikkuvassa kuvassa olisivat häiritseviä) ja ohuiden esineiden katkeileminen kuvassa. Yhteen kuvaan perustuvat jälkikäsittelynä tehtävät reunanpehmennykset ovat yleensä aika onnettomia näitä ilmiöitä vastaan. Temporaaliset antialiasointimenetelmät tepsivät paremmin, mutta puutteensa niilläkin on: ohuet yksityiskohdat voivat pahimmillaan kadota kokonaan, blurraus voi olla liiallista ja läpikuultavien objektien kohdalla voi olla artefakteja, kun nämä objektit liikkuvat kuvassa eri tahtia taustaansa nähden.
@Sampsa Kun testaatte Turingeja, niin saako artikkeliin edes lyhyen subjektiivisen yhteenvedon kuvanlaadusta peleissä, niin liikkuvasta kuin liikkumattomasta kuvasta. Samalla olisi kiva saada kuvanlaatu vertailua Radeon-korttiin nähden ja tietysti niillä peleillä joissa on tuki noille Nvidian tekniikoille, jos on mahdollista tietää että kyseinen peli varmasti hyödyntää näitä tekniikoita. Jos tällaisia pelejä ei ole vielä olemassa niin olisi kiva saada katsausta myöhemmin sitten. DLSS:ää vissiin voi jo tässä vaiheessa vertailla muihin reunanpehmennyksiin, mutta olisi kiva että se vertailukohta toteutettaisiin varmuuden varalta Radeon-kortilla, käytti sillä sitten mitä tahansa toista reunanpehmennysmetodia.
Joo. Ja, ei. Joo, siis jos puhtaasti kappaleiden reunojen suhteen toimitaan (nämä siis tuolta syvyyspuskurista reunantunnistuksella). Ei, jos toimitaan niiden ja lisäksi kuvasta näkyvien reunojen (ts. korkean kontrastin kohdat) suhteen.
Tekstuurien osalta taas taitaa nykyään olla tapana tehdä tuo niiden antialiasointi erikseen aikaisemmassa vaiheessa (jos siis käytetään noita jälkikäsittely-AA-menetelmiä). Siis siinä se teksturointiyksikön kohdalla tehdään jossain määrin aitoa ylinäytteistystä, jos oikein olen ymmärtänyt, ja siten välttää pahimmat aliasointiongelmat kolmioiden sisällä. (Koska tämä on suhteessa todella paljon halvempi operaatio kuin tehdä koko geometrian laskenta monta kertaa per pikseli, ts. SSAA tai MSAA. Toki, näissäkin pihistellään ja tehdään kaiken maailman kikko-kuutosia jotta saisi lisää kolmioita ja efektejä ruudulle… ja sitten se kuvanlaatu kärsii Vaihtoehtoisesti toki kärsisi vielä enemmän, kun pitäisi ruuvata se FXAA:n voimakkuus sinne yhteentoista ja pehmentää koko kuva pehmeäksi sutuksi.)
Reunanpehmennys toki on aina vähän tuhoisaa kapeille yksityiskohdille, temporaalista tai ei. Kuvitellaan vaikka mustat puhelinlangat kuvaan*, sen verran kauas että niiden leveys on hieman alle pikseli. Nämä ovat nyt paikoitellen aliedustettuna (yhtään mustaa puhelinlankapikseliä ei sattunut vaikka 10 pikselin matkalle vaakasuunnassa), ja se reunanpehmennys ei osaa näitä sinne välille lisätä, niin lopputuloksessa on väkisin se visuaalinen artefakta että lanka katkeaa ja jatkuu myöhemmin. (Rittävän tiheä MSAA tai SSAA sen sijaan lisäisivät kuvaan oikein nätin tummanharmaan pikselijonon… mutta se toki tulisi kalliilla laskentahinnalla.)
Kuvanlaatutestejä odotellessa.
* Fiksumpi pelintekijä toki jättää siksi kaikki tämänkaltaiset huonosti piirtyvät asiat pois kentistä. Ja kukaan ei huomaa mitään. Näin on toimittu (eri aikakausina eri ongelmien suhteen) vuosikymmeniä. Ei piirretä sellaisia asioita, joita ei saa piirrettyä nätisti.
Tarkoitatko nyt jotain hienompaa kuin anisotrooppinen suodatus? Sekin voi kyllä ottaa useita näytteitä pikseliä kohti, mutta sen käyttämistä ei ole yleensä sidottu antialiasointiasetuksiin. Niissä peleissä, joissa olen kokeillut, yhden kuvan jälkikäsittely-aa ei ole vaikuttanut tekstuureihin kovinkaan positiivisesti: blurrausta voi olla, mutta vain liikkeessä havaittavat ongelmat ovat silti pysyneet jokseenkin ennallaan. Supersämpläyksen vaikutus on ollut ihan toista luokkaa.
Temporaalinen aa voi kyllä parantaakin ohuiden yksityiskohtien toistoa, mutta käytännössä siihen on taidettu päästä vain täysin tai melkein liikkumattomalla kuvalla. Aikanaan huomasin tällaisen vaikutuksen Assassin's Creed 4:n SMAA-grafiikka-asetuksessa, ja sehän tosiaan osoittautui temporaaliseksi variantiksi: Temporal supersampling and antialiasing. AC4 taitaakin tosin olla ainoa tähän mennessä näkemäni peli, jossa temporaalinen aa auttoi tuohon asiaan, vaikka nykyiset menetelmät muuten tuottavat miellyttävämmän kuvan.
Kyllä, itseäni tämä asia kiinnostaa näissä uutuuksissa melkeinpä eniten.
En varsinaisesti.
Ei sen tekstuurien suodatuksen käyttämistä, mutta sen tekstuurin suodatuksen sisäiset parametrit. (Tai, ainakin ne kannattaisi sitoa, ja kuvittelin näin jossain vaiheessa jonkun maininneen tehtävän. Saisi saman määrän sahalaidan poistumista vähemmällä määrällä kuvan pehmenemistä kuin jos tuo tehdään ainoastaan jälkikäsittelynä.)
No, joo. Täysin liikkumattomassa kuvassa toki tuo TAA kun palautuu SSAA:ksi… (Siis jos parametrit taas valitaan sopivasti ja laitetaan se ”riittävän pitkä” muisti. Reaalimaailmassa toki näitä asetuksia ei voi noin äärimmilleen viedä, ja siksi tuolla saa aikaan joskus omituisia vaeltavia artefaktoja – jotka varmasti häiritsevä, koska ne ovat jotain ruudunpäivityksen osamääriä. 4×TAA ja se artefakta kulkee nopeudella FPS/4…)
Tästä kaikesta toki seuraa se, että nopeammalla näytönohjaimella (enemmän FPS) tuo TAA toimii paremmin kuin hitaammalla. (Kuva on sitä liikkumattomampaa mitä useammin ruutu päivittyy, jos siis liikkeen määrä on vakio.)
Täällähän on menossa vanhankansa flame;) Vau! Eiköhän nyt vaan odotella noi kortit ensin kynsiin ja katsellaan sitten onko niistä mihinkään. Itse taidan laittaa tuon RTX2080:sen noiden tupla 1070:sten tilalle. Kohta on muuten paljon käytettyjä kortteja liikenteessä ja ostajalla markkinat;)