You may remember my project THE DINOSAUR GENERATOR from 2017’s issue of Seeds. It’s a big project, and has kept me busy for a couple of years, and will probably keep me busy for many more. I like where it’s going, and don’t want to rush it or make compromises, but sometimes you just need to get something finished.
With that in mind, I chose a project for 2017’s Proc Jam that was, in many ways, very similar, but also entirely different. The end goal is still to generate dinosaurs, but that’s all it does. You ask it to give you a tiny dinosaur (aka a tinySAUR), and it gives you a picture of a tiny dinosaur; you can’t direct anything about it (e.g. what colour should it be, how aggressive should it look), and you don’t know anything about the final result (e.g. where it lived, what it ate, how it moved). Expedience was the main motivation behind every decision, that is, what would allow me to produce pictures of tiny dinosaurs as quickly and easily as possible?
The generator is split up in to 8 sub generators, for different types of dinosaurs:
Ceratopsians
Pachycephalosaurs
Ankylosaurs
Stegosaurs
Iguanodons
Sauropods
Large Theropods
Small Theropods
Each one uses the same basic approach, with generation split into two phases: the first step produces a colour-coded geometry template, and the second colours it. For the geometry step, each sub generator has a photoshop file, with layers sorted into groups for each part of the anatomy (e.g. a group of tail options), which the generator then may pick zero or one of the layers in that group (e.g. a tail is compulsory, a horn isn’t). Some groups are also given a range of possible spatial offsets (e.g. some horns can be lower down and a position will be randomly selected). This structure is also leveraged to do different kinds of modifications, such as instead of selecting one from a number of body options, there may be a number of layers that can be added to modify the appearance of a the base body. There are also some conditional rules, such as if the top ceratops horn is too low or too big, it's not allowed to have a lower one. The photoshop files are colour coded, with separate colours for main bodies, horns, spines, eyes, feathers, and a number of colours specific only to the theropod generators, so that feathers can be removed, lengthened, and coloured with different patterns, allowing the generator to use the same files for both more retro scaley theropods, and theropods that are practically birds, like archaeopteryx.
The output of the geometry step is also colour-coded in the same way, although it may have decided to remove horns or spines, or decided that certain categories of feathers should actually be part of the body, amongst other things. The colourer then decides how to colour each template colour (e.g. what the body colour should be, if each different feather template colour should be the same, or totally different, or if there should be a gradation). The colourer uses many different colour palettes, with different chances of selecting from each (and some chance of having any colour combination). For example, one might be more likely to make the dinosaurs have nice earth tones, and another might make them look more like tropical birds.
Depending on the sub-generator, many other techniques are used to add variation, such as with the sauropod generator, where any sauropod has a 50% chance of having some sort of back frill; this is then further modified by deleting a random amount of frill from the back to the middle of the sauropod. There is also a chance of removing the head portion of the frill (as long as the resulting frill would still be reasonably large). These rules were specifically selected to best match the sauropod references I could find. In this way, I could have the option of any sauropod having a frill without having to duplicate every possible neck, body, and tail option, and instead adding the frill to every possible one, and deleting it programmatically if it's not required. Similar techniques are used for the texturing, where masks for under-shadow or stripes are applied to the whole template, then parts are deleted selectively. There are simply too many special case rules like these for each sub generator to list them all in detail, from things like the variety of iguanodon head texturing rules, to the ceraptops head patterns.
If you want to see the results for yourself, you can follow the twitter bot @thetinySAURS, or there’s a server that lets you generate them yourself: https://the-tinysaur-generator.herokuapp.com