Seite 1 von 1

Interlacing in PC-Engines

Verfasst: 30.08.2009, 20:03
von Krishty
Hi,

Ich wollte mal fragen, was ihr von Interlacing in Engines (speziell in PC-Engines, da Konsolen umgebungsbedingt darauf zurückgreifen) haltet.

Die Funktionsweise: Die Engine erzeugt ihre Render-Targets – mit Ausnahme der Swap-Chain – in halber vertikaler Auflösung. Alle geraden Frames rendern ausschließlich in die geraden Zeilen des Render-Targets, alle ungeraden Frames in die Ungeraden. Technisch lässt sich das durch Shader (bspw. im finalen Shader, oft dem Tone-Mapping-Operator), Stencil-Buffer, oder (soweit ich vermute) die gezielte Nutzung von DXGI realisieren.

Die Idee: Auf schwachen Systemen – dafür ist diese Sache gedacht – sind anspruchsvolle Spiele oft in der Füllrate limitiert, vor allem durch HDR-Render-Targets und schwere Post-Processing-Effekte. Rendert man nur Halbbilder, spart man dort relativ viel ein. Man erreicht dann bei gleichem Detaillevel eine höhere zeitliche Auflösung – vergleichbar mit einem Halbieren der Bildschirmauflösung – und nimmt dafür aber die üblichen Interlacing-Artefakte in Kauf. Der kritische Punkt ist nun, dass die erhöhte Frame-Rate das Spielgefühl verbessert, und zwar vor allem die Reaktionszeit für Benutzereingaben. Ein Spiel, das sich bei 20 fps noch wabberig und schwammig steuert, läuft dann mit effektiven 30 bis 35 fps flüssig.

Die Nachteile:
  • Kein Anti-Aliasing. Fällt bei schwachen GPUs aber generell flach.
  • Die Shader für Fullscreen-Effekte wie Bloom etc. müssen angepasst werden.
  • Interlacing-Artefakte. Das ist der Knackpunkt – wie störend wären die denn eigentlich?
Ihr habt also bessere Grafik und mehr Frames pro Sekunde. Dafür, dass ihr nun schneller zielen könnt, sind aber die Ziele u.U. schwerer zu erkennen, oder? Würde das Otto-Normal-User, der auch 8×-Anti-Aliasing nicht erkennt, überhaupt auffallen? Oder würde er sich einfach freuen, dass er den Optionsregler nun von „Minimum“ auf „Mittel“ hochschieben kann?

Kennt ihr PC-Spiele, die soetwas nutzen?

Gruß, Ky

Re: Interlacing in PC-Engines

Verfasst: 30.08.2009, 21:18
von Helmut
Also bei meinem Raytracer damals hat es sich definitiv gelohnt:)

Obs bei hohen Frameraten viel bringt weiß ich nicht, aber sehr schwer dürfte das bei ner Graka ja auch nicht zu implementieren sein. Nur würde ich das an deiner Stelle erst tun, wenn das Spiel fertig ist ;)

Ciao

Re: Interlacing in PC-Engines

Verfasst: 30.08.2009, 22:03
von Richard Schubert
Interlacingartefakte sind wohl außergewöhnlich störend. Wobei das natürlich auf die Veränderungsgeschwindigkeit des Bildes ankommt. Bei schnellen Spielen (FPS, Racing Games) sicherlich unzumutbar. Langsamere Genres (RPG mit fester/langsamer Kamera, RTS) sind sicherlich dafür geeigneter.

Performancemäßg betrachtet ist das ganze auch eher fragwürdig, da du extra Code auf der GPU ausführen musst. Sei es per Stencil Buffer oder per clip() intrinsic, in beiden fällen ist es erstmal mehr Arbeit. Da die GPUs auch noch in Quads oder vielleicht sogar größeren Buckets rechnen, wirst du so vielleicht gar nicht so viel sparen, weil Texel der nichtberechneten Nachbarpixel eh im Cache liegen müssen oder gar der Pixelshader komplett ausgeführt werden muss. Ob dann am Ende noch Speicherbandbreite gespart wird beim Schreiben einer jeden zweiten/vierten Zeile ist dann vielleicht noch drin.

