Post Production

After Effects & EXRs- Compositing with big boy toys

Introducing Cryptomattes, demonstrating world position passes

The OpenEXR file format is the industry standard amongst high-end visual fx companies, but unfortunately After Effects has always had a poor reputation for EXR support.  Today, fnord software released the latest version of the ProEXR suite of plugins for After Effects, which offer dramatically improved performance.  In addition to providing a workaround for a long-standing bug in After Effects, v2.0 of the ProEXR plugins introduces Cryptomattes– an incredibly powerful new compositing tool.

Compositing with big boy toys – introducing Cryptomattes and demonstrating world position passes.

This article is more than just a news release – it’s also the story of incredible support amongst the After Effects community, a reminder about feature requests and bug reports, and also a public thank-you.

The short version is that After Effects (up to and including CC 2019, released a few weeks ago) has a bug that causes some EXR sequences to render incredibly slowly. By downloading and installing the latest plugins from the fnord website, performance is dramatically improved.

The ProEXR importer automatically makes a “contact sheet” of all the passes in the EXR file, so you can see exactly what you’ve got.

Working with EXRs in After Effects

To date, EXR support has been provided by a 3rdparty company and not by Adobe themselves.  Brendan Bolles of fnord Software has been single-handedly responsible for bringing EXR support to After Effects.  While Adobe include some of the fnord plugins with After Effects, they’re not developed by Adobe themselves.

This is important to know because Brendan continues to update and improve the software, and you can download the latest versions of the EXR plugins for free from the fnord website.  It also includes some additional plugins that aren’t currently bundled with After Effects – collectively named the ProEXR suite.  This includes Cryptomatte, a powerful new compositing tool.

While After Effects is the de facto application for motion graphics design, when it comes to visual effects and compositing there’s a more crowded and complex landscape. If you’re working in motion graphics, or video production for the corporate sector, then there’s a good chance you’ve never come across an EXR file.  But when it comes to the feature film visual FX industry, and Hollywood level compositing, then EXRs are the industry standard file format.

To be brutally honest – After Effects doesn’t have a strong presence in high-end visual FX compositing (some people say After Effects doesn’t have ANY presence in high-end visual FX compositing), which is probably why the bug with EXR sequences has gone unreported for so many years – at least as far back as CS 5.5.

Pining for the fnords

Several months ago I started a small project for a company with an established Nuke compositing pipeline.  They were happy for me to work with After Effects, and I was determined to fit in with their established workflows – which meant using multi-channel EXR sequences, and Cryptomatte.  Over the years I’ve worked with EXR sequences before, and although I’d seen a lot of online comments suggesting that After Effects had poor EXR support, I didn’t think it would be a problem.  For the first few days I was working with still images and everything seemed fine. But as the project progressed, those still frames turned into sequences and suddenly After Effects ground to a halt. In some cases I was waiting 2 ½ minutes for After Effects to display a single frame, and even the most basic comp – importing a single EXR sequence and pre-rendering a single matte – was averaging about 1 minute per frame.

Something was very clearly wrong, and I began to think that I simply wouldn’t be able to do the job.  As the sole After Effects compositor working with an established Nuke team, this would not only be embarrassing for myself but it would also cause irreparable damage to the reputation and image of After Effects.

I posted my problems to the Media Motion After Effects list, and within 24 hours I received a response from Brendan Bolles, of fnord software.  With some further detective work Brendan discovered a long-standing bug that has been in After Effects for as far back as he checked (CS 5.5) and probably even earlier.  The unusual aspect of the bug is that it only affects EXR sequences – still frames are fine.  Additionally, it’s only noticeable with EXR files over a certain size – the smaller image that Brendan used for testing did not cause problems.  But the larger resolution, multi-channel EXR files that I was dealing with triggered the slow behavior.

