Hur fungerar skalning av upplösning på en skärm?

Permalänk
Medlem

Hur fungerar skalning av upplösning på en skärm?

Jag har ofta funderat på hur justering av upplösning påverkar bilden på en skärm eller TV.
Kan t.ex. @Laxpudding förklara detta på ett begripligt sätt?

Om jag exempelvis har en 1440p monitor, men väljer att sätta upplösningen till 1920x1080. Hur kommer bilden att påverkas? 1080p skalar ju inte med 1440p på samma vis som det gör med 4K (dubbelt med pixlar i sidled och höjdled).

Kommer bilden att lida av "jagged edges" etc eller vad är det som händer på pixelnivå när man kör en upplösning som inte är "native" för skärmen?

Frågar man inget så får man ingenting veta. Detta har jag funderat på länge utan att forska närmare på det. Många där ute kanske sitter på en 4K skärm men väljer att spela i 1440p eller har en 1440p monitor men väljer att spela i 1080p för att få ett bättre flyt i spelen. Någonstans måste det finnas en trade-off vad gäller bildkvaliteten (undantagen den uppenbara nedskalningen av upplösning förstås). Vore spännande att få en förklaring till hur detta fungerar i praktiken och vad man egentligen förlorar i bildkvalitet.

720p skalar ju bra med 1440p, dvs 2x pixlar på höjden och bredden.
1080p skalar på samma sätt med 4K.

Men just skalningen av udda upplösningar är jag nyfiken på. Till exempel att ha en 1440p skärm och sänka upplösningen till 1080p eller att använda en 4K monitor och sänka upplösningen till 1440p.

Det måste väl även bli samma brister när t.ex. en Playstation 4 Pro renderar spel i, säg 1800p, på en 4K-skärm?

Visa signatur

Dator 1: Meshify S2 Vit | RM750x | B550-E | 5700X | 32Gb Lpx 3600 | 3060Ti Gaming X Trio | 970 Evo Plus 1TB + 850 Evo 500GB|
Dator 2: FD Define R5 Vit | RM750x | B550-F Wifi | 3800X | 32Gb Lpx 3200 | SN850 1TB+850 Evo 500GB+Sandisk Plus 960GB | 1070 Gaming Z - Playstation 5 | Wii U | Nintendo Switch

Permalänk
Keeper of the Bamse

Säg att du har ett rutnät på 10x10 rutor. Det är din 1440p-skärm. Försök nu att "rita" 7x7 rutor på den (köra i 1080p). Hur ska du dela upp varje ruta i ditt 10x10-grid? Rutorna går inte att dela på.

Visa signatur

i7 10770K, NH-D15. 16GB corsair. RTX 3080. 3TB nvme. Samsung G9. Fractal Torrent Compact. Corsair RM850.
Logitech G pro wireless mouse. Logitech TKL915 wireless. Logitech Pro X Wireless.
Macbook pro M1 (16GB, 512GB). HP Reverb G2.
www.bamseclockers.com

Permalänk
Medlem

När du nämner 720p, 1080p, 1440p och 4K så antar jag att du menar samma bildförhållande (aspect ratio) dvs 16:9? Så länge den är samma så ska inte upplösningen spela roll - skalningen blir densamma.

Om bildförhållandet är annorlunda mellan upplösningarna så blir bilden förvrängd antingen på höjden eller längden. Fast det brukar finnas möjligheter att skala bilden så att man får svarta kanter istället. Då behåller man bildförhållandet så att bilden inte förvrängs.

Visa signatur

Ryzen 9 5900X @ +100MHz & CO -23.5 | RTX 3070 @ 2GHz 16Gbps 956mV | 32GB @ 3600MT/s CL14

Permalänk
Medlem
Skrivet av Streamdog:

Jag har ofta funderat på hur justering av upplösning påverkar bilden på en skärm eller TV.
Kan t.ex. @Laxpudding förklara detta på ett begripligt sätt?

