Hlavní navigace

Hra World of Tanks dostává ray tracing. Ale od Intelu a na všech GPU, ne přes Nvidia RTX

18. 10. 2019

Sdílet

Už je to rok od vydání grafických karet Nvidia GeForce RTX s podporou hardwarové akcelerace ray tracingu na RT jádrech a objevila se řada her, které efekty tohoto typu mají zakomponované. Nyní se s ray tracingem přidává populární multiplayerová hra World of Tanks (alias WoT), což potěší hodně fandů i u nás, protože tento titul je velmi populární. Zajímavé však je ještě to, že v tomto případě nejde o iniciativu Nvidie, ale Intelu. Ray tracing v této hře proto běží na obecných výpočetních jednotkách a prakticky na všech trošku modernějších GPU.  

Ray tracing ve World of Tanks: na všech GPU podporujících DirectX 11

Tato novinka je výsledkem spolupráce autorů hry Wargaming s Intelem, díky níž byla do Core Enginu používaného hrou přidána podpora pro ray tracingové efekty. Běží na API DirectX 11 a měla by alespoň teoreticky běhat na všech grafikách s podporou funkcí této generace (Tedy od Radeonů HD 5000 a Nvidia Fermi/GTX 400). Výpočty nevyužívají žádné speciální jednotky, jen normální shadery v GPU. Ve World of Tanks je tato implementace použitá k vykreslování realistických stínů, ovšem samotná infrastruktura by asi potenciálně mohla být použita i pro jiné efekty, a možná také pro jiné hry.

Ray tracing je jak už bylo řečeno využitý po vykreslování realistických stínů, ovšem ne pro všechny objekty, ale jen pro tanky. A to ty pohybující se, pro zničená vozidla nikoliv. A také se nepočítá pro vozidla, která nejsou ozářená přímým slunečním světlem. Tyto stíny by měly být kvalitnější, protože běžná rasterizace používá triky (shadow mapping), které způsobují různé artefakty, nerealistické chování a tyto klasicky počítané stíny nebyly vykreslovány na větší dálku (víc jak 100 metrů).

Vyzkoušet si můžete demo

Nová verze s možností používat ray tracing pro stíny by měla být uvolněna v blízké budoucnosti. Již teď (od včerejška) je však dána volně ke stažení samostatná demo aplikace či vlastně benchmark World of Tanks enCore RT, se kterou si můžete efekt vyzkoušet. Najdete ji zde (vyžaduje instalaci launcheru Wargaming.net Game Center).

V aplikaci lze kvalitu ray tracingu nastavit podobně jako další parametry (na vypnuto, high, maximum a ultra). Jen pozor na to, že česká lokalizace používá pro tuto volbu chybný mechanický překlad „stíny sledovaných paprsků“, zkráceně ale „RT“, což už dává smysl. Samotné demo pak není interaktivní, scéna slouží toliko k vyzkoušení výkonu počítače. Výsledek dostanete ne v FPS, ale jako skóre, kdy do 3000 je výkon neuspokojivý, 3000 až 8000 je dobré, 8000 až 10 000 skvělé a přes 10 000 má údajně zajišťovat, že zvolená nastavení nebudou způsobovat lagy nebo poklesy FPS.

Konfigurace benchmarku World of Tanks enCore RT Konfigurace benchmarku World of Tanks enCore RT

V benchmarku/demu je tento efekt ray tracingových stínů volitelný a nebude zapnutý ve výchozím nastavení (a to ani pro detaily Ultra), stejně tak tomu bude i ve finální hře. Zapnout si ho bude moci každý volitelně (a posoudit, zda to nestojí příliš mnoho výkonu). V naší galerii si můžete prohlédnout snímky z tohoto dema v nastavení Ultra a pro srovnání bez ray tracingových stínů, obrázky jsou z nastavení Ultra/RT Ultra a konvertované do 4:4:4 JPEGu s 90% kvalitou.

Galerie: Demo ray tracingu ve World of Tanks: kvalita Ultra, RT On

Galerie: Demo ray tracingu ve World of Tanks: kvalita Ultra, RT Off

Jak ray tracing v World of Tanks funguje?

Pokud si připomenete princip fungování ray tracingu u grafik Nvidia Turing („Nvidia RTX“), tak je u něj použitý algoritmus Bounding Volume Hierarchy (BVH). Ten spočívá v tom, že každý objekt je vyplněn (respektive, je opsán) neviditelnými kvádrovými pomocnými objekty (boxy), které mají stromovou hierarchii – celý objekt je obalen jen několika málo velkými boxy, které jsou pak postupně dělené na menší a menší pod-kousky.

Princip fungovani ray tracingu s algoritmem Bounding Volume Hierarchy 02 Polygonový model objektu

