Hallo ihr lieben,
ich hoffe ihr könnt mir helfen. Ich erstelle gerade eine Animation, die am Ende in einer Präsentation als Video gezeigt werden soll. Ich möchte nun erreichen, dass das Video sauber aussieht und ruckelfrei spielt und habe da so meine Probleme damit.
Zunächst sei gesagt, dass ich das ganze in Matlab mache(-n muss), was für solche Zwecke sicherlicht nicht die beste Software ist. Um meinen Workflow zu optimieren würde ich aber nur sehr ungern auf externe Software setzen und versuche daher, alle Berechnungen selbst zu machen.
Um das Problem zu demonstrieren folgendes einfaches Beispiel: Eine Kugel hüpft durch einen Würfel und prallt dabei an den Seiten ab. Im allerersten Versuch sah das ungefähr so aus:
https://vimeo.com/78988200
Ganz klar, haufenweise Aliasing. Ich habe dann also jedes Frame durch einen Antialiasing-Filter geschickt. Neues Ergebnis:
https://vimeo.com/78987613
Schon mal viel besser. Aliasing per Frame ist also nicht das Problem, aber: von Frame zu Frame hüpft es deutlich. Es ruckelt. Die Bewegung ist zu schnell, ergo: ich habe immer noch Aliasing entlang der Zeitachse.
Um das zu lösen habe ich zunächst mal mehr Frames berechnet. Statt 25 Frames für eine Sekunde sagen wir 75 oder 100. Die Frage ist nur, was mache ich dann damit? Ich will am Ende ja schon wieder zurück auf 25fps (Videocodecs kommen mit deutlich mehr als 25 fps nicht so gut aus wie mir scheint). Daher war meine Idee, ähnlich wie beim normalen Antialiasing jetzt wieder eine geeignete "Tiefpass-Filterung" anzuwenden, also die zusätzlichen Frames so miteinander zu verrechnen, dass am Ende wieder 25 Frames rauskommen. Ein zeitliches Anti-Aliasing-Filter quasi.
Die Frage ist nun:
Bin ich damit auf dem richtigen Weg oder wie würde man sowas normalerweise angehen?
Wie entwerfe ich die Filterkoeffizienten dieses Filters? Für das Per-Frame-AA habe ich ein Frame in höherer Auflösung gerendert und dann mit Bilinearinterpolation runterskaliert. Ich wüsste jetzt auf Anhieb nicht so richtig wie ich das entlang der Zeitachse mache.
Hier ein Beispiel wo ich 3-fach oversampled habe (also 75fps) und dann immer drei Frames zu einem kombiniert habe, mit der Wichtung 1/4, 1/2, 1/4:
https://vimeo.com/78987614
Sieht schon besser aus, reicht aber noch nicht. Ich probier's grade mit höherem Oversampling-Faktor.
Zum Vergleich, ein Frame ohne AA und mit 3x zeitlichem AA:
ohne: , mit:
ich hoffe ihr könnt mir helfen. Ich erstelle gerade eine Animation, die am Ende in einer Präsentation als Video gezeigt werden soll. Ich möchte nun erreichen, dass das Video sauber aussieht und ruckelfrei spielt und habe da so meine Probleme damit.
Zunächst sei gesagt, dass ich das ganze in Matlab mache(-n muss), was für solche Zwecke sicherlicht nicht die beste Software ist. Um meinen Workflow zu optimieren würde ich aber nur sehr ungern auf externe Software setzen und versuche daher, alle Berechnungen selbst zu machen.
Um das Problem zu demonstrieren folgendes einfaches Beispiel: Eine Kugel hüpft durch einen Würfel und prallt dabei an den Seiten ab. Im allerersten Versuch sah das ungefähr so aus:
https://vimeo.com/78988200
Ganz klar, haufenweise Aliasing. Ich habe dann also jedes Frame durch einen Antialiasing-Filter geschickt. Neues Ergebnis:
https://vimeo.com/78987613
Schon mal viel besser. Aliasing per Frame ist also nicht das Problem, aber: von Frame zu Frame hüpft es deutlich. Es ruckelt. Die Bewegung ist zu schnell, ergo: ich habe immer noch Aliasing entlang der Zeitachse.
Um das zu lösen habe ich zunächst mal mehr Frames berechnet. Statt 25 Frames für eine Sekunde sagen wir 75 oder 100. Die Frage ist nur, was mache ich dann damit? Ich will am Ende ja schon wieder zurück auf 25fps (Videocodecs kommen mit deutlich mehr als 25 fps nicht so gut aus wie mir scheint). Daher war meine Idee, ähnlich wie beim normalen Antialiasing jetzt wieder eine geeignete "Tiefpass-Filterung" anzuwenden, also die zusätzlichen Frames so miteinander zu verrechnen, dass am Ende wieder 25 Frames rauskommen. Ein zeitliches Anti-Aliasing-Filter quasi.
Die Frage ist nun:
Bin ich damit auf dem richtigen Weg oder wie würde man sowas normalerweise angehen?
Wie entwerfe ich die Filterkoeffizienten dieses Filters? Für das Per-Frame-AA habe ich ein Frame in höherer Auflösung gerendert und dann mit Bilinearinterpolation runterskaliert. Ich wüsste jetzt auf Anhieb nicht so richtig wie ich das entlang der Zeitachse mache.
Hier ein Beispiel wo ich 3-fach oversampled habe (also 75fps) und dann immer drei Frames zu einem kombiniert habe, mit der Wichtung 1/4, 1/2, 1/4:
https://vimeo.com/78987614
Sieht schon besser aus, reicht aber noch nicht. Ich probier's grade mit höherem Oversampling-Faktor.
Zum Vergleich, ein Frame ohne AA und mit 3x zeitlichem AA:
ohne: , mit: