Der Virtuelle Matadorbaukasten (4)

Kniffe und nützliche Hinweise zum Bauen, Lagern, Reinigen usw.
Antworten
AndyZaf
Beiträge: 19
Registriert: 02.09.2021 13:43

Der Virtuelle Matadorbaukasten (4)

Beitrag von AndyZaf »

In diesem 4.Abschnitt wollen wir die Vorgangsweise zur Animation von Matador-Modellen kennenlernen. Dazu sind zuerst einige einleitende Erklärungen zur Drehung in MLCad und POV-Ray notwendig. Ansonsten wird es später schwierig, komplexere Bewegungen von Matadormodellen korrekt zu erstellen.


Drehen von Teilen
----------------------

Wir wollen weiterhin für die Erklärungen das Käfig-Modell aus den vorherigen Kapiteln verwenden. Dazu werden wir die Gittertür zum Drehen bringen, sie soll sich öffnen. Im folgenden wollen wir uns daher testweise Drehungen im MLCad Käfig-Model näher ansehen.

Wir laden also das Käfig-Modell wieder in MLCad. Es ist hier zum Runterladen:
kaefig1.zip
(936 Bytes) 9-mal heruntergeladen

Ich empfehle, einen neuen Ordner namens 'kaefig_anim' zu erstellen, und das Zip dorthin zu entpacken.

Nun stellen wir MLCad unter 'Einstellungen/Allgemein/Ändern' die Stufengröße so ein, daß bei feiner Auflösung jeder Klick auf den Drehungsbutton eine Drehung von 15° bewirkt:

einstellungen.jpg
einstellungen.jpg (47.36 KiB) 183 mal betrachtet

Einstellungen speichern. - Wir selektieren nun die Tür und klicken dann den Button 'rotieren'. Der Käfig ist in MLCad so orientiert, daß die Höhe der y-Achse entspricht. Um die Tür zu drehen, müssen wir sie selektieren (klicken), dann den rechten der 'y'-Dreh-Buttons dreimal klicken. Die Stufenweite (siehe oben) ist auf 15° gesetzt, die Tür öffnet und verdreht sich insgesamt um 45°.

Leider sehen wir, daß die Drehung nicht so abläuft, wie erwartet. Die Rotation scheint nicht um die Türachse (95mm Stäbchen) erfolgt zu sein. Sie hat sich seltsam 'ungewollt' bewegt. Woran liegt das?

drehen1.jpg
drehen1.jpg (56.54 KiB) 183 mal betrachtet
MLCad kann ohne Eingabe nicht wissen, welches die Drehachse ist und wählt eine 'Default-Achse'. Daher wird in einem solchen Fall immer um die y-Achse gedreht. Und das ist nicht die Achse der Käfigtür. Schlecht. Diese Tatsache sorgt bei neuen Usern oft für Verwirrung.

Wir müssen also dem Editor 'mitteilen', um welche Achse wir drehen wollen. Wie in der Anleitung von MLCad erklärt, wählen wir dazu zwei Elemente (Ctrl+Click): Zuerst die Achse, dann das Teil, das gedreht werden soll.

(Hinweis: Wir müssen dazu sicherstellen, daß die Achse im Modell auch 'selektierbar' ist. Sie darf daher weder zur Käfigbasis-Gruppe, noch zur Tür-Gruppe gehören! Es können nur einzelne Objekte oder Gruppen geklickt werden, nicht aber Elemente innerhalb einer Gruppe. - In der runtergeladenen Modelldatei ist aber alles korrekt vorbereitet.)

Am besten ist es, das Modell komplett neu aus dem Ordner 'kaefig_anim' zu laden, um wieder die Ausgangslage herzustellen. Selektieren wir nun die Achse und dann die Tür, haben wir folgende Situation, nachdem wir wieder dreimal den rechten 'y'-Dreh-Button geklickt haben:

drehen2.jpg
drehen2.jpg (61.66 KiB) 183 mal betrachtet

Beachte, wie sich einige Zahlen in MLCad verändern. Das ist die 'Drehmatrix' (siehe Bild), die die Drehung der Tür im Editor beschreibt. Es ist jedoch nicht notwendig, dort zu editieren oder sonstwie einzugreifen.-

Der Vollständigkeit halber möchte ich erwähnen, daß es in MLCad einen Button 'Rotationspunkt' gibt. Dann öffnet sich ein Fenster, wo man den Drehpunkt manuell (Koordinaten) eingeben kann. Ich empfehle, dies wegen Fehleranfälligkeit nicht zu verwenden.

