smart stuff

CityBuilder
06 Oct 04 - http://www.approximity.com/cgi-bin/blogtariAgile/index.rb/Graphics/CityBuilder.rdoc
citybuilder.sourceforge.net/index.html

CityBuilder is an attempt to automate much of the work involved in creating very large virtual urban landscapes. The system takes a street map as input, and produces street geometry and a scene graph containing the building models as output. The user has control over the types of buildings placed in the city through the use of image maps. The potential applications for this system include video game content (think GTA*), visualization, etc.

It is well known to most of those in the field of computer graphics that mountainous terrain can be generated programmatically. A good deal of research has been done in this area, focused for the most part on the use of fractals to generate landscapes. While these techniques produce some impressive results, they are restricted in the kinds of terrain that they can generate. For example, these techniques are not appropriate for the creation of urban terrain.

This is unfortunate, as there are many benefits to being able to programmatically generate urban landscapes. Many recent video games, for example, feature very large urban environments. Finding little research on the topic of urban terrain generation, I decided to create my own utilities for that purpose.

Note - I have recently been made aware that a very similar project was published at SIGGRAPH 2001, entitled "Procedural Modeling of Cities". That project made use of L-systems to generate the street topographies (mine uses a user-created node graph) and (from the description) is considerably more complex. I haven’t seen their output. If you’re interested in this sort of thing, you might want to take a look at their work, too.

With the CityBuilder system, there are three stages in the creation of a city. The first stage is to create the street map, the building models, and some miscellaneous support files used by the second stage. The second stage is where CityBuilder takes control. Street geometry is created using the StreetBuilder component, building models are placed in the city by the BlockBuilder component, and miscellaneous items like traffic lights are placed in the city by the ClutterBuilder component. The third stage is to fine-tune the output using a scene-graph editor or by hand-editing the output files. The city is then ready to be viewed.