Trhání při kompilaci shaderů: proč jsou první minuty nejhorší

Proč hra zasekává na všem, co ti ukazuje poprvé, proč to aktualizace ovladače přivede celé zpátky a proč je smazání mezipaměti shaderů ta jediná „oprava“, po které si to zaručeně zaplatíš znovu.

Spustíš hru, kterou jsi chvíli nehrál, a prvních deset minut je hrozných. Každá nová zbraň, každý nový efekt, první výskyt konkrétního nepřítele — zásek. Pak se to usadí a druhý večer už hra běží plynule. Neudělalo to nic, co jsi změnil. Udělal to čas.

Nebo ta druhá verze: hra byla v pořádku, aktualizoval jsi ovladač grafiky a celá první hodina je zase drsná.

Obojí je tentýž mechanismus a je to jedna z mála příčin trhání, která je opravdu normální — v tom smyslu, že ji zdravý počítač se správným softwarem vyrábí sám.

Proč se ta práce musí odehrát na tvém počítači

Shader je malý program, který běží na GPU. Vývojář hry ho napíše ve vysokoúrovňovém jazyce a zkompiluje, ale jen kus cesty — do mezitvaru, který popisuje, co program dělá, ne jak to má udělat konkrétní grafický čip.

Strojový kód, který tvoje GPU skutečně vykoná, se dopředu vyrobit nedá, protože závisí na dvou věcech, které vývojář nemá: na přesné architektuře tvého GPU a na přesné verzi tvého ovladače. Mezitvar překládá na instrukce pro křemík v tvém počítači až vlastní překladač ovladače, a tahle kompilace běží na tvém procesoru, ve chvíli, kdy hra ten shader potřebuje.

Takže když scéna poprvé potřebuje určitou kombinaci shaderu, stavu vykreslování a rozložení vrcholů, musí se něco zkompilovat. Jestli si o to hra řekne uprostřed snímku a čeká, přijde ten snímek pozdě. Ten pozdní snímek je zásek, který jsi ucítil.

Výsledek se zapíše do mezipaměti shaderů na disku. Když se totéž objeví podruhé, zkompilovaný kód se z mezipaměti přečte, místo aby se stavěl znovu — přesně proto se hra během hraní zlepšuje a proto je druhé sezení v pořádku.

Co tě pošle zpátky na začátek

Mezipaměť platí jen pro ovladač a hardware, které ji postavily. Cokoli z tohohle seznamu ji celou nebo zčásti zneplatní a první hodina hraní je zase drsná:

Nic z toho není chyba. Je to cena za to, že je mezipaměť správná, a ne zastaralá.

Jak poznáš, že máš právě tohle

Kompilace shaderů má rozpoznatelný otisk a nevypadá jako nic jiného na seznamu příčin trhání:

  1. Odezní. To je určující znak. Jestli je tvoje trhání ve třetí hodině stejné jako ve třetí minutě, není to tohle.
  2. Je vázané na novost. První pohled na zbraň, na oblast, na efekt počasí, na konkrétního nepřítele. Projít tutéž chodbu podruhé je čisté.
  3. Nevšímá si teploty ani délky sezení. Teplotní problémy se zhoršují, čím déle hraješ; tohle se zlepšuje.
  4. Vrací se podle rozvrhu, který umíš pojmenovat — po aktualizaci ovladače, po patchi, po úklidu —, ne náhodně.
  5. Vytížená část není GPU. Kompilace je práce procesoru. Grafická karta, která během těchhle záseků sedí hluboko pod plným vytížením, je tady očekávaná a není důkazem toho samostatného problému, který popisují náhlé propady FPS ve hrách.

Jestli těch pět tvůj příznak nepopisuje, vrať se k obecnému seznamu v proč hry trhají na Windows 11 — tamní příčiny samy neodezní.

Co s tím

Většinou: nech to proběhnout. Ale po okrajích jsou skutečné volby.

Nemaž mezipaměť shaderů jako opravu. To je ta jedna rada na téhle stránce, kterou se vyplatí přečíst dvakrát. Vyprázdnění mezipaměti se pořád dokola předepisuje jako lék na trhání, a ve skutečnosti dělá to, že si zaručeně zaplatíš celou kompilaci znovu od nuly. Legitimní krok při hledání problému to je u poškozeného obrazu po výměně ovladače. Opravou výkonu je to přesně naopak.

Použij vlastní předkompilaci hry, jestli ji nabízí, a nepřeskakuj ji. Hra, která před nabídkou stráví dvě minuty na obrazovce "compiling shaders", dělá přesně tuhle práci dopředu — a tam tě nestojí nic než čekání.

Po aktualizaci ovladače nech počítač chvíli zapnutý. Některé ovladače přestavují shadery pro DirectX 12, když systém zahálí, právě proto, aby toho běhové prostředí muselo později udělat míň. To pomůže jen tehdy, když ten klidový čas počítač dostane.

Drž hru i její mezipaměť na SSD a mimo synchronizovanou složku. Klient cloudu sleduje každý zápis a hra svou mezipaměť shaderů zapisuje neustále — z každé položky se stane práce filtračního ovladače plus odeslání po tomtéž připojení, které používá tvůj zápas.

Neměř uvnitř toho okna. Záznam pořízený v prvních minutách po aktualizaci ovladače měří překladač, ne ovladač. Pravidla porovnávání popisuje Jak číst výsledek benchmarku; tohle je snadný způsob, jak to první z nich omylem porušit.

Co k tomu říká sken

Sken trhání kontroluje, jestli nebyla nedávno vyprázdněná mezipaměť shaderů, a když takovou najde, říká totéž co tahle stránka: hra smazanou mezipaměť za chodu znovu zkompiluje, trhání na začátku sezení je normální a samo odezní a benchmarkovat se nemá, dokud to okno neuplyne.

Záměrně se to nepředkládá jako závada k opravě. Není co opravovat — je tu cena, která se jednou zaplatí, a to poctivé, co nástroj může udělat, je říct ti, že jsi uvnitř ní, abys nestrávil večer obviňováním nějakého nastavení.

Kde to přestává být normální

Trhání z kompilace, které nikdy neodezní, je jiný problém: mezipaměť se neudržuje. Zkontroluj, jestli není disk plný, jestli mezipaměť mezi sezeními nemaže naplánovaný úklid a jestli složka hry neleží někde, odkud ji pořád vyklízí klient cloudu nebo limit velikosti.

A jestli je běh nerovnoměrný celou dobu, a ne jen na začátku, díváš se místo toho na vysoké průměrné FPS, ale špatné 1% low, což je problém událostí, ne zahřívání.

Související

Hraješ CS2? Které možnosti spuštění ještě něco dělají a kde v menu obrazu opravdu leží snímky: Nízké FPS, trhání a sekání v CS2: změřený kontrolní seznam

w0a nezmění žádné nastavení Windows, dokud o to nepožádáš, a tweak si před zápisem nové hodnoty uloží tu starou. Upozornit mě

Pomohla ti tahle stránka?

Co chybělo, nebo co nefungovalo? Čteme každou jednu takovou zprávu.

Jestli tahle stránka problém nevyřešila, napiš nám — uveď, který článek jsi četl, a my ten článek opravíme.