Grafiikkaliukuhihna

Grafiikkaliukuhihna tarkoittaa tietokonegrafiikassa vaiheita, joita tarvitaan kolmiulotteisen kuvan renderöintiin kaksiulotteiselle näytölle.[1] 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.[2]

Periaatteellinen kuvaus liukuhihnasta.

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

  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.[2] Historiallisista syistä vaiheiden ohjelmia kutsutaan shader-ohjelmiksi ja ne ovat grafiikkaohjelmia eivätkä vain rajoittuneita pisteiden värien laskentaan.[2] 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.[2] Vaihtoehtoisesti mesh-shader yksinkertaistaa geometrian käsittelyn pienempään määrään vaiheita tarjoamalla vaihtoehdon perinteisille verteksi-, tesselaatio- ja geometria-vaiheille.[4]

Kolmiulotteisen grafiikan renderöintiliukuhihnan vuokaavio (ohjelmoitavat vaiheet vihreällä).

Eräs vaiheistus suoralla valaistuksella on:[5]

  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.[5]

Renderöintigraafi muokkaa

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.[6]

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.[7][8] Graafijärjestelmä on samankaltainen mutta eroava välittömän moodin (immediate mode) renderöinnistä.[9]

Lähteet muokkaa

  1. Graphics pipeline docs.microsoft.com. 24.2.2022. Viitattu 29.6.2022. (englanniksi)
  2. a b c d e f 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. a b 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)