Hirdetés

Mi dönti el, hogy a sugárkövetés gyártóspecifikus vagy sem?

A szabvány megközelítéssel nincs gond, de valóban léteznek egyedi implementációk.

Az NVIDIA az utóbbi hónapokban többször kihangsúlyozta a sajtónak, hogy a szabványos, gyakorlatilag DXR, azaz DirectX Raytracing API-n keresztül megvalósított sugárkövetés gyártófüggetlen, így akármilyen, DXR-rel kompatibilis rendszeren be lehet kapcsolni. Ugyanakkor a Vulkan megoldása egyelőre specifikus, mivel az VK_NV_ray_tracing kiterjesztést használja. Erre jó előre fel akarták készíteni a piacot, hiszen így az egyes sugárkövetést használó játékok csak az NVIDIA hardveren futnak, ilyen például a Quake II RTX, a Wolfenstein: Youngblood és a JX3.

Az NVIDIA a folyamatos kommunikációjával azt akarta elkerülni, hogy bármiféle látszata legyen annak, hogy a PC-s játékpiac töredezett lesz, mert az csak az új generációs konzolok felé löki a játékosbázist, ami nyilván nem szerencsés. A vállalat azt is kihangsúlyozta, hogy a Vulkan esetében készül a szabványos VK_KHR_ray_tracing_pipeline kiterjesztés, aminek megjelenése után a saját megoldásuk támogatásával leállnak.

Hirdetés

A transzparenciára való törekvés tehát látható, de mégis azt érezheti a felhasználó, hogy a jövőben exkluzivitást fognak élvezni a sugárkövetéses effektek. Például rögtön a Godfall miatt, amely a DirectX Raytracingen keresztül valósítja meg a saját eljárását, amire az NVIDIA korábban azt mondta, hogy szabványos. Igen ám, de a szóban forgó játék nem csak a DXR-t használja, hanem egy AMD-hez köthető kiegészítést is, konkrétan a DXR 1.1-re tervezett munkamenetet kimentik az AGS 6.0-s szervizkönyvtár segítségével a Radeon Rays 4.0-ba, így pedig a számítás egy része nem a szabványos API-n keresztül lesz elvégezve.

Bármennyire is igyekeznek tehát a gyártók átláthatóan kommunikálni, a játékos azt láthatja, hogy itt bizony lesznek nem szabványos megvalósítások a sugárkövetést használó effektekre. Persze NVIDIA jelezte, hogy az AMD támogathatja a VK_NV_ray_tracing kiterjesztésüket, de ez olyan dolog, mintha az AMD jelezné, hogy NVIDIA is írhat implementációt a Radeon Rays 4.0-hoz. Egyik sem fog megtörténni, teljesen felesleges az ötletet felvetni.

Az alábbiakban két táblázattal segítünk eligazodni, hogy mikor van annak technikai akadálya, hogy egy gyártóspecifikus implementáció fusson a konkurens hardveren.

Sugárkövetés implementálása a DirectX Raytracingen keresztül
Implementáció Támogatás jellege
DXR 1.0 szabványos
DXR 1.1 szabványos
Kombinált DXR 1.0 és 1.1
szabványos
DXR 1.1 és Radeon Rays 4.0 shader intrinsics függvényekkel kombinálva csak AMD-n fut
DXR 1.1 és Radeon Rays 4.0 programozható bejárással kombinálva csak AMD-n fut

Látható, hogy egy DirectX 12 API-ra írt alkalmazás a DirectX Raytracinget ötféle módon használhatja jelenleg. Ebből három szabványos, bár a DXR 1.0-t és az 1.1-et nem nagyon fogják kombinálni a fejlesztők a relatíve kis nyereségre levetített aránytalan többletköltségek miatt, de elméletben lehetséges. Az AMD azonban kínál interoperációt az AGS 6.0-n keresztül a Radeon Rays 4.0 felé, és utóbbinak nyilván az a követelménye, hogy a rendszer támogassa az említett két komponenst. Az NVIDIA egyelőre a DirectX Raytracing esetében csak szabványos elérési formát támogat.

Sugárkövetés implementálása a Vulkan API-n keresztül
Implementáció Támogatás jellege
VK_NV_ray_tracing csak NVIDIA-n fut
VK_KHR_ray_tracing_pipeline és VK_KHR_pipeline_library szabványos

A Vulkan API-n valamivel egyszerűbb a helyzet. Ha a játék a VK_NV_ray_tracing kiterjesztést használja, akkor csak NVIDIA-n használhatók a beépített effektek, de a VK_KHR_ray_tracing_pipeline mellett ezek szabványosak. API interoperációt itt egyik gyártó sem kínál.

A jelenleg érkező játékok a fenti hét opcióból alkalmazzák valamelyiket, vagy akár kettőt is, ez már fejlesztői döntés. Az viszont látszik, hogy Vulkan API-t használva lehet olyan kódot írni, ami nem tud futni az AMD-n, míg a DirectX API-n belül olyan megvalósítás is lehetséges, ami képtelen elindulni az NVIDIA hardverein, és ezeknek tényleg valós technikai akadályai vannak. Fordítva ez viszont nem igaz. Az AMD nem tud olyan kódot biztosítani, ami nem fut az NVIDIA Vulkan implementációján, és az NVIDIA sem tudja ezt megtenni az AMD-vel DirectX Raytracing alatt.

Nem mindig kell tehát arra gondolni, hogy az NVIDIA és az AMD lefizette a fejlesztőket, lehetne valós technológiai limitációk is a háttérben, ami leginkább abból ered, hogy se DirectX és se Vulkan API alatt nem elég kiforrott a sugárkövetés szabványos megvalósítása, vagyis szemezni kell a kerülőutakkal, hogy bizonyos komolyabb problémákat meg lehessen oldani. Hosszabb távon ugyanakkor a rendszer fejlődik, tehát ezeket a mellékágakat idővel ténylegesen szabványosított megoldások váltják fel. Ezek implementációja viszont érthető módon jóval lassabban halad, mint a gyártóspecifikus megvalósítások, hiszen nem elég annyi, hogy egy cég hardverein jól működjenek.

Megjegyzendő ugyanakkor, hogy ha egy játékba épített sugárkövetéses effekt DirectX Raytracing mellett nem fut AMD VGA-n, vagy Vulkan API-t használva NVIDIA kártyákon, akkor az jelenleg inkább mesterséges limitációnak számít, mert az AMD a DXR-en keresztül elérhető módokból az összesen kezeli, míg az NVIDIA ugyanezt fel tudja mutatni Vulkan alatt. Fordítva viszont – ahogy fentebb is említettük – jöhetnek technikai akadályok, hiszen az NVIDIA nem támogatja a Radeon Rays 4.0-t, míg az AMD az VK_NV_ray_tracing kiterjesztést.

Hirdetés

Azóta történt

Előzmények

Hirdetés