Pravkar ste odšteli svoje težko prislužene dolarje za najnovejšo igro AAA, ki jo lahko igrate na svojem dragocenem igralnem računalniku. En daljši prenos pozneje, skočite naravnost v igro, samo da se soočite z dolgim čakanjem v glavnem meniju, medtem ko se razvrsti …
Ali pa se to morda ne zgodi. Toda med igranjem imate veliko težav s hitrostjo sličic. Obupano iščete rešitev, brskate po spletu v iskanju odgovora in naletite na pogosto ponovljeno frazo: „kompilacija senčil.”
Ali želite vedeti, kaj je kompilacija senčil, zakaj je potrebna in zakaj je deležna tako negativnega tiska? No, to je popoln članek za vas.
V redu, kaj je torej senčnik?
V bistvu so senčniki le bloki kode. V svetu grafike in 3D upodabljanja je vsak majhen program, zasnovan za ustvarjanje zelo specifičnega rezultata. To je lahko preoblikovanje oblike ali položaja trikotnika, preslikava teksture v obliko ali izračun nabora vrednosti, ki so potrebne za druge senčnike.
Ko so API-ji, kot sta Direct3D in OpenGL, prvič podpirali senčnike, so bili zelo omejeni po velikosti in obsegu. Na primer, ko so se senčniki slikovnih pik prvič pojavili na osebnih računalnikih pred več kot 20 leti, je bilo prostora za samo 4 navodila, ki vključujejo teksture, in 8 za matematične naloge.
Danes v najnovejši različici vseh senčnikov dejansko ni omejitev, koliko navodil je mogoče zapakirati v kodo …
Posamezen okvir v sodobni igri vključuje različne vrste senčil
Čeprav imajo različni API-ji, ki jih uporabljajo razvijalci, različno terminologijo, obstaja sedem kategorij senčil. Oglišča, geometrija, lupina in domenski senčniki se nanašajo na ravnanje z oglišči trikotnikov – ustvarjanje in oblikovanje 3D-sveta, preden se obarva.
To nalogo opravljajo senčniki slikovnih pik (in v zadnjem času žarkov), ki obdelujejo matematiko, ki je vključena v osvetlitev in teksturo. Nazadnje, računski senčniki so namenjeni izvajanju splošne aritmetične in logične obdelave, ne pa česar koli specifičnega za grafiko.
Sodobne 3D igre uporabljajo na tisoče senčil za izračun slik, prikazanih na zaslonu. Nekateri so zelo kratki in preprosti, drugi pa so lahko izjemno dolgi in zelo zapleteni ter posrkajo vse vire, ki jih GPU lahko ponudi.
In vsak od njih potrebuje obdelavo, preden lahko GPE naredi karkoli z njimi.
Kako in kdaj sestaviti senčnik
Prevajanje programske opreme je postopek pretvorbe izvorne kode v strojno izvršljivo kodo. Izvorno kodo je mogoče napisati v katerem koli programskem jeziku, ki se nato spremeni v binarno, da jo izvede strojna oprema računalnika.
Senčniki niso nič drugačni, napisani so v določenem jeziku, zato jih je lažje ustvariti in razumeti, kaj se dogaja. Primer tega lahko vidite z uporabo ShaderToy. Za uporabo spletne različice tega orodja je koda napisana z uporabo GLSL (OpenGL Shading Language) in za upodabljanje uporablja grafični API WebGL.
V spodnjem primeru je prikazana koda del postopka, ki je potreben za generiranje površine terena, ki ga vidite na končni sliki – lahko spremljate, kako je bilo vse ustvarjeno z ogledom tega videa.
Tudi če ne veste, kaj ta koda pomeni, ni pomembno – tudi vaš grafični čip ne ve. Izvede lahko vse izračune, vendar mora dobiti navodila v dvojiški obliki. Kodo je treba prevesti iz WebGL v navodila GPE – v primeru česar koli, kar za pridobitev končnega rezultata uporablja GPE, prevajanje izvedejo gonilniki GPE, pri čemer CPE obravnava to delovno obremenitev.
Ta primer ShaderToy uporablja le peščico senčil in samo eden od njih je razmeroma dolg. Kljub temu potrebuje povprečen namizni procesor le delček sekunde, da jih vse prevede, tako da se to naredi enkrat, v trenutku, ko začnete predstavitev.
Vendar pa izberite katero koli sodobno 3D igro in to je povsem druga zgodba. Potovanje po okolju, prehod na drugo raven ali boj z novim sovražnikom zahteva, da igra naloži nove senčnike iz pomnilniškega pogona in jih nato prevede.
Veliki podrobni svetovi potrebujejo na tisoče različnih senčil
Igre na konzolah, kot sta PS5 ali Xbox Series, imajo običajno vse senčnike vnaprej prevedene, čeprav ne vedno. To je zato, ker je konfiguracija strojne opreme zelo statična – razvijalci, ki ustvarjajo nov naslov za stroj podjetja Sony ali Microsoft, morajo upravljati le eno vrsto GPE, njen operacijski sistem in gonilniki pa se redko spreminjajo.
Namizni računalniki pa v tem pogledu predstavljajo velik glavobol, saj obstaja na tisoče možnih kombinacij operacijskih sistemov, gonilnikov in grafičnih čipov. Nemogoče bi bilo vnaprej prevesti senčnike za vse, zato razvijalci uporabljajo različne pristope k reševanju te uganke.
Težave pri prevajanju senčil
Eden pogostih pristopov je pretvorba vseh senčil, ki jih bo uporabljala igra, ko se nalaga – včasih med glavnim zagonskim zaporedjem, drugič v glavnem meniju ali na začetni ravni nalaganja.
Če ima igra na desettisoče senčil, lahko prevajanje vseh na začetku povzroči, da se ti časi nalaganja pretirano podaljšajo. Slabo upravljanje knjižnice senčil med ustvarjanjem igre bo to težavo le še poslabšalo, saj bosta izgubljena čas in prostor za shranjevanje s sestavljanjem nečesa, kar se ne bo nikoli uporabljalo.
Hogwarts Legacy to počne vsak ko zaženete igro
Vendar to vsaj pomeni, da je koda shaderja pripravljena za uporabo s strani gonilnikov v trenutku, ko mehanizem za upodabljanje igre izda ukaze GPE-ju. Nasprotna metoda od vsega tega je, da se izogibate njihovemu pretvarjanju na začetku in naredite vse, ko so potrebni, med igranjem.
To bo očitno pospešilo nalaganje, vendar lahko prevajanje v realnem času povzroči zastoje v verigi obdelave grafike, medtem ko CPE izvaja postopek pretvorbe.
Običajno se pojavijo v obliki nenadnega, a zelo kratkega padca povprečne hitrosti sličic v igri. Bolj znan kot jecljanjelahko ta težava sega od nič drugega kot enkratnega, trenutnega kolcanja pa vse do rutinsko sunkovite, grozne zmešnjave.
Jecljanje v igrah ni samo povzroča prevajanje senčil, saj obstaja veliko vidikov upodabljanja, ki lahko povzročijo to, vendar je ta specifična težava tista, ki postaja vse bolj razširjena.
Jecljanje je poguba mnogih sodobnih računalniških iger
To je zato, ker je trend v naslovih AAA vedno bolj realistična ali vizualno impresivna grafika, zlasti v priljubljenem žanru odprtega sveta. Tako postajajo senčniki daljši in bolj zapleteni, pa tudi njihovo število se povečuje, in vsi ti trajajo dlje, da se prevedejo.
Obstaja veliko iger, ki uporabljajo vmesni pristop k prevajanju senčil, obdelujejo glavne med nalaganjem ali v glavnem meniju in naredijo ostalo, kot je potrebno. Toda vzpostaviti to pravilno na računalniški platformi je izziv sam po sebi.
Igralci iger, ki so seznanjeni z naslovi, narejenimi z uporabo Unreal Engine, zlasti z različico 4, bodo to še predobro vedeli, čeprav to ni težava, ki bi bila izključna za UE4. Predstavitvi računalniških vrat Horizon Zero Dawn in Death Stranding, ki sta bili narejeni z lastniškim motorjem Decima, so zaznamovala pogosta poročila o nenehnem zatikanju, ki je bilo večinoma pripisano težavam pri prevajanju senčil in obravnavanih v popravkih po lansiranju.
Kaj lahko torej storijo razvijalci in igralci iger, da zmanjšajo težavo?
Na žalost za igralce iger glede tega ne morete veliko storiti. Ker je procesor tisti, ki opravlja naloge prevajanja, lahko pomaga zmanjševanje količine opravil v ozadju, prav tako zmanjšanje kakovosti grafike igre, vendar je to skoraj vse, kar lahko storijo uporabniki.
Nekaj iger ponuja možnost spreminjanja načina upravljanja prevajanja senčil. Zgoraj omenjeni Horizon Zero Dawn bo z najnovejšim popravkom izvedel prevajanje senčil v glavnem meniju, vendar vam omogoča, da ga preskočite, če traja predolgo – kar bo na strojni opremi nižjega cenovnega razreda.
Nekaj, kot je nedavna Hogwarts Legacy, vam ne daje takšne možnosti in večina prevajanja se izvede, ko se igra zažene, preden dosežete glavni meni. Zdi se, da noben pristop ni posebej optimalen, saj bosta oba naslova še vedno obdelovala opazno več senčil med igranjem.
Spletni predpomnilniki senčil so načeloma odlični, v praksi manj
Izdelovalci grafičnih procesorjev prav tako igrajo vlogo, saj je njihova programska oprema tista, ki izvaja kompilacijo. Gonilniki AMD in Nvidia bodo shranili prevedene senčnike iz pogosto igranih iger v mapo na glavnem pomnilniškem pogonu, toda v trenutku, ko se igra ali gonilniki posodobijo, je treba postopek ponoviti.
Morda mislite, da bi lahko ti prodajalci storili več za izboljšanje zmogljivosti prevajanja senčil, vendar je dandanes tako hitro, kot je le mogoče.
Na tej točki morda razmišljate tudi o tem, da bi bilo vredno imeti kakšno spletno storitev, ki shranjuje sestavljene senčnike za vsako igro, strojno opremo in konfiguracijo gonilnikov. Valve sicer ponuja nekaj takega, kot storitev predpomnilnika v Steamu, vendar le za igre, ki uporabljajo OpenGL ali Vulkan. Pogosteje pa je predpomnilnik vedno prazen.
Navsezadnje so razvijalci iger tisti, ki so odgovorni za zmanjšanje vpliva prevajanja senčil. Nekateri so v tem zelo dobri in se zdi, da se zelo potrudijo, da bi čim bolj zmanjšali jecljanje, medtem ko so drugi veliko manj marljivi pri tem (tu gledam vas, FromSoftware).
Nekateri razvijalci porabijo veliko časa za to, da prevajanje senčil ne vpliva na igranje
Najbolj iznajdljivi razvijalci (npr. Infinity Ward, izdelovalci CoD) bodo vedeli, da morajo uporabiti vse trike v knjigi, da preprečijo, da bi pretvorba kode prekinila tok upodabljanja, tako da jo skrijejo v menijih, izrezih, sredinah nivojske stopnje nalaganja in tako naprej.
Ključnega pomena je tudi veliko izkušenj in razumevanje najmanjših podrobnosti uporabljenega motorja. Na primer, ko izdelujete igro v UE4, videz površine vsakega predmeta in odseka okolja ustvarijo elementi, imenovani materiali. Ustvarjanje teh privzeto ustvari vrsto senčil, od katerih so mnogi morda nepotrebni.
Če tega ne upravljate pravilno, se bo težava pojavila samo med testiranjem kakovosti/zmogljivosti. Vodje razvoja seveda dodelijo finance in čas takšnim stvarem, a to gre le tako daleč, in če se igra srečuje s številnimi drugimi težavami, obravnava zatikanja zaradi prevajanja senčil morda ne bo deležna dovolj pozornosti pravočasno za lansiranje.
Popravki po izdaji pogosto poskušajo ublažiti takšne težave, kar močno nakazuje, da razvojne hiše preprosto ne izvajajo dovolj testiranja kakovosti za računalniške različice svojih iger. In glede na to, da to stane denar, dokler milijoni ljudi še vedno kupujejo najnovejše igre z veliko menedžerjev preprosto ne bo pripravljeno porabiti več sredstev za optimizacijo stvari.
Torej je morda, samo morda, problem lahko popravimo mi — vse z močjo naših denarnic.
Nadaljujte z branjem. Funkcije iger na TechSpot
- Zakaj je Steam Deck eden najpomembnejših trenutkov računalniških iger v zadnjih letih
- Nvidia DLSS 3: lažni okvirji ali veliki dobički?
- Prihodnost 3D grafike: Kako bolj resnično kot resnično lahko dobite?
- Nvidia GeForce Now Ultimate v primerjavi z novo grafično kartico
- Najboljši igralni monitorji