Šiame trečiajame skyriuje, kuriame giliau žiūrime į 3D žaidimų kūrimą, sutelksime dėmesį į tai, kas nutinka 3D pasauliui po kampų apdorojimo ir scenos raserizacijos. Konfigūracija yra vienas iš svarbiausių atvaizdavimo etapų, nors viskas, kas vyksta, apskaičiuojama ir pakeičiama dviejų dimensijų tinkleliu iš spalvotų blokų.

Dauguma vizualinių efektų, kuriuos šiandien galima pamatyti žaidimuose, priklauso nuo protingo tekstilės naudojimo - žaidimai be jų tampa nuobodūs ir negyvi. Taigi nueisime nardyti ir pažiūrėkime, kaip tai veikia!

Kaip visada, jei nesate pasirengęs giliai pasinerti į audinį, nepanikuokite - galite pradėti 3D žaidimų kūrimas 101. Bet kai pradėsite pagrindus, perskaitykite mūsų tolesnį žvilgsnį į 3D grafikos pasaulį.

0 epizodas: 3D žaidimų kūrimas 101
Aprašytos grafikos sudarymas

1 epizodas: Kaip veikia 3D žaidimų kūrimas: kampų tvarkymas
Gilus pasinėrimas į 3D grafikos pasaulį
2 dalis: Kaip veikia 3D žaidimų kūrimas: rastravimas ir spindulių sekimas
Nuo 3D iki plokščio 2D, POV ir apšvietimo
3 skyrius: Kaip veikia 3D žaidimų kūrimas: tekstūra
Bilineerio, trilinearinio, anizotropinio filtravimo, gumbų kartografavimo ir dar daugiau

Pradėkime paprastai

Išsirinkite perkamiausius 3D žaidimus per pastaruosius 12 mėnesių ir visi jie dalinsis įprasta: tekstūrų žemėlapiai (arba tiesiog tekstūros). Tai labai dažnas terminas, dauguma žmonių, kurdami tekstūras, sukurs tą patį vaizdą: paprastą, plokščią kvadratą arba stačiakampį (žolė, akmuo, metalas, drabužiai, veidas ir kt.), Kuriame yra paviršiaus vaizdas.

Tačiau kai šie pagrindiniai vaizdai 3D scenoje naudojami keliuose sluoksniuose ir derinami naudojant sudėtingą aritmetiką, gaunami stebėtinai tikroviški vaizdai. Norėdami pamatyti, kaip tai įmanoma, praleiskime juos visiškai ir pažiūrėkime, kaip 3D pasaulio objektai gali atrodyti be jų.




Kaip matėme ankstesniuose straipsniuose, 3D pasaulį sudaro kampai - paprastos formos, kurias vėliau galima perkelti ir nuspalvinti. Tada jie naudojami pradmenims gaminti, kurie taip pat suspaudžiami į 2D taškų tinklelį. Kadangi nenaudosime tekstūros, šiuos taškus turime spalvinti.




Jis vadinamas metodu, kurį galima naudoti tiesus šešėliavimastai reiškia, kad reikia išgauti pirminės medžiagos pirmosios viršūnės spalvą ir tada naudoti šią spalvą visiems taškeliams, kurie patenka į rastrinės formos sritį. Tai atrodo taip:




Akivaizdu, kad tai nėra realus arbatinukas, bent jau paviršiaus spalva yra neteisinga. Spalvos pereina iš vieno lygio į kitą, nėra sklandaus perėjimo. Šios problemos sprendimas galėtų būti vadinamasis naudojimas Gouraud šešėliai.




Tai procesas, kurio metu atsižvelgiama į kampų spalvas ir apskaičiuojama, kaip spalva keičiasi visame trikampio paviršiuje. Naudota matematika linijinė interpoliacijaTai reiškia, kad nors ji atrodo įmantri, iš tikrųjų, jei vienos primityviosios pusės spalva yra 0,2 raudonos, o kitos - 0,8 raudonos, formos spalva yra nuo 0,2 iki 0,8 (t. Y. 0,5).

Tai padaryti gana paprasta, o pagrindinis jos pranašumas yra greitis. Daugelyje ankstyvųjų 3D žaidimų buvo naudojama ši technika, nes skaičiavimus atliekanti aparatinė įranga apsiribojo tuo, ką jie galėjo padaryti.




