Umbrirea
Î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.
Tipuri de iluminareEdit
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
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
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
- Determinați normala la fiecare poligon vertex.
- Aplicați un model de iluminare la fiecare vertex pentru a calcula intensitatea luminii pornind de la normala la vertex.
- 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.
- Calculează o normală N pentru fiecare vârf al poligonului.
- Utilizând interpolarea biliniară, se calculează o normală, Ni pentru fiecare pixel. (Normala trebuie să fie renormalizată de fiecare dată.)
- 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 |