News Integer Scaling: Intels Gen11-GPU unterstützt lang ersehntes Feature

gaelic schrieb:
Oder es ist nicht so trivial wie du es jetzt vermutest.

Aber hey, was wissen schon Intel, AMD und Nvidia ...

Doch, es ist tatsächlich trivial. Das ist nichts anderes als Upscaling mit ganzzahligen Werten und ohne jegliche Interpolation. Eigentlich die allerschnellste Lösung die es gibt (kann man mit jedem Bildbearbeitungsprogramm überprüfen, indem man dort die Wartezeit beim Skalieren mit und ohne Interpolation vergleicht).
Im Grunde wird beim Integer Scaling alles nur verdoppelt. Das Integer Scaling funktioniert dafür allerdings auch nur bei doppelten Auflösungen (z.B. 540p zu 1080p, 720p zu 1440p). Dafür reichen jedoch die einfachsten Intel HD 4000 Grafikkarten aus. Diese schlichten Grafikkarten müssen ja auch problemlos imstande sein, beliebige sonstige Auflösungen zu skalieren (z.B. wenn man mit 720p Auflösung auf 1080p Bildschirm spielt). Und das funktioniert ja auch problemlos.

Wenn das Verhältnis der Anwendungsauflösung und Bildschirmauflösung aber nicht einem ganzzahligen Verhältnis entspricht, muss interpoliert werden (z.B. 720p Anwendungsauflösung auf 1080p Bildschirmauflösungentspricht einem Verhältnis von 1:1,5 statt einem ganzzahligen Verhältnis von 1:2). Das Ergebnis davon ist zwangsläufig unscharf. Die (Intel, Nvidia, AMD) haben es sich halt einfach gemacht und einheitlich für alle Fälle denselben Interpolationsalgorithmus verwendet. Deswegen ist das Ergebnis selbst bei ganzzahligen Verhältnissen (wie 720p Anwendung auf 1440p Bildschirm) noch unscharf. Und das ist schon irgendwie ärgerlich.
 
Zuletzt bearbeitet von einem Moderator:
  • Gefällt mir
Reaktionen: Smartbomb, Miuwa und Recharging
gaelic schrieb:
Na wenn du es sagst wird es schon so stimmen.

Was soll an Nearest Neighbor Interpolation nicht trivial sein?
Es ist die einfachste aller Interpolationen

Aber man muss es "Integer Scaling" nennen. Aha, genau, Marketing bla bla.

Code:
SColor Tool::getNearestPixel( IImage* src, f32 fx, f32 fy )
{
    const s32 i = static_cast< int32_t >( fx + 0.5f );
    const s32 j = static_cast< int32_t >( fy + 0.5f );
    return getPixelAlways(src,i,j);
}

SColor Tool::getBilinearPixelFast( IImage* src, f32 fx, f32 fy )
{
    const s32 i=(s32)fx;
    const s32 j=(s32)fy;
    const f32 x=fx-(f32)i;
    const f32 y=fy-(f32)j;
    const core::dimension2du& Size = src->getDimension();
    const s32 ii = (i+1>=(s32)Size.Width) ? i : i+1;
    const s32 jj = (j+1>=(s32)Size.Height) ? j : j+1;
    const SColor& cA=getPixelAlways(src,i,j);
    const SColor& cB=getPixelAlways(src,ii,j);
    const SColor& cC=getPixelAlways(src,ii,jj);
    const SColor& cD=getPixelAlways(src,i,jj);
    const f32 rA=(f32)cA.getRed();
    const f32 rB=(f32)cB.getRed();
    const f32 rC=(f32)cC.getRed();
    const f32 rD=(f32)cD.getRed();
    const f32 gA=(f32)cA.getGreen();
    const f32 gB=(f32)cB.getGreen();
    const f32 gC=(f32)cC.getGreen();
    const f32 gD=(f32)cD.getGreen();
    const f32 bA=(f32)cA.getBlue();
    const f32 bB=(f32)cB.getBlue();
    const f32 bC=(f32)cC.getBlue();
    const f32 bD=(f32)cD.getBlue();
    const f32 e=(1.0f-x);
    const f32 f=(1.0f-y);
    const f32 fr = rA*e*f+rB*x*f+rC*x*y+rD*e*y;
    const f32 fg = gA*e*f+gB*x*f+gC*x*y+gD*e*y;
    const f32 fb = bA*e*f+bB*x*f+bC*x*y+bD*e*y;
    return SColor(255,(u32)fr,(u32)fg,(u32)fb);
}

