COFFEE Plugin für Datenimport

GreenBeret

Mitglied
hiho. ich habe leider von C(oder C++) und somit auch von COFFEE fast 0 Ahnung ^^. Bei folgender Sache wäre es cool wenn ihr mir helfen könntet:

Es sollen Positions- (und Winkel-)Werte für eine Kamera aus einer Textdatei importiert werden. Es soll also in C4D dann letztendlich eine Kamera entstehen, die alle 3 Frames (dieser Wert "3" kann auch 2 oder 1 sein, sowas ist ja im Code leicht zu ändern) einen Keyframe erhält (bzw Keyframes für Position X, Y, Z, Winkel H, B, P). Diese Werte sind in einer Textdatei gespeichert die z.B. so aussehen könnte)
Code:
Punkt<Tab>X<Tab>Y<Tab>Z<Tab>H<Tab>P<Tab>B<ENTER>
0<Tab>243.122<Tab>423.165<Tab>71.456<Tab>0<Tab>-20.511<Tab>45.496<ENTER>
1<Tab>.......<ENTER>
2<Tab>.........

dieses "<Tab>" steht dabei natürlich für die Tabulator-Taste. Das ganze sieht also z.B. dem Format sehr ähnlich, das entstehen würde wenn man ein Spline exportiert. Ich möchte quasi eine Automatisierung dessen erreichen, das ich auch von Hand machen könnte: nämlich zu Keyframe 0 gehen, eine Kamera erstellen, ihr die Positions und Winkelangaben zuweisen (durch manuelles Eintippen), dann auf "Aufnahme von Position, Größe und Winkel...." klicken, dann die Zeitleiste zu Frame 3 schieben, die neuen Positionswerte und WInkelwerte eintippen, Keys zuweisen, zu Frame 6 gehen...usw....

Weiss irgendjemand wie man das erreichen kann (COFFEE scheint dafür ja die beste Lösung zu sein) ?

MFG

P.S. Mir ist bewusst, das die Kamera sich auch über andere Wege, wie z.B. über "Auf Spline ausrichten" o.ä. bauen ließe, aber diese Methoden eignen sich für mein Vorhaben leider nicht.
P.P.S. Dieses Forum ist durchaus nicht das erste das ich zurate gezogen habe =/
P.P.P.S. Die Interpolation zwischen den gesetzten Keyframes soll ruhig so bleiben wie sie ist (d.h. NICHT lineare sondern eben die normale kubische(?) Interpolation)
P.P.PP..S. Falls keiner die Zeit finden sollte mir da zu helfen könnte man hier evtl mit einzelnen Befehlen helfen, die einem Bekannten von mir (C++ Programmierer) es stark vereinfachen würden das ganze zu Programmieren und dass er sich nicht das ganze Manual zu Coffee durchlesen muss, wie z.B. die namen der funktionen zum erstellen eines keys, oder um 3 frames weiterzuspringen ....
 
Hi GreenBeret!

Diese Frage ist bereits öfters aufgetaucht und fand keine Beantwortung. Somit von mir der Versuch einer Lösung, die zwar wenig elegant - evtl. sogar unbrauchbar ;) - ist, aber vielleicht auf "neue Wege" führt:

1) Der Import.
Es gibt Coffee-Funktionen zum Lesen von externen Daten. Diese funktionieren meines erachtens aber nur in einem "PlugIn" (keine Coffee-Expression) und danach sind die "Tabellen-Werte" mühsam rauszufriemeln.
Alternativer Vorschlag: Spline gepaart mit dem Struktur-Editor als "Daten-Träger". Die Tabelle des Struktur-Editors für eine Spline besteht aus der Punkt-Position und den Tangenten links und rechts, also insgesamt 9 Werten pro Zeile bzw. Punkt. Diese Tabelle läßt sich per Datei / Ascii-Datei hinzuladen (bzw. exportieren) einladen (Anhang: A+B). Die "Werte" der Tabelle haben dabei rein garnichts mit der "tragenden Spline" zu tun und können frei "erzeugt" werden. Die sich ergebene Spline ist NUR Träger von Wertepaaren. :)

2) Die Zuweisung.
Habe versucht per Coffee einen Position-Track mit Position-Sequence und Position-Keys zu erzeugen: ohne Erfolg. Das Maxon-Forum half dabei auch nicht, im Gegenteil: es scheint nicht mit Coffee - nur mit C++ - zu funktionieren :(
(benötigt wird ein PSRKey, der sich einfach nicht erzeugen bzw. setzen läßt. Weiß dort wer mehr, würde ich mich über Hilfe freuen :) )
Somit alternativer Vorschlag per XPresso-Zuweisung: per Coffee-Script werden die Daten der "Daten"-Spline gelesen (Coffee-Script ist nötig, da per Punkt-Node kein Zugriff auf die Tangenten möglich ist) und einem anderen Objekt als Positions- oder Rotations-Werte zugewiesen (Anhang C).
Im unten angefügten Script in Abhängigkeit von der Zeit: der Tabelle wird der Punkt, der dem aktuellen Frame entspricht entlockt und die "Position des Punktes" der "Position des Zielobjekts", die "Linke Tangente des Punktes" der "Rotation des Zielobjekts" zugewiesen.
Nachteil dieser Lösung: es werden für JEDES Frame die Positions- & Rotationswerte benötigt; eine Interpolation erfolgt nicht (könnte allerdings wiederum evtl. per Xpresso realisiert werden ... warum ist die Zeit nur immer so knapp).

