Copy link to clipboard
Copied
I have text running out by character left to right in the standard way shown in many tutorials.
In order to set the start at 0% then interpolate it to 100% you have to have the Opacity property set to 0% (or you see all the text as soon as the layer comes on).
But in order to set the text colour (with an expression I might add not using the AE User Interface) I need the Opacity up higher.
There must be an answer but it isn't obvious to me. I can use expressions and a slider mapping to an RGB colour effect set of keys to do it on text layers I aren't animating and it works fine using:
thisComp.layer("[CONTROLS]").effect("Quote Mark Colours")("Color").key(thisComp.layer("[CONTROLS]").effect("Quote Mark Colour")("Slider"));
I tried adding a RGB Color Effect to the layer but it does nothing when I change it's color manually or programatically. I have an expression controlling the time of these layers in the Start property of the Range selector. It's not strictly relevant but it's complicated and I need it to stay as is (or functionally equivalent).
There is actually a change in color but it's very subtle and very quick cos your keyframes are not sufficiently distant. To get what you want within the duration specified, you will require another Text Animator Group, with the Fill Color Animator Property. Then, you offset its Start keyframes from the other Text Animator Group - see image below for a guide.
Copy link to clipboard
Copied
There is actually a change in color but it's very subtle and very quick cos your keyframes are not sufficiently distant. To get what you want within the duration specified, you will require another Text Animator Group, with the Fill Color Animator Property. Then, you offset its Start keyframes from the other Text Animator Group - see image below for a guide.
Copy link to clipboard
Copied
Here's my control on the range animation, you mean I have to repeat the expression in the second Animator but subtract a bit from time from this to keep it a few frames behind or something?
TAT = thisComp.layer("[CONTROLS]").effect("Total Animation Period")("Slider");
delay1 = thisComp.layer("[CONTROLS]").effect("Bkgd fade period")("Slider")
delay2 = thisComp.layer("[CONTROLS]").effect("Quotation mark in/out period")("Slider");
delay3 = thisComp.layer("[CONTROLS]").effect("Period b/w lines of text")("Slider");
delay4 = thisComp.layer("[CONTROLS]").effect("Delay at End")("Slider");
startTime = delay1 + delay2;
timePerLine = (TAT - 2*(delay1 + delay2 + delay3) - delay4)/3;
startTime += 2*(timePerLine + delay3);
100 * (time - startTime)/timePerLine;
I realise I might have approached this exercise to build a controllable and flexible composition for displaying quotes another way, perhaps referencing layers above/below with `index` but I didn't know that trick when I started, and I'm still not sure it would have been easier.
Thinking about it more I must have misunderstood you because I'm effectively trying to do the same thing with Animator 2 as I can't do with animator 1. Thanks for your help, really appreciate it, wishing I'd made this in Quartz Composer and wrapped it with the Noise Industries API to make it an Adobe plugin for AE and PremPro, spent way to long on this!
Copy link to clipboard
Copied
I'm thinking of just using the colorise effect as a post effect on white animated type. This is pretty confusing for me.
Copy link to clipboard
Copied
Since the Start prop in the first Text Animator already does the calculations; the second Text Animator's Start property should reference this value and then you apply a simple time offset - there is no requirement to recalculate the same thing twice.
The second Start prop would have an Expression similar to this -
text.animator("Animator 1").selector("Range Selector 1").start + delay
Copy link to clipboard
Copied
yeah I thought about that too, but was fast for me to copy & paste! Okay I'll do that.
Copy link to clipboard
Copied
text.animator("Animator 1").selector("Range Selector 1").start -10;
didnt work well
text.animator("Animator 1").selector("Range Selector 1").start -100
works. totally spelunking around here. That's subtracting from the percentage value not the time right?! Your delay variable is time related?
Copy link to clipboard
Copied
When I wrote this earlier - text.animator("Animator 1").selector("Range Selector 1").start + delay
I was under the assumption that you knew the delay represented time. So, you had to input a valueAtTime method in order to get the delay.
Anyway, this Expression should work. And since we're using the valueAtTime, we are calculating in terms of time and specifically the delay here is in seconds. You can look at other time related Expression methods to calculate in terms of frames.
text.animator("Animator 1").selector("Range Selector 1").start.valueAtTime(time-1)
Copy link to clipboard
Copied
I subtracted 10 (seconds) from the time value in the second animator expression and surprisingly it seems to work! I have no idea what is going on conceptually. Please explain if you have time.
100 * (time – 10 – startTime)/timePerLine;