Umbrirea

Umbrirea Gouraud, dezvoltată de Henri Gouraud în 1971, a fost una dintre primele tehnici de umbrire dezvoltate pentru grafica 3D pe calculator.

În grafica pe calculator, umbrirea se referă la procesul de modificare a culorii unui obiect/suprafață/poligon din scena 3D, pe baza unor elemente precum (dar fără a se limita la) unghiul suprafeței față de lumini, distanța față de lumini, unghiul față de cameră și proprietățile materialelor (de ex.ex. funcția de distribuție a reflectanței bidirecționale) pentru a crea un efect fotorealist.

Shading-ul este realizat în timpul procesului de redare de către un program numit shader.

Unghiul suprafeței față de o sursă de luminăEdit

Shading-ul modifică culorile fețelor dintr-un model 3D pe baza unghiului suprafeței față de o sursă sau surse de lumină.

Prima imagine de mai jos are fețele cutiei redate, dar toate în aceeași culoare. Liniile de margine au fost redate și aici, ceea ce face ca imaginea să fie mai ușor de văzut.

A doua imagine este același model redat fără linii de margine. Este dificil de spus unde se termină o față a cutiei și unde începe următoarea.

În cea de-a treia imagine este activată umbrirea, ceea ce face imaginea mai realistă și face mai ușor de văzut care față este care.

Imaginea redată a unei cutii. Această imagine nu are umbrire pe fețele sale, dar în schimb folosește linii de margine (cunoscute și ca wireframe) pentru a separa fețele și un contur mai îndrăzneț pentru a separa obiectul de fundal.

Aceasta este aceeași imagine cu liniile eliminate; singura indicație a geometriei interioare sunt punctele siluetei obiectului.

Aceasta este același obiect redat cu umbrire plată. Culoarea celor 3 fețe frontale vizibile a fost setată în funcție de unghiul lor (determinat de vectorul normal) față de sursele de lumină.

Tipuri de iluminareEdit

Efecte de umbrire de la un proiector folosind un ray tracer

Când un shader calculează culoarea rezultată, acesta utilizează un model de iluminare pentru a determina cantitatea de lumină reflectată în anumite puncte de pe suprafață. Diferite modele de iluminare pot fi combinate cu diferite tehnici de umbrire – în timp ce iluminarea spune câtă lumină este reflectată, umbrirea determină modul în care aceste informații sunt utilizate pentru a calcula rezultatul final. De exemplu, se poate calcula iluminarea numai în anumite puncte și se poate utiliza interpolarea pentru a completa restul. Shaderul poate decide, de asemenea, câte surse de lumină să ia în considerare etc.

Iluminare ambientalăEdit

O sursă de lumină ambientală reprezintă o sursă de lumină omnidirecțională, cu intensitate și culoare fixe, care afectează în mod egal toate obiectele din scenă (este omniprezentă). În timpul redării, toate obiectele din scenă sunt luminate cu intensitatea și culoarea specificate. Acest tip de sursă de lumină este utilizat în principal pentru a oferi scenei o imagine de bază a diferitelor obiecte din ea. Acesta este cel mai simplu tip de iluminare de implementat și modelează modul în care lumina poate fi împrăștiată sau reflectată de mai multe ori, producând astfel un efect uniform.

Iluminarea ambientală poate fi combinată cu ocluzia ambientală pentru a reprezenta cât de expus este fiecare punct al scenei, afectând cantitatea de lumină ambientală pe care o poate reflecta. Acest lucru produce o iluminare difuză, non-direcțională în întreaga scenă, fără a proiecta umbre clare, dar cu zonele închise și adăpostite întunecate. Rezultatul este, de obicei, similar din punct de vedere vizual cu o zi înnorată.

Point lightingEdit

Lumina provine dintr-un singur punct și se răspândește spre exterior în toate direcțiile.

SpotlightingEdit

Modelizează un spot: lumina provine dintr-un singur punct și se răspândește spre exterior într-un con.

