Den ursprungliga gameboyen, GBP och GBC hade alla skärmupplösningar på 160×144 [1] medan Game Boy Advanced hade en upplösning på 240×160 [2]
Så hur sker den faktiska sträckningen? Det verkar ganska enhetligt, men jag kan inte tappa huvudet kring hur det är tekniskt möjligt utan en andra skärm.
Svar
För det första är sträckningen inte gjort i vertikal riktning: Game Boy (och Color) -spel använde bara 144 rader av de 160 tillgängliga på Advance-skärmen, så det skulle finnas svarta ”brevlådes” staplar längst upp och ned, oavsett om du sträckte bilden i widescreen (med axelknapparna) eller inte.
Horisontellt är bilden definitivt sträckt. Om Advance hade två gånger den horisontella upplösningen för Game Boy, skulle det vara lätt att sträcka: varje kolumn med pixlar kunde upprepas två gånger. Det skulle faktiskt betyda att var och en av Game Boy-pixlarna var dubbelt så breda som tidigare. Det är inte alltid möjligt att fördubbla skärmens upplösning; det är troligt att en sådan upplösning inte var tillgänglig (eller överkomlig) i en handhållen storlek vid tidpunkten för Advance.
Istället valde Nintendo en skärm för Advance som hade en upplösning som är en och en halv gång (eller 3/2) jämfört med den ursprungliga Game Boy (160 x 3/2 = 240). Varannan av två kolumner med pixlar från ett gammalt Game Boy-spel måste nu ”sträckas” över tre kolumner på Advance-skärmen.
Men vilka värden ska tilldelas pixlarna i dessa extra tredje kolumner ? Du kan dubbla upp några av de ursprungliga kolumnerna ”pixlar, fördubbla” bredden ”för alla udda kolumner, eller kanske de jämna. Det är en enkel metod, men ser inte så bra ut, för vissa kolumner fördubblas inte alls, men andra kommer att göra det.
Ett alternativt tillvägagångssätt är att använda en teknik som heter interpolation . [* 1] I det här fallet, istället för att välja att duplicera en kolumn för att fylla de tomma pixlarna, tar du ett genomsnitt av värdena i kolumnerna till vänster och höger av varje tom pixel och använd det här beräknade värdet istället.
Om du tittar noga på Advance-skärmen med ett osträckt Game Boy-spel, då en sträckt, är det möjligt att identifiera vilken kolumner har fått sina värden beräknade med denna ”genomsnittliga” interpolering.
Här är några detaljerade bilder av ”AY” från texten ”1Player”:
På vänster sida av ”A” har en kolumn av pixlar interpolerats mellan de mörka pixlarna av ”A” och de ljusa pixlarna i bakgrunden. Dessa pixlar har medelvärdesberäknats som medelgrå.
På höger sida om ”A” har en annan kolumn med interpolerade pixlar hamnat mellan de två kolumnerna med mörka pixlar. Genomsnittet av två mörka pixlar är också mörkt, så det har samma färg som resten av ”A”. Liknande interpolationer är synliga på vänster och höger sida av ”Y” och på andra ställen på skärmen.
Här är ett par bilder från ett annat spel, taget på AGS-101-modellen av Advance SP ( som har en ljusare, bakgrundsbelyst skärm). [* 2] Du kan spela gissning om du vill!
Varför valde Nintendo att sträcka Game Boy-skärmen i en riktning, och inte den andra? En anledning är att interpolering i en dimension är mycket enklare än att göra det i två . Men att sträcka skärmen vertikalt skulle också ha skapat fula visuella artefakter i spelet.
Om Nintendo hade beslutat att sträcka de 144 raderna av pixlar över de 160 raderna som var tillgängliga på Advance-skärmen, hade de haft för att infoga 16 interpolerade rader med pixlar. 16 är en faktor på 160, så de interpolerade raderna kan vara jämnt fördelade: en var 10: e rad. Men av de nio ursprungliga raderna skulle bara två vara bredvid en ny rad pf-pixlar sju skulle inte t. Som ett resultat skulle vissa rader ”sträckas ut” av interpolationen, andra skulle inte. Detta skulle resultera i att Mario ”hatt sträckte sig och komprimerade något när han hoppade till exempel och skulle distrahera för spelaren.
-
Denna teknik (särskilt den tvådimensionella bilinear interpolation ) används när du ändrar storlek på en bild i bildmanipuleringsprogramvara som Photoshop eller GIMP. Det används också på datorns LCD-skärmar, om du väljer en upplösning (t.ex. 640×480) som inte matchar skärmens ursprungliga upplösning (t.ex. 1024×768). Men eftersom GBA bara sträcker skärmen i en dimension (horisontellt), det behöver bara göra en enklare linjär interpolering av bilden.
-
Med tillstånd av snips-n-sniglar
Kommentarer
- @Tommy You ' är båda rätt. Sträckning är inte ' t gjort i vertikal riktning, så Kaz är korrekt på det. I horisontell riktning sträcker sig är närmaste granne som du sa, inte interpolerad (bilinearfiltrerad) som Kaz sa.
- Utöver dina kommentarer om brist på vertikal sträckning skulle det kräva en stor buffert, eftersom skanning av linjer är synkron med respekt för spelet. Du kan ' inte bara gå tillbaka och skanna en extra kopia av en rad, även om du ville göra det (vilket skulle se hemskt ut), eftersom innehållet kan ha förändrats . Faktum är att massor av gameboy-spel använde ändringar i visningsinnehållet på hblank för att skapa effekter eller bara för att passa fler sprites på skärmen.
- @Kaz Jag kunde inte ' t berätta från dina foton så jag tog mina egna och än en gång har du rätt. imgur.com/a/5Cc6IY9
- @ snips-n-sniglar de bilderna är fantastiska! Jag ' har lyckats hitta min makrolinsadapter och har ersatt mina originalbilder, men din AGS-101 ' skärm är mil skarpare än min myrstandard Advance. Får jag lägga till dina bilder i svaret?
- @Kaz Visst, gå vidare.