Puikus žaidimas Kompiuteryje žaidi naujausią „Call of Mario: Deathduty Battleyard“. Žiūrite į gražų 4K itin plataus ekrano monitorių, žavitės nuostabiu peizažu ir įmantriomis detalėmis. Ar kada susimąstėte, kaip ši grafika ten atsidūrė? Įdomu, ką daro jūsų kompiuteris, kad tai padarytų?

Sveiki atvykę į „101“ apie 3D žaidimų kūrimą: pradedančiųjų vadovą, kaip sukurti pagrindinę žaidimo gerumo sistemą.

Kasmet visame pasaulyje išleidžiama šimtai naujų žaidimų - vieni skirti mobiliesiems telefonams, kiti konsolėms, kiti kompiuteriams. Apimami formatai ir žanrai yra tokie pat plati, tačiau yra vienas žanras, kurį žaidimų kūrėjai atrado tikriausiai labiau nei bet kurį kitą žanrą: 3D. Pirmoji pirmosios diskusija ir greitas diskusijų nuskaitymas Gineso rekordai duomenų bazė generuoja įvairius atsakymus. Kaip vertą pradžią galėjome pasirinkti „Knight Lore by Ultimate“, išleistą 1984 m., Tačiau šiame žaidime sukurti vaizdai buvo griežtai 2D kalbomis - jokia naudojamos informacijos dalis nėra iš tikrųjų 3D.

Taigi, jei norime suprasti, kaip šiandieninis 3D žaidimas sukuria vaizdus, ​​mums reikia kitokio pradinio pavyzdžio: Laimėjęs bėgimas Nuo pat pradžių darydamas viską 3 dimensijose, tai buvo pirmasis tokio pobūdžio metodas, kuris galbūt nėra nutolęs nuo milijono mylių nuo to, kas vyksta dabar. Žinoma, visi vyresni nei 30 metų žaidimai nebus tokie patys kaip, pavyzdžiui, „Codemaster“ F1 2018, tačiau pagrindinė jų visų atlikimo schema nedaug skiriasi.







Šiame straipsnyje mes išnagrinėsime procesą, kurį vykdo 3D žaidimas, kad sugeneruotų pagrindinį vaizdą, kurį būtų galima rodyti monitoriui ar televizoriui. Pradėsime nuo išvados ir paklausime savęs: "Ką aš žiūriu?"

Mes analizuosime kiekvieną žingsnį, padarytą norint gauti matomą vaizdą. Kelyje apimsime programinę įrangą ir instrukcijas, tokias kaip viršūnės ir pikseliai, tekstūros ir perėjimai, buferiai ir šešėliai. Mes taip pat panagrinėsime, kur grafikos plokštė tinka visiems šiems tikslams ir kodėl ji reikalinga. Su šiuo 101 jūs pažvelgsite į savo žaidimus ir asmeninį kompiuterį naujoje šviesoje ir įvertinsite šią grafiką šiek tiek labiau žavėdamiesi.




Rėmelio matmenys: pikseliai ir spalvos

Pradėkime 3D žaidimą, todėl turime nuo ko pradėti ir tikriausiai naudosime 2007 m. „Crytek“ versiją be jokios priežasties, išskyrus vertingiausią visų laikų žaidimą. krizė. Žemiau esančiame paveikslėlyje ieškome žaidimą rodančio monitoriaus kameros vaizdo.




Šis paveikslėlis paprastai rėmasbet ką mes tiksliai žiūrime? Na, naudojant makro objektyvo kamerą, o ne žaidimo ekrano kopiją, CSI: TECHNINĖS NAUJIENOS ir pareikalauti, kad kažkas ją patobulintų!




Deja, ekrano akinimas ir fono apšvietimas lenkia vaizdo detales, bet jei dar šiek tiek patobulinsime ...




Matome, kad monitoriaus rėmelis susideda iš atskirų spalvotų elementų tinklelio, o jei pažvelgsime labai atidžiai, patys blokai susideda iš 3 mažų bitų. Nuo vieno iki trijų pikselių (paveikslėlio elemento santrumpa) ir dauguma monitorių juos nudažo trimis spalvomis: raudona, žalia ir mėlyna (dar vadinama RGB). Kiekvienam naujam monitoriaus rodomam kadrui reikia paruošti tūkstančių, jei ne milijonų, RGB reikšmių sąrašą ir išsaugoti monitoriui prieinamoje atminties vietoje. Tokio tipo atminties blokai vadinami tamponai, žinoma, į monitorių kadrų buferis.

