3D računalniška grafika

Od točke do filma

Kako računalnik iz treh koordinat ustvari svet, ki ga ne moremo ločiti od resničnega.

Vsaka scena iz filmov kot sta Avatar ali Toy Story, vsak lik iz videoiger, vsak virtualni prototip avtomobila — vse to je nastalo iz iste nenavadne osnove: treh števil, ki opisujejo točko v prostoru.

3D računalniška grafika je disciplina, ki opisuje, kako prevedemo matematične opise tridimenzionalnih oblik v dvodimenzionalne slike, ki jih vidimo na zaslonu. Pot od točke v prostoru do renderiranega filma je dolga in polna čudovitih matematičnih idej: matrik, normalnih vektorjev, žarkov svetlobe in barvnih modelov.

To spletno mesto vas popelje po tej poti — korak za korakom, z interaktivnimi prikazovalniki, ki vam omogočajo, da se sami prepričate, kako deluje vsaka zamisel.

Poglavje 1

Točka v prostoru

Tri števila, ki opisujejo celoten svet.

Predznanje: Osnovna matematika — nič posebnega.

Preden računalnik nariše karkoli, mora vedeti, kje je. Vsak predmet v 3D svetu — kocka, človeški obraz, vesoljsko ladjevje — je na koncu le zbirka točk. Vsako točko opišemo s tremi koordinatami: x, y in z.

Točka P(2, 3, 5) leži 2 enoti desno po osi x, 3 enote navzgor po osi y in 5 enot »v globino« po osi z. Ta sistem — kartezični koordinatni sistem v treh dimenzijah — je temelj vsega.

Interaktivno · Koordinatni sistem v 3D

Povleci, da zasukaš pogled. Premikaj drsnik, da premeščaš točko.

Točka P(2.0, 1.5, 1.0)

Vektorji

Točka opisuje položaj. Vektor opisuje smer in razdaljo. V 3D grafiki so vektorji povsod: opisujejo smer pogleda kamere, normalo površine, smer svetlobnega žarka. Vektor od točke A do točke B dobimo preprosto:

v = B − A = (Bx−Ax, By−Ay, Bz−Az)

Posebej pomemben je enotski vektor — vektor dolžine 1. Dobimo ga z normalizacijo: delimo vsako komponento z dolžino vektorja. Enotski vektorji se pogosto uporabljajo za opis smeri, ker njihova dolžina ne šteje — le smer.

|v| = √(x² + y² + z²)   |   v̂ = v / |v|

Skalarni in vektorski produkt

Dve operaciji z vektorji sta v 3D grafiki posebej pogosti:

Skalarni produkt (dot product) vrne število, ki pove, kako vzporedna sta dva vektorja. Če je rezultat 0, sta pravokotna. Izračunamo ga kot a·b = ax·bx + ay·by + az·bz. Uporablja se pri osvetlitvi — meri, kako »naravnost« svetloba zadene površino.

Vektorski produkt (cross product) vrne vektor, ki je pravokoten na oba vhodna vektorja. Izračunamo ga po formuli za determinanto 3×3 matrike. Koristimo ga za iskanje normal površin — smer, v katero »gleda« trikotnik.

Interaktivno · Skalarni in vektorski produkt

Klikni gumb za prikaz operacije.

Globlje: Desnosučni koordinatni sistem ★

V 3D grafiki se srečamo z dvema konvencijama: desnosučnim (OpenGL, Blender) in levosučnim koordinatnim sistemom (DirectX, nekatere videoigre). Razlika je smer osi z: v desnosučnem sistemu z kaže proti gledalcu, v levosučnem od gledalca. To na videz nepomembno razlikovanje povzroča brezštevilne zmede pri prenosu modelov med orodji — normalni vektorji pokažejo v napačno stran in osvetlitev se obrne.

Kar zdaj veste: Vsaka točka v 3D prostoru je trojica (x, y, z). Vektorji opisujejo smeri in razdalje med točkami. Skalarni produkt meri vzporednost, vektorski produkt vrne smer pravokotno na oba vektorja. Ti trije pojmi so gradbeni kamni vsega, kar sledi.
Poglavje 2

Preoblikovanja

Matrike — elegantno orodje za premikanje svetov.

Predznanje: Priporočljivo prebrano 1. poglavje.

Vsaka animacija, vsak premik kamere, vsak krak robotske roke — vse to so preoblikovanja. Premikamo točke iz enega položaja na drugega po pravilih, ki jih opišemo z matematičnimi operacijami. Trije temeljni tipi so: premik (translacija), zasuk (rotacija) in skaliranje.

Homogene koordinate