Die Zeilen 3 und 4 sind jawohl absolute trivial, aka eine Rundungsoperation.
 
  • Gefällt mir
Reaktionen: max9123 und Recharging
Die Frage ist ob es sich einfach wie hier alle behaupten um ein "Nearest Neighbor" Verfahren handelt.

Das geht aus dem Artikel nicht heraus, trotzdem wird hier von vielen Leuten genau das behauptet. Zum Drüberstreuen kopieren einige sehr gewiffte sogar Code herein, so much wow.
 
  • Gefällt mir
Reaktionen: Pulsar77
gaelic schrieb:
Die Frage ist ob es sich einfach wie hier alle behaupten um ein "Nearest Neighbor" Verfahren handelt.

Das geht aus dem Artikel nicht heraus, trotzdem wird hier von vielen Leuten genau das behauptet. Zum Drüberstreuen kopieren einige sehr gewiffte sogar Code herein, so much wow.

Wie gesagt eine Instruktion (in Hardware) mehr, die aber nicht viel macht.
 
Und die Info, daß diese Instruktion einfach nur eine Nearest Neighbor Interpolation macht hast du woher?
 
  • Gefällt mir
Reaktionen: Pulsar77
gaelic schrieb:
Und die Info, daß diese Instruktion einfach nur eine Nearest Neighbor Interpolation macht hast du woher?

Siehe ComicArt, ich kann das Bild easy reproduzieren, noch Fragen?

"Integer Scaling" bedeutet hier dass durch die Rundung auf den Nachkommateil gepfiffen wird

Wenn ich also zwischen 2 Pixeln a und b bin, bekomme ich entweder a oder b zurück und
keinen interpolierten Wert dazwischen.
 
Zuletzt bearbeitet:
Es ist wohl auch etwas eine Frage wie der GPU Hersteller das hochskalieren letztlich implementiert. Als eine Art Postprocessing shader, der beim Framebuffer swap das Bild hochskaliert, oder als Teil des HDMI/Displayport-interfaces, das das hochskalieren on the fly macht. Beim ersteren kann man andere Skalierungsverfahren leicht nachträglich implementieren, beim letzteren nicht. Jedoch kann jeder GPU Hersteller das Hochskalieren per Shader prinzipiell auch auf jeder Graphikkarte über den Treiber ermöglichen. Denn solche Treiber Postprocessing Geschichten gibt es auch schon seit Jahren....

franzerich schrieb:
Wenn das Verhältnis der Anwendungsauflösung und Bildschirmauflösung aber nicht einem ganzzahligen Verhältnis entspricht, muss interpoliert werden (z.B. 720p Anwendungsauflösung auf 1080p Bildschirmauflösungentspricht einem Verhältnis von 1:1,5 statt einem ganzzahligen Verhältnis von 1:2). Das Ergebnis davon ist zwangsläufig unscharf. Die (Intel, Nvidia, AMD) haben es sich halt einfach gemacht und einheitlich für alle Fälle denselben Interpolationsalgorithmus verwendet. Deswegen ist das Ergebnis selbst bei ganzzahligen Verhältnissen (wie 720p Anwendung auf 1440p Bildschirm) noch unscharf. Und das ist schon irgendwie ärgerlich.
Hier ist doch auch die nearest neighbor interpolation möglich, jedoch sind dann eben manche columns breiter und manche rows höher als andere.....
 
Zuletzt bearbeitet:
@CB wollt ihr nach gefühlten zehn Updates den Artikel nicht einfach mal in die Tonne hauen? Ich hab mir die ganze Zeit nur gedacht "was schreiben die hier wieder fürn Unsinn?" bis ganz unten endlich mal die tatsächlichen Fakten standen... Oder einfach neu rausbringen jetzt wo ihr alle Infos korrekt zusammen habt, aber das hier ist das digitale Äquivalent zu Frankenstein 😆
 
  • Gefällt mir
