Monday, January 16, 2006

Art imitates life

Since I can no longer engineer animals in 'real life', I've been devoting some time to one of my hobbies, engineering life 'in silico'... in this case, 3D modelling of animals using the 3D modelling program Povray.

Despite their complexity, organisms are built up from a series of simple rules... and in theory, by applying these rules in a script, we can generate a diverse array of computer images that closely resemble living organisms without having to do a whole lot of fine-tuning and careful editing. This is most easily demonstrated in plants... new cells in plants are generated at the growing tips of roots and branches, and get information on what they should become (leaf, stem, branch point) based on where they are in a hormone gradient generated from the last stem branch point or leaf node. Thus, you can expect a new leaf every X number of inches from the last, and a new stem branching off every Y from the previous branch... and when a new branch point is generated, the new stem (or leaf rib, rootlet) will diverge at a fixed angle from the old one rather than a random angle. This allows a complex branching organism to form from a set of very simple rules governing node spacing and divergence angle - the sort of simple rules that can be easily translated into computer graphics. Indeed, there are quite a few 'plant generators' based on this principle available for 3d graphic imaging... ranging from freeware scripts for Povray to commercial packages such as XFrog. The only difference is the amount of 'polish'... texturing, extra details, etc. which add realism to the image.

Modelling animals is a bit more challenging... unlike plants, animal patterns involve more (and more complex) rules due to their very different method of development and specialized appendages. Yet in principle, with a bit of extra coding it should be possible to create a series of scripts for rapidly generating realistic animals in the same way that plants can be easily generated. In practice, the main limitation isn't the animals structure, but rather the limits of povray itself. Objects in povray are assembled from primitives (balls, tubes, cones, blobs, etc) that don't lend themselves easily to realistic animal structures... at least, not in a way that can be easily put together from scripts (animals in povray generally require quite a bit of tinkering to create a truly organic looking creature, rather than something that appears to be cones and balls stuck together).

My interest is in scripts to model invertebrates... not simply to generate a realistic looking invertebrate, but to quickly generate diverse invertebrates by plugging in a few simple parameters and letting the program use simple rules to do the rest. I've chosen invertebrates for two reasons. Many phyla are clearly externally modular, and much better suited for this approach than vertebrates (which are also modular in places, but internally where it doesn't do me any good). Secondly, everyone is VERY familiar with what a vertebrate should or should not look like, and will quickly note a flaw in leg position, body proportions, etc. Many invertebrates (true worms, insects, etc.) are both extremely diverse in nature and fairly unfamiliar to us.... this allows a greater degree of 'artistic license' in the final product.

I'll talk a bit more about the details in later posts, but just to throw up some examples of Cnidarians I've been working on:

An early test concentrating on ways to generate realistic tentacles.

A much more realistic jellyfish, giving an idea of what I am going for in the final product (the small image doesn't do it justice... click on the image to get the full size picture, in better resolution).

More later.