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