Igen speciális tesszellálást támogat a Metal API

A Metal API új verziójáról már írtunk a macOS-t bemutató hírünkben, ahol elsődlegesen az újdonságok megnevezéséről volt szó. Ugyanakkor részletesebben is lehet vizsgálni a változásokat, mivel a tesszellálást az Apple nem úgy közelítette meg, ahogy a korábbi API-k.

Magát a tesszellátort szabványos formában a DirectX 11 vezette be, bár kétségtelen, hogy nem szabványos opció létezett ennél korábban is. A lényeg azonban az, hogy a DirectX 11 óta megjelent összes API szinte ugyanazt a modellt vette át, vagyis maga a rendszer három, szorosan összefüggő logikai szintre volt felosztható: hull shader, tesszellátor, domain shader. A működés szempontjából a hull shader szintjére érkeznek meg a feldolgozásra váró adatok. Itt lesz beállítva a testekre vonatkozó tesszellálás mértéke, illetve kijelölésre kerül az előre beépített módok közül a fejlesztő által kiválasztott algoritmus. Ezután az adatok patchként lesznek továbbítva a fix funkciós tesszellátorba. A patchek tulajdonképpen vertex tömbök, amiket az adott objektum geometriai vázának szétszeletelésével lehet előállítani. Persze ezek nem jelentenek szükségszerűen poligonokat, mivel három vertex képezhet egy olyan a térbeli alakzatot is, ami tulajdonképpen két szakasz, és ezeket is tökéletesen lehet tesszellálni. A hull shader ezenkívül minden patchhez megjelöl egy kontroll pontot, amely a domain shader szakaszban kerül majd felhasználásra. A második szinten a tesszellátor elvégzi az utasításoknak megfelelően a feladatát, és az úgynevezett területi pontokat a harmadik szintre irányítja, amiből a domain shader a displacement map, a kontrollpont és a tesszellációs mérték segítségével kialakítja a végleges felületet.

Nem bonyolult rendszer ez, így különösebben senki sem foglalkozott az átdolgozásával. Nem úgy az Apple, amely cég inkább újítani akart és bevezettek egy alternatív megoldást. A Metal API tesszellációs futószalagja abban hasonlít az eddigi konstrukcióra, hogy három logikai szintre van osztva. Ezen közül a tesszellátor és a domain shader lényegében változatlan, csak a domain shadert az Apple post-tessellation vertex function lépcsőnek nevezi. Hull shader azonban a Metal API-ban nincs, ugyanis ezt a compute shader helyettesíti. A jó hír, hogy a compute shader gyakorlatilag képes ellátni a hull shaderrel azonos feladatokat, vagyis bármilyen olyan tesszellációs futószalag portolható a Metal API alá, ami működik a többi elterjedt API-n. Ennél is jobb hír, hogy a compute shader a hull shadernél többre is képes.

A compute shader alkalmazásának alapvető előnye az aszinkron compute lehetősége, ugyanis a compute shader számítások egy részét át lehet lapolni a tesszellációs lépcsővel, míg a hull shaderrel ez nem kivitelezhető. Bár relatíve kis teljesítményt lehet így nyerni, de a képszámításnál minden apró extra jól jön.

  • Kapcsolódó cégek:
  • Apple

Azóta történt

Előzmények

Hirdetés