RT jádra grafik Turing dělají zejména jednu věc: vypočítávají, zda konkrétní paprsek ray tracingu prochází konkrétními z těchto pomocných kvádříků. Když je nalezen průsečík s prvním velkým boxem, jsou pak testovány jeho podboxy a v každé fázi se eliminuje část kandidátů díky oné stromové hierarchii. Až je nalezen box, který paprsek trefí, i na nejnižší úrovni, teprve se začne analyzovat reálná interakce s částí objektu scény, která se nachází uvnitř onoho pomocného boxu poslední úrovně.

Princip fungovani ray tracingu s algoritmem Bounding Volume Hierarchy 03 Obalení objektu neviditelnými bounding volume boxy

Když je nalezen průsečík, tak práce RT jader končí, práci přebírají univerzální programovatelné shadery, které vypočítávají už samotné barvy výsledných pixelů pomocí ray tracingového algoritmu. Tento systém analýzy kolize paprsku s objektem je používán proto, aby GPU nemuselo na průsečík analyzovat každý z jednotlivých trojúhelníků modelu, který u tanku má mít typicky okolo 50 000 trojúhelníků. Pro jeden paprsek kreslící stín pak stačí okolo pár desítek testů kolize s boxy/trojúhelníky.

Princip fungovani ray tracingu s algoritmem Bounding Volume Hierarchy 05 Nadřazené bounding volume boxy vyšší úrovně a menšího počtu

Stejná technika s Bounding Volume Hierarchy, ale na CPU

Tuto techniku s hierarchií bounding volume boxů přebírá i implementace ray tracingu ve World of Tanks. Ovšem místo aby se analyzování/hledání průsečíků s boxy v hierarchii provádělo pomocí RT jader, dělá ho jednoduše CPU. Když je hierarchie boxů a průsečík s objektem zanalyzována, je opět jako u Nvidie práce předána shaderům (stream procesorům) GPU, aby dopočítaly finální pixel na základě získaných informací. A analýza oné struktury BVH je místem, kde přichází na řadu Intel. War Gaming používá ray tracingový kód Intel Embree, který má optimalizovanou mnohovláknovou implementaci právě analýzy BVH. Proti původní neoptimalizované verzi, která potřebovala 8ms výpočtů na jeden snímek, je s Embree potřeba téměř zanedbatelný čas a navíc se dá výpočet dělat paralelně se samotným vykreslováním na GPU.

Princip fungovani ray tracingu s algoritmem Bounding Volume Hierarchy 07 Analýza průchodu paprsku postupně vyhodnocuje, kterými boxy dráha vede

Počítání na CPU může vypadat jako špatný nápad, protože jak známo, má pro grafické operace GPU mnohem více výpočetního výkonu než obecné CPU. Ovšem je tu ta výhoda, že dnešní CPU s mnoha jádry nemusí být při hraní vytíženo, kdežto GPU typicky je a pokud byste shaderům přidali další práci, pak snížíte snímkovou frekvenci, na které hra poběží. CPU tedy má teoreticky méně výkonu, ale zase je do určité míry „zadarmo“. U World of Tanks tedy ray tracing takto využívá sílu CPU k velké části výpočtů a z hlediska využití GPU by to mělo být vcelku efektivní.

Princip fungovani ray tracingu s algoritmem Bounding Volume Hierarchy 08 Po dosažení nejnižší úrovně se analyzují už jen trojúhelníky nacházející se uvnitř posledního boxu, dokud se nenajde průsečík

Denoising pro měkké stíny

Výpočet na CPU bude ale přirozeně mít menší výkon/kapacitu, takže tato technologie asi dovoluje použít na scéně menší množství ray tracingových efektů, než ray tracing s hardwarovými akcelerátory v GPU. Proto také je přítomnost ray tracingových stínů omezená, na jeden pixel je například používaný vždy jen jeden paprsek.

Ukazka sumu randomizovanych paprsku a vysledku s denoisingem Ukázka šumu randomizovaných paprsků a výsledku s denoisingem

Aby stíny byly měkké s polostínem po okraji, jsou paprsky randomizované, což konturu, která by jinak byla ostrá, rozostří, ovšem vytvoří šum. Podobně jako v implementaci Nvidie je proto použitý ještě denoiser, který ostrý šum patřičně rozmaže/odšumí a vytvoří tak slušnou aproximaci měkkého stínu. Tento denoiser je spatio-temporální, tedy odšumuje průměrováním s okolními pixely, jakož i se „sousedy“ na stejné pozici z předchozího/následujícího snímku (tzv. temporální filtrování).

Galerie: Technologie ray tracingu ve World of Tanks

Byl pro vás článek přínosný?