Shader

Izvor: Wikipedija
Skoči na: orijentacija, traži
Translation arrow.svg
Ovaj članak ili dio članka sadrži mnoštvo nepotrebnih anglizama i struktura koje postoje u engleskom jeziku, a ne postoje u hrvatskom jeziku.
Slobodno pomozite to prevesti i ispraviti vodeći računa o stilu i pravopisu. Izvornik se možda nalazi na popisu drugih jezika.


Shader je program koji zamjenjuje određene stadije u Fixed Function Pipelineu i omogućava definiranje svakog izvršenog pixela/vertexa/poligona. Doslovan prijevod shadera bio bi "sjenčar".

Podjela Shadera[uredi VE | uredi]

U DirectX postoje 3 vrste shadera: Pixel Shader (često zvan Fragment Shader u OpenGLu), Vertex Shader, Geometry Shader.


Piksel Shader je vrsta programabilnog shadera koji zamjenjuje određene stadije u pipelineu i utječe na konačnu boju na ekranu. Pixel Shader se izvršava direktno na GPU, a programiranje istog se vrši kroz High Level Shading Language (HLSL) od DX9 verzije , ili u OpenGL Shading Language (GLSL) od OpenGL verzije 2.0. Kroz Pixel Shader se najčešće dobiva efekt Bump Mappinga, Normal Mapping, te Parallax Mapinga. Također Pixel Shader se koristi za dobivanje efekta dinamične vode.

Vertex Shader je vrsta programabilnog shadera koji zamjenjuje određene stadije u pipelineu i utječe na transformacije i upravlja koordinatama tekstura. Kao i Pixel Shader, Vertex Shader se izvršava na GPU ali prije Pixel Shadera. Programiranje istog također se radi najčešće u HLSL (DirectX) i GLSL (OpenGL). Vertex Shader upravlja svojstvima kao što su koordinate tekstura, transformacije, pozicije i sl. ali nemogu kreirati nove vertexe.

Geometry Shader je vrsta programabilnog shadera koji zamjenjuje određene stadije u pipeline i omogućuje stvaranje/odbacivanje novih primitiva. Također se izvršava na GPU i programira se u HLSL ili GLSL.

Pisanje Shadera[uredi VE | uredi]

Dolaskom DirectX 10 API-a u potpunosti je uklonjen Fixed Function Pipeline, što znači ukoliko želili te isprogramirati i najobičnij trokut morate pisati za njega shader program. Sa DX9 verzijom uveden je High Level Shading Language (no još uvjek podržava FF Pipeline), programski jezik u kojem se obavlja programiranje shadera, zamjenjujući asemmbler u kojem se obavljalo programiranje shadera u prethodnoj verzij DirectX-a (DX8).

U OpenGL-u je situacija ponešto drukčija. OpenGL dozvoljava korištenje FF Pipeline ili zamjenu pojedinih stadija shaderom. OpenGL Shading Language je uveden u verziji 2.0 OpenGL-a, no dostupan je i u OpenGL verziji 1.4 kroz ekstenzije (GL_ARB_vertex_shader i GL_ARB_fragment_shader).

Još jedan jezik je Cg kojeg je razvila NVIDIA. Cg kompajler dava OpenGL i DirectX shader programe.

Danas svaka igra na tržištu koristi kompleksne kombinacije shadera kako bi prikazala napredne efekte pomoću dočaravanja vode, simulacije ljudskog lica , prikazivanja naprednih efekata osvjetljenja, i sl. Svaka nova verzija DirectX-a donosi povećan broj instrukcija koje dozvoljava trenutna verzija API-a, tako povećavajući slobodu i prostor programerima da urade što više efekata. Shaderi su se počeli upotrebljavat krajem 90-tih sa id tech 3 engine, a sredinom 2004. godine doživljeli puni procvat i potpunu upotrebu sa igrama kao što su Far Cry, Doom 3 i sl.

Kronologija razvoja Shadera[uredi VE | uredi]

1990.[uredi VE | uredi]