Im nächsten Kapitel widmen ich mich, aufbauend auf den Erklärungen hier, POV-Ray Animationen bzw. der digitalen Filmerstellung.
AndyZaf
Beiträge: 19
Registriert: 02.09.2021 13:43

Re: Der Virtuelle Matadorbaukasten (4)

Beitrag von AndyZaf »

Wir haben in der Einleitung also gesehen, wie wir Rotationen definieren, und auch, wie diese in MLCad bzw. in der Modelldatei erscheinen.

Wir wollen uns nun ansehen, wie ein Ausgangsobjekt im LDView-Modell (ldr) zu einem POV-Modell wird.
Ich habe dazu eine Zeile ('1'), die Käfigtür, aus der LDView Ausgangsdatei mit der entsprechenden Zeile, die in der POV-Ray Datei erscheint ('3'), dargestellt:

matching.jpg
matching.jpg (91.72 KiB) 167 mal betrachtet

Wir sehen, daß in der POV-Ray Datei sogar der originale Block aus der ldr-Datei als Kommentar ('2') erscheint. (Kommentare beginnen in POV-Ray mit doppelten Schrägstrich, also // .) Die 'Übersetzung' des Modells gewissermaßen, ist in POV-Ray die mit '3' markierte Zeile.
In der ldr-Datei werden Kommentare mit '0' gekennzeichnet. Also werden alle Zeilen, die mit '0' beginnen in LDView nicht dargestellt, sowie von L3P ignoriert. Sie erscheinen im POV-Ray ebenfalls am Kommentar. Nun allerdings mit dem '//' am Zeilenanfang.

Für unsere Animation benötigen wir eine Drehung, und zwar nur des Objekts 'Käfig-Tür). Es bestehen prinzipiell zwei Möglichkeiten:
1) Wir dehen die Tür im Ausgangsmodell (ldr-Datei) (Wurde im vorherigen Abschnitt erklärt, Rotationsbutton etc.)
2) Wir drehen im von L3P erstellten POV-Ray Modell

Es zeigt sich, daß die Rotationskommandos in POV-Ray Datei erscheinen müssen. Und zwar deshalb, weil die Drehdefinition dort zur Verfügung stehen muß, damit die Animations-Variable in POV-Ray darauf zugreifen kann.

Dennoch wäre es von Vorteil, den POV-Ray-Code schon in der ldr-Datei einzufügen. Denn alle manuellen Einträge in der POV-Ray Datei werden bei einem neuen Lauf von L3P überschrieben, aber nicht Einträge in der Ausgangsdatei. Es ist nun aber einfach möglich, die Blöcke schon dort zuzufügen: Nämlich, indem die POV-Ray Kommandos als Kommentar 'verkleidet' werden! Wie diese manuell abgeänderte Datei nach der Übersetzung in die POV-Datei aussieht, veranschaulicht folgendes Bild:

matching2.jpg
matching2.jpg (95.81 KiB) 167 mal betrachtet
Diese Vorgangsweise hat den wesentlichen Vorteil, daß wir die manuelle Änderung nur einmal vornehmen müssen. Das Modell kann weiterhin in MLCad angezeigt und verändert werden. Die zugefügten Blöcke stören nicht, weil sie Kommentare sind. Bei der Übersetzung mit L3P entstehen Zeilen, die alle mit // x/x beginnen, also ebenfalls (POV) Kommentare sind. Wir müssen nun also nur noch, wenn wir eine Animation machen wollen aus diesen Zeilen diesen Anfangstring rauslöschen. Das machen wir mit Ctrl H (siehe Bild). Damit werden die Animationszeilen 'freigeschaltet' und aktiver POV-Ray-Code.

Aus dem Bild sehen wir auch, daß eine Rotation immer eine POV-Ray Einleitungszeile vor dem Objekt ('union {') und insgesamt 4 Zeilen (translate, rotate etc.) nach dem Objekt benötigt. Beachte, daß die zweimalige Verschiebung (='translate' in POV-Ray) wiederum darauf zurückzuführen ist, was im vergangenen Kapitel erklärt wurde: Verschieben des Objekts in die 0-Achse, drehen, danach wieder zurückschieben.-

Nun sind wir fast am Ziel: Wir müssen nur noch die eigentliche Rotation in POV-Ray definieren. Dazu stellt es die Animations-Variable 'clock' zur Verfügung. Diese ist in der POV-Ray Definitionsdatei 'povray.ini' definiert, normalerweise läuft sie von 0 bis 1. Auch die Bilderzahl wird dort definiert. Beispiel: Mit 50 Einzelbildern: Bild 0 ('Initial_Frame') und Bild 49 (Final_Frame).

