Wow, this is awesome! I come from your tutorial regarding the wiggle method, and I must say that I really love the way you describe things. Subscribed right away.
Hey Animoplex, I love this series on Expressions! One quick questions that comes up as I apply more of the new knowledge is whether we can control the interpolation further? I know that Javascript in general allows more control than just the default ease(In/Out), which would be super cool. Because in this case it's fine because you're mapping from a slider anyway, so you have access to the curve, but sometimes we can't do that, at least I think so. For instance I'm currently working on a project where I'm interpolation between value1 and value2, but both of these values aren't keyframes, because they have to work with different user inputs (text size changes). Sooo it looks a bit shit without control of the easing that's all. Thank you for the series again and no worries if you can't help or understand the question because I ramble :)
A bit late on the reply here, there's a few things to unpack: 1) You could connect value1 and value2 to Expression Controls and then attach those to any value you want. As long as it's a numeric value, it'll work. 2) Non-default easing via expressions is more complicated. A trick you can use: keyframe a Slider Control from 0 to 1 using any ease curve you wish (from Flow or other plugins) - Then, reference the slider from the expression-driven value and use it as a multiplier. This way, you get an easy-to-edit ease curve while controlling a dynamic value. Something like: transform.scale * effect("Slider Control")("Slider")
Hey Parker! Thanks for the great tutorial!! At 2:21 you used "value" to reference the original value of the Y position - does this "original value" refer to the Y position value BEFORE applying the expression? (i.e. this value is a static number that doesn't change over time) It's a bit confusing for me because the expression you wrote is the equivalent to "value = linear(thisComp.layer("Control").effect("Rocket Launch")("Slider"), 0, 100, value, value - 1500)" where you are updating value using value itself. Intuitively this code can be interpreted as "value" is changing constantly, and acting as a feedback to itself - which doesn't seem to be what's really happening. Could you perhaps explain this in more detail? Thanks!!
Great question, sorry for the confusion. When referring to the current property, value is the keyframed value before the expression is applied. In the example expression you included, the value attribute is referring to the original property before the expression is evaluated. It is animating from it's original value minus 1500 across a 0 to 100 Slider animation. You are, as you said, updating the value using value itself. But the expression won't stack or apply the modification more than once since value *always* equals the property value before any expressions are included. Hope this clears things up!
@@Animoplex Yay! Thanks a lot! So let me correct myself - if I've already added keyframes to the Y position before applying the expression, the "value" may actually change over time. When I apply the linear expression on top of that, then for each frame, After Effects will take the keyframed value of this very frame and map it onto the new range defined by the expression, then place the object in this new position, but this result won't be used for evaluating the position of the following frames, right? (I think I sort of understand how it works but it's hard to put to words!)
It sounds like you've got it right. Each frame is independent, an expression runs on every frame. The only value that would change frame to frame in your scenario would be the keyframed value animating over time. Hope this clarifies things!
Hi Parker! I researched and haven't found a way to make the graph steeper whilst using the ease expression. I usually use the Graph Editor to resolve it when using keyframes. Have you figured this out? Best regards,
Unfortunately, it's not as simple as a single line of code, but you can get the Flow plugin which allows you to apply a custom ease curve via expression: aescripts.com/flow/
I want to bind ROTATION to POSITION using LINEAR example : x = transform.position[1] p1 = 900; p2 = 300; r1 = 0; r2 = 90; linear(x, p1, p2, r1, r2,) when the value of p1 goes through the path to p2, r1 should go through the path from 0 to 90 degrees and back to 0 again, but i can't add the third argument, how can i solve this problem? please, help
The ease method won't work with an array. You'd need to just use 0 and 100 and then create an array on the next line, like this: myEase = ease(time,2,3,0,100); [myEase, myEase]
Great tutorial! Can you think of a way to get more customised expression-based easing? Such as the expressions from Ian Haigh's Ease and Whizz plugin, but still being able to feed the values it transitions between?
Hey David, thanks for the question! It's a good one. Are you familiar with bezier curve values? You can get a lot of control over an ease curve with them. There's a great plugin called Flow that allows you to visually adjust a bezier curve and apply it to keyframes via an expression. Check it out if you're interested: aescripts.com/flow/
Animoplex Thanks so much for the advice! I had the first part down but the Flow portion looks like exactly what I've been looking for. Seems like a great way to visualise those curves before converting to an expression, and should give me greater control to keep my data-fed animations slick :D Thanks again for your help!
Nice! Glad it helped you out. It's a great plugin and the Apply to Expression functionality is easy to work with once you have a good grasp at what's going on. Post back if you get it to work!
If you look at aescripts.com/flow/ and scroll down to the bottom, there's a section called "Download additional preset packs to spice up your daily motion!" which I found had ample examples, plus you can right click and save the speed graph gifs to save as a visual reference for each value!
its weird, when I type it in just like this it gets a syntax error. (for which AE provides no help in locating) But when I use the expression menu and pickwhip the layer for input it works fine. I even copied both expressions to a note and compared them. No difference I can see?
Fascinating! What expression are you trying to use that's giving you the error? Wonder if it's an issue with quotation marks not being formatted correctly?
Hello 1st thanks for the great tut ... I have a beginner question :) how can I create the layer call "control" in this tut and what are the values of it ... thanks.
In this video, the "Control" layer was made using an empty shape layer. You can use a null layer instead if you'd like: Layer > New > Null Object And then you can add an expression control: Effects > Expression Controls
The linear method simply translates an input range to an output range so any source should work. If you plug in your desired property as the first input argument and specify your output range, it should do what you want. Hope this helps, if you need clarification please reach out.
Your tutorials is very useful for me, I really learn a lot thanks to you! But can you tell me please, in what case we can use the linear/ease/easeIn/easeOut expressions?
Glad to hear it, thanks for the feedback! You can use linear and ease expressions on values you want to be converted from one range to another. For example, a rotating dial (0 to 360 rotation) can be linked to the transparency (0 to 100 opacity) of a layer using a linear expression. This would create a dial-like control for adjusting opacity of a layer.
Nice video, thanks! Is it possible to give some kind of loop for linear or use it twice or more? In example I need to rotate main object on 180 degrees twice during 2 time periods of clock layer(between 105 and 260 degrees and repeat linear between 470 and 615): MAIN OBJECT EXPRESSION: r=thisComp.layer("clock").content("hour").transform.rotation; ease(r,105,260,180,360)&&ease(r,470,615,360,540);
In this simple example, probably. But any time you want to use a Slider (or other input) to be output to a different range of values, the linear method will be your best friend. It's more than simple addition, it's remapping the value to a new range. If you have additional questions, please reach out.
@@Animoplex sadly.. :( i ended up doing the copy and paste the trimpath and path file as group multiple times (the only way to see the keyframe to manually set the difference between different paths and end the path also..well kinda) but expression as it can be easy to put big motion for me (with no knowledge of coding or expression code whatsoever) Its not easy to use the expression if i cant do any easing or stopping when i want to.. its almost like a painting of food and i cant eat it..:( maybe you can teach us *trimpath and using expression* *to loop continuously and also ending it* *whenever we want it plus ease in and out of trimpath* as your next episode if you have time :D cuz i think trimpath is like one of many big dilemma that us beginning mographer face these days... :( Like if i wanted maybe deathstar's outline strokes being continuously trimpathed to look like it's moving or star wars or spaceship shooting laser continuously etc etc....
Looked into it, you're correct. In the first videos, parenthesis was pronounced "paren-the-see" with a silent "s" at the end. A few colleagues thought the same. But you learn something every day! Thanks for the clarification, Matt.
linear/ease is truly the best expression in AE imo. thanks for the great tutorials, I've been sharing them with some people I'm trying to teach AE to
Amazing! Yes, they are extremely versatile. Thanks for sharing it with friends, maybe they will get some value out of these lessons!
this series is just outstanding mate!!
You're outstanding mate!!
Wow, this is awesome! I come from your tutorial regarding the wiggle method, and I must say that I really love the way you describe things. Subscribed right away.
I'm glad you approve of the teaching method :) Thanks for the subscribe, let me know if you have any other questions along the way!
Thank you for such a great course
You're very welcome, thanks for stopping by!
I've been searching for this informations like crazy! thanks a lot
You're welcome a lot, glad you found it!
very neat and informative content .. Thanks!
This is a very good and clear tutorial. thank you.
Thanks! Glad you found it clear, hope it was helpful.
Subbed, you definitely need more attention.
Thanks! Your compliments are appreciated. As long as it helps people with expressions, the course has done it's job.
Love these Tuts
Thank you!
Thanks! Really informative
benbobtabobboop
Thanks! Post back with any questions you have.
Hey Animoplex, I love this series on Expressions! One quick questions that comes up as I apply more of the new knowledge is whether we can control the interpolation further? I know that Javascript in general allows more control than just the default ease(In/Out), which would be super cool. Because in this case it's fine because you're mapping from a slider anyway, so you have access to the curve, but sometimes we can't do that, at least I think so. For instance I'm currently working on a project where I'm interpolation between value1 and value2, but both of these values aren't keyframes, because they have to work with different user inputs (text size changes). Sooo it looks a bit shit without control of the easing that's all. Thank you for the series again and no worries if you can't help or understand the question because I ramble :)
A bit late on the reply here, there's a few things to unpack:
1) You could connect value1 and value2 to Expression Controls and then attach those to any value you want. As long as it's a numeric value, it'll work.
2) Non-default easing via expressions is more complicated. A trick you can use: keyframe a Slider Control from 0 to 1 using any ease curve you wish (from Flow or other plugins) - Then, reference the slider from the expression-driven value and use it as a multiplier. This way, you get an easy-to-edit ease curve while controlling a dynamic value. Something like:
transform.scale * effect("Slider Control")("Slider")
@@Animoplex Amazing!
Great stuff!
Thanks! More coming in a few days, stay tuned.
Hey Parker! Thanks for the great tutorial!!
At 2:21 you used "value" to reference the original value of the Y position - does this "original value" refer to the Y position value BEFORE applying the expression? (i.e. this value is a static number that doesn't change over time)
It's a bit confusing for me because the expression you wrote is the equivalent to "value = linear(thisComp.layer("Control").effect("Rocket Launch")("Slider"), 0, 100, value, value - 1500)" where you are updating value using value itself. Intuitively this code can be interpreted as "value" is changing constantly, and acting as a feedback to itself - which doesn't seem to be what's really happening. Could you perhaps explain this in more detail?
Thanks!!
Great question, sorry for the confusion. When referring to the current property, value is the keyframed value before the expression is applied. In the example expression you included, the value attribute is referring to the original property before the expression is evaluated. It is animating from it's original value minus 1500 across a 0 to 100 Slider animation. You are, as you said, updating the value using value itself. But the expression won't stack or apply the modification more than once since value *always* equals the property value before any expressions are included. Hope this clears things up!
@@Animoplex Yay! Thanks a lot! So let me correct myself - if I've already added keyframes to the Y position before applying the expression, the "value" may actually change over time. When I apply the linear expression on top of that, then for each frame, After Effects will take the keyframed value of this very frame and map it onto the new range defined by the expression, then place the object in this new position, but this result won't be used for evaluating the position of the following frames, right? (I think I sort of understand how it works but it's hard to put to words!)
It sounds like you've got it right. Each frame is independent, an expression runs on every frame. The only value that would change frame to frame in your scenario would be the keyframed value animating over time. Hope this clarifies things!
@@Animoplex Awesome! Thanks again!! :D
Hi Parker! I researched and haven't found a way to make the graph steeper whilst using the ease expression. I usually use the Graph Editor to resolve it when using keyframes. Have you figured this out? Best regards,
Unfortunately, it's not as simple as a single line of code, but you can get the Flow plugin which allows you to apply a custom ease curve via expression: aescripts.com/flow/
I want to bind ROTATION to POSITION using LINEAR
example :
x = transform.position[1]
p1 = 900;
p2 = 300;
r1 = 0;
r2 = 90;
linear(x, p1, p2, r1, r2,)
when the value of p1 goes through the path to p2, r1 should go through the path from 0 to 90 degrees and back to 0 again, but i can't add the third argument, how can i solve this problem?
please, help
Bro how can i get something like toggle keyframe with a wiggle expression for position ??
Can you explain what you mean by 'toggle keyframe'? Not sure if you mean Toggle Hold Keyframe setting or a Checkbox Control.
@@Animoplex toggle hold key keyframe, that makes the interpolation looks like a stopmotion movement
Try using posterizeTime() for that, here's a short video on how it works:
ruclips.net/video/YLapbNyYxLs/видео.html
if i want in expression Scale my shape write :
ease(time,2,3,[0,0],[100,100])
ease(time,4,5,[100,100],[0,0])
This command does not execute, why?
The ease method won't work with an array. You'd need to just use 0 and 100 and then create an array on the next line, like this:
myEase = ease(time,2,3,0,100);
[myEase, myEase]
@@Animoplex If I want to continue the same formula that you wrote, it should be Unscale to 4 and 5, is it possible?
You can use 4 and 5 as values if you need. Recommendation is to try it, only one way to find out!
Great tutorial! Can you think of a way to get more customised expression-based easing? Such as the expressions from Ian Haigh's Ease and Whizz plugin, but still being able to feed the values it transitions between?
Hey David, thanks for the question! It's a good one. Are you familiar with bezier curve values? You can get a lot of control over an ease curve with them. There's a great plugin called Flow that allows you to visually adjust a bezier curve and apply it to keyframes via an expression. Check it out if you're interested: aescripts.com/flow/
Animoplex Thanks so much for the advice! I had the first part down but the Flow portion looks like exactly what I've been looking for. Seems like a great way to visualise those curves before converting to an expression, and should give me greater control to keep my data-fed animations slick :D
Thanks again for your help!
Nice! Glad it helped you out. It's a great plugin and the Apply to Expression functionality is easy to work with once you have a good grasp at what's going on. Post back if you get it to work!
Animoplex Thanks, will do :)
If you look at aescripts.com/flow/ and scroll down to the bottom, there's a section called "Download additional preset packs to spice up your daily motion!" which I found had ample examples, plus you can right click and save the speed graph gifs to save as a visual reference for each value!
How can I ease all keyframes on a layer using an expression?
Easiest way to do this is with the free plugin from AE Scripts:
aescripts.com/ease-and-wizz/
its weird, when I type it in just like this it gets a syntax error. (for which AE provides no help in locating)
But when I use the expression menu and pickwhip the layer for input it works fine. I even copied both expressions to a note and compared them. No difference I can see?
Fascinating! What expression are you trying to use that's giving you the error? Wonder if it's an issue with quotation marks not being formatted correctly?
Hello 1st thanks for the great tut ... I have a beginner question :) how can I create the layer call "control" in this tut and what are the values of it ... thanks.
In this video, the "Control" layer was made using an empty shape layer. You can use a null layer instead if you'd like:
Layer > New > Null Object
And then you can add an expression control:
Effects > Expression Controls
@@Animoplex thanks a lot my friend
oh god, this channel only get 3,2k ?? are you kidding me? *lets subscribee guysss!
I’m just glad so many people are enjoying the content :) Thanks for the subscribe, updates coming soon!
So how about with speed% because I use speed% in twixtor not a position
The linear method simply translates an input range to an output range so any source should work. If you plug in your desired property as the first input argument and specify your output range, it should do what you want. Hope this helps, if you need clarification please reach out.
Psycho thought: can you nest an ease expression within a linear expression (or a random or some other type for that matter)?
Technically yes, it's easy to do with a few variables. What are you trying to achieve with this?
АХХЕРЕННА! Спасибо чувак)
Translated: “Thanks man!”
You’re very welcome!
А нам расскажешь, что он сказал? Я нихрена не понял
Your tutorials is very useful for me, I really learn a lot thanks to you! But can you tell me please, in what case we can use the linear/ease/easeIn/easeOut expressions?
Glad to hear it, thanks for the feedback! You can use linear and ease expressions on values you want to be converted from one range to another. For example, a rotating dial (0 to 360 rotation) can be linked to the transparency (0 to 100 opacity) of a layer using a linear expression. This would create a dial-like control for adjusting opacity of a layer.
@@Animoplex thank you :)
Nice video, thanks! Is it possible to give some kind of loop for linear or use it twice or more? In example I need to rotate main object on 180 degrees twice during 2 time periods of clock layer(between 105 and 260 degrees and repeat linear between 470 and 615):
MAIN OBJECT EXPRESSION:
r=thisComp.layer("clock").content("hour").transform.rotation;
ease(r,105,260,180,360)&&ease(r,470,615,360,540);
Try this on the rotation property:
r = thisComp.layer("clock").content("hour").transform.rotation;
if (r < 470) {
ease(r, 105, 260, 180, 360);
} else {
ease(r, 470, 615, 360, 540);
}
@@Animoplex Thanks, it works! I have no experience to use such simple but interesting expression logic.
Happy to help!
how can we change the speed and value if we use ease expression instead of keyframe?
Speed and value are determined by the input, ease() and linear() only affect how it is mapped.
i dont get this linear expression, wouldnt
value + slider
do the same thing?
In this simple example, probably. But any time you want to use a Slider (or other input) to be output to a different range of values, the linear method will be your best friend. It's more than simple addition, it's remapping the value to a new range. If you have additional questions, please reach out.
i came here for trim path offset easeIn so i can ease in the infinite loop of trim path
Awesome! Did it work as intended? Feel free to share your code, curious to see how you used it.
@@Animoplex sadly.. :( i ended up doing the copy and paste the trimpath and path file as group multiple times (the only way to see the keyframe to manually set the difference between different paths and end the path also..well kinda) but expression as it can be easy to put big motion for me (with no knowledge of coding or expression code whatsoever) Its not easy to use the expression if i cant do any easing or stopping when i want to..
its almost like a painting of food and i cant eat it..:( maybe you can teach us *trimpath and using expression* *to loop continuously and also ending it* *whenever we want it plus ease in and out of trimpath* as your next episode if you have time :D
cuz i think trimpath is like one of many big dilemma that us beginning mographer face these days... :(
Like if i wanted maybe deathstar's outline strokes being continuously trimpathed to look like it's moving or star wars or spaceship shooting laser continuously etc etc....
Like
Just a note...the plural of "parentheses" is "parenthesis" and not "parenthesie".
Hey Matt, thanks for the feedback! Are you referring to the spoken pronunciation, or a typo in the closed captioning or PDF documentation?
The spoken pronunciation.
Looked into it, you're correct. In the first videos, parenthesis was pronounced "paren-the-see" with a silent "s" at the end. A few colleagues thought the same. But you learn something every day! Thanks for the clarification, Matt.
Just wanted to follow up with another thank you. The 400 series has corrected this pronunciation error. Appreciate the heads up!
Animoplex ahh you are thorough :) top marks