Sourceforge page


  • 2003-10-27 : It seems that several people out there are interested in my Syndicate level viewer. I've scraped together all of my Syndicate-related code and packaged it in one tidy tarball; you can download it from the sourceforge file-release page. If you download it, make sure to read the README file. Also, the RNC decompressor can be found at this site. Enjoy.

    BTW - SIGGRAPH went over well, but I'm still unemployed.
  • 2003-07-09 : I've been working on CityBuilder a great deal recently. This is because of a very interesting (and very recent) development: CityBuilder will be shown at SIGGRAPH 2003! WooHoo! By "shown" I don't mean that it will be one of the projects shown in one of the main auditoriums; you need to be really good to get your stuff shown there (there's a selection process, etc). My video will instead be shown at RIT's booth, along with two of my classmates' projects. The CityBuilder video is nearly 7 minutes long, and features a 3-minute tour of a city created with CityBuilder, followed by a 4-minute "how does one create a city using CityBuilder" section.
  • 2003-07-09 (continued) : In preparation for creating the video, I've made many changes to the CityBuilder utilities and the related tools. The lot-division code was re-written; "named channels" were implemented; the ability to have streets of various widths was added; the ability to have streets with no width was added; various fixes were made. Additionally, the GraphThing, KludgeBuilder, and CityViewer programs were enhanced. I also wrote several new utilities to help with creating the video.
    I have uploaded the new versions of the utilities. Also, the KludgeBuilder and CityViewer programs have been publically released for the first time. The versions of the utilities that are currently on SourceForge are the same versions that I used to create the SIGGRAPH video. The documentation hasn't been updated to reflect the recent changes, and some of the documentation is missing entirely. The new docs, as well as two new utilities, will be uploaded eventually.
  • NOTE - Currently, the data files are not distributed with CityBuilder. (The data files include the building models, textures, etc.) As such, the user will have to create their own data files in order to create cities. There are several reasons for my not distributing the data files:
    • Size concerns - The data files are currently 75 MB total. I access the internet via dial-up. You do the math.
    • Philosophical concerns - Were I to distribute my data files, users would be tempted to simply copy my artwork and pass it off as their own (not that it's all that great, but...). I would like to encourage people to create their own artwork.
    In the future, I will likely put together a small set of data files. It would be a "sample" or "demonstration" city, to get people started. However, the "full" set of data files will not, for the moment, be released.


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.


Recent video games featuring large city-scapes, such as the GTA series, were produced by trained professionals, over the course of months/years. The cities they have produced are stunning in their size and complexity.

In contrast, the cities produced by CityBuilder can be completed in an afternoon. The system was written by a single undergraduate over the course of 3 months. As a consequence, one should not expect the same level of quality as that of the GTA cities.

Then what good is it, you ask?

One possible use would be rapid prototyping for game engine testing. It may or may not surprise you to know that game engines, such as that used by GTA3, are developed simultaneously as the content for the game is being developed. CityBuilder-generated cities can provide game programmers with a useful test-bed for testing the engine while it is under development, and the primary game content is unavailable. A "stand-in" of sorts.

Don't let this discourage you, though. You can, of course, produce much higher quality cities than the demo city that I've put together for this system. It all depends on how much time you're willing to put into it. And, since it's open-source, you can make improvements to any of the components of CityBuilder. Want curved sidewalk corners, just like GTA3's? Modify Streetbuilder.


My motivation for writing this system stems from my obsession with a computer game published by Bullfrog Software in the early 1990's. The game is Syndicate. The titles published by Bullfrog Software (now part of the Electronic Arts empire) were, for the most part, what are called "god sims," and Syndicate was no exception. As the player, one is given control over a squad of 4 agents, and the goal is to use these agents to accomplish various goals throughout the 20-odd cities, located around the world. These city levels were the central attraction of the game. They were absolutely huge levels for the time; keep in mind that this was 1992, and the average PC was a 386 with about 2 MB of RAM.

I liked the level artwork for Syndicate so much that I actually reverse-engineered the file formats (which took a considerable amount of time, as the image files were stored with the bits all mixed up and out-of-order). I even wrote a level viewer for Syndicate. However, times have changed. Isometric games, using 2D sprites, have gone the way of the dodo (The Sims being the exception).

The current trend is 3D. Indeed, the sequel to Syndicate, Syndicate Wars, used 3D graphics for the buildings, streets, and vehicles. For a while, I toyed with the idea of reverse-engineering the file format for the Syndicate Wars levels, but unlike the Syndicate files, there doesn't seem to be any discernable pattern or logic behind the structure of the files.

Since then, I've been toying around with the idea of creating my own city levels, rather than using others'. My other major software project, the kludge3d modeler was, in part, the result of some of my early efforts to create virtual urban terrain. I needed a 3d editor and, dissatisfied with most of the free linux modelers of the time, decided to hack together my own. Kludge3d is adequate for simple model creation, but it wasn't really designed for creating very large, complex models.

As a result, I decided that a better way to go would be to create the larger environments from smaller components, and use a scene-graph-style layout for storing the world. So I took the then-current version of kludge3d and tore out the guts. By "guts" I mean the texture-editing, vertex manipulation, and so forth. I then added the ability to load and place multiple, external geometry files in the scene, resulting in a utility not unlike a scene graph editor. Similar utilities exist... I remember a Java utility that did something similar, and I believe that at least one of the major 3d-editor vendors (the Lightwave people, possibly?) had such a product as well.

When I was given the opportunity to choose my topic for my quarter-long Computer Graphics II project, I decided to pursue the idea of eliminating much of the work required to create urban environments. CityBuilder is the result.

SourceForge Logo