Umbră

De la Wikipedia, enciclopedia liberă.
Salt la navigare Salt la căutare

Termenul shader (de la engleză la umbră = a umbra) indică un set de algoritmi folosiți mai ales în grafica computerizată 3D care oferă materialul virtual căruia îi sunt combinate caracteristici sau proprietăți care descriu sau influențează modul în care reacționează la lumină și la faceți trecerea de la un punct complet iluminat la unul în umbră [1] . În acest fel, shader-ul este capabil să simuleze apariția materialului virtual pe videoclip în așa fel încât să fie cât mai aproape de cel real.

Din punct de vedere tehnic, în loc să trimită poligoane sau imagini pe o placă video , o aplicație poate trimite programe specifice specifice, care descriu modul în care poligoanele și imaginile adiacente trebuie procesate până când sunt afișate pe ecran. Etapele conductei grafice și, în unele cazuri, ale întregii conducte, sunt înlocuite de aceste programe. [2]

Aspecte teoretice

Shaders trebuie să reproducă comportamentul fizic al materialului care alcătuiește obiectul la care sunt aplicați. Apoi, puteți crea un shader pentru metale, unul pentru plastic, unul pentru sticlă și așa mai departe și le puteți refolosi de mai multe ori într-o scenă. Odată ce un obiect complex a fost modelat , cum ar fi o fereastră, de exemplu, o umbră pentru lemn, una pentru mâner și una pentru sticlă vor fi asociate cu modelul cadrului. Caracteristica de reutilizare a acestui instrument este de neprețuit în lucrul cu grafica computerizată 3D , atât din punct de vedere al timpului, cât și al rezultatului final.

Cu toate acestea, nuanța nu trebuie confundată cu materialul (într-un program de modelare, cum ar fi Blender), deoarece primul ajustează proprietățile optice ale umbririi, al doilea este containerul său - care vă permite să setați alți parametri în afară de umbrire. rețeaua, cum ar fi culoarea de fundal sau transparența.

Pentru a determina aspectul suprafeței, un nuanțator folosește tehnici bine stabilite, cum ar fi aplicarea texturilor și gestionarea umbrelor . Shaders pot fi, de asemenea, utilizați pentru a aplica efecte postprocesare . Fiind programe din toate punctele de vedere, este, de asemenea, posibil să le utilizați pentru reproducerea unor evenimente fizice foarte complexe, cum ar fi coliziuni și simulări de dinamică a fluidelor . În domeniul opticii, acestea sunt de obicei utilizate pentru a simula: difuzia , reflexia , refracția și dispersia luminii .

Unitățile moderne de procesare grafică au mai multe conducte utilizate pentru a transforma o scenă 3D într-o imagine raster care poate fi reprezentată pe ecran. Aceste conducte efectuează o serie de operații bazate pe umbrere programabile.

Bibliotecile grafice DirectX și OpenGL utilizează trei tipuri de umbrere, care profită de capacitățile de umbrire ale unităților de procesare grafică găsite în plăcile video . Cu cea de-a zecea versiune a bibliotecilor DirectX, integrată în Microsoft Windows Vista , cele trei tipuri au fost reunite în modelul Unified shader sau Shader Model 4.0.

Vertex Shader

Poziția (în roșu) a umbrelor vertexului în conducta grafică

Umbrele de vertex sunt folosite pentru a manipula vârfurile , luând configurația inițială a vârfului (funcționând pe un singur vârf la un moment dat) și modificându-l schimbând poziția, valorile normale sau valorile coordonate ale texturii (totuși un umbră de vârf nu poate crea noduri multiple din câte sunt deja). De asemenea, pregătește mediul de umbrire pentru orice procesare de vârf suplimentară pentru umbrire de teselare și geometrie și pentru rasterizare și procesare de umbrire de fragmente. Un dezavantaj este normalul vertexului, deoarece odată ce geometria se schimbă, noul model normal trebuie să fie calculat. Modul în care se poate face acest lucru depinde de modul în care a fost definită geometria. [3] Orice lucru care necesită mișcarea vertexului, cum ar fi fluturarea steagurilor, fluturarea hainelor, părul în vânt, particulele de apă din fântâni, stropirea apei etc. poate folosi acest mecanism de programare. [4]

Intrare și ieșire a umbrelor de vertex

Tessellation Shader

Poziția (în roșu) a umbrelor de teselare în conducta grafică

Premisă: o teselare (în engleză teselare ), în grafică pe computer, este un proces care împarte o suprafață a unei rețele, făcând-o mai netedă și alcătuită din triunghiuri. [5]

