We're doing quite a lot of these talks at the moment – keep an eye on our Events page if you’re interested in hearing / meeting us. We often break our presentations into segments, with different directors (usually two) taking different parts. Mark often does a good summary of our company and usually goes on to tear into the publishers for offering little except funding and taking pretty much everything in return. Tom usually speaks about our business history and expense accounts and sports cars, and I usually talk about content – specially our avoidance of it. In the case of yesterdays talk at Imperial, I gave an explanation and a live demo of our latest City Generator technology, which seemed to go down pretty well.

This work is a direct continuation of the prototypes I showed in Part 3. Those prototypes have now been rewritten (properly) and lots of extra progress has been made. We now have a system that can generate a complete city from the satellite view down to individual buildings, and you can step in at any stage of development and add your own customisations, or you can just let everything generate itself randomly. You can create huge volumes of content extremely quickly, by layering generator on top of generator on top of generator. Each step of generation feeds into the next, producing incredible levels of complexity.

There are several steps to generating a city, and each step involves its own special generation routine which uses the results from the previous steps as inputs. Most of our work is based on existing research done by people unrelated to Introversion – we’ve been reading everything we can get our hands on relating to city generation. For those who are interested, Parish & Mueller wrote a fantastic paper for the 2001 SIGGRAPH conference titled “Procedural modelling of cities”, which is an excellent starting point. Our prototypes from Part 3 were essentially based on that paper.

I’ve made a video so you can see our generator in action. This video shows essentially what I did live in front of 150 students yesterday at Imperial (minus the hand shaking). I’m basically generating two square kilometres of city geometry in about two minutes.

Here’s an explanation of what you’re looking at:
Height map generation : Here I’m manually editing a height map and creating a river, but I could just generate the whole thing, using similar fractal based techniques we already used to make Darwinia’s landscapes.
Population density : I’m marking the areas of the map that will be most densely populated. These areas will have the most roads and highest buildings.
City Centre generation : Based on the population map, it’s just searching for the high points. This is used later in road generation.
Highway generation : Based on the height map, the population density and the city centres, the Highways are automatically generated. Highways will tend to form fairly rigid patterns near the city centres, and will try to go around tall hills where possible. Highways near rivers will form coast roads that track the river, and some will be promoted to bridges where the population density is high enough.
Street generation : Streets are short local roads that connect the area to the nearest highway. In the centre of cities they form fairly predictable grid patterns.
Block generation : The street map is searched to find every possible “block”. A block is an area of land surrounded on all sides by roads, and without any additional roads running through the block area. Blocks are the area you build on, so when each block is found the land under it is flattened slightly to make building a little easier.
Building generation : Based on the population density (and eventually the zone type – residential, commercial, financial etc) buildings are generated and placed within each block. Right now this step is too simple – in reality blocks should be divided up into smaller “allotments”, and each allotment should have its own building, but we haven’t gone that far yet.
And finally, Rendering : This is our first attempt to render the results in a moody style more fitting to the game. Lots more work to be done here, but we're happy with what we have so far.