Reaktionen: Pulsar77
Na endlich nehmen sich die GPU-Hersteller mal der Sache an. Ich fand es schon immer bescheuert, dass kein einziger Monitor diesen Skalierungsmodus von sich aus unterstützt. Dabei wäre es das einfachste der Welt, wenn ein 4k-Monitor bei FullHD-Zuspielung einfach aus einem Pixel vier macht und somit eine knackscharfe Darstellung ermöglicht, damit man beispielsweise wenn die GPU für ein aktuelles Spiel in 4k zu schwach ist, immerhin in FullHD spielen kann ohne Abstriche gegenüber einem nativen FullHD-Monitor in puncto Schärfe machen zu müssen.
Stattdessen vermatschen ALLE 4k-Monitore die Darstellung von FullHD lieber total. Keine Ahnung, was sich die Monitorhersteller dabei gedacht haben, vermutlich gar nichts.
Dass man GPU-Skalierung benutzen muss, um eine solch triviale Skalierung nachzurüsten, ist eigtl. lächerlich. Dass werden sich Nvidia, Intel und co. wohl auch gedacht haben, und darum war das bislang ganz unten auf der Prioritätsliste.
Da sich aber nunmal mehr und mehr 4k-Monitore durchsetzen, und auch Leute, die keine RTX2080ti kaufen wollen, um halbwegs flüssig in 4k zu spielen, gerne 4k-Monitore kaufen würden, braucht es diese Skalierung. Mich persönlich hatte genau das vor einem Jahr noch vom Kauf eines 4k-Monitors abgehalten. Ich wusste ganz genau, dass ich das meiste aktuelle nicht in 4k spielen kann, und dass FullHD auf dem teuren 4k-Monitor im Vergleich zum alten (nativen) FullHD-Monitor total beschissen aussehen wird. Also hab ich als Kompromiss nicht gleich einen 4k-Monitor, sondern erstmal nur 1440p gekauft.... Wäre da klar gewesen, dass Integer Scaling zeitnah kommt, hätte ich wohl zum 4k-Modell gegriffen.
 
  • Gefällt mir
Reaktionen: Dr.Bondage
"da die Pixelwiederholung für scharfe Bilder, aber eben auch scharfe Kanten sorgt. "
Verstehe das Problemnicht. Ein scharfes Bild ist von mir immer bevorzugt, ermüdet auch nicht so sehr.
 
Weyoun schrieb:
Ich kenne KEINEN Monitor oder TV, der bei einem 2k auf 4k Upsacling nicht die Pixel verdoppelt. [...]

Wenn man sich die Infos aus dem weiterführenden Link durchliest scheint es ja eher genau das Gegenteil zu sein.
Lediglich einige wenige Monitore und TVs nutzen diese Variante des Upscalings.

QShambler schrieb:
[...] Kann das daher nicht einschätzen was die machen mein UltraSharp macht sowas jedenfalls nicht :-D.
[...]
Ich für meinen Teil hab immer als erstes die Grafiktreiber Skalierung ausgeschalten und bisher dann nie Probleme gehabt.

Dann gehört dein UltraSharp aber wohl zu den Ausnahmen.

Blutschlumpf schrieb:
[...] Stell das Spiel doch einfach auf FHD, dann gibt die Grafikkarte FHD aus und der Monitor macht aus einem Pixel 4, fertig.
Bei mir ist jedenfalls nichts unscharf wenn wenn ich den Monitor mit geringeren Auflösungen betreibe.

Die meisten Monitore und TVs machen das wohl nicht so (siehe Infos im weiterführenden Link in der News).
Wäre die Funktion im Grafiktreiber verankert (so wie ja jetzt geschehen), könnte man dem Monitor/TV einfach ein skaliertes Bild senden und gut.
 
Weyoun schrieb:
Das macht doch aber ein 4k-Display bereits, wenn ein 2k-Bild ankommt! Also einfach in FHD spielen und der Monitor macht dann automatisch via Integer Scaling 4k. Im Spiel selbst muss man kein 4k aktivieren.
Macht mein CX48 nicht, der zermatscht das Bild. Daher bin ich froh das es das Feature nun gibt. Wenngleich ich bei meinem TV die 4096x2160er Auflösung erst via Custom Resolution Tool löschen musste, damit das Feature korrekt funktioniert
 
Zurück
Oben