Oricare ar fi rezultatul Ghost Recon: Wildlands, un lucru în el este realizat cu exactitate: peisajul. Tipic pentru genul de jungle din joc sunt înlocuite cu vârfuri de munte cu vârf de zăpadă, deșerturi de sare și mlaștini.
Ghost Recon: Wildlands - cea mai mare lume de jocuri din tot ceea ce a creat vreodată Ubisoft. Acțiunea are loc în Bolivia, iar versiunea de joc a țării este formată din 11 "biomi" complet diferite. Râurile, lacurile și cursurile de apă ocupă 16 kilometri pătrați.
Practic, este un peisaj natural cu vegetație abundentă - copaci, arbuști și așa mai departe. Lungimea totală a drumurilor este de 600 de kilometri (fără a ține seama de numeroasele trasee).
În lumea jocurilor există o cărămidă de operare și 200 de locații: tabere, facilități speciale, avanposturi și 58 de sate complet generate de procedură.
Primul prototip
După Ghost Recon: viitorul soldat, am început să experimentăm peisaje mai mari. Am luat date topografice reale și le-am "condus" într-un fișier DEM pentru motorul nostru.
Apoi (cu ajutorul lui Houdini) am colectat instrumentele în următoarele scopuri:
1. Automatizarea creării de rețele LOD secrete.
2. Aranjarea punctelor de distribuție a vegetației cu respectarea condițiilor: înclinație, înălțime, densitate, distanța dintre copaci și așa mai departe.
3. Definiția măștii pentru distribuirea materialelor în conformitate cu regulile stabilite, în funcție de panta, înălțimea, rigiditatea și altele, precum și o altă mască pentru mașină care generează lumea jocurilor ca o diagramă de flux.
Prototipul, creat în câteva luni de patru designeri și un inginer grafic, a fost foarte interesant.
L-am fugit pe motorul Yeti, viitorul soldat. Rezultatele nu au fost rele, dar ne părea că ne-am limitat ambițiile și am mutat-o pe Anvil din seria Assassin's Creed.
Prototipul ne-a ajutat să realizăm două lucruri:
- Compensați pentru necesitatea ca tehnologia să creeze un peisaj care să fie ușor de învățat pentru designeri și să producă performanțe bune.
Houdini a fost suficient de flexibil și super-eficient: designerii tehnici ar putea să creeze propriile instrumente, fără a implica ingineri.
Modelarea cu GPU
într-o lume realistă și diversă. Această captură de ecran a fost făcută cu câteva luni înainte de aprobarea tehnologiei, iar pe ea vedeți ceva de genul ceea ce vrem să realizăm.
Aveam nevoie de un incredibil nivel de detaliu, vederi minunate în depărtare și o tranziție imperceptibilă între cele două state. Acum, dacă deșurubați setările grafice la plin, densitatea poate ajunge la zece texele pe centimetru, iar triunghiurile - câte una pentru fiecare două centimetri.
Deoarece un jucător din Wildlands poate merge oriunde, nivelul detaliilor ar trebui să fie același peste tot.
Instrumentele de editare afectează harta de înălțime, iar rezultatul este o țintă de redare flotantă, pe care shader-ul jocului o poate folosi direct.
Jocul este creat în mai multe cicluri, astfel încât dezvoltatorii ar trebui să aibă posibilitatea de a testa diferite idei despre motorul de joc, astfel încât să poată fi derulate rapid și fără durere. Pentru a face acest lucru, au folosit straturi.
Datele generate de mecanismul de creare a lumii jocurilor se află pe așa-numitul "strat de bază", iar fiecare schimbare se află pe propriul "macro strat". Deci, dacă modificările făcute sunt inutile, conținutul "stratului macro" poate fi ușor eliminat pentru a readuce harta înălțimii la starea inițială.
Iată o mică demonstrație a instrumentului de altitudine, care utilizează periile "copie / lipire" și "șterge".
Fiecare modificare făcută în Houdini a fost alocată unui strat separat. Acest proces va fi discutat mai detaliat mai jos, însă acum este suficient să observăm că, în consecință, designerii tehnici au reușit să schimbe peisajul așa cum ar dori și schimbările pe care le-au introdus au fost afișate corect.
Ultimul strat conține toate editările de nivel care nu puteau fi făcute cu Houdini.
Distribuția materialelor
Așa cum am menționat deja, în primul rând, dezvoltatorii au vrut să creeze o lume realistă cu o calitate grafică stabilă. Privind dimensiunea acestei lumi, ei și-au dat seama că nu ar fi posibil să atragă totul manual, iar procesul ar trebui să fie parțial automatizat. În special, ei au decis că materialele ar fi distribuite procedural.
Instrumentul de editare a peisajului a făcut posibilă modificarea hărții înălțime în funcție de direcția normalelor pentru a crea un teren mai precis. Era aproape de ajuns ca vârfurile munților să pară convingătoare de departe, dar dezvoltatorii au decis să-și dezvolte ideea.
În loc să demonstreze culoarea, jocul a arătat jucătorului un material complet, dar numai dacă anumite condiții bazate pe topologie, interferențe sau linii simple de cod pe care shader-ul pixelului le-ar putea gestiona în timp real au fost îndeplinite.
Imaginea de mai sus arată că fiecare setare în Wildlands constă într-o "grămadă" de condiții, respectarea cărora este evaluată secvențial, de jos în sus. Jucătorul vede materialul care corespunde cu ultima regulă din "grămadă".
Acum, designerii Ubisoft ar putea crea rapid scene, dar peste tranzițiile dintre ele era nevoie încă de multă muncă, ceea ce era problematic. Această problemă a fost rezolvată, condusă de aceeași filozofie a "condițiilor".
Rezultatul distribuirii materialelor este stocat în două texturi. Prima a fost numită "splatting" - conține indici de materiale pentru fiecare poziție din harta de înălțimi. Al doilea este "perspectivă", arată ca o captură de ecran din Google Maps. Atunci când părțile terenului scoase din player sunt redate, textura "perspectivă" este utilizată ca o hartă albedo.
Ar fi posibil să spargem peisajul în mici fragmente unice pentru a izola această zonă, dar atunci jocul ar ocupa prea mult spațiu. S-a rezolvat problema în felul următor: aceste fragmente sunt generate utilizând un shader computational, imediat ce apar în câmpul vizual.
Așadar, a fost posibil ca procesul să fie mai puțin pretențios pentru resursele calculatorului. Acum, aproximativ 80% din peisaj folosesc 4 materiale în loc de 12.
Apoi a apărut o nouă problemă cu rețeaua de drumuri. Generarea lor în același fel în care fragmentele peisajului erau foarte costisitoare din partea tehnică și dacă le păstrați pe un disc, este posibil ca jocul să nu se încadreze în Blu-ray.
Ca urmare, sa decis introducerea unui drum în peisaj, în loc să îl creeze din obiecte geometrice obișnuite, dar din acest motiv au apărut noi probleme, cum ar fi necesitatea de a crea o tranziție eficientă între materiale, și au fost obținute puține detalii pe drum.
La început, decalajele spațiului de ecran arătau promițătoare, dar în curând a devenit clar că cererea lor de resurse era prea limitată. În plus, nu au afectat topologia ochiurilor deformate.
Texturi virtuale
Pentru Wildlands, texturile virtuale au devenit o ocazie excelentă de a optimiza grafica - cu acestea amestecând materialele și toate proiecțiile de decalcomanii ar fi fost scurtate în prealabil. În plus, texturile virtuale au fost folosite de multe ori în alte jocuri, așa că toată lumea știa cum să lucreze cu ei.
Ca orice altă tehnică de redare, texturarea virtuală are dezavantajele sale. Din fericire, dezvoltatorii de la Ubisoft au reusit sa-l imbunatateasca.
În mod tipic, ce parte din textura virtuală este necesară este definită după cum urmează: scena este fragmentată în fragmente, iar materialul este proiectat pe o suprafață invizibilă pentru player folosind CPU-ul.
Această operație este complicată, mai ales dacă jocul este lansat pe un display de 4k. Mai mult, atunci când creați un peisaj, Wildlands utilizează tessellation și afișează o mulțime de triunghiuri mici - dacă utilizați un desen cu un singur buffer, cu o rezoluție mai mică, detaliile încep să împiedice.
Deci dezvoltatorii au adăugat o textura 3D suplimentară în stadiul de procesare prin Gbuffer. În timp ce peisajul este redat cu scanări UV și cantitatea de mop ca variabile de ieșire, secțiunea de textură virtuală afișată în player poate fi schimbată direct.
După aceea, shaderul de procesare procesează conținutul texturii și caută părțile lipsă. Rezultatele procesării (doar câteva octeți) sunt apoi transferate către CPU.
Pentru context: la cele mai înalte setări grafice, densitatea pixelilor în texturi virtuale atinge zece texele pe centimetru. Dacă toate acestea au fost calculate și comprimate anterior, ar fi nevoie de două petabyte de spațiu pe disc.
Prin urmare, conținutul este generat în cursul progresului jucătorului: materialele și decalcomantele "se amestecă" pe suprafețele invizibile și apoi se comprimă imediat prin calcule asincrone.
Apoi a apărut o nouă problemă: conectivitatea personalului a început să sufere, deoarece din cauza numărului mare de țigle prelucrate, rata cadrelor ar putea să scadă în mod considerabil în timp ce călătoresc pe transport. Prin urmare, actualizarea texturilor virtuale a fost împărțită în mai multe cadre, iar dezvoltatorii au petrecut mult timp găsind media aurului între o bună rată de actualizare a imaginii și o întârziere redusă înainte de apariția unei texturi complet calculate.
În final, au reușit să înlocuiască shader-ul primului ecran cu textură virtuală. Din fericire, această decizie a fost luată în stadiile incipiente ale dezvoltării, astfel încât stocul de memorie necesar să poată fi ajustat rapid. După cum puteți vedea din imaginea de mai sus, la o rezoluție de 1080p, texturile ocupă 200 megabytes și un gigabyte, dacă creșteți rezoluția la 4k.
Statistici de performanță pe Xbox One
În imagine - valorile medii, în mare măsură în funcție de natura scenei, dar putem spune cu certitudine că procesarea este în cele mai multe cazuri în 8 milisecunde. Compresia BC este paralelă.
Instrumente de procedură
Au existat multe cerințe pentru unelte. Acestea trebuiau folosite atât în lucrări la scară largă, cât și în cele mai mici - am repetat în mod constant că trebuie să controlam totul, de la cea mai mică piatră până la cea mai mare piatră.
De asemenea, specificul instrumentului a fost influențat de faptul că două echipe din Paris și Budapesta au lucrat la un nivel imens. În același timp, aveau nevoie de o oportunitate de a-și schimba deciziile, de a experimenta.
Instrumentele au devenit date: ele sunt create și stocate în același mod ca orice alte elemente din lumea jocurilor. Instrumentul este un fel de meta-entitate de joc care creează entități mai mici.
Și, cel mai important, cu ajutorul acestor instrumente a fost necesar să se efectueze o susținere zilnică a lumii jocului.
În primul rând, instrumentele dezvoltatorilor Wildlands se bazează pe condiții. Utilizatorii editează setările și modifică condițiile pentru a crea conținut. În al doilea rând, ele sunt deterministe: în aceleași condiții, același rezultat va fi întotdeauna obținut. În plus, cu ajutorul acestor instrumente, totul este creat numai în timpul dezvoltării jocului și nu în cursul sesiunii de joc.
Toate instrumentele au fost create utilizând Houdini.
Ce este Houdini? Această aplicație este pentru crearea de conținut digital de la SideFX. Acesta este adesea folosit pentru a crea efecte speciale, dar nu este cazul nostru - am folosit Houdini pentru a crea medii de lucru.
Pentru ce este? În primul rând pentru prototipuri - prin Houdini este foarte convenabil să experimentezi rapid idei. În al doilea rând, așa cum am menționat deja, au fost create instrumente cu ajutorul acestuia. Și Houdini foarte rapid pre-vizualizează și optimizează datele și oferă statistici convenabile.
De ce Houdini, nu instrumente în C ++ / GPU? Atât de repede. La elaborarea nu are nevoie să-și petreacă timpul cu toate instrumentele - este HDA (Digital Asset Houdini, Houdini active digitale), astfel încât acestea să facă cu ușurință modificările, și apoi o versiune modificată a instrumentului odată ce acesta devine disponibil pentru întreaga echipă. Da, instrumentele special create ar putea fi mai rapide, dar Houdini este atât de flexibil încât să compenseze unele pierderi de performanță.
Peisajul din Wildlands este fundamentul pentru orice altceva, deci în primul rând a trebuit să creați o coajă pentru a accesa datele peisajului. În imaginea de mai sus - un exemplu al unei părți a peisajului (500 de metri), transferat lui Houdini. Pentru ea, mai multe setări sunt deja disponibile, iar acesta este doar stratul de bază.
Același lucru, numai cu toate materialele. Există atât straturi prelucrate manual, cât și generate (ca și drumurile).
Diferite domenii ale lumii jocurilor au trebuit să fie umplute cu conținut și, pentru aceasta, au fost create și instrumente speciale. Geometria nu a fost generată prin ele direct - este ușor pentru designeri să aibă o modalitate convenabilă de a distribui cele existente.
Ca rezultat, aproximativ 80% din date au fost create sau prelucrate utilizând Houdini. Întrucât toate uneltele se bazează pe aceleași condiții, nivelul calității conținutului a rămas neschimbat.
Și designerii au economisit timp și s-ar putea concentra pe sarcini mai valoroase, care nu au putut fi rezolvate cu ajutorul instrumentelor automate. De exemplu, pentru a da sens lumii jocului sau pentru a crea parcele din elementele mediului de joc.
Fundația pentru tot
Acum, în detaliu despre modul în care restul straturilor au fost suprapuse pe peisaj.
Peisajul este mai mult decât înălțimile și textura texturilor. Dezvoltatorii au extrapolat informații foarte importante, care ar putea fi apoi reutilizate în alte instrumente. De exemplu, din datele de înălțime, a fost posibil să se extragă informații despre rigiditatea materialului și forma vârfului obiectului și sunt, de asemenea, utile în determinarea poziției pietrelor și a vegetației.
Procesul a fost oarecum automatizat. Deci, de fiecare dată când un utilizator modifică topologia unui peisaj, Houdini se ocupă de toate variabilele dependente. Fișierele cu date actualizate sunt trimise serverului, astfel încât acestea pot fi utilizate imediat în alte instrumente Houdini.
Deoarece totul este actualizat în zbor, nu este nevoie să creați și să testați diferite versiuni. În general, dezvoltatorii au refuzat să creeze versiuni și copii de rezervă și au fost foarte mulțumiți de rezultat.
După cum puteți vedea, drumurile și împrejurimile lor sunt generate procedural. Ca trasee, vegetație, roci. Ultimele două pietre mari au fost așezate manual, iar restul nu este, inclusiv îndoirea râului, plasa de apă și vectorul de curgere. Chiar sate - și acestea sunt generate.
Aceasta include calea ferată cu tuneluri și poduri.
Toate acestea funcționează pe o scară mai globală - drumurile sunt conectate, vegetația și satele sunt distribuite pe hartă și așa mai departe.
Drumurile sunt așezate astfel: punctele sunt identificate pe hartă, care apoi sunt legate procedural de autostrăzi, pe baza condițiilor specificate. Primele rezultate nu au fost rele, dar încă nu sunt suficiente.
Familiarizarea cu o lucrare științifică. dedicată generării de drumuri procedurale, dezvoltatorii au început să experimenteze cu un algoritm anizotrop pentru crearea unei căi scurte ponderate între două puncte. Rezultatul a întrunit toate așteptările - era necesar doar să nu lucreze cu patru direcții, ci cu o mulțime și cu distanțe diferite pentru fiecare direcție.
Este suficient să aranjăm mai multe puncte cheie pe teren și ...
se obține o rețea de drumuri și căi. Toate acestea sunt generate în avans, deoarece prelucrarea datelor legate de drumuri nu ia mult timp.
Datele rutiere constau din următoarele elemente:
1. Traiectorii care pot fi utilizate într-o varietate de alte lucruri, cum ar fi managementul traficului AI.
2. Terraformarea. Textura cu o hartă de înălțimi, care este apoi suprapusă peste peisaj.
3. Spatting. Aici veți obține o textură de mască pentru a actualiza datele materialelor de peisaj.
4. Poduri. Un algoritm pentru așezarea drumurilor poate duce la trecerea râurilor în cazul în care acesta este cel mai eficient traseu.
Dezvoltatorii au instrumentele necesare pentru a crea manual decalcomanii, linii electrice și garduri în jurul drumurilor, dar cu crearea unor sisteme automate de dirijare a rețelei de drumuri, au dat seama că acestea ar putea integra în ea toate elementele care înconjoară drumul, astfel încât acestea prea au fost plasate procedural.
Căile ferate funcționează în același mod, dar cu condiții de bază ușor diferite. Ei au mai puțină înclinație, turele sunt mai subțiri, mai multe poduri și tuneluri.
De asemenea, căile ferate trebuiau să se intersecteze cu drumurile convenționale strict sub un unghi de 90 de grade, pentru a nu crea probleme de trafic.
16 kilometri pătrați din lumea jocurilor sunt acoperite cu apă. Toate acestea - o plasă lungă, împărțită în parcele dintr-o zonă de un kilometru pătrat. Râurile și lacurile pot fi create folosind instrumentul de editare a peisajului. Dar fluxurile sunt mici, dar interesante, ele sunt generate folosind algoritmul de a stabili drumuri - punctele-cheie sunt vârfurile munților și locul de confluență în râu.
obiecte de apă sunt pe strat separat, astfel încât acestea a continuat sub drumuri - Curente Dezvoltatorii „herded“ în țeavă, și treceri de râu cu drumurile preferate pentru a aranja poduri. Deoarece traiectoriile fluxurilor (și, în unele cazuri, râurile) sunt generate procedural, această informație poate fi utilizată pentru a determina o hartă vectorială.
Settlement builder este unul dintre cele mai complexe instrumente. Conform planului dezvoltatorilor, pentru a crea un sat, ar fi trebuit să fie suficient pentru a specifica centrul de decontare, pentru a stabili un set de clădiri și parametrii lor. A fost nevoie de timp pentru a crea un astfel de instrument, dar în cele din urmă au reușit. Și a fost posibilă destul de devreme, astfel încât mai târziu designerii puteau adăuga individualități în satele generate.
Lucrări de demonstrație: