U ovom trećem poglavlju, u kojem ćemo dublje pogledati stvaranje 3D igara, usredotočit ćemo se na ono što se može dogoditi s 3D svijetom nakon obrade ugla i rasterizacije scena. Konfiguracija je jedna od najvažnijih faza u prikazivanju, iako se sve što se događa boje dvodimenzionalne mreže blokova u boji izračunavaju i mijenjaju.

Mnogi vizualni efekti koji se danas vide u igrama ovise o pametnoj upotrebi tekstura - bez njih bi igre bile dosadne i beživotne. Krenimo, dakle, i pogledajte kako to funkcionira!

Kao i uvijek, ako niste spremni duboko zaroniti u tkivo, nemojte paničariti - možete započeti Stvaranje 3D igre 101. No, nakon što prođete osnove, pročitajte naš sljedeći pogled na svijet 3D grafike.

Krenimo jednostavno

Odaberite najprodavanije 3D igre u posljednjih 12 mjeseci i svima će biti zajedničko jedno: mape tekstura (ili samo teksture). Ovo je vrlo čest pojam, većina ljudi stvorit će istu sliku kad razmišljaju o teksturama: jednostavan, ravni kvadrat ili pravokutnik koji sadrži sliku površine (trava, kamen, metal, odjeća, lice itd.).

No kada se koriste u više slojeva i slože pomoću složene aritmetike, upotreba ovih osnovnih slika u 3D sceni može stvoriti zapanjujuće realne slike. Da bismo vidjeli kako je to moguće, preskočimo ih uopće i uvidimo kako bi objekti u 3D svijetu mogli izgledati bez njih.

Kao što smo vidjeli u prethodnim člancima, 3D svijet čine vrhovi - jednostavni oblici koji se pomiču, a zatim obojavaju. Zatim se koriste za izradu primitiva, koji se pak komprimiraju u mrežu od 2D piksela. Budući da nećemo koristiti teksture, trebamo obojiti ove piksele.



Nazvana je metoda koja se može koristiti ravno zasjenjenjeuključuje dobivanje boje prvog vrha primitiva, a zatim upotrebu te boje za sve piksele u rasteru koji potpadaju pod oblik. Izgleda ovako:

Očito ovo nije realan čajnik, barem je površina površine pogrešna. Boje skaču s jedne razine na drugu, nema glatkog prijelaza. Rješenje ovog problema moglo bi biti korištenje nečega tzv Gouraudovo sjenčanje.



Ovo je operacija koja uzima boje vrhova i izračunava kako se boja mijenja na površini trokuta. Upotrijebljena matematika linearna interpolacijaIako ovo zvuči lijepo, u stvarnosti, ako je jedna primitivna strana 0,2 crvene boje, a druga strana 0,8 crvene, to znači da sredina oblika ima boju između 0,2 i 0,8 (tj. 0,5).

To je relativno jednostavno učiniti, a glavna prednost je brzina. Mnoge rane 3D igre koristile su ovu tehniku ​​jer je hardver koji je radio izračune bio ograničen onim što je mogao.

Ali čak i to ima svojih problema, jer ako svjetlo pokazuje točno u sredinu trokuta, njegovi vrhovi (vrhovi) možda ga neće moći pravilno snimiti. To znači da se svjetlosna svjetla mogu u potpunosti previdjeti.

Ravno i Gouraudovo sjenčanje su u arsenalu rendera, dok su gornji primjeri jasni kandidati za korištenje tekstura za njihovo poboljšanje. A da bismo bolje razumjeli što se događa kada se tekstura nanese na površinu, vratit ćemo se u prošlost ... natrag u 1996.

Kratka povijest igara i grafičkih procesora

Quake je značajna igra objavljena prije 23 godine id Softver. Iako to nije bila prva igra koja je koristila 3D poligone i teksture za stvaranje okruženja, bila je jedna od prvih koja ih je sve iskoristila tako učinkovito.

Još je nešto što je učinio pokazao što se sve može učiniti s OpenGL-om (grafički API još uvijek je bio u prvoj reviziji), a također je uvelike pomogao u prodaji prvog proizvoda s grafičkom karticom. Komentar ve 3Dfx Vudu.