Meine POV-Ray-Zeile: rotate (90)*clock*y dreht das Objekt 'Käfiggitter' um 90° um die Achse 'y'

Machen wir alles so wie vorher beschrieben und starten POV-Ray, werden tatsächlich 50 Dateien erstellt. (Es empfiehlt sich, diese in einem Verzeichnis 'Video', parallel zu 'images' zu erstellen.) Sie werden auf dem PC recht zügig erstellt.

Die Bilder müssen nun nur noch 'aneinandergehängt' werden. Ich verwende dazu das Programm 'Avidemux'. Ja, auch dieses ist gratis und kann hier runtergeladen werden:
https://sourceforge.net/projects/avidemux/
Die Installation ist sehr einfach. Es kann auch eine Kompression zu mp4 vornehmen, andernfalls wird die Videodatei (zu) groß. Auch die Abspielgeschwindigkeit kann verändert werden. (Detailliertere Hinweise zur Video-Erstellung folgen in einem anderen Kapitel.) Wichtig: Falls noch nicht vorhanden, müssen wir natürlich noch einen Video-Betrachter installieren. Ich habe dazu 'VLC' in Verwendung.

Eine Zusammenstellung der (modifizierten) ldr-Dateien, der generierten POV-Ray Datei und der POV-Ray Definitionsdatei ist hier:

kaefig_animation.zip
(6.45 KiB) 11-mal heruntergeladen

Die erstellte Video-Datei ist so klein (200kB), daß ich sie hier als Zip erscheinen lasse.

kaefig_video.zip
(199.73 KiB) 12-mal heruntergeladen

Fortsetzung folgt.
AndyZaf
Beiträge: 19
Registriert: 02.09.2021 13:43

Re: Der Virtuelle Matadorbaukasten (4)

Beitrag von AndyZaf »

In diesem Zusatzkapitel wird auf weiterführende Details zum Thema Animation eingegangen. Diese erleichtern das Verständnis und dienen auch dazu, sich mit dem Videoprogramm Avidemux besser vertraut zu machen.

Rotation
----------
Sehen wir uns nun den 'Rotationsblock' in der ldr-Datei etwas näher an. Die Achse namens 'MT_a95e.dat' ist ein Matador-Grundelement' aus der Bibliothek. Diese Achse befindet sich an der Position <-100, 25, 0>. Damit die Tür diese Drehachse erhält, müssen wir sie dorthin schieben

rotier3.jpg
rotier3.jpg (51.98 KiB) 98 mal betrachtet

(POV-Ray Kommando: 'translate', aber inverse Vorzeichen). Nach erfolgter Drehung (POV-Ray Kommando: 'rotate'), wird die Tür wieder zurückgeschoben ('translate').
Der entsprechende Code in POV-Ray, nach der Übersetzung mit L3P:

rotier4.jpg
rotier4.jpg (41.61 KiB) 98 mal betrachtet


Erläuterungen zur Videoerstellung
------------------------------------------
Es folgend nun einige Beispiele zur Erstellung von Videos: Im Normalfall verwenden wir 25 Bilder pro Sekunde. D.h., ein Video, das aus 25 Bildern besteht, benötigt 1 sec zum Abspielen. In unserem Beispiel mit der drehenden Gittertür hatten wir 50 Bilder erstellt. Die komplette Drehung der Tür (um 90°) dauert also 2sec.

avide1.jpg
avide1.jpg (62.89 KiB) 98 mal betrachtet

Wir starten nun das Rendering in POV-Ray. Dieses liefert also ein Set von Bildern der Animationssequenz. Wir öffnen das erste Bild, Dateinamen endend mit '00'. Avidemux lädt das kompletter Bilderset. Die Videolänge wird angezeigt:

avide2.jpg
avide2.jpg (68.34 KiB) 98 mal betrachtet

Durch Klicken auf den blauen Pfeil links unten wird die komplette Bildersequenz zum Testen abgespielt. Beachte, daß mein Bild die Animation am Ende des Zyklus (clock =1 ) zeigt, die Tür ist 90° geöffnet. Das blaue Rechteck in Avidemux zur manuellen Steuerung des angezeigten Bildes ist rechts.

Zur Erstellung des Videos (und Kompression) sind folgende zwei Menüpunkte wichtig:

VideoCodec : 'mpeg4 ASP'
Ausgabeformat : 'MP4 Muxer' oder 'mkv Muxer'

Sollten einiger dieser Optionen nicht wählbar sein, müssen evt.sog.Codecs nachinstalliert werden. Details dazu erklärt die Anleitung zu Avidemux und würden hier zu weit führen.