Om jag exempelvis har en 1440p monitor, men väljer att sätta upplösningen till 1920x1080. Hur kommer bilden att påverkas? 1080p skalar ju inte med 1440p på samma vis som det gör med 4K (dubbelt med pixlar i sidled och höjdled).

Kommer bilden att lida av "jagged edges" etc eller vad är det som händer på pixelnivå när man kör en upplösning som inte är "native" för skärmen?

Frågar man inget så får man ingenting veta. Detta har jag funderat på länge utan att forska närmare på det. Många där ute kanske sitter på en 4K skärm men väljer att spela i 1440p eller har en 1440p monitor men väljer att spela i 1080p för att få ett bättre flyt i spelen. Någonstans måste det finnas en trade-off vad gäller bildkvaliteten (undantagen den uppenbara nedskalningen av upplösning förstås). Vore spännande att få en förklaring till hur detta fungerar i praktiken och vad man egentligen förlorar i bildkvalitet.

720p skalar ju bra med 1440p, dvs 2x pixlar på höjden och bredden.
1080p skalar på samma sätt med 4K.

Men just skalningen av udda upplösningar är jag nyfiken på. Till exempel att ha en 1440p skärm och sänka upplösningen till 1080p eller att använda en 4K monitor och sänka upplösningen till 1440p.

Det måste väl även bli samma brister när t.ex. en Playstation 4 Pro renderar spel i, säg 1800p, på en 4K-skärm?

När det gäller en skärm som har fysiska pixlar (CRT funkade ju helt annorlunda i detta avseende) så kommer någonting, antingen grafikkort eller skärm (beroende på inställningar, det förstnämnda brukar vara att föredra), att behöva skala om bitmappen och när det inte är en jämn multipel det ska skalas så ska man inte räkna med alltför stora mirakel.

Sannolikt kan väl resultatet duga i spel men knappast för skrivbordsmiljön, text, osv. (Resultatet är väl mindre påfallande katastrof om man skalar något skapligt högupplöst till 4k än t.ex. om man skalar om något lågupplöst till 1080p.)

Här har du ett exempel där Laxpudding i en video tillhörande en recension av en 4k-skärm snackar lite om resultatet: https://www.youtube.com/watch?v=KrL3SDZP15I#t=0m55s

Visa signatur

Desktop: Ryzen 5800X3D || MSI X570S Edge Max Wifi || Sapphire Pulse RX 7900 XTX || Gskill Trident Z 3600 64GB || Kingston KC3000 2TB || Samsung 970 EVO Plus 2TB || Samsung 960 Pro 1TB || Fractal Torrent || Asus PG42UQ 4K OLED
Proxmox server: Ryzen 5900X || Asrock Rack X570D4I-2T || Kingston 64GB ECC || WD Red SN700 1TB || Blandning av WD Red / Seagate Ironwolf för lagring || Fractal Node 304

Permalänk
Medlem

@laxpudding kanske kan svara lite mer ingående på detta?

Visa signatur

🏬: Gigabyte Aorus X570 Master 🔲: AMD Ryzen R5 5600X ❄️: Cooler Master Hyper212 BE 🏴: ASUS RX 6700 XT DUAL
🗄️: Fractal Define 7 Compact 🔌: EVGA B5 850W 🎞️: 32GB HyperX Beast 3600Mhz 💾: Crucial 512 GB
🖥️: ROG STRIX XG27WQ 🖱️: Corsair Scimitar RGB Elite ⌨️: K70 RGB TKL CHAMPION SERIES 🎧: Corsair H55 📶: Archer C80

Permalänk
Medlem
Skrivet av Printscreen:

Säg att du har ett rutnät på 10x10 rutor. Det är din 1440p-skärm. Försök nu att "rita" 7x7 rutor på den (köra i 1080p). Hur ska du dela upp varje ruta i ditt 10x10-grid? Rutorna går inte att dela på.

https://i.imgur.com/XC6QQMN.png