Bet net ir tai turi savo problemų, nes jei šviesa nukreipta tiesiai į trikampio vidurį, jos kampai (kampai) gali jo tinkamai netraukti. Tai reiškia, kad gali būti visiškai nepastebėti svarbiausi šviesos veiksniai.




Nors plokščių ir „Gouraud“ šešėliai yra įtraukti į tinklelio arsenalą, aukščiau pateikti pavyzdžiai yra atviri kandidatai naudoti tekstūras jų gydymui. Norėdami gerai suprasti, kas nutinka, kai paviršius užtepamas tekstūra, grįšime laiku ... iki 1996 m.

Trumpas žaidimas ir GPU istorija

„Quake“ yra orientyras, išleistas prieš 23 metus id Programinė įranga. Nors tai nebuvo pirmas žaidimas, kuriame 3D poligonai ir faktūros buvo naudojami kuriant aplinką, jis buvo vienas iš pirmųjų, kurie juos visus taip efektyviai panaudojo.

Kitas dalykas, kurį jis padarė, buvo parodyti, ką galima padaryti su „OpenGL“ (grafikos API vis dar buvo pirmojoje versijoje), be to, tai padėjo parduoti pirmąjį vaizdo plokštės produktą. Tikras komentaras ve „3Dfx Vudu“.

Palyginti su šiandienos standartais, „Voodoo“ buvo nepaprastai paprasta: jokios 2D grafikos palaikymo, jokio kampinio apdorojimo ir tiesiog taškų apdorojimo pagrindai. Tai vis tiek buvo grožis:

Jis turėjo visą mikroschemą (TMU), kad gautų pikselį iš tekstūros, o tada dar vieną lustą (FTB), kad sumaišytų jį su pikseliu iš rastro. Tai gali padaryti keletą papildomų dalykų, tokių kaip rūko ar skaidrumo efektų darymas, tačiau tai buvo beveik viskas.

Pateikdami grafikos plokštės projektavimo ir veikimo architektūros apžvalgą, galime pamatyti, kaip šie procesai veikia.

FTB lustas paima dvi spalvų reikšmes ir jas derina; viena iš jų gali būti vertė iš audinio. Maišymo procesas matematiškai yra gana paprastas, tačiau jis šiek tiek skiriasi tuo, kas tiksliai sumaišoma, ir kokia API naudojama instrukcijoms vykdyti.

Ką mes žiūrime „Direct3D“ pasiūlymai Kalbant apie maišymo funkcijas ir maišymo operacijas, matome, kad kiekvienas pikselis pirmiausia padauginamas iš skaičių tarp 0,0 ir 1,0. Tai lemia, kiek taškų spalvos paveiks galutinę išvaizdą. Tada nustatytos spalvų taškų spalvos pridedamos, atimamos arba dubliuojamos; Kai kuriose funkcijose operacija visada yra loginė išraiška, kai pasirenkamas kažkas panašaus į ryškiausią tašką.

Aukščiau pateiktas vaizdas yra pavyzdys, kaip tai veikia praktiškai; faktoriaus, naudojamo kairiajam taškui alfa vertės. Šis skaičius, skaidrus pikselių.

Likusieji veiksmai apima rūko vertės taikymą (paimta iš programuotojo sudarytos programų lentelės, tada daroma ta pati maišymo matematika); atlikti tam tikrus matomumo ir skaidrumo patikrinimus ir pritaikymus; prieš galiausiai įrašydami vaizdo plokštės spalvą į atmintį grafikos plokštėje.

Kodėl istorijos pamoka? Nepaisant santykinio dizaino paprastumo (ypač palyginti su šiuolaikiniais milžinais), procesas paaiškina pagrindinius tekstūravimo pagrindus: gaukite keletą spalvų verčių ir sumaišykite jas taip, kad modeliai ir aplinka pažiūrėtų, kaip turėtų būti konkrečioje situacijoje.

Šiandieniniai žaidimai vis dar daro visa tai, vienintelis skirtumas yra naudojamas tekstūros kiekis ir maišymo skaičiavimo sudėtingumas. Kartu jie modeliuoja vaizdo filmuose matomus efektus arba tai, kaip šviesa sąveikauja su skirtingomis medžiagomis ir paviršiais.

Tekstūravimo pagrindai