Also ich würde die Finger davon lassen.

Re: Interlacing in PC-Engines

Verfasst: 30.08.2009, 23:27
von Schrompf
Falls Dein Spiel am Ende auf einem Fernseher angezeigt wird, lohnt sich das definitiv. Die machen nämlich alle möglichen Deinterlace-Tricks, die bei einem normalen FullHD-Computerbild einfach nur stören, aber für Interlaced-Datenquellen ideal sind. Falls Dein Spiel also auf einer XBox360 oder PS3 laufen soll, die ja bekanntermaßen schwache Grafikkarten eingebaut haben, kann sich der Trick lohnen. Für PC-Spiele allerdings würde ich dringend darauf verzichten - PC-Monitore haben keine passende Deinterlace-Hardware, das Zeilenflimmern würde also Live an den Nutzer durchgereicht werden. Und der wird es Dir mit vielen Flüchen danken.

Re: Interlacing in PC-Engines

Verfasst: 30.08.2009, 23:28
von Krishty
Richard Schubert hat geschrieben:Interlacingartefakte sind wohl außergewöhnlich störend. Wobei das natürlich auf die Veränderungsgeschwindigkeit des Bildes ankommt. Bei schnellen Spielen (FPS, Racing Games) sicherlich unzumutbar.
Ich kenne diese Artefakte vom (schleppend langsamen) Play-Station-2-Emulator und finde sie auch nicht hübsch – sie sind mir allerdings lieber als eine nochmal signifikant geringere Frame-Rate. Der Knackpunkt ist ja gerade, dass es kein Grafikproblem ist, sondern sich auf die gesamte Hauptschleife, insbesondere auf die Reaktionszeit der Steuerung auswirkt.
Richard Schubert hat geschrieben:Performancemäßg betrachtet ist das ganze auch eher fragwürdig, da du extra Code auf der GPU ausführen musst.
Du verstehst mich falsch, dieses Bisschen zusätzlicher Arbeit ist doch marginal, wenn du vorher die Hälfte aller Pixel (inklusive bei Tone-Mapping, Deferred Lighting, …) sparst:

(Die Skizze ist idealisiert, übertreibt den wahrscheinlichen Performance-Gewinn, das Interlacing ist nicht präzise, aber besser habe ich es eben in Paint nicht hingekriegt):
Sketch.png
Sketch.png (2.46 KiB) 3000 mal betrachtet
Schrompf hat geschrieben:Für PC-Spiele allerdings würde ich dringend darauf verzichten - PC-Monitore haben keine passende Deinterlace-Hardware, das Zeilenflimmern würde also Live an den Nutzer durchgereicht werden. Und der wird es Dir mit vielen Flüchen danken.
Wird er darüber mehr fluchen als über Muster und Flimmern in Schatten und SSAO, die ja ebenfalls daher rühren, dass man untersampled? Vor allem, wenn dann plötzlich alles flüssiger geht oder man bei gleicher Frame-Rate die Einstellungen weiter hochdrehen kann?

Re: Interlacing in PC-Engines