Tai iš tikrųjų yra paskutinis punktas, nuo kurio pradėjome, todėl dabar turime pereiti į pradžią ir pereiti procesą, kad ten patektume. vardas tinkas jis dažnai naudojamas jam apibūdinti, tačiau tiesa ta, kad tai yra ilgas susietų, bet skirtingų etapų sąrašas, kurie vienas nuo kito skiriasi tuo, kuo yra. Pagalvokite apie tai, kad esate virėjas ir gaminate maistą, vertą „Michelin“ žvaigždutės restorano: rezultatas - skanaus maisto lėkštė, tačiau prieš užlipant į vidų reikia daug ką nuveikti. kai kurie pagrindiniai ingredientai.

Reikalingi statybiniai blokai: modeliai ir tekstūros

Pagrindiniai bet kurio 3D žaidimo elementai yra vizualinis turtas, kuris užpildys sukurtą pasaulį. Visiems filmams, TV laidoms, teatro pastatymams ir panašiai reikia aktorių, kostiumų, rekvizitų, fono, šviesų - sąrašas yra gana didelis. 3D žaidimai niekuo nesiskiria ir visa tai, kas matoma sukurtoje sistemoje, sukurs menininkai ir modeliuotojai. Norėdami tai vizualizuoti, eikime į senąją mokyklą ir pažvelkime į „Software Quake II“ tapatybės modelį:

Prieš 20 metų išleista „Quake II“ buvo technologinė kelionių jėga, kaip ir bet kuris dvidešimties metų 3D žaidimas, nors teisinga sakyti, kad modeliai atrodė šiek tiek blokuoti. Tačiau tai leidžia lengviau suprasti, kodėl šis subjektas buvo sukurtas.

Pirmajame paveikslėlyje galime pamatyti, kad stambusis draugas suformuoja sujungtus trikampius - kiekvienas jų vadinamas viršūnėmis. kampas arba vieno iš jų pikas. Kiekviena viršūnė veikia kaip taškas erdvėje, todėl jai apibūdinti turi mažiausiai 3 skaičius, t. x, y, z koordinatės. Tačiau 3D žaidimui reikia ne tik to, ir kiekviena viršūnė turės tam tikrą papildomą vertę, pavyzdžiui, viršūnės spalvą, kryptį, kuria jis yra nukreiptas (taip, taškai iš tikrųjų negali niekur atrodyti ... tiesiog riedėkite su juo!), Koks jis ryškus, permatomas. ar ne, ir pan.

Tam tikras vertybių rinkinys, kurį visada turi viršūnės, tekstūros žemėlapiai. Tai yra „drabužių“, kuriuos turėtų dėvėti modelis, nuotrauka, tačiau kadangi tai yra paprastas vaizdas, žemėlapyje turėtų būti rodoma kiekvienos įmanomos krypties, kuria mes galime pažvelgti į modelį, vaizdas. Mūsų „Quake II“ pavyzdyje galime pamatyti, kad tai gana paprastas požiūris: priekis, galas ir šonai (rankos). Šiuolaikiniame 3D žaidime iš tikrųjų bus keli modelių tekstūros žemėlapiai, kurių kiekvienas bus pilnas detalių; Kai kurie žemėlapiai nėra panašūs į medžiagas ar ypatybes, tačiau pateikia informaciją apie tai, kaip šviesa atsimuš į paviršių. Kiekvienoje viršūnėje bus koordinačių rinkinys susietame modelio tekstūros žemėlapyje, kad jį būtų galima „sujungti“ viršūnėje - tai reiškia, kad jei viršūnė yra judinama, tekstūra juda kartu su ja.