Mums tekstūra yra plokščias, 2D vaizdas, taikomas daugiakampiams, kurie sudaro 3D struktūras rodomame kadre. Kompiuteriui tai ne kas kita, kaip mažas atminties blokas 2D masyvo pavidalu. Kiekvienas masyvo įrašas parodo vieno iš tekstūros vaizdo taškų spalvos vertę (geriau žinoma) teksto užpildas - tekstūros taškai).

Kiekviena daugiakampio viršūnė turi 2 koordinates (paprastai sen., v) nurodo, kuris tekstūros taškas su juo susijęs. Pats kampas turi 3 koordinačių rinkinius (X ve Z) ir teksto įvedimas į kampus. tekstūrų žemėlapis.

Norėdami pamatyti tai veikiantį, pereikime prie įrankio, kurį keletą kartų naudojame šioje straipsnių serijoje: „WebGL“ sukūrimas realiu laiku įrankis. Dabar, z derinkite iš kampų ir laikykite viską plokščioje plokštumoje.

Mes turime tekstūrą iš kairės į dešinę sen., v koordinatės, pažymėtos tiesiai į kampų kampus x, y koordinatės. Tada viršutiniai kampai y jos koordinatės padidėjo, bet kadangi tekstūra vis dar tiesiogiai priskiriama prie jų, tekstūra ištempiama aukštyn. Nuotraukoje dešinėje, šį kartą keičianti tekstūrą: u reikšmės padidėjo, tačiau dėl to audinys gali būti sutraiškytas, o paskui pakartotas.

Kadangi tekstūra dabar yra faktiškai ilgesnė, aukštesnė u Jos vertė turėtų atitikti primityvų - iš esmės tekstūra buvo iš dalies pakartota. Tai būdas padaryti tai, kas matoma daugelyje 3D žaidimų: tpakartoti. Dažnus to pavyzdžius galima rasti scenose su uolingais ar žolingais kraštovaizdžiais ar plytų sienomis.

Dabar nusistatykime sceną primityvesne ir grįšime į žaidimo gylį. Tai, ką turime žemiau, yra klasikinis kraštovaizdžio vaizdas, tačiau dėžutės tekstūra yra nukopijuota ir pakartota tarp primityvų.

Originalios gif formato dėžutės tekstūra yra 66 kilogramai, jos skiriamoji geba yra 256 x 256 pikselių. Pradinė rėmelio dalies, apdengtos dėžutės faktūromis, skiriamoji geba yra 1900 x 680, todėl šiame regione turėtų būti įmanoma parodyti tik 20 kastų tekstūras, atsižvelgiant į pikselių „plotą“.

Akivaizdu, kad einame daugiau nei 20 kelių, todėl daugybė krūtinės faktūrų fone labai Mažesni nei 256 x 256 pikseliai. Iš tikrųjų jie yra ir jau išgyveno procesą audinių sumažinimas (taip, tai yra žodis!). Pabandykime dar kartą, bet šį kartą jis priartėjo prie vienos iš komodų.

Atminkite, kad tekstūros dydis yra tik 256 x 256 pikselių, tačiau čia matome, kad tekstūra yra daugiau nei pusė 1900 pikselių pločio paveikslėlio pločio. Ši tekstūra išgyveno vadinamąjį audinių padidinimas.

Šie du tekstūros procesai visada vyksta 3D žaidimuose, nes visos primityvoms pritaikytos tekstūros turi būti keičiamos kartu su daugiakampiais, kai kamera juda aplink sceną arba artėjant modeliams ir tolsta. Matematiškai tai nėra didelis dalykas, tiesą sakant, tokiame darbe mirksi net paprasčiausi integruoti grafikos lustai. Tačiau audinių sumažinimas ir padidėjimas kelia naujų problemų, kurias reikia tam tikru būdu išspręsti.

Įveskite mini tekstūras

Pirmasis ištaisytas klausimas yra skirtas tolimiems audiniams. Jei dar kartą pažvelgtume į pirmąjį krato kraštovaizdžio vaizdą, horizonte dešinieji būtų tik kelių taškų dydžio. Nėra prasmės dėl dviejų priežasčių bandyti suspausti 256 x 256 pikselių vaizdą į tokį mažą plotą.

