- 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:
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.
- 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.
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
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?
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
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