Računalniška grafika za opis preoblikovanj uporablja eleganten trik: vsaki točki (x, y, z) dodamo četrto komponento w in delamo v 4D prostoru. Točka postane (x, y, z, 1). Zakaj? Ker tako vse tri preoblikovanja — vključno s prevodom — zapišemo kot množenje z 4×4 matriko. To je izjemno priročno: verigo preoblikovanj preprosto zmnožimo v eno matriko.

P' = M · P   kjer M je 4×4 transformacijska matrika
Interaktivno · Preoblikovanja kocke

Vrstni red preoblikovanj je pomemben

Matrika, ki zasuka in potem premakne, ni enaka matriki, ki najprej premakne in potem zasuka. Množenje matrik ni komutativno. To je pogosta past pri razvoju iger in animacij: napačen vrstni red preoblikovanj da napačen rezultat. Pravilen vrstni red je: najprej skaliranje, potem zasuk, nato premik.

Interaktivno · Vrstni red preoblikovanj

Najprej zasuk, potem premik

Najprej premik, potem zasuk

Opazite razliko! Rdeča puščica kaže os zasuka.

Globlje: Hierarhija preoblikovanj in kosti ★★

V animaciji se preoblikovanja združujejo hierarhično. Roka je vezana na nadlaket, ki je vezana na ramo, ki je vezana na trup. Ko premaknemo trup, se premakne celotno telo — to je hierarhija kosti (skeletal animation). Vsaka kost hrani lokalno transformacijsko matriko, globalna pozicija pa je produkt vseh matrik po hierarhični verigi od korena do lista.

Sodobni 3D modeli imajo tipično 50–200 kosti. Napreden sistem inverzne kinematike avtomatično izračuna potrebne kote v sklepih — npr. da se roka premakne do želenega položaja.

Kar zdaj veste: Preoblikovanja opisujemo s 4×4 matrikami v homogenih koordinatah. Translacija, rotacija in skaliranje se zapišejo kot množenje matrik. Vrstni red matrik je pomemben — ni komutativno! Verige preoblikovanj združimo v eno matriko, kar omogoča učinkovito animacijo.
Poglavje 3

Poligonalne mreže

Trikotnik — atomarna enota 3D sveta.

Predznanje: Priporočljivo prebrano 2. poglavje.

Ko je Steve Jobs leta 1995 prvič videl Toy Story, je rekel, da je to začetek novega poglavja v filmski umetnosti. Woodyjev obraz je takrat vseboval okrog 700 poligonov. Danes ima povprečen filmski lik več milijonov. Toda osnovna enota je ostala enaka: trikotnik.

Zakaj trikotnik? Ker je vedno planaren — tri točke v prostoru vedno določajo ravnino. Ker je GPU (grafična procesna enota) optimiziran za risanje trikotnikov. In ker je vsak poligon mogoče razdeliti na trikotnike.

Interaktivno · Poligonalna mreža — gostota

Trikotnikov: 0 | Vrhov: 0

Podatkovne strukture mreže

Poligonalna mreža v pomnilniku hrani tri sezname:

Seznam vrhov (Vertex Buffer) — seznam 3D točk, npr. [(0,1,0), (1,0,0), (-1,0,0), …]

Seznam indeksov (Index Buffer) — trojice celih števil, ki povedo, kateri trije vrhi tvorijo trikotnik, npr. [0,1,2, 0,2,3, …]

Normalni vektorji — za vsak vrh vektor, ki kaže pravokotno na površino. Ključni za osvetlitev.

Normale površin

Normala trikotnika je vektor, ki kaže »iz« površine. Izračunamo jo z vektorskim produktom dveh robnih vektorjev trikotnika:

n = (B−A) × (C−A)   potem normaliziramo: n̂ = n / |n|
Interaktivno · Normale trikotnikov
Globlje: LOD — stopnje podrobnosti ★★

Ko je predmet v igri daleč od kamere, ni smiselno risati milijonov trikotnikov — videti je kot piksel. Sistem Level of Detail (LOD) pripravi več verzij istega modela z različnim številom poligonov. Ko se predmet odmika, sistem samodejno preklopi na manj podroben model. Igranje z dobrim sistemom LOD podvoji ali potroji hitrost renderiranja brez opaznega vizualnega poslabšanja.

Moderna tehnika nanite (Unreal Engine 5) to rešuje avtomatično: vsak poligon se dinamično prilagodi resoluciji, s katero je prikazan na zaslonu.

Kar zdaj veste: 3D modeli so sestavljeni iz trikotnikov. Vsak trikotnik je določen s tremi točkami, vsaka točka ima koordinate (x, y, z) in normalni vektor. Normala kaže smer »ven« iz površine in je ključna za pravilno osvetlitev. Gostejša mreža daje bolj gladek izgled, a zahteva več računske moči.
Poglavje 4