Pirma, mažesnė tekstūra užima mažiau vietos vaizdo plokštėje, kuri yra naudinga bandant talpinti nedidelį talpyklos kiekį. Tai reiškia, kad mažesnė tikimybė, kad jis bus pašalintas iš talpyklos, ir pakartotinai naudojant šią tekstūrą bus visiškai pasinaudota netoliese esančioje atmintyje esančiais duomenimis. Antroji priežastis, dėl kurios mes ateiname akimirkai, nes tai priklauso nuo tos pačios problemos, susijusios su padidintomis tekstūromis.

Bendras sprendimas naudoti didelius audinius, susmulkintus mažais primityvais, mova. Tai yra sumažintos originalios tekstūros versijos; pats žaidimo variklis gali būti sukurtas (naudojant atitinkamą API komandą) arba tai gali padaryti iš anksto žaidimų dizaineriai. Kiekvienas mipmap audinio lygis turi pusę ankstesnio matmenų.

Kasos tekstūrai atsitinka maždaug taip: 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.

Visos žemėlapių programos yra supakuotos kartu, todėl tekstūra vis dar yra tas pats failo vardas, bet dabar yra didesnė. Audiniai supakuojami taip, kad sen., v jos koordinatės ne tik nustato, kurį tekstilės tašką reikia naudoti kadre, bet ir iš kurio žemėlapio. Tada programuotojai koduoja teikėją, norėdami nustatyti naudotiną žemėlapių schemą, pagrįstą kvadratinių vaizdo elementų gylio verte, taigi, jei jis yra per didelis, pikselis yra per atstumą, kad būtų galima naudoti mažą žemėlapio žemėlapį.

Aštrių akių skaitytojai galėjo pastebėti trūkumus, susijusius su žemėlapiais, ir jie gaunami didesnių faktūrų sąskaita. Originalios dėžutės tekstūra yra 256 x 256 pikselių dydžio, tačiau, kaip matote aukščiau esančiame paveikslėlyje, dabar matoma tekstūra yra 384 x 256. Taip, yra daug laisvos vietos, tačiau nepaisant to, kaip supakuosite ją į mažesnes tekstūras, bendras padidėjimas bent iki vieno iš audinio matmenų yra 50%.

Tačiau tai taikoma tik iš anksto parengtoms gairėms; Jei žaidimo variklis užprogramuotas tinkamai gaminti, padidėjimas niekada negali viršyti 33% pradinio tekstūros dydžio. Taigi, palyginti su nedideliu atminties padidėjimu audinių MIP žemėlapiuose, jūs gaunate pranašumų ir vaizdinių patobulinimų.

Žemiau pateiktas uždaras / atviras audinių MIP žemėlapių palyginimas:

Kairėje paveikslėlio pusėje dėžutės faktūros naudojamos „tokios, kokios yra“, todėl atrodo grūdėtas vaizdas ir tariamai pelės modeliai toli. Dešinėje pusėje naudojant vaizdo schemas, žymiai švelnesnis perėjimas per kraštovaizdį, kai dėžutės tekstūra horizonte tampa vientisa spalva.

Tačiau ar kas nors nori neryškių faktūrų, kurios trikdo mėgstamo žaidimo foną?

Bilineeris, trigubos juostelės, anizotropinis - man viskas graikiška

Pikselių parinkimo iš tekstūros, taikytinos rėmelyje esančiam pikseliui, procesas audinių ėmimaso tobulame pasaulyje - jo dydis, padėtis, kryptis ir kt. nepriklausomai nuo jos tekstūros, tai būtų tekstūra, tiksliai atitinkanti jos principą. Kitaip tariant, tekstūros atranka yra ne kas kita, kaip atvaizdavimo tarp 1 ir 1 taškų tarp pikselių procesas.

Kadangi taip nėra, imant audinius reikia atsižvelgti į daugelį veiksnių:

  • Ar tekstūra padidinta ar sumažinta?
  • Ar tekstūra yra originali ar gairė?
  • Kuo kampu parodyta tekstūra?

Paanalizuokime juos po vieną. Pirmasis yra pakankamai aiškus: jei tekstūra padidinama, teksto, apimančio primityvų tašką, bus daugiau nei reikia; Kai susitraukiama, bus priešingai, dabar kiekvienas texel turėtų apimti daugiau nei vieną pikselį. Tai šiek tiek problemų.