Umbrele de teselare pot urmări opțional umbrele de vârf în conductă. Funcția lor principală este de a extinde o primitivă geometrică originală într-un set de primitive, care exprimă geometria mai detaliat. Introduse cu OpenGL 4.0, ele interpolează geometria pentru a crea altele, care pot [3] :

  • Activați subdiviziunea adaptivă pe baza unei varietăți de criterii, cum ar fi dimensiunea sau curbura
  • Permițând rafinarea modelelor brute prin GPU, oferind un fel de compresie geometrică
  • Vă permite să aplicați hărți de deplasare detaliate fără a furniza în mod echitabil geometrie detaliată
  • Permițând adaptarea calității vizuale la nivelul de detaliu solicitat
  • Vă permite să creați siluete mai fine
  • Vă permite să vă jupuiți mai ușor

Tessellation Shader sau Geometry Shader? [3]

Atât umbrele de geometrie, cât și umbrele de teselare sunt capabile să creeze o nouă geometrie din geometria existentă și ambele sunt utilizate pentru a oferi un nivel de susținere a detaliilor, astfel încât poate exista confuzie cu privire la momentul utilizării unui tip sau altului. În timp ce abilitățile fiecăruia sunt oarecum similare, există diferențe distincte.

Un shader de teselare creează o mulțime de geometrie, dar toată noua geometrie este de același tip cu cea cu care ați început - puteți obține mai multe segmente pentru o linie, mai multe triunghiuri pentru un patch triunghiular sau mai multe izoline sau patrulatere pentru un patch pătrat , dar obțineți întotdeauna aceeași geometrie. Shader-ul de teselare trebuie utilizat atunci când este nevoie să se genereze numeroși vârfuri noi și una dintre topologiile de teselare să răspundă nevoii sau când o intrare de patch necesară implică multe (mai mult de șase) vârfuri. Pe de altă parte, un shader de geometrie oferă mai multe și diferite oportunități. Un shader de geometrie este utilizat atunci când este necesar să se convertească o topologie într-o geometrie diferită sau dacă este nevoie de o anumită procesare geometrică după shader-ul de teselare.

În cele din urmă, faptul că umbrele de geometrie urmează umbrele de teselare în conductă creează o limitare în utilizarea acestora din urmă. Un shader de teselare poate genera numai segmente de linie sau triunghiuri; nu poate genera nicio geometrie cu adiacență. Dacă este necesar să se creeze o nouă geometrie într-un shader de geometrie și această geometrie necesită adiacență, shader-ul de geometrie nu poate urma shader-ul de teselare din conductă și, prin urmare, acesta din urmă nu poate fi utilizat.

Geometry Shader

Poziția (în roșu) a umbrelor geometrice în conducta grafică

Shaderul de geometrie a reprezentat o nouă oportunitate în shadere când a fost introdus la sfârșitul anului 2006 odată cu lansarea Shader Model 4 pentru a profita de capacitățile din ce în ce mai mari ale plăcilor grafice high-end. Lărgește abilitățile grafice ale programatorului prin furnizarea de instrumente pentru extinderea geometriei de bază a modelului, prin includerea mai multor tipuri sau diferite de primitive grafice, pe lângă cele definite inițial. [3]

Dacă utilizați un shader de geometrie, aplicația sau vertex shader poate genera toate tipurile familiare de topologii:

  • Puncte
  • Linii
  • Benzi de linie
  • Bucle de linie
  • Linii cu adiacență
  • Linii de benzi cu adiacență
  • Triunghiuri
  • Benzi triunghiulare
  • Fanii triunghiului
  • Triunghiuri cu adiacență
  • Benzi triunghiulare cu adiacență
  • Cadrilaterale
  • Benzi Quad

Toate aceste topologii pot fi utilizate de aplicație, dar umbrele geometrice au un număr limitat de topologii pe care le pot accepta. Acestea sunt puncte, linii, linii cu adiacență, triunghiuri sau triunghiuri cu adiacență. [3]

În cazul umbrelor de vârf, gestionarea unui singur vârf la un moment dat face dificilă calcularea normelor pe baza produselor vectoriale ale marginilor. Atunci când se lucrează cu shader geometrie, încă mai doresc să utilizeze normalele calculate din geometria originală, deoarece acestea conțin informații mai bune decât normalele calculate din produsele vectoriale ale marginilor. Cu toate acestea, umbrele geometrice oferă acces la toate informațiile tuturor vârfurilor unui triunghi sau triunghi cu adiacență (în intrare), iar acest lucru ne poate permite să calculăm normele din produsul vector. De fapt, poate fi suficient să adăugați un shader de geometrie unei aplicații care utilizează un shader de vârf sau teselare, dar nu acceptă analize normale, pur și simplu pentru a putea calcula normele din produsul vector, pentru iluminare. [3]

