Tid. Måneder. Kanskje år. Du har brukt tid (mye tid) for å skape ditt spill. Liten eller stor, det spiller ingen rolle. Det er ditt spill, og nå vil du dele det med hele verden - og kanskje bli kjent og rik *. Det er perfekt: kunsten er god, og du er veldig stolt av ideen din inne i spillet. Ditt spill.
Men det er et siste problem som du må løse før utgivelsen. Nei, ikke et enkelt problem. Problemet: Rammefrekvensen for spillet ditt er lavt. Veldig lav. Og det betyr bare en ting: du må finne en måte å fikse det på. Du må. Og du har ingen anelse om hvordan.
Ikke panikk: det er et enkelt triks som kan hjelpe deg. Det kalles en "Texture Atlas".
* Hvis du blir rik takk for denne artikkelen, vennligst husk meg. Tusen takk!
Hvis du nærmer deg utviklingen av et 3D-videospill for første gang, begynner du å oppdage at 3D-grafikk består av flere deler: 3D-masker, teksturer, partikkelsystemer og mange andre elementer som vanligvis trekkes på skjermen 30 ganger per sekund (i slang: 30 fps) under gjengivelsesprosessen, noe som gjør spillets verden variert og livlig.
Tro det eller ikke, de første 3D-videospillene jeg så i livet, hadde ingen av disse elementene. De var kun sammensatt av linjer som dannet objekter eller elementer i 3D wireframe.
Å skrive dette gjør at jeg føler meg gammel.
Tilbake til oss (faktisk til deg) og de viktige tingene, i dag snakker vi om teksturene i brukergrensesnittet (brukergrensesnittet heretter) og, i forlengelse, om alle teksturer i spillet.
I et 3D-spill er brukergrensesnittet vanligvis laget av 3D-elementer (som fly eller bokser) med teksturer.
Vi nevnte før gjengivelsesprosessen: det er operasjonen der elementene i minnet blir fysisk tegnet på skjermen. Det er blant de mest komplekse og dyre prosessene som skjer i et sanntids 3D-spill. Da er det noe som er hensiktsmessig å redusere tiden som er tatt av denne prosessen. mindre tid brukt i gjengivelsesfasen betyr en høyere bildefrekvens (dvs. hvis du når 60 fps kan du gjøre bildet to ganger og deretter tenke på å utvikle spillet ditt også for VR), eller flere skjermelementer (og deretter et rikere spill, mer animert, vakrere).
En av metodene som brukes til å redusere varigheten av gjengivelsesprosessen, er en teksturatlas: det er ikke noe mer enn et bilde som inneholder mange teksturer.
Merk: Som nevnt i forrige avsnitt, vil denne artikkelen diskutere Texture Atlas som er brukt til brukergrensesnittet. Imidlertid kan mange av begrepene som er forklart her, også brukes til 3D-modeller og deres teksturer.
En Texture Atlas, sa vi, er en samling av teksturer i et enkelt bilde.
En Atlas er vanligvis knyttet til en filbeskrivelse, som indikerer for spillet hvor en tekstur er (i bestemte x- og y-koordinater), for å hente den.
Avhengig av hvilket system du vil bruke til å generere og administrere Atlasen, vil du ha flere eller mindre alternativer, som for eksempel avstanden mellom bildene som komponerer den (reduserer risikoen for gjenstander på kantene på tekstur, forårsaket av en overlapping av to elementer), eller evnen til å rotere elementene for å optimalisere plassen inne i Atlasen (mer optimalisert plass betyr flere bilder i samme Atlas).
Det finnes forskjellige måter å lage en Atlas på. Et komplett utviklingsmiljø tillater vanligvis den interne styringen av Atlas; Det finnes også mange eksterne verktøy som gir mange ekstra muligheter.
Valget av hvilket system som skal brukes, avhenger selvsagt av dine personlige preferanser. Her forklarer vi to av dem: Sprite Packer, Internal to Unity og TexturePacker (et frittstående verktøy, mot avgift).
For å åpne Sprite Packer, velg fra menyen Vindu> Sprite Packer.
Ledelsen er veldig enkel: knappen Pack brukes til å lage en eller flere Atlaser (det avhenger av antall bilder og Atlas-dimensjonen du vil bruke).
Nå kan du velge et bilde for å se hvor det er i Atlasen. Hvis du legger til eller fjerner bilder fra prosjektet ditt, må du bruke knappen Repack, for å oppdatere Atlasen.
For å konfigurere Sprite Packer, kan du velge fra menyen Rediger> Prosjektinnstillinger> Redigerer; her kan du deaktivere Atlasen, bare aktiver den for spillet bygget eller alltid slå den på.
For mer informasjon om Sprite Packer, kan du sjekke den offisielle veiledningen.
Texture Packer er et frittstående verktøy som brukes til å administrere Atlas.
Du kan legge til en eller flere mapper fra prosjektet ditt og Texture Packer vil opprette Atlas.
Deretter kan du velge dataformatet for eksporten. Som du kan se, er det også muligheten "JSON for enhet". Dette betyr at du kan eksportere Atlas for ditt Unity-prosjekt. Men for å kunne bruke dem sammen må du installere en gratis redaktørutvidelse fra eiendomsforretningen.
For mer informasjon om Texture Packer, kan du sjekke den offisielle guiden.
Men hvorfor er det så viktig å samle flere bilder til en enkelt større?
La oss gå et øyeblikk tilbake til gjengivelsesprosessen: Hvis hvert element i brukergrensesnittet har en separat tekstur, tegnes den med et skilt "trekksamtal". Dette betyr at hvis vi i vårt grensesnitt har ikonet til hjerter (som representerer spillerens energi) og ikonet for mynter samlet, vil vi ha to trekksamtaler.
Hver tegneanrop tar litt tid å fullføre, og gjør gjengivelsesprosessen lengre og lengre. Hvis det er fem UI-elementer, i stedet for to som i eksemplet ovenfor, er det fem tegneanrop.
Begynner du å se poenget?
Mer trekk samtaler -> mer tid under gjengivelsesfasen -> mindre fps -> spill med lav bildefrekvens (med noen rammedråper) eller færre elementer på skjermen (så visuelt dårlig).
Sløse å trekke på denne måten, med mindre det er spesielle grunner, er det ikke veldig fornuftig, spesielt for brukergrensesnittet.
Faktisk blir alle teksturer i en Atlas gjengitt sammen, i et enkelt pass.
Som konklusjon, spesielt hvis du utvikler et spill på en plattform hvor ytelsen er veldig viktig (for eksempel en mobil plattform):
Og ... kan kraften være med deg. Og koden din. Alltid.