Antra, atvaizdo schemos palieka audinius kampu, nes jie yra naudojami siekiant išvengti audinių mėginių ėmimo iš tolimų primityvų problemos. Taip, tai taip pat yra problema. Kodėl? Kadangi visos tekstūros yra sukurtos atvirai, kad vaizdas būtų rodomas, arba visos yra matematikos formos: normalus audinio paviršius yra toks pat kaip ir ant audinio esantis paviršius.

Todėl, kad būtų per mažai arba per daug tekstūrų ir kad jos būtų kampu, audinių filtravimas. Jei nenaudojate šio proceso, tai yra tai, ką gausite:

Čia mes pakeitėme dėžutės tekstūrą R raidės tekstūra, kad būtų aiškiau parodyta, kiek painiavos ji turės nefiltruodama tekstūros!

Grafinės API, tokios kaip „Direct3D“, „OpenGL“ ir „Vulkan“, siūlo tuos pačius diapazono filtravimo tipus, tačiau jiems naudojami skirtingi pavadinimai. Tiesą sakant, viskas vyksta taip:

  • Artimiausias taško ėmimas
  • Linijinis tekstūros filtravimas
  • Anizotropinis audinių filtravimas

Visiems tikslams ir tikslams, artimiausio taško ėmimas jei jis nefiltruoja - taip yra todėl, kad jis yra arčiausias pikselis taškui, kuriam reikia atrankos (t. y. nukopijuoti jį iš atminties), o tada sumaišyti pikselį su originalia spalva.

Čia ateina linijinis filtravimas. Privaloma sen., v tekselio koordinatės yra siunčiamos į aparatinę įrangą mėginių ėmimui, tačiau vietoj to, kad artimiausias texelis būtų prie tų koordinačių, imtuvas keturi tekstilės. Jie yra tiesiai virš, žemiau, į kairę ir į dešinę nuo to, kuris pasirinktas naudojant artimiausio taško ėminį.

Tada šie 4 tekstilės dirbiniai maišomi naudojant svertinę formulę. Pavyzdžiui, formulė Vulkan:

T "Spalva", f Keturi nusausintos ir 1-4 tekstilės pavyzdžiai. vertybes alfa ve beta Kiek toli nuo taško, kurį apibrėžė sen., v koordinatės yra iš čiaupo vidurio.

Laimei, bet kuris 3D žaidimų žaidėjas, žaidžiantis ar žaidžiantis, įvyksta automatiškai šioje grafikos apdorojimo mikroschemoje. Tiesą sakant, „3dfx Voodoo“ TMU mikroschema tai padarė: atrinko 4 singlus ir juos sumaišė. „Direct3D“ tai vadina keistai dvilypis filtravimas, tačiau nuo „Quake“ ir „Voodoo“ TMU mikroschemos laikų, žinoma, vaizdo plokštės sugebėjo filtruoti tik vienos valandos ciklu (jei tekstūra patogiai įsitaisė artimoje atmintyje), žinoma.

Linijinį filtravimą galima naudoti kartu su žemėlapių žemėlapiais ir, jei norite, kad filtravimasis jums būtų išgalvotas, galite paimti 4 tekstus iš vienos tekstūros, tada dar 4 iš kito žemėlapio lygio ir sujungti juos. Ir „Direct3D“ vardas už tai? trišakis filtravimas. Ką tri apie šį procesą? Tavo spėjimas yra toks pat geras kaip mūsų ...

Paskutinis paminėtas filtravimo metodas vadinamas anizotrop. Tiesą sakant, tai yra derinimas atsižvelgiant į biliarinio ar trilinearinio filtravimo procesą. Iš pradžių anizotropijos laipsnis primityvusis paviršius (ir stebėtinai sudėtinga) - ši vertė keičia primityvo kraštinių santykį dėl jo orientacijos:

Aukščiau pateiktas vaizdas rodo tą patį kvadrato principą su vienodo ilgio kraštais; bet tolstant nuo savo perspektyvos kvadratas atrodo kaip stačiakampis, o jo plotis viršija jo aukštį. Taigi, primityvas dešinėje turi didesnę anizotropiją nei kairėje (o kvadrato atveju laipsnis yra tiksliai lygus nuliui).

Dauguma šių dienų 3D žaidimų leidžia įjungti anizotropinį filtravimą ir tada pakoreguoti jo lygį (nuo 1x iki 16x), bet ką tai iš tikrųjų keičia? Šis nustatymas kontroliuoja maksimalų papildomų texel pavyzdžių, paimtų per originalų linijinį ėminį, skaičių. Pvz., Tarkime, kad žaidimas yra naudojamas naudoti 8x anizotropinį bilinearinį filtravimą. Tai reiškia, kad užuot paėmę tik 4 teksto reikšmes, jis atneš 32 reikšmes.

