Két megoldás is lesz a sugárkövetésre a Vulkan API-ban

Az NVIDIA is hoz egy kiegészítést a Khronos Group API-jához. Igen komplex lesz majd az újításokat támogatni.

A Microsoft igencsak beindította a sugárkövetés szekerét a DirectX Raytracing bejelentésével, de mivel ez a Windows 10 operációs rendszerhez, ezen belül is még egy készülő frissítéshez lesz kötve, talán több fejlesztőt érdekelhet a Vulkan API-n keresztüli megvalósítás, mivel ilyen formában a régebbi Windowsok, illetve akár a Linux alól is megoldható a probléma.


[+]

Az első kiegészítéssel az AMD állt elő még a GDC alkalmával, de időközben kiderült, hogy az NVIDIA is hoz egy megoldást a Vulkan API-hoz, amely egy készülő, VK_NV_raytracing kiterjesztéssel lesz elérhető. Erről igazából túl sokat nem lehet tudni, de hasonlóan működik, mint a DirectX Raytracing kiegészítés, vagyis effektíve a programot szabványos shader nyelven kell megírni, amit nyilván szintén szabványos SPIR-V kódra kell fordítani, és a Vulkan API-hoz való specifikus implementációkkal érhetők el a hardverek.

Hirdetés

Sok eltérő megoldás, sok eltérő problémával

A sugárkövetésre használható koncepciók láthatóan eléggé különböznek egymástól. Ami önmagában nem szerencsés a terjedés szempontjából. A DirectX Raytracing sajnos csak a Windows 10 operációs rendszer egy érkező frissítésével fog működni, illetve kötelezően előírja minimum a shader modell 6.0 használatát. Utóbbi azért kellemetlen, mert akár százezer sornyi shadert kell átkonvertálni az új HLSL nyelvre, hogy abból szállítható legyen a DXIL kód. Amennyiben a fejlesztők nem őrzik meg és tartják karban a régi kódot, akkor nem tudják majd a hagyományos D3BC reprezentációs szinten szállítani, vagyis teljesen mindegy, hogy a játékos be akarja-e kapcsolni a sugárkövetéshez írt effekteket, a program csupán Windows 10-en, ezen belül is legalább az őszi alkotói frissítés elérhetősége mellett indul csak el. Öröm az ürömben, hogy legalább a hardver oldalán eléggé kedvező a helyzet, elvégre a shader modell 6.0-t szinte mindegyik modernebb grafikus vezérlő kezeli.

A Vulkan esetében picit más a felállás. A Khronos Group nem készült általános szabvánnyal a sugárkövetésre, ami természetesen baj, de az AMD és az NVIDIA két eltérő rendszert bevet. Az NVIDIA megoldásánál lényegében a VK_NV_raytracing kiterjesztést kell támogatni a kapcsolódó GLSL kiterjesztéssel egyetemben. Itt az a nagy kérdés, hogy ezt az NVIDIA-n kívül bárki beépíti-e, illetve azt is jó lenne tudni, hogy a zöldek elérhetővé teszik-e ezt a képességet a Volta architektúránál régebbi dizájnt használó GPU-kon. A Vulkan esetében ugyanis nincs DirectX Raytracinghez hasonló fallback layer, a Khronos Group a szabványosításig valószínűleg ezzel nem is fog foglalkozni, vagyis a hardverek támogatásáról tisztán a gyártóknak kell gondoskodni.

Az AMD alkalmazza talán a legfurcsább módszert, mivel sugárkövetésre vonatkozó megoldásukat nem az API-ba integrálták, hanem az Anvil keretrendszeren keresztül biztosítják a Radeon Rays számára, hogy működjön a Vulkan implementációkon. Ez egy felettébb érdekes elképzelés, ugyanis gyakorlatilag kiszakították magának a problémának a megoldását az API-ból, amivel az egészet egy különálló C++ környezetben lehet programozni. Ennek nyilván az az előnye, hogy teljesen platformfüggetlen. Nem számít, hogy a felhasználó milyen hardvert és operációs rendszert használ, amíg az adott PC-hez van szabványos Vulkan 1.1-es implementáció (márpedig lassan mindegyikhez modern rendszerhez van), addig az AMD megoldására írt kód futni fog, függetlenül attól, hogy a konkurens gyártók ezt akarják-e vagy sem. A vállalat ezt állítólag azért csinálta így, mert a szabványosítás előtt nem jellemző a széleskörű egyetértés a gyártók között, amiben talán nem is tévednek sokat, így a kompatibilitást maguk oldották meg egy Vulkan API feletti rétegben, amit pedig a keletkező szabványos kód továbbvisz a hardverig.

Összegezve, bőven lesz probléma a sugárkövetéssel. A DirectX Raytracing alapvetően az operációs rendszer tekintetében korlátozza a célozható piaci réteget, hacsak a fejlesztők nem szállítják a shadereket két reprezentációs szinten, ami a tesztelés és a karbantartást figyelembe véve nem kis pluszmunka lenne. A NVIDIA Vulkan API-ra írt elgondolása technikailag elég jó, de a jelenlegi adatok szerint Volta GPU-kra lesz korlátozva, ami szintén a célozható piaci réteg erős korlátozása, hacsak az AMD és az Intel nem támogatja majd az VK_NV_raytracing kiterjesztést és a hozzá kapcsolódó GLSL funkciókat. Végül az AMD Vulkan API-n működő koncepciója alapvetően alapvetően platform- és hardverfüggetlen, legalábbis attól a ponttól kezdve, ha az adott gépen van Vulkan 1.1-es implementáció, viszont technikailag az API fölött helyezkedik el, vagyis nem pont a megszokott formában lehet programozni, de eléggé függ a fejlesztői igényektől, hogy ez mennyire probléma.

Az igazán érdekes kérdés, hogy a Khronos Group mikor tervez a sugárkövetésre egy szabványos koncepciót. Valószínűleg egyetlen gyártónak sem lenne ez ellenére, tehát a háttérben a támogatás meglenne rá, talán a munkálatok már el is kezdődtek. Az AMD elgondolását érdemes eleve kivenni a képből, mivel az eléggé kényszerűnek tűnik. Amíg nincs szabvány, elég jó ez is, hiszen másképp nem is lehet platform- és hardverfüggetlen programot összehozni, de a Khronos Group valószínűleg egyfajta API-ba integrált megoldást szeretne, nem pedig egy olyat, ami logikailag a Vulkan API-n csücsül. Valószínű, hogy a szabványosítás minimum egy, de inkább két évet is igénybe vehet, látva azt, hogy a Khronos Group malmai sokszor nem őrölnek túl gyorsan.

Azóta történt

Előzmények