Cómo sincronizar la posición de una capa con una capa en otra compilación (tiempo reasignado)

Así que estamos haciendo una animación 2D. Tenemos recursos de personajes en PSD.

Tenemos una compilación de "personaje" que contiene lo siguiente: compilación de "ojos", compilación de "boca" y compilación de "cuerpo". "Cuerpo" tiene el ciclo de caminata de 2 segundos del personaje. Que se reasigna en el tiempo a un bucle en "Carácter". Pero a medida que el personaje camina, su cuerpo se mueve hacia arriba y hacia abajo. El problema comienza ahí: tenemos que sincronizar "Ojos" y "Boca" con el movimiento hacia arriba y hacia abajo del cuerpo. Parentear la posición de dichas capas con la posición del activo del cuerpo no es una opción, porque el activo del cuerpo tiene solo 2 segundos de animación. Después de eso, "Boca" y "Ojos" se detuvieron dondequiera que estuvieran.

Creo que debe haber una manera de hacer esto con expresiones. Pero como no somos un estudio experto en código, no podemos sentarnos y escribir uno.

¿Cómo podemos lograr tal objetivo?

Gracias por la ayuda.

Editar: puede descargar nuestra compilación desde aquí: http://www.mediafire.com/download/v255kgid7ej56m0/walk.zip

Entonces, para entenderte correctamente. Tiene 2 compilaciones en una compilación principal y la compilación 1 tiene activos animados dentro de sí misma y luego siguió adelante y reasignó el tiempo de la compilación 1 dentro de la compilación principal y ahora necesita sincronizar el movimiento de la compilación 1 con la compilación 2. (¿no es un activo dentro de la compilación 2?) Podría ser útil si pudiera cargar un archivo AE simple que muestre el problema.
Comp 1 tiene activos animados dentro y está reasignado en el tiempo dentro de la composición principal, sí. Comp 1 en Main Comp no tiene ningún movimiento allí. Quiero sincronizar el movimiento (posición) de Comp 2 con un activo dentro de Comp 1. Proporcionaré el archivo AEP lo antes posible.

Respuestas (1)

Si desea vincular ciertas propiedades a través de varias composiciones, solo puede hacerlo con expresiones. Sin embargo, no son realmente difíciles y es una cuestión de 1-2 líneas.

Fe para obtener la posición de una capa en una composición diferente, puede hacer esto:

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

Simplemente haga clic en el cronómetro de posición de la capa a la que desea aplicar esa posición e ingrese ese comando. Para descomponerlo. Esto selecciona primero la composición que desea por nombre y luego selecciona la capa que desea dentro de esa composición:

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

Esta parte dice que desea un valor del transformmenú y el nombre del valor es position. La posición también podría ser simplemente rotación o cualquier otra propiedad:

.transform.position

Tenga en cuenta que a menudo obtiene varios valores a la vez. Por ejemplo, la posición puede tener 2 o 3 valores dependiendo de si la capa es 2D o 3D. Estos múltiples valores se te dan en algo llamado matriz o vector. Lo que viene ahora solo es necesario si desea un control de eje independiente y no el valor de posición de los 2 o 3 ejes aplicados a su capa. Entonces, para obtener solo la posición del eje y, puede hacer esto:

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

El nombre de la variable inventada y en este caso obtiene el valor del eje y de layer1asignado. agregando [1]al final de position. Usar [0]te daría x y [2]te daría z.

Esta parte es lo que llamas el valor de retorno. Lo escribes en forma de matriz/vector. Significado [x-axis-value,y-axis-value]o [x-axis,y-axis,z-axis]. transform.position[0]solo significa que quiero el valor x de ESTA capa en la que estoy ingresando la expresión. Así que aún puede controlar ese eje manualmente.

[transform.position[0],y]

Para tener en cuenta la reasignación de tiempo, deberá aplicar la misma reasignación a comp2 que aplicó a comp1. Si eso no es lo que buscas, es posible que tenga que ver un proyecto de ejemplo.

Editar: Entonces, si usa la reasignación de tiempo para reproducir capas y no para ajustar su animación, no debe usarla en esta situación. Para mantener un mejor control, debe usar una expresión simple en los activos animados de su composición en bucle para reproducir su animación.

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

Agregue esto a cada propiedad de capa que esté animada y haga que la longitud de la compilación sea tan larga como necesite, su animación de 2 segundos ahora se repetirá mientras dure su composición, solo tiene que estirar la longitud de las capas a la nueva longitud de la compilación. Esto resuelve tu problema.

Si tiene más subcomposiciones en su subcomposición, también tendrá que aumentar su longitud, por supuesto, para poder extenderlas hasta el final de su composición principal.

Para obtener más información sobre esta expresión, consulte esto: http://provideocoalition.com/pvcexclusive/story/expression_shorts_-_loop

Probamos exactamente eso. Pero el problema con eso es que no funciona correctamente en comp reasignado en el tiempo. La composición reasignada en el tiempo tiene solo 2 segundos de animación. Entonces, después de 2 segundos, no hay ningún valor en ".transform.position".
Entonces, ¿simplemente reasignar el comp2 de la misma manera?
Investigué tu comp. ¿Estoy en lo correcto asumiendo que solo reasignas el tiempo para hacer un bucle en tu animación?
Edité mi respuesta, probé ese método en su proyecto y la cara se tambalea muy bien después de la marca de 2 segundos.
Si bien la expresión de bucle es mejor, para usar el valor de la propiedad en un momento arbitrario, puede usar valueAtTime. Esto hace lo que dice en la lata: myProperty.valueAtTime(t) devuelve el valor de la propiedad myProperty en el momento t . Ahora, la propiedad que desea es la posición de la otra capa, y el tiempo que desea es el valor de la reasignación de tiempo de la capa actual (timeRemap), por lo que en la expresión anterior usaría comp("Comp Name"). capa("Nombre de la capa").transform.position.valueAtTime(timeRemap)
Gracias a todos. Pero todavía no lo corta. Entonces, si no uso esa expresión en timeRemap, ¿dónde puedo poner eso? Como puede ver, usamos esa expresión en nuestros bucles. Pero la expresión está en la reasignación de tiempo. Además, no puedo agregar exactamente la expresión loopout a los activos, porque estamos usando una marioneta ik manipulada con control nulo. No puedo agregar timeremap a nulos.
No, no, no agregas reasignación de tiempo a nada. Simplemente agréguelo a cada capa que tenga fotogramas clave y la capa repetirá estos fotogramas clave para siempre con esa expresión. Lo usa en lugar de la reasignación de tiempo y lo usa en las capas de su composición en lugar de la composición en sí.
Así que agrego las expresiones a las propiedades animadas como expresiones, ¿verdad?
Correcto. No eliminará ninguno de sus fotogramas clave, sino que los tomará y los repetirá para siempre. Todo lo que necesita hacer es aumentar la longitud de la capa según sea necesario y la animación se repetirá siempre que la capa sea larga.