A DirectX Tiled Resources funkciójának elemzése

Hogyan működik a megatextúrázás?

A megatextúrázást jelenleg csak szoftveres formában csodálhattuk meg, ami azért komoly problémáktól is küzdött. A működési elv alapvetően annyi, hogy a megatextúrát szeletekre, illetve szakszóval mozaikokra kell osztani, így ahelyett, hogy az egészet betöltenénk a VRAM-ba, lényegében csak annak részeit hasznosítjuk. Ehhez szükség van egy úgynevezett lookup textúrára, ami nem tartalmaz színinformációt, viszont olyan metaadatokat tárol, amelyekkel meghatározható, hogy a tényleges textúráról milyen adatokra van szükség a leképzéshez. A program tehát a lookup textúrán jelöli ki, hogy mire van szüksége, majd a megadott koordináták alapján a rendszer kikeresi a valós textúrán az igényelt információkat, és ezek egy pixel shaderrel betölthetők a VRAM-ba. Ez egy rendkívül összefüggéstelen fizikai textúra lesz a végén, de a program tudni fogja, hogy az adott pixel színinformációinak számításához mely texelekre van szükség.

Szoftveres megatextúrázás
Szoftveres megatextúrázás [+]

A szoftveres megatextúrázás alapvető hátránya, hogy tulajdonképpen mindent szoftverből kell megoldani. Implementálni kell a támogatott formátumokat és textúratípusokat, az anizotropikus szűrést szoftveres formában is segíteni kell, ami már négyszeres opcióval is nagyon sok sebességvesztést jelent, illetve komoly gond, hogy a textúrából az adatok betöltése két egymástól függő utasítással lehetséges, hiszen előbb szükség van a lookup textúráról az információra, és csak utána lehet a konkrét adatot betölteni. Ez tulajdonképpen csupa hátrány a szoftveres megatextúrázás esetében, amit mindenképp kezelni kell, hiszen maga az alapelv úttörő koncepcióra épül.

A hardveres megatextúrázás eltünteti a fenti hátrányokat. Alapjaiban úgy működik, ahogy a szoftveres opció, de nincs lookup textúra, mert ennek helyét átveszi a hardveres laptábla. Innen már sejthető, hogy ehhez a funkcióhoz MMU-val (memóriakezelő egység) rendelkező grafikus processzorok szükségesek. A szűrés teljesen hardveres lehet, aminek hála nem drágább a megszokottnál az anizotropikus szűrés használata, illetve nincs szükség két egymástól függő adatbetöltésre, mert a lookup textúrát kiváltó laptábla elérése úgymond ingyenes. Emellett a hardver által támogatott összes formátum és textúratípus kezelhető, vagyis nincs szükség ezek szoftveres implementálására.

Hardveres megatextúrázás
Hardveres megatextúrázás [+]

A hardveres megatextúrázás eddig csak OpenGL alól volt megoldható, méghozzá a GL_AMD_sparse_texture kiterjesztés használatával, de ezt csak a GCN architektúrára épülő AMD Radeon termékek támogatják. Ennek butított verziója az opcionálisan támogatható GL_ARB_sparse_texture kiterjesztés, ami már a többi hardveren is üzemképes.

A Microsoft is saját megoldást dolgozott ki a DirectX új verziójába, hiszen nagyon fontos funkcióról van szó. A Tiled Resources még mindig opcionális megoldás, tehát a támogatása nem kötelező a gyártóknak. Nyilván egyik fejlesztő sem szereti a nem egységesen kezelt funkciókat, de a Microsoft keze is meg van kötve, hiszen a fejlesztői igény az új konzolok érkezésével óriási lett a megatextúrázásra, eközben viszont túl későn kaptak észbe a hardvergyártók. Gyakorlatilag egyedül az AMD ismerte fel, hogy ez egy rendkívül fontos irány, viszont egy szabvány arról szól, hogy átfogó megoldást nyújtson a fejlesztőknek, amire bátran lehet építeni.

A Tiled Resources jelenlegi formájában egy szükségmegoldás, hogy a lehető legtöbb hardver legyen képes a hardveres megatextúrázásra. A Microsoft a körülményekhez képest igen jó rendszerrel állt elő. A Tiled Resources használatához a programba be kell építeni egy ellenőrzést, ami meghatározza, hogy az adott hardver egyáltalán képes-e támogatni az új DirectX funkciót. Ha nem, akkor az ellenőrzés egy 0-val tér vissza. Ezt az alkalmazás érzékeli, így betöltheti a szoftveres megatextúrázót, ami a fenti bekezdésekben közölt hátrányok mellett biztosítja a működést.

Ha a Tiled Resources támogatott, akkor sincs még minden eldöntve, ugyanis az ellenőrző visszatérhet 1-es és 2-es értékkel is. A 2-es érték esetében a Tiled Resources úgynevezett TIER_2 szintje töltődik be. Ez konkrétan ugyanazt a működést kínálja a DirectX API-n belül, amit az új generációs Xbox One és PlayStation 4, illetve ez a kiterjesztés lényegében az OpenGL-es GL_AMD_sparse_texture másolata, illetve alapvető továbbfejlesztése. Ebből az is következik, hogy csak akkor használható ez a működési szint, ha a felhasználó konfigurációja GCN architektúrára épülő AMD Radeon grafikus processzort rejt.

Az 1-es értékhez tartozó TIER_1 lényegében egy butított TIER_2 szint. Gyakorlatilag minden kikerült belőle, amit a Kepler architektúrára épülő NVIDIA GeForce grafikus processzorok nem tudnak megoldani. Ezek helyét szoftveres implementációk veszik át, hogy a működés biztosított legyen, viszont funkcionális szempontból le kell mondani a shader feedback utasításokról, mivel ez a kepleres GeForce-okon nem lehetséges.

A cikk még nem ért véget, kérlek, lapozz!

Azóta történt

Előzmények

Hirdetés