Fragment Shader

Poziția (în roșu) a umbrelor de fragmente în conducta grafică

Ultima fază în mediul shader este prelucrarea fragmentelor, efectuată de shaderul fragmentului sau pixel shader . Aceasta ia informațiile dezvoltate prin procesarea vârfurilor (umbrele vertexului, umbrele de teselare sau umbrele geometrice) și extinde operațiunile tradiționale de fragmentare, permițându-vă să lucrați individual pe fiecare fragment pentru a genera culoarea pixelului. Aceasta este o operațiune foarte paralelă care poate aplica texturi tradiționale sau procedurale; colorare specială, cum ar fi funcțiile de transfer pseudocolor; și tipuri avansate de umbrire, cum ar fi Phong sau umbrirea anizotropă. Umbrele de fragmente au cel mai mare impact asupra efectului vizual al imaginii. [3]

Funcția de bază a unui fragment shader este de a lua variabilele uniforme și de ieșirea de la rasterizator și de a calcula culoarea pixelilor pentru fiecare fragment. Desigur, multe alte proprietăți încorporate ale vârfurilor, precum și intensitatea culorii și a luminii, pot fi interpolate în procesarea fragmentelor. Cele mai importante dintre acestea sunt coordonatele texturilor și adâncimea pixelilor. Dacă texturați, deoarece coordonatele texturii sunt interpolate, puteți utiliza coordonatele pentru a testa o textură (sau texturi multiple), pentru a ajuta la determinarea culorii fiecărui pixel. [3]

Utilizarea umbrelor de pixeli vă permite să aplicați efecte, cum ar fi cartografiere , umbre, explozii, efecte de difracție , refracție și simularea efectului fresnel (implementat în jocul video Half-Life 2 ) permițând o simulare mai bună a efectelor de iluminare și un aspect mai realist al suprafețelor cu proprietăți optice particulare (cum ar fi efectele de refracție în lichide).

Intrare și ieșire a fragmentelor de umbrire

Iluminat

Cea mai simplă modalitate de a face iluminarea este să o faceți prin calculul pe vârf, ceea ce ar pune responsabilitatea pentru cea mai mare parte a muncii pe umerii umbrelor vertexului. Dacă iluminarea este redată în acest fel, culoarea se calculează pe baza proprietăților luminii și a materialului - care determină culoarea fiecărui vârf - pe baza modelului standard de iluminare ambient-difuz-specular ( ADS ). Acest calcul pe vârf poate fi utilizat atât pentru umbrirea plană, cât și pentru umbrirea netedă. Cu toate acestea, dacă se utilizează un model de umbrire mai complex, cum ar fi Phong sau umbrirea anizotropă, calculul culorii va fi probabil amânat la fragmentul de umbrire, unde se poate efectua calculul culorii pe pixel.

Să luăm în considerare, pentru simplitate, umbrele prezente în Blender.

Umbră difuză

Imaginile arată nuanța difuză cu fiecare nuanță speculară potrivită (discutată mai jos) implementată în programul Blender.

Lambert

Acesta este nuanța implicită. Nu este dotat cu proprietăți particulare și permite obținerea unei degradări moi de la punctele de lumină la punctele de umbră. [1]

Oren-Nayar

Această nuanță vă permite să reproduceți mai bine neregulile microscopice prezente pe suprafața a aproape orice material. [1] Legat de modelul de reflecție dezvoltat la începutul anilor '90 de Michael Oren și Shree K. Nayar, este o generalizare a legii lui Lambert, utilizată acum pe scară largă în grafica computerizată. [6]

Toon

Toon aparține categoriei umbrelor inexacte fizic. Scopul său este de a oferi un rezultat similar cu cel al ilustrațiilor de fundal colorate bidimensionale din benzi desenate. Prin urmare, zonele luminoase vor fi foarte omogene și distincte de zonele de umbră la fel de omogene. [1]

Minnaert

Acest shader constă în esență într-o reimplementare a shaderului Lambert . [1] Marcel Minnaert (1893-1970), a fost un astronom belgian care era interesat de efectele atmosferei asupra luminii și a imaginilor, care în 1954 a publicat o carte numită „Natura luminii și a culorii în aer liber”. [6]

Fresnel

La calcularea difuziei, un umbrer Fresnel nu numai că ia în considerare unghiul creat între planul punctului de vedere și suprafața iluminată a obiectului, dar adaugă și calculelor unghiul de incidență al luminii pe suprafața obiectului. obiect. În special, cu cât raza va atinge o paralelă mai mare decât cea normală a unei suprafețe, cu atât difuzia va fi mai mică; dimpotrivă, cu cât razele sunt mai perpendiculare, cu atât difuzia este mai mare. [1]