Do sredine 1980-tih su PC igre bile ograničene na dvije dimenzije. Jedna uobičajena rezolucija tada je bila 640x350 - najviše 224.000 grubih 2D kockica (piksela) je bilo predviđeno za prikazivanje svijeta, likova i elemenata funkcionalnih radnji (jedan 22" TFT ima 1,764 milijuna piksela). Ali već od 1970-tih godina su na sveučilištima bila dva koncepta za virtualne 3D svijetove: Rasterizacija (eng. Rasterisation) i Raytracing. Rasterizacija pokušava sa što manjim opsegom računanja prikazati što stvarnije približavanje stvarnom svijetu, Raytracing prati više fizičke okolnosti na našem planetu i zbog toga je precizniji, ali je danas za programe u stvarnom vremenu (eng. Realtime) kao PC igre prespor. PC ulazi napokon 1997. godine sa svemirskom igrom Elite u 3. dimenziju. Jedna šaka poligona morala je biti dovoljna, više hardver nije mogao odraditi. U toku godina su u početku goli poligoni počeli biti lijepljeni za teksturama i tako su dobivali više detalja. Do 1996. morali smo se strpjeti, dok je id Software sa Quake izdao prvu kompletno u 3D računajuću igru. U tom razdoblju na popularnosti je dobio 3D ubrzivač imenom Voodoo. Četiri godine kasnije je sa Geforce 2 izašla zadnja hardver generacija ove 3D ere, prije nego što Nvidia godinu dana kasnije sa Geforce 3 i njenom Shader tehnologijom otvara novo doba programiranih grafičkih čipova.

2000.[uredi VE | uredi]

U današnjem Shader vremenu nestaju granice između CPU i grafičke kartice kao i Rasterizacije i Raytracinga. Od vremena DirectX 8 i Geforce 3, grafičke kartice nesavladavaju samo funkcije koje su programirane unaprijed (kao npr. zalijepiti jednu teksturu na jedan poligon), nego one mogu sa svojim Shader procesorima izvršavati kompleksne programe. 2002. je to Morrowind radio, kako bi za one vrijeme prikazao impresivne refleksije vode (vidi "Shader vremeplov). No još je tada DirectX 8 jako kočio programere. DirectX 9 (Radeon HD 9800, Geforce FX) je bio napokon toliko fleksibilan, da se naprosto svaki zamisljivi računarski podhvat na shaderima mogao poduzeti. Jedino maksimalna moguća snaga računanja je ograničavala slobodni prostor programerima igara. Mnoge moderne efekte programeri ostvaruju putem Shadera, svejedno bilo to fizika, Tezelacija (eng.Tesselation), Parallax Occlusion Mapping, ili Post-Processing. Mnogo ovih efekata su u najboljem slučaju samo približavanje stvarnom svijetu. To su trikovi, kako bi se kod civilnog procesa računanja dobila optički spektakularna 3D grafika. Parallax Occlusion Mapping npr. je prvi put nastupio na scenu u Splinter Cell: kaos teoriji i prikazuje cigle na zidovima i slične strukture u plastičnom svijetlu. Kada se jedan tako teksturiran zid pod jednim jako ravnim kutom promatra, trik se sam otkriva: na kraju se se radi samo o jednoj ravnoj teksturi, dakle o jednoj foto tapeti. Sa dolazećim DirecX 11 i njegovom podporom za tehniku tezelacije, moguće je svaku ciglu efektivno iz poligona modelirati. Moderne grafičke kartice rade toliko brzo da neki Shader programi koriste čak i podjednostavljene Raytracing algoritme (Raycasting). Često pri kontroli vidljivih objekata ili približavanju uvjerljivom globalnom osvjetljenju.

2010.[uredi VE | uredi]

Ubrzo je između AMD i Nvidije izbila trka za prvu DirectX 11 grafičku karticu, koju je AMD prvi dobio. Nova Radeon bi trebala biti u prodaji točno na start Windowsa 7 i DirectX 11 krajem listopada 2009. Nvidia je tek sredinom 2010. izdala nove Geforce grafičke kartice koje isto podržavaju DirectX 11.

Shader vremeplov[uredi VE | uredi]

  • 2002: TES 3 Morrowind
Gamescrn morrowind 03-B.jpg

Sa DirectX 8 i Geforce 3 počelo je doba programiranih grafičkih čipova. Morrowind je kao prva igra koristila nove Shader jedinice i pokazivala reflektirajuće površine vode.





  • 2004: Doom 3
Doom 3 shader.jpg

Programer John Carmack upotrijebio je za Remake prvog Doom dijela intenzivne igre sijena. Mnogo DirectX 9 grafičkih kartica je ovo teško podnijelo.





  • 2004: Far Cry
FarCry HDR.jpg

Far Cry, džungla pucačina iz Njemačke po prvi put prikazuje ogromne vanjske površine sa gustom vegetacijom. Sa zakrpom 1.3 Crytek nadograđuje High Dynamic Range osvjetljenje, što okolinu prikazuje još stvarnije.





  • 2004: Half-Life 2
Half-Life 2.jpg

Isto u 2004. godini Valve isporučuje Half-Life 2 u trgovine. Tehnički novo i vrlo dobro napravljeno su bile jasno vidljive grimase i emocije likova u igri, što im je ulijevalo više života i činilo ih stvarnijim. Istotako sinkronizacija usana likova sa audio govorom je uspješno odrađena.




  • 2007: Crysis
Crysis vegetation.jpg

Crysis je do danas PC igra koja ima najljepšu grafiku i najveće tehničke zahtjeve. Engine savladava sve tehničke igrarije, pogotovo do sada neviđen prikaz vegetacije.




  • 2009: Colin McRae: Dirt 2
Colin McRae DIRT2.jpg

Ova igra juri Codemasters u sljedeću tehnik generaciju: Colin McRae Dirt 2 treba kao prvo igra uopće podržavati DirectX 11.