Čo je kompilácia Shader a prečo sa PC hry zasekávajú?


Zhrnutie: Pretože GPU každého počítača je iné, kompilácia shadera je potrebná na to, aby hry fungovali na rôznych značkách a modeloch grafických kariet. Bohužiaľ, tento proces kompilácie môže spôsobiť nepríjemné koktanie.

Niektoré hry majú typ koktania, ku ktorému dochádza bez ohľadu na to, aký výkonný je váš počítač alebo aké nastavenia si vyberiete. Je to spôsobené procesom známym ako „kompilácia shaderov“ a je to rastúci problém pri hraní počítačových hier.

Čo sú to shadery?

Shadery sú počítačové programy, ktoré pomáhajú určiť rôzne aspekty renderovanej grafiky. Pixel shadery napríklad vypočítavajú atribúty pixelu. To zahŕňa farbu, jas, odrazivosť alebo priehľadnosť daného pixelu. Ak chcete, aby niečo vo vašej hre vyzeralo mokré, na dosiahnutie tohto vzhľadu použite špeciálny shader, než aby ste to robili ručne.

Shadery sú to, čo robí moderné GPU tak flexibilnými, pretože tieto GPU sú navrhnuté tak, aby spúšťali čokoľvek, čo sa dá vyjadriť v programovacom jazyku shader. Nahrádzajú starú technológiu GPU s „fixnými funkciami“, kde typy grafickej matematiky, ktoré GPU dokáže, boli pevne zapojené do jeho kremíka.

Čo je kompilácia Shader?

„Kompilácia“ je počítačový termín, ktorý sa vzťahuje na prevzatie kódu tak, ako ho napísal ľudský programátor, a jeho preloženie do strojového kódu, ktorému rozumie konkrétny procesor, ktorý má spúšťať príslušný softvér. Môžete napríklad skompilovať svoj kód tak, aby fungoval na procesore Intel alebo Apple Silicon.

To isté je potrebné pre GPU. Kód shadera musí byť skompilovaný, aby fungoval na konkrétnej značke a príslušnom modeli GPU. Ak zmeníte GPU, aktualizujete jeho ovládače alebo hra dostane aktualizáciu, shadery sa musia skompilovať znova.

Prečo sa niektoré počítačové hry zasekávajú pri kompilácii Shader?

V niektorých hrách kompilovanie shaderov na pozadí zasahuje do samotnej hry a spôsobuje viditeľné zasekávanie. Počítač pracuje príliš tvrdo na kompilácii shaderov, aby hra fungovala hladko. Niektorí vývojári pracujú na optimalizácii kompilácie tak, aby mala malý alebo žiadny vplyv na výkon hry, zatiaľ čo iní rozširujú kompiláciu shaderov v celej hre a dúfajú, že sťahovanie bude krátkodobé. V takom prípade by ste sa s koktaním stretli iba na začiatku novej úrovne alebo keď vstúpite do nového prostredia, ktoré používa shadery, ktoré dovtedy neboli potrebné.

Zasekávanie kompilácií bolo obzvlášť hrozné v hrách Unreal Engine 4, čo je rozšírený a obľúbený herný engine. Konkrétne sa tieto koktanie stávajú problémom pri spustení hry pod DirectX 12. Čiastočne je to preto, že DirectX 12 mení spôsob, akým funguje kompilácia shaderov, čím sa dáva väčšia kontrola do rúk vývojárov. To však tiež znamená, že vývojári nemusia mať najlepší spôsob optimalizácie kompilácie shaderov pomocou najnovšej a najlepšej verzie DirectX.

Prečo sa konzoly nezasekávajú pri kompilácii Shader?

Zasekávanie kompilácie Shader je problém, ktorý úplne chýba na konzolách, ako sú PS5 a Xbox Series X|S. Je to jednoducho preto, že vývojári presne vedia, aký hardvér je vo vnútri každej konzoly, takže môžu vopred skompilovať všetky shadery; nie je potrebné ich kompilovať v lokálnom systéme, pretože už viete, na ktorý GPU sa zameriavate.

Je to možné urobiť na PC, ale keďže existuje toľko GPU a systémových konfigurácií, nebolo by to praktické. V prípade Valve Steam Deck však Valve obsahuje predkompilovanú shader cache s niektorými hrami, pretože, samozrejme, všetky Steam Decky majú rovnaký GPU.

Čo môžete urobiť s kompilačným koktaním?

Bohužiaľ, väčšinou musia vývojári opraviť problémy s kompiláciou shaderov. Dobrou správou je, že tento proces nakoniec zvládnu. Unreal Engine 5.1 môže obsahovať automatizovanú funkciu, ktorá vývojárom pomôže s ukladaním do vyrovnávacej pamäte bez toho, aby bol dopad na výkon taký výrazný.

Zoznam vecí, ktoré môžete urobiť na zmiernenie koktania, nie je dlhý, ale niektoré z týchto možností vám môžu pomôcť:

  • Ak vám hra umožňuje predkompilovať shadery, nechajte to. Môže to chvíľu trvať, ale zážitok z hry nebude zasekávať.
  • Pokiaľ aktualizácia hry neobsahuje opravu zaseknutia shadera, počkajte, kým nedokončíte hranie, inak sa shadery môžu znova skompilovať.
  • Počkajte na aktualizácie ovládača GPU, kým nedokončíte aktuálnu hru, pre prípad, že by znova spustila kompiláciu.
  • Keď sa v hre začne zasekávať kompilácia, pred ďalším hraním stlačte tlačidlo pozastavenia a počkajte, kým sa nedokončí.
  • Používajte DirectX 11 namiesto DirectX 12 verzie hry. Zasekávanie shaderov je často obmedzené alebo chýba, hoci sa funkcií DX12 vzdáte vo výhodnej cene.
  • Hru si radšej zahrajte na konzole.

Postupom času tento problém pravdepodobne zmizne alebo bude oveľa menej rušivý. Vývojári môžu napríklad presunúť kompiláciu shaderov na jadrá CPU, ktoré hra nepotrebuje, čo je bežná situácia na moderných počítačoch s mnohými jadrami. Dovtedy zostane #stutterstruggle pri počítačových hrách nepríjemným problémom.