Članki » Grafične tehnologije » DirectX 8: Vertex in Pixel shaderji
DirectX 8: Vertex in Pixel shaderji
- Marko Dolenc ::
Ker sem v večini člankov o DirectX 8.0, ki sem jih videl na Internetu, opazil, da so praktično vsi le manjša predelava dela dokumentacije iz DirectX 8.0 SDK ki opisuje novosti, sem se odločil, da vse skupaj razložim malo bolj podrobno. V naslednjih nekaj člankih se bomo tako sprehodili čez praktično vse novosti, ki jih DirectX 8.0 prinaša. V prvem delu si bomo tako ogledali, kaj so to vertex in pixel shaderji, čemu služijo in zakaj jih bo možno uporabiti.
Kaj so vertex shaderji?
Microsoft je s podporo vertex shaderjem programerjem iger omogočil, da lahko programirajo T&L (Transformation & lighting) enoto. Programerji lahko sedaj napišejo svoje lastne funkcije, ki jih potrebujejo, in grafični procesor jih bo strojno pospešil (če podpira vertex shaderje). Vertex shaderji so tako programi za T&L enoto, ki so pisani v nekakšnem zbirniku (assemblerju), ki jih grafična kartica nato izvaja. Grafična kartica mora za podporo vertex shaderjem imeti posebno programibilno T&L enoto. Če nima programibilne enote, se bodo ti programi izvajali preko centralnega procesorja. Za podporo vertex shaderjem mora T&L enota na grafični kartici zagotoviti naslednje registre:
- 96 konstantnih registrov
- 12 začasnih registrov
- 16 registrov, preko katerih dobimo točko (vertex)
Programer potem napiše program, ki med temi registri izvaja različne operacije. Najlepše pri tem pa je to, da se ta program izvaja strojno pospešen na grafični kartici.
Kaj nam vertex shaderji omogočajo?
Vertex shaderji programerju pustijo veliko več svobode, saj mu ni več treba svojih idej prilagajati funkcijam, ki so strojno podprte. Mogoči so raznorazni efekti:
- morphing (morfiranje - prehajanje iz enega objekta v drugega)
- proceduralna geometrija (geometrija, ki se generira z določenimi funkcijami)
- lastne metode za senčenje (dvo stransko senčenje,...)
- megla (višinska, lokalna,...)
- in še veliko drugih stvari, ki se jih programerji spomnijo
Plusi in minusi vertex shaderjev:
Plusi:
- programiranje T&L enote na grafični kartici
- dobra emulacija preko procesorja, če jih grafična kartica ne zmore izvajati
- ne predstavljajo velike dodatne obremenitve (ne za kartico s programabilno T&L enoto in ne za programerja)
Minusi:
- vertex shaderji lahko samo spreminjajo vertexe (točke), ne morejo pa jih dodajati ali odvzemati
- strojno še niso podprti
Kaj so to pixel shaderji?
Pixel shaderji, podobno kot vertex shaderji, v svet grafičnih pospeševalcev vnašajo programabilnost. Za razliko od vertex shaderjev, pa pixel shaderji omogočajo programiranje rasterizacijske enote (enota, ki izrisuje trikotnike) na grafični kartici. Podobno, kot pri vertex shaderjih, tudi tukaj programerji napišejo programe v zbirniku (assemblerju), grafični procesor pa jih nato strojno pospešuje. Vendar pa pixel shaderjev ni mogoče emulirati s procesorjem, saj delujejo praktično povsem na koncu obdelave slike (vertex shaderji so povsem na začetku). Če torej hočemo izvajati pixel shaderje brez strojne podpore, potem moramo tudi vse ostalo izrisovati brez strojne podpore (ti. referenčni način, ki teče samo preko CPU-ja). Za podporo pixel shaderjev mora vsak cevovod (pipeline) za izrisovanje pik na grafični kartici zagotoviti:
- 8 konstantnih registrov
- 4 registre za teksture
- 2 registra za barvo točke (diffuse in specular komponenta)
- 2 začasna registra
Programer nato med temi registri opravlja operacije, kot so: seštevanje, odštevanje, množenje, dot product 3... Programer ima z uporabo pixel shaderjev zelo dobro kontrolo nad hitrostjo izvajanja teh programov. Brez uporabe pixel shaderjev je namreč težje predvideti koliko prehodov bo morala grafična kartica narediti, da bo izvedla željene operacije.
Kaj nam pixel shaderji omogočajo?
Pixel shaderji so, za razliko od vertex shaderjev, dosti manj uporabni, saj morajo biti enote za teksturiranje že same po sebi precej programabilne. Kljub temu pa marsikaj precej poenostavijo programerjem. Vse skupaj pa tudi ne bo tako zelo opazno, kot vertex shaderji.
Primer delovanja pixel shaderjev. Na desni vidite program, na levi pa njegov rezultat:
Plusi in minusi pixel shaderjev:
Plusi:
- popolna programabilnost rasterizacijske enote na grafični kartici
- enostavnost
- praktično nič dodatnega dela za programerje
Minusi:
- strojno še niso podprti
- manj opazni kot vertex shaderji
Zaključek:
Tako vertex, kot pixel shaderji, so zelo pomembna novost v DirectX 8.0, saj prinašajo tako željeno programabilnost. Ker pa trenutno še ni strojne opreme predvsem za pixel shaderje še ni velike uporabnosti. Vertex shaderji pa so zaradi zelo dobre emulacije preko procesorja že zelo uporabna zadevica.
Za slike sta uporabljena programa Efect Browser (NVidia) in pa MFCPixelShader (primer iz DirectX 8.0 SDK).
Čudežno popotovanje skozi grafični cevovod II
- Marko Dolenc ::
V prvem delu smo si ogledali strukturo sodobne grafične kartice. Med drugim smo omenili shaderje, ki so zaradi svoje programabilnosti, nekakšno srce in duša sodobnih GPU-jev. Različni shaderji so odgovorni za različne strukture v grafiki (v Direct3D 10 so to oglišča, ...
DirectX 9.0 - Izboljšave knjižnice
- Marko Dolenc ::
V prejšnjem delu smo si ogledali novosti in izboljšave, ki so doletele programabilnost grafičnih kartic, torej osenčevalnike točk ter oglišč. Seveda pa novi pixel in vertex shaderji niso edina novost v DirectX 9.0. Novosti je še kar nekaj, vendar je res, da je ...
Novosti DirectXa 9 - 1. del
- Marko Dolenc ::
No pa smo vendarle dočakali novo, dolgo pričakovano, različico knjižnice DirectX, ki jo je zlobni Microsoft, bolj ali manj skrbno skrival pred radovednimi očmi javnosti. V približno enaki tajnosti sta nastala tudi ta dva članka, ki vam bosta, vsaj upam tako, uspela ...
Nova bitka v vojni grafičnih kartic
- Marko Dolenc ::
Da je računalništvo hitro se razvijajoča panoga čivkajo že vrabčki na vejah. Da se grafične kartice razvijajo še hitreje od ostalih področij znotraj računalništva, je takisto lahko jasno vsakemu, ki vsaj vsake toliko preleti kakšen cenik ...
ATI Radeon 9700 - Nov kralj v grafični deželi
- Marko Dolenc ::
Če ne živite ravno v kakšnem zakotnem pragozdu ter lahko berete ta članek, potem ste gotovo že slišali, da je ATi izdal nov grafični čip R300, ki so ga poimenovali Radeon 9700. Kot verjetno že veste, novi Radeon s precejšjno lahkoto pomete z vso konkurenco ...