U usporedbi s današnjim standardima, Voodoo je bio izuzetno jednostavan: bez podrške za 2D grafiku, bez verteksnog prikazivanja i samo s osnovama pikselskog prikazivanja. To je još uvijek bila ljepotica:

Imao je čitav čip (TMU) za dobivanje piksela iz teksture, a zatim još jedan čip (FBI) za miješanje s pikselom iz rastera. Moglo bi se dogoditi nekoliko dodataka poput stvaranja efekata magle ili prozirnosti, ali gotovo je to bilo gotovo.

Ako uzmemo pregled arhitekture iza dizajna i rada grafičke kartice, možemo vidjeti kako ti procesi rade.

FBI čip uzima dvije vrijednosti boja i kombinira ih; jedan od njih može biti vrijednost iz teksture. Proces uspoređivanja matematički je prilično jednostavan, ali se malo razlikuje između onoga što se točno miješa i API-ja koji se koristi za izvršavanje uputa.

što god pogledali Direct3D nudi Što se tiče funkcija miješanja i operacija miješanja, možemo vidjeti da se svaki piksel prvo pomnoži s brojem između 0,0 i 1,0. To određuje koliko će boja piksela utjecati na konačni izgled. Zatim se dvije prilagođene boje piksela dodaju, oduzmu ili dupliciraju; u nekim funkcijama operacija je logički izraz gdje se uvijek odabere nešto poput najsvjetlijeg piksela.

Gornja slika primjer je kako ovo djeluje u praksi; faktor korišten za lijevi piksel alfa vrijednost. Ovaj broj transparentan piksela.

Ostatak koraka uključuje primjenu vrijednosti magle (preuzetu iz tablice brojeva koju je kreirao programer, a zatim rade istu matematiku); izvršiti neke provjere i prilagodbe vidljivosti i transparentnosti; prije nego što napokon upiše boju piksela u memoriju na grafičkoj kartici.

Zašto lekcija povijesti? Unatoč relativnoj jednostavnosti dizajna (posebno u usporedbi sa suvremenim uređajima), postupak objašnjava osnovne osnove teksturiranja: dobijte neke vrijednosti boja i pomiješajte ih tako da modeli i okruženja izgledaju kako bi trebali izgledati u datoj situaciji.

Današnje igre još uvijek sve to čine, jedina razlika je u količini korištenih tekstura i složenosti izračuna miješanja. Zajedno simuliraju vizualne efekte koji se vide u filmovima ili kako svjetlost djeluje s različitim materijalima i površinama.

Osnove teksturiranja

Za nas je tekstura ravna 2D slika primijenjena na poligone koji čine 3D strukture u prikazanom okviru. Za računalo to nije ništa drugo nego mali blok memorije u obliku 2D niza. Svaki unos u polju predstavlja vrijednost boje za jedan od piksela na teksturnoj slici (poznatiji) punilo za tekst - teksturni pikseli).

Svaki vrh u mnogouglu ima 2 koordinate (obično sen, v) govori vam koji je piksel u teksturi povezan s njim. Sami vrhovi imaju 3 skupa koordinata (X ve Z) i naziva se postupak povezivanja tekstova s ​​vrhovima. mapiranje teksture.

Da bismo to vidjeli na djelu, vratimo se alatu koji smo nekoliko puta koristili u ovoj seriji članaka: WebGL za prikaz u stvarnom vremenu alat. Zasad, z koordinirati iz uglova i držati sve u ravnoj ravnini.

Lijevo nadesno imamo teksturu sen, v koordinate preslikane izravno u vrhove vrhova x, y koordinate. Zatim gornji uglovi y koordinate su se povećale, ali tekstura se proteže prema gore jer se tekstura još uvijek izravno na njih preslikava. Na krajnjoj desnoj slici tekstura koja se ovaj put promijenila: u vrijednosti su povećane, ali to dovodi do drobljenja i ponovnog recidiva tkiva.

Budući da je tkivo sada zapravo duže, iako veće u Vrijednost mora stati unutar primitiva - u biti se tekstura djelomično ponavlja. Ovo je način da se učini nešto viđeno u mnogim 3D igrama: tponoviti. Uobičajeni primjeri za to mogu se naći u scenama sa stjenovitim ili travnatim krajolicima ili zidovima od opeke.

