Blog

Improving After Effects

After Effects needs to be rewritten from the ground up. It’s slow, buggy and the UI is years behind other products in Creative Suite. Adobe has taken advantage of the fact that they are the dominant player in the motion graphics market and effectively have no competitors. They keep pushing forward building on 20 years of legacy code ignoring many long withstanding bugs and core improvements that could have slowly made their way in. Here’s a wish list of improvements and features that I would warmly welcome in a new After Effects.

Scripting

JavaScript is a bad language. And it’s an even worse pick for After Effects scripting language. Javascript is so bad in fact, that entirely new wrapper languages have been built that compile back to Javascript so that people don’t have to deal with it at all. A few reasons why:

  • It’s almost entirely used in the browser.
  • Almost all libraries and toolkits available for it are for browsers.
  • It doesn’t (out of the box) provide higher level concepts like OOP.
  • Doesn’t encourage After Effects scripters to write re-usable libraries or toolkits.
  • The current implementation of JavaScript in After Effects is old and very slow.

After Effects needs a language thats more friendly to its developers and allow them to do more with less.

Python is a language that addresses all of the points made above and has seen an uprise in the post-production community. Maya, Cinema 4D, Blender, Nuke all provide native Python access. It’s an advanced scripting language that doesn’t come with the quirks and misfortunes of a language mainly geared for browsers that JavaScript does.

Project/Composition level scripting

Right now you have two choices of automation in After Effects.

  1. An external script that runs once.
  2. In individual layer properties that are executed frame by frame.

Almost everyday I feel the need of the ability to manipulate and generate elements from a global perspective on a frame by frame basis. Having to open up each individual property that has code I want to change is a serious productivity drag. I want all of the code in one place. Not chaotically scattered through a composition.

Composition Instancing

Say you have a composition that decorates some text with various layers and effects and you need to now use that composition dozens of times throughout your project with different text. So you duplicate it however many times you need and place it where needed. Now, you want to change the leading of the text in each one. Currently your only option is to individually open up each composition and make the same change over and over again.

Here’s the problem explained a different way.

If something like a Flash Symbol was introduced. You could make a template composition. And provide and way to change whats inside of it on a per-instance basis after its been duplicated.

Another idea is to be able to select which layers are to be rendered from inside an instanced composition. That way you could have a master composition with all possible instances of a “template” and then be able to control on a per instance basis whats shown.

Folders in the timeline.

This has been asked for over and over again for years. Pre-comping is usually a bad idea and the less of it the better. I just don’t like losing context in the main composition to do something trivial like apply a mask to a selection of layers in the timeline. A nodal interface would be the best solution to this particular problem but I know that Adobe would never implement it, so I won’t argue that point. Here’s an idea I came up with pretty quickly, so it certainly could be improved.

More useful and consistent info panel

Dragging a layer in the timeline shows changes as:

Dragging a keyframe only shows this:

Why is the delta only shown for a layer? Both cases should show it.

And why is it limited to 3 lines of output?

Built-in opacity, blend mode and masks for all effects

Sometimes I find myself duplicating an effect onto a new layer with a mask or a different blend mode just to be able to achieve this functionality. Why can’t Adobe just add something like a composite section to each effect by default?

Multiple projects open at the same time

How many times have you just needed to copy and paste something from one project to a different one? Take a hint from Cinema 4d on this one.

Ability to separate dimensions on all 2d/3d properties

Why can only a layer’s position property be separated? Why can’t we separate things like point of interest (which is of the same exact type of property as position, ThreeD_SPATIAL ), orientation, or any other 2d/3d property?

Ability to move layers in the timeline without moving its keyframes

You’ll notice that as you select keyframes of a layer, it also selects the parent layer of the keyframes. Many times I’ve need the ability to move just the and then just the keyframes on another layer.

Useful expression function are not available to scripts

You can’t use expression functions in a script. It makes sense why loopOut wouldn’t be available, but why isn’t toWorld or fromComp?

Native move keyframe scripting function

It’s a difficult and very, very slow process to move keyframes via scripting. Right now you have to copy the keyframe data which is embedded in it’s parent property (which in itself is complicated enough). Then delete the keyframe. Now make a new keyframe with the new time you want and use the copied data earlier to recreate it. This can be tricky too, because the method used to create keyframes depends on a supplied keyframe index value, which isn’t easy to find out before the keyframe has already been made.  Far, far too complicated for such a simple common task. And about 100 times slower than doing the exact same operation manually in the timeline.

Modify path points with expressions

This would be very useful for making animated graphs within a shape layer for instance.

More configuration options

An option to turn off Global Performance Cache. A lot of the time I find myself purging cache because GPC doesn’t always update old frames.

An option to turn off expression dialog warnings. Sometimes you’re writing an expression and you need to do something else before you finish it. For instance, twirling down another layer’s property so you can pick whip it. If you move out of a uncompleted or invalid expression textarea you get this annoying dialog every single time.

Consistency with camera layers and expression control “effects”

You can’t add expression controls to camera layers. This would be useful for tidying up camera rigs that require an extra null layer to stuff expression controls on. It also strikes me odd that the expression controls are in the Effects & Presets pane in the first place.  How can it be considered an effect?

Suggestion Form

This entire post wouldn’t exist if there was a central place to see all current suggestions submitted to Adobe. I might be able to understand why they wouldn’t want this if they had fierce competition with another program, but since they are the only player in the game when it comes to motion graphics, it doesn’t make much sense.

Adobe should make the suggestion form more of a community effort where people can see what other people have already suggested and vote up the best ideas. For example, say someone has this brilliant idea everyone would love and want more than any other feature. But using the current form, only that person and the person reading the incoming suggestions at Adobe would know about it. And then when they tally up how many requests each suggestion they’ve received has, this particular idea would come in with only one request and probably appear undesirable by the AE community as whole and most likely not be high on the implementation list. A forum with a voting system (like this) would solve this issue and should not take long to implement either.