Projekcija

Kako prepričamo ploščat zaslon, da zgleda tridimenzionalno.

Predznanje: Preoblikovanja (3. poglavje).

Zaslon je raven. 3D svet ni. Da bi prikazali 3D prizor na 2D zaslonu, moramo vsako točko projicirati — preslikati v ravnino. Obstajata dve temeljni vrsti projekcije, ki se razlikujeta po tem, ali upoštevamo globino ali ne.

Ortografska projekcija

Pri ortografski projekciji preprosto zavržemo koordinato z. Točka (x, y, z) postane (x, y). Predmeti so enako veliki ne glede na razdaljo od kamere. Koristna je pri tehničnih risbah, CAD sistemih in 2D igrah z izometričnim pogledom.

Perspektivna projekcija

Perspektivna projekcija upošteva, da se oddaljeni predmeti vidijo manjši. Bolj je naravna — enako, kot deluje človeško oko in kamera. Točka se pomanjša sorazmerno z oddaljenostjo:

x' = x · d / z   |   y' = y · d / z

kjer je d razdalja do ravnine projekcije (»goriščna razdalja«). Večji d pomeni manjši vidni kot — kot pri telefoto objektivu.

Interaktivno · Ortografska vs. perspektivna projekcija

Ortografska

Perspektivna

Kamera in vidno polje

V 3D grafiki »kamera« ni nič posebnega — le skupek transformacij, ki premakne celoten svet tako, da kamera stoji v izhodišču in gleda v smer z. Vidno polje (field of view, FOV) določa, koliko prostora vidimo pod kotom. Široko polje (120°) dá poudarjeno perspektivo kot fisheye leča; ozko (30°) stisne prostor kot telefoto.

Interaktivno · Vidno polje (FOV)

Standardno vidno polje za igre je 60–90°.

Globlje: Posnetek zaklonilnika in z-medpomnilnik ★★

Ko projiciramo 3D sceno, moramo vedeti, kateri predmeti so pred katerimi. Naivna rešitev je risanje od daleč do blizu (algoritem Malirja), a ta odpove pri prepletajočih se predmetih. Moderna rešitev je z-medpomnilnik (depth buffer): za vsak piksel na zaslonu hranimo globino (koordinato z) najbližjega predmeta, ki je bil do sedaj narisan. Ko pride novi predmet, ga narišemo le, če je bližje.

Z-medpomnilnik je danes vgrajen v vsak GPU. Zahteva malo dodatnega pomnilnika (en float na piksel), a reši problem vidnosti brez kakršnega koli sortiranja predmetov.

Kar zdaj veste: Ortografska projekcija zavrže globino — primerna za tehnične risbe. Perspektivna projekcija zmanjša oddaljene predmete — naravna in vizualno prepričljiva. Vidno polje določa, koliko scene vidimo in kako poudarjena je perspektiva. Z-medpomnilnik reši problem prekrivanja predmetov.
Poglavje 5

Osvetlitev

Zakaj senčena krogla zgleda okrogla, bela pa samo kot krog.

Predznanje: Vektorji iz 1. poglavja — razloženi so sproti.

Brez osvetlitve bi bila vsaka 3D scena enobarvna — ne bi ločili, ali gledamo kroglo ali disk. Osvetlitev ustvarja globino, obliko in materiale. Klasičen model Phong (po Bungu Phongu, 1975) jo razdeli na tri komponente, ki skupaj dajo prepričljivo sliko.

Ambientalna osvetlitev

To je najosnovnejša svetloba — enaka povsod, brez smeri. Oponaša razpršeno, odbito svetlobo okolja. Vsaka točka površine prejme enako količino ambientalne svetlobe, ne glede na njeno usmerjenost. Brez nje bi bili deli predmetov v popolni temi.

Difuzna osvetlitev

Difuzna svetloba je odvisna od kota med normalo površine in smerjo svetlobnega žarka. Ko svetloba zadene površino pravokotno, je osvetlitev največja; ko tangencialno, je minimalna. Izračunamo jo z Lambertovim zakonom:

I_difuzna = max(0, n̂ · l̂) · barva_svetlobe · barva_površine

kjer je normala površine in enotski vektor v smeri svetlobe.

Zrcalna osvetlitev

Zrcalna osvetlitev dá lesk in odraz. Odvisna je od kota med smerjo odbite svetlobe in smerjo pogleda. Majhna vrednost eksponenta dá širok, mehak lesk (plastika); velika vrednost dá oster, svetleč lesk (kovina).

