Den originale gameboy, GBP og GBC havde alle skærmopløsninger på 160×144 [1] mens Game Boy Advanced havde en opløsning på 240×160 [2]
Så hvordan opstår den egentlige strækning? Det virker ret ensartet, men jeg kan ikke pakke mit hoved omkring, hvordan det teknisk kan opnås uden en anden skærm.
Svar
For det første er strækningen ikke udført i lodret retning: Game Boy (og Color) -spil brugte kun 144 rækker af de 160 tilgængelige på Advance-skærmen, så der ville være sorte “letterbox” -bjælker øverst og nederst, om du strakte billedet i widescreen (med skulderknapperne) eller ej.
Vandret er billedet helt sikkert strakt. Hvis Advance havde dobbelt så høj vandret opløsning som Game Boy, ville det være let at strække: hver kolonne af pixels kunne gentages to gange. Det ville effektivt betyde, at hver af Game Boys pixels var dobbelt så brede som før. Det er ikke altid muligt at fordoble skærmopløsningen; det er sandsynligt, at en sådan opløsning ikke var tilgængelig (eller overkommelig) i en håndholdt størrelse på tidspunktet for Advance.
I stedet valgte Nintendo en skærm til Advance, der havde en opløsning, der er en og en halv gang (eller 3/2) for den originale Game Boy (160 x 3/2 = 240). Hver anden kolonne af pixels fra et gammelt Game Boy-spil skal nu “strækkes” over tre kolonner på Advance-skærmbilledet.
Men hvilke værdier skal tildeles pixels i disse ekstra tredje kolonner ? Du kunne fordoble nogle af de originale kolonners “pixels” og fordoble “bredden” på alle de ulige kolonner eller måske de lige. Det er en enkel metode, men ser ikke så godt ud, fordi nogle kolonner slet ikke fordobles, men andre vil.
En alternativ tilgang er at bruge en teknik kaldet interpolation . [* 1] I dette tilfælde tager du et gennemsnit af værdierne i kolonnerne til venstre og højre i stedet for at vælge at duplikere en kolonne for at udfylde de tomme pixels. af hver tom pixel, og brug denne beregnede værdi i stedet.
Hvis du ser nøje på Advances display med et ikke-strakt Game Boy-spil, så er det strakt, det er muligt at identificere hvilket kolonner har fået beregnet deres værdier ved denne “gennemsnitlige” interpolation.
Her er nogle detaljerede fotos af “AY” fra teksten “1Player”:
På venstre side af “A” er en kolonne af pixels interpoleret mellem de mørke pixels af “A” og de lyse pixels i baggrunden. Disse pixels er beregnet som middelgrå.
På højre side af “A” er en anden kolonne med interpolerede pixels havnet mellem de to kolonner med mørke pixels. Gennemsnittet af to mørke pixels er også mørkt, så det har samme farve som resten af “A”. Lignende interpolationer er synlige på venstre og højre side af “Y” og andre steder på skærmen.
Her er et par billeder fra et andet spil taget på AGS-101-modellen af Advance SP ( som har en lysere, baggrundsbelyst skærm). [* 2] Du kan spille gætte-spillet, hvis du vil!
Hvorfor valgte Nintendo at strække Game Boy-skærmen i en retning, og ikke den anden? En af årsagerne er, at interpolering i en dimension er meget enklere end at gøre det i to . Men at strække skærmen lodret ville også have skabt grimme visuelle artefakter i spillet.
Hvis Nintendo havde besluttet at strække de 144 rækker pixel over de 160 rækker, der var tilgængelige på Advance s skærm, ville de have haft at indsætte 16 interpolerede rækker med pixels. 16 er en faktor på 160, så de interpolerede rækker kunne fordeles jævnt: en hver 10. række. Men af de ni originale rækker ville kun to være ved siden af en ny række pf-pixels, den anden syv ville ikke t. Som et resultat ville nogle rækker blive “strakt” ud af interpolationen, andre ville ikke. Dette ville resultere i, at Mario “s hat strakte sig og komprimere let, da han for eksempel sprang og ville være distraherende for spilleren.
-
Denne teknik (specifikt den todimensionale bilinear interpolation ) bruges, når du ændrer størrelsen på et billede i billedmanipulationssoftware som Photoshop eller GIMP. Det bruges også på computerens LCD-skærme, hvis du vælger en opløsning (f.eks. 640×480), der ikke matcher skærmens oprindelige opløsning (f.eks. 1024×768). Men fordi GBA kun strækker skærmen i en dimension (vandret), det behøver kun at gøre en enklere lineær interpolering af billedet.
-
Med tilladelse til snips-n-snails
Kommentarer
- @Tommy You ' er begge rigtige. Strækning er ikke ' t udført i lodret retning, så Kaz er korrekt på det. I vandret retning, strækker sig er nærmeste nabo som du sagde, ikke interpoleret (bilinearfiltreret) som Kaz sagde.
- Oven på dine kommentarer om manglende lodret strækning ville det kræve en stor buffer, da scanning ud af linjer er synkron med i forhold til spillet. Du kan ' t bare gå tilbage og scanne en ekstra kopi af en linje, selvom du ville gøre det (hvilket ville se forfærdeligt ud), fordi indholdet muligvis var ændret . Faktisk brugte mange gameboy-spil ændringer i skærmindholdet på hblank for at skabe effekter eller bare for at passe til flere sprites på skærmen.
- @Kaz Jeg kunne ikke ' ikke fortælle fra dine fotos, så jeg tog mine egne, og igen er du korrekt. imgur.com/a/5Cc6IY9
- @ snips-n-snegler de billeder er fantastiske! Jeg ' har formået at finde min makroobjektivadapter og har erstattet mine originale billeder, men din AGS-101 ' skærm er miles skarpere end min mose standard Advance. Må jeg tilføje dine billeder til svaret?
- @Kaz Sikker på, gå lige videre.