So synchronisieren Sie die Position einer Ebene mit einer Ebene in einer anderen (zeitlich neu zugeordneten) Comp

Also machen wir eine 2D-Animation. Wir haben Charakter-Assets in PSD.

Wir haben eine „Charakter“-Zusammenstellung, die Folgendes enthält: „Augen“-Zusammenstellung, „Mund“-Zusammenstellung und „Körper“-Zusammenstellung. "Body" hat den 2-Sekunden-Gehzyklus des Charakters. Was in "Character" einer Schleife zeitlich neu zugeordnet wird. Aber wenn der Charakter geht, bewegt sich sein Körper in einer wackeligen Auf- und Abwärtsbewegung. Das Problem beginnt dort: Wir müssen „Augen“ und „Mund“ mit der Auf- und Abbewegung des Körpers synchronisieren. Es ist keine Option, die Position dieser Ebenen der Position des Body-Assets zuzuordnen, da das Body-Asset nur 2 Sekunden Animation hat. Danach hören "Mund" und "Augen" einfach auf, wo sie waren.

Ich denke, es muss eine Möglichkeit geben, dies mit Ausdrücken zu tun. Aber da wir kein Code-versiertes Studio sind, können wir uns nicht hinsetzen und einen schreiben.

Wie können wir ein solches Ziel erreichen?

Danke für die Hilfe.

Bearbeiten: Sie können unsere Komposition hier herunterladen: http://www.mediafire.com/download/v255kgid7ej56m0/walk.zip

Also um dich richtig zu verstehen. Sie haben 2 Kompositionen in einer Hauptkomposition und Komposition 1 hat animierte Assets in sich und Sie haben dann Komposition 1 innerhalb der Hauptkomposition neu zugeordnet und müssen nun die Bewegung von Komposition 1 mit Komposition 2 synchronisieren? (Kein Asset in Comp 2?) Es könnte hilfreich sein, wenn Sie eine einfache AE-Datei hochladen könnten, die das Problem zeigt.
Comp 1 enthält animierte Assets und wird innerhalb der Hauptkomposition zeitlich neu zugeordnet, ja. Comp 1 in Main Comp hat dort keine Bewegung. Ich möchte die Bewegung (Position) von Comp 2 mit einem Asset in Comp 1 synchronisieren. Werde die AEP-Datei so schnell wie möglich bereitstellen.

Antworten (1)

Wenn Sie bestimmte Eigenschaften über mehrere Kompositionen verknüpfen möchten, können Sie dies nur mit Ausdrücken tun. Sie sind aber wirklich nicht schwer und es geht um 1-2 Linien.

Um beispielsweise die Position einer Ebene in einer anderen Komposition zu ermitteln, können Sie Folgendes tun:

comp("Comp Name").layer("Layer Name").transform.position

Klicken Sie einfach auf die Positionsstoppuhr der Ebene, auf die Sie diese Position anwenden möchten, und geben Sie diesen Befehl ein. Um es zu brechen. Wählen Sie zuerst die gewünschte Komposition nach Namen und dann die gewünschte Ebene in dieser Komposition aus:

comp("Comp Name").layer("Layer Name")

Dieser Teil besagt, dass Sie einen Wert aus dem transformMenü wünschen und der Name des Werts lautet position. Die Position könnte auch nur eine Drehung oder eine andere Eigenschaft sein:

.transform.position

Beachten Sie, dass Sie oft mehrere Werte gleichzeitig erhalten. Position kann beispielsweise 2 oder 3 Werte haben, je nachdem, ob die Ebene 2D oder 3D ist. Diese mehreren Werte werden Ihnen in einem sogenannten Array oder Vektor gegeben. Was jetzt kommt, wird nur benötigt, wenn Sie eine unabhängige Achsensteuerung wünschen und nicht den Positionswert aller 2 oder 3 Achsen auf Ihren Layer anwenden. Um also z. B. nur die Position der y-Achse zu erhalten, können Sie Folgendes tun:

y  = comp("Comp 1").layer("layer1").transform.position[1];
[transform.position[0],y]

Der erfundene Variablenname y bekommt in diesem Fall den y-Achsenwert von layer1zugewiesen. durch Hinzufügen [1]am Ende von position. Die Verwendung [0]würde Ihnen x und [2]z geben.

Dieser Teil wird als Rückgabewert bezeichnet. Sie schreiben es in Form eines Arrays/Vektors. Bedeutung [x-axis-value,y-axis-value]oder [x-axis,y-axis,z-axis]. transform.position[0]bedeutet nur, dass ich den x-Wert DIESER Ebene haben möchte, in die ich den Ausdruck eingebe. Sie können diese Achse also immer noch manuell steuern.

