Ich habe mich auch mal an einem Shader versucht Für Non Linear Stretch (16:9 auf Display Auflösung).
Das ist vlt für Scope User interessant.
Der Shader benutzt eine exponentielle Skalierung anstatt einer linearen für das Strecken.
Zusätzlich habe ich einen möglichen Bereich für die Mitte hinzugefügt, bei der nicht gestreckt wird.
//!HOOK MAINPRESUB
//!BIND HOOKED
const float stretchFactor = 1; //increase to add center area with no stretch at all (start with 1.1 for example)
vec2 stretch(vec2 pos, float stretchRatio) {
float mix_stretch = pow(stretchRatio, stretchFactor);
float x = pos.x - 0.5;
float actualx = x * stretchRatio ;
float newx = mix(x * abs(x) * 2.0, x, mix_stretch) ;
if ((newx / actualx) < 1) {
return vec2(newx + 0.5, pos.y);
} else {
return vec2(actualx + 0.5, pos.y);
}
}
vec4 hook() {
float sourceRatio = target_size.x / target_size.y;
float displayRatio = HOOKED_size.x / HOOKED_size.y;
float stretchRatio = sourceRatio / displayRatio;
return HOOKED_tex(stretch(HOOKED_pos, stretchRatio));
}
Alles anzeigen
Damit das funktioniert muss man in der Config "no-keepaspect" benutzen (oder mpv mit dem Flag starten).
Den Shader dann laden per Config:
glsl-shaders-append="C:\Users\User\AppData\Roaming\mpv\Shaders\nonlinear_stretch.glsl"
oder passendem Pfad.
Disclaimer: Die Option no-keepaspect deaktiviert eine Menge der restlichen Bildverschiebungsoptionen (siehe https://mpv.io/manual/master/).
Ich bin selber kein Fan von NLS, wollte aber mal versuchen das selber zu programmieren und benutze es selber nicht.
D.h. Support ist eher limitiert
Danke an FoLLgoTT für die indirekte Motivation mit deinem Warping Shader. Ich hätte mich sonst nicht getraut
Vielleicht ist der Shader ja für jemanden nützlich.