Copy link to clipboard
Copied
I want to create a text animation using animator, where each character pops-up from 0% scale to 150% and then back to 100%. Attached is my current best attempt. I have to mask out characters because by default they are 100% scale untill range is applied to them.
How do I do this without masking?
Also, how to make scale animations overlap, so multiple chracters are affected at the same time?
Using an expression selector with Scale set to 0%:
animation 1 by 1:
id = textIndex - 1;
time > id ? Math.min(Math.max(linear(time, id, id + .5, 100, -50), linear(time, id + .5, id + 1, -50, 0))) : 100
animation 2 by 2:
g = [[0, 3], [1, 2]], d = 1, id = textIndex - 1;
gi = g.findIndex(a => a.includes(id));
if (gi < 0) 100;
else {
s = gi * d;
time > s ? Math.min(Math.max(linear(time, s, s + d / 2, 100, -50), linear(time, s + d / 2, s + d, -50, 0)), 100) : 100;
}
Copy link to clipboard
Copied
Using an expression selector with Scale set to 0%:
animation 1 by 1:
id = textIndex - 1;
time > id ? Math.min(Math.max(linear(time, id, id + .5, 100, -50), linear(time, id + .5, id + 1, -50, 0))) : 100
animation 2 by 2:
g = [[0, 3], [1, 2]], d = 1, id = textIndex - 1;
gi = g.findIndex(a => a.includes(id));
if (gi < 0) 100;
else {
s = gi * d;
time > s ? Math.min(Math.max(linear(time, s, s + d / 2, 100, -50), linear(time, s + d / 2, s + d, -50, 0)), 100) : 100;
}
Copy link to clipboard
Copied
Thank you!
Somehow, expression selector slipped past me 😉
Also, setting a negative amount to increase the scale is beyond good and evil.
Here is my take on it, I used Null object controller for scale curve, so I could use Bezier.
charAnimDuration = 1;
nextCharDelay = 0.5;
input = clamp(0, time - nextCharDelay * (textIndex - 1), charAnimDuration);
mappedOutput = thisComp.layer("CONTROLLER").effect("Character scale control")("Point").valueAtTime(input);
[mappedOutput[0], mappedOutput[1], 100];