Kolegij: Računalna grafika

Tema: VisPy

Pripremili: Luka Mrkonjić i Josip Rosandić


1. Uvod u VisPy

1.1. Što je VisPy

VisPy je interaktivna 2D/3D biblioteka za vizualizaciju podataka temeljena na OpenGL biblioteci. Svrha VisPy modula je pružiti jednostavno sučelje za kreiranje jednostavnih ili složenih grafičkih vizualizacija. VisPy mogu koristiti korisnici koji imaju manje ili više znanja o programiranju 2D/3D računalne grafike budući da sami modul sadrži nekoliko razina na kojima se može kreirati sadržaj, a koje se razlikuju prema složenosti. Korisnici VisPya mogu se podijeliti u dvije kategorije:

  1. Korisnici sa znanjem OpenGL-a
  2. Korisnici u ovoj kategoriji mogu pisati vlastite vizualizacije pomoću vispy.gloo (zahtijeva poznavanje OpenGL/GLSL-a).



  3. Znanstvenici bez znanja OpenGL-a
  4. Znanstvenici kojima je potreban alat visokih performansi za izradu kompleksnih grafikona i vizualizacija. Koriste se sučelja vispy.plot i vispy.scene za rad na visokoj razini.

1.2. Instalacija VisPy okružja

Jedina obvezna biblioteka koju VisPy zahtijeva je numpy. Ostale biblioteke preuzimaju se i uključuju prema potrebi onoga što se kreira. Također, VisPy zahtijeva najmanje jedan alat za kreiranje OpenGL konteksta kao što su pyqt v4,v5 ili v6, zatim pyside v2 ili v6, glfw, sdl2, wx, pyglet ili tkinter.

VisPy intenzivno koristi grafičku karticu instaliranu na vašem sustavu. Točnije, VisPy koristi grafičku procesorsku jedinicu (GPU) kroz shadere. VisPy stoga zahtijeva relativno noviju grafičku karticu kao i ažurirani upravljački program za video kako bi vispy mogao pristupiti programabilnom cjevovodu (za razliku od fiksnog cjevovoda).

Prije instaliranja VisPy-a trebate osigurati da je na vašem računalu instalirana radna verzija pythona, uključujući sve neophodne pakete navedene ranije. Jednostavan način za instaliranje većine ovih zahtjeva je instaliranje Anaconda python distribucije. Anaconda će umjesto vas instalirati većinu VisPy ovisnosti. Ako vaše računalo nema dovoljno prostora na tvrdom disku ili želite minimalnu instalaciju pythona, možete instalirati Miniconda paket. Nakon što se Anaconda instalira, stvorite conda python okruženje.

1.3. Osnovni pojmovi

1.3.1. SHADERI

Shaderi su dijelovi programa koji izravno komuniciraju s GPU i izvode se tijekom renderiranja. Ovisno o prirodi shadera (postoji mnogo vrsta ovisno o verziji OpenGL-a koju koristite), oni će djelovati u različitim fazama cjevovoda renderiranja.

1.3.1. BUFFERI

Ideja modernog GL-a je da su vrhovi pohranjeni na GPU-u i da ih je potrebno učitati samo jednom u GPU prije renderiranja. Način da se to učini je izgraditi međuspremnike na CPU i poslati ih na GPU. Ako se podaci ne promijene, ne morate ih ponovno učitavati. To je velika razlika u odnosu na prethodni fiksni cjevovod gdje su se podaci učitavali pri svakom pozivu za renderiranje (samo su prikazni popisi ugrađeni u GPU memoriju).

1.3.1. UNI, ATTR, VAR

ATTRIBUTE

Attribute tip varijable odnosi se na tip koji sadrži atribut koji opisuje određeni čvor. Primjerice

1 attribute vec2 position;
2 attribute vec4 color;
3 void main()
3 {
4 gl_Position = vec4(position, 0.0, 1.0);
5 }

prikazuje isječak shadera koji sadrži vektor veličine 2 i vektor veličine 4 a koji se respektivno odnose na poziciju i boju točke.

UNIFORM

Uniform tip varijable odnosi se na varijable čija je vrijednost "uniformna" odnosno konstantna za svaki iscrtani čvor. Primjerice

1 uniform float scale;
2 attribute vec2 position;
3 attribute vec4 color;
4 void main()
5 {
6 gl_Position = vec4(position*scale, 0.0, 1.0);
7 }

prikazuje isječak shadera koji, uz dvije ranije navedene varijable sadrži i varijablu tipa uniform koja pohranjuje vrijednost faktora skaliranja koji mora biti jednak za svaki čvor.

VARYING

Varying tip varijable odnosi se na podatak koji se prenosi između sloja fragmenta i sloja čvora. Primjerice, prosljeđujemo boju čvora fragmentu za sjenčanje

1 uniform float scale;
2 attribute vec2 position;
3 attribute vec4 color;
4 varying vec4 v_color;
5
6 void main()
7 {
8 gl_Position = vec4(position*scale, 0.0, 1.0);
9 v_color = color;
10 }

a zatim u fragment shaderu napišemo

1 varying vec4 v_color;
2
3 void main()
4 {
5 gl_FragColor = v_color;
6 }

2. Primjeri

2.1. Jednostavni shader program

Za početak će se prikazati najjednostavniji primjer shader programa. Prvi korak je uvoz potrebnih bibioteka kao što je prikazano u nastavku

Za potrebe projekta preuzeto s vispy.org.

Slika 1: Jednostavan primjer iscrtavanja

2.2. Kvadrat

Autorski rad.

Slika 2: Kvadrat u VisPyju

2.3. Cvijet

Autorski rad.

Slika 3: Cvijet u VisPyju (autorski rad)

2.4. Rotirajuća kocka u VisPyju

Za potrebe projekta preuzeto s vispy.org.

Slika 4: Rotirajuća kocka u VisPyju

2.5. Geometrijska tijela

Za potrebe projekta preuzeto s vispy.org.

Slika 5: Geometrijska tijela u VisPyju

Izvor podataka: vispy.org

© Mrkonjić, Rosandić | Računalna grafika 2021/22