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!
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).
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.
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%.
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;
"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 var
ni 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:
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.
Florian Claaßen