Programi za sjenčanje geometrije

Kontakt

Autora možete kontaktirati na jmaricevic@nightirion.com

Korisni linkovi

Uvod

U računalnoj grafici, programi za sjenčanje su skup instrukcija koji se koristi prvenstveno za izračunavanje efekata prilikom iscrtavanja slike na grafičkom sklopovlju. Pomoću njih se programiraju cjevovodi za ostvarivanje prikaza, što predstavlja velik pomak u odnosu na cjevovode s fiksnim funkcijama koji su dozvoljavali samo jednostavne geometrijske transformacije i sjenčanje slikovnih elemenata.

Ime su dobili jer su se inicijalno koristili samo za sjenčanje slikovnih elemenata, no taj izraz se zadržao i sad se koristi i za druge faze koje se odvijaju u grafičkim cjevovodima. Kako se programirljivo grafičko sklopovlje razvijalo, svim većim programskim bibliotekama, kao što su npr. OpenGL i DirectX, su se počele dodavati mogućnosti pisanja programa za sjenčanje. U osnovi, programi za sjenčanje su manji programi koji opisuju neka svojstva slikovnih elemenata (npr. boja, z-dubina, alpha vrijednost) ili vrha (npr. pozicija, koordinate teksture).

U Direct3D-u i OpenGL-u postoje tri osnovna tipa programa za sjenčanje:

  • Programi za sjenčanje vrhova (engl. vertex shader) – programi za sjenčanje koji se izvode za svaki vrh proslijeđen grafičkom procesoru. Njihova svrha je da transformiraju trodimenzionalnu poziciju svakog vrha udvodimenzionalne koordinate za prikaz na ekranu. Programi za sjenčanje vrhova mogu manipulirati svojstvima dobivenog vrha, no ne mogu stvarati nove vrhove. Rezultati programa za sjenčanje vrhova se tada prosljeđuju programima za sjenčanje geometrije ako postoje, a ako ne tada idu direktno u sustav za rasterizaciju.

  • Programi za sjenčanje geometrije (engl. geometry shader) – za razliku od programa za sjenčanje vrhova mogu dodavati ili uklanjati vrhove iz mreže (engl. mesh). Koriste se da proceduralno definiraju geometriju, ili da dodaju detalje sceni koji bi bili prezahtjevni da se obrađuju na procesoru. Izlaz iz ovih programa se prosljeđuje na ulaz sustava za rasterizaciju.

  • Programi za sjenčanje slikovnih elemenata (engl. pixel shader) – dobivaju ulaz od sustava za rasterizaciju, te potom primjenjuju željene efekte poput preslikavanja izbočina i toniranja boja. U OpenGL-u se koristi izraz program za sjenčanje fragmenata (engl. fragment shader), što je tehnički točnije jer ne postoji jedan na jedan veza između poziva programa za sjenčanje slikovnih elemenata i prikazanih slikovnih elemenata.

Sažetak

(Programi za sjenčanje geometrije)

U radu se detaljno proučavaju mogućnosti programa za sjenčanje fragmenata, vrhova i geometrije. Također se razmatraju I demonstriraju različiti načini implementacije i povezivanja programa za sjenčanje. Implementirano je nekoliko programa za sjenčanje vrhova i fragmenata za usporedbu i analizu. Posebno su razrađeni programi za sjenčanje geometrije. Njihova uporaba je prikazana na problematici staničnih tekstura i geometrije za vrijeme izvođenja programa. Ukratko su opisane neke poznatije već postojeće metode generiranja staničnih tekstura, te modifikacije tih metoda koje su implementirane u sklopu ovog rada. Analiziran je utjecaj različitih parametara na performanse programa.

Ključne riječi: programi za sjenčanje fragmenata, programi za sjenčanje vrhova, programi za sjenčanje geometrije, stanične teksture, generiranje staničnih tekstura, iscrtavanje u stvarnom vremenu

Summary

(Geometry shaders)

This paper examines capabilities of pixel, vertex and geometry shaders. It also studies and demonstrates different methods of shader linking and implementation. Several shader programs are created for comparison and analysis.
Geometry shaders are examined in greater detail. Their application is shown on real time cellular texture generation examples. Some of the more known cellular texture generation methods are described together with modified methods which were implemented as a part of this paper. Performance is analyzed regarding various parameters.

Keywords: shaders, pixel shaders, vertex shaders, geometry shaders, cellular texture, cellular texture generation, real time rendering