I_zrcalna = max(0, r̂ · v̂)^n   kjer n je »sijaj« (shininess)
Interaktivno · Phongov model osvetlitve
Globlje: Fizikalno zasnovano renderiranje (PBR) ★★★

Phongov model je hevristika — preprost, a ne fizikalno točen. Sodobna industrija uporablja fizikalno zasnovano renderiranje (Physically Based Rendering, PBR), ki temelji na enačbi renderiranja Kajiye in Torrance-Sparrowovem BRDF modelu. Ta model pravilno upošteva energijsko ohranitev (površina ne more odbiti več svetlobe, kot jo prejme) in pravilno ravna s kovinami in nekovinami.

V PBR vsak material opišemo s parametri: albedo (osnovna barva), metalnost (0 = nemetalna, 1 = kovina), hrapavost in ambientalna okluzija. Ti parametri so intuitivni umetniku in dajejo fizikalno pravilne rezultate pri različnih osvetlitvah.

Kar zdaj veste: Phongov model osvetlitve ima tri komponente: ambientalna (enaka povsod), difuzna (Lambertov zakon, odvisna od normale) in zrcalna (lesk, odvisna od kota pogleda). Skupaj dajo prepričljiv občutek volumna in materialov. PBR je sodobna, fizikalno točna nadgradnja tega modela.
Poglavje 6

Senčenje in materiali

Enak model, tri popolnoma različne površine.

Predznanje: Osvetlitev (5. poglavje).

Osvetlitev pove, koliko svetlobe prejme točka. Senčenje pove, kako to izračunamo za cel trikotnik — ali za vsak piksel posebej ali le za vogale. Razlika je ogromna, tako vizualno kot v zahtevah po računski moči.

Tri stopnje senčenja

Interaktivno · Primerjava tehnik senčenja

Plosko (Flat)

Gouraud

Phong

TehnikaIzračun naKakovostHitrost
Plosko (Flat) En izračun na trikotnik Groba ⚡⚡⚡ Najhitreje
Gouraud Izračun v ogliščih, interpolacija Srednja ⚡⚡ Hitro
Phong Interpolacija normal, izračun na vsak piksel Visoka ⚡ Počasneje

Teksture

Tekstura je slika, »ovita« čez 3D model. Namesto da opišemo barvo vsake točke posebej, shranimo barvno informacijo v 2D sliko in vsaki točki modela priredimo koordinati u in v (teksturne koordinate), ki povesta, kateri piksel iz teksture ji ustreza.

Interaktivno · Teksturno mapiranje
Globlje: Normal mapping in displacement mapping ★★

Normal mapping je tehnika, ki s posebno teksturo (normal map) posnema podrobnosti površine, ne da bi dodajali poligone. Vsak piksel v normal mapi hrani zakodiran normalni vektor, ki se uporabi pri osvetlitvi. Na ta način površina zgleda reliefna, čeprav je geometrija ravna. Opazimo npr. pore na koži ali brazde na skali.

Displacement mapping gre korak dlje in dejansko premakne točke geometrije. Kakovostnejši, a zahteva gostejšo mrežo. V filmih se pogosto kombinira z subdivision surfaces — gladilnim algoritmom, ki mrežo samodejno zgosti.

Kar zdaj veste: Plosko senčenje izračuna barvo enkrat za trikotnik — hitro, a vidni so robovi. Gouraud interpolira med ogliščnimi vrednostmi — gladko, a izgubi zrcalni lesk na majhnih trikotnikih. Phong interpolira normale in izračuna osvetlitev za vsak piksel — kakovostno in pravilno. Teksture dodajo barvne podrobnosti brez dodatnih poligonov.
Poglavje 7

Renderiranje

Zakaj en filmski posnetek traja ure, videoigra pa mora prikazati 60 slik na sekundo.

Predznanje: Priporočljivo prebrano poglavje 6.

Renderiranje je zadnji korak: iz matematičnih opisov predmetov, materialov in svetlobe ustvari sliko. Obstajata dve temeljni filozofiji: rastriranje (rasterization) in sledenje žarkom (ray tracing). Prva je hitra in jo uporabljajo videoigre; druga je fizikalno točna in jo uporabljajo filmi.

Cevovod renderiranja (Render Pipeline)

Rastriranje poteka po fiksnem cevovodu, ki ga danes v celoti izvede GPU:

Vrhovi
Tess.
Geometrija
Rastriranje
Fragmenti
Izhod

Sledenje žarkom

