Izklaide Programmatūra

3D spēļu renderēšana

Katru gadu visā pasaulē tiek izlaistas simtiem spēļu – dažas ir paredzētas viedtālruņiem, dažas spēļu konsolēm un dažas datoriem. Piedāvāto spēļu klāsts ir visai plašs. Taču ir viens veids, ko spēļu izstrādātāji pēta visvairāk – 3D.

Lai saprastu, kā mūsdienu 3D spēle veido attēlus, kā piemēru var apskatīt spēli Winning Run, kas izveidota ap 1988. gadu. Tā iespējams ir  pirmā spēle, kas jau no paša sākuma veidota 3D skatā, izmantojot dažādus paņēmienus, kas ir visai līdzīgi mūsdienās izmantotajiem.

Šajā rakstā sniegsim nelielu ieskatu tajā, kādi procesi un soļi ir 3D spēles attēla pamatā.

Kadra aspekti: pikseļi un krāsa

Šo attēlu parasti sauc par kadru, bet kas tad īsti ir tas, uz ko skatāmies?

Mēs redzam, ka monitora rāmis ir veidots no atsevišķu krāsainu elementu režģa, un, ja ieskatāmies patiešām tuvu, varam redzēt, ka paši bloki ir veidoti no mazākiem bitiem. Katram jaunam kadram, ko parāda monitors, jāsagatavo un jāglabā tūkstošiem RGB (sarkanas, zaļas un zilas krāsas modelis) vērtību.

Nepieciešamie veidošanas bloki: modeļi un faktūras

Renderējot (renderēšana ir datorgrafikā beidzamais process 2D attēla vai animācijas iegūšanai no jau iepriekš sagatavotas 3D ainas) 3D spēli nepieciešami dažādi pamata bloki. Tāpat kā filmām nepieciešami aktieri, kostīmi, gaismas, 3D spēlēm arī nepieciešami mākslinieki, kas tās projektē un citi, kas šos projektus īsteno. Lai to varētu vizualizēt, apskatīsim modeli no programmas ID Software’s Quake II.

Pirms vairāk kā 20 gadiem Quake II bija tehnoloģisks tour de force (iespaidīgs sniegums vai sasniegums, kas paveikts ar lielu prasmi), lai gan patiesībā, kā jau jebkurai 20 gadus vecai 3D spēlei, tās pamatā izmantoti sarežģīti modeļi. Taču tie visai viegli parāda, kā veidojas spēles vizuālās vērtības.

Pirmajā attēlā var redzēt, ka figūra ir veidota no savienotiem trīstūriem – katra tā stūri tiek saukti par verktūrtu vai virsotni kādam no tiem. Katra virsotne darbojas kā punkts nekurienē, tātad tam būs vismaz 3 numuri, lai to raksturotu, proti z, y un z koordinātas. Tomēr 3D spēlei ir nepieciešams kas vairāk par šo, kā piemēram, virsotnes krāsa un virziens, kādā tā ir vērsta.

Viena noteikta vērtību kopa, kas vienmēr pastāv, ir saistīta ar faktūras kartēm. Tās ir kā drēbes, kuras veidotais modelis nēsā, bet tā kā tas ir līdzens attēls, kartē jābūt konkrētam norādījumam par katru iespējamo virzienu, no kura spēlētājs varētu apskatīt modeli. Quake II modelis tiek apskatīts tikai no priekšpuses, mugurpuses un sāniem. Modernai 3D spēlei ir vairākas modeļu faktūras kartes, katra no tām ir pilna ar detaļām. Dažas kartes, piemēram, sniedz informāciju par to, kā gaisma atlec no virsmas.

Tātad 3D atveidotajā pasaulē viss redzētais sāksies kā vertu un faktūru karšu kolekcija. Tie ir sagrupēti atmiņas buferos (atmiņas apgabals, datu glabāšanai), kas savienojas kopā, – virsotnes buferis satur informāciju par verktiem; indeksa buferis norāda, kā verktūras savienojas ar formām; resursa buferis satur faktūras un atmiņas daļas, kas atliktas izmantošanai vēlāk renderēšanas procesā; komandas buferis ir instrukciju saraksts par to, ko ar to visu iesākt.

Tas viss veido nepieciešamo struktūru, kas tiks izmantota, lai izveidotu krāsaino pikseļu režģi beigās. Dažām spēlēm tas var būt milzīgs datu daudzums, jo būtu ļoti lēni veidot buferus katram jaunam kadram.

Notikumu vietas veidošana: virsotnes posms

Spēles sākuma aina sākas noklusētā stāvoklī ar modeļiem, gaismām un citiem parametriem. Tas ir nulle kadrs – grafikas sākuma punkts.

Attēlā redzamā figūra ietver 8 virsotnes, katra no tām ir definēta ar vairākiem skaitļiem. Starp virsotnēm tiek izveidots modelis, kas sastāv no 12 trīsstūriem.

Pievērsiet uzmanību attēlam – modeļa punktu numuri nav mainījušies. Mainījušās ir tikai tās vērtības, kas nosaka modeļa atrašanās vietu pasaulē.

Visvienkāršākais krāsu apstrādes veids ir krāsas piemērošana katrai virsotnei, pēc tam tiek aprēķināts, kā starp tām mainās virsma – to sauc par interpolāciju (metode attēla lieluma palielināšanai pikseļos).

Ja modelim būs vairāk virsotņu, tas palīdzēs iegūt reālistiskāku vērtību, kā arī nodrošinās labākus rezultātus ar krāsu interpolāciju.

Šajā renderēšanas posmā var detalizēti izpētīt gaismas radīto efektu. Veidojot šādus objektus, jāņem vērā novietojums un virziens, no kura objekts būs redzams.