Sada postavimo scenu primitivnijom i vratimo dubinu u igru. Ono što imamo u nastavku je klasični pejzažni pogled, ali kako se tekst prsa kopira i ponavlja među primitivcima.

Sada je ova tekstura prsa 66 kilograma u izvornom gif formatu i ima razlučivost 256 x 256 piksela. Izvorna razlučivost dijela okvira koji zauzimaju teksture sanduka iznosi 1900 x 680, tako da samo u smislu "područja" piksela, ovo područje treba moći prikazati samo 20 tekstura sanduka.

Očito u pozadini dobivamo više od 20 staza, toliko tekstura prsa vrlo Manji od 256 x 256 piksela. Doista jesu i prošli su proces smanjenje teksture (da, to je riječ!). Pokušajmo sada, ali ovaj put se približilo jednoj od škrinja.

Imajte na umu da je tekstura velika samo 256 x 256 piksela, ali ovdje možemo vidjeti da je tekstura veća od polovice širine slike široke 1900 piksela. Prošao je kroz nešto što se naziva tekstura povećanje tkiva.

Ova se dva procesa tekstura neprestano događaju u 3D igrama, jer dok se kamera kreće oko scene ili modeli povećavaju i umanjuju, sve teksture primijenjene na primitivima trebaju se skalirati zajedno s poligonima. Matematički, to nije velika stvar, zapravo, čak i najjednostavniji integrirani grafički čipovi bljeskaju u takvom poslu. Međutim, smanjenje i povećanje tkiva predstavljaju nove probleme koji se moraju nekako riješiti.

Unesite mini teksture

Prvo izdanje koje treba riješiti odnosi se na udaljene teksture. Ako ponovno pogledamo prvu krajobraznu sliku sanduka, one prema horizontu veličine su samo nekoliko piksela. Pokušaj istiskivanja slike veličine 256 x 256 piksela u tako mali prostor besmislen je iz dva razloga.

Kao prvo, manja tekstura zauzima manje memorijskog prostora na grafičkoj kartici, što je korisno za pokušaj uklapanja male količine predmemorije. To znači da je manja vjerojatnost da će se ukloniti iz predmemorije, a ponovljena uporaba ove teksture iskoristit će sve prednosti performansi podataka koji se nalaze u obližnjoj memoriji. Drugi razlog zbog kojeg smo na trenutak ovdje, jer je povezan s istim problemom za zumirane teksture.

Uobičajeno rješenje za upotrebu velikih tekstura koje se usitnjavaju u male primitive, Podudaranje. Ovo su smanjene verzije izvorne teksture; Sam mehanizam igre može se izgraditi (pomoću odgovarajuće API naredbe za to) ili ga mogu unaprijed izraditi dizajneri igara. Svaka razina teksture mipmap ima upola linearne dimenzije od prethodne.

Za teksturu prsa to bi bilo otprilike: 256 x 256 → 128 x 128 → 64 x 64 → 32 x 32 → 16 x 16 → 8 x 8 → 4 x 4 → 2 x 2 → 1 x 1.

Sve su mip mape povezane, tako da je tekstura i dalje istog imena datoteke, ali sada veća. Tkivo je pakirano na takav način da sen, v Njegove koordinate ne samo da određuju koji tekst treba primijeniti na piksel u kadru, već i s koje mipmape. Zatim programeri kodiraju prikazivač kako bi odredio mipmap koji će se koristiti na temelju vrijednosti dubine kvadratnog piksela, pa ako je previsok, piksel je daleko pa se može koristiti mala mipmap.

Čitatelji oštrih očiju možda su vidjeli nedostatak mipmapsa, a dolazi na štetu što je tekstura veća. Izvorna tekstura prsa bila je 256 x 256 piksela, ali kao što vidite na gornjoj slici, tekstura mipmap sada iznosi 384 x 256 piksela. Da, ima puno slobodnog prostora, ali ukupni porast barem jedne veličine teksture je 50%, bez obzira na to kako pakirate u manje teksture.