Aišku, kad naudojant anizotropinį filtravimą gali būti pastebėti:

Tiesiog šiek tiek perbraukite aukštyn ir palyginkite artimiausio taško mėginių ėmimą, kad būtų galima maksimaliai 16x anizotropinį trilinearinį filtravimą atlikti. Taigi skanu, beveik skanu!

Bet šis gražus sviesto tekstūros skonis ir neabejotinai veiksmingumas turi būti kaina: visi maksimalūs anizotropiniai trilineariniai filtrai atneš 128 mėginius iš vienos tekstūros iš kiekvieno apdoroto pikselio. Net ir geriausių naujausių GPU, to negalima padaryti per vieną laikrodžio ciklą.

Jei gautume kažką panašaus į AMD „Radeon RX 5700 XT“pažymėkite kiekvieną procesoriaus viduje esantį audinio vienetą, kad galėtumėte uždaryti 32 texel adresus vienoje laikrodžio kilpoje, tada įkelkite 32 tekselius iš atminties (kiekvieno 32 bitų dydžio) į kitą laikrodžio ciklą ir surinkite 4 vėliau. Todėl jis buvo sumaišytas 128 tekselio mėginiams, kuriems reikalingas mažiausiai 16 valandų ciklas.

Dabar bazinis 5700 XT laikrodžio greitis yra 1605MHz, taigi šešiolika ciklų užtrunka tik 10 nanosaniye. Tiesiog tai padarykite už kiekvieną 4K rėmelio tašką. vienas audinių vienetas vis tiek užtruktų tik 70 milisekundžių. Gerai, gal spektaklis nesvarbus!

Net 1996 m. „3Dfx Voodoo“ buvo labai stilingi tvarkant tekstūras. Viename bilineariškai filtruotame tekstelyje per valandą galima duoti daugiausiai 1, ir nors TMU mikroschema sukosi 50 MHz dažniu, tai reiškė, kad kiekvieną sekundę buvo galima sumažinti 50 milijonų tekstilės elementų. Žaidime, kurio sparta yra 800 x 600 ir 30 kadrų per sekundę, su filtru reikia tik 14 milijonų per sekundę teksto.

Tačiau visa tai daro prielaidą, kad tekstūros yra netoliese esančioje atmintyje ir kad prie kiekvieno pikselio yra priskirtas tik vienas audinys. Prieš dvidešimt metų idėja, kad principui reikia pritaikyti daugiau nei vieną tekstūrą, buvo beveik nepažįstama, tačiau dabar tai yra įprasta. Pažvelkime, kodėl įvyko šis pokytis.

Apšviestas kelias į įspūdingus vaizdus

Pažvelkite į šią sceną iš „Quake“, kad suprastumėte, kaip audinys tapo toks svarbus:

Šis tamsus vaizdas buvo šio žaidimo pobūdis, tačiau galite pastebėti, kad tamsa nėra visur vienoda - sienų ir grindų pleistrai yra ryškesni nei kiti, kad būtų bendras jausmas toje vietoje.

Pirmykščiai, formuojantys šonus ir grindis, turi tą pačią tekstūrą, bet yra ir antroji tekstūra. lengvas žemėlapissumaišomas su texel reikšmėmis, prieš jas suderinant su kvadratiniais taškais. „Quake“ dienomis šviesos žemėlapiai buvo iš anksto apskaičiuoti ir sudaryti žaidimo variklio bei panaudoti statiniam ir dinaminiam šviesos lygiui sukurti.

Jų naudojimo pranašumas buvo tas, kad buvo atlikti sudėtingi faktūrų, o ne kampų apšvietimo skaičiavimai, ypač pagerinant scenos išvaizdą ir atliekant labai mažas atlikimo išlaidas. Akivaizdu, kad nėra tobulas: kaip matote žemėje, riba tarp apšviestų plotų ir tų, kurie yra šešėlyje, yra labai paprasta.