Narf, so viel ersteinmal ... vielleicht ist es ja ein "Schuß'n Ofen" ;)

Liebe Grüße,
Mark.
 

Anhänge

  • datenimport.gif
    datenimport.gif
    21 KB · Aufrufe: 143
ahja, vielen dank schonmal soweit
ich habe durchaus verstanden :) das Spline dient als Datenträger und das Zielobjekt (in meinen Fall die Kamera) bekommt bei Frame 0 die Koordinaten und Rotation von Punkt 0, bei Punkt 1 die Koordinaten von Punkt 1 usw ....

es ist kein Problem dass ganze so zu lösen

ich habe jetzt deine Lösung noch nicht ausprobiert...hast du noch die C4D datei dazu ? das wäre cool dann müsste ich das nicht nochmal alles nachbauen aus deinen Screenshots ... wenn nicht, nich schlimm dann versuch ich das selbst aber ich habe mit Xpresso so meine Schwierigkeiten^^

was mich an deinen Screenshots irritiert, ist, wie jetzt C4D wissen soll, welcher Wert auf welche Weise den Winkel zugewiesen werden soll (es soll ja "<-X" zu Winkel H werden usw)
ebenfalls irritiert mich diese Code-Zeile Rotation = pts_tan(Frame*2) ... mal zwei ? hmm wieso ?

ebenfalls stellt sich mir die frage nach der performance: es werden sequenzen importiert die mehrere sekunden lang sind (und weil ich keine interpolation habe wird die text-spline-datei eben 25 bzw. 30 positionen+winkel pro sekunde haben). soll heissen: da kommen mehrerer hundert wertepaare zusammen. würde mir das nicht irgendwie .. performance rauben ?

MfG
 
Hi!

Im Sinne eines "erzwungenen" Lerneffekts, gibt's von mir nie "fertige Files"... ;)

@Performance: ein Spline mit 1500 Punkten ( = eine Minute) benötigt etwa 31 kByte ... meiner Meinung nach "erträglich". Würde hinzu behaupten, daß die Timeline ein ähnliches Volumen benötigt...
Die Interpolation würde sicher Speicher sparen: man könnte per "Coffee: Mix" (XPresso: Mischen) die "Zwischenkeys" linear interpolieren...
"Dramatischer" empfinde ich da, daß das Coffee-Node ständig ALLE Punkte und Tangenten lädt (in Pts_pos und Pts_tan); wird ja eigentlich nur ein Punkt benötigt. Einen einzelnen Punkt kann man dabei anprechen, eine einzelne Tangente wohl nicht...

@Tangenten: var Pts_tan = Spline->GetTangents(); liefert alle Tangenten-Paare der Spline als Array:
linke Tangente von Punkt 0
rechte Tangente von Punkt 0
linke Tangente von Punkt 1
rechte Tangente von Punkt 1
...
deshalb das Pts_tan[Frame*2]: Tangenten 0,2,4... werden herausgefischt. So könnte auch die rechte Tangente (z.B. als Skalierungskeys) per Pts_tan[Frame*2+1] genutzt werden...

@Winkel: geholt wird ein Vektor = Variable mit drei Werten (x,y & z). XPresso ist es dabei wurscht, ob das nun "Positionen" oder "Winkel" sind. Dieser Vektor wird nun dem Winkel (h,p & b) zugewiesen -> H=X, P=Y, B=Z.
Wobei mir diesbezüglich ein Fehler unterlaufen ist: die Werte in obiger Tabelle sind in Grad, das Zielobjekt erwartet aber Radians. Anbei Schaltung, die's korrigiert...

Liebe Grüße,
Mark.
 

Anhänge

  • datenimport2.gif
    datenimport2.gif
    14,2 KB · Aufrufe: 93
ich habe das mit "hast du vielleicht die projektdatei" nicht so ernst gemeint btw ^^

Ich bekomme es halt nicht gebacken, auf der Basis deiner Screenshots das ganze XPresso-Teil nachzubauen. Im Zuge des Lerneffekts wäre doch dann eine Art Schritt-für-Schritt-Erklärung sehr angenehm :D.

MfG

EDIT: HALT ICH HABS HERAUSGEFUNDEN

dieses "Plugin" nach dem ich suche, existiert bereits

Plugins=>Cinema4D=>ASCII-Animations-Import

damit kann ich eine Textdatei importieren und bekomme die Keyframes wunderbar hin, genau so wie ich das wollte

MfG
 
Zuletzt bearbeitet:
Zurück