Taigi 3D atvaizduotame pasaulyje viskas matoma prasidės kaip kampiniai taškai ir tekstūros žemėlapių kolekcija. Jie sugretinami į tarpusavyje susietus atminties buferius - a kampinis buferis yra informacijos apie kampus; vienas katalogo buferis tai mums parodo, kaip kampai yra sujungti su formos pavidalais; vienas suvirinimo buferis yra atminties audinių ir dalių, rezervuotų vėlesniam panaudojimui perteikimo procese; vienas komandos buferis Nurodymų, ką daryti su visais, sąrašas.

Tai sukuria reikiamą rėmelį, kuris bus naudojamas kuriant galutinį spalvotų pikselių tinklelį. Kai kuriems žaidimams gali būti didžiulis duomenų kiekis, nes būtų labai lėta atstatyti kiekvieno naujo kadro buferius. Žaidimai saugo visą informaciją, reikalingą visam potencialiai matomam pasauliui sukurti, saugo buferiuose arba apima įvairiausias peržiūras ir tada prireikus atnaujina. Pavyzdžiui, lenktynių žaidime, pavyzdžiui, „F1 2018“, viskas bus didelėje buferių kolekcijoje, o atviro pasaulio žaidimas, pvz., „Bethesda“ „Skyrim“, perkels duomenis į buferius ir iš jų, kai kamera juda aplink pasaulį.

Scenos redagavimas: Aukščiausioji scena

Turėdamas visą turimą vaizdinę informaciją, žaidimas bus pradėtas apdoroti, kad būtų rodomas vizualiai. Visų pirma, scena prasideda numatytoje padėtyje, visi iš esmės išdėstyti modeliai, žibintai ir kt. Tai bus „nulio“ kvadratas - tai yra grafikų pradžios taškas ir paprastai jis nėra rodomas, o tiesiog pateikiamas, kad viskas vyktų toliau. Norėdami padėti parodyti, kas vyksta pradiniame kūrimo etape, „Real Time Rendering“ svetainė. Atidarykime jį labai paprastu „žaidimu“: stačiakampiu ant žemės.

Šioje konkrečioje formoje yra 8 viršūnės, kurių kiekviena paaiškinta per skaičių sąrašą, ir jos sudaro modelį, kuriame yra 12 trikampių. Net trikampis ar visas daiktas primityvus. Judant, pasukant ir keičiant šiuos pradmenis, skaičiai praeina matematikos operacijų seriją ir atitinkamai atnaujinami.

Atkreipkite dėmesį, kad modelio taškų skaičiai nesikeičia, tik reikšmės nurodo pasaulio vietą. Atitinkamos matematikos įtraukimas nepatenka į šio 101 taikymo sritį, tačiau svarbi šio proceso dalis yra viskas, kas turėtų būti pirmiausia. Tada atėjo laikas dažyti.

Panaudokime kitą modelį, kurio kampų skaičius daugiau nei 10 kartų viršijo ankstesnį stačiakampį kraštą. Pats paprasčiausias spalvų perteikimo tipas paima kiekvienos viršūnės spalvą ir paskaičiuoja, kaip paviršiaus paviršius keičiasi tarp jų; jis žinomas kaip interpolasyon.

Turint daugiau kampų modelyje, ne tik realistiškiau matoma, bet ir gaunama geresnių rezultatų naudojant spalvų interpoliaciją.

Šiame perteikimo sekos etape galima išsamiai ištirti šviesų poveikį scenai; Pavyzdžiui, galima pristatyti, kaip modelio medžiagos atspindi šviesą. Atliekant tokius skaičiavimus reikia atsižvelgti į pasaulį matančios kameros padėtį ir kryptį, taip pat į žibintų padėtį ir kryptį.

Čia galima naudoti daugybę skirtingų matematikos metodų; kai kurie yra paprasti, kiti yra labai sudėtingi. Aukščiau esančiame paveikslėlyje matome, kad dešinėje esantis procesas duoda gražesnius ir tikroviškesnius rezultatus, tačiau nenuostabu, kad dirbti reikia ilgiau.

Šiuo metu verta paminėti, kad mes žiūrime į objektus, kuriuose yra keli kampiniai taškai, palyginti su naujausiu 3D žaidimu. Grįžkime šiek tiek atgal į šį straipsnį ir atidžiai peržiūrėkite „Crysis“ vaizdą: vien šioje scenoje yra daugiau nei milijonas trikampių. Mes galime vizualiai suprasti, kiek trikampių stumiama šiuolaikiniame žaidime. „Unigine's Valley“ palyginimas (parsisiųsti).