Daugeliu atžvilgių lengvas žemėlapis yra tik dar viena tekstūra (atminkite, kad jie visi yra, išskyrus 2D duomenų masyvus), todėl tai, ką mes čia žiūrime, yra ankstyvas to, kas žinoma, panaudojimas. daugialypė tekstūra. Kaip rodo pavadinimas, tai yra procesas, kurio metu principas pritaikomas dviem ar daugiau palietimų. Naudojant lengvuosius žemėlapius „Quake“ buvo sprendimas įveikti „Gouraud“ šešėliavimo apribojimus, tačiau augant vaizdo plokštių galimybėms, augo ir daugiapakopės programos.

„3Dfx Voodoo“, kaip ir kitos savo epochos kortelės, apsiribojo tuo, kiek daug jis galėjo padaryti tinkle praeiti. Iš esmės tai yra visa atvaizdavimo seka: nuo kampų apdorojimo iki rėmelio rasravimo ir tada pikselių keitimo į galutinį kadro buferį. Prieš dvidešimt metų žaidimuose beveik visada buvo atliktas vienas praėjimas.

Priežastis buvo ta, kad našumas buvo labai brangus, nes kampus norite apdoroti du kartus, kad būtų daugiau tekstūros. Po kelerių metų po „Voodoo“, mes turėjome laukti, kol „ATI Radeon“ ir „Nvidia GeForce 2“ grafikos plokštės taps prieinamos, kad galėtume padaryti daugialypius brėžinius perkeldami vieną vaizdą.