Attēlā redzamas divas tējkannas. Process, kas izmantots labajā pusē esošajai tējkannai nodrošina reālistiskāku izskatu un, protams, aizņem ilgāku laiku.

Katru objektu šajā attēlā veido kopā savienotas virsotnes, kas sastāv no trīsstūriem.

Koki, augi, akmeņi, zeme, kalni – viss tiek veidots no trīsstūriem un katrs no tiem ir aprēķināts pēc stāvokļa, virziena un krāsas, ņemot vērā gaismas avota atrašanās vietu.

Dimensijas zaudēšana

Kad visas virsotnes ir izveidotas un 3D aina ar tām ir pabeigta, renderēšanas process virzās uz ļoti nozīmīgu posmu. Līdz šim spēle ir bijusi 3D, bet tai nav galīgā kadra. Tas nozīmē, ka jāveic virkne izmaiņu, lai pasauli pārvērstu no 3D telpas, kurā ir tūkstošiem savienotu punktu, par 2D attēlu no krāsainiem pikseļiem.

Kameras novietojums, skatot 3D ainu, ir vistālāk pa kreisi; līnijas, kas paplašinātas no šī punkta, rada četrstūra piramīdu, un viss, kas atrodas šajā piramīdā, var tikt parādīts pēdējā kadrā.

Lai gan grafiki skatpunktā parādās 2D, dati tajā joprojām ir faktiski 3D un šī informācija pēc tam tiek izmantota, lai noteiktu, kuri primitīvi (vienkāršākie ģeometriski objekti, kurus sistēma var apstrādāt) būs redzami vai pārklāsies. Tas var būt pārsteidzoši grūti izdarāms, jo primitīvi var mest ēnu spēlē.

Augstāk redzamajā attēlā parādīts ļoti vienkāršs kadra piemērs, kurā ir viens primitīvs. Režģis, ko veido rāmja pikseļi, tiek salīdzināts ar apakšā esošās formas malām, un tur, kur tie pārklājas, apstrādei tiek atzīmēts pikselis.  Gala attēlā redzamais trīsstūris neizskatās līdzīgs pirmajā attēlā redzamajam, jo netiek izmantoti pietiekami daudz pikseļi.

Pikseļu posms

Šis ir viens no vissarežģītākajiem posmiem. Šajā attēlā uz vienkāršas virsmas, kas tuvojas no attāluma, tiek uzklāta vienkārša pārbaudes faktūras karte. Rezultātā rodas juceklis. Lai to novērstu, tiek atkārtoti izmantoti dažādi dati, mazāku faktūru kartes un visai sarežģīti matemātiski risinājumi.

Kādreiz šis bija visai sarežģīts darbs, taču nu dažādi vizuālie efekti, kā piemēram, atspulgi un ēnas, to ir padarījuši par mazu procesa daļu no visas pikseļu apstrādes. Spēles ar augstāku izšķirtspēju rada lielāku darbu un lielāku slodzi renderēšanas procesā.

Šajā attēlā nevar tik viegli saskatīt krāsas izmaiņas starp trīsstūriem, radot iespaidu, ka tas ir gluds, viengabalains objekts. Šī lode patiesībā ir veidota no tādiem pašiem trīsstūriem, kā iepriekš redzētā zaļajā figūrā, taču pikseļu krāsošana rada iespaidu, ka tai ir ievērojami vairāk trīsstūri.

Dažām spēlēm pikseļu apstrādes posmu nepieciešams atkārtot vairākas reizes. Piemēram, ūdens virsmai, lai tā izskatītos reālāka, ir jārāda pasaules atspulgs, kas nozīmē, ka vispirms ir jārenderē pati pasaule un pēc tam tikai ūdens.

Procesa vadība: API un instrukcijas

Visu šo darbu veikšana un paraudzīšana ir milzu uzdevums. Lai to atvieglotu, ir izveidota lietojumprogrammu saskane jeb API (Application Programming Interface). API padara renderēšanu daudz vienkāršāku, piedāvājot gatavas struktūras.

Izmantojot dažādu aparatūru renderēšanai, struktūras un kodi var atšķirties. API 3D grafiku veidošanai izmanto trīs platformas – Direct3D, OpenGL un Vulkan.

Labs piemērs ir The Talos Principle spēle. Tā atbalsta visus 3 API, kas iepriekš minēti. Lai palielinātu atšķirības, ko dažreiz var radīt draiveru saskarņu kombinācija, maksimālajiem vizuālajiem iestatījumiem ar izšķirtspēju 1080p var izmantot standarta iebūvēto etalonu.

Spēļu izstrādātāji, protams, izvēlēsies API, ar kuru viņi ir vispieredzējušākie darbā un pamatojoties uz to, optimizēs savu kodu. Pilnīgas programmas izveide, sākot no nulles, veidojot 3D spēli, nav vienkārša. Tāpēc daudzas spēles licencē pilnas sistēmas no citiem izstrādātājiem.

Pareizās aparatūras izvēle

Visas rakstā apskatītās darbības, var aprēķināt un apstrādāt jebkuras datorsistēmas CPU (centrālais procesors). Modernie x86-64 procesori spēj veikt visas nepieciešamās matemātiskās darbības. Tomēr šāda darba veikšana, lai izveidotu vienu kadru, ietver daudz atkārtotu aprēķinu un prasa ievērojamu daudzumu paralēlas apstrādes. Šādi CPU īsti nav paredzēti šādam darbam, jo ir veidoti pārāk vispārīgi. 3D spēļu attēlu veidošanai nepieciešama specializēta aparatūra, kas darba procesu padarīs daudz ātrāku un pat visai patīkamu.

Avots: Techspot

Līdzīgi raksti

Atbildēt