Folosind o Atlas textura pentru optimizarea jocului

Timp. Luni. Poate de ani. V-ați petrecut timpul (o mulțime de timp) pentru a vă crea jocul. Mică sau mare, nu contează. Este jocul tău și acum vrei să-l împărtășești cu întreaga lume - și poate deveni faimos și bogat *. Este perfect: arta este bună și sunteți foarte mândru de ideea în interiorul jocului. Jocul tău.

Dar există o ultimă problemă pe care o aveți trebuie sa rezolva inainte de lansare. Nu, nu o problemă simplă. Problema: rata de cadre a jocului dvs. este scăzută. Foarte jos. Și asta înseamnă doar un singur lucru: trebuie să găsești o cale de ao rezolva. Trebuie. Și nu ai nici o idee cum.

Nu intră în panică: există un truc simplu care vă poate ajuta. Se numește "Atlasul texturii".

* Dacă devii bogat datorită acestui articol, vă rog să vă reamintiți. Mulțumesc mult!

Ce este Atlasul texturii?

Dacă vă apropiați de dezvoltarea unui joc video 3D pentru prima dată, veți începe să descoperiți că grafica 3D este compusă din mai multe părți: ochiuri 3D, texturi, sisteme de particule și multe alte elemente care de obicei sunt desenate pe ecran De 30 de ori pe secundă (în slang: 30 fps) în timpul procesului de redare, făcând lumea jocului variat și plin de viață.

Credeți sau nu, primele jocuri video 3D pe care le-am văzut în viața mea nu au avut niciunul din aceste elemente. Ele au fost compuse numai din linii care formează obiecte sau elemente în cadrul de sârmă 3D.

Scriind aceasta este cu siguranta ma face sa ma simt batran.

Înapoi la noi (cu adevărat, pentru dvs.) și la lucrurile importante, astăzi vom vorbi despre texturile interfeței cu utilizatorul (UI de mai jos) și, prin extensie, despre toate texturile din joc.

Într-un joc 3D, interfața utilizator este de obicei realizată din elemente 3D (cum ar fi avioane sau cutii) cu texturi.

Am menționat înainte de procesul de redare: este operația prin care elementele din memorie sunt desenate fizic pe ecran. Este printre cele mai complexe și mai costisitoare procese care apar într-un joc 3D în timp real. Apoi, este oportun să reduceți timpul necesar acestui proces; mai puțin timpul petrecut în faza de redare înseamnă o rată mai mare a cadrelor (adică dacă atingeți 60 fps puteți face imaginea de două ori și apoi vă gândiți să vă dezvoltați jocul și pentru VR) sau mai multe elemente de ecran (și apoi un joc mai bogat, mai mult animat, mai frumos).

Unul dintre mijloacele folosite pentru a reduce durata procesului de redare este o atlasă de textură: nu este nimic altceva decât o imagine care conține multe texturi.

Cum funcționează un Atlas de textură

Notă: După cum sa menționat în paragraful anterior, acest articol va discuta Atlasul texturii aplicat interfeței utilizator. Cu toate acestea, multe dintre conceptele explicate aici pot fi de asemenea aplicate modelelor 3D și texturilor lor.

O Atlas de textură, am spus, este o colecție de texturi în interiorul unei singure imagini.

Un atlas este, de obicei, asociat unui descriptor de fișiere, care indică jocului în care se află o textura (în anumite coordonate x și y), pentru ao prelua.

În funcție de sistemul pe care îl veți folosi pentru generarea și gestionarea Atlasului, veți avea mai multe sau mai puține opțiuni, cum ar fi distanța dintre imaginile care îl compun (reducerea riscului de artefacte de pe marginile texturii, cauzate de o suprapunere din două elemente) sau capacitatea de a roti elementele pentru a optimiza spațiul din interiorul Atlasului (spațiul optimizat înseamnă mai multe imagini în interiorul aceluiași Atlas).

Diferite moduri de a crea un atlas de textura

Există modalități diferite de a crea un Atlas. Un mediu complet de dezvoltare permite de obicei gestionarea internă a Atlasului; există, de asemenea, multe instrumente externe care oferă o mulțime de opțiuni suplimentare.

