After working through a test project yesterday with the 3D orbit Preset, one of the things I noticed is how slow the expressions made my fairly simple comp. Admittedly, there were several expression connections but there wasn’t crazy rocket science equations that required cloud-computing. So, why so seriously slow?
It never really bothered me before but with the impressive speed performance that the 64-bit native After Effects CS5 brings, I can’t help but think of other areas in need of improvement besides my marriage (JOKE! I love you honey… but we need to talk.)
So before I present this to the folks at Adobe, who have been very open to new ideas, I wanted to post my thoughts and hopefully gauge community interest in such a core feature improvement and where it currently stands.
Look, expressions are fine for linking a few parameters together but for more complex systems, there has to be a way to make it faster and more integrated. This would lead to more powerful custom presets and functionality and make certain work flows more practical.
Think of the POTENTIAL!! And I’m not talking about your teacher telling your mom, he thinks “Andrew has a lot of potential but he doesn’t apply himself.” What does that mean?!
Anyways, we have a preset called Sure Target 2 that uses expressions to link together a camera with several 3D coordinates to save time animating. Now it does a pretty good job but admittedly, it can get bogged down with too many targets and all the features turned on so we added features to make the lag controllable. For example, we have a feature to bake the expressions into keyframes so you don’t have to reprocess the expressions after it is processed. This is ok when you are done animating but the process to bake the keyframes is a bit slow too. Surely, there must be a way to allow higher level of processing expressions?
One Possible solution with some benefits:
Make expression automatically cache the keyframes so that the values become absolute instead of on-the-fly calculations; this could be a switch you turn on and off too for specific values. Then if these values are changed or affected they could be updated and re-cached, but like I said, the current cache system or keyframe baking is much too slow.
Bottom line is the core system of expressions needs to be improved to make them faster throughout the applications. Do I know how to do that? No. Frankly I don’t even know how it works but programs like 3D Max seems to do a good job and even the python in Blender and Nuke seem well integrated. Though it is hard to compare apples to apples but what could be learned from these structures and applied in AE?
So why not just make a plug-in:
The nice thing about expressions is that 3D layers in your composition still interact, intersect and even cast shadows. A plug-in only renders inside a solid layer and essentially does not interact with the layers in the After Effects 3D space so effects can appear out of order. I guess the plug-in architecture could be changed to use real 3D space but that discussion is for another day.
My feeling is that expressions should be integrated on a core level so that they run as fast as any normal code process and not a layer on top of the system. It should be embedded it into every parameter and allow access to addition data types ( like slider controls) for other information. Why we’re at it, let’s add a real 3D coordinate controller and perhaps and a way to manage some of this stuff to make it easier for people to deploy them without having to be a programming genius.
There are already several great presets that use expressions and if expressions were more capable there would be no limit to what is possible. The new system should allow users to include and exclude groups of layers without having to assign expressions to every layer. These target layers could simply be controlled by a master expression and you choose what settings are inherited.
It’s hard to explain exactly but think about the parenting function. You parent multiple layers together with a simple pick whip and then moving the parent layer moves the child layers at the same time. This idea could be taken further by having a parent option box, that listed the transform parameters that you want to inherit. You could choose to exclude the rotation, so everything else would move accordingly but the rotation would be unaffected. I know there are ways to do this example but the idea is to control many layers without having to add expressions individually to every layer like our 3D fallout preset.
“But I don’t use expressions…”
Whether you use them or not, a new system could allow better and faster tools for YOU, that would be simple to deploy and easy to add or remove without getting a million errors when you delete a referenced slider control. Then pulling out you’re hair because the variables are just names of fruit drinks and 80′s rock bands.
Things like Global Variables, would be nice too. I say THINK BIG, expressions don’t have to be small self-contained functions on every value, but instead they could be the life-blood of every parameter through-out the applications just like in the movie Avatar but you don’t have to wear the 3D glasses.
I should probably proof-read this after lunch but I’m hungry now!
So, what would you like to see? What problems have you had with expression that could be improved?