¿Alguna forma de cambiar las propiedades de la subcompilación en función de la compilación principal?

Tengo una docena de composiciones "principales" que tienen un montón de composiciones anidadas. Necesito crear unas 30 versiones de cada composición principal, con diferentes colores. Las subcomposiciones son formas animadas, que toman su color de un selector de color en la composición principal. Me encantaría evitar tener que duplicar todos los subcompuestos 30 veces, para no tener cientos de copias.

¿Hay ALGUNA forma de permitir que una composición anidada cambie en función de la composición en la que está anidada?

Sé que no existe la opción "thisComp.parent", ya que una composición se puede anidar en muchos padres diferentes, pero ¿hay alguna manera de "empujar" una propiedad "hacia abajo" en una subcomposición? ¿O alguna solución inteligente? ¿Esto tiene sentido?

Por ejemplo, la composición principal "M01" tiene subcomposiciones "S01a", "S01b", etc. Los colores de las formas en S01a, etc. se basan en un selector de color en M01. Quiero duplicar M01 a M02, cambiar el valor del selector de color y hacer que S01a S01b elija el nuevo valor de color, sin tener que duplicarlos en S02a, S02b, etc. para hacer referencia a M02.

Estoy usando True Comp Duplicator, que es un salvavidas con su opción de 'actualizar expresiones'... pero mi proyecto ahora tiene más de 50 MB, con cientos de compilaciones, y es difícil de manejar.

(No puedo usar un efecto de 'cambio de color' en la composición principal; hay transparencias y modos de fusión que se estropearían).

Respuestas (3)

Puede vincular propiedades en diferentes composiciones usando una expresión como esta.

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

Si la propiedad está más anidada, simplemente agregue otra ("sub property")hasta llegar a la propiedad que necesita, del mismo modo que haría clic en los menús desplegables.

También es útil: VideoCopilot lanzó recientemente un excelente script gratuito que se especializa en la precompilación de capas 3D exactamente de esa manera. http://www.videocopilot.net/blog/2014/08/free-script-3d-pre-compose-tutorial/

Editar: con respecto a la aclaración en los comentarios sobre el uso de selectores relativos para composiciones. Desafortunadamente no es posible per se. Puede hacerlo con capas especificando el número de índice, pero una composición realmente no tiene un padre único, lo que hace que sea bastante difícil tener un selector genérico para composiciones. Si tiene un nombre de procedimiento único basado en la "profundidad" de su compilación, esto podría ser posible con alguna expresión avanzada o tal vez un script, pero si solo los nombró "mi compilación genial" y "mi otra compilación genial", realmente no puede hacer un guión para eso.

Lo siento, no veo que tiene que ver eso con mi pregunta. Necesito una forma de alterar 'dinámicamente' las propiedades dentro de una composición basada en la composición dentro de la cual está anidada.
Es decir, no puedo usar Comp("comp name")porque lo que realmente quiero esComp.thisComp.parent
Ah, entonces, ¿no te refieres dinámicamente en el sentido de cambiar algo en la composición principal y afectar algo en la composición secundaria, sino una forma de tener "caminos" relativos en tus expresiones?
Sí, más o menos... como tener un cambio de subcomposición dependiendo de la composición en la que esté anidada. Aparentemente no es posible... forums.creativecow.net/readpost/227/27710
"caminos relativos" es una buena manera de decirlo.
Edité mi respuesta para incluir la información sobre rutas relativas.

Si entiendo bien lo que pides, hay una manera de hacerlo.

En la capa de subcomposición en la composición principal, agregue un efecto de control de expresión de color ( Effects > Expression Controls > Color , luego contrólelo con una expresión para que esté vinculado al color del selector de color (use el látigo de selección).

Ahora, en la subcomposición en sí, el color estará disponible para las expresiones si usa el valor comp("M01").layer(thisComp.name).effect("Color Control")(1).

Obviamente, esto solo funcionará si sus composiciones tienen nombres únicos. Tenga en cuenta que puede usar métodos de cadena de JavaScript regulares para manejar la manipulación de texto en expresiones, por lo que cosas como expresiones regulares y string.split y number.toString funcionan.

Tenga en cuenta que las expresiones, especialmente las expresiones que hacen referencia a varias composiciones, realmente pueden ralentizar AE. A menudo me he dado cuenta de que algo que es técnicamente posible con un montón de expresiones es prácticamente inviable porque cada vez que mueves el control deslizante de tiempo obtienes la pelota de playa durante media hora. Entonces, donde pueda, intente convertir las expresiones en fotogramas clave o renderizar previamente.

Sí, eso no es lo que quiero decir. Imagine una composición llamada 'Roja', dentro de la cual se anida una composición llamada 'Círculo'. Red tiene un selector de color establecido en rojo, y Circle toma su color de Red. Ahora quiero duplicar Red, llamarlo Blue, y hacer que Circle, la misma precomposición de Circle, no una copia, se vuelva azul cuando esté anidado dentro de 'Azul'. ¿Tiene sentido? Aparentemente no es posible. Blue tendría que duplicarse para hacer referencia a la nueva compilación principal. No hay forma de que una compilación descubra en qué compilación está anidada.
Oh ya entiendo. Suena como un trabajo para secuencias de comandos.

Acabo de construir un "Controlador"-Comp separado con una capa y un selector de color. Vincule todos los subcomps a este selector de color en el controlador-comp. Ahora, antes de renderizar cada lote de Salidas, solo necesita modificar el "controlador" -comp sin tener múltiples Subcomps. Lo sé, de esta manera todavía no puedes renderizarlos todos a la vez, pero puede acelerar las cosas...