» »

DirectX 8: Vertex in Pixel shaderji

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.

Poljubno senčenje

Motion Blur


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

Obojestransko osvetljevanje trikotnikov

Sinusoidno valovanje


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

Višinska megla

Efekt ribjega očesa


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

Čudežno popotovanje skozi grafični cevovod II

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, ...

Preberi cel članek »

Novosti DirectXa 9 - 1. del

Novosti DirectXa 9 - 1. del

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 ...

Preberi cel članek »

ATI Radeon 9700 - Nov kralj v grafični deželi

ATI Radeon 9700 - Nov kralj v grafični deželi

Č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 ...

Preberi cel članek »

Nova bitka v vojni grafičnih kartic

Nova bitka v vojni grafičnih kartic

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 ...

Preberi cel članek »

DirectX 9.0 - Izboljšave knjižnice

DirectX 9.0 - Izboljšave knjižnice

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 ...

Preberi cel članek »