Sledenje žarkom simulira fizikalno pot svetlobe — le v obratni smeri. Iz vsake točke na zaslonu pošljemo žarek v sceno. Žarek zadene površino in »sprašuje«: Ali je ta točka v senci? Kaj se odbije? Kaj se prelomi skozi steklo? Za vsako odbijanje ali lomljenje posredujemo nov žarek. Rezultat je fotorealistična slika z naravnimi sencami, odsevi in lomom.

Interaktivno · Sledenje žarkov — vizualizacija
0%

Opazujte, kako se slika gradi žarek za žarkom — levo desno, vrstico po vrstico.

Globalna osvetlitev

Klasično Phong senčenje je lokalno — vsaka točka vidi le direktno svetlobo. V resničnosti pa svetloba odbija od ene površine na drugo: rdeča stena zabarva sosednjo belo steno z rdečkastim odtenkom. To je globalna osvetlitev (global illumination). Metode jo dosežejo z simulacijo milijonov odbojev žarkov — t. i. sledenje poti (path tracing).

Globlje: GPU in zakaj je tako hiter ★★

CPU ima tipično 8–32 zmogljivih jeder. GPU ima tisoče manjših jeder — NVIDIA RTX 4090 jih ima kar 16.384. Vsako jedro je preprosto, a skupaj vzdržijo na tisoče sočasnih operacij. Renderiranje je idealna naloga za tak paralelizem: vsak piksel se izračuna neodvisno od ostalih.

Sodobni GPU-ji imajo posebno strojno opremo za sledenje žarkov (RT jedra), ki pohitri najpočasnejši del — iskanje presečišč žarkov s trikotniki. NVIDIA-jev DLSS in AMD-jev FSR sta tehniki, ki s strojnim učenjem vzorčita na nižji resoluciji in z nevronsko mrežo »uganeta« manjkajoče piksle — to poveča hitrost za faktor 2–4.

Kar zdaj veste: Rastriranje sledi fiksnem cevovodu na GPU-ju — izredno hitro (60–120 FPS). Sledenje žarkom simulira fizikalno pot svetlobe — počasno, a fotorealistično. Globalna osvetlitev upošteva medsebojna odbijanja svetlobe med površinami. Sledenje poti (path tracing) je danes standard za filmsko industrijo.
Poglavje 8

3D grafika v svetu

Vsak zaslon, ki ste ga danes gledali, je bil izrisan s tem znanjem.

Predznanje: Priporočljivo predhodno branje.

Matematika, ki smo jo spoznali v prejšnjih poglavjih, ni akademska — je temelj industrije vredne več sto milijard evrov. Oglejmo si, kje jo srečamo vsak dan.

Film in animacija
Pixar, ILM, Weta Digital — vsak film danes vsebuje CGI. Blend Shape animacija oponasa mišice obraza.
Videoigre
Real-time renderiranje pri 60–144 FPS z vsemi tehnikami: senčniki, post-procesiranje, HDR.
Medicina
CT in MRI volumetrično renderiranje. 3D vizualizacija organov za načrtovanje operacij.
Arhitektura in CAD
BIM modeli, fotorealistični vizualizacij stavb, simulacije osvetlitve pred gradnjo.

Prihodnost: nevronske mreže in 3D

NeRF (Neural Radiance Fields) je revolucionarna tehnika, ki iz fotografij rekonstruira 3D sceno z nevronsko mrežo. Namesto poligonov se prostorska scena hrani implicitno v utežeh mreže. Kakovost 3D rekonstrukcije iz navadnih fotografij je bila do pred kratkim nepredstavljiva.

Gaussovo raztresanje (3D Gaussian Splatting) je nadgradnja NeRF: sceno predstavimo z milijoni 3D Gaussovih krivulj, ki se renderirajo izredno hitro — v realnem času. To odpira vrata za fotorealistično VR brez snemanja v nadzorovanem studiu.

Generativna 3D umetna inteligenca (npr. OpenAI Shap-E, Meta Make-A-3D) že danes ustvari 3D model iz besedilnega opisa. Pričakujemo, da bo v prihodnjih letih 3D modeliranje postalo dostopno vsakomur — enako, kot je generativna umetna inteligenca demokratizirala 2D ustvarjanje.

Interaktivno · Celoten cevovod — od točk do slike
Zaključna misel: 3D grafika je eno od redkih področij, kjer se matematika, fizika in umetnost srečajo ter skupaj ustvarijo nov svet. Vsaka slika na zaslonu — od majhne ikone do epskega filmskega prizora — je rezultat istih enačb, ki smo jih spoznali v tem potovanju: trije koordinati, matrični produkt, skalarni produkt normalnih vektorjev, pot žarka skozi prostor. Naslednjič, ko boste gledali film ali igro, boste videli matematiko.