Area lightingEdit

Lumina provine dintr-o zonă mică pe un singur plan. (Un model mai realist decât o sursă de lumină punctiformă.)

Iluminare direcționalăEdit

O sursă de lumină direcțională luminează toate obiectele în mod egal dintr-o anumită direcție, ca o lumină de suprafață de dimensiune infinită și la o distanță infinită față de scenă; există umbrire, dar nu poate exista nicio cădere de distanță. Aceasta este ca soarele.

Distance falloffEdit

Două cutii redate cu OpenGL. (Observați că culoarea celor două fețe frontale este aceeași, chiar dacă una este mai îndepărtată.)

Același model randat cu ARRIS CAD, care implementează scăderea distanței pentru a face mai luminoase suprafețele care sunt mai aproape de ochi.

Teoretic, două suprafețe care sunt paralele sunt iluminate practic la fel de mult de o sursă de lumină îndepărtată și neblocată, cum ar fi soarele. Efectul de scădere a distanței produce imagini care au mai multă umbră și astfel ar fi realiste pentru sursele de lumină apropiate.

Imaginea din stânga nu utilizează scăderea distanței. Observați că culorile de pe fețele frontale ale celor două cutii sunt exact aceleași. Se poate părea că există o ușoară diferență acolo unde cele două fețe se suprapun direct, dar aceasta este o iluzie optică cauzată de marginea verticală de sub locul în care cele două fețe se întâlnesc.

Imaginea din dreapta utilizează falloff-ul de distanță. Observați că fața frontală a cutiei mai apropiate este mai luminoasă decât fața frontală a cutiei din spate. De asemenea, podeaua trece de la lumină la întuneric pe măsură ce se îndepărtează.

CalcululEdit

Căderea la distanță poate fi calculată în mai multe moduri:

  • Puterea distanței – Pentru un anumit punct aflat la o distanță x față de sursa de lumină, intensitatea luminii primite este proporțională cu 1/xn.
    • Niciuna (n = 0) – Intensitatea luminii primite este aceeași indiferent de distanța dintre punct și sursa de lumină.
    • Lineară (n = 1) – Pentru un anumit punct aflat la o distanță x față de sursa de lumină, intensitatea luminii primite este proporțională cu 1/x.
    • Pătratică (n = 2) – Acesta este modul în care intensitatea luminii scade în realitate dacă lumina are o traiectorie liberă (adică nu există ceață sau orice alt lucru în aer care poate absorbi sau împrăștia lumina). Pentru un anumit punct aflat la o distanță x față de sursa de lumină, intensitatea luminii primite este proporțională cu 1/x2.
  • Se pot folosi, de asemenea, un număr oarecare de alte funcții matematice.

Tehnici de umbrireEdit

În timpul umbririi, o normală de suprafață este adesea necesară pentru calculul iluminării. Normalele pot fi precalculate și stocate pentru fiecare vertex al modelului.

Umbrire planăEdit

Umbrirea plană a unui cuboid texturat

Aici, iluminarea este evaluată o singură dată pentru fiecare poligon (de obicei pentru primul vertex din poligon, dar uneori și pentru centroidul pentru ochiurile triunghiulare), pe baza normalei la suprafața poligonului și a presupunerii că toate poligoanele sunt plane. Culoarea calculată este utilizată pentru întregul poligon, ceea ce face ca colțurile să pară ascuțite. Această metodă se utilizează de obicei atunci când tehnicile de umbrire mai avansate sunt prea costisitoare din punct de vedere al calculului. Evidențele speculare nu sunt redate corespunzător cu ajutorul umbririi plate: Dacă se întâmplă să existe o componentă speculară mare la vertexul reprezentativ, această luminozitate este trasată uniform pe întreaga față. În cazul în care o evidențiere speculară nu cade pe punctul reprezentativ, aceasta este omisă complet. În consecință, componenta de reflexie speculară nu este, de obicei, inclusă în calculul de umbrire plană.