Šie GPU turėjo kelis tekstūros vienetus kiekvienoje pikselių apdorojimo dalyje (t. Y. vamzdžio linijaTai buvo kaprizas, kad iš dviejų atskirų tekstūrų būtų galima išfiltruoti tekstilę. Dėl to šviesos kartografavimas tapo dar populiaresnis ir pasikeitė šviesos vertės pokyčiai žaidimo aplinkoje, todėl žaidimai buvo visiškai dinamiški.

Tačiau daug daugiau galima nuveikti naudojant keletą tekstūrų, todėl pažvelkime.

Dauginti ūgį yra normalu

Šioje straipsnių serijoje apie 3D perteikimą mes nenagrinėjome, kaip GPU vaidmuo iš tikrųjų atitinka visą problemą (mes tai padarysime dar, dar ne!). Bet jei grįši 1 epizodasir pažiūrėkite į visus sudėtingus kampinio apdorojimo darbus, galite pamanyti, kad tai yra sunkiausia viso masyvo dalis, kurią turi pateikti grafikos procesorius.

Tai buvo seniai, ir žaidimų programuotojai padarė viską, kad sumažintų šį darbo krūvį. Tai reiškė, kad reikia pasiekti vaizdinių triukų krepšį ir pašalinti kuo daugiau nuorodų bei gudrybių, suteikti tą patį vaizdą, kai visur naudojami keli kampai, bet iš tikrųjų nenaudojate daugelio, kad jį paleistumėte.

Ir dauguma šių gudrybių, aukščio žemėlapiai ve normalūs žemėlapiai. Jie yra susiję su tuo, kad antrąjį galima sukurti iš pirmojo, tačiau kol kas pažvelkime į techniką, vadinamą: guzas žemėlapis.

Gumbų kartografavimas apima 2D sekos, vadinamos aukščio žemėlapiu, naudojimą, kuris atrodo kaip viena pirminio audinio versija. Pavyzdžiui, aukščiau esančiame paveikslėlyje yra tikroviška plytų tekstūra, taikoma 2 plokščiams paviršiams. Tekstūros ir aukščio žemėlapis atrodo taip:

Aukščio žemėlapio spalvos atspindi plytų paviršiaus normas (padengėme tai, kas normalu 1 epizodas ši straipsnių serija). Kai tinkinimo seka pasiekia plytų faktūros paviršiaus padengimo tašką, atliekama daugybė skaičiavimų, kad plytų tekstūra būtų normali.

Dėl to, nors plytos vis dar yra visiškai plokščios, jos atrodo labiau 3D. Ypač jei atidžiai pažvelgiate į plytų kraštus, galite pamatyti technikos ribas: tekstūra atrodo šiek tiek susukta. Tačiau norint greitai pridėti daugiau informacijos prie paviršiaus, gumbų žemėlapiai yra labai populiarūs.

Normalus žemėlapis yra tarsi aukščio žemėlapis, bet pačios tekstūros spalvos yra normalios. Kitaip tariant, norint normalizuoti aukščio žemėlapį, nereikia atlikti skaičiavimų. Jums gali kilti klausimas, kaip spalvos gali būti naudojamos rodyklei erdvėje pavaizduoti. Atsakymas paprastas: kiekvienas texel yra specifinis R, G, B reikšmės (raudona, žalia, mėlyna) ir šie skaičiai yra tiesiogiai X ve Z normaliojo vektoriaus vertės.

Aukščiau pateiktame pavyzdyje kairioji diagrama parodo, kaip normalios kryptis keičiasi nelygiu paviršiumi. Norėdami pavaizduoti tuos pačius normatyvus plokščioje tekstūroje (vidurinė schema), mes jiems priskiriame spalvą. Mūsų atveju R, G, B Padidinus tiesės reikšmes (0,255,0), tada raudonos spalvos kairėje ir mėlynos dešinėje.

Atminkite, kad ši spalva nėra sumaišyta su originaliais pikseliais - ji nurodo procesoriui, kuria kryptimi yra nukreipta įprasta, kad fotoaparatas galėtų tiksliai apskaičiuoti kampus tarp žibintų ir tekstūruoto paviršiaus.

Kai scenoje naudojamas dinaminis apšvietimas, šmaikštaus ir įprasto atitikimo pranašumai iš tiesų išryškėja, o perteikimo procesas apskaičiuoja šviesos pokyčių poveikį taškui, o ne kiekvienam kampui. Šiuolaikiniai žaidimai naudoja daug tekstūros, kad dabar pagerintų magijos kokybę.

Ši tikroviškai atrodanti siena yra neįtikėtinai vienodo paviršiaus - detalės apie plytas ir skiedinį nėra pagamintos naudojant milijonus daugiakampių. Vietoj to, ji atlieka tik 5 tekstūras ir daug intelektualių matematikos darbų.

Aukščio žemėlapis buvo naudojamas normaliam žemėlapiui sudaryti, kad būtų imituojamas spalvinimo plytų kelias į save ir visi nedideli paviršiaus pokyčiai. Šiurkštumo tekstūra buvo naudojama norint pakeisti, kaip šviesa atspindi skirtingus sienos elementus (pvz., Išlyginta plyta atspindi nuosekliau nei grubus skiedinys).

Paskutinis žemėlapis, aukščiau esančiame paveikslėlyje pažymėtas AO, yra proceso, vadinamo žiniasklaidos perkrova, dalis: tai yra technika, kurią apžvelgsime vėlesniame straipsnyje, tačiau kol kas tai tik šešėliai.

Audinių derinimas yra labai svarbus

Tai nepaprastai svarbu kuriant tekstūrą. Gaukite 2019 metų „Warhorse Studio“ versiją Artėja Karalystė: išsigelbėjimas Pirmojo asmens RPG, įkurta 15 a. Bohemijoje, senovės Viduriniųjų Rytų Europoje. Dizaineriai norėjo aptariamu laikotarpiu sukurti kuo realistiškesnį pasaulį. O geriausias būdas pritraukti aktorių į gyvenimą prieš šimtus metų yra tai, kad kiekvienas kraštovaizdžio vaizdas, pastatas, drabužių komplektas, plaukai, kasdieniai produktai ir kt. Tai turėjo būti teisingas jos ieškojimas.

Kiekviena unikali šio žaidimo įvaizdžio faktūra buvo pagaminta menininkų, o juos naudojo programuotojo valdomas renderio variklis. Kai kurie jų yra maži, pagrindiniai ir jų reikia labai nedaug, norint filtruoti ar apdoroti kitus audinius (pvz., Vištienos sparnus).

Kiti yra aukštos skiriamosios gebos ir parodo daug smulkių detalių; filtruojamas anizotropiškai ir sumaišytas su įprastais žemėlapiais bei kitomis faktūromis - tereikia pažvelgti į pirmame plane esančio vyro veidą. Programuotojai paaiškina skirtingus kiekvieno elemento tekstūros reikalavimus scenoje.

Visa tai vyksta dabar daugelyje žaidimų, nes žaidėjų laukia išsamesnė informacija ir realizmas. Tekstūros augs ir daugiau bus naudojamos paviršiuje, tačiau teksto atranka ir jo pritaikymas taškeliams iš esmės bus tokie patys kaip „Quake“ dienomis. Geriausia technologija niekada nemiršta, nesvarbu, kiek metų!