Cartografierea texturilor

De la Wikipedia, enciclopedia liberă.
Salt la navigare Salt la căutare
(1) Model 3D fără textură
(2) Model 3D cu textură

Cartarea texturilor în grafica computerizată este o tehnică care vă permite să proiectați una sau mai multe texturi pe suprafața unui model 3D , utilizând coordonatele UV . Face modelul mai detaliat și realist, în plus, suprapunerea mai multor texturi este utilizată, de exemplu, pentru a da efecte speciale modelelor tridimensionale, cum ar fi lumina și ceața. Tehnica, în special în animațiile 3D, combină viteza de calcul a graficelor poligonale cu bogăția de detalii a imaginilor în grafica raster .

Răspândirea acestei tehnici de animație în aplicații interne, cum ar fi jocurile video, a avut loc în anii 1990 ; în primii ani ai deceniului, era încă fezabil, cu viteze adecvate, doar pe cele mai puternice PC-uri ale vremii [1] .

Istorie

În primele zile ale graficii pe computer, micile detalii ale modelelor - indiferent dacă erau geometrice sau referitoare la culoare - erau reprezentate pe modelul obiectului prin „pictarea” lor pe modelul în sine, ca într-un trompe-l'œil pictura. [2] A fost posibil să pictezi un mic spot de lumină pe model pentru a arăta ca un spot de lumină, indiferent de iluminatul din scenă. Aceste detalii au fost numite texturi și au fost stocate într-o matrice de imagini. Modelatorul de scenă a trebuit, de asemenea, să mapeze fiecare vârf al modelului la poziția din tabloul de imagini, astfel „mapând” modelul la imagine (deși obiectivul general a fost exact opusul - această mapare a fost utilizată pentru a „aplica” imaginea pe modelul, ca un autocolant).

Curând a devenit clar că, mai degrabă decât cartografierea albedo (adică fracția de energie reflectată), a fost posibilă cartografierea altor parametri ai modelului de iluminare, cum ar fi vectorul normal. [2] Varianta vectorului normal a făcut ca modelul să pară ondulat sau accidentat (fără a schimba geometria modelului [3] ); cu alte cuvinte, apariția unei texturi. Însă termenul „textură” a fost deja folosit pentru a da sens altceva, așa că aceasta a fost numită cartografiere cu bump (Blinn, 1978). Mai târziu a devenit clar că mici variații ale poziției suprafeței ar putea fi stocate și pe o hartă și, în timp ce aceasta ar fi numită cartografiere cu bump - deoarece adăuga de fapt nereguli la o suprafață - acea expresie era încă în uz, așa că a fost numită cartografiere de deplasare. (Cook, 1984). [2]

În cele din urmă, când GPU-urile programabile au devenit obișnuite, memoria texturii lor a fost singura structură de date disponibilă care putea fi adresată aleatoriu programatorului și a fost adesea folosită pentru a stoca tablouri n-dimensionale, pointeri și alte lucruri (adică a fost tratată ca o amintire. obișnuit). Prin urmare, sensul particular al „texturii” este mai degrabă dependent de timp; atunci când citiți un document despre acest subiect, trebuie să știți când a fost scris pentru a ști ce înseamnă termenul.

Operațiune

Texturile sunt imagini folosite pentru a adăuga detalii suplimentare la umbrirea suprafețelor care altfel ar părea prea omogene și artificiale. Ideea este simplă: de fiecare dată când nuanța este calculată, valorile utilizate de calcul - culoarea difuză, de exemplu - sunt citite dintr-o textură, mai degrabă decât folosind valorile atributelor care sunt conectate la geometria redată . Acest lucru este cunoscut sub numele de text texture [4] : codul de umbrire specifică o coordonată a texturii , un punct din domeniul texturii, iar sistemul de mapare a texturii găsește valoarea în acel punct din textura imaginii și o returnează. Valoarea texturii este apoi utilizată în calculul de umbrire.

Caz general

Luați în considerare o scenă cu podea din lemn și determinați că culoarea difuză a podelei este controlată de o imagine care prezintă plăci de podea cu bob de lemn. Indiferent dacă utilizați urmărirea razelor sau rasterizarea , codul de umbrire care calculează culoarea pentru un punct de intersecție rază-suprafață sau pentru un fragment generat de rasterizator, trebuie să cunoască culoarea texturii din punctul de umbrire, astfel încât să îl utilizați ca o culoare difuză în modelul de umbrire lambertian.