Umbrire netedăEdit

În contrast cu umbrirea plană, unde culorile se schimbă discontinuu la granițele poligoanelor, cu umbrirea netedă culoarea se schimbă de la pixel la pixel, rezultând o tranziție lină a culorii între două poligoane adiacente. De obicei, valorile sunt calculate mai întâi în vârfuri și se utilizează interpolarea biliniară pentru a calcula valorile pixelilor dintre vârfurile poligoanelor. Tipurile de umbrire netedă includ umbrirea Gouraud și umbrirea Phong.

Umbrirea GouraudEdit
  1. Determinați normala la fiecare poligon vertex.
  2. Aplicați un model de iluminare la fiecare vertex pentru a calcula intensitatea luminii pornind de la normala la vertex.
  3. Interpolați intensitățile vertexurilor folosind interpolarea biliniară pe poligonul de suprafață.

Probleme:

  • Datorită faptului că iluminarea este calculată numai la vârfuri, inexactitățile (în special ale evidențelor speculare pe triunghiuri mari) pot deveni prea evidente.
  • Joncțiunile în T cu poligoane alăturate pot duce uneori la anomalii vizuale. În general, ar trebui evitate joncțiunile în T.
Phong shadingEdit

Phong shading este similar cu Gouraud shading, cu excepția faptului că, în loc de interpolarea intensităților luminoase, normalele sunt interpolate între vârfuri, iar iluminarea este evaluată per-pixel. Astfel, evidențele speculare sunt calculate mult mai precis decât în modelul de umbrire Gouraud.

  1. Calculează o normală N pentru fiecare vârf al poligonului.
  2. Utilizând interpolarea biliniară, se calculează o normală, Ni pentru fiecare pixel. (Normala trebuie să fie renormalizată de fiecare dată.)
  3. Aplicați un model de iluminare la fiecare pixel pentru a calcula intensitatea luminii din Ni.

Umbrire amânatăEdit

Umbrirea amânată este o tehnică de umbrire prin care calculul umbririi este amânat pentru o etapă ulterioară prin redarea în două treceri, crescând potențial performanța prin faptul că nu se aruncă pixelii umbriți costisitori. Prima trecere captează doar parametrii de suprafață (cum ar fi adâncimea, normalele și parametrii materialului), iar cea de-a doua realizează umbrirea propriu-zisă și calculează culorile finale.:884

Alte abordăriEdit

Atât umbrirea Gouraud, cât și umbrirea Phong pot fi implementate utilizând interpolarea biliniară. Bishop și Weimer au propus să se utilizeze o expansiune în serie Taylor a expresiei rezultate din aplicarea unui model de iluminare și interpolarea biliniară a normelor. Prin urmare, s-a utilizat interpolarea polinomială de gradul doi. Acest tip de interpolare biquadratică a fost elaborat în continuare de Barrera et al. unde un polinom de ordinul al doilea a fost utilizat pentru a interpola lumina difuză a modelului de reflexie Phong și un alt polinom de ordinul al doilea a fost utilizat pentru lumina speculară.

Interpolarea liniară sferică (Slerp) a fost utilizată de Kuij și Blake pentru calcularea atât a normalei peste poligon, cât și a vectorului în direcția sursei de lumină. O abordare similară a fost propusă de Hast, care utilizează interpolarea cuaternionică a normalelor, cu avantajul că normala va avea întotdeauna lungime unitară și se evită normalizarea grea din punct de vedere al calculului.

Flat vs. smooth shadingEdit

Flat Smooth
Uses the same color for every pixel in a face – usually the color of the first vertex Smooth shading uses linear interpolation of either colors or normals between vertices
Edges appear more pronounced than they would on a real object because in reality almost all edges are somewhat round The edges disappear with this technique
Same color for any point of the face Each point of the face has its own color
Individual faces are visualized Visualize underlying surface
Not suitable for smooth objects Suitable for any objects
Less computationally expensive More computationally expensive