Die eigentliche Videoerstellung startet man mit dem blauen Button in Avidemux, oben links (Disk). Es muß der Videoname eingegeben werden, dann beginnt die Erstellung der Videodatei (Format: .mp4). Die Dauer des Vorgangs ist von Computergeschwindigkeit, Auflösung und Anzahl der Bilder abhängig.


Erweiterung der Videosequenz
-------------------------------------
Abschließend wollen wir dieses Video nun etwas erweitern: Die Käfigtür soll öffnen, danach aber auch wieder schließen. - Wenn wir die Tür in der gleichen Geschwindigkeit bewegen wollen wie zuvor, verwenden wir also eine Einstellung mit 100 Bildern.
Wir wollen aber das Video zusätzlich verlängern, also verlangsamen. Dazu rendern wir 200 Bilder. Das Video wird 8sec (=200/25) dauern.

Folgender Einträge müssen in povray.ini rein:
##################
Initial_Clock=0
Final_Clock=1
Initial_Frame=0
Final_Frame=199
##################


In unserer Modelldatei kaefig.ldr muß die Kommentarzeile für die Animation von
rotate (90) * clock * y
verändert werden zu:
rotate (90) * y * select(clock-0.5, 2*clock, 2-2*clock)

Dies bewirkt, daß der Drehwinkel von 0° (clock=0) zu 90° wird (clock=0.5) und am Ende des Zyklus wieder 0° ist (clock=1)
(Details zur select() Funktion von POV-Ray findet man in der Dokumentation.)
Die ldr-datei wird wieder mit L3p in eine POV-Datei konvertiert und abschließend alle Animations-Kommentare der Art '// x/x' gelöscht. Dann kann man ein neuerliches Rendering in POV-Ray starten, und die Bildsequenz wiederum in Avidemux laden.

Das LDView-Set (.ldr) dieses Käfigmodells mit den eingetragenen POV-Animationsblöcken ist in folgender ZIP-Datei:
kaefig_anim1.zip
(1.02 KiB) 6-mal heruntergeladen

Das fertig gerenderte Video habe ich wegen der Größe auf Youtube vorbereitet:
https://www.youtube.com/watch?v=1jNkQ5390r4

Ich werde dort in Zukunft auch weitere Videos, die ich für Forum-Posts mache, ablegen.

(Fortsetzung folgt)
AndyZaf
Beiträge: 19
Registriert: 02.09.2021 13:43

Re: Der Virtuelle Matadorbaukasten (4)

Beitrag von AndyZaf »

In diesem Kapitel wollen wir nun die Animation des Käfigs etwas weiter treiben. Es soll der Zusammenbau in einzelnen Schritten animiert werden. Wir teilen das Objekt in verschiedene Lagen: Boden, Gitter, Gitterpfosten, Türgitter, Dach unten, Dach oben und am Ende Schließen des Gitters, also 7 Guppen:

0 < clock < 0.2 Boden
0.2 < clock < 0.4 Gitter (vert.)
0.4 < clock < 0.6 Türpfosten
0.6 < clock < 0.7 Gitter (hor.)
0.7 < clock < 0.8 Dach (1)
0.8 < clock < 0.9 Dach (2)
0.9 < clock < 1 Tür schließen

Diese Teile kommen nacheinander von oben ins Bild und nach 6 Schritten soll der Käfig komplett sein. Es ist Absicht, daß die ersten drei Intervalle jeweils länger sind (0.2) als die restlichen (0.1). Die ersten drei Blöcke bewegen sich nämlich auf dem Bild über eine größere 'Falldistanz' als die übrigen Blöcke.

Dies ist recht einfach. Wir legen um jede Gruppe von Matadorobjekten in der Modelldatei (.ldr) einen POV <translate> Block:

union {
OBJEKT
OBJEKT etc.
translate <0, funktion(clock), 0>
}

Die erwähnte Funktion müssen wir so wählen, daß sie das Bauteil von außerhalb des Bildbereichs mit jedem Weiterschreiten der clock-Variablen weiter ins Bild rückt. Am Ende der Aktion soll das Teil an der Position '0' liegen, so wie es eben ursprünglich (in den vorhergegangenen Kapiteln) lokalisiert war.
Wichtig, die POV-Ray Definition: y Achse -> von oben nach unten, also große negative y-Koordinate -> Teil ist weit oben im Bid.

Bsp: translate <0 , h*(clock-1), 0) bewirkt, daß am Beginn (clock=0) das Teil in Höhe '-h' (oben, außerhalb Bild), am Ende (clock=1) auf Höhe '0' (ohne Verschiebung) ist.