Verfasst: 31.08.2009, 08:42
von Schrompf
Krishty hat geschrieben:
Schrompf hat geschrieben:Für PC-Spiele allerdings würde ich dringend darauf verzichten - PC-Monitore haben keine passende Deinterlace-Hardware, das Zeilenflimmern würde also Live an den Nutzer durchgereicht werden. Und der wird es Dir mit vielen Flüchen danken.
Wird er darüber mehr fluchen als über Muster und Flimmern in Schatten und SSAO, die ja ebenfalls daher rühren, dass man untersampled? Vor allem, wenn dann plötzlich alles flüssiger geht oder man bei gleicher Frame-Rate die Einstellungen weiter hochdrehen kann?
Keine Ahnung. Vielleicht, vielleicht auch nicht. Ich würde im Zweifelsfall dann lieber SSAO in einem Viertel der Bildschirmauflösung rechnen oder sowas... Interlacing erscheint mir irgendwie einfach zu plump als Trick, aber das ist zugegebenermaßen subjektiv. Wenn man mit Sicherheit weiß, dass die Anzeige ein Interlace-System ist, wäre das einer billiger wirksamer Trick. Aber ich wüsste nicht, wie man das mit Sicherheit herausbekommen könnte.

Re: Interlacing in PC-Engines

Verfasst: 31.08.2009, 10:33
von Richard Schubert
Krishty hat geschrieben:
Richard Schubert hat geschrieben:Performancemäßg betrachtet ist das ganze auch eher fragwürdig, da du extra Code auf der GPU ausführen musst.
Du verstehst mich falsch, dieses Bisschen zusätzlicher Arbeit ist doch marginal, wenn du vorher die Hälfte aller Pixel (inklusive bei Tone-Mapping, Deferred Lighting, …) sparst:
Ja, auf den ersten Blick ist das eine Halbierung der Füllrate, allerdings halbierst du damit auch die Größe der Triangles auf dem Screen. Was bei hoher Triangledichte durchaus auf Parallelisierung der GPU beeinträchtigen könnte. Somit vermindert man automatisch auch die mögliche Füllrate, welche man mit der höheren Auflösung erreicht hätte. Selbst wenn du eine 9800GTX. Zusätzlich dann der Overhead des Interlace Renderings. Am Ende wird es sicherlich schneller sein, aber unter 60%-70% der Origninalgeschwindigkeit wirds vermutlich nicht werden.

Ein Problem wirst du zusätzlich bekommen wenn du generell in der halben Auflösung renderst. Die Texturen werden nicht in der Mipmapstufe angezeigt, welche für das interlacete Ziel notwendig wäre. Sicher spart man so wieder Speicherbandbreite/Cachemisses, aber alles auf Kosten der Bildqualität.

Am PC ist mir auch kein Interlacing Monitor bekannt. Auf Xbox360, PS3, Wii kann man zwar auslesen welches Signal ausgegeben wird, allerdings ist das bei jedem Endverbraucher anders aber die Console hardwaremäßig die gleiche.

Re: Interlacing in PC-Engines

Verfasst: 31.08.2009, 19:56
von dowhilefor
Ich würd gerne mal meine unqualitative Meinung einwerfen :) Ich hab keine Ahnung von der Materie ... aber wie wäre es denn wenn man pro Frame die auszulassenden Zeilen tauscht, sprich diesen Frame alle geraden Zeilen, den nächsten Frame alle ungeraden Zeilen. Würde das auffallen? Würde das einen Gewinn bringen?
Ist mir nur spontan eingefallen :)

Re: Interlacing in PC-Engines

Verfasst: 31.08.2009, 20:02
von klickverbot
dowhilefor hat geschrieben:Ich würd gerne mal meine unqualitative Meinung einwerfen :) Ich hab keine Ahnung von der Materie ... aber wie wäre es denn wenn man pro Frame die auszulassenden Zeilen tauscht, sprich diesen Frame alle geraden Zeilen, den nächsten Frame alle ungeraden Zeilen. Würde das auffallen? Würde das einen Gewinn bringen?
Ist mir nur spontan eingefallen :)
Das ist doch gerade das Prinzip von Interlacing, oder verstehe ich dich falsch?

Re: Interlacing in PC-Engines

Verfasst: 31.08.2009, 20:09
von dowhilefor
Das ist doch gerade das Prinzip von Interlacing, oder verstehe ich dich falsch?
Sorry kann sein das ich das falsch verstanden habe ... aber ich dachte, die auszulassenden Zeilen bleiben jeden Frame über gleich ... meine Idee war es halt hin und herzuschalten. Natürlich ist es nicht mehr meine Idee wenn es immer schon so gemacht wurde :)