Specular Shader

Este necesar să nu ne lăsăm înșelați de termenul Specular , care nu se referă deloc la fenomenul de reflexie caracteristic oglinzilor, ci se referă la fenomenul binecunoscut al formării unui punct de luminozitate maximă (sau lumină mare, sau lumină punct, acesta este termenul corectat în italiană, cu referire la evidențierea speculară ) pe orice suprafață capabilă să reflecte lumina. Adesea aceste două fenomene nu sunt ușor de distins, cu toate acestea este posibil să se utilizeze următoarea metodă pentru a obține idei mai clare: cu cât suprafața materialului este mai netedă, mai regulată și mai lipsită de imperfecțiuni, cu atât va fi mai vizibilă reflexia evidențierilor. De exemplu, o bilă de biliard este atât de netedă încât creează și un efect de reflexie speculară; pe de altă parte, cu cât suprafața este mai aspră și mai neregulată, cu atât va reflecta reflexia mai difuză. [1] Este posibil să se creeze diverse combinații între difuzoare (în interiorul parantezelor) și umbrere speculare. Imaginea de mai jos prezintă unele dintre ele și, în același timp, ilustrează efectul fiecărui umbră speculară.

Umbrele speculare în Blender

CookToor

Numele complet al acestui shader este Cook-Torrance și poate fi considerat o versiune evoluată a shakerului Phong . Este potrivit în special pentru redarea suprafețelor organice sau anorganice destul de netede, cum ar fi plasticul și pielea. [1] Robert L. Cook (LucasFilm) și Kenneth E. Torrance (Universitatea Cornell) din lucrarea din 1982 „ Un model de reflecție pentru grafica computerizată[7] , au descris „un nou model de reflecție pentru redarea imaginilor sintetizate pe computer” și l-au aplicat pentru simularea metalelor și a materialelor plastice. [8]

Phong

Phong este una dintre primele metode de umbrire dezvoltate în istoria graficii pe computer. Este un nuanț extrem de simplu, care se potrivește bine pentru redarea materialelor metalice. [1]

Blinn

Blinn adaugă un control IOR (Index Of Refraction), permițând un realism mai mare. În cazul lui Blinn, punctul de reflecție al luminilor luminoase poate avea un diametru mult mai mic decât în ​​Phong și CookToor. [1] Este adesea folosit cu popularul shader Oren-Nayar. [8] Modelul a fost descris de Jim Blinn în 1977. [9]

Toon

Această nuanță este de obicei coordonată cu Toon difuz. Este capabil să producă (într-un mod similar difuzului) un punct de lumină extrem de definit. [1]

WardIso

Acesta din urmă este util în crearea de materiale plastice sau metalice. [1] Gregory J. Ward a dezvoltat un model relativ simplu care respectă cele mai de bază legi ale fizicii. În publicația din 1992, „ Măsurarea și modelarea reacției anizotrope, Ward a introdus o funcție de distribuție a reflecției bidirecționale (BRDF), care a fost folosită pe scară largă în grafica computerizată, deoarece puțini parametri pe care îi consideră sunt ușor de controlat. Modelul său poate reprezenta atât suprafețe izotrope (independente de direcția luminii), cât și suprafețe anizotrope (dependente de direcția luminii). În Blender, Shader-ul specular Ward este încă numit „Ward izotrop”, dar este de fapt anizotrop.

Notă

  1. ^ a b c d e f g h i j k l Francesco Siddi, Grafică 3D cu Blender .
  2. ^ JF Hughes, Andries Van Dam, Morgan McGuire, David F. Sklar, James D. Foley, Steven K. Feiner, Kurt Akeley, Computer Graphics Principles and Practice , ed. A III-a ..
  3. ^ a b c d e f g h Mike Bailey, Steve Cunningham, Graphics Shaders: Theory and Practice , ediția a II-a ..
  4. ^ James Leiterman, Learn Vertex și Pixel Shader Programming cu DirectX 9 .
  5. ^ DirectX 11 teselare , pe nvidia.it .
  6. ^ a b Pagina Manualului de referință Blender despre difuzoare [ link rupt ] , pe docs.blender.org .
  7. ^ Robert L. Cook, Kenneth E. Torrance, Un model de reflecție pentru grafica computerizată .
  8. ^ a b Pagina Manualului de referință Blender privind specularele umbrere , la docs.blender.org . Adus la 15 mai 2017 (Arhivat din original la 2 octombrie 2018) .
  9. ^ Jim Blinn, Modele de reflecție a luminii pentru imagini sintetizate pe computer .

Elemente conexe

Controlul autorității GND ( DE ) 7673243-5
Informatică Portal IT : accesați intrările Wikipedia care se ocupă cu IT