Saturday 2 January 2021

Raytracing ja ReShade

eli: kuinka lakkasin olemasta huolissani ja opin rakastamaan varjostimia


Reshade on crosiren kehittämä avoimen lisenssin ohjelma joka injektoi varjostimia peliin. Se on siis kuvan jälkiprosessointia kun peli on tuottanut ruutuun pikselit. Peli-Rami on käyttänyt ReShade-varjostimia joissain peleissä tuomaan vanhaan grafiikkaan modernimpaa tuntua, ja tästä olen yleensä maininnut erikseen testissä. Tällä kertaa kokeilin modernimpaa raytracing-varjostusta vanhoihin peleihin.



Reshade perustuu erilaisiin varjostimiin, jota käyttäjä voi itse lisätä, kustomoida haluamakseen ja tarvittaessa myös kirjoittaa alusta lähtien. Joidenkin pelien kanssa voi olla (teoriassa) haasteita, mutta ohjelma on itsessään ilmainen ja melko helposti peliin injektoitava. 

Varjostimet on kirjoitettu sen omalla tulkattava geneerisellä skriptikielellään nimeltään ReShade FX, tämä perustuu HLSL ja tuo mukaan tarvittae via ominaisuuksia. ReShade toimii Direct3d versioiden 9-12, OpenGL, Vulcan kanssa ja tukee käyttöjärjestelmiä Windows 7 alkaen, vaatien ainoastaan Microsoftin .NET Framework 4.5 asentamisen. Ohjelman ja yleisimmät varjostimet löytyvät reshade.me-sivulta ja sivustot kuten Nexus tarjoavat valmiita preset-paketteja pelien elävöittämiseen. Valmiiden asetusten muokkaamisella pääsee helposti alkuun.



Kuva: Elder Scrolls Online - Neat Perfection Enhanced Edition pois päältä ja päällä.


Yksi iso puute tai ominaisuus (riippuen näkökulmasta) on nettipelien kyseessä ollessa depth bufferin kytkeminen pois päältä, jotta joku ei tekisi varjostinta joka esim. paljastaa viholliset kilpailullisessa nettipelissä. Ainakin virallisesti näin on, joskin osaan peleistä löytyy depth bufferin avaukset. Lisää tietoa Reshaden sivuilla.



Raytracing



RTX-näytönohjaimen mahdollistama Raytracing on osittain sitä mitä piirroselokuvat ovat pitkään tehneet. Käytännössä aikaisemmin 3d-tietokonegrafiikan pikselit on piirretty pompauttamalla valonsäde ruudun pikselistä valoon. Tämä takaperoinen tapa ei kuulosta luonnolliselta, mutta on säästänyt paljon laskentatehoa. Nykyisten näytönohjaimien teho riittää kuitenkin jo sinällään ilman erillisiä piirejä luonnollisempaan heijastusten lasketaan, joten ReShade on avoimena skriptikielenä mahdollistamassa raytracing-emulaation.

Ensimmäiset kokeilut tekniikan osalta ovat tapahtuneet ison rahan peleissä, kuten Shadows of the Tomb Raider, Battlefield V ja Metro Exodus. Nämä pelit käyttivät hybriditekniikkaa jossa osa varjostuksista tuotettiin perinteisesti ja jotkin elementit kuten varjot tai heijastukset laskettiin raytracing-tekniikalla. 





Reshade+Raytracing


Koska RTX kortteja on tällä hetkellä vaikeaa saada ja myös vanhoihin peleihin olisi ‘ihan kiva’ saada modernimmat efektit Pascal "Marty McFly" Gilcher on tuottanut RTGI Ray Tracing Shader Patreon-tukijoilleen, projekti on tällä hetkellä versiossa 0.19. GitHub pitää sisällään viimeisimmät ilmaiset julkaisut kaikille.

RTGI on Screen Space Ray Tracing-tekniikkaa, eli se perustuu depth buffer, eli z-bufferiin. Tämä on aika vanha keksintö ja sen toimintaa kuvattiin jo niinkin aikaisin kuin 1974 berliinin yliopistossa. Ruudulle piirrettävästä kuvasta on muistissa myös syvyystieto-versio, jossa mustalla ja valkoisella määritellään kuinka kaukana piirrettävä objektit ovat kamerasta. Lukijat ovat varmasti joskus nähneet ‘z-fighting’ ilmiön kun ohjelma ei tiedä pitäisikö objekti piirtää toisen alle vai päälle. Tämä on johtunut traditionallisesta 16-bittisestä bufferoinnista. Modernimmalla 32-bittisellä z-bufferilla tätä tapahtuu huomattavasti vähemmän koska syvyysarvoja on enemmän jaettavaksi.


Kuva: Cyberpunk 2077 ja RTGI astukset.



Elder Scrolls Online



Koska olen innokas roolipelaaja testasin RTGI 0.19 Elder Scrolls Online-pelin kanssa. Pelin moottori on kohtuullisen iäkäs joten ReShaden injektointi mukaan on jokatapauksessa hyvin suositeltavaa. Raytracing toi peliin hieman uutta ilmettä, osan efekteistä etenkin heijastusten ja varjojen osalta ollen hieman realistisempia. Osaa efekteistä piti taas säätää jotta laava ei hehkuisi liikaa. Itse Raytracing efekti ei ole aina päälllä depth buffer ei ole kunnolla käytössä. Havaittavissa on varjostimen räpsymistä päälle ja pois. ReShade kytkee depth bufferin pois päältä jos havaitsee paljon netin käyttöä. Joskus tämä toimii kun muita pelaajia on läsnä mutta ei aina.


Kuva: Normaali ja depth buffer



Unlocker-ohjelma löytyy kyllä, mutta teoriassa palvelun tarjoaja voisi luokitella tämän huijausohjelmaksi. Muita tekemiäni havaintoja oli myös RTGI hidastelu useilla RayTracing-säteillä, eli varjostimessa on vielä selkeästi tekemistä. Tämä kokeilu nostaa taas esiin vanhan kysymyksen varjostamaan keskustelua. Eli: tulisiko depth buffer olla käytössä nettipeleissä, onko se hätävarjelun liioittelua ja pystyykö palvelun tarjoaja oikeasti havaitsemaan sen käytön. Onko tällä oikeaa merkitystä edes kilpailullisissa peleissä?


Kuva: ESO, RTGI pois päältä

Kuva. ESO, RTGI päällä voimakkaalla asetuksella



Cyberpunk 2077


Miksi käyttää ReShade-efektejä peliin jossa on jo Raytracing? Cyberpunk tarjoaa option vain RTX-näytönohjaimille joista ainakin uusimmat ovat vaikeasti saatavilla. ReShade tämä mahdollistaa realistisemmat valoefektit myös hieman vanhemmille korteille. Bonuksena pelin värimaailman saa samalla säätää haluamakseen ja depth buffer on käytössä.






Kuvat: Cyberpunk 2077 RTGI varjostimella. Lähde: PGHub



Muut pelit


RTGI asentaminen on yllättävän helppoa, se ei tarvitse muuta kuin pelikoneen ja uusimman ReShaden version. 0.19 kokeiluversiota on jo onnistuneesti sovellettu peleihin kuten Minecraft, AC Origins, AC Odyssey, Half-Life, FO 4, Portal 2, PC Building Simulator, Skyrim, Outlast, Shift 2, World of Warcraft. Myös vanhat pelit hyväksyvät injektion mukisematta, joten RTGI ja ReShade kannattaa pitää mielessä jos vanhoille peleille haluaa antaa kasvojenkohotuksen.









Kuvat: Lähde: PGHub








No comments:

Post a Comment