[transform.position[0],y]

Um die zeitliche Neuzuordnung zu berücksichtigen, müssten Sie die gleiche Neuzuordnung auf comp2 anwenden, die Sie auf comp1 angewendet haben. Wenn das nicht das ist, wonach Sie suchen, muss ich vielleicht ein Beispielprojekt sehen.

Bearbeiten: Wenn Sie also die Zeit-Neuzuordnung zum Schleifen von Ebenen und nicht zum Feinabstimmen Ihrer Animation verwenden, sollten Sie sie in dieser Situation nicht verwenden. Um eine bessere Kontrolle zu behalten, sollten Sie einen einfachen Ausdruck für die animierten Assets Ihrer Schleifenkomposition verwenden, um Ihre Animation zu wiederholen.

loopOut(type = "cycle", numKeyFrame = 0);

Fügen Sie dies jeder animierten Ebeneneigenschaft hinzu und machen Sie die Kompositionslänge so lang wie Sie es benötigen. Ihre 2-Sekunden-Animation wird nun so lange wiederholt wie Ihre Komposition, Sie müssen nur Ihre Ebenenlänge auf die neue Kompositionslänge strecken. Dies löst Ihr Problem.

Wenn Sie mehr Sub-Comps in Ihrem Sub-Comp haben, müssen Sie natürlich auch deren Länge erhöhen, damit Sie sie bis zum Ende ihres übergeordneten Comps strecken können.

Weitere Informationen zu diesem Ausdruck finden Sie hier: http://provideocoalition.com/pvcexclusive/story/expression_shorts_-_loop

Wir haben genau das versucht. Aber das Problem dabei ist, dass die zeitlich neu zugeordnete Komp. nicht richtig funktioniert. Zeitlich neu zugeordneter Comp hat nur 2 Sekunden Animation. Nach 2 Sekunden steht also kein Wert in ".transform.position".
Dann einfach mal den comp2 auf die gleiche Weise neu zuordnen?
Ich schaute in Sie comp. Gehe ich richtig davon aus, dass Sie nur die Zeit neu zuordnen, um Ihre Animation zu wiederholen?
Ich habe meine Antwort bearbeitet, ich habe diese Methode an Ihrem Projekt ausprobiert und das Gesicht wackelt nach der 2-Sekunden-Markierung einwandfrei.
Obwohl der Loopout-Ausdruck besser ist, können Sie valueAtTime verwenden, um den Wert der Eigenschaft zu einem beliebigen Zeitpunkt zu verwenden. Dies tut, was es verspricht: myProperty.valueAtTime(t) gibt den Wert der Eigenschaft myProperty zum Zeitpunkt t zurück . Jetzt ist die gewünschte Eigenschaft die Position der anderen Ebene, und die gewünschte Zeit ist der Wert der Zeit-Neuzuordnung der aktuellen Ebene (timeRemap), also würden Sie im obigen Ausdruck comp("Comp Name") verwenden. layer("Layername").transform.position.valueAtTime(timeRemap)
Danke an alle. Aber es schneidet immer noch nicht ab. Wenn ich diesen Ausdruck also nicht für timeRemap verwende, wo kann ich ihn dann einfügen? Wie Sie sehen können, verwenden wir diesen Ausdruck in unseren Schleifen. Aber der Ausdruck ist in der Zeit neu zugeordnet. Außerdem kann ich Assets keinen Loopout-Ausdruck hinzufügen, da wir eine manipulierte nullgesteuerte ik-Puppe verwenden. Ich kann timeremap nicht zu Nullen hinzufügen.
Nein, nein, Sie fügen nichts Zeit-Neuzuordnung hinzu. Sie fügen es einfach zu jeder Ebene hinzu, die Keyframes enthält, und die Ebene wird diese Keyframes für immer mit diesem Ausdruck wiederholen. Sie verwenden es anstelle von Time Remap und verwenden es auf den Ebenen in Ihrer Komposition anstelle der Komposition selbst.
Also füge ich die Ausdrücke als Ausdrücke zu den animierten Eigenschaften hinzu, richtig?
Richtig. Es wird keine Ihrer Keyframes entfernen, sondern sie nehmen und für immer wiederholen. Alles, was Sie tun müssen, ist, die Länge der Ebene nach Bedarf zu erhöhen, und die Animation wird so lange wiederholt, wie Ihre Ebene lang ist.