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.
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.