Međutim, ovo se odnosi samo na unaprijed izrađene mipmape; Ako je mehanizam igre programiran da ih pravilno generira, povećanje nikada ne može biti veće od 33% od izvorne veličine teksture. Tako ćete dobiti prednosti izvedbe i vizualna poboljšanja za relativno mali porast memorije na mipmapama teksture.

Dolje je usporedba isključenja / uključivanja mipmapa teksture:

Na lijevoj strani slike koriste se teksture sanduka "kakve jesu", što rezultira zrnastim izgledom i navodno moire uzorci daleko. S desne strane, međutim, upotreba mipmapa rezultira puno uglađenijim prijelazom kroz krajolik, gdje se tekstura sanduka mijenja u postojanu boju na horizontu.

Međutim, tko želi mutne teksture koje kvare pozadinu njihove omiljene igre?

Bilinearne, trilinearne, anizotropne - sve mi je grčko

Poziva se postupak odabira piksela iz teksture koja će se primijeniti na piksel u okviru uzorkovanje teksturei u savršenom svijetu, njegovu veličinu, mjesto, smjer itd. bez obzira na to, bila bi to tekstura koja točno odgovara primitivcu. Drugim riječima, uzorkovanje teksture nije ništa drugo nego ravno mapiranje piksela u piksel od 1 do 1.

Budući da to nije slučaj, uzorkovanje tekstura mora uzeti u obzir niz čimbenika:

  • Je li tekstura povećana ili smanjena?
  • Je li tekstura originalna ili mipmap?
  • Pod kojim je kutom prikazana tekstura?

Analizirajmo ih jedan po jedan. Prvo je dovoljno jasno: ako se tekstura poveća, bit će više teksta koji će prekrivati ​​piksel u primitivu; sa skupljanjem će biti suprotno, svaki texel sada mora obuhvaćati više piksela. Ovo je mali problem.

Drugo, budući da se mipmaps koriste za rješavanje problema uzorkovanja teksture s udaljenim primitivima, teksture ostavljaju pod kutom. I da, i to je problem. Zašto je to? Budući da su sve teksture prikazane "licem otvorene" za prikaz ili su sve matematičke: normala površine teksture je ista kao i normala površine koja se prikazuje iznad teksture.

Prema tome, da imamo premalo ili previše teksture i teksture pod kutom, Filtriranje teksture. Ako ne upotrijebite ovu radnju, dobit ćete ovo:

Ovdje smo teksturu prsa zamijenili tekstom slova R kako bismo jasnije pokazali koliko će nereda dobiti bez filtriranja teksture!

Grafički API-ji poput Direct3D, OpenGL i Vulkan nude iste vrste filtriranja raspona, ali za njih koriste različita imena. Zapravo, sve ide ovako:

  • uzorkovanje najbliže točke
  • Linearno filtriranje teksture
  • Anizotropno filtriranje teksture

Za sve namjere i svrhe, uzorkovanje najbliže točke ako se ne filtrira - to je zato što je to najbliži piksel pikselu koji zahtijeva uzorkovanje tekstura (tj. kopiranje iz memorije), a zatim njihovo miješanje s izvornom bojom piksela.

Tu linearno filtriranje dolazi u pomoć. Potreban sen, v texel koordinate šalju se hardveru radi uzorkovanja, ali umjesto da se texel približi tim koordinatama, uzorkivač četiri texel To su izravno iznad, ispod, lijevo i desno od odabranog pomoću uzorkovanja najbliže točke.

Zatim se ova 4 tekstila pomiješaju pomoću ponderirane formule. Na primjer, u Vulkanu je formula:

T "Boja", f Za ocijeđeni jedan i od 1 do 4 su četiri uzorkovana tekstila. Vrijednosti alfa ve beta koliko daleko od točke definirane sen, v koordinate dolaze iz sredine tkiva.

Srećom, svi koji su uključeni u 3D igre, bilo da se igraju ili izrađuju igre, automatski se događaju na ovom čipu za obradu grafike. Zapravo je TMU čip u 3dfx Voodoo učinio ovo: uzeo je uzorke 4 pojedinačna tona, a zatim ih promiješao. Direct3D to čudno naziva dvonaravno filtriranje, ali od vremena Quake-a i Voodoo-ovog TMU čipa, grafičke kartice mogu bilinearno filtrirati samo u jednom taktu (ako tekstura udobno leži u bliskoj memoriji, naravno).