Fast det blir ju dock lite missvisande tankeövning med så extremt låg upplösning på några pixlar bara. I verkligheten så har ju en skärm miljontals pixlar och mycket finmaskigare rutnät att försöka matcha.

T.ex. öppna din bild https://i.imgur.com/XC6QQMN.png i en egen flik i webbläsaren. Minska ner storleken på fönstret och se hur bilden ändrar storlek.

Permalänk
Medlem
Skrivet av Printscreen:

Säg att du har ett rutnät på 10x10 rutor. Det är din 1440p-skärm. Försök nu att "rita" 7x7 rutor på den (köra i 1080p). Hur ska du dela upp varje ruta i ditt 10x10-grid? Rutorna går inte att dela på.

https://i.imgur.com/XC6QQMN.png

Just det jag menar. Det går inte att dela jämnt ut, och om du har en 1440p skärm (10x10 rutor i ditt exempel) med sänker upplösningen till 1080p.. Vad händer då på pixel-nivå i skärmen förutsatt att det körs i helskärmsläge?
Vissa "pixel-rader" kommer ju behöva dubbla antalet pixlar i bredd exempelvis för att fylla ut de 10x10 rutorna.

Visa signatur

Dator 1: Meshify S2 Vit | RM750x | B550-E | 5700X | 32Gb Lpx 3600 | 3060Ti Gaming X Trio | 970 Evo Plus 1TB + 850 Evo 500GB|
Dator 2: FD Define R5 Vit | RM750x | B550-F Wifi | 3800X | 32Gb Lpx 3200 | SN850 1TB+850 Evo 500GB+Sandisk Plus 960GB | 1070 Gaming Z - Playstation 5 | Wii U | Nintendo Switch

Permalänk
Medlem
Skrivet av Streamdog:

Just det jag menar. Det går inte att dela jämnt ut, och om du har en 1440p skärm (10x10 rutor i ditt exempel) med sänker upplösningen till 1080p.. Vad händer då på pixel-nivå i skärmen förutsatt att det körs i helskärmsläge?
Vissa "pixel-rader" kommer ju behöva dubbla antalet pixlar i bredd exempelvis för att fylla ut de 10x10 rutorna.

10x10 har ett bildförhållande på 1:1. (En pixel på längden för varje pixel på höjden.)

1440p (2560x1440) och 1080p (1920x1080) har ett bildförhållande på 16:9 så rutnätet borde vara 16x9.

Om din skärm stödjer 2560x1440 så har den 160st av dessa rutnät.

(16*160 = 2560)
(9*160 = 1440)

Och om du använder den för att köras i 1920x1080 så fylls bilden av 120st av dessa rutnät istället*. Enkelt sagt så påverkar det hur skarp bilden blir, då färre pixlar ger mindre information.

När du blandar in olika bildförhållanden så blir det mer komplicerat som någon annan gärna får förklara bättre.

* Dålig formulering.
Visa signatur

Ryzen 9 5900X @ +100MHz & CO -23.5 | RTX 3070 @ 2GHz 16Gbps 956mV | 32GB @ 3600MT/s CL14

Permalänk
Medlem
Skrivet av Decster:

10x10 har ett bildförhållande på 1:1. (En pixel på längden för varje pixel på höjden.)

1440p (2560x1440) och 1080p (1920x1080) har ett bildförhållande på 16:9 så rutnätet borde vara 16x9.

Om din skärm stödjer 2560x1440 så har den 160st av dessa rutnät.

(16*160 = 2560)
(9*160 = 1440)

Och om du använder den för att köras i 1920x1080 så fylls skärmen bilden av 120st av dessa rutnät istället. Enkelt sagt så påverkar det hur skarp bilden blir, då färre pixlar ger mindre information.

När du blandar in olika bildförhållanden så blir det mer komplicerat som någon annan gärna får förklara bättre.

