Interlacing in PC-Engines

Für Fragen zu Grafik APIs wie DirectX und OpenGL sowie Shaderprogrammierung.
Antworten
Benutzeravatar
Krishty
Establishment
Beiträge: 8316
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Interlacing in PC-Engines

Beitrag 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
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Helmut
Establishment
Beiträge: 237
Registriert: 11.07.2002, 15:49
Wohnort: Bonn
Kontaktdaten:

Re: Interlacing in PC-Engines

Beitrag 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
Benutzeravatar
Richard Schubert
Moderator
Beiträge: 106
Registriert: 27.02.2009, 08:44
Wohnort: Hohen Neuendorf (b. Berlin)
Kontaktdaten:

Re: Interlacing in PC-Engines

Beitrag 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.
Produktivität über Performance - XNA Creators Club
Benutzeravatar
Schrompf
Moderator
Beiträge: 5044
Registriert: 25.02.2009, 23:44
Benutzertext: Lernt nur selten dazu
Echter Name: Thomas
Wohnort: Dresden
Kontaktdaten:

Re: Interlacing in PC-Engines

Beitrag 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.
Früher mal Dreamworlds. Früher mal Open Asset Import Library. Heutzutage nur noch so rumwursteln.
Benutzeravatar
Krishty
Establishment
Beiträge: 8316
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: Interlacing in PC-Engines

Beitrag 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) 2992 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?
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Benutzeravatar
Schrompf
Moderator
Beiträge: 5044
Registriert: 25.02.2009, 23:44
Benutzertext: Lernt nur selten dazu
Echter Name: Thomas
Wohnort: Dresden
Kontaktdaten:

Re: Interlacing in PC-Engines

Beitrag 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.
Früher mal Dreamworlds. Früher mal Open Asset Import Library. Heutzutage nur noch so rumwursteln.
Benutzeravatar
Richard Schubert
Moderator
Beiträge: 106
Registriert: 27.02.2009, 08:44
Wohnort: Hohen Neuendorf (b. Berlin)
Kontaktdaten:

Re: Interlacing in PC-Engines

Beitrag 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.
Produktivität über Performance - XNA Creators Club
Benutzeravatar
dowhilefor
Moderator
Beiträge: 173
Registriert: 27.02.2009, 15:44
Alter Benutzername: 6SidedDice
Echter Name: Nico Probst
Wohnort: Bochum
Kontaktdaten:

Re: Interlacing in PC-Engines

Beitrag 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 :)
Mein Gehirn besteht nur noch aus einem hash-index, ich weiss was ich kenn aber kenn nicht was ich weiss
klickverbot
Establishment
Beiträge: 191
Registriert: 01.03.2009, 19:22
Echter Name: David N.

Re: Interlacing in PC-Engines

Beitrag 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?
Benutzeravatar
dowhilefor
Moderator
Beiträge: 173
Registriert: 27.02.2009, 15:44
Alter Benutzername: 6SidedDice
Echter Name: Nico Probst
Wohnort: Bochum
Kontaktdaten:

Re: Interlacing in PC-Engines

Beitrag 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 :)
Mein Gehirn besteht nur noch aus einem hash-index, ich weiss was ich kenn aber kenn nicht was ich weiss
Benutzeravatar
Krishty
Establishment
Beiträge: 8316
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: Interlacing in PC-Engines

Beitrag 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?
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Helmut
Establishment
Beiträge: 237
Registriert: 11.07.2002, 15:49
Wohnort: Bonn
Kontaktdaten:

Re: Interlacing in PC-Engines

Beitrag 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..
Benutzeravatar
Lord Delvin
Establishment
Beiträge: 597
Registriert: 05.07.2003, 11:17

Re: Interlacing in PC-Engines

Beitrag 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ß
XML/JSON/EMF in schnell: OGSS
Keine Lust mehr auf C++? Versuche Tyr: Get & Get started
Antworten