Diese Verschieben darf, je nach Gruppe, erst dann beginnen, wenn das Teil an der Reihe ist. Prinzip: Zuerst der Bodenbereich (0<clock<0.2), dann die vertikalen Gitter (0.2<clock<0.4) usw. Dies erreichen wir wieder mit der POV-Ray select() Funktion. Das klingt verwirrend, ist aber recht einfach, wenn wir den animierten Ablauf vor uns haben.

ldr_Blocks_1_2.jpg
ldr_Blocks_1_2.jpg (49.27 KiB) 81 mal betrachtet

Am Ende des Prozederes wird das Tor geschlossen. Diese Operation ist wegen der Rotation komplexer. Wir haben dies aber bereits im letzten Kapitel beschrieben und übernehmen die Logik direkt von dort.

Wie erwähnt, führen wir eine POV-Ray Variable 'h0' ein. Da alles in den ldr-Dateien definiert werden soll und danach L3p übersetzt, müssen wir dies speziell handhaben. (Wir können die Variable nicht direkt in die POV-Ray Datei aufnehmen, sonst würde sie bei jedem neuen Aufruf von L3p wieder überschrieben.)

Lösung: Es wird h0 in eine kleine Include-Datei namens 'const inc' geschrieben. Diese enthält nur eine Zeile, die Definition von h0. L3p wird mit einem zusätzlichen Parameter -ib aufgerufen (in der run.bat Kommando-Datei). Das bedeutet, L3p schreibt in den Eingangsbereich der POV-Datei die Zeile '#include const.inc'. Fertig.
Wir wollen für dieses Beispiel eine Dauer des Videos von 8 sec. Also benötigen wir (25*8=) 200 Bilder. Dies definieren wir wiederum in povray.ini.

Hier ist die zugehörige Modelldatei:

kaefig_assembly.zip
(1.18 KiB) 5-mal heruntergeladen
L3p erstellt daraus wieder eine POV-Datei. Wir stellen sicher, daß im POV-Ordner auch das benötigte const.ini vorhanden ist und starten Rendering. Avidemux generiert das Video. Wir sehen, daß es tatsächlich eine Länge von 8 sec hat.

kaefig_asse.jpg
kaefig_asse.jpg (25.69 KiB) 81 mal betrachtet

Auf Youtube:
https://www.youtube.com/watch?v=c6TKfI8U0aQ


Variante:
-----------
Ich wollte das Video nun etwas abändern: Es sollte die Animation genau wie vorher ablaufen, aber alles bereits beim clock-Wert von 0.8 enden. Von 0.8 bis 1.0 soll nur die fertige Szene dargestellt werden (Ruhe), sich also nichts mehr bewegen.

Hier gibt es sicher eine Vielzahl von Lösungsmöglichkeiten.
(Es wäre natürlich möglich gewesen, die Animation aus dem vorherigen Beipiel ohne Ruheintervall abzuändern und das finale Bild mehrfach zu kopieren, die Namen mit fortlaufenden Nummern zu versehen und danach Avidemux genauso arbeiten zu lassen.)

Meine Lösung, die Animation und damit die Ausdrücke f(clock) anzupassen wird trickreicher als gedacht.
Interessanterweise empfiehlt es sich, zusätzlich die Variable h0 etwas anzupassen, damit im ersten Bild der Bodenbereich des Käfigs nicht sofort sichtbar ist. h0 ist hier 2500 (vorher 2200) und wird in const.in geschrieben.

Trickreich ist es, in POV-Ray die Türdrehung korrekt zu definieren: Sie soll bei 9/12 starten und bei 10/12=5/6 enden.
Der Ausdruck wird ein geschachteltes 'select':

f(clock) = rotate (90)*select(clock - 9/12, 0, select(clock-10/12, -12*(clock-9/12), -1))*y

Wir haben folgende Intervalbereiche von clock:

0 < clock < 2/12 Boden
2/12 < clock < 4/12 Gitter (vert.)
4/12 < clock < 6/12 Türpfosten
6/12 < clock < 7/12 Gitter (hor.)
7/12 < clock < 8/12 Dach (1)
8/12 < clock < 9/12 Dach (2)
9/12 < clock < 10/12 Tür schließen
10/12 < clock < 1 Ruhe


Wir wählen 300 Bilder total, also eine Videodauer von 300/25 = 12 sec. Dieses Video auf Youtube:
https://www.youtube.com/watch?v=Lr-Sg-54M8M


(Fortsetzung folgt)
Antworten