Hirdetés

Az ultramobil GPU-k mélylélektana

IMR vagy TBR?

A grafika leképzésénél két nagy csoportba sorolhatók a GPU-k: IMR (immediate mode rendering) és TBR (tile-based rendering). Ezeknek van egy-egy speciális megvalósítása is, amire később még visszatérünk. Újra felhozva az előző oldal alján részletezett sziklás példát: a kisebbik még mindig elfedi a nagyobbat, és meg kell oldani, hogy a kisebbik szikla látható háromszögei legyenek kirajzolva. IMR mellett sok dolgot nem lehet tenni, egyszerűen el kell kezdeni az objektumok textúrázását. Ezután sorra kell venni minden egyes háromszög pixelre vetített pontját, majd a megfelelő texelből vagy texelekből – az alkalmazott szűrés szerint – ki kell számítani a képpont színét.

Jelenleg a képkocka egy pixelére annyi képpont jut, ahány háromszöget érintett a pixelből merőlegesen kiinduló virtuális sugár. Nekünk persze csak annak a képpontnak az információja kell, amelyik a kamerához legközelebb álló háromszögből lett számítva. Itt jön a képbe a mélységpuffer (Z-buffer). Az a számítás a helyes, amelyik esetén a mélységteszt a legkisebb Z értéket adja vissza, a többi számítás eredményét egyszerűen el kell dobni. A TBR már nem így működik. A háromszögeket mélység szerint egymás mögé rendezi a hardver, majd megvizsgálja, hogy a képpontokból merőlegesen kilőtt virtuális sugarak mely háromszöget metszik először. Ha megvan, akkor – az alkalmazott szűrésnek megfelelően – el kell végezni a pixelek színinformációinak kiszámítását. Az eredmény lényegében mentes minden felesleges kalkulációktól, de a buktatók között érdemes megemlíteni, hogy a mélységrendezés viszonylag bonyolult hardveres felépítést kíván, és sok háromszög esetén akár lassabb is lehet a megfelelő sorrend felállítása, mintha egyszerűen kiszámolnánk a felesleges információkat.

A két elképzelés mellett tehát egységesen vannak érvek és ellenérvek is. A legnagyobb különbség, hogy az IMR pazarló módon bánik az erőforrásokkal, míg a TBR megpróbálja kímélni a rendszert. Ebből már kitalálható, hogy miért pont a TBR alkalmazása mellett törnek lándzsát az ultramobil GPU-k, ugyanis nagyon korlátozott a memória mérete és annak adatátviteli sebessége. Utóbbi szempontok képzik a TBR másik fontos működési normáját. A rendszer a kiszámítandó képkockát azonos méretű, több pixelből álló mozaikokra, szakmai néven tile-okra osztja fel. A mozaikok mérete főleg az adott grafikus processzoron belül elhelyezett gyorsítótár kapacitásától függ. Lényegében a számítások a mozaikokban lesznek végrehajtva a háromszögek sorba rendezésével, majd ha az adott mozaik véglegesnek tekinthető, akkor kiírásra kerül a memóriába. Ezt addig végzi a hardver, amíg az összes mozaikból össze nem áll a teljes képkocka.

Az IMR és a TBR általános működését ábrával is felvázoljuk, így talán könnyebb lesz a különbségeket áttekinteni:

Az IMR és a TBR általános működése Az IMR és a TBR logikai futószalagja
Az IMR és a TBR logikai futószalagja [+]

Az ábrákból látható, hogy TBR mellett a láthatósági teszt még a textúrázás előtt zajlik, ami után a megmaradt háromszögeken megkezdődhet a textúrázás. Szintén megemlítendő, hogy a grafikus vezérlőbe gyorsítótárakat is érdemes helyezni, így minden feldolgozás csak az adott mozaikokon belül történik. Nagyon fontos azt is látni, hogy az IMR elvei mellett a VRAM több helyen is komoly terhelés alatt van, míg TBR esetén lényegében csak kevés információ kerül kiírásra, így a legnagyobb terhelést csupán a kész mozaikok lementése jelenti a frame bufferbe.

Az IMR logikai futószalagja Early Z teszttel
Az IMR logikai futószalagja Early Z teszttel [+]

Fentebb említettük, hogy az IMR és a TBR elgondolásoknak van egy-egy speciális megvalósításuk. IMR mellett lassan egy évtizede szinte minden modern GPU tartalmaz Early Z tesztet. Ennek lényege egyszerű: a rendszer megpróbálja még azelőtt meghatározni, hogy látszik-e az adott háromszög, mielőtt feltextúrázná. IMR esetén ezt onnan lehet kikövetkeztetni, hogy mindegyik vertexnek ismertek a virtuális térben elfoglalt koordinátái, hiszen ez alapján épül fel a virtuális világ. Ennek megfelelően az egyes háromszögek sorrendje felállítható. Ezt azonban nem lehet teljesen hardveresen megtenni, ahogy TBR mellett, így a támogatásról az adott szoftver renderjében kell gondoskodni. Ezek a szoftveres optimalizációk aránylag jó hatékonysággal működnek, de biztos, hogy lesznek olyan háromszögek, melyek nem látszanak, ám végül mégis kiszámításra kerülnek. Ez főleg annak köszönhető, hogy IMR mellett, ha nincs meg a teljes bizonyosság a háromszög fedettségére, akkor semmiképp sem szabad eldobni.

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

Azóta történt

Előzmények

Hirdetés