
Letos a loni na WWDC Apple představil několik nových vylepšení Metalu, přičemž Metal 3 běží na Apple Silicon Mac a na zařízeních iOS a tvOS.
Metal 3 představuje významná vylepšení enginu Metal a frameworků pro psaní 3D her pro platformy Apple.
Těmto vylepšením se budeme věnovat níže.
Metal má svůj vlastní stínovací jazyk založený na C++14, Metal Shading Language, který je plně podrobně popsán v Specifikace jazyka kovového stínění (MSL).
Na WWDC ’23 Apple představil verzi 1.3 specifikace Metal Shading Language Specification. Specifikace MSL pokrývá každý aspekt psaní shader kódu pro Metal v C++.
Novou specifikaci MSL lze stáhnout jako PDF z webu pro vývojáře společnosti Apple.
Metal 3 nyní obsahuje volitelný malý Heads-Up displej viditelný v pravém horním rohu renderovaných scén během hry:
Performance HUD může zobrazovat několik užitečných informací pro kontrolu výkonu vaší hry v reálném čase:
- Zobrazit a zaznamenat klíčové statistiky výkonu
- CPU a rozlišení
- Obnovovací frekvence zařízení
- Měřítko
- Přímé nebo složené vykreslování
- Průměr FPS
- Cena GPU za snímek
- Více
Některé statistiky Metal heads-up displeje.
Na WWDC ’23 Apple také představil nástroj Metal Shader Converter. Shadery jsou malé programy, které spravují světlo, barvy a materiály na 3D objektech ve scéně.
Metal Shader Converter vám pomůže převést shadery napsané v jiných jazycích a frameworkech nebo z jiných platforem do Metal 3 – konkrétně z formátu Microsoft Windows DirectX 12 DXIL.
Metal Shader Converter nabízí dva modely vázání, ze kterých si můžete vybrat: Automatic Layout a Explicit Layout. Tyto modely pomáhají převádět shadery z jiných platforem.
Tabulky MTLBuffer se používají v nástroji Metal Shader Converter.
Bindless vykreslování, vyrovnávací paměti argumentů a sledování paprsků
Novinka v Metal 3, bezvazné vykreslování umožňuje používat sledování paprsků ke zlepšení výkonu a kvality ve 3D vykreslovaných scénách.
Jeden aspekt nespoutaného vykreslování – vyrovnávací paměti argumentů – umožňují kombinovat zdroje do vyrovnávacích pamětí, což urychluje vykreslování.
Namísto vazby každého zdroje zobrazení jsou prostředky pomocí vyrovnávacích pamětí argumentů vzájemně propojeny v paměti ve vyrovnávací paměti. V modelu bez vazby se vyrovnávací paměti argumentů agregují a propojují dohromady zdroje umožňující přímý přístup z vykreslovacích kanálů.
3D sítě jsou vzájemně propojeny v paměti namísto toho, aby byly použity jedna po druhé ve vykreslovacích kanálech. To urychluje přístup ke všem objektům potřebným pro ray tracing shadery pro rychlejší vykreslování povrchů s vysokým rozlišením a více detailů.
Bindless rendering.
Sítě, materiály a textury lze propojit v paměti.
Čtyři nová vylepšení v Metal 3 pomáhají bezvázanému vykreslování:
Vyrovnávací paměti argumentů – propojte zdroje dohromady pro přímý přístup, jak je popsáno výše.
Neohraničená pole – umožňuje definici více Mesh struktur v poli najednou. Shadery mohou přistupovat k polím libovolné velikosti bez omezení.
K objektům Mesh struct v neohraničených polích lze nyní přistupovat přímo z kódu a vláken C/C++, i když při přístupu k nim musíte být opatrní kvůli problémům se synchronizací vláken.
Příznak předkompilátoru __METAL_VERSION__ můžete použít k podmíněné kompilaci deklarací C, C++ a Mesh v Metal 3 pro použití neohraničených polí, pokud jsou na cílové platformě k dispozici.
Pomocí objektu MTLDevice můžete za běhu zjistit, zda nějaké dané zařízení podporuje nové funkce. Chcete-li používat nové funkce, musíte mít zařízení s následujícími specifikacemi:
iOS – čip A13 Bionic nebo novější.
macOS – Mac 2016 nebo lepší.
Sekce „Buffery“ vývojářské dokumentace Apple Metal má novou sekci o vyrovnávacích pamětech argumentů.
Akcelerační struktury přidělené MTLHeap
Hromady jsou předem alokované paměťové prostory, do kterých jsou načteny zdroje a struktury před vykreslením. Být rezidentní na hromadě znamená, že zdroje jsou předem načteny a připraveny k okamžitému použití, když je to potřeba během vykreslování.
Struktury akcelerace sledování paprsku lze alokovat přímo z objektů MTLHeap spolu s vyrovnávacími pamětmi a texturami. To umožňuje agregaci s jinými typy zdrojů. Použití struktur akcelerace MTLHeap šetří čas CPU ve vláknech.
Vylepšení ověřování shaderů
Obvykle musí být prostředky před vykreslením rezidentní na hromadě, aby byl zajištěn výkon vykreslování a přesné zobrazení. Selhání přidělování zdrojů předem může vést k poruchám výkonu a dokonce k nesprávnému zobrazení objektů během kreslení.
Aby se zajistilo, že zdroje budou rezidentní na hromadě, Metal 3 poskytuje novou funkci pro detekci chybějící rezidence během provádění sdílené vyrovnávací paměti příkazů. Chcete-li zajistit hromadu pobytu, useResource: je nyní odeslán do každého prvku ve scéně předtím, než jsou objekty scény odeslány do kodéru sledování paprsku.
Tato forma pojištění zdrojů před spuštěním shaderů pro sledování paprsku se v Metal 3 nazývá ověřování shaderů.
Díky těmto čtyřem funkcím je v Metal 3 snazší jít bez zábran.
Nezapomeňte se také podívat na přednášky WWDC 23. „Váš průvodce sledováním paprsků kovů“ a „Bez pouta s Metal 3“.
Nový Metal Debugger Dependency Viewer zobrazuje závislosti mezi zdroji vykreslování.
Chcete-li zobrazit Prohlížeč závislostí, otevřete Metal Debugger a klikněte na řádek Dependencies v navigátoru vlevo:
Otevření nástroje Metal Dependency Debugger.
Zobrazí se graf závislostí, který ukazuje závislosti v každém příkazu renderu. Kliknutím na libovolnou položku v grafu závislostí zobrazíte podrobnosti o této položce v novém postranním panelu napravo od Prohlížeče závislostí.
V prohlížeči závislostí Metal Debugger jsou zobrazeny dva typy závislostí: datový tok a synchronizace. Plné čáry v Prohlížeči závislostí ukazují tok dat a tečkované čáry zobrazují závislosti, které ukazují synchronizaci mezi průchody.
Metal Dependency Debugger graf.
Shaderový debugger
V Xcode 14 a novějších je také zabudovaný Shader Debugger, který vám umožňuje provádět ladění kódu shaderu na úrovni pixelů. Můžete vybrat jakýkoli vykreslený pixel zobrazený v jakékoli scéně, klepněte na tlačítko Shader Debugger v pravém dolním rohu okna ladicího programu a přeskočí na přesné místo v kódu shaderu použitého k nakreslení objektu.
Různá vylepšení
Tým Metal má nyní čtyři další doporučení pro optimalizaci potrubí vykreslování kovů:
- Před vykreslením přesuňte kopie.
- Skupinové příkazy stejného typu.
- Vyhněte se prázdným kodérům.
- Optimalizujte pomocí MTLLoadAction a MTLStoreAction
Poslední doporučení — MTLLoadAction a MTLStoreAction — se používá u příloh, akcí, které se mají provést před vykreslováním.
Tato doporučení jsou také podrobněji popsána v relaci WWDC ’23 „Bez pouta s Metal 3“. Přístup ke všem videím z WWDC ’23 Metal najdete v aplikaci Apple Developer.
Nezapomeňte se také podívat na MetalFX upscaling, kterému jsme se věnovali v jiném článku minulý týden.
Tato vylepšení v Metal 3 znamenají, že Metal je lepší než kdy dříve jako platforma pro vaše 3D hry a aplikace na zařízeních Apple.
Zdroj: appleinsider.com