• Login
  • Register

Work for a Member organization and need a Member Portal account? Register here with your official email address.

Project

Computer Aided (Bird) Design

Jessica Stringham

Groups

bird.rs is a parametric system that can illustrate a species, including their body shape, feathers, and field marks. It can even be used to animate their pose. I usually use code to draw abstract things, so this was the most complicated real thing I tried to represent.

Aerodynamic Curves

To start with, I looked at a bunch of birds and came up with one way I could represent their shape. I wanted to find a simple shape that could represent the body shape. I drew an arc for its chest, a line for its back, and a smaller circle for its head. I tried it on differently-proportioned songbirds, like a tiny big-headed sparrow, and the large crow.

Copyright

See image credit for underlying images

Birds are covered in feathers. The feathers tend to make be shaped so the bird is very aerodynamic, which means few sharp edges facing the wind. There is a fun computer graphics parallel: Bézier curves, a popular curve used in computer graphics, were named after Pierre Bézier, who used the curves to design cars, which also need to be aerodynamic. I like to think that makes the curves particularly suited for bird forms. I used a few cubic Bézier curves, as well as tangents, to finish the body shape.

Next, I coded this into the a Rust program.  I added the beak, eyes and legs, and placeholders for the flight feathers to the wings and tail.  Together that seemed to catch the general shape of the bird.

Copyright

robin photograph: Alex Eberts, Macaulay Library: overlay: Jessica Stringham

I came across the Eames House Bird, a sculpture made famous by Charles and Ray Eames, which has some nice simple curves representing a bird. This was a good test to see if I could fit the parametric system to another representation of a bird.

Bird Topography

Birds have patches of feathers of different colors in different regions. Birding field guides use these to help tell two species apart. For tricky species, you may be looking for subtle difference in things like eye rings (the region of feathers around the eye) or wing bars (a line above the wing when it's tucked in)

Copyright

original source unknown

I added these by marking landmarks on the bird outline (like the nostril and top of the eye), drawing curves between them, and then offsetting the curves by mathematical expressions.

For example, I can color its chin feathers using something like this (messy) function I used to paint it. I get a coordinate system for a given tract, and then draw a line along a range at an offset. Then I can offset from that line along the left and right sides of a "blade". 

Since I'm working in Murrelet, any parameter can be time-based, so we can also make animations using their parameters.

Wings

Getting the wings to look right is a combination of the right shape and the right placement. Since feathers act a lot like 2D shapes already, placing them is just a matter of a transform and rotation depending on their location.

Conveniently, the feathers of completely different species follow a typical pattern that can be programmed into a parametric system. That said, figuring out wing layout involves a lot of variables, and I'm sure I haven't gotten it perfect! There are things like how the feathers attached to the skeleton (tertials are actually just the last 3 secondary feathers on songbirds. Secondary coverts connect to the skin between the back and the wrist, not on a bone like the secondaries), and how the angles of feathers change as the bird folds its wings (primaries fan out, secondaries don't).

I tried a few different ways to draw and interpolate the feathers, including one I wrote about in Feather Editor. In this version, I can define a list of feathers, which define their control points as a function of their index in the list of feathers. That gives me some smoothly interpolated shapes that look feather-like. 

I can also define different feather patterns by drawing blobs of colors and cropping to the feather outline. The squares below each feather show what blobs are being applied to the feather.

Bringing it all together, I have a system that can draw different bird shapes with their full flight feathers.

It's not quite perfect, but it's nice to have a little bird generating program (for one thing, it's mostly centered around songbirds). I learned a lot about parametric systems and geometries. The process of creating this system also made me a better at observing birds! I found myself internalizing the proportions of the beaks and tails of different bird species. When I saw a bird, I would check all their feathers were in place.