Tiilaus on eri asia kuin kolmioiden järjestäminen ja rendaaminen z-järjestyksessä.
Normaalisti kolmiot piirretään suoraan siinä järjestyksessä kuin softa ne antaa (immediate mode rendering) ja väripuskurin lisäksi on Z-puskuri, johon tallennetaan joka pikselille jo piirretyn pikselin etäisyys.
Kun seuraavan kerran piirretään samaa pikseliä jostain toisesta kolmioista, z-puskurista tarkastetaan, onko uusi pikseli vanhan pikselin edessä (pitää piirtää) vai takana (jää peittoon, ei piirretä).
Jos kolmiot tulee sisään järjestyksessä takaa eteen, jokaisen kolmion jokainen pikseli piirretään, ja sama ruutupikseli piirretään siis monta kertaa, jokaiselle kolmiolle joka siihen pikseliin osuu
Jos kolmiot tulee sisään järjestyksessä edestä taakse, jokaisen pikselin piirtää vain ensimmäinen siihen osuva kolmio.
Mutta: jos pikseleissä on esimerkiksi läpinäkyvyysefektejä, ne on pakko piirtää tietyssä järjestyksessä, että nämä läpinäkyvyysefektit toimii oikein.
Lisäksi voidaan tehdä esim. sellainen temppu, että jokainen kolmio lähetetään ensin piirrettäväksi "z-only"-moodissa siten että ne ainoastaan asettavat z-arvonsa mutteivät aja pikselishaderiaan eikä kirjoita ollenkaan väripuskuriin. (kutsutaan nimellä z-only-pass)
Sitten tämän jälkeen kaikki kolmiot lähetetään uudestaan piirrettäväksi normaalisti. Tällöin z-puskuri hylkää kaikki muut pikselit kuin sen, mikä lopulta jää näkyviin, niin väriarvoa ei kirjoiteta turhaan eikä pikselishaderia ajeta turhaan.
Sillä, missä järjestyksessä softa piirtokutsunsa tekee, voi siis olla hyvin suuri vaikutus suorituskykyyn, ja kaiken tämän voi siis tehdä softasta käsin.
Tile-based rendering tarkoittaa sitten sitä, että kerralla ei piirretä kolmioita koko ruudulle, vaan ruudusta piirretään pieni pala kerrallaan. Tämä kuitenkin tarkoittaa sitä, että kolmioita ei voi piirtää sitä mukaan kun CPU niitä GPUlle lähettää, vaan GPUn pitää säilöä kolmiodata, kun sen tarvii käsitellä jokainen kolmio monessa osassa, erikseen jokaiselle tiilelle, johon se osuu.
Koko ruudun framepuskuri z-puskureineen 4k-resolla 16-bittisillä väreillä vie luokkaa 100 megaa muistia(ja antialiasing voi moninkertaistaa tämän). Tämä ei mahdu piirillä oleviin välimuisteihin, vaan liikennettä piirin ulkoiseen muistiin pikselidatasta tulee paljon
Kun rendetaan pienempi tiili kerrallaan, koko tiilen framepuskuri z-puskureineen mahtuu piirillä olevaan välimuistiin, jolloin tiilen framepuskuridata pitää kirjoittaa ulkoiseen muistiin vain kun tiilen rendaus valmistuu, muistiliikenne pikselidatasta vähenee selvästi.
Sitten siihen PowerVR:ään.
Sen lisäksi, että powerVR teki tiilattua rendausta, se myös optimoi tuota saman pikselin piirtojärjestystä siten, että siinäkin säästyy työtä. Eli joko se teki ensin tuon z-only-passin vaikka softa ei sitä käskenyt tehdä, tai sitten se järjesteli niitä säilömiään kolmioita ja rendasi ne eri järjestyksessä, siten että samaa pikseliä ei turhaan piirretä montaa kertaa.
Läpinäkyvyysefektit olivat kuitenkin powerVRlle ongelmallisia ja käsittääkseni jos jossain oli läpinäkyvyysefekti, powerVR joutui kytkemään nämä temppunsa pois päältä ja se hidastui selvästi.
Ja läpinäkyvyysefektit on ollut peleissä lisääntymään päin. Niiden avulla käytännössä tehdään esim puiden lehdet yms.
Lisäksi pelienginet tosiaan alkoivat tehdä tuota z-only-passia softalla, niin sen hyödyt saatiin kaikilla korteilla.
Kun pelit joko tekivät jo softalla sen mitä powerVR teki raudalla tai ajureissaan, tai sitten näitä ei voinut tehdä ollenkaan, powerVRn etumatka näistä tempuista kävi hyvin olemattomaksi.
Mikrotiilaus:
Tuon tiilipohjaisen renderöinnin lisäksi graffapiireissä on tyypillisesti lisäksi käytössä niinsanottu "mikrotiilaus".
Tämä tarkoittaa vain sitä, että framepuskurin osoitteet on järjestetty siten, että ne ei mene suoraan rivi kerrallaan, vaan esim. 4 peräkkäistä osoitetta viittaa aina 2x2 - blokkiin pikseleitä, tai 16 peräkkäistä osoitetta viittaa 4x4 blokkiin pikseleitä. Tässä ideana on se, että kolmio on tyypillisesti muodoltaan lähempänä neliötä kuin pitkää suikaletta, ja tämän ansiosta mm. :
1) keskimäärin kolmion pikselit mahtuu pienempään määrään välimuistilinjoja täyttäen suuremman osan niistä. Selvästi tehokkaampi muistikaistan ja välimuistin käyttö
2) Kun haetaan kerralla 4 tekstuuria 2x2-blokissa, voidaan uudelleenkäyttää useammin samoja tekstuurisampleja, kuin että haettaisiin 4 tekstuuria 4x1-rivillä. Tekstuuriyksiköt saadaan toimimaan selvästi tehokkaammin.