S vydáním nové generace grafik Nvidia přišla nepříjemná zpráva pro milovníky starších her. Na GeForce RTX 5000 nefunguje technologie PhysX a případné další aplikace, které používají framework CUDA v 32bitovém režimu – architektura Blackwell toto nepodporuje. Nvidia teď nicméně technologii PhysX otevřela jako open source. Teoreticky to může pomoci ve snahách nadšenců PhysX znovu rozběhat, ale zatím to zdaleka není jasné.
Nvidia minulý týden oznámila, že vydává jako open source dva své starší softwarové projekty, které se týkají simulace fyziky ve hrách – jde o PhysX a také middleware Flow, což byla součást knihoven GameWorks pro simulaci kapalin, ohně, kouře a podobných efektů. Oba tyto softwarové middlewary jsou už starší a to je asi také důvod, proč je Nvidia takto sdílí se světem na rozdíl od novějšího softwaru, které je stále aktivně používán a může stále vytvářet konkurenční výhodu. Flow například byl primárně cílený na vývoj v Unreal Engine 4 a DirectX 11.
PhysX už bylo na GitHub coby starší a už neaktuální technologie nahráno dříve, ale tehdy byla součástí jen část běžící na CPU, bez GPU akcelerace (tedy toho, co si Nvidia držela jako specialitu). Nyní Firma oficiálně vydává PhysX SDK 5.6.0 (plus Flow 2.2.0) celé, a to pod tříčlánkovou licencí BSD. Součástí už je i kód pro běh na GPU, včetně různých CUDA kernelů, které implementace této technologie s GPU akcelerací používala.
Nejzajímavější je tento kód asi jak se říká „ke studiu“, i když dnes už nereprezentuje současný stav vývoje. Akcelerace herní fyziky přešla k jiným herním enginům, frameworkům a knihovnám a mezitím se také dál vyvíjela. Toto otevření nejspíš nepovede k nějaké renesanci používání PhysX v nových hrách.
Pomůže kód ke komunitní reimplementaci PhysX?
Zprávy o otevření kódu se logicky točí kolem předchozích problémů s (ne)podporou PhysX na nových grafikách. Souviset to spolu může, protože znalost kódu a dostupnost SDK teoreticky může nezávislým vývojářům pomoci ve vytvoření nějakého řešení, které nekompatibilitu nových GPU přemostí. Ovšem zase si od toho nedělejte nějaké velké naděje, nyní otevřený kód totiž není zřejmě přímo to, co k vyřešení problému s RTX 5000 je třeba. Není to tak, že by Nvidia v situaci, kdy už sama není ochotná podporu pro nová GPU poskytnout, zpřístupnila dotyčný kód a nechala podporu přidat jak se říká „komunitu“.
SDK PhysX, které je nyní vydáváno, totiž není ten kód, který by pro takový úkol byl třeba. SDK jsou totiž knihovny určené pro vývoj her, nikoliv knihovny, nad kterými pak hra samotná běží na vašem počítači. O tom, zda PhysX bude fungovat, u dávno dokončených her nerozhoduje to první, ale to druhé.
Nefungování her s PhysX na GeForce RTX 5000 je způsobeno tím, že Nvidia u těchto GPU neposkytuje podporu pro běh CUDA kódu v 32bitových aplikacích, ale jen těch 64bitových. Rozbité jsou teď ty hry, které nejsou 64bitové, neboť z 32bitové binárky nelze volat 64bitové knihovny CUDA. Aby mohla nějaká třetí strana nebo komunita onu 32bitovou podporu doplnit, musela by Nvidia uvolnit zdrojové kódy CUDA runtime. A to se asi jen tak nestane bez zamrzlých pekel, něčích mrtvol k překročení a tak dále.
Jediná možná řešení, jak PhysX ve starých hrách znovu rozběhat na kartách jako GeForce RTX 5000 a budoucích, které ho už neumí, by bylo portovat dotyčné hry do 64bitové verze. To zase mohou udělat jen jejich autoři a často to asi je netriviální a nikdo se s tím mimo nějaká „remasterová“ vydání párat nebude. A ani k tomu v podstatě open source SDK moc nepomůže, protože vývojáři už 64bitové SDK od Nvidie mají dávno a jeho otevřený kód ani nepotřebují.
Třetí možností, která patrně bude muset být použita, pokud má být dobrovolníky znovuimplementovaná nějaká podpora PhysX pro staré 32bitové hry, je naprogramování wrapperu či překladače. Ten by buď převáděl 32bitová CUDA volání PhysX na 64bitová (komunikující s oficiálním CUDA runtimem od Nvidie), nebo by 32bitovou CUDA emuloval zcela nezávisle na ovladačích a frameworcích Nvidie – například by mohl jako akcelerační backend používat Vulkan.
Batman: Arkham Origins byla jedna z her, kterými Nvidia lákala na fyzikální efekty akcelerované na GPU. Volba Hardware Accelerated PhysX teď na nových kartách přestane fungovat
Teoreticky by zde mohly být použité různé existující projekty, které se o vytvoření CUDA-kompatibilní vrstvy pokoušely, ale musí to být v režimu kompatibility hotových binárek, ne jen kódu. Celý problém je totiž v tom, že ke kódu her nemáte přístup (jinak by bylo řešením zprovoznit 64bitový port). Zdá se, že cesta k vytvoření takového wrapperu by mohla jít přes open-source projekt ZLUDA, pro případné vývojáře se zájmem o zapojení jde asi o nejlepší směr.
Jak moc bude otevřený kód SDK PhysX v tomto užitečný, není úplně jasné, ale lze předpokládat, že poslouží spíš jen coby reference a doplňkový zdroj některých informací. Pokud ale pomůže, bude to spíš jen malý zlomek znalostí a energie, které budou třeba do wrapperu repimplementujícího 32bitovou CUDA pro potřeby her s PhysX třeba vložit.
Kde je vůle a dost nadšenců s potřebnými schopnostmi, tam obvykle je cesta, jak ukazují třeba úspěchy s rekompilací a portováním konzolových her Nintenda, ke kterým žádný veřejně přístupný kód není. Je tak možné, že se nějakou náhradu kódu provádějícího GPU akceleraci PhysX podaří vyrobit jinými extrémnějšími metodami (hackováním binárek), k čemuž by možná kód SDK od Nvidia mohl být užitečnější. Takové výsledky ale mohou přijít až po letech a třeba jen pro některé hry, zatímco u těch méně populárních se nikomu nebude chtít čas investovat.
Zdroje: VideoCardz, Nvidia (GitHub)