So the reason why I’m posting these ideas on my blog is to hopefully get more people aware of possible features that they might not have considered themselves. Since what the current system seems to honor is quantity.

You can find the current suggestion form here.

Add Incremental Save For Crash File Name

Give an option to increment the current file name during a crash instead of appending “_1″ to the end. You end up with a lot of this:

And I just end up renaming them incrementally anyways.

Expose more properties to be modified by expressions

For instance, it would be nice to access things like the number of characters and lines for text layers. It’s currently very random what’s exposed.

Smaller, but worth noting

Make Grow Bounds work on all types of layers. Like RGS Grow Bounds.

Make Set Matte more robust. Currently it only works if layers are 2d and the same size ratio. There should be an option to apply its mask based on what the active or a selected camera sees.

Layer like features for masks, ala visibility toggle and in and out points. Instead of having to drag the entire mask off screen when its not needed anymore.

Effect inputs have a max value of 32767. The rest of AE allows you values up to 1.1000000e+200. Input values should be consistent across AE.

To relatively change keyframe values in the timeline without using the value dialog, you have to have the scrubber directly one one of the keyframes your trying to change. Add a modifier key to do the same thing no matter where the scrubber is at.

The project panel doesn’t expand columns to show the length of long values. Mainly file path.

Wish List for Cinema 4D R15

A growing list of needed features/improvements for Cinema 4D.

Render Layers

I started a thread on CGTalk that got quite a bit of discussion about this going.

The lack of some sort of render layer management system makes my experience with Cinema a nightmare time after time. A lot of people I talk to about this don’t initially know what I’m talking about or suggest I look into render passes which are something different. So here’s a detailed example in case you don’t know about render layers:

I want to composite an apple slowly fading up to full visibility on a table in After Effects. To do this correctly you need to render the scene at least twice to get a render of just the apple and then just the table separately. An object buffer on the apple wont work in this case because when you apply the buffer and reduce the apple’s transparency, there wont be anything behind it except a black area in the shape of the apple.

So to do this in Cinema, you must save 2 different versions of the scene to render. One where only the apple is visible and the other where only the table is visible. Simple enough. But, now the client comes back and wants to make changes to the scene. You now must either go in to each file and make the same changes twice, or, make the changes in the original scene and then save the two .c4d files again to render. Hardly convient or maintainable, especially when things get more complicated than this simple example.

In Maya, you would have the apple on one render layer, the table on another. And from just one Maya scene you can render both layers to different image files, no need to create multiple .ma’s. And when the client comes back and wants to make changes, it’s easy because the two layers are children of a master layer. In the master layer you can make changes globally and have them trickle down to the children layers. Hit render, done.

There is a plugin that has attempted to provide this functionality called Render Elements which was developed by Adam Swaab. He did an amazing job at providing a solution to a big problem that hasn’t yet been adressed by Maxon. That said, saving out separate .c4d files for each individual pass you want separate is an archaic way of doing this. And it doesn’t work with user data or Xpresso.

Render Output Configurability

Somewhat related to render layers, but not dependent, is a better way to specify where your rendered files go. What is the point of separating the main image from multipasses in the render settings? It’s annoying that I basically have to set the same thing twice. I think Maxon should take inspiration from how Maya does it.

For example, in Maya, this tokenized control string:
/<Camera>/<Layer>/<Pass>/<Pass>_####.<Extension>

would generate files at these locations:

“/camera_one/apple_layer/diffuse/diffuse_0001.png”
“/camera_one/apple_layer/specular/specular_0001.png”
“/camera_one/table_layer/diffuse/diffuse_0001.png”
“/camera_one/table_layer/specular/specular_0001.png
“/camera_two/apple_layer/diffuse/diffuse_0001.png”

Material Instance Control

The ability to control materials on a per-instance basis in Xpresso would be of tremendous help. Have you ever made duplicates of a material to just change a single property while keeping the rest the same? A texture or vertex map is not always a good answer to this problem either.

Bodypaint

Bodypaint is really, really outdated. It lacks now basic functionality like stitching and joining UVs. The interface has always struck me as completely non-intuitive. And nearly every time I want to do something simple, I usually have to go find a tutorial online somewhere reminding me on how to use it. Easily the most needed feature in Cinema needing an overhaul.

Native Shadow Catcher Shader

It’s unacceptable that this request has been repeatedly ignored by Maxon for years. Theres a plugin thats been floating around for years that only works with soft shadows and even then doesn’t always do what you want.

Full Scripting Access to Mograph clones

I know it’s a performance related problem and a long shot of a request. But it would be great if you could access more than just the Position/Scale/Rotation of the clones. For example, the ability to control user data on a clone instance from an effector.

Xpresso Refresh

The R14 improvement was merely a facelift. I wish it would have actually improved/added functionality? Some inspiration from Houdini, Nuke, or now even Modo would be great.

Thinking Particles

The makers of Thinking Particles, Cebas, were hired to write the TP module for Cinema 4D R8 that came out in 2002. Back then TP was in its first iteration. Its progressed quite a bit since then and now stands at version 5. Cinema’s Thinking Particles haven’t moved along with the times at all.

One specific feature in need of addition is true sub-frame sampling for particle simulations. This solution does not solve problems across the board. In cases of high velocity emitters and other situations particles still group into un-natural patterns.

Anti-Aliased Multi-Passes

The Material UVW and Material Normal passes provided by Cinema are rendered almost completely useless because they aren’t aliased. You currently need to render the image at about 4x resolution to get usable results.