Only 48 hours after my initial email, Brendan had identified the cause of the problem and produced an updated beta version of the EXR plugins that worked around it.  The technical details were shared with the Adobe team, who acknowledged the problem and followed our progress.  Over the next few days Brendan refined the patch, and after a couple more betas I had a version that enabled me to work normally.  The bug itself wasn’t fixed, but the plugins included a clever workaround.  My render times went from minutes per frame down to a few seconds.

Thanks to Brendan’s speedy assistance, I was able to complete the project without any further dramas.

Today, those updates have been formally released in the version 2.0 suite of the Pro EXR plugins, which are freely available here.

If you use EXR sequences – or even think you might use EXR sequences at some point – then you need to download the latest plugins from fnord to work efficiently. Once the root cause of the bug is fixed at Adobe’s end, there will no doubt be another update to the ProEXR plugins to reflect this.  So no matter when you’re reading this, check the fnord website and make sure you’re working with the latest releases.

Beautiful Plumage

The video above is intended to give a quick introduction to Cryptomattes as well as world position passes, without becoming a full-blown tutorial on compositing.  Working with EXRs generally involves working in linear, 32 bit float mode which can take some getting used to, and I was trying to keep the video as short and concise as possible.

However there are a few points that I should clarify:

While I compare Cryptomattes to traditional RGB multimattes, and suggest they are better in every way, multimattes are still a valuable tool and they’re not obsolete just yet.  One advantage they do have is file size – EXR files can get quite large, while multimattes compress very efficiently.  If you’re used to working with 8-bit files and don’t need lots of mattes, then your existing workflow may be slightly faster while taking up much less file space.  The automatte script which I refer to in the video can be found here, at After Effects scripts & plugins.

The world position pass demonstration is definitely more of a demonstration than a tutorial, and one detail I skipped over was the re-ordering of channels.  In theory, a world position pass stores X,Y & Z values in the R,G & B channels of an image.  However different 3D apps use different axis and orientations, so you will probably need to swap them around a bit to get them working.  In my example, with renders coming from 3DS Max, I needed to swap the green and blue channels, while also inverting the y-axis.  Swapping the channels is easily done in the Extractor plugin, while inverting the y-axis just means multiplying it by -1.

I didn’t want to slow down the demonstration with fine details about all of the expressions, but these are the basic steps that I use:

• firstly, I add a null object to use as the layer for the expressions.  I add the 2D point expression controller, and make the position of the null 0,0 so the 2D point controller matches the position on screen.

• secondly, I add an expression colour controller that uses the “sampleImage” function to read the colour values in the EXR layer, at the position of the 2D point controller.  The expression is pretty simple:

l=thisComp.layer("WorldPositionPass_Extracted"); 
p=effect("SourcePosition")("Point"); 
c=l.sampleImage(p, radius = [.5, .5], postEffect = true, t = time);

• finally, I add 3 expression sliders and name them X, Y & Z.  I add an expression to each one to read the respective colour value:

c=effect("Color Control")("Color"); 
x=c[0]; 
[x]

…and in my case, for the y axis I multiplied the result by -1.

• the text layers that I add to display the results on screen are simply reading the values from the individual expression sliders.  For more information on using text layers with expressions, check out this article.

What’s it all about

While Cryptomattes are exciting and world position passes are also pretty cool, the most interesting aspect of this story is that such a fundamental, debilitating bug has been in After Effects for so long without it being reported.

I use After Effects every day and there are a whole list of quirks and irritating behaviours that regularly frustrate me.  I have often thought that it must be just me, because if it was like this for everyone they would have fixed it.  Now I realise that’s not true – there can be severe bugs that affect massive numbers of people, and yet if they’re not reported to Adobe then the developers might not even know about it.

As a direct result of my experience with the EXR bug, my new resolution is to file bug reports and feature requests for every unusual behaviour.  If I don’t, then I only have myself to blame.  And if I do, then After Effects can only get better.

Thanks to Duncan Dix for supplying the BMW car image.


Share Our Article

Chris was born a geek, and was lucky enough to own a Commodore 64 at a time when the number of students at his primary school who owned a computer could be counted on one…

Leave a Reply

avatar
  Subscribe  
Notify of