Periaatteellinen kuvaus liukuhihnasta.
**Grafiikkaliukuhihna** tarkoittaa tietokonegrafiikassa vaiheita, joita tarvitaan kolmiulotteisen kuvan renderöintiin kaksiulotteiselle näytölle. Grafiikkajärjestelmää kutsutaan liukuhihnaksi koska matemaattisen mallin muunnos pikseleiksi näytölle koostuu useista vaiheista ja tyypillisessä arkkitehtuurissa nämä suoritetaan peräkkäisessä sarjassa, jossa yhden vaiheen tulos työnnetään seuraavaan vaiheeseen ja edellinen voi aloittaa seuraavan polygonin käsittelemisen välittömästi.

Grafiikkasuorittimien ominaisuudet ovat kehittyneet kiinteätoimisista (konfiguroitavista) suuremmalle ohjelmoitavuudelle. Vanhoissa ohjelmointirajapinnoissa oli parametreja eri vaiheille, mutta kiinteätoimisen liukuhihnan malli on korvattu useissa yhteyksissä. Tyypillisessä grafiikkaliukuhihnassa on vaiheet:

1. (verteksit) verteksikohtainen muunnos näyttöavaruuteen
2. (rasterointi) kolmiokohtainen iteraatio, perspektiivikorjaus
3. (pikseli) pikselikohtainen varjostus
4. (lopputuloksen yhdistäminen) varjostuksen yhdistäminen väri- ja syvyyspuskurien kanssa

Ohjelmoitavassa liukuhihnassa vaiheiden järjestys on kiinteä, mutta niiden toteutus on ohjelmoitavissa. Historiallisista syistä vaiheiden ohjelmia kutsutaan shader-ohjelmiksi ja ne ovat grafiikkaohjelmia eivätkä vain rajoittuneita pisteiden värien laskentaan. Geometria-shader voi muuttaa myöhemmissä vaiheissa käsiteltävien kolmioiden joukkoa, tesselaatio-shader muuttaa pinnan korkean tason kuvauksen joukoksi kolmioita ja verteksi-shader tekee sijainnin transformaation eikä vaikuta väriin mitenkään. Vaihtoehtoisesti *mesh-shader* yksinkertaistaa geometrian käsittelyn pienempään määrään vaiheita tarjoamalla vaihtoehdon perinteisille verteksi-, tesselaatio- ja geometria-vaiheille.

Kolmiulotteisen grafiikan renderöintiliukuhihnan vuokaavio (ohjelmoitavat vaiheet vihreällä).
Eräs vaiheistus suoralla valaistuksella on:

1. mallin transformaatio (primitiivien transformaatio maailman koordinaatteihin, kolmiulotteinen)
2. kameratransformaatio (primitiivien transformaatio kameran koordinaatteihin, kolmiulotteinen)
3. valaistus
4. projektiotransformaatio (muunnos kameran kaksiulotteiseen koordinaatistoon9
5. leikkaus (kameran ulkopuolelle jäävien primitiivien poistaminen)
6. muunnos (pikselin piirto, teksturointi, piilotettujen pintojen poistaminen)

Syötteenä alussa ovat geometriset primitiivit ja lopputuloksena on kuva.

Renderöintigraafi
-----------------

Renderöintigraafi (*render graph* tai *frame graph*) tarkoittaa liukuhihnan määrittelyä itsenäisinä solmuina suunnattuna syklittömänä verkkona. Jokaisella solmulla on syötteensä ja tulosteensa, jotka linkittyvät toisiin solmuihin tai resursseihin. Suoritusvaiheessa jokainen solmu suoritetaan vuorollaan.
Graafin merkittävänä etuna on mahdollisuus kulkea graafin läpi ennen suoritusta ja kerätä hyödyllisiä tietoja. Lisäksi modulaarinen luonne mahdollistaa uudelleen käytön ja moottori voi tukea useita erilaisia renderöintikonfiguraatioita ilman suurta määrää toistettua koodia tai ehdollisia lauseita.

Graafilla liukuhihna jakautuu kolmeen kohtaan: *asetus* (*setup*), *käännös* (*compile*) ja *suoritus* (*execute*). Asetuksen aikana määritetään renderöintitilat ja resurssit. Käännöksen aikana graafijärjestelmä analysoi tiedot ja riippuvuudet sekä resurssien *elinajat* ja järjestelmä voi poistaa tarpeettomat. Suoritusvaiheessa varsinainen renderöinti suoritetaan. Graafijärjestelmä on samankaltainen mutta eroava *välittömän moodin* (*immediate mode*) renderöinnistä.

Lähteet
-------

1. ↑  Graphics pipeline *docs.microsoft.com*.  24.2.2022. Viitattu 29.6.2022. (englanniksi)
2. 1 2 3 4 5 6  Akeley, Feiner, Foley, Hughes, Van Dam, McGuire, Sklar: *Computer Graphics Principles and Practice*, s. 14–15, 432–433, 930–931. Third Edition. Addison-Wesley, 2014. ISBN 978-0-321-39952-6. (englanniksi)
3. ↑  Akenine-Möller, Tomas & Haines, Eric & Hoffman, Naty: *Real-Time Rendering*, s. 29–35, 41. Third Edition. CRC Press, 2008. ISBN 978-1-56881-424-7. (englanniksi)
4. ↑  Christoph Kubisch: Mesh Shading for Vulkan *khronos.org*.  1.9.2022. Viitattu 7.10.2022. (englanniksi)
5. 1 2  3D Polygon Rendering Pipeline (PDF) *connellybarnes.com*. Viitattu 8.7.2022. (englanniksi)
6. ↑  The Render Graph Architecture *andrewcjp.wordpress.com*.  28.9.2019. Viitattu 29.6.2022. (englanniksi)
7. ↑  Render graph execution overview *docs.unity3d.com*. Viitattu 8.7.2022. (englanniksi)
8. ↑  Setup and Execute Timelines *docs.unrealengine.com*. Viitattu 8.7.2022. (englanniksi)
9. ↑  Yuriy O'Donnell: FrameGraph: Extensible Rendering Architecture in Frostbite *gdcvault.com*. Viitattu 8.7.2022. (englanniksi)