Ray tracing: kvalitnější 3D grafika
DirectX Raytracing (DXR) není nějaký radikální převrat v tom smyslu, že by se opouštěla tradiční grafická „pipeline“ používaná dnes a založená na principu rasterizace. To se od přechodu k ray tracingu někdy předpokládalo (například Imagination Technologies měla několik speciálních architektur pro tento druh vykreslování, experimentálních i komerčních). Microsoft místo toho zavádí ray tracing jako rozšíření možností současného přístupu ke grafice a jako techniku, která poběží v jejím rámci. DXR je proto API, které má být kompatibilní se současnými GPU a jejich možnostmi. A jako obvykle by úlohou tohoto API mělo být to, poskytnout vývojářům standardizované rozhraní, proti kterému budou moci psát kód.
Ray tracing je metoda vykreslování, jež je potenciálně kvalitnější než rasterizace. Spočívá ve výpočtu drah imaginárních paprsků probíhajících zpětně od oka pozorovatele ke všem různým objektům na scéně, přičemž se vypočítávají jejich odrazy a interakce až k světelným zdrojům, od nichž se světlo reálně dostává do oka. Tento přístup je velmi výpočetně náročný, proto také tato metoda pro zobrazení v reálném čase není používána. Naopak pro vykreslování statických obrazů nebo třeba filmů je standardem. Herní grafika proto používá méně kvalitní rasterizaci, jež je však jednodušší. V podstatě spočívá v geometrické transformaci promítající trojúhelníky polygonálních modelů s texturami do rastrové plochy a poté obraz vylepšuje pixel shadery.
![Schéma fungování ray tracingu (Zdroj: Wikimedia Commons). Vykreslování funguje pomocí sledování dráhy paprsků ze zdroje světla a jejich odrazů či odstínění, až k oku pozorovatele](https://i.iinfo.cz/images/57/ray-tracing-schema-wikipedia-commons-large.png)
Problém s výpočetní náročností u ray tracingu stále trvá. Microsoft ovšem s DXR nenavrhuje počítat celou scénu ve hrách, tedy alespoň dnes ne. Prvním krokem je integrace této metody jako pomocné techniky, doplňující a zkvalitňující obraz ve hrách. Ray tracing by měl obzvlášť dobře vykreslovat například stíny nebo odrazy a odlesky, a DXR bude umožňovat jím podobné efekty na GPU zpracovat. Vize tedy je, že ray tracing bude spolupracovat ve společném prostředí se standardní rasterizací, což umožňuje tuto metodu použít pro herní grafiku vykreslovanou v reálném čase. Postupem času se ale podíl ray tracingu a jeho vyšší kvality podle Microsoftu bude zvyšovat, z čehož by vyplývalo, že se na něj jednou ve vzdálenější budoucnosti může přejít jako na dominantní či rovnou jedinou metodu pro celé vykreslování.
Vykreslování se bude chovat jako výpočetní úloha
Toto je umožněno tím, že GPU poslední doby dosáhla skutečně vysokého stupně programovatelnosti a jejich výpočetní jednotky (stream procesory/„Cuda jádra“, postaru shadery) jsou natolik univerzální, že na nich lze provádět ray tracing stejně jako mnoho jiných výpočetních operací. API DXR ale poskytne standardizovaný způsob, jak toto dělat, místo aby si každý vývojář musel implementovat vlastní pomocí abstrakce založené třeba jen na OpenCL nebo DirectCompute. Díky této standardizaci by také měla být zajištěna široká kompatibilita s různými GPU.
Tento ray tracing v DirectX tedy nutně nespočívá v architektonické změně GPU nebo nějakém speciálním hardwaru, jako tomu bylo třeba u DirectX 11. Situace je spíše jako u DirectX 12, nad nímž je také DXR postaveno a které při příchodu také víceméně jen využívalo existující možnosti DX11 hardwaru. DXR nezavádí nějaký nový typ funkčních jednotek, zůstáváme stále jen u klasických fixních funkcí rasterizační pipeline a univerzálních programovatelných výpočetních jednotek. Právě na těch jsou implementovány funkce DXR, takže toto rozhraní zavádí různé nové HLSL shadery (ray-generation, closest-hit, any-hit, miss), které ale budou vypočítávány na stejných standardních stream procesorech. DXR je tak do značné míry vlastně softwarová „GPGPU“ aplikace.
Microsoft a výrobci GPU by ale zřejmě eventuálně měli přijít s nějakými novými rozšířeními GPU, které budou akcelerovat speciálně ray tracing a Nvidia již oznámila, že má nějaké takové speciality v GPU Volta. Nicméně základní úroveň DXR má onu „softwarovou“ povahu, která zároveň slouží jako záložní „fallback“ zajišťující kompatibilitu se staršími GPU. Tento fallback bude pracovat se všemi GPU podporujícími DirectX 12 a používá pro výpočty Compute Shadery. Vyšší úroveň s hardwarovou podporou by se ale pravděpodobně také měla točit hlavně okolo shaderů a programovatelných jednotek. Blogpost Microsoftu, který blíže popisuje koncepci DXR, píše, že budoucnost GPU vidí právě v rozvoji těchto univerzálních programovatelných jednotek, nikoliv v přidávání hardwaru s fixní funkcí.
Podpora softwaru, hardwaru a Nvidia RTX
Ray tracing v DirectX se zřejmě nerozšíří nějak rychle (pro představu se asi můžeme podívat, jak rychle se prosazují a prosazovaly DirectX 12 a obecně nízkoúrovňová API). Microsoft technologii nyní oznamuje zejména k odstartování celého ekosystému a aby vývojáři mohli začít s technologií pracovat či alespoň experimentovat. Vývojáři by měli mít nyní možnost zapnout experimentální podporu DXR ve Windows, ta by se měla nacházet již ve verzi Fall Creators Update. A plány na podporu již ohlásily například firmy Epic Games s Unreal Enginem, Dice, Electronic Arts (studia Frostbite a SEED), objevit se má také v enginu Unity nebo v 3DMarku. V některých případech zřejmě spolupráce s Microsoftem neveřejně probíhaly již zhruba po dobu jednoho roku, takže úplně na startu softwarový ekosystém není.
Pokud jde o podporu hardwarovou, tam je situace nejasnější. Jak už bylo řečeno, na základní rovině funguje DXR na všech GPU kompatibilních s DirectX 12, měla by tedy být pokrytá současná i dávnější produkce Intelu, Nvidie i AMD. Nicméně tato GPU pravděpodobně budou potřebovat aktualizace ovladačů, aby na nich program pro DXR mohly běžet. Komplikovanější otázka je, jak to bude s oněmi eventuálními speciálními hardwarovými funkcemi, zaměřenými zvlášť na ray tracing, nad úroveň onoho „GPGPU“ fallbacku.
Zde jsou zatím informace jen o Radeonech a o kartách GeForce. V případě AMD máme jen stručné vyjádření, dle kterého firma s Microsoftem na DXR spolupracuje, ovšem zatím neuvádí žádné podrobnosti o tom, kdy by mohly vyjít první ovladače s podporou nebo jak to bude s případnými hardwarovými specialitami pro ray tracing. Naopak Nvidia měla již připravené vlastní oznámení a představila své plány poněkud jasněji.
Nvidia RTX na GPU Volta
Informace o ray tracingové technologii pojmenované „RTX“ od Nvidie unikly již o víkendu, ale nakonec se ukazuje, že nejde o nějakou sólo akci. Nvidia také spolupracuje s Microsoftem a podporuje DirectX Raytracing. Její RTX je doplňkem pro tuto standardní technologii, který budou hry pro DSX využívat klasicky skrze ovladače Nvidie. Informace jsou bohužel zatím také celkem skoupé, ale zdá se, že RTX je směsí softwarových prvků v ovladačích, ale zřejmě už i nějakých těch specifických na ray tracing uzpůsobených vlastností hardwaru. Zdá se tedy, že Nvidia by již mohla nějakou nadstandardní podporu pro DXR mít.
Jaké prvky to jsou, ale firma neprozrazuje. Co nepotěší je, že tento hardware je podle Nvidie jen a pouze v GPU architektuře Volta, která v současnosti není v žádné herní grafické kartě GeForce, pokud se nepočítá enormně drahý Titan V. Ony speciální hardwarové prostředky (teoreticky by také mohlo jít i o nějaké optimalizace výkonu nebo instrukční rozšíření) totiž v architektuře Pascal nejsou. Kromě Volty by je ovšem snad měla mít i nová architektura (snad pojmenovaná Turing), která údajně má vyjít v Q3 2018.
Nvidia využije tensor jádra
Z toho, že Nvidia k oněm hardwarovým prvkům RTX nic neřekla, existuje jedna výjimka. Pozoruhodné je, že v těchto technologiích údajně mají přijít ke slovu koprocesory Tensor Cores, které Volta používá k výpočtům neuronových sítí. Jejich využití pro RTX je ale v podstatě trikem, není to tak, že by se Tensor Cores podařilo zapřáhnout do obecného výpočtu. Nvidia ale vyvinula obezličku, která je pro ray tracing využívá. Tato technika spočívá v redukci počtu paprsků, které jsou při vykreslování analyzovány, což přináší zrychlení, ale samozřejmě sníží kvalitu a projevuje se to určitým šumem a chybami v obrazu. Ovšem nyní přichází chvíle pro tensor cores. Nvidia na souboru obrazů vykreslených s vyšším a pak s menším počtem paprsků natrénovala postprocessingový filter na bázi neuronové sítě, který může běžet na tensor cores v GPU Volta. Tento filtr by měl redukovat vzniklé artefakty a sníženou kvalitu v obraze, Nvidia o něm mluví jako o „denoiseru“.
Jde o pozoruhodný nápad, i když nasazení celé neuronové sítě jen proto, aby se ušetřil výpočetní výkon na jiném místě, nezní úplně optimálně. Nicméně v některých případech by asi zrychlení získané tímto kompromisem mohlo být zajímavé. Onen filtr asi nedokáže zázraky a ztrátě kvality úplně nezabrání (odšumovací filtry sebou obvykle berou i detaily), ale jak je dobrý, to samozřejmě ukáže až nasazení v praxi. Tento trik je ale jinak pozoruhodný i tím, že ukazuje jinou příležitost pro Tensor Cores. Teoreticky by se měl dát podobně natrénovat i filtr provádějící anti-aliasing, který by pak na nich také běhal. Možná, že Nvidia něco takového odhalí, až či pokud vydá karty GeForce obsahující tyto jednotky. Ve sféře videa jsou totiž neuronové sítě proti aliasingu poměrně úspěšné (viz třeba filtr NNEDI3 pro Avisynth).
Ke slovu přijde i GameWorks
Nvidia také ray tracing přidá do knihoven GameWorks. Mělo by jít o komponenty pro vykreslování stínů, lesků a pro ambient occlusion, které budou moci vývojáři použít ve hrách. Součástí by měl být i onen odšumovací filtr běžící na Tensor Cores. Tyto knihovny by ale snad nemusely vždy vyžadovat přímo RTX a tedy by mohly fungovat i v onom čistě „GPGPU“ režimu, alespoň v některých případech. Otázka samozřejmě je, jak dobrý bude výkon těchto knihoven bez GPU s RTX. Nvidia uvádí, že by rozdíl mohl být i víc jak dvojnásobný (Volta má prý být rychlejší „o celočíselné násobky“), což trochu vyvolává obavy, aby u dnešních grafik výrazně nesrážely FPS.