Nu var det ju inte bildförhållande de diskuterade, de hade bara 10x10 som exempel på hur skalningen fungerar mellan ej jämnt delbara upplösningar. Det blir helt enkelt som musical chairs, det blir bråk om plats för pixlarna. Skalar man åt ena hållet får vissa stå åt sidan, skalar man åt andra hållet får vissa dubblera sig. Gade jag köpt ny idag hade jag gått på 4k och isf skalat ner till 1080 i de spel där komponenterna inte orkar pusha rikligt med frames.

Skickades från m.sweclockers.com

Visa signatur

8600k @5Ghz - 1.23V - NH-D15 - z370 strix gaming-f - 1070ti strix binned@2150Mhz/9250Mhz - Corsair vengeance 16Gb@3200Mhz - Define R5 - PG279Q - Strix flare - Logitech G502 - Logitech G633

Permalänk
99:e percentilen
Skrivet av Decster:

När du nämner 720p, 1080p, 1440p och 4K så antar jag att du menar samma bildförhållande (aspect ratio) dvs 16:9? Så länge den är samma så ska inte upplösningen spela roll - skalningen blir densamma.

Om bildförhållandet är annorlunda mellan upplösningarna så blir bilden förvrängd antingen på höjden eller längden. Fast det brukar finnas möjligheter att skala bilden så att man får svarta kanter istället. Då behåller man bildförhållandet så att bilden inte förvrängs.

Skrivet av Decster:

10x10 har ett bildförhållande på 1:1. (En pixel på längden för varje pixel på höjden.)

1440p (2560x1440) och 1080p (1920x1080) har ett bildförhållande på 16:9 så rutnätet borde vara 16x9.

Om din skärm stödjer 2560x1440 så har den 160st av dessa rutnät.

(16*160 = 2560)
(9*160 = 1440)

Och om du använder den för att köras i 1920x1080 så fylls skärmen bilden av 120st av dessa rutnät istället. Enkelt sagt så påverkar det hur skarp bilden blir, då färre pixlar ger mindre information.

När du blandar in olika bildförhållanden så blir det mer komplicerat som någon annan gärna får förklara bättre.

Den här tråden handlar inte om bildförhållanden, utan bara om skalning mellan upplösningar (pixelmatriser) där pixelmappning är omöjlig (men bildförhållandet detsamma).

Visa signatur

Skrivet med hjälp av Better SweClockers

Permalänk
Medlem

Nu har jag inte skrivit i detta forum på minst 10 år, men jag såg denna tråden och insåg att jag var tvungen att svara.

Detta är inget magiskt på något sätt. En bild skalas om med interpolation. Skall vi t.ex. förminska en bild från 4K till 1080p så är det allra enklaste att bara ta färgmedelvärdet av 4 pixlar och sätta dessa på 1 ny pixel. Denna sortens skalning är väldigt enkel och väldigt snabb, men blir sällan särskilt snygg.

Jag rekommenderar följande artikel för att fördjupa sig lite:
https://en.wikipedia.org/wiki/Image_scaling

Visa signatur

5D MkII

Permalänk
Medlem

Ett av de enklaste sätten att skala bilden på är att normalisera koordinatsystem på både bilden och skärmen, t.ex. så att man går från 0 till 1 i varje dimension (den mittersta pixel i bilden skulle då t.ex. vara (0.5, 0.5)). Sen kollar man bara upp för varje pixel på skärmen vilken pixel i bilden som har samma koordinat. Detta ger perfekt skalning om skärmen är en multipel av bilden, men i övrigt blir resultatet rätt dåligt.

Bättre algoritmer använder istället interpolering, d.v.s. att man tar medelvärdet av pixlarna runt pixeln man vill beräkna. Det finns många olika sätt man kan göra det på, och när det gäller skärmar så varierar det från modell till modell vad de använder för algoritm.

Skrivet av Coreflake:

Gade jag köpt ny idag hade jag gått på 4k och isf skalat ner till 1080 i de spel där komponenterna inte orkar pusha rikligt med frames.

