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

20
Ray tracing ve World of Tanks 1600

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


Hra World of Tanks dostává ray tracing. Ale od Intelu a na všech GPU, ne přes Nvidia RTX
Ohodnoťte tento článek!
5 (100%) 14 hlas/ů

20 KOMENTÁŘE

      • Takže i když nvidia rochodila RT a udělala na to RTX grafiky, tak teď kvůli “hladu” ostatních po RT , vznikne spousty her s RT, pro které ale budou RT jádra k ničemu? Jaký smysl pak grafiky s RT jádry budou mít..?

        Tím nechci říct že by mi vývoj her co umí RT přes obecná jádra a DX vadil, jen že by to měli udělat tak, aby to mohlo z RT jednotek těžit, protože jinak potom na co ty RT jednotky budou…

          • Pre tých ktorým stále uniká význam RT cores, tak ide o akceleráciu operácii spojených s RT. Píše o tom aj samotný článok. Grafiky s RT cores by to čo je vo WoT a v takej kvalite zvládli s oveľa lepším framerate-om alebo v citelne väčšom rozsahu.

            • Marku, vždyť většina z těch haterů ani nemůže přes svůj věk pamatovat dobu přídavných matematických kooprocesorů.
              Jinak tato implementace RT přes shadery v DX11 bude z hlediska RTX karet o ničem. Poběží to na nich úplně stejně, leda že by NVIDIA ty shadery přepsala pro RTX grafiky. Možná to tak dopadne, zvláště když je komplet přepisovali doteď po autorech-prasatech.
              Jinak jsem zvědav, kdy přijdou pořádné implementace přes standard DXR, kde si bude moci každý zvolit kvalitu RT a zároveň tam bude například zaklikávátko zda použít HW akceleraci přes speciální RT jednotky. Nebo bude uvedeno, že třeba nejvyšší 3 nastavení budou vyžadovat RT HW. Prostě ať si každý zvolí podle svého a podle možností svého HW. Jak jednoduché.
              DXR kód by byl jeden a dál už by to dělily ovladače zda instrukci zpracovat na procesoru, v shaderu nebo RT jádrech. A dovedl bych si představit, že se znovu objeví samostatné akcelerátory, tentokrát pro RT. Případně jako druhá klasická grafika.

            • Ten CPU kód pro BVH traversal není v rámci shaderového kódu, takže by ho asi Nvidia nemohla ve vrstvě ovladačů nahrazovat jako se shadery. Na tom, co je ve shaderech, už zase ty RT pokud tomu správně rozumím nemají moc co akcelerovat.

              Tady by to spíš vypadalo tak, že by s nima Nvidia šla do partnerství, v kterým by se pak udělal separátní implementace toho, co teď dělá to Intel Embree, na RT jádrech Nvidie – teda port na jejich DXR/RTX systém. Jestli se něco takového stane, asi záleží na tom, jestli se oběma stranám do toho bude chtít jít, technicky by to určitě jít mělo, jen jestli by byla vůle/chtění.

            • Díky za upřesnění, asi by to ale chtělo upravit i v článku mimo ten jeden odstavec nebo jsem to jen blbě pochopil. Viz citace:
              “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.”
              “Výpočty nevyužívají žádné speciální jednotky, jen normální shadery v GPU.”

            • Význam RT cores nám neuniká, jen jde o to, jestli ten RT v te hre umi ty jadra vyuzit, kdyz je to napsany pro DX a obecny jadra. To pak bude grafika vytizena vypoctem RT a celej RT blok v grafice se bude flakat naprazdno…

            • @snejdy: To je práve ten vtip. Keď ide o firmu NVIDIA, tak ak by nemali HW podporu DXR a napríklad AMD ju malo, tak tu niektorí ludia budú písať ako NV brzdí vývoj a že núti vývojárov písať kód mimo definovaného štandardu. Keď teraz NVIDIA predbehla ostatných a tí sa snažia na vlne RT urvať niečo na marektingu a obchádzajú DXR, tak je opäť pre tých istých ludí NV vlastne HW podpora DXR zbytočná, lebo ju iné firmy teraz nevyužijú. Preto je to iba “marketing”. 🙂 Je to už nuda. Namiesto toho, aby bol tlak na ostatných, nech využívajú štandardy (na NV je taký tlak vždy keď ide mimo ostatných), tak sa robí tlak na NV, že vlastne jej práca je zbytočná.

            • Netuším, v čem je problém. Tato hra s touto rt fíčurou pojede na všech počítačích, pod DX11, bez ohledu na to, jestli mají RTX grafiku nebo ne. Je to dle mého podobné tomu, co už delší dobu má Nvidia v rámci Gameworks pod názvem HFTS. A podle testů je vidět, že i za tuto fíčuru se pochopitelně platí výkonem (fps spadnou na cca 60%). S tím rozdílem, že tu asi nebude těžký hejt, protože to není od Nvidie 😉 A pokud má někdo problém s tím, jestli mu to bude/nebude vytěžovat RT jádra u Turingů, tak to ani ta fíčura v Gameworks, počítám. Spíše se podívejte na to, jak jedna poměrně chabá rt fíčura zaklekne na výkon. Řekl bych, že tohle bortí takové ty ideje, že někdo jiný udělá nějaký super rt, co pojede min. v rtx kvalitě/fps přes normální shadery. No možná udělá, akorát že ty shadery nebudou shadery, bude to vyhrazený pro rt výpočty a bude se to třeba jmenovat jinak než RT 😉

        • Měli by se k tomu využívat instrukce Intel SSE, AVX, AVX2 a AVX-512, tedy vše co AMD má (kromě AVX-512,ale to nemají tuším ani klasické desktop procesory od Intelu).
          Pro Wargaming, ale i jiné je to atraktivní hlavně proto, že jde o otevřené knihovny od Intelu – tedy žádné licence, žádné poplatky, žádné omezení jako v případě RTX od Nvidie.

  1. Takze uz mame i benchmarky. Aby to vypadalo o chlup lip nez puvodni reseni, je potreba RT na ultra. Propad fps ze 114 na 67fps. Zda se, ze RT stiny i v tehle oklestene forme nejsou “zadarmo”. To ty starsi HFTS stiny prisly vykonove levnejc a mozna i vypadaly lepe.