Kiekvienas šio atvaizdo objektas yra modeliuotas sujungtomis viršūnėmis, todėl jie daro primityvus, susidedančius iš trikampių. Palyginimas leidžia paleisti vielos rėmo režimą, kuris leidžia programai kiekvieno trikampio kraštus perteikti ryškiai balta linija.

Medžiai, augalai, uolos, žemė, kalnai - jie visi yra pagaminti iš trikampių, kiekvienas apskaičiuojamas pagal jo vietą, kryptį ir spalvą, atsižvelgiant į šviesos šaltinio padėtį ir kameros padėtį bei kryptį. Bet kokius kampų pakeitimus reikia grąžinti į žaidimą, kad jis žinotų, kur viskas yra, kad būtų sukurtas kitas kadras; tai daroma atnaujinant viršūnės buferį.

Keista, kad tai nėra sudėtinga kūrimo proceso dalis, o turint tinkamą aparatūrą viskas baigiasi vos tūkstantąja sekundės dalimi! Į kitą etapą.

Prarasti dimensiją: rastravimas

Kai visi kampai bus įveikti ir mūsų 3D scena bus baigta ten, kur viskas turėtų būti, perteikimas pereis į lemiamą etapą. Iki šiol žaidimas iš tikrųjų buvo trimatis, bet ne galutinis kadras - tai reiškia, kad reikia atlikti daugybę pakeitimų, kad rodomas pasaulis būtų paverstas iš 3D erdvės, kurioje yra tūkstančiai sujungtų taškų, į 2D drobę su atskirais spalvotais pikseliais. . Daugeliui žaidimų šis procesas apima bent du veiksmus: ekrano srities projekcija ve pikselių.

Dar kartą naudodamiesi žiniatinklio atvaizdavimo įrankiu galime priversti jį parodyti, kaip pasaulio tūris iš pradžių transformuojamas į plokščią vaizdą. Kamera, stebinti 3D sceną, yra kairiajame kampe; linijos, besitęsiančios už šio taško, frustum (kaip tam tikra piramidė) ir viskas, kas yra frustum, potencialiai gali pasirodyti paskutiniame kadre. Šiek tiek kelio iki „Frustum“ Peržiūrėti, - iš tikrųjų tai parodys monitorius, o visa kamštis matematikos naudojama tam, kad viskas, kas yra frustume, būtų nukreipta į matymo lauką iš fotoaparato perspektyvos.

Nors peržiūros srities grafika atrodo 2D, viduje esantys duomenys vis tiek yra trimačiai, ir ši informacija naudojama tada nustatyti, kurie primityviai bus matomi ar sutaps. Tai padaryti gali būti stebėtinai sunku, nes primityvus gali mesti šešėlį, kuris matomas žaidime, net jei jis negali būti primityvus. Tai vadinama primityvių panaikinimu skerdimas ir tai gali reikšmingai pakeisti viso kadro pateikimo greitį. Tai atlikus - surūšiuojant matomus ir nematomus primityvus, užrišant trikampius už mano krūtinės ląstos ir t. - Baigiamasis 3D etapas uždaromas ir rasterizuojant kadras tampa visiškai 2D.

Aukščiau pateiktame paveikslėlyje pateikiamas labai paprastas pagrindo, kuriame yra primityvus, pavyzdys. Rėmelio pikselių tinklelis lyginamas su žemiau esančios formos kraštais, o ten, kur jie sutampa, atvaizdavimui yra pažymėtas pikselis. Parodyto pavyzdžio rezultatas nėra labai panašus į pradinį trikampį, tačiau mes nenaudojame pakankamai taškų. Dėl to kilo ši problema: sutapti, nors yra daug būdų tai spręsti. Štai kodėl sprendimas Tai daro didžiulę įtaką žaidimo (viso kadre naudojamų taškų skaičiaus) išvaizdai: taškai ne tik geriau atspindi primityvų formą, bet ir sumažina nepageidaujamo slapyvardžio poveikį.