Linearno filtriranje može se koristiti zajedno s mipmapama, a ako se želite filtrirati doista maštovito, možete uzeti 4 teksta iz teksture, a zatim još 4 sa sljedeće razine mipmapa, a zatim ih spojiti. A naziv Direct3D za to? trilinearni filtriranje. Što tri o ovom procesu? Vaša je pretpostavka dobra kao i naša ...

Posljednja spomenuta metoda filtriranja naziva se anizotrop. Ovo je zapravo prilagodba procesu izvedenom u bilinearnom ili trilinearnom filtriranju. U početku stupanj anizotropije primitivna površina (i iznenađujuće složen) - ova vrijednost mijenja odnos stranica primitiva zbog njegove orijentacije:

Gornja slika prikazuje isti kvadratni primitiv sa stranama jednake duljine; ali kako se odmičemo od svoje perspektive, izgleda kao kvadratni pravokutnik i njegova se širina povećava iznad njegove visine. Dakle, primitiv s desne strane ima veću anizotropiju od one s lijeve strane (a u slučaju kvadrata stupanj je točno nula).

Većina današnjih 3D igara omogućit će vam omogućavanje anizotropnog filtriranja, a zatim prilagodbu njegove razine (1x do 16x), ali što se to zapravo mijenja? Postavka kontrolira maksimalni broj dodatnih uzetih uzoraka teksela po originalnom linearnom uzorku. Na primjer, recimo da je igra postavljena na upotrebu 8x anizotropnog bilinearnog filtriranja. To znači da će vratiti 32 vrijednosti, umjesto da uzme samo 4 tekstualne vrijednosti.

Jasno je da upotreba anizotropnog filtriranja može ostvariti:

Samo se pomaknite malo prema gore i usporedite uzorkovanje najbliže točke za maksimalno 16x anizotropno trilinearno filtriranje. Tako glatko, gotovo ukusno!

No, mora se platiti cijena za sav onaj lijepi okus maslačaste teksture, a to su definitivno performanse: sve maksimalno, anizotropno trilinearno filtriranje vratit će 128 uzoraka teksture za svaki prikazani piksel. Čak i za najbolje najnovije grafičke procesore, to se ne može postići u jednom taktu.

Ako dobijemo nešto poput AMD-a Radeon RX 5700 XTJedinice teksture unutar procesora mogu u jednom ciklusu takta isključiti 32 tekstualne adrese, zatim učitati 32 teksela iz memorije (svaka 32 bita u veličini) u drugom taktu, a zatim ih složiti 4 za označavanje. Zbog toga se miješa za 128 primjeraka texela koji zahtijevaju najmanje 16 ciklusa takta.

Sada osnovna brzina takta 5700 XT iznosi 1605 MHz, pa šesnaest ciklusa traje samo 10 nanosaniye. Učinite to za svaki piksel u 4K okviru. jedan Jedinica tkiva trajala bi samo 70 milisekundi. Ok, možda izvedba nije toliko važna!

Čak i davne 1996. godine, poput 3Dfx Voodoo-a bilo je prilično pametno što se tiče rukovanja teksturama. Mogao je doseći maksimum od 1 bilinearno filtriranog texela po taktu, što je značilo da se 50 milijuna texova može rezati svake sekunde dok se TMU čip ljulja na 50 MHz. Za igru ​​koja radi na brzini 800 x 600 i 30 sličica u sekundi potrebno je samo 14 milijuna bilinearno filtriranog teksta u sekundi.

Međutim, sve to podrazumijeva da su teksture u obližnjoj memoriji i da se na svaki piksel preslikava samo jedan tex. Prije dvadeset godina ideja da se mora primijeniti više tekstura na politiku bila je gotovo potpuno strana, ali sada je to uobičajena pojava. Pogledajmo zašto je došlo do ove promjene.

Osvjetljavajući put do zapanjujućih slika

Da biste razumjeli kako je tkanje postalo toliko važno, pogledajte ovu scenu iz Quakea:

To je tamna slika, takva je bila priroda ove igre, ali možete vidjeti da mrak nije svugdje jednak - mrlje zidova i poda svjetlije su od ostalih dajući osjećaj općenitog osvjetljenja na tom području.

Primitivci koji čine stranice i tlo imaju istu teksturu primijenjenu na njih, ali postoji druga tekstura koja se naziva svjetlosna kartamiješa se s vrijednostima texela prije nego što se podudara s kvadratnim pikselima. Još u Quake dane, game game je unaprijed računao i izrađivao svjetlosne karte i koristio ih za stvaranje statičke i dinamičke razine svjetlosti.

Prednost njihove upotrebe bila je u tome što su se složeni proračuni osvjetljenja izvodili na teksturama, a ne na uglovima, posebno poboljšavajući izgled scene i vrlo male troškove izvedbe. Očito nije savršeno: kao što vidite na tlu, granica između osvijetljenih područja i onih u sjeni vrlo je jednostavna.

Na mnogo načina, lagana karta je samo još jedna tekstura (sjetite se da nisu sve više od 2D nizova podataka), pa ono što ovdje gledamo je rana uporaba onoga što je poznato kao multi tekstura. Kao što i samo ime govori, to je postupak u kojem se dvije ili više tekstura primjenjuju na princip. Korištenje laganih karata u Quakeu bilo je rješenje za prevladavanje ograničenja Gouraudovog sjenčanja, no kako su mogućnosti grafičkih kartica rasle, tako su rasle i višenitne aplikacije.

3Dfx Voodoo, kao i ostale kartice svoje ere, bio je ograničen u tome koliko bi mogao učiniti u renderu proći. Ovo je u osnovi cjelovita sekvenca prikazivanja: od prikazivanja uglova do rasterizacije okvira, a zatim promjene piksela u konačni buffer okvira. Prije dvadeset godina igre su gotovo uvijek izvodile jedan pas.

To je bilo zato što je dvostruko prikazivanje vrhova bilo vrlo skupo u smislu izvedbe, jer ste samo željeli primijeniti više teksture. Nekoliko godina nakon Voodoo-a, morali smo pričekati dok on ne postane dostupan prije nego što ćemo u jednom renderiranju moći napraviti grafičke kartice s više navoja ATI Radeon i Nvidia GeForce 2.

Ovi GPU-ovi imali su više teksturnih jedinica po odjeljku za prikazivanje piksela (tj. cjevovod), tako da je donošenje bilinearno filtriranog texela iz dva odvojena tkiva bilo čudno. To je mapu svjetla učinilo još popularnijom, omogućavajući igrama da budu potpuno dinamične, mijenjajući vrijednosti svjetlosti na temelju promjena u okruženju igre.

No, postoji još mnogo toga što se može učiniti s više tekstura, pa pogledajmo.

Normalno je množiti visinu

U ovoj seriji članaka o 3D prikazivanju nismo objasnili kako uloga GPU-a zaista odgovara cijeloj poanti (hoćemo, ne još!). Ali ako se vratiš Epizoda 1i pogledajući sve složene radove na verteksnom prikazivanju, mogli biste pomisliti da je ovo GPU najteži dio cijelog niza.

Bilo je to već dugo vremena, a programeri igara su se potrudili smanjiti ovo opterećenje. To je značilo doći do vreće vizualnih trikova i izvući što više prečaca i varalica, dajući isti vizualni izgled korištenja puno vrhova posvuda, ali zapravo ne koristeći mnoge od njih za njegovo pokretanje.

I većina ovih trikova, karte visina ve redovite karte. To dvoje povezano je s činjenicom da se drugo može stvoriti od prvog, ali za sada, pogledajmo samo tehniku ​​koja se naziva: mapiranje udaraca.

Mapiranje udaraca uključuje upotrebu 2D niza koji se naziva mapom visine, a koji izgleda kao pojedinačna verzija izvorne teksture. Na primjer, gornja slika ima realističnu teksturu opeke primijenjenu na 2 ravne površine. Karta teksture i visine izgleda ovako:

