Patent Absurdity animation breakdown

Table of Contents

1 Introduction

Hello! Assuming you're reading this file, you may be interested in how to play with and possibly modify the animations used in Patent Absurdity. These files are known to work with Blender 2.5 Alpha 2.

2 Sections of the film

2.1 Graph animations

These graphs are actually based on graphs from a PDF file (stored in ./reference/dopat9.pdf, see *Attribution for details) that were opened in inkscape, broken down into layers, and then animated. All these files, as well as the .blend files, are located in ./graphanim/.

So the way the .blend files work might seem a bit confusing at first… If you run the animation, you'll see a plane moving into the camera view like so:

  _______       ,.========,.
 |       |      ||        ||
 | PLANE |====> || CAMERA ||
 |_______|      ||        ||

(Where the plane is moving right and the camera is staying still)

Now look at the compositing nodes. What you'll see is that the "alpha" / transparency channel of the layer that the plane is on is controlling the visibility of the "line" layer. The "background" and "line" layers are loaded as separate images, so as the plane moves onto the camera, the line becomes visible. Looking at the nodes may make this more clear (assuming you know how to understand compositing nodes!)

2.2 Timeline

There are a lot of files in the ./timeline/ directory. The only ones that really matter in here though are the new_pat* files and the timeline.blend file.

The animation here is really simple. All the images are set vertically on frames, the camera moves down to each image, and the image's alpha channel (technically the texure's alpha channel) is animated to fade in as the camera approaches it. Very simple!

There are several files used here in the "icons"; see *Attribution for details.

2.3 Beethoven

This animation is like a slightly more complex version of the timeline animation. The camera moves from page to page (horizontally this time). This time the pages don't fade in or out.. some of the notes and some "patent warnings" do. The note layers move down as they fade out. Other than timing, not much more to it than that.

2.4 Wargames

This is by far the most complex animation in the film, so I've saved describing it for last.

Well, there's a map, a camera which moves around, there are little boxes that appear, and there are nuke curves that run. Main trouble is that as for these last two, there are a LOT of them. Too many for me to be able to handle every time manually… so I wrote some tools for myself in using Blender's Python API.

2.4.1 Layer organization

The layers are as follows:

  • Layer 1: Background map & camera
  • Layer 2: Patent boxes
  • Layer 3: Nuke bezier curves
  • Layer 4: Auto-generated nuke explosions
  • Layer 5: Auto-generated nuke curve controls

And then the following templating layers:

  • Layer 6: Patent box templates (do not remove!)
  • Layer 7: Nuke curve machinery templates (do not remove!)

When rendering it makes sense to have layers 1-4 visible.

2.4.2 Patent boxes

The "user interfaces" for creating patents and nuke curves are a bit… non-gui. :)

To create a new patent box, set the timeline to the point in time that you want the patent box to appear. Then set the 3d cursor to the position you want the patent box to appear.

Now go the scene buttons menu. Scroll to the bottom where it says Custom Properties. Add or edit the Patent Template variable and set it to whichever patent template you want:

  • pat_adobe for Adobe style
  • pat_ibm for IBM style
  • pat_oracle for Oracle style
  • pat_msft for Microsoft style
  • pat_appl for Apple style

Now go to the python console and type:

>>> bpy.ops.patanim.appearify_patent()

If you move the timeline back and forth a bit you should see a patent box appear where the 3d cursor is set.

  • How it works

    The functionality for this is fairly simple. The template box and text are copied from layer 6 and moved to the 3d cursor. Then a random number between 500000-750000 is assigned to the patent box text. A few keys are inserted: the text and box are scaled to 0 (invisible) before the appearance point, then scaled into view with a few keys added to give a mild up and down "bouncing" into view appearance.

    The save_excursion decorator is used to set the layers, 3d cursor, and etc back to where they were before the operation was performed.

2.4.3 Nuke curves

Duplicate one of the basic curves or make one from scratch. Check out the object properties of the curve… you should see these important properties:

  • start_frame: What frame the nuke will launch on
  • flight_time: How long the nuke travels for
  • explosion_radius: How big the explosion will be

The rest of these variables will be auto-filled; you can ignore them.

If you select the curve you want to animate and run:

>>> bpy.ops.patanim.nukify_curves()

It'll create a nuke off of that bezier curve that starts, ends, and explodes at the appropriate point. If the curve has an existing explosion circle, it will be removed and reset and sized to the right points at the right time.

You can make a nuke curve from any arbitrary curve as long as it has these three essential properties. In addition, whatever material you assign to this curve will also be used on the explosion.

  • How it works

    The "nuke curve" is given volume with a curvecircle. The "drawn path" is controlled via a taper curve. Normally a taper curve is used to control a kind of waviness/volume of the curve, but it can also be used to control visibility. This is why there is the "curve machinery" which is borrowed from layer 7 and assigned to layer 5. This bit of machinery is simply a curve with four points:

           + <- hook empty

    Points 1 and two have the Y coordinate of 1 whereas points 3 and 4 have the Y coordinate of 0. Wherever the curve is 1 full visibility of the curve is shown and wherever it is 0 the curve is invisible. Since the points 2 and 3 are "controlled" by the hook empty between them, you can move this back and forth along the X axis to control the moving visibility of the curve. This gives the appearance of a moving curve… a clever hack. :) (Thanks to Bassam Kurdali for showing me how to do this.)

    The hook is set to start at the left of the taper machine at the start_time custom property and move to the right at start_time + flight_time. Thus the illusion of a growing line is given and automated.

    At the time of start_time + flight_time, an explosion circle is inserted, scaled to point 0, and then a few frames later, scaled to explosion_radius (with an intermediate x scaling "stretch" key to add a bit of bouncy life to the explosion).

    The save_excursion decorator is used to set the layers, 3d cursor, and etc back to where they were before the operation was performed.

3 Attribution

Everything was done by myself (Christopher Allan Webber) in 2010, and I release that under the Creative Commons Attribution Share-Alike 3.0 Unported license, except for code, which is released under the GPLv3 (see COPYING.txt for details). That is, except for the following:

3.1 Special files used in graph animations

The graphs are borrowed from the work Patent Failure, by James Bessen and Michael J. Meurer. The graphs were extracted from Chaper 9, which is available online at:

3.2 Timeline

The Supreme Court vector image included was done by my spouse, Morgan Lemmer-Webber (much thanks Morgan!) and is also released under CC BY-SA 3.0. This following image was used heavily as a reference:

In addition, the Federal Circuit image uses the seal of the Federal Circuit, taken from here:

… this file is in the public domain.

The Capitol Building image is borrowed from:

… which is also in the public domain.

Lastly, the image of Federal Hall was borrowed from the book George Washington, by Calista McCabe Courtenay, which is in the Public Domain and is borrowed from Project Gutenberg:

3.3 Beethoven animation

MIDI files and modified lilypond / SVG files taken from the Mutopia project; all files in the public domain

Author: Christopher Allan Webber <>

Date: 2010-05-23 15:46:06 CDT

HTML generated by org-mode 6.34trans in emacs 23