Kai ši atvaizdavimo sekos dalis bus baigta, ji priklausys nuo didžiosios: galutinės visų rėmelio pikselių spalvos.

Atneškite žiburius: taškų pakopa

Dabar mes priėjome sunkiausią iš visų pateikimo grandinės etapų. Prieš daugelį metų tai buvo ne kas kita, kaip modelio drabužiai (taip pat žinomi kaip tekstūros) buvo apvilkti pasaulio objektais, naudojant informaciją pikseliais (iš pradžių iš kampų). Problema yra ta, kad nors faktūros ir rėmas yra 2D, pasaulis, prie kurio jie yra pritvirtinti, yra sulenktas, perkeltas ir pertvarkytas viršutiniame etape. Tačiau tam paaiškinti naudojama daugiau matematikos, nors rezultatai gali sukelti keistų problemų.

Šiame paveikslėlyje paprastas šaškių lentos tekstūros žemėlapis pritaikomas ant lygaus paviršiaus, besitęsiančio į tolį. Rezultatas - nerami netvarka su slapyvardžiu, ataugančiu negražią galvą. Sprendime yra mažesnės tekstūros žemėlapių versijos ( Derinimas), pakartotinis šių audinių duomenų naudojimas ( filtravimas), Ir netgi Daugiau matematika, visa tai sujungiant. To poveikis yra akivaizdus:

Anksčiau tai buvo tikrai sunki užduotis bet kuriam žaidimui, tačiau nebe todėl, kad liberalus kitų vaizdinių efektų, tokių kaip atspindžiai ir šešėliai, naudojimas reiškia, kad tekstūrų perteikimas tampa palyginti maža pikselio dalimi. apdorojimo etapas. Žaidžiant didesne skiriamąja geba, rasterizacijos ir pikselių atkūrimo fazėse sukuriamas didesnis darbo krūvis, tačiau piko metu - palyginti nedaug. Nors dėl šviesų pradinis dažymas atliekamas piko metu, čia taip pat galima naudoti ryškesnius šviesos efektus.

Aukščiau pateiktame paveikslėlyje nebegalime lengvai pamatyti spalvų pokyčių tarp trikampių, todėl susidaro įspūdis, kad tai yra lygus, vientisas objektas. Šiame konkrečiame sferoje iš tikrųjų yra tas pats trikampių skaičius, kurį mes matome. žalias gaublys anksčiau tačiau dėl taškų dažymo įpročio susidaro įspūdis, kad jame yra daug daugiau trikampių.

Daugelyje žaidimų pikselių etapą reikia paleisti kelis kartus. Pvz., Veidrodis ar ežero paviršius, atspindintis žemę, žiūrint iš kameros, turi būti apdirbtas, kad žemė galėtų prasidėti. Kiekvieno perėjimo pavadinimas praeiti ir viename kadre gali būti 4 ar daugiau perėjimų, kad būtų sukurtas galutinis vaizdas.

Kartais kalno sceną taip pat reikia perbraižyti, kad pasaulį būtų galima nupiešti iš kitos perspektyvos ir naudoti šį vaizdą kaip žaidėjo rodomos scenos dalį. Už tai nusistatyti tikslus - buferiai, kurie veikia kaip galutinė kadro saugykla, tačiau gali būti naudojami kaip tekstūra kitame leidime.

Skaitykite toliau, kad geriau suprastumėte galimą pikselių etapo sudėtingumą Kadro analizė, kurią atliko Adrianas Courrègesas ir šiame žaidime jus nustebins neįtikėtini žingsniai, reikalingi norint sukurti vieną kadrą.

Visą šį rėmelio darbą reikia išsaugoti buferyje kaip galutinį rezultatą arba kaip laikiną saugyklą, ir apskritai žaidime kelyje bus bent du buferiai, norint gauti galutinį vaizdą: vienas „bus darbas“, o kitas laukia, kol monitorius pasieks ekraną arba bus rodomas ekrane. Visada turi būti kadrų buferis, kurį reikia sukurti, taigi, kai jie visi pilni, reikia imtis veiksmų norint perkelti daiktus ir pradėti naują buferį. Paskutinė rėmelio pasirašymo dalis yra paprasta komanda (pvz., prieinama) ir vis dėlto keičiami paskutiniai kadrų buferiai, monitorius gauna paskutinį pateiktą kadrą ir galima pradėti kitą kadrą.

