<?xml version="1.0" encoding="utf-8" ?>
<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/">
  <channel>
    <title>#animation posts — Ben Crowder</title>
    <link>https://bencrowder.net/blog/tag/animation/</link>
    <atom:link href="https://bencrowder.net/blog/tag/animation/feed/" rel="self" />
    <description>Feed for blog posts tagged with #animation.</description>
    <lastBuildDate>Sat, 04 Apr 2026 05:22:16 GMT</lastBuildDate>
    <language>en-US</language>
    <generator>https://bencrowder.net/</generator>

    <item>
      <title>Links #38</title>
      <link>https://bencrowder.net/blog/2021/links-38/</link>
      <guid isPermaLink="true">https://bencrowder.net/blog/2021/links-38/</guid>
      <pubDate>Thu, 11 Mar 2021 12:00:00 GMT</pubDate>
      <dc:creator><![CDATA[Ben Crowder]]></dc:creator>
      <description><![CDATA[<p><a href="https://github.com/ratfactor/ziglings">Ziglings</a>. Learn Zig by fixing small bugs in small programs. (Inspired by <a href="https://github.com/rust-lang/rustlings">rustlings</a>, though those exercises seem to be broader than just fixing errors.) A good way to learn a programming language, I think.</p>
<p><a href="https://maggieappleton.com/bidirectionals">Maggie Appleton on bi-directional links</a>. Doing this locally is one of the (many) changes I want to make down the road when I rebuild this site’s backend.</p>
<p><a href="https://vasilis.nl/nerd/where-should-the-navigation-be/">Vasilis van Gemert on where web page navigation should be</a>. I’m convinced: nav at the bottom of the source file, and on mobile at the bottom visually as well. Planning to make the change here soon.</p>
<p><a href="https://www.blender.org/press/blender-2-92-release/">Blender 2.92 dropped recently</a>. Geometry nodes look promising, and it’s crazy to see how all the grease pencil work has turned Blender into a viable 2D animation studio as well.</p>
<p><a href="https://www.python.org/dev/peps/pep-0636/">PEP 636</a>. Pattern matching! In Python! Very much looking forward to this — I’ve loved using it in Rust.</p><hr class="feed-extra" style="margin-top: 48pt;" /><p class="feed-extra feed-mail"><a href="mailto:ben.crowder@gmail.com?subject=Re%3A%20Links #38">Reply via email</a></p>]]></description>
    </item>
    <item>
      <title>Links #27</title>
      <link>https://bencrowder.net/blog/2020/links-27/</link>
      <guid isPermaLink="true">https://bencrowder.net/blog/2020/links-27/</guid>
      <pubDate>Fri, 20 Nov 2020 12:00:00 GMT</pubDate>
      <dc:creator><![CDATA[Ben Crowder]]></dc:creator>
      <description><![CDATA[<ul>
<li><a href="https://dynamicland.org/">Bret Victor’s Dynamicland</a> — they had me at “a non-profit long-term research group in the spirit of Doug Engelbart and Xerox PARC”</li>
<li><a href="https://jsomers.net/blog/more-people-should-write">James Somers on how more people should write</a> — amen and amen</li>
<li><a href="https://joelhooks.com/digital-garden">Joel Hooks on blogs and digital gardens</a> — this makes me want to finish my revamp of Slash so I can more easily add an actual digital garden to this site (and at some point I’ll write about that revamp since I don’t think I’ve gone into any detail on it)</li>
<li><a href="https://stackingthebricks.com/how-blogs-broke-the-web/">Amy Hoy on how blogs broke the web</a> — it’s not quite as bad as the headline sounds, but still some good food for thought (you could say this is another way of looking at stock vs. flow)</li>
<li><a href="https://vimeo.com/477589942">Deekay’s Animator Creating Animation</a> — charming, loved this</li>
</ul><hr class="feed-extra" style="margin-top: 48pt;" /><p class="feed-extra feed-mail"><a href="mailto:ben.crowder@gmail.com?subject=Re%3A%20Links #27">Reply via email</a></p>]]></description>
    </item>
    <item>
      <title>Wave GIF</title>
      <link>https://bencrowder.net/blog/2014/wave-gif/</link>
      <guid isPermaLink="true">https://bencrowder.net/blog/2014/wave-gif/</guid>
      <pubDate>Wed, 14 May 2014 12:00:00 GMT</pubDate>
      <dc:creator><![CDATA[Ben Crowder]]></dc:creator>
      <description><![CDATA[<p>A quick animated GIF I threw together:</p>
<figure><img src="https://cdn.bencrowder.net/animations/wave-001.gif" alt="wave-001" /></figure>
<p>I made the initial animation in Blender, using the wave and displace modifiers and some postprocessing in the node editor. Then I imported the frames into After Effects and did a little more processing (added grain, some color adjustments). I exported the frames as a PNG sequence and then converted them to a GIF using ImageMagick on the command line:</p>
<pre><code>convert -delay 1x20 *.png -resize 500x500 -layers optimize +dither -colors 32 output.gif
</code></pre>
<p>More animations coming in the near future, hopefully.</p><hr class="feed-extra" style="margin-top: 48pt;" /><p class="feed-extra feed-mail"><a href="mailto:ben.crowder@gmail.com?subject=Re%3A%20Wave GIF">Reply via email</a></p>]]></description>
    </item>
    <item>
      <title>Sine circle test animation</title>
      <link>https://bencrowder.net/blog/2013/sine-circle-test-animation/</link>
      <guid isPermaLink="true">https://bencrowder.net/blog/2013/sine-circle-test-animation/</guid>
      <pubDate>Wed, 22 May 2013 12:00:00 GMT</pubDate>
      <dc:creator><![CDATA[Ben Crowder]]></dc:creator>
      <description><![CDATA[<p>As I’ve been tinkering around with graphics coding, I wanted to figure out how to map a sine wave onto a circle. Here’s how it went down. (Disclaimer: this is all unoptimized code that is almost certainly not the best way to do this. Also, I’m a beginner, so yes, this is very basic stuff.)</p>
<p>First off, I started a new <a href="http://processing.org">Processing</a> sketch and drew a circle:</p>
<figure class="border"><a href="https://cdn.bencrowder.net/images/2013/05/SineCircleTest-001.png" rel="shadowbox"><img src="https://cdn.bencrowder.net/images/2013/05/SineCircleTest-001-800.png" alt="" /></a></figure>
<p>The relevant code from the <code>draw()</code> function:</p>
<pre><code>float x = width / 2;
float y = height / 2;
float radius = height / 3;
float angle = 0;
float angleStep = 0.005;
float twopi = PI * 2;
float dx, dy;

while (angle &amp;lt;= twopi) {
    dx = x + radius * cos(angle);
    dy = y + radius * sin(angle);

    angle += angleStep;

    ellipse(dx, dy, 2, 2);
}
</code></pre>
<p>The basic idea: I loop from 0 to 2π radians (a full circle) in steps of <code>angleStep</code> radians at a time. At each angle I calculate the vector from the center of the circle (<code>x, y</code>) to the point on the circle at a distance of <code>radius</code>. And then I draw a little circle at that point. With a small enough step size, you get a continuous line. (More on that later.)</p>
<p>Mapping a sine wave onto said circle really just means that when you calculate the vector, you apply a sine wave to the point’s distance from the center of the circle. So I added that in, including frequency and amplitude variables I could tweak:</p>
<pre><code>float freq = 20;
float amp = 20;

dx = x + (radius + sin(angle * freq) * amp) * cos(angle);
dy = y + (radius + sin(angle * freq) * amp) * sin(angle);
</code></pre>
<p>And I got this:</p>
<figure class="border"><a href="https://cdn.bencrowder.net/images/2013/05/SineCircleTest-002.png" rel="shadowbox"><img src="https://cdn.bencrowder.net/images/2013/05/SineCircleTest-002-800.png" alt="" /></a></figure>
<p>(I should add that I did this first part on my phone in <a href="http://procoding.audiocommander.de/">Procoding</a>. But then Procoding crashed and deleted my sketch, so I rewrote it in the actual Processing app on my laptop.)</p>
<p>I pulled this code out into a function so I could loop through it and create a bunch of concentric sinuous circles. I also changed the drawing method to use lines instead of ellipses, so there wouldn’t be gaps. Processing didn’t seem to want to antialias the lines, though, and I’m not sure why. Oh well.</p>
<figure><a href="https://cdn.bencrowder.net/images/2013/05/SineCircleTest-render.png" rel="shadowbox"><img src="https://cdn.bencrowder.net/images/2013/05/SineCircleTest-render-800.png" alt="" /></a></figure>
<p>I also saved an alternate version of the sketch that changed the colors to render out a depth map for each frame (the darker it is, the farther from the camera):</p>
<figure><a href="https://cdn.bencrowder.net/images/2013/05/SineCircleTest-depth.png" rel="shadowbox"><img src="https://cdn.bencrowder.net/images/2013/05/SineCircleTest-depth-800.png" alt="" /></a></figure>
<p>Then I animated the amplitude and rotation of each circle and rendered out all the frames, both for the blue-and-white version and for the depth map. I pulled it all into Blender and composited it together. The node setup:</p>
<figure><a href="https://cdn.bencrowder.net/images/2013/05/SineCircleTest-nodes.png" rel="shadowbox"><img src="https://cdn.bencrowder.net/images/2013/05/SineCircleTest-nodes-800.png" alt="" /></a></figure>
<ol>
<li>I take the depth map and convert it from RGB to black and white (meaning values from 0 to 1, where black is 0 and white is 1).</li>
<li>Then I invert the depth map so white is 0 and black is 1, because I’m going to use it as a distance map, where white is close to the camera (a distance of 0 from the camera) and black is far from the camera (a distance of 1).</li>
<li>I plug both the rendered frames and my inverted depth map into the defocus node, which gives me depth of field. (It’s postprocessed, so it’s not ideal, but I don’t think there’s a way around that.) The <code>fStop</code> value is how shallow the DOF is (the lower the number, the blurrier it gets). In the camera settings I’ve keyframed the <code>Distance</code> value (the focal point), with a range of 0 to 1. (Ordinarily they use Blender units, but in this case we’re using our depth map and that has a range of 0 to 1.)</li>
<li>I do a fast Gaussian blur to try to make up for the lack of antialiasing. It doesn’t work as well as I’d like.</li>
<li>Then I add a lens distortion with some chromatic aberration (<code>Dispersion</code>) and elliptical distortion (<code>Distort</code> plus <code>Fit</code> so that I don’t get black around the edges).</li>
<li>Finally, I add a Mix node and change it to <code>Soft Light</code>, then plug in some brown-colored noise I’ve painted in Photoshop.</li>
</ol>
<p>After I rendered the composited frames out to disk, I imported them into Blender’s video editor, added a crossfade to a black color strip at the end, then rendered to H.264 and uploaded to Vimeo. The <a href="https://vimeo.com/66668195">final result</a>:</p>
<iframe src="//player.vimeo.com/video/66668195?byline=0&amp;portrait=0&amp;color=ffffff" width="800" height="534" frameborder="0" webkitAllowFullScreen mozallowfullscreen allowFullScreen></iframe>
<p>The animation itself is somewhat lacking — the timing is uninspiring, the f-stop jumps around too much, etc., and I don’t think it properly conveys a sense of 3D space (of being in a tunnel) — but as a test of the Processing + Blender workflow, I’m quite pleased.</p><hr class="feed-extra" style="margin-top: 48pt;" /><p class="feed-extra feed-mail"><a href="mailto:ben.crowder@gmail.com?subject=Re%3A%20Sine circle test animation">Reply via email</a></p>]]></description>
    </item>
    <item>
      <title>Parallax animation test</title>
      <link>https://bencrowder.net/blog/2011/parallax-animation-test/</link>
      <guid isPermaLink="true">https://bencrowder.net/blog/2011/parallax-animation-test/</guid>
      <pubDate>Tue, 05 Apr 2011 12:00:00 GMT</pubDate>
      <dc:creator><![CDATA[Ben Crowder]]></dc:creator>
      <description><![CDATA[<p>An animation test I painted in Photoshop and threw together in Blender, mainly just to play around with parallax layers (and to get back into doing animation again):</p>
<iframe src="//player.vimeo.com/video/21979170?portrait=0&amp;color=ffffff" width="524" height="295" frameborder="0"></iframe><hr class="feed-extra" style="margin-top: 48pt;" /><p class="feed-extra feed-mail"><a href="mailto:ben.crowder@gmail.com?subject=Re%3A%20Parallax animation test">Reply via email</a></p>]]></description>
    </item>
    <item>
      <title>L-system animation tests</title>
      <link>https://bencrowder.net/blog/2010/l-system-animation-tests/</link>
      <guid isPermaLink="true">https://bencrowder.net/blog/2010/l-system-animation-tests/</guid>
      <pubDate>Tue, 14 Dec 2010 12:00:00 GMT</pubDate>
      <dc:creator><![CDATA[Ben Crowder]]></dc:creator>
      <description><![CDATA[<p>I’ve been playing around some more with the <a href="https://bencrowder.net/cg/2010/l-system-sketches/">L-system code</a> and modified it to animate the angle property and output each frame to a file. I also added some color and started using blending modes for the brushes. Once I clean up the code, I’ll post it to GitHub.</p>
<p>Anyway, here are some of the animation tests (I used Blender to put the frames together into an animation):</p>
<iframe src="//player.vimeo.com/video/17789894?byline=0&amp;portrait=0&amp;color=ffffff" width="800" height="450" frameborder="0" webkitAllowFullScreen mozallowfullscreen allowFullScreen></iframe>
<iframe src="//player.vimeo.com/video/17792662?byline=0&amp;portrait=0&amp;color=ffffff" width="800" height="450" frameborder="0" webkitAllowFullScreen mozallowfullscreen allowFullScreen></iframe>
<p>And the first one I did, which is a little too long and a little too fast:</p>
<iframe src="//player.vimeo.com/video/17789817?byline=0&amp;portrait=0&amp;color=ffffff" width="800" height="400" frameborder="0" webkitAllowFullScreen mozallowfullscreen allowFullScreen></iframe><hr class="feed-extra" style="margin-top: 48pt;" /><p class="feed-extra feed-mail"><a href="mailto:ben.crowder@gmail.com?subject=Re%3A%20L-system animation tests">Reply via email</a></p>]]></description>
    </item>
    <item>
      <title>Cube lattice animation test</title>
      <link>https://bencrowder.net/blog/2010/cube-lattice-animation-test/</link>
      <guid isPermaLink="true">https://bencrowder.net/blog/2010/cube-lattice-animation-test/</guid>
      <pubDate>Thu, 25 Nov 2010 12:00:00 GMT</pubDate>
      <dc:creator><![CDATA[Ben Crowder]]></dc:creator>
      <description><![CDATA[<p>Playing around more with Blender, I used a lattice to <a href="http://vimeo.com/17193969">deform a cube</a>. (I’m teaching myself animation.)</p>
<p>The background is painted in Photoshop, then composited in via Blender’s node editor. As for the animation itself, I subdivided a cube, then added a lattice modifier and used shapekeys on the lattice. Seems to work pretty well.</p>
<iframe src="//player.vimeo.com/video/17193969?byline=0&amp;portrait=0&amp;color=ffffff" width="800" height="450" frameborder="0" webkitAllowFullScreen mozallowfullscreen allowFullScreen></iframe><hr class="feed-extra" style="margin-top: 48pt;" /><p class="feed-extra feed-mail"><a href="mailto:ben.crowder@gmail.com?subject=Re%3A%20Cube lattice animation test">Reply via email</a></p>]]></description>
    </item>
    
  </channel>
</rss>