Tyvärr så är det inte alla skärmar som skalar 1080p perfekt på 4K, trots att det i teorin är möjligt. Jag har två 4K-skärmar till min dator, en Dell som interpolerar även 1080p samt en LG som skalar perfekt vad jag kan bedömma.

Men även på LG-skärmen så föredrar jag faktiskt oftast 1440p om jag spelar något som är för krävande för mitt GTX 1070 att driva i 4K. Det går förstås inte att skala 1440p till 4K perfekt, men på just den skärmen tycker jag det blir bra nog för att de extra pixlarna ska ge bättre bildkvalité. Men det är tyvärr något man får testa sig fram till, eftersom det är ganska subjektivt vad som ser bäst ut.

Permalänk
Bildexpert 📺
Skrivet av Streamdog:

Jag har ofta funderat på hur justering av upplösning påverkar bilden på en skärm eller TV.
Kan t.ex. @Laxpudding förklara detta på ett begripligt sätt?

Om jag exempelvis har en 1440p monitor, men väljer att sätta upplösningen till 1920x1080. Hur kommer bilden att påverkas? 1080p skalar ju inte med 1440p på samma vis som det gör med 4K (dubbelt med pixlar i sidled och höjdled).

Kommer bilden att lida av "jagged edges" etc eller vad är det som händer på pixelnivå när man kör en upplösning som inte är "native" för skärmen?

@printscreen sätter fingret på problemet. Även om jag själv försökt med den förklaringsmodellen märker jag att det blir för abstrakt för många. Men jag gillar den. Kan ha att göra med hur jag på 80-talet satt i pojkrummet med en ZX Spectrum och handkodade grafik i 8x8 bitar.

Och så gillade jag schack på den tiden. Hur blir det om man går från 8x8 rutor till 9x9 rutor? Hur ska pjäserna flyttas om? Hur påverkar det spelet? Det blir snabbt komplext.

Skalning är en i grunden någon form av matematisk omräkning av bilden som måste till eftersom vi endast har diskreta, fixerade pixlar att arbeta med. Från 1920x1080 till 2560x1440 är skalningsfaktorn (2560/1920) eller 1 1/3-del, 1,3333333... Vi kan inte ta 8 pixlar och skala dessa till 10,66666 pixlar. Det måste bli 11 pixlar eller 10 pixlar någonstans vilket hur vi än försöker jämna ut problemet kommer påverka hur grafiken reproduceras. Så i den situationen kommer vi aldrig ifrån förvrängningar.

Så hur man gör detta blir därför upp till den algoritm som används där några av de vanliga finns i exempelvis Photoshop. Som Nearest Neighbour och Bi-linjär. I praktiken används olika algoritmer beroende på var man skalar. GPU:n kör sin algoritm (och låter dig inte välja, tyvärr) och skärmen kör sin algoritm (och låter dig inte välja, tyvärr) med olika effekt. Beroende på hur det beräknas kommer bilden bli mjukare och diffusare eller taggigare och kantigare. Vilket som är mest rätt kan variera med vad man skalar. Text och datorgrafik mår sämst av skalning medan foto och video ofta överlever processen hyfsat intakt. Spel är lite mitt emellan. Olika algoritmer ger olika resultat på olika typer av material.

Men man kommer aldrig ifrån det som beskrivet ovan, att det blir förvrängning i slutändan. Så det man vill uppnå är 1:1-förhållande, pixelmappning. Att köra samma pixelmatris hela vägen. Eller åtminstone komma så långt från besvärliga bråktal som möjligt. Faktor 1,5x är till exempel betydligt smidigare att arbeta med vilket sker med 2560x1440 på en 4K/3840x2160-skärm.

Kombinera sådan skalning med en hög pixeldensitet och det kan fungerar riktigt bra för spel. Men just 1920x1080 på 2560x1440 är en dålig kombination pågrund av faktor 1,333333... och att man ofta kör det på skärmar med tämligen låg pixeldensitet.

