Završni rad br. 1200
Programi za sjenčanje
Bruno Mikuš
SVEUČILIŠTE U ZAGREBU
FAKULTET ELEKTROTEHNIKE I RAČUNARSTVA
2009./2010.
SJENČANJE

Grafički cjevovod

Računalna grafika, od svojih prvih dana, nastoji što vjernije i što kvalitetnije imitirati i prikazati vizualnu stvarnost percipiranu okom. Dolaskom 3D grafike pojavilo se mnoštvo novih zadataka koje je grafička kartica trebala obavljati u određenom redoslijedu. Kroz godine ti su se postupci i tehnike konstantno proširivali i poboljšavali nadograđujući se na postojeće sustave čineći u konačnici grafički cjevovod.

Grafički cjevovod
Grafički cjevovod

Umjesto korištenja fiksnih operacija, razvoj grafičkih kartica i cjevovoda je omogućio pisanje vlastitih funkcija i programa za kontrolu transformacija nad vrhovima i fragmentima. Kako se za pojedine vrhove i fragmente mogu izvoditi programi neovisno o susjednim (tj. o drugim) vrhovima i fragmentima tako nove grafičke kartice imaju više jedinica (zasebnih, specijaliziranih procesora) za sjenčanje.

Jedinice za sjenčanje

Sve jedinice temelje se na vektorskoj i matričnoj matematici pa tako je skup instrukcija različitih jedinica praktički isti. Dolaskom sjenčanja geometrije (DirectX 10, Shader model 4.0) i rastom ukupnog broja jedinica, došlo je do unifikacije pa tako današnje grafičke kartice imaju i po nekoliko desetaka univerzalnih jedinica, koje po potrebi mijenjaju funkcionalnost.

Jedinice različitih grafičkih kartica koriste slične setove instrukcija, koje se mogu obuhvatiti univerzalnim asemblerskim kodom. Sve jedinice su usmjerene prema vektorskom i matričnom računu sa brojevima sa posmačnim zarezom, te su stoga na tom području iznimno brze. Postoje nizovi različitih pomoćnih registara bez obzira na to o kojoj se jedinici radilo.

Sjenčanje vrhova

Ovim djelom cjevovoda izvršavaju se prostorne i perspektivne transformacije koordinata, transformacije koordinata teksture, transformacije normala i vektora svjetlosti, odnosno općenito svi poslovi vezani uz manipulaciju sa vrhovima. U razvijenom programu sjenčanjem vrhova animira se tekstura, istežu se točke prema izvoru svjetlosti te se računaju vektori i koeficijenti za osvjetljenje.

Sjenčanje geometrije

Kako bi se povećala razina detalja, sjenčanjem geometrije mogu se stvarati novi primitivi. Ulaz u ovaj dio cjevovoda su postojeći primitivi (linije, trokuti i sl.), a izlaz su novi primitivi koji povećavaju složenost scene. U razvijenom programu nije korišteno sjenčanje geometrije.

Sjenčanje fragmenata

U ovim se jedinicama računa konačna boja pojedinog fragmenta na ekranu. Koriste se interpolirani podatci iz prethodnih koraka, a obavlja se uzorkovanje teksture, računanje svjetlosti ili napredni efekti poput mapiranja izbočina. U razvijenom programu se sjenčanje fragmenata primjenjuje za računanje osvjetljenja i animiranje boje.

Jezici za sjenčanje

Kako bi se pojedine jedinice mogle programirati, potreban je programski jezik. Razvijeno ih je podosta, tako da izbor ovisi o tome za koju platformu se izrađuje aplikacija i kakve se performanse očekuju. Postoje 4 istaknuta i korištena jezika za sjenčanje:

  • ARB - GPU asembler, ima sve odlike klasičnih asemblerskih jezika, sve platforme
  • GLSL - OpenGL jezik za sjenčanje, sve OpenGL platforme
  • Cg - Nvidia-in jezika za sjenčanje, razvijen u suradnji s Microsoftom, Windows i Linux
  • HLSL - Microsoftov jezik, razvijen u suradnji s Nvidia-im, isključivo Windows platforma

Programsko rješenje

Za programsko rješenje odabran je jezik C++ zbog svoje brzine. Korišten je DirectX API za rad sa grafikom, kako bi se pokazao malo drugačiji pristup od na FER-u uobičajenog OpenGL-a. Jezik sjenčanja je stoga HLSL.

Korišten je alat Render Monkey kako bi se razvio efekt, tj. program za sjenčanje. Taj program omogućava postavljanje scene i svih potrebnih varijabli. U alatu Visual Studio 2010 je isprogramirana grafička aplikacija.

Fakultet elektrotehnike i računarstva - Završni radovi računalne grafike
Creative Commons License
2009./2010. Design by Mikuš