Šiame paveikslėlyje iš „Ubisoft“ „Assassin's Creed Odyssey“mes žiūrime į gatavo kadro buferio turinį. Pagalvokite apie tai kaip su skaičiuokle su eilutėmis ir stulpeliais. Šios vertės siunčiamos į monitorių ar televizorių kaip elektrinis signalas, o ekrano taškų spalva pakeičiama į reikalingas reikšmes. CSI: TECHNINĖS NAUJIENOS Kadangi negalime to padaryti savo akimis, matome plokščią, ištisinį vaizdą, bet savo smegenis gylis - taip 3D. Tai žaidimo gerumo pagrindas, tačiau kai tiek daug vyksta užkulisiuose (atsiprašau kalambūro), verta pasidomėti, kaip programuotojai viską tvarko.

Proceso valdymas: API ir instrukcijos

Suprasti, kaip žaidimas atliks ir valdys visus šiuos pratimus (matematikos, kampų, tekstūrų, žibintų, buferių, pavadink tai ...), yra mamuto užduotis. Laimei, yra pagalbos, ką pasakyti Taikomųjų programų programavimo sąsaja arba API trumpai.

„Build“ API sumažina bendrą sudėtingumą pateikdami struktūrų, taisyklių ir kodų bibliotekas, leidžiančias programuotojams naudoti supaprastintas instrukcijas, nepriklausančias nuo jokios aparatinės įrangos. Pasirinkite bet kurį 3D žaidimą, išleistą per pastaruosius 3 metus kompiuteriui, ir jis bus sukurtas naudojant vieną iš trijų garsių API: „Direct3D“, „OpenGL“ arba „Vulkan“. Yra ir kitų, ypač mobiliųjų, bet mes laikysimės šio straipsnio.

Nors instrukcijų ir operacijų teiginių yra skirtumų (pvz., Kodo blokas, skirtas manipuliuoti pikseliais „DirectX“, pikselių šešėlis; Vulkanas dalis šešėlinė), galutinis sukurto kadro rezultatas neturėtų būti kitoks ar labiau skirtingas.

Bus skirtumas, kur nukris visa atvaizdavimui naudojama aparatūra. Taip yra todėl, kad reikia išversti instrukcijas, pateiktas naudojant API aparatinei įrangai atlikti - tai tvarko įrenginio tvarkyklės, o aparatūros gamintojai turi skirti daug išteklių ir laiko, kad vairuotojai kuo greičiau ir tiksliau atliktų konversiją. įmanoma.

Panaudokime ankstesnę „Croteam“ 2014 m. Žaidimo beta versiją „Talos“ principas Norėdami tai iliustruoti, nes jis palaiko 3 mūsų minėtas API. Norėdami padidinti skirtumus, kuriuos kartais gali sukelti tvarkyklės ir sąsajos derinys, mes atlikome standartinį integruotą etaloną 1080p raiška, maksimaliai regėdami. Naudojamas kompiuteris buvo paleistas numatytomis valandomis, jame buvo „Intel Core i7-9700K“, „Nvidia Titan X“ („Pascal“) ir 32 GB DDR4 RAM.

  • „DirectX 9“ = vidutiniškai 188,4 fps
  • „DirectX 11“ = vidutiniškai 202,3 fps
  • „OpenGL“ = vidutiniškai 87,9 fps
  • Vulkanas = vidutiniškai 189,4 fps

Išsami šių skaičių išvadų analizė nepatenka į šio straipsnio taikymo sritį, ir tai tikrai nereiškia, kad viena API yra „geresnė“ už kitą (tai yra beta versija, atminkite), todėl „skirtingų API programavimas kelia įvairių iššūkių ir šiuo metu yra atkreipia dėmesį į tai, kad našumas visada pasikeis. Paprastai žaidimų kūrėjai pasirinks API, su kuria dirba labiausiai, ir tuo pagrindu optimizuos savo kodą. Kartais žodis variklis Jis naudojamas atvaizdavimo kodui apibūdinti, tačiau techniškai variklis yra visas paketas, tvarkantis visus žaidimo aspektus, ne tik jo grafiką.

