Dev:Py/Scripts/Proposals/After Effects

提供: wiki
移動先: 案内検索


I'm starting this page to keep track of the importer/exporters that are/should be officially included in Blender 2.5 and to propose new ones.


After Effects Exporter

Why we need it

Blender's Node Editor is a great tool but in the world of Motion Graphics (MoGraph) Adobe's After Effects is the tool used by the large majority of individuals, freelancers and studios. Blender should be "playing nice" with After Effects in order to encourage its adoption in the MoGraph scene. Such adoption will bring large rewards for the Blender universe, including increased sales of educational material (books, DVDs) and generate higher demand for good trainers. This approach has been used by Maxon for Cinema4D and they have enjoyed a huge success that turned into excellent revenues. What it means to us is that it proved that such need is in the market and Blender could be cutting a sizeable niche in that market and provide added revenues for The Foundation and all the people who support Blender.

Previous art

There are today a couple of solutions available to partially do what is in this proposal. A first script created by user "osxrules" ( exports camera and Empties information to a Maya script which can then be imported in AE. While this system works it has a couple of limitations. First, it uses another intermediate format, Maya, which means that we need to convert data from Blender units to Maya units to AE units. Not the best solution for debugging. Second, there is limited support for the Maya format in AE. In fact After Effects has a complete JavaScript API that can be used to control almost every part of the application.

So, we have two applications, Blender and AE, Blender scripted with Python and AE scripted with JavaScript. I don't see the need to introduce a third layer that can be potentially "foreign" to artists using Blender and AE.

A second script, written by Thomas Volkmann and Bartek Skorupa uses the approach of generating a JavaScript source to export camera data and one Null associated to one scene's object.

The script gets the idea right but has some issues in the way the objects are chosen. The user has to select them before running the script from the Python console. In addition it is very memory-hungry and the design would not scale for larger applications.

I mentioned these two cases just to make clear why I believe a third solution is necessary and because I wanted to give credit to the individuals who paved the way to the solution by showing that it can be done.


  • Exporting a scene to After Effects, or any other compositing suite, requires that you identify the elements that need to be exported. Neither of the previous solutions had a flexible approach to this problem. Relying on selecting objects introduces a weakness in the UI and makes it impossible to remember what elements were part of the export or why. It's also fairly cumbersome.
    We can extend an already existing convention of Blender, the one about naming bones in rigs, and simply append a special label that will mark the object as "to be included in the export."
    The label that I suggest is the suffix ".MGX" or "_MGX", which stands for Motion GraphiX. This would keep the feature target-independent and retain the list of exportable elements with the .blend file. It becomes a piece of documentation as the user will be able to see the exportable elements by simply reading the Outliner.
  • The AE Exporter (AEE) should be available from the usual File/Export menu. Upon running the script the exporter will scan the scene and find the exportable elements and start writing the JavaScript importer.
  • These are the object types that should be exportable:
    • Camera. After Effects supports a 3D camera so this will bring matching movement that can be used to add new AE layers that will move in perfect synch with the Generated Blender scene.
    • Lights. This should include the Cone Angle, Cone Feather (Cone Blending), Intensity, and Color.
    • Meshes and Text objects. For these elements we export the center of the object as an After Effects Null. The user will be able to parent AE layers to that Null in order to make additional MoGraph items move in synch with specific objects in the scene.
    • Planes. It's a common task to create "projectable surfaces" in a 3D MoGraph scenes. These surfaces can be billboards, TV screen, monitor screens in virtual sets, etc. The surface acts as a placeholder that will be completed in After Effects, see this Cinema4D Tutorial for an example.
      With the plane exported as an AE 3D Solid the user will be able to replace it with footage, effects, and everything available in AE in a matter of seconds. This is a critical feature.
      • Object IDs. If a plane is exported then we should also include the corresponding Object ID pass in order to provide an AE track matte. This is similar to C4D "Object Buffers" and a very valuable tool in creating composites.
    • Empties. From time to time users will need to export Empties and convert them to AE Nulls.
    • All objects listed above can be animated so the export will convert IPOs to AE keyframes.
    • Passes. Given that we have full control on AE's features, we should include in the export placeholders for all the passes selected by the user. This will make the inclusion of Blender's renders as easy as it can be. In the future we might be able to completely control the rendering process to create a "one button export" but for now I suggest that we include the following placeholders:
      • Color pass. This will be at the bottom of the comp
      • Shadow pass, one level above the Color pass. Blending mode set to Multiply
      • Specular pass, above Shadow. Blending mode set to Add
      • AO pass. Above the Specular pass, blending mode set to Multiply

At the current date, Dec 2009, I have done about half of the implementation, testing the AEE under Blender 2.49b, given that the 2.5 API is still moving and partially documented. It would be great if people could provide their feedback and possibly more ideas. As soon as the code is a little more stable I'd like to submit it for inclusion in the Blender trunk.

The purpose of the AEE is really to make Blender a necessary tool for the MoGraph artists. Today there are many who use C4D simply because of its excellent After Effects exporter. There is absolutely no reason why Blender should not be enjoying that kind of recognition given that its modeling and animation tools are often ahead of the ones included in commercial programs.

-- Paolo Ciccone phciccone at gmail dot com