Använda en texturatlas för att optimera ditt spel

Tid. Månader. Kanske år. Du har spenderat din tid (mycket tid) för att skapa ditt spel. Liten eller stor, det spelar ingen roll. Det är ditt spel, och nu vill du dela det med hela världen - och kanske bli känd och rik *. Det är perfekt: konsten är bra, och du är väldigt stolt över din idé i spelet. Ditt spel.

Men det finns en sista fråga som du måste lösa innan frisläppandet. Nej, inte en enkel fråga. Problemet: bildfrekvensen för ditt spel är lågt. Väldigt låg. Och det betyder bara en sak: du måste hitta ett sätt att fixa det. Du måste. Och du har ingen aning om hur.

Var inte panik: det finns ett enkelt trick som kan hjälpa dig. Det kallas en "Texture Atlas".

* Om du blir rik tack vare den här artikeln, kom ihåg mig. Tack så mycket!

Vad är en Texture Atlas?

Om du närmar dig utvecklingen av ett 3D-videospel för första gången börjar du upptäcka att 3D-grafik består av flera delar: 3D-maskor, texturer, partikelsystem och många andra element som vanligtvis ritas på skärmen 30 gånger per sekund (i slang: 30 fps) under renderingsprocessen, vilket gör spelets värld varierad och livlig.

Tro det eller inte, de första 3D-videospel som jag såg i mitt liv hade inget av dessa element. De var bara sammansatta av linjer som bildade föremål eller element i 3D-trådram.

Att skriva detta får mig definitivt att känna mig gammal.

Tillbaka till oss (faktiskt till dig) och de viktiga sakerna, idag talar vi om texturerna i användargränssnittet (användargränssnittet nedan) och, i förlängning, om alla texturer i spelet.

I ett 3D-spel är gränssnittet vanligtvis gjort av 3D-element (till exempel plan eller lådor) med texturer.

Vi nämnde före renderingsprocessen: det är den operation genom vilken elementen i minnet fysiskt ritas på skärmen. Det är bland de mest komplexa och dyra processerna som uppstår i ett realtids 3D-spel. Därefter välkomnas det som helst som är lämpligt för att minska den tid som denna process tar. mindre tid i återgivningsfasen innebär en högre bildhastighet (dvs. om du når 60 fps kan du göra bilden två gånger och sedan tänka på att du utvecklar ditt spel även för VR) eller fler skärmelement (och sedan ett rikare spel, mer animerad, vackrare).

Ett av de medel som används för att minska varaktigheten för renderingsprocessen är en Texture Atlas: det är inget annat än en bild som innehåller många texturer.

Hur en texturatlas fungerar

Obs! Som nämnts i föregående punkt kommer denna artikel att diskutera Texture Atlas som tillämpas på användargränssnittet. Men många av de begrepp som förklaras här kan också tillämpas på 3D-modeller och deras texturer.

En Texture Atlas, vi sa, är en samling av texturer i en enda bild.

En Atlas är vanligtvis associerad med en filbeskrivare, vilket indikerar för spelet där en textur är (i vissa x- och y-koordinater) för att hämta den.

Beroende på vilket system du ska använda för att generera och hantera Atlasen, kommer du att ha mer eller mindre alternativ, t.ex. avståndet mellan bilderna som komponerar det (vilket minskar risken för artefakter på kanterna på strukturen orsakad av en överlappning av två element) eller förmågan att rotera elementen för att optimera utrymmet inuti Atlasen (mer optimerat utrymme betyder fler bilder inom samma Atlas).

Olika sätt att skapa en texturatlas

Det finns olika sätt att skapa en Atlas. En fullständig utvecklingsmiljö tillåter vanligtvis den inbördes hanteringen av Atlasen. Det finns också många externa verktyg som ger många extra alternativ.

Valet av vilket system som ska användas beror givetvis på dina personliga preferenser. Här förklarar vi två av dem: Sprite Packer, Internal to Unity och TexturePacker (ett fristående verktyg, mot avgift).

Sprite Packer

För att öppna Sprite Packer, välj från menyn Fönster> Sprite Packer.

Hanteringen är väldigt lätt: knappen Pack används för att skapa en eller flera Atlaser (det beror på antalet bilder och på Atlas-dimensionen du vill använda).

Nu kan du välja en bild för att se var den befinner sig i Atlasen. Om du lägger till eller tar bort bilder från ditt projekt måste du använda knappen Repack, för att uppdatera Atlas.

För att konfigurera Sprite Packer kan du välja mellan menyn Redigera> Projektinställningar> Redigerare; här kan du inaktivera Atlasen, aktivera den bara för det byggda spelet, eller sätt på det alltid.

För mer information om Sprite Packer, kan du kolla den officiella guiden.

Texture Packer

Texture Packer är ett fristående verktyg som används för att hantera Atlas.

Du kan lägga till en eller flera mappar från ditt projekt och Texture Packer skapar Atlas.

Därefter kan du välja dataformat för exporten. Som du kan se finns det också alternativet "JSON for Unity". Det innebär att du kan exportera din Atlas för ditt Unity-projekt. Men för att kunna använda dem tillsammans måste du installera en kostnadsfri redigeringsutvidgning från tillgången.

För mer information om Texture Packer kan du kolla den officiella guiden.

Varför är det viktigt att använda en texturatlas?

Men varför är det så viktigt att samla flera bilder till en enda större?

Låt oss återgå till återgivningsförfarandet: Om varje element i användargränssnittet har en separat textur, ritas den med ett separat "röstsamtal". Det betyder att om vi i vårt gränssnitt har ikonen för hjärtan (representerar spelarens energi) och ikonen på de samlade mynten, kommer vi att ha två rita samtal.

Varje rita samtal tar lite tid att slutföra, vilket gör återgivningsprocessen längre och längre. Om det finns fem UI-element, istället för två som i exemplet ovan, finns det fem rita samtal.

Börjar du se punkten?

Mer rita samtal -> mer tid under återgivningsfasen -> mindre fps -> spel med låg bildhastighet (med vissa ramdroppar) eller färre element på skärmen (då visuellt dålig).

Att slösa ringer kallas på det här sättet, om inte det finns speciella skäl, är det inte riktigt meningslöst, särskilt för användargränssnittet.

Faktum är att alla texturer i en Atlas kommer att göras tillsammans, i ett enda pass.

Slutsats

Sammanfattningsvis, speciellt om du utvecklar ett spel på en plattform där prestanda är väldigt viktigt (till exempel en mobil plattform):

  • Du måste vara uppmärksam på antalet rita samtal: fler rita samtal betyder en högre återgivningstid (och en högre återgivningstid betyder risken för låg bildhastighet).
  • I allmänhet kan varje objekt med en annan textur generera ett enda röstsamtal (det är ett generiskt uttalande: det finns några undantag, speciellt när det gäller 3D-objekt).
  • Ett sätt att sänka antalet rita samtal är att använda en Texture Atlas.
  • En texturatlas är i grunden en stor konsistens med en grupp olika texturer.
  • Alla objekt som använder samma Texture Atlas genererar ett enstaka samtal.
  • Speciellt för UI-texturerna är användningen av en texturatlas ett måste för att förbättra ditt projekts prestanda.

Och ... kan kraften vara med dig. Och din kod. Alltid.