Sukurti visą programą nuo nulio, norint sukurti 3D žaidimus, nėra paprastas dalykas, todėl daugelis žaidimų šiandien licencijuoja visas kūrėjų sistemas (pvz.,. Nerealus variklis); Idėją apie mastą galite sužinoti peržiūrėję atvirojo kodo variklį. „Id“ programinės įrangos žemės drebėjimas ir naršykite failą gl_draw.c - šiame vienintelyje elemente pateikiamos instrukcijos apie įvairius žaidimo kūrimus ir jis atspindi tik nedidelę viso variklio dalį. Žemės drebėjimas yra daugiau nei 20 metų ir visas žaidimas (įskaitant visus elementus, garsus, muziką ir kt.) jis yra 55 MB dydžio; skirtingai nei „Ubisoft“ „Far Cry 5“ suma tik šešėliai, kuriuos žaidimas naudoja 62 MB faile.

Laikas yra viskas: naudojant tinkamą aparatūrą

Viską, ką aprašėme iki šiol, gali apskaičiuoti ir apdoroti bet kurios kompiuterinės sistemos centrinis procesorius; šiuolaikiniai x86-64 procesoriai lengvai palaiko visą reikalingą matematiką, ir šiems dalykams yra skirtos dalys. Tačiau norint atlikti šį darbą, reikia sukurti daugybę pasikartojančių skaičiavimų ir reikalauti daug lygiagrečiai apdoroti. Centriniai procesoriai nėra tam sukurti, nes pagal jų dizainą jie yra per daug bendri. Žinoma, vadinami specialūs lustai, skirti tokio tipo darbams GPU'lar (grafikos apdorojimo įrenginiai) ir matematika, pvz., „DirectX“, „OpenGL“ ir „Vulkan“, sukurta taip, kad matematika būtų atliekama labai greitai ir daugiausia lygiagrečiai.

Vienas iš būdų tai įrodyti yra naudoti etaloną, kuris leidžia mums sukurti rėmą naudojant procesorių ir tada naudoti pasirinktinę aparatinę įrangą. Mes naudosime V spindulį ADVANCED by Chaos Group; Šis įrankis iš tikrųjų atlieka spindulių sekimą, o ne vaizdavimą, kurį žiūrime šiame straipsnyje, tačiau daugumai strigčių reikia panašių aparatūros aspektų.

Norėdami suprasti skirtumą tarp to, ką gali atlikti procesorius ir ką gali padaryti tinkama, specialiai sukurta aparatūra, mes atlikome „V-ray GPU“ palyginimą 3 režimais: tik CPU, tik GPU ir tada CPU + GPU. Rezultatai yra gana skirtingi:

  • Tik procesoriaus testas = 53 matematika
  • Tik GPU testas = 251 matematika
  • CPU + GPU testi = 299 mpath

Kadangi 5x produkcijos skirtumas nėra nereikšmingas, šiame palyginime galime nepaisyti matavimo vienetų. Bet tai nėra labai į žaidimą panašus testas, todėl pabandykime ką nors kita ir eikime į senąją mokyklą. „Futuremark“ 3DMark03. Taikydami paprastą „Wings of Fury“ testą, mes galime priversti atlikti visus kampinius šešėlius (t. Y. Visas įprastas spalvų trikampių judėjimo ir darymo procedūras) naudodami procesorių.

Rezultatas tikrai neturėtų stebinti, bet vis tiek yra daug ryškesnis nei tai, ką matėme atlikdami rentgeno spindulių testą:

  • Procesoriaus piko šešėliai = 77 fps vidurkis
  • GPU kampų šešėliai = vidutiniškai 1580 kadrų per sekundę

Kol procesorius atliko visus viršūnių skaičiavimus, kiekvienam kadrui rodyti ir rodyti prireikė vidutiniškai 13 milisekundžių; Nustačius šią matematiką į GPU, šis laikas sutrumpėja iki 0,6 milisekundės. Kitaip tariant, tai buvo 20 kartų greičiau.