Alegerea sistemului pe care îl utilizați depinde în mod evident de preferințele dvs. personale. Aici explicăm două dintre acestea: Sprite Packer, intern pentru unitate și TexturePacker (un instrument independent, contra cost).

Sprite Packer

Pentru a deschide Sprite Packer, alegeți din meniu Fereastră> Sprite Packer.

Gestionarea este foarte ușoară: butonul Pack este utilizat pentru a crea unul sau mai multe Atlasuri (depinde de numărul de imagini și de dimensiunea Atlas pe care doriți să o utilizați).

Acum puteți selecta o imagine pentru a vedea unde se află în Atlas. Dacă adăugați sau eliminați imagini din proiect, trebuie să utilizați butonul Repachetare, pentru a actualiza Atlasul.

Pentru a configura Sprite Packer, puteți alege din meniu Editați> Setări proiect> Editor; aici puteți dezactiva Atlas-ul, activați-l doar pentru jocul construit sau întotdeauna porniți-l.

Pentru mai multe informații despre Sprite Packer, puteți verifica ghidul oficial.

Texture Packer

Texture Packer este un instrument independent folosit pentru a gestiona Atlas.

Puteți adăuga unul sau mai multe dosare din proiectul dvs., iar Adaptorul de texturi va crea Atlas.

După aceasta, puteți alege formatul de date pentru export. După cum puteți vedea, există și opțiunea "JSON for Unity". Aceasta înseamnă că puteți să exportați proiectul Atlas pentru proiectul Unity. Dar, pentru a le folosi împreună, trebuie să instalați o extensie gratuită a editorului din magazinul de materiale.

Pentru mai multe informații despre Texture Packer, puteți verifica ghidul oficial.

De ce este important să folosiți o Atlas de textură?

Dar de ce este atât de important să colectați mai multe imagini într-o singură imagine mai mare?

Să ne întoarcem pentru un moment procesului de redare: dacă fiecare element al interfeței UI are o textura separată, este desenată cu un "apel retras" separat. Aceasta înseamnă că, dacă în interfața noastră avem icoana inimilor (reprezentând energia jucătorului) și icoana monedelor colectate, vom avea două call-draw.

Fiecare apel de remiză are nevoie de timp pentru a fi finalizat, făcând procesul de redare mai lung și mai lung. Dacă există cinci elemente UI, în loc de două ca în exemplul de mai sus, există cinci apeluri de remiză.

Începeți să vedeți punctul?

Mai multe apeluri de tragere -> mai mult timp în timpul fazei de redare -> mai puțin fps -> joc cu o rată scăzută a cadrelor (cu unele picături de cadre) sau mai puține elemente pe ecran (apoi slab vizuale).

Pierderea apelurilor în acest fel, cu excepția cazului în care există motive speciale, nu are sens, mai ales pentru UI.

De fapt, toate texturile dintr-un Atlas vor fi redate împreună, într-o singură trecere.

Concluzie

În concluzie, mai ales dacă dezvoltați un joc pe o platformă în care performanța este foarte importantă (cum ar fi o platformă mobilă):

  • Trebuie să acordați atenție numărului de apeluri de remiză: mai multe apeluri de remiză înseamnă un timp de redare mai mare (și un timp de redare mai ridicat înseamnă riscul de a avea o rată scăzută a cadrelor).
  • În general, fiecare obiect cu o textura diferită poate genera un singur apel egal (este o declarație generică: există câteva excepții, mai ales în cazul obiectelor 3D).
  • O modalitate de a micșora numărul de apeluri de remiză este utilizarea unui atlas de textură.
  • O Atlas de textura este în principiu o textura mare cu un grup de texturi diferite.
  • Toate obiectele care utilizează același Atlas de textură generează un apel de remiză unică.
  • Mai ales pentru texturile UI, utilizarea unui Atlas de textura este o necesitate necesara pentru imbunatatirea performantei proiectului dumneavoastra.

Și ... poate ca forța să fie cu tine. Și codul tău. Mereu.