Ray tracing ve World of Tanks: jak funguje a jaký má vliv na výkon?
18.10.2019, Jan Vítek, recenze
Autoři hry World of Tanks se nedávno pochlubili tím, že do své hry implementovali ray tracing, který bude moci pracovat pod DirectX 11 a nebude potřebovat žádný zvláštní hardware, čili GeForce RTX. Jak to funguje?
Kapitoly článku:
- Ray tracing ve World of Tanks: jak funguje a jaký má vliv na výkon?
- Kvalita zobrazení stínů
- Výkon a jeho škálování
Správně bychom měli mluvit o tom, že hra World of Tanks dostala ray tracingem vykreslované stíny. Nejde tedy o odrazy či globální osvětlení, ale pouze o stíny, podobně jako ve hře Shadow of the Tomb Raider. Rozdíl je ovšem ten, že tato hra vyžaduje GeForce RTX k tomu, aby s ray tracingem fungovala při použitelné snímkovací frekvenci, kdežto pro World of Tanks to neplatí. Můžeme se tak ptát, jak se to v rámci nové verze enginu enCore RT podařilo.
Každý si může vyzkoušet, jak na jeho sestavě engine enCore RT poběží, neboť Wargaming už nabízí World of Tanks s touto verzí. RT stíny jsou nabízeny ve třech nastaveních kvality, přičemž ve výchozím jsou zcela vypnuty.
My se ale nyní zaměříme na vysvětlující video, které ukazuje způsob implementace ray tracingu, která funguje na jakékoliv grafické kartě pro DirectX 11.
Video začíná s vysvětlením toho, proč klasicky vykreslované stíny nestačily. Autoři nebyli spokojeni s tím, že jsou kvůli snaze optimalizovat hru i pro slabší sestavy omezeni jejich rozlišením, kvůli kterému stíny nevypadaly při velkém přiblížení moc hezky, po vzdálení na 100 metrů a více od objektu také stíny zmizely a také mohly poněkud zaostávat za objektem, který je měl tvořit. Pokud se nemýlím, to v historii dokázal pouze Lucky Luke (a pochopitelně Chuck Norris), ale jistě žádný tank.
enCore RT využívá otevřenou knihovnu Embree od Intelu, která je součástí jeho API zvaného One a dokáže využívat instrukce Intel SSE, AVX, AVX2 a AVX-512. Prozatím jde pouze o stíny, ale Wargaming chce později přidat i realistické odrazy, globální osvětlení a ambient occlusion, čili zastínění okolím, ovšem nebude to hned. A my se zatím nedozvíme, zda by i v těchto případech na tato vylepšení měl stačit běžný hardware, protože pokud ano, možná by to byl pro NVIDII menší problém. Ze zveřejněného videa ale spíše vyplývá to, že takto vykreslovaná grafika už bude potřebovat hardware zcela jiného kalibru a brzy se také dozvíme proč. Wargaming totiž využívají pro vykreslování stínů metodu, která by pro ostatní účely mohla jen těžko posloužit.
Raytracing ve WoT pracuje v principu jako obvykle. Grafická karta při vykreslování objektů prostě vyšle pomyslný paprsek od daného pixelu ke zdroji světla a sleduje, zda ten má volnou cestu, nebo narazí na trojúhelník tvořící drátěný model. Pokud jde ale o objekt tanku složený z nějakých 50 tisíc polygonů, obvykle by musela otestovat všechny, což je extrémně náročné.
Proto jsou trojúhelníky tvořící model tanku postupně seskupovány v jednotlivých krocích, až je z nich vytvořen velice jednoduchý model, který může mít třeba jen 5 skupin, jako na obrázku. Pak stačí zjistit, zda paprsek náhodou nenarazí do jedné z těchto tzv. krabic a pokud ano dál se počítá už jen jednou krabicí, která se rozdělí na dvě, ty se zase otestují, a tak dále, než se ve stromové struktuře dojde ke konkrétnímu trojúhelníku. Je tak jasné, že jde o daleko méně kroků, a to třeba jen 25, než kdyby se muselo otestovat všech 50 tisíc trojúhelníků.
Mluvíme zde přitom o BVH struktuře (Bounding Volume Hierarchy), přičemž nejde o práci pro GPU, ale pro CPU. To by bez použití výše uvedených instrukcí a API trvalo moc dlouho, ale s touto výbavou to má dle Wargaming zanedbatelný dopad na výkon a vyžadováno je minimum procesorového času, zvláště když je k dispozici více jader. Vytvoření BVH struktury pro 30 objektů tak zabere v průměru 1,5 ms. BVH je pak naservírována grafické kartě, která už si sama dle ní provede samotné sledování paprsků.
To ovšem není vše, neboť takto by to mohlo fungovat se zdrojem světla v jenom jediném bodu, což by tvořilo nerealisticky ostré stíny. Slunce má svou plochu, a tak tvoří i při přímém osvětlení měkké stíny, které se těžko simulují, když máme k dispozici pro jeden pixel jen jeden simulovaný paprsek. Zde to bylo vyřešeno s využitím randomizace v každém snímku, což ovšem způsobí značný šum, který je poté odstraněn s využitím algoritmu, jenž stín v podstatě rozmaže.
Každý všímavý člověk ale ví, že krátké stíny od slunce jsou ostřejší než dlouhé, což zajišťuje opět zmíněný algoritmus, který rozhoduje, kde budou přechody stínu měkké a kde budou ostré. Logicky to bude záviset na vzdálenosti zastíněného povrchu od objektu, který stín vrhá.
I tak ovšem autoři upozorňují, že dopad na výkon tu je a pokud nějaká sestava hru World of Tanks sotva zvládá, ray tracing není radno zapínat. Ostatně právě proto je ve výchozím nastavení vypnutý.
My se nyní podíváme, jak ray tracované stíny ovlivní výkon veskrze průměrně výkonné sestavy a také jak se od sebe kvalitativně liší jednotlivá nastavení.