Boje visinske karte predstavljaju normale površine opeke (pokrili smo ono što je normalno Epizoda 1 ove serije članaka). Kada slijed žbuke dosegne točku nanošenja teksture opeke na površinu, izvodi se niz izračuna kako bi se boja teksture opeke prilagodila normalnoj.

Kao rezultat, cigle izgledaju više 3D, iako su i dalje savršeno ravne. Pogotovo ako pažljivo pogledate rubove cigli, možete vidjeti ograničenja tehnike: tekstura izgleda pomalo iskrivljeno. No, za brzi trik dodavanja više detalja na površinu, mapiranje izbočina vrlo je popularno.

Normalna karta je poput karte visina, ali boje te teksture same su normale. Drugim riječima, izračun nije potreban za pretvaranje karte visina u normalu. Možda se pitate kako se boje mogu koristiti za predstavljanje strelice u prostoru. Odgovor je jednostavan: svaki texel ima određeno R, G, B vrijednosti (crvena, zelena, plava) i ti su brojevi izravno X ve Z vrijednosti za normalni vektor.

U gornjem primjeru lijevi dijagram pokazuje kako se smjer normale mijenja na hrapavoj površini. Da bismo predstavili iste normale u ravnoj teksturi (srednji dijagram), dodijelimo im boju. U našem slučaju, R, G, B povećanje vrijednosti (0,255,0) za ravno, a zatim količine crvene za lijevu i plave za desnu.

Imajte na umu da se ova boja ne miješa s izvornim pikselom - procesoru govori na koji je način okrenuta normala, tako da fotoaparat može ispravno izračunati kutove između svjetla i teksturirane površine.

Blagodati udarnog i normalnog mapiranja zaista sjaje kada se u sceni koristi dinamičko osvjetljenje, a postupak prikazivanja izračunava učinke promjena svjetlosti po pikselu, a ne po uglu. Moderne igre sada koriste hrpu tekstura kako bi poboljšale kvalitetu učinjene čarolije.

Ovaj zid realističnog izgleda nevjerojatno je samo ravna površina - detalji o cigli i mortu nisu izrađeni na milijunima poligona. Umjesto toga, radi samo 5 tekstura i puno pametne matematike.

Karta visina korištena je za generiranje normalne karte kako bi se simulirao način na koji cigle bacaju sjene na sebe i sve manje promjene na površini. Tekstura hrapavosti korištena je za promjenu načina na koji svjetlost odražava različite elemente zida (npr. Spljoštena cigla reflektira dosljednije od grube žbuke).

Konačna karta, na gornjoj slici označena AO, dio je procesa koji se naziva okluzija okoline: tehnika koju ćemo detaljnije razmotriti u kasnijem članku, ali za sada samo sjene.

Mapiranje teksture je presudno

Teksturiranje je apsolutno neophodno za dizajn igre. Nabavite verziju Warhorse Studio za 2019 Kraljevstvo dolazi: spas - RPG za prvo lice smješten u Bohemiju iz 15. stoljeća, drevnu zemlju Srednjoistočne Europe. Dizajneri su željeli stvoriti svijet što realniji za to razdoblje. I najbolji način za uranjanje igrača u život prije stotina godina, svaki pogled na krajolik, zgradu, komplet odjeće, kosu, svakodnevne predmete itd. Radilo se o pravom izgledu.

Svaku jedinstvenu teksturu na ovoj jedinstvenoj slici u igri izrađuju umjetnici, a njihovu upotrebu koristi mehanizam za obradu slike koji kontroliraju programeri. Neke su male, imaju osnovne detalje i malo ih treba za filtriranje ili obradu drugih tekstura (pileća krilca, na primjer).

Drugi su visoke rezolucije i pokazuju puno sitnih detalja; anizotropno filtrirano i uklopljeno s normalnim kartama i ostalim teksturama - samo pogledajte lice muškarca u prvom planu. Programeri objašnjavaju različite zahtjeve za teksturiranjem svakog elementa u sceni.

Sve se to sada događa u mnogim igrama, jer igrači očekuju više detalja i realizma. Teksture će rasti i više će se koristiti na površini, ali postupak uzorkovanja teksta i njegove primjene na piksele bit će u osnovi isti kao u Quake danima. Najbolja tehnologija, bez obzira na to koliko je stara, nikad ne umire!