Shader-ohjelma

From Wikipedia, the free encyclopedia

Remove ads

Shader-ohjelma (toisinaan vain shader tai ohjelma) eli varjostin[1][2][3] tai sävytin[4][2][5] on ohjelma, joka mahdollistaa grafiikkaliukuhihnan muokkaamisen ja on kirjoitettu tarkoitukseen suunnatulla kielellä.[6] Robert L. Cookin artikkeli Shade Trees julkaistiin vuonna 1984 ja RenderManin RenderMan Shading Language -kieli kehittyi tästä ideasta.[7][8] Nimitys, joka johtuu historiallisista syistä,[6][7] on peräisin alkuperäisestä käytöstä valaistuksen (eli varjostuksen) ja värien laskemiseen[9], mutta nykyisin niitä voidaan käyttää myös liikkeeseen, animointiin sekä kohteiden taivuttamiseen.[10][11]

RenderManin kieltä on yritetty soveltaa myös grafiikkasuorittimille (GPU), jolloin havaittiin tärkeiden toimintojen puuttuminen täyteen ohjelmoitavuuteen.[7]

Grafiikkasuorittimien ominaisuudet ovat kehittyneet kiinteätoimisista (konfiguroitavista) suuremmalle ohjelmoitavuudelle.[7] Tyypillisessä grafiikkaliukuhihnassa on vaiheet:[6]

  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.[6] Aluksi ohjelmoitavuus keskittyi pikselien varjostukseen, mutta shader-mallien kehityksen myötä myös muut vaiheet tulivat ohjelmoitaviksi sekä merkittäviä uusia vaiheita kuten geometrian käsittely.[7] Sonyn PlayStation 3:ssa ja Microsoftin Xbox 360:ssa oli mukana edistyneet ominaisuudet (Shader Model 3.0) ja kiinteätoiminen liukuhihna oli vähentynyt: Nintendon Wii oli mahdollisesti viimeinen kiinteätoimista liukuhihnaa käyttävä pelikonsoli.[7]

Grafiikkasuorittimien varhainen ohjelmointi suoritettiin assemblyn kaltaisella kielellä, mutta myöhemmin on rajattu mahdollisuudet käyttämään vain korkean tason ohjelmointikieliä kuten HLSL ja GLSL (OpenGL Shading Language): assembly on näkyvillä vain debuggausta varten.[7] Unified Shader -mallissa grafiikkaliukuhihnan eri vaiheilla on samat ominaisuudet.[12]

Remove ads

Shader-tyypit

Vertex shader (verteksivarjostin) suoritetaan mallin ja näkymän muunnoksien (engl. transformation) sekä projektion vaiheessa.[7] Vertex shaderin käyttökohteita ovat muun muassa hahmon liikkeiden animointi ja veden pinnan muodonmuutokset.[13] Pixel shader viittaa ohjelmaan, joka suoritetaan pikselikohtaisessa vaiheessa ja laskee efektin pikselikohtaisesti.[6][14]

Fragment shader (fragmenttivarjostin) on suoritusvaihe, joka käsittelee rasteroinnin tuottaman fragmentin.[15] Fragment viittaa kolmion osaan, joka on päällekkäinen pikselin kanssa.[6]

Geometry shader (geometriavarjostin) on heti verteksivaiheen jälkeen suoritettava, jolle annetaan primitiivi sekä mahdollisesti siihen liittyvät ja se voi tuottaa useampia primitiivejä (lisäys) tai ei yhtään (poistaminen).[7][16] Geometry shader on valinnainen ja voidaan käyttää tesselaatioon ennen verteksien jälkikäsittelyä.[17] Tesselaatioon on myös Tessellation Control Shader sekä Tessellation Evaluation Shader.[18] Sonylla ja Microsoftilla on tesselaation käsittelyvaiheet (hull- ja domain-vaiheet).[19][20]

AMD on esitellyt vuonna 2017 Vega-arkkitehtuurin myötä primitive shader -tyyppisen geometriavaiheen, joka on computer shaderin kaltainen tiedon käsittelyssä.[21] Tämän tavoitteena on tehokkaampi primitiivien poisto ja siten tehokkaampi renderöinti.[21] Nvidia on esitellyt Turing-arkkitehtuurin myötä vastaavan mesh shader -vaiheen.[22] Vulkan-rajapinnassa mesh-shader toimii vaihtoehtoisena geometrian käsittelynä ja yksinkertaistaa geometrian käsittelyn pienempään määrään vaiheita tarjoamalla vaihtoehdon perinteisille verteksi-, tesselaatio- ja geometria-vaiheille.[23] Mesh-shaderin kanssa voi käyttää valinnaista task-shader vaihetta (amplification shader DirectX:ssä), joiden tuloksen voi syöttää suoraan rasterointiin.[23] Geometrian käsittelyn lisäksi mesh-shader voi tehdä yksinkertaisia laskentaoperaatioita.[23]

Compute shader (laskentavarjostin) on laskennalliseen GPGPU-käyttöön suunnattu ohjelma, joka ei ole osa normaalia renderöintiliukuhihnaa.[24][25][26] Laskennalliseen käyttöön on kehitetty arkkitehtuurit kuten Nvidian CUDA, Microsoftin DirectCompute sekä OpenCL, jotka käyttävät SPMD-ohjelmointimallia (Single Program Multiple Data).[27] SPMD-mallit käyttävät SIMD-ytimiä ja ohittavat grafiikkaliukuhihnan käyttäen vain yhtä laskentavaihetta.[27]

Remove ads

Kieliä

Kieliä on kehitetty lukuisia sekä offline-renderöintiin (elokuvateollisuus) että reaaliaikaiseen käyttöön.

Offline-renderöinti

Reaaliaikainen renderöinti

  • ARB assembly language, Khronos Group
  • OpenGL shading language (GLSL, GLSLang), standardoitu
  • Cg, Nvidia[28]
  • HLSL, (High-Level Shading Language), Microsoft
  • PlayStation Shader Language, Sony[20]
  • Metal Shading Language, Apple[29]
Remove ads

Lähteet

Loading related searches...

Wikiwand - on

Seamless Wikipedia browsing. On steroids.

Remove ads