So erzielen Sie einen Trippy-Breathing-Effekt (visuelles Driften) auf einem statischen Foto

Wie kann ich einen trippigen visuellen Drifteffekt erzielen, als würde das Bild atmen?

Siehe Abschnitt Die visuellen Komponenten einer psychedelischen ErfahrungVisuelles Abdriften oder genauer gesagt dieses Fragment dieses Videos .

Jede Softwarelösung ist in Ordnung, aber ich würde mich am meisten über eine Implementierung in Processing oder Javascript freuen

Was meinst du mit einer Implementierung in "Processing"? Wenn Sie versuchen, dies programmgesteuert zu tun, ist dies möglicherweise besser für Stack Overflow geeignet. Können Sie den Effekt in Ihrer Frage auch direkter beschreiben? Der von Ihnen bereitgestellte YouTube-Link ist aus urheberrechtlichen Gründen bereits tot und der andere Link könnte in Zukunft tot sein. Auch wenn externe Klarstellungen hilfreich sind, ist es am besten, wenn Ihre Frage auch ohne sie bestehen kann.
Processing ist eine Programmiersprache, die auf Videomanipulation und visuelle Effekte ausgerichtet ist. Verarbeitung.org
Übrigens könnten Sie wahrscheinlich ein Foto vor die Kamera halten und es verschieben, um den gewünschten Effekt zu erzielen. Es wird natürlich nicht perfekt aussehen, aber es ist eine Option.

Antworten (1)

Sie können einen solchen Effekt mit ein paar Verzerrungsfiltern aus den meisten Videobearbeitungs- oder Animationspaketen erzielen. Beispielsweise könnten Sie in FCPX/Motion ein paar Bulge-Verzerrungsfilter oben rechts und unten links anwenden und die Skalierung und den Radius entsprechend anpassen.

In Bezug auf die Implementierung selbst stimme ich zu, dass es sich um eine Frage für StackOverflow handelt (sobald Sie versucht haben, es selbst zu schreiben). Der Algorithmus ist ziemlich einfach. Wenden Sie für alle Pixel innerhalb des Radius eine Zuordnungsfunktion entlang des Vektors von der Mitte zum aktuellen Punkt an. Zum Beispiel (in Pseudocode):

distort (vec2 center, float radius, float amount)
{
    for (each pixel in the image)
    {
        vec2 dir = pixel.coord - center;
        float dist = dir.length()
        if (dist >= radius)
        {
            outPixel = pixel;
        }
        else
        {
            float percent = dist / radius;
            float newPos = pow(percent, amount);
            dir = dir / dist;
            vec2 newCoord = dir * newPos * radius;
            outPixel = getPixel(newCoord);
        }
    }
}