After Effects: hacer que el efecto de haz pase por el final/principio

El efecto de haz es un complemento en AE en el que básicamente puedo decidir una coordenada de "comienzo" o "final" y AE dibujará una línea entre estas dos coordenadas, la línea se puede personalizar pero eso es irrelevante por ahora.

El efecto de haz también tiene la propiedad "longitud", que es un porcentaje que decide qué tan larga es la línea. digamos que la longitud es del 80 %, lo que significa que la longitud será un 10 % más corta en cada lado. 100% significa que la línea llega por completo a las coordenadas de inicio y final.

Mi problema es el siguiente: ¿Cómo hago para que la línea extienda las coordenadas de inicio/final? El haz sería entonces básicamente una línea con dos puntos fijos. Puede que me esté perdiendo algo, pero ¿es esto posible? Busqué en Google todas las combinaciones posibles de "extender línea de haz en ae" o "línea con punto fijo", pero no pude encontrar nada relevante. La ayuda es muy apreciada, gracias!

Respuestas (1)

No puedes hacerlo con el efecto de haz tal como está. Pero…

Una solución alternativa sería mover los puntos de inicio y final más lejos a lo largo de la línea que definen. Un poco de matemáticas y una expresión harán eso por ti. No se preocupe, salte a la sección tl;dr en la parte inferior si es alérgico a las matemáticas (aunque si es así, tenga en cuenta que esa mirada en mi rostro es de lástima, no de desprecio, en realidad lo es).

Las matemáticas

Se puede pensar que dos puntos definen un vector , es decir, una línea con dirección y magnitud. Lo bueno es que puedes multiplicar vectores por escalares (números normales con solo una magnitud) muy fácilmente. Entonces, lo que debe hacer es tomar el vector definido por los dos puntos, luego multiplicarlo por magnitudes menores que 0% o mayores que 100% para extender el vector hasta el infinito y más allá .

Para obtener el vector sin el desplazamiento inicial, simplemente reste un punto del otro. Esto nos deja con un único valor que contiene la magnitud y la dirección del punto final, visto desde el punto inicial. Esta es básicamente nuestra línea. Cualquier punto en esa línea se puede encontrar multiplicando este vector.

Dado que este vector es desde el punto de inicio, una vez que lo hayamos multiplicado, debemos volver a agregar la posición del punto de inicio, de modo que estemos usando las coordenadas de comparación. Entonces cualquier punto a lo largo de la línea se expresa comostarting point + distance along the line * (end point - starting point)

Solo para mostrar que esto funciona, considere cuándo la longitud a lo largo de la línea es cero. El punto será starting point + 0 * (end point - starting point) = starting point, y cuando la longitud a lo largo de la recta sea 100% sus coordenadas serán starting point + 100/100 * (end point - starting point) = end point. Ahora, cualquier porcentaje menor que 0 o mayor que 100 % extenderá más la línea.

la puesta en marcha

Para controlar este efecto, necesitamos un control deslizante que pueda ir por debajo de 0 y por encima de 100 para el punto inicial y final del haz. Dado que el control deslizante de longitud del haz no nos permitirá hacer eso, use un control deslizante de control de expresión para hacer el trabajo. Así que aplique el efecto Effects>Expression Controls>Slider y, por su propia cordura, cambie el nombre del efecto a length . Para que el haz sea inicialmente visible cuando configuramos la expresión, configure el control deslizante al 100% o más o menos.

Obviamente, también necesitarás aplicar el efecto Beam . Configure la posición del punto de inicio y el punto final ahora, una vez que apliquemos la expresión, aún puede editarlos usando los controles de valor, pero debe desactivar la expresión para editarlos visualmente en la ventana de compilación. Dado que estamos usando la expresión para falsificar la longitud, establezca la propiedad Longitud en 100%.

ingrese la descripción de la imagen aquí

la expresion

Así que aquí es donde las matemáticas tocan el camino de javascript. Primero haremos la expresión para el punto de inicio. alt-haga clic en el cronómetro Punto de inicio de la viga para establecer una expresión para esa propiedad.

Comience por crear variables vinculadas a los valores originales (utilice el látigo de selección cerca del editor de expresiones para elegir la propiedad Punto de inicio y Punto final para obtener la sintaxis correcta. Su línea debería verse así (no olvide el ;al final de cada línea. Las expresiones a veces funcionarán sin ellas, pero otras veces será difícil rastrear los errores):

var startPt = effect("Beam")("Starting Point");
var endPt = effect("Beam")("Ending Point");

También necesitamos una variable vinculada al efecto del control deslizante de longitud que hicimos anteriormente.

var percentage = 1 - effect("length")("Slider") / 100;
  • Lo dividimos por 100 porque es un porcentaje. Puede omitir esto y simplemente usar un valor de control deslizante de 1 para significar 100%, esto solo hace que sea un poco más fácil de usar.
  • Restamos el porcentaje de 1 porque lo estamos aplicando al punto de inicio. Cuando la longitud sea del 100 %, el punto inicial estará en 0 en el vector (y el punto final estará en 1).
  • Tenga en cuenta que el "length"bit se relaciona con lo que sea que lo haya llamado. Si fueras perezoso, solo dirá effect("Slider Control")("Slider").

Así que tenemos el principio, el final y el porcentaje definidos. Ahora, como dijimos, restamos el principio del final, lo multiplicamos por el porcentaje y lo volvemos a sumar al principio. En Javascript esto se parece a:

percentage * (endPt - startPt) + startPt

Guau, eso fue fácil. Debido a que puede agregar vectores a otros vectores, y puede multiplicar vectores por escalares, nunca necesitamos expandir los componentes en sus dimensiones individuales (me tomó años descubrir eso, me da vergüenza decirlo). Tenga en cuenta que, dado que es la última línea, donde devolvemos el valor, no necesitamos =ni varni nada: las expresiones solo usan la última línea que se evalúa como el valor de la propiedad.

Ahora, para el punto final, repetimos el proceso, pero no restamos el control deslizante de 1. Entonces, la línea de arriba se ve así

var percentage = effect("length")("Slider") / 100;

Te dejaré resolver el resto del código por ti mismo.

Oh, ok, deja de sollozar, aquí está la expresión para ambos, para tu placer de copiar y pegar:

tl; dr

Propiedad de punto de partida

var startPt = effect("Beam")("Starting Point");
var endPt = effect("Beam")("Ending Point");
var percentage = 1 - effect("length")("Slider") / 100;
percentage * (endPt - startPt) + startPt

Propiedad de punto final

var startPt = effect("Beam")("Starting Point");
var endPt = effect("Beam")("Ending Point");
var percentage = effect("length")("Slider") / 100;
percentage * (endPt - startPt) + startPt

Ahora, usando el control deslizante, puede establecer su longitud como desee, y el haz se extenderá a lo largo de la línea descrita por los puntos originales.

wow, ¡qué respuesta de calidad! ¡Gracias!