I framtiden kanske vi alla sitter på 8K skärmar och aldrig mer behöver tänka på detta. Det finns tillräckligt med pixlar på ytan för att bråkdelarna ska ligga på gränsen för vad ögat ser.

Permalänk
Medlem
Skrivet av Laxpudding:

@printscreen sätter fingret på problemet. Även om jag själv försökt med den förklaringsmodellen märker jag att det blir för abstrakt för många. Men jag gillar den. Kan ha att göra med hur jag på 80-talet satt i pojkrummet med en ZX Spectrum och handkodade grafik i 8x8 bitar.

Och så gillade jag schack på den tiden. Hur blir det om man går från 8x8 rutor till 9x9 rutor? Hur ska pjäserna flyttas om? Hur påverkar det spelet? Det blir snabbt komplext.

Skalning är en i grunden någon form av matematisk omräkning av bilden som måste till eftersom vi endast har diskreta, fixerade pixlar att arbeta med. Från 1920x1080 till 2560x1440 är skalningsfaktorn (2560/1920) eller 1 1/3-del, 1,3333333... Vi kan inte ta 8 pixlar och skala dessa till 10,66666 pixlar. Det måste bli 11 pixlar eller 10 pixlar någonstans vilket hur vi än försöker jämna ut problemet kommer påverka hur grafiken reproduceras. Så i den situationen kommer vi aldrig ifrån förvrängningar.

Så hur man gör detta blir därför upp till den algoritm som används där några av de vanliga finns i exempelvis Photoshop. Som Nearest Neighbour och Bi-linjär. I praktiken används olika algoritmer beroende på var man skalar. GPU:n kör sin algoritm (och låter dig inte välja, tyvärr) och skärmen kör sin algoritm (och låter dig inte välja, tyvärr) med olika effekt. Beroende på hur det beräknas kommer bilden bli mjukare och diffusare eller taggigare och kantigare. Vilket som är mest rätt kan variera med vad man skalar. Text och datorgrafik mår sämst av skalning medan foto och video ofta överlever processen hyfsat intakt. Spel är lite mitt emellan. Olika algoritmer ger olika resultat på olika typer av material.

Men man kommer aldrig ifrån det som beskrivet ovan, att det blir förvrängning i slutändan. Så det man vill uppnå är 1:1-förhållande, pixelmappning. Att köra samma pixelmatris hela vägen. Eller åtminstone komma så långt från besvärliga bråktal som möjligt. Faktor 1,5x är till exempel betydligt smidigare att arbeta med vilket sker med 2560x1440 på en 4K/3840x2160-skärm.

Kombinera sådan skalning med en hög pixeldensitet och det kan fungerar riktigt bra för spel. Men just 1920x1080 på 2560x1440 är en dålig kombination pågrund av faktor 1,333333... och att man ofta kör det på skärmar med tämligen låg pixeldensitet.

I framtiden kanske vi alla sitter på 8K skärmar och aldrig mer behöver tänka på detta. Det finns tillräckligt med pixlar på ytan för att bråkdelarna ska ligga på gränsen för vad ögat ser.

Tack så jättemycket för det utförliga svaret @Laxpudding
Då har jag förstått det hela. Var nyfiken på hur det fungerade och vad som avgör hur bilden ska skala, och det satte du pekfingret på perfekt. Så tack igen

Visa signatur

Dator 1: Meshify S2 Vit | RM750x | B550-E | 5700X | 32Gb Lpx 3600 | 3060Ti Gaming X Trio | 970 Evo Plus 1TB + 850 Evo 500GB|
Dator 2: FD Define R5 Vit | RM750x | B550-F Wifi | 3800X | 32Gb Lpx 3200 | SN850 1TB+850 Evo 500GB+Sandisk Plus 960GB | 1070 Gaming Z - Playstation 5 | Wii U | Nintendo Switch