Shader je počítačový program slúžiaci na riadenie jednotlivých častí programovateľného grafického reťazca grafickej karty (presnejšie GPU). K tvorbe takýchto programov slúžia špecializované programovacie jazyky tzv. Shader jazyky (napríklad jazyk GLSL pre OpenGL, Cg od spoločnosti NVIDIA alebo HLSL od spoločnosti Microsoft určený pre API DirectX, Xbox a Xbox 360). Shadery sa rozdeľujú na niekoľko základných typov podľa toho, pre ktorú jednotku grafického reťazca sú určené. V súčasnosti patria medzi najdôležitejšie vertex, pixel a geometry shader. S príchodom posledných generácií grafických kariet a nových verzií grafických rozhraní (DirectX a OpenGL) sa tiež začínajú rýchlo presadzovať shadery pre realizáciu teselácie.

Vertex shader

upraviť

Program, ktorý sa vykoná na každom vrchole (vertexu) vstupnej geometrie scény. Medzi najčastejšie operácie patrí transformácia vrcholu (násobenie pohľadovou a "world" maticou). Pomocou transformácií možno však dosiahnuť aj rôznych grafických efektov - napr. simulácia pohybu vodnej hladiny. Vždy do programu vstúpi jeden vrchol, je upravený a zase vystúpi, nemožno teda vrcholy pridávať či odoberať.[1]

Geometry shader

upraviť

Geometry shader na rozdiel od vertex shadera umožňuje pridávať alebo odoberať vrcholy a tým ovplyvňovať výslednú geometriu. Geometry shader možno využiť napríklad na generovanie jednoduchej vegetácie (trávy) na povrchu nejakého objektu či na doplnenie detailov existujúceho modelu (napr. vytvorenie ostňov na modeli dinosaura) v reálnom čase.[1]

Pixel (fragment) shader

upraviť

Pixel shader je vykonávaný na každom pixeli rasterizovanej scény - pracuje teda s jej 2D obrazom. Medzi najčastejšie operácie patrí aplikácie textúr prípadne ďalšie modifikácie farby pixelu.[1]

Shadery pre teseláciu

upraviť

S príchodom Direct3D 11 a OpenGL 3.2 bol vykresľovací reťazec rozšírený o nové stupne realizujúce teseláciu. Dva z týchto celkom troch stupňov sú programovateľné. Názvy príslušných shaderov sa u jednotlivých rozhraní líšia. Pre Direct3D sú to Hull-shader a Domain-shader, pre OpenGL potom Tessellation control shader (TC) a Tessellation evaluation shader (TE). Tieto shadery umožňujú meniť geometriu objektov (podobne ako geometry shader). Vďaka podpore teselácie zakotvenej priamo v hardware (GPU) je možné do scény pridať veľmi veľké množstvo detailov (a to tam, kde sú potrebné napr. podľa vzdialenosti od kamery).[2]

Referencie

upraviť
  1. a b c Shader Stages (Direct3D 10) (anglicky)
  2. Tessellation Overview (anglicky)
  • Tento článok je čiastočný alebo úplný preklad článku Shader na českej Wikipédii.

Externé odkazy

upraviť