Pentru a obține această culori, Shader realizează o textură de căutare: [4] include poziția, în sistemul de coordonate al texturii imaginii, care corespunde punctului de umbrire și citește culoarea la acel punct din imagine, care are ca rezultat probă de textură [4] . Această culoare este după utilizarea în umbrire și, pe măsură ce căutarea texturii are loc în diferite poziții ale texturii pentru fiecare pixel care vede podeaua, un model de culori diferite devine vizibil în imagine. Codul ar putea arăta astfel:

 Color texture_lookup (Textura t, float u, float v) {
    int i = rotund (u * t. lățime () - 0,5)
    int j = rotund (v * t.height () - 0,5)
    returnează t.get_pixel (i, j)
}
Culoare nuanță_suprafață (suprafață, punct p, textură t) {
    Vector normal = s.get_normal (p)
    (u, v) = s.get_texcoord (p)
    Culoare diffuse_color = texture_lookup (u, v)
    // calculați umbrirea utilizând difuz_culoare și normal
    // returnează rezultatul umbririi
}

În acest cod, nuanța întreabă suprafața unde să se uite în textură și, cumva, orice suprafață pe care doriți să o umbriți folosind o textură trebuie să poată răspunde acestei cereri. Acest lucru duce la primul ingredient cheie al mapării texturilor: avem nevoie de o funcție care să mapeze de la suprafață la textură, pe care o putem calcula cu ușurință pentru fiecare pixel. Aceasta este funcția de coordonate a texturii și vom spune că atribuie coordonate de textură pentru fiecare punct de pe suprafață. Matematic este o cartografiere de la suprafață la domeniul texturii, : [4]

Spațiu textură pentru (a) hartă textură 1D, (b) hartă textură 2D și (c) hartă textură 3D

Întregul numit adesea „ spațiu de textură ”, este de obicei doar un dreptunghi care conține imaginea; utilizarea pătratului unitar este comună (vom folosi literele Și pentru cele două coordonate de textură). Functia este o cartografiere de la suprafață la textură, când scopul nostru este să introducem textura la suprafață, dar aceasta este funcția de care avem nevoie.

Pentru cazul podelei din lemn, dacă se constată că podeaua este constantă și aliniat cu axele Și , putem folosi pur și simplu cartografierea [4]

pentru unii factori de scară aleși corespunzător Și , pentru a atribui coordonatele texturii până la punctul , și apoi utilizați valoarea unei texturi de pixeli sau texel [4] , cea mai apropiată de , ca valoare a texturii în .

Pixelii care vor fi afișați pe ecran, calculați din texturi, vor fi apoi guvernate de filtrul de textură. Cea mai rapidă metodă este de a utiliza interpolare liniară ( filtru liniar ), dar interpolare biliniară ( filtru biliniar ) sau interpolare triliniară ( filtru triliniar ) între hărțile MIP sunt cele mai frecvent utilizate pentru a reduce aliasarea și, prin urmare, pentru a crește calitatea generală a imaginii. Aplicarea texturii pe modelul tridimensional este responsabilitatea plăcii video .

Notă

  1. ^ Fabio Rossi, Texture mapping , în Dicționar de jocuri video , seria Domino nr. 19, Milano, Vallardi, noiembrie 1993, p. 389, ISBN 88-11-90422-6 .
  2. ^ a b c John F. Hughes, Andries Van Dam, Morgan Mcguire, David F. Sklar, James D. Foley, Steven K. Feiner, Kurt Akeley, Computer Graphics: Principles and Practice , ed. a 3-a ..
  3. ^ David S. Ebert, F. Kenton Musgrave, Darwyn Peachey, Ken Perlin, Steven Worley, Texturing & Modeling - A Procedural Approach , ed. A 3-a.
  4. ^ a b c d e f Steve Marschner, Peter Shirley, Fundamentals of Computer Graphics , ediția a IV-a ..

Bibliografie

Elemente conexe

Alte proiecte

linkuri externe

  • Capitolul 2: Maparea texturilor de la happy-werner.hol.es
  • [ link rupt ] folosind XNA / DirectX, de pe www.riemers.net
Informatică Portal IT : accesați intrările Wikipedia care se ocupă cu IT