Jei išbandysime sudėtingiausią palyginimą, motiną gamtą, skirtumas yra dar ryškesnis. Su CPU pateiktais piko šešėliais vidutinis rezultatas buvo 3,1 fps! Atsineškite GPU, o vidutinis kadrų dažnis padidėja iki 1388 kadrų per sekundę: maždaug 450 kartų greičiau. Atkreipkite dėmesį, kad dabar „3DMark03“ yra 16 metų ir testas atlieka tik procesoriaus kampus - rastravimas ir taškų fazė vis dar atliekami per GPU. Kas būtų, jei jis būtų modernus ir viskas būtų atlikta programine įranga?

Pabandykime „Unigine“ slėnis vėlgi palyginimo įrankis - palyginti nauja, perteikianti grafiką, labai panašią į matomą tokiuose žaidimuose kaip „Ubisoft“ „Far Cry 5“; Be standartinės „DirectX 11“ GPU magistralės, jis taip pat teikia visą programinės įrangos atvaizdavimo priemonę. Rezultatai nereikalauja daug analizės, tačiau naudojant žemiausios kokybės „DirectX 11“ testo versiją su GPU vidutiniškai buvo 196 kadrai per sekundę. Programinės įrangos versija? Keletas gedimų atmetus, galingas bandomasis kompiuteris vidutiniškai ištraukia 0,1 kadro per sekundę - beveik du tūkstančiai kartų lėčiau.

Tokio skirtumo priežastis slypi matematikos ir duomenų 3D atvaizdavimo formose. Procesoriuje slankiojo kablelio vienetai (FPU) atlieka skaičiavimus kiekvienoje šerdyje; Bandomojo kompiuterio „i7-9700K“ modelyje yra 8 branduoliai su dviem FPU. Nors „Titan X“ vienetai yra skirtingo dizaino, abu gali atlikti tą pačią pagrindinę matematiką tuo pačiu duomenų formatu. Šis konkretus GPU turi daugiau nei 3500 vienetų, kad būtų galima atlikti palyginamą skaičiavimą, ir nors laikrodis nerodomas niekur netoli tos pačios vietos kaip ir procesorius (1,5 GHz vs 4,7 GHz), GPU aplenkia centrinį procesorių skaidrių vienetų skaičiumi.

Nors „Titan X“ nėra bendroji vaizdo plokštė, net ir biudžetinis modelis pranoksta bet kurį procesorių, todėl visi 3D žaidimai ir API yra skirti specialiai tam skirtai aparatinei įrangai. Nesivaržydami atsisiųskite „V-ray“, „3DMark“ ar bet kurį „Unigine“ etaloną ir išbandykite savo sistemą - paskelbkite rezultatus forume, kad pamatytumėte, kokie geri GPU yra grafiniai vaizdai žaidimuose.

Keletas paskutinių žodžių mūsų 101 puslapyje

Tai buvo trumpas tyrimas, kaip kvadratas atvaizduojamas 3D žaidime, nuo taškų erdvėje iki spalvotų pikselių monitoriuje.

Pagrindiniu lygiu visas procesas yra ne kas kita, kaip darbas su skaičiais, nes vis tiek tai daro visas kompiuteris. Tačiau šis straipsnis palieka daug dėmesio sutelkti į pagrindus (tikriausiai toliau gilinsimės į tai, kaip vėliau kuriama kompiuterinė grafika). Mes neįtraukėme jokios tikrosios matematikos, tokios kaip Euklido tiesinė algebra, trigonometrija ir diferencialinis skaičiavimas, kurį atlieka šaknies ir pikselio šešėliai; Mes paaiškinome, kaip faktūros apdorojamos naudojant statistinę imtį, ir atmetėme puikius vizualinius efektus, tokius kaip ekrano erdvės aplinkos okliuzija, spindulių pėdsakų triukšmo mažinimas, didelio dinaminio diapazono rodymas ar laikinas anti-aliasing.

Bet kai paleisite kitą „Call of Mario: Deathduty Battleyard“, pamatysite ne tik grafiką su nauju nuostabos jausmu, bet ir niežėsite sužinoti daugiau.