Frage

Ich denke an Bewegungsunschärfe in meine 2D-Programm Spann, aber ich bezweifle, die Ergebnisse meiner aktuellen Algorithmus.

Mein Ansatz wie folgt aussieht im Moment:

  • Draw Backbuffer.
  • Wenn die Zeit zu aktualisieren Frontpuffer, mischen, um das Backbuffer auf den vorderen Puffer.
  • Wiederholen

Was würde dazu führen, die „Motion Blur“ -Effekt ist offensichtlich die Mischung, als Objekte in Bewegung ein Verblassen Spur verlassen wird.

Das auf der Hardware eindeutig nicht sehr anspruchsvoll ist, wird die doppelte Pufferung sowieso und der einzige zusätzliche Schritt ist das Mischen der Alpha erfolgen, was eine einfache Berechnung ist. Allerdings werden die Wege sehr scharf und nicht verschwommen an alle, die vielleicht ein bisschen seltsam aussieht. Ich könnte eine Box Blur auf dem Back-Puffer vor dem Mischungsschritt zu tun, aber es fühlt sich an wie es auf Low-End-Systemen wie dem Nintendo DS sehr anstrengend werden.

Gibt es Lösungen, die ich es tun lassen, effizienten oder ergibt ein besser aussehendes Ergebnis?

War es hilfreich?

Lösung

Wirklich sollten Sie viele Zwischenbilder machen und sie zu einem Ergebnis mischen. Nehmen wir zum Beispiel, dass Ihre Ausgabebildrate 50 fps ist. Sie würden vermutlich ein vernünftiges Ergebnis, wenn man intern bei 500 fps und gemischten Gruppen von zehn Frames zusammen gemacht vor, dass für den Benutzer darstellt.

Der Ansatz, der Sie im Moment verwenden simuliert Ausdauer, als ob Sie mit langsamem Phosphor auf einen alten CRT-Rendering wurden. Das ist nicht wirklich die gleiche wie Bewegungsunschärfe. Wenn Ihre Rahmendauer von 20 ms ist (1000-1050), dann eine Bewegung verwischte Rahmen bestehen aus Renderings überspannt die Rahmen mit 20 ms Dauer, die alle mit der gleichen Gewichtung alpha. Die Persistenz-Lösung besteht aus Renderings von 20, 40, 60, 80, 100 ms vor, ausklingender.

Andere Tipps

Es gibt keinen wirklichen Weg, um es effizienter zu meinem Wissen zu tun. Das ist etwa so effizient wie es geht. Es sieht ziemlich gut, wenn Framerate gut ist, und Bewegung ist nicht zu scharf auch.

Der beste aussehende Plan wäre, für jedes Pixel, eine halbtransparente Linie von der neuen Position in die alten Position ziehen. Dies ist keine triviale Berechnung aber nicht.

Es ist vielleicht nicht sehr scharf sein überhaupt. Es hängt alles von der Blending-Funktion verwendet. Zum Beispiel 0,1 / 0,9 für vorherige / aktuelle Bild bzw. wird noch einige schwache Spur liefern.

Ich mag hinzufügen, dass dies im Wesentlichen ist, wie Bewegung in OpenGL Verwischung erfolgt (durch Akkumulationspuffer)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top