Geometrieentzerrung mit hoher Qualität (Shader)

  • Wie angekündigt, ist hier ein Shader (GLSL/HLSL) für die Geometrieentzerrung für gekrümmte Leinwände. Es geht von einer variablen Kissenverzerrung aus. Die Kurve folgt dabei einer Parabel. Bei mir passte die Funktion praktisch perfekt.



    Hier geht es zu den Shadern: Projekt bei Github



    Das Script unterstützt momentan verschiedene Arten der Verzerrung. Alle werden gleichzeitig durchgeführt und mittels Linear, Bikubisch oder Lanczos interpoliert. Das Bild wird auch direkt auf die Zielgröße skaliert, so dass die interne Skalierung von MPV nichts mehr zu tun hat (die steht dann automatisch auf Bilinear, egal was man konfiguriert hat).



    Winkelabhängige Kissenverzerrung:




    Beide Dimensionen:



    Biegung:



    Trapez:



    Linearität:



    MPV (GLSL):

    Am besten, man platziert den Shader in ein Unterverzeichnis "shaders" und aktiviert ihn über die mpv.conf.

    Code: mpv.conf
    glsl-shaders=shaders/warping.glsl



    MPC-HC mit madVR (HLSL):

    Die HLSL-Datei kann im Unterverzeichnis "Shader" im MPC-HC-Verzeichnis abgelegt werden. Dann ist sie in den Optionen automatisch verfügbar und kann nach der Skalierung konfiguriert werden. MPC-HC aktualisiert das Bild übrigens sofort, wenn sich die HLSL-Datei ändert. Man muss den Film dazu nicht mal stoppen. :)




    Die Qualität mit Bikubisch und Lanczos ist jedenfalls besser als das, was die gängigen Warping-Software abliefern. Aber selbst zu Bilinear ist der Unterschied nicht riesig. Hier ein Beispiel mit zweidimensionaler Kissenverzerrung. Die Ausschnitte wurden auf die vierfache Größe skaliert, um die Unterschiede deutlicher zu machen.


    Original:


    Bilinear:


    Lanczos4:



    Das Warping wird nach der Skalierung durchgeführt, also auf der Zielauflösung. Das brachte qualitativ die besten Ergebnis und war problemlos, wenn vorher bereits skaliert und für einen Anamorphoten vorverzerrt wird. Bikubisch ist bei mir ca. doppelt so schnell wie Lanczos4 und Bilinear ca. sechs mal so schnell wie Bikubisch/Lanczos3. Da Bikubisch qualitativ praktisch gleichwertig ist mit Lanczos3 ist dieses standardmäßig aktiviert.


    Ich überlege noch, ob ich das per Script in den Desktop injiziere, ähnlich wie dwm_lut das macht. Dann hätte man immer Warping. Theoretisch könnte man sich mit einer HDMI-Capture-Karte auch eine Geobox "light" bauen.



    Bekannte Probleme:

    • Das OSD wird nicht verzerrt
    • Die Zielauflösung ist hartkodiert im Script und kann nicht zur Laufzeit geändert werden


    Viel Spaß damit! Anregungen sind gerne willkommen. :)

  • Zitat:
    "Ich überlege noch, ob ich das per Script in den Desktop injiziere, ähnlich wie dwm_lut das macht. Dann hätte man immer Warping. Theoretisch könnte man sich mit einer HDMI-Capture-Karte auch eine Geobox "light" bauen."


    Das wäre der Wahnsinn. :respect:

  • Damit kommst du meiner Frage zuvor :sbier:

    Ich muss auch bei jedem Projektor, selbst ohne Anamorphot, immer die "Mitte-Links" und "Mitte-Rechts" Positionen angleichen, das passt nie auf Anhieb, so dass alles äquidistant ist - das bringt die Krümmung schon mit sich.


    Wie hast du das nun gelöst? Einfach eine Funktion/Parameter implementiert, um die Verschiebung anzugleichen?

    Wäre es nicht auch denkbar, einfach mehr Punkte anfassen zu können? 5x5 oder auch 5x3. Weil man muss ja grundsätzlich auch in der Mitte korrigieren können, sobald etwas von oben runter projiziert wird. Da sind nach meiner Erfahrung 5x3 Punkte das Mindeste für ein halbwegs korrektes Ergebnis.


    Ansonsten fetter Respekt dafür, dass Du mal eben ein Warping Tool raushaust! Große Klasse! Und du empfindest die Qualität tatsächlich besser als mit Immersive Display Pro? Das wäre ein weiterer Grund, dann doch noch irgendwann die Hürde mit dem MPV zu nehmen.

  • Wie hast du das nun gelöst? Einfach eine Funktion/Parameter implementiert, um die Verschiebung anzugleichen?

    Ja, das sind einfache Formeln, die auf die Koordinaten angewendet werden. Es gibt also keine Anfasspunkte wie bei den Warpingprogrammen. Im Grunde brauchen wir die auch nicht, da unsere Leinwände ja sehr berechenbare Formen haben und die Verzerrung dementsprechend auch berechenbar ist. Bei mir passt es übrigens erstaunlich gut. Es kann sein, dass man hier und da noch was verbessern kann, aber ich denke, die meisten könnten damit schon sehr gut leben.


    Ansonsten fetter Respekt dafür, dass Du mal eben ein Warping Tool raushaust! Große Klasse!

    Danke! Es war dann doch erstaunlich einfach mit den Shadern. Das hätte ich so nicht gedacht. :)

    Und du empfindest die Qualität tatsächlich besser als mit Immersive Display Pro?

    Wie gesagt, der Unterschied ist eher gering. Bikubisch/Lanczos sind minimal schärfer als Bilinear, also das, was Display Pro benutzt und die NVIDIA Quadro. Man muss schon genau hinschauen und direkt vergleichen, damit man es sieht.

  • Ich habe es inzwischen in einem Prototypen geschafft, den Desktop zu warpen. Damit wäre auch das GUI verzerrt. Leider ist durch den Shader nur die Grafik betroffen, nicht aber der Cursor und die Koordinaten für das Klicken (z.B. auf Buttons). Das ist natürlich dann so mit der Maus kaum bedienbar. Für Video, Untertitel usw. reicht es aber.


    Der große Vorteil der nachträglichen Verzerrung ist, dass die anamorphe Verzerrung und der Zoom vom Player erledigt werden können. Das hat dann zur Folge, dass auch kleiner gezoomte Bilder korrekt in der Krümmung abgebildet werden. Das klappt zwar auch, wenn der Shader in MPV alles auf einmal macht, aber dort fehlt momentan die Automatisierbarkeit.


    Ich denke noch mal darüber nach, was eigentlich die beste Lösung wäre...

  • Zitat:
    "Ich überlege noch, ob ich das per Script in den Desktop injiziere, ähnlich wie dwm_lut das macht. Dann hätte man immer Warping. Theoretisch könnte man sich mit einer HDMI-Capture-Karte auch eine Geobox "light" bauen."


    Das wäre der Wahnsinn.

    Erinnert mich an Deinen/unseren Versuch vor Jahren Nils! Der Envy hat die Lücke für viele mit dem Extreme geschlossen, aber ich denke es gibt noch viele Leute mit gekrümmten Leinwänden, die Interesse an so einer 4k Lösung haben !

    Bei mir könnte Sie zwischen den Prokjektor und den Lumagen, oder besser zwischen die Quellen ATV/Mediaplayer/BR Player?

    In meiner PC IT Laienvorstellung, ein Mini Basis pc ohne soundkarte etc, HDMI in/out und dort 1 x die Krümmung genau anpassen und dann immer das Signal inkl. Hdr/P3 2020 pass tough durch "schleifen" und nicht wieder anfassen ???

    Ich bin betrunken vom Kitsch und bitter vor Neid.

    Frag ich den Regisseur, sagt er:Es tut mir leid,

    Das alles ist doch nur zur Unterhaltung gedacht.

    Was kann ich dafür, wenn ihr daraus ein Drama macht ?!“


    Aus dem Lied "Kintopp" von Keimzeit 1990

  • Hier noch mal eine Version, die auch die Skalierung von MPV bezüglich der Krümmung unterstützt, also wenn man für CIH z.B. das 16:9-Bild kleiner macht. Dummerweise muss man die Zielauflösung direkt in das Script eintragen. Der Vorteil ist, dass man die Skalierung/Entzerrung von MPV durchführen lassen und zur Laufzeit ändern kann. Das erleichtert die Handhabung deutlich.


    Weiterhin hänge ich mich jetzt nach der Skalierung ein. Die Qualität ist somit höher, die Rechenlast allerdings auch. Bikubisch reicht nach meinen vergleichen vollkommen aus. Daher ist das hier aktiviert.


    Code
    siehe ersten Beitrag
  • Hier noch mal eine erweiterte Korrekturmöglichkeit. Man kann die Biegung (bow) angeben und damit die waagerechte Linie (also die ohne Verzerrung) nach oben oder unten verschieben. An der Gesamtkrümmung ändert das nichts.


    Ohne Biegung:


    Mit Biegung:


    Ich denke damit hat man so langsam alle Parameter, um das Bild an die gekrümmte Leinwand anzupassen. Und das komplett ohne Punktkorrektur. :)

  • FoLLgoTT

    Changed the title of the thread from “MPV Shader: Warping für gekrümmte Leinwände” to “Shader: Warping für gekrümmte Leinwände (madVR & MPV)”.
  • Das ist ja mal geil! Danke dafür! (Hättest aber ruhig auch mal machen können, bevor ich Geld für Immersive Display Pro ausgegeben habe :zwinker2:).

    Bis ich mal dazu komme, den ganzen MPV Kram auszuprobieren, gehen wahrscheinlich Jahre ins Land. Aber "nur" Dein Warping in meine stabil laufende MadVR Installation einzubinden, das könnte ich sogar innerhalb von Wochen schaffen :beated:. Wird auf jeden Fall getestet!

  • Hallo Nils,

    ich habe den Shader für MPC-HC installiert.

    Mit den Parametern komme ich nicht so ganz klar.

    Könntest Du sie bitte noch ein wenig erläutern?


    Gruß

    Christian

  • Könntest Du sie bitte noch ein wenig erläutern?

    Klar. Ganz allgemein kann man die Kürrmung mit distortionFactorY einstellen. Fang einfach mal mit 0.2 oder ähnliche kleine Werte an. Mit distortionCenterY kannst du dann die Mitte der Verzerrung festlegen. Werte kleiner 1 verschiebt die Mitte nach unten und >1 nach oben. Mit den beiden Parametern (die reichen schon fast) würde ich erstmal anfangen und ein bisschen rumspielen. Das Schöne ist, dass MPC-HC das Bild sofort aktualisiert, wenn du die Datei im Editor änderst und speicherst.


    Wenn du dann konkrete Fragen hast, nur zu. :)

  • Meinen herzlichen Dank für deine Arbeit vorweg!


    Nun versuche auch ich mit MPV warm zu werden und scheitere schon an den absoluten BAsics.

    MPV (GLSL):

    Am besten, man platziert den Shader in ein Unterverzeichnis "shaders" und aktiviert ihn über die mpv.conf.

    glsl-shaders=shaders/warping.glsl


    Was heißt das genau? Leider fand ich noch keine Bedienungsanleitung zum kopieren und "platzieren" von Code.

    ich habe einen Ordner erstellt in C:\Users\rumpeli\AppData\Roaming\mpv

    darin mit texteditor die Datei mpv.conf mit dem Inhalt "glsl-shaders=shaders/warping.glsl"

    und ein UNterordner "shaders" mit der selbst eretellten Datei "warping.glsl" Ein Datei zum Download fand ich im Github link nicht. Also habe ich den code aus Github in meine Datei kopiert.



    Irgendwas davon ist wohl falsch, denn im mpv Player sehe ich keine Krümmung.



    Wenn ich mal gelernt habe wie man warping.glsl zum laufen bekommt, dann funktioniert die selbe Methode vielleicht auch für vf_remove_logo.c ?

  • MIt der Eingabeaufforderung tat ich mich schwer. Aber auf der Suche nach dem mpv Arbeitverzeichnis wurde ich dann doch fündig. Eigentlich sollte das C:\Users\rumpeli\AppData\Roaming\mpv führend sein, dachte ich. Dann habe ich die mpv.conf und den Shadersordner in das Verzeichnis C:\Program Files\mpv mit der mpv.exe kopiert und siehe da, es funzt.


    Mit mpv.net, dem mpv frontend mit schönem Userinterface, klappt es allerdings noch nicht. Entweder das ist das config Verzeichnis noch irgendwo versteckt wo ich es noch nicht fand oder das warping-glsl funktioniert damit nicht - bin noch am ausprobieren. Das gehört hier aber nicht direkt rein. Edit, hat geklappt.


    Danke noch mal!

Jetzt mitmachen!

Don’t have an account yet? Register yourself now and be a part of our community!