Re: Interlacing in PC-Engines

Verfasst: 02.09.2009, 00:20
von Krishty
Richard Schubert hat geschrieben:Ja, auf den ersten Blick ist das eine Halbierung der Füllrate, allerdings halbierst du damit auch die Größe der Triangles auf dem Screen. Was bei hoher Triangledichte durchaus auf Parallelisierung der GPU beeinträchtigen könnte.
Ich halbiere die Fläche der Dreiecke. Auf vereinigten Architekturen sollte die aber nicht mehr ausschlaggebend sein, sondern der eigentliche Verschnitt taucht an den Kanten auf, die die Hardware als 2×2-Pixel-Blöcke berechnen muss. Kleinere Dreiecke sind zweifelsohne schwerer zu parallelisieren, aber weil der Umfang eines Dreiecks anders als seine Fläche schrumpft, lässt es sich nicht automatisch nurnoch halb so gut parallelisieren. Ich würde darauf tippen, dass man am Ende 50% der Dreiecksflächen rasterisiert, dabei aber jeden Pixel zu 141% der Originalzeit, also rund 70% der Originalzeit (oder 30% Gewinn). Die reduzierten Cache-Misses sind da nicht mit drin.

Den ganz großen Gewinn sehe ich aber bei Fullscreen-Effekten, die fast ausnahmslos Füllratenlimitiert sind. Nimmt man einen Deferred-Renderer – wie z.B. den von Stalker – bei der die Hauptlast mit Beleuchtung und Tone-Mapping im Fullscreen-Pass liegt, dürften 60% der Originalzeit nicht mehr utopisch sein. Das wäre eine Steigerung von 20 auf 33 fps.
Richard Schubert hat geschrieben:Ein Problem wirst du zusätzlich bekommen wenn du generell in der halben Auflösung renderst. Die Texturen werden nicht in der Mipmapstufe angezeigt, welche für das interlacete Ziel notwendig wäre. Sicher spart man so wieder Speicherbandbreite/Cachemisses, aber alles auf Kosten der Bildqualität.
Stimmt, das dürfte insbesondere bei Text und UI *sehr* hässlich werden, aber auch auf normaler Geometrie nicht gerade hübsch aussehen :/ (OT: Ist das vielleicht der Grund, warum man so selten Texturfilterung auf der PS2 gesehen hat?)


Also zusammenfassend: Keine wirkliche Anwendungsmöglichkeit bzw nur, wenn bei der Bildqualität eh schon alles verloren ist. Danke für die Erleuchtung :)


Warum interlaced man eigentlich nicht die Spalten statt der Zeilen? Die Puffer würden dann weniger gestreckt, was dem Cache zugute kommen könnte?

Re: Interlacing in PC-Engines

Verfasst: 02.09.2009, 02:45
von Helmut
Krishty hat geschrieben:Warum interlaced man eigentlich nicht die Spalten statt der Zeilen? Die Puffer würden dann weniger gestreckt, was dem Cache zugute kommen könnte?
Na die alten TV Röhren schicken den Elektronenstrahl ja zeilenweise an den Schirm, und anscheinend kommt das Interlacing ja nur da zum Einsatz. Jetzt kann man sich natürlich fragen, warum die Röhren das zeilenweise machen, vermutlich weil das Bild breiter als hoch ist und so seltener die Richtung des Strahls geändert werden muss..

Re: Interlacing in PC-Engines

Verfasst: 02.09.2009, 09:24
von Lord Delvin
Ich vermute eher, dass es noch schlechter wirkt, wenn mans vertikal macht. Unsre Wahrnehmung ist horizontal und vertikal nicht gleichgut...versuch einfach mal Distanzen zu schätzen und schau wie sehr du dich irrst.
Gruß