Interesting areas of background reading:
Mentions L-Systems as being good for "pattern amplification". Tis an interesting phrase, much like texture synthesis. But it turns out the referenced paper is talking about properties inherent to the grammars themselves:
"The complexity is gained with little human effort by the exploitation of the database amplification property of formal languages, generalized from strings to graphs."But the idea of grammar-synthesis - creation of a grammar from a bunch of examples may be a fantastic way to avoid teaching artists how to use complex grammars*.
It's not explicitly said, but I think the highways are grown first, then the city-streets fill in the details. So the overview looks like*:
This is an example of choosing the correct tools for the job. The streets are best defined by a network controlled by a growth L-system, while the buildings are most easily defined by a shape grammar that divides space. The different techniques have different properties (ease of implementing self sensitivity, ease of creating Level of Detail hierarchies, ability to produce symmetry). While it is tempting when looking at the above figure to suggest that the entire system could be reproduced as a singe grammar & L-system, breaking the process up allows the best tool to be used for the job.
Breaking it up into these chunks does, however, loose self-sensitivity between the different systems. For example, while the roads are self sensitive to each other, they're not sensitive to the buildings, meaning that overhanging buildings cannot encroach on the street. This forces limits on what can be created (no overhanging buildings) at the price of usability (compartmentalized systems for each stage).
An interesting question is what the primitives at each stage of the L-System are, with the goal of finding a common set that can form the basis for a framework. The above graphic shows that the main primitive is the polygon ("building faces" should also read "polygon").
It looks like for the pictures in the paper the building L-system/shape grammar wasn't used, instead they extruded a shape based on the floor plan. The generation of buildings using shape grammars features in the 2006 paper (and a nice job they make of it too).
Procedural Modeling of Cities, talks about self-sensitive L-Systems at the Street-plan level, by growing a mesh of roads. The roads check for other roads and merge into them if close enough. A similar approach wasn't taken to buildings tho, they where left as independent objects. This is the best and worst thing about shape grammars - they divide space early. This stops any possible interactions, but also simplifies the problem nicely.
A reoccurring theme in the study of procedural design is the need to create form that adapts to it's local environment. For the problem of road generation, this paper breaks the problem down into global goals (i.e. population density) and local constraints (i.e. location of other roads, the self sensitivity discussed above). After the L-system states it's desired outcome, parameters of that outcome are edited wrt these constrains. This implementation of the road generator feels a little messy (middle-endian) because it is different to the order of scale. The scale order would be global-goals (population) then L-system output, and local constraints (self-sensitivity). But evaluating the geometrically concrete L-system first is a necessary step to be able to fold in the values from the global-goals, and then nudge the output for the local constraints.
The street L systems demonstrates how we can use one of different types of growth to simulate another type of growth. Growing a street network from the nodes outward to fill in the remaining gaps isn't the natural pattern, but is an effective iterative algorithm. From a historical context roads really grow in a different way - starting from the centre of a city and spreading outwards, connecting, being bombed in the wars, areas redeveloped, remade to current themes. There are many themes when you start studying growth...enough for their own blog post.
Frankly textures are cheating ;) Although using boolean operation on square pulses against a façade is a solid idea, we should really be creating the geometry and baking it down to a texture. Something is niggling at the back of my mind, thinking that someone is pushing an agenda. He is creating a system for real time graphics, with the interest def from the SimCity approach.
"the main design goal for the system is easy extensibility. We want to be able to add new subsystems, such as different transportation networks (underground, train) and alternative land uses."During my research it has been startling how hard it is to get away from comparisons with game technology, games are the most natural application (esp since they are set to outsell music and video in the uk).
It looks like this commercialization of this work is doing well for the authors, each copy going for $7000 dollars. Compared to the puny $5000 for Maya it's showing the problems that stopped me thinking about this as commercial work. For this to be successful you would have to spend huge amounts of time chasing each individual customer in each individual niche for the production graphics market, as well as horribly splinter your dev and marketing teams to sell to very fractured market:
- Videogames (realtime and otherwise)
- Transport modellers
Winner of the "not-so-insightful sentence" award: "Roads are the transportation medium for the urban population distributed over the area."
* For comparision, a similar graph of Sity (one of my old projects):