Gibt es eine Möglichkeit, die Eigenschaften von Subcomp basierend auf der übergeordneten Comp zu ändern?

Ich habe ein Dutzend „Haupt“-Comps, die eine Reihe verschachtelter Comps haben. Ich muss ungefähr 30 Versionen jeder Hauptkomposition mit unterschiedlichen Farben erstellen. Die Unterkompositionen sind animierte Formen, die ihre Farbe aus einem Farbwähler in der Hauptkomposition beziehen. Ich würde gerne vermeiden, alle Subcomps 30 Mal duplizieren zu müssen, damit ich nicht Hunderte von Kopien habe.

Gibt es eine Möglichkeit, eine verschachtelte Komposition basierend auf der Komposition, in der sie verschachtelt ist, zu ändern?

Ich weiß, dass es keine „thisComp.parent“-Option gibt – da ein Comp in vielen verschiedenen Eltern verschachtelt sein kann – aber gibt es eine Möglichkeit, eine Eigenschaft „nach unten“ in einen Subcomp zu „schieben“? Oder einen cleveren Workaround? Macht das Sinn?

Zum Beispiel hat die Hauptkomposition „M01“ Unterkompositionen „S01a“, „S01b“ usw. Die Farben der Formen in S01a usw. basieren auf einem Farbwähler in M01. Ich möchte M01 auf M02 duplizieren, den Farbauswahlwert ändern und S01a S01b den neuen Farbwert übernehmen lassen, ohne sie auf S02a, S02b usw. duplizieren zu müssen, um auf M02 zu verweisen.

Ich verwende True Comp Duplicator, das mit seiner Option "Ausdrücke aktualisieren" ein Lebensretter ist ... aber mein Projekt ist jetzt über 50 MB groß, mit Hunderten von Kompositionen und unhandlich.

(Ich kann in der Hauptkomposition keinen Farbänderungseffekt verwenden; es gibt Transparenzen und Mischmodi, die durcheinander geraten würden.)

Antworten (3)

Sie können Eigenschaften in verschiedenen Kompositionen verknüpfen, indem Sie einen Ausdruck wie diesen verwenden.

comp("Comp Name").layer("Layer Name")("Property e.g. Transform")("SubProperty e.g. Position")

Wenn die Eigenschaft stärker verschachtelt ist, fügen Sie einfach eine weitere hinzu, ("sub property")bis Sie die gewünschte Eigenschaft erreicht haben, so als würden Sie sich durch die Dropdown-Menüs klicken.

Ebenfalls hilfreich: VideoCopilot hat kürzlich ein großartiges kostenloses Skript veröffentlicht, das sich auf genau diese Art der Vorkompilierung von 3D-Ebenen spezialisiert hat. http://www.videocopilot.net/blog/2014/08/free-script-3d-pre-compose-tutorial/

Bearbeiten: Bezüglich der Klarstellung in den Kommentaren zur Verwendung relativer Selektoren für Kompositionen. An sich leider nicht möglich. Sie können dies mit Ebenen tun, indem Sie die Indexnummer angeben, aber eine Komposition hat nicht wirklich ein eindeutiges übergeordnetes Element, was es ziemlich schwierig macht, einen generischen Selektor für Kompositionen zu haben. Wenn Sie eine eindeutige prozedurale Benennung basierend auf der "Tiefe" Ihrer Komposition haben, ist dies möglicherweise mit einem fortgeschrittenen Ausdruck oder vielleicht einem Skript möglich, aber wenn Sie sie nur "meine coole Komposition" und "meine andere coole" Komposition genannt haben, können Sie nicht wirklich eine erstellen Skript dazu.

Sorry, ich verstehe nicht, was das mit meiner Frage zu tun hat. Ich brauche eine Möglichkeit, Eigenschaften innerhalb einer Komposition basierend auf der Komposition, in der sie verschachtelt ist, "dynamisch" zu ändern.
Das heißt, ich kann nicht verwenden, Comp("comp name")weil das, was ich wirklich will, istComp.thisComp.parent
Ah, Sie meinen also nicht dynamisch in dem Sinne, dass Sie etwas in der Hauptkomposition ändern und etwas in der Subkomposition beeinflussen, sondern eine Möglichkeit, relative "Pfade" in Ihren Ausdrücken zu haben?
Ja, so ziemlich ... wie eine Subcomp-Änderung abhängig von der Comp, in der sie verschachtelt ist. Anscheinend nicht möglich ... forums.creativecow.net/readpost/227/27710
"relative Pfade" ist eine gute Art, es auszudrücken.
Meine Antwort wurde bearbeitet, um die Informationen zu relativen Pfaden aufzunehmen.

Wenn ich Ihre Frage richtig verstehe, gibt es eine Möglichkeit, dies zu tun.

Fügen Sie auf der Subcomp-Ebene in der Hauptkomposition einen Farbausdruck-Steuerungseffekt hinzu ( Effects > Expression Controls > Color , und steuern Sie ihn dann mit einem Ausdruck, sodass er mit der Farbe des Farbwählers verknüpft ist (verwenden Sie die Pick Whip).

Jetzt steht die Farbe in der Unterkomposition selbst für Ausdrücke zur Verfügung, wenn Sie den Wert verwenden comp("M01").layer(thisComp.name).effect("Color Control")(1).

Offensichtlich funktioniert dies nur, wenn Ihre Kompositionen eindeutige Namen haben. Beachten Sie, dass Sie reguläre Javascript-String-Methoden verwenden können , um die Textmanipulation in Ausdrücken zu handhaben, sodass Dinge wie reguläre Ausdrücke und string.split und number.toString alle funktionieren.

Beachten Sie, dass Ausdrücke, insbesondere Ausdrücke, die auf mehrere Kompositionen verweisen, AE wirklich verlangsamen können. Ich habe oft festgestellt, dass etwas, das mit einer Unmenge von Ausdrücken technisch möglich ist, praktisch nicht machbar ist, weil Sie jedes Mal, wenn Sie den Zeitschieber bewegen, den Wasserball für eine halbe Stunde bekommen. Versuchen Sie also, wo immer möglich, die Expressions in Keyframes umzuwandeln oder vorab zu rendern.

Ja, das meine ich nicht. Stellen Sie sich eine Komposition namens „Rot“ vor, in der eine Komposition namens „Kreis“ verschachtelt ist. Rot hat einen Farbwähler, der auf Rot eingestellt ist, und Kreis nimmt seine Farbe von Rot. Jetzt möchte ich Rot duplizieren, es Blau nennen und Kreis – dasselbe Kreis-Precomp, keine Kopie davon – blau werden lassen, wenn es verschachtelt ist innerhalb von 'Blau.' Macht das Sinn? Anscheinend ist es nicht möglich. Blau müsste dupliziert werden, um auf die neue übergeordnete Komposition zu verweisen. Es gibt keine Möglichkeit für eine Komposition, herauszufinden, in welche Komposition sie eingebettet ist.
Oh ich verstehe. Klingt nach einem Job für Scripting.

Habe gerade einen separaten "Controller"-Comp mit einer Ebene und einem Farbwähler gebaut. Verknüpfen Sie alle Subcomps mit diesem Farbwähler in der Controller-Komp. Jetzt müssen Sie vor dem Rendern jedes Ausgabestapels nur die eine "Controller" -Komposition ändern, ohne mehrere Subcomps zu haben. Ich weiß, auf diese Weise können Sie immer noch nicht alle auf einmal rendern, aber es kann die Dinge beschleunigen ...