I was working with a paint action sequence (PASeq) that builds generative paint animation when run over time. I wanted to add a symmetry warp effect to the animation. In doing so I ran into an interesting case where just adding the warp effect to my existing PASeq worked fine for a single frame but did not work as expected when the PASeq was cycled in loop action over time to generate an animation. There is an editing trick you can use to make things work properly, which we will look at in more detail in this post.
The paint animation uses time particles and is based on a PASeq we used in a previous post (the one without the attractor). The first image above shows the correct symmetry effect I was looking for 5 seconds into the animation. The second image in the gallery shows the initial result I got when I naively added the symmetry warp action step to the end of my generative PASeq. You can see the end results look very different.
The first PASeq in the gallery below shows my initial attempt at adding a symmetry warp effect to my generative paint animation. This appears to work fine when looking at a static canvas. It’s only when you view the results it creates over time in a generative paint animation that you realize that it’s not doing what you initially expected.
To understand what is going on, you need to think about how the PASeq builds up the animation effect over time. The previous output canvas image is processed in several different ways to distort and fade it, then new time particles are drawn on top of the modified previous output frame. This approach is a kind of recursive processing.
Adding the symmetry warp as specified in the first gallery PASeq above means that the symmetry warp also gets applied recursively each cycle of the animation. What I really wanted was to apply the symmetry warp non-recursively. So I want the symmetry effect to be applied to the output frame, but when I start a new PASeq cycle I want to process the canvas as it looked prior to the symmetry warp (so that the symmetry warp is applied non-recursively rather than recursively).
The trick do properly adding the symmetry warp is shown in the second PASeq in the gallery above. Note that i’m using multiple layers to build the paint animation in this second approach. Rather than applying the symmetry warp to layer 1 (where all of the recursive processing is occurring), I use the Fixed Image ip op to copy layer 1 to layer 2. I then apply the symmetry warp to layer 2, and layer 2 is the image I output to my generated movie file.
The first image below shows how to configure the Fixed Image ip op to route layer 1 to the current layer (which we want to be layer 2 when we record the action step in the PASeq). Since we’re working with multiple layers, we also want to make sure we have Layer Playback is turned on in the generic Editor for the PASeq preset (shown in the second image below).
We’re using the View Current Layer canvas view option for this example. This means we only view the current layer in the canvas as opposed to compositing the 2 layers together into a single view. The first layer acts as a buffer to build up our painting and recursive processing of previous paint images. The current recursively processed image in layer 1 is then copied to layer 2, and the symmetry warp only affects layer 2. If we symmetry warped layer 1 then the effect of the symmetry warp would recursively build up over time rather than just be applied to the current output frame.
This 2 layer strategy where recursive processing occurs in one layer and non-recursive processing occurs in a second layer is a common PASeq editing metaphor you can use when building generative animation or movie processing effects.
For example, often times it’s useful to add contrast boosting via the Image Compressor or Edge1 composited Blur ip ops. Both of these ip op actions can boost the output image quality when applied to a single output frame. But if they are used recursively in an animation where their effects build up repeatably over multiple frames they can lead to clipping or blooming. The 2 layer editing strategy allows you to mix recursive and non-recursive processing in a single PASeq.