Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
3 Commercial uses 12
3.1 Procedural Inc’s CityEngine . . . . . . . . . . . . . . . . . . . . . 13
3.2 Gamr7’s Urban PAD . . . . . . . . . . . . . . . . . . . . . . . . . 14
3.3 Maxis’s Spore . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
3.4 IDV’s SpeedTree . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
3.5 Bentley’s GenerativeComponents . . . . . . . . . . . . . . . . . . 16
5 Straight Skeleton 42
5.1 Algorithm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
5.1.1 Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
5.1.2 Data Structure . . . . . . . . . . . . . . . . . . . . . . . . 43
5.1.3 Collisions Between Three Edges . . . . . . . . . . . . . . . 44
5.1.4 Ensuring Collisions Only Occur On Faces . . . . . . . . . 45
5.1.5 Many Edges Colliding . . . . . . . . . . . . . . . . . . . . 49
5.1.6 Horizontal Output Edges . . . . . . . . . . . . . . . . . . 50
5.1.7 Negative edge gradients . . . . . . . . . . . . . . . . . . . 53
5.1.8 Ambiguous Weighted Skeleton . . . . . . . . . . . . . . . 53
5.1.9 Reconstructing Faces . . . . . . . . . . . . . . . . . . . . . 55
5.2 Results . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
6 Conclusions 56
7 Future Directions 57
7.1 Spectrum of Proceduralizations . . . . . . . . . . . . . . . . . . . 57
7.2 Evaluation of Procedural Systems . . . . . . . . . . . . . . . . . . 58
7.3 Thesis Subject . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
7.4 The Future . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
2
1 What is Procedural Geometric Modelling?
Procedural geometric modelling is the engineering of algorithms that create ge-
ometry.
3
It is instructive to examine a few of the phenomena that give natural sys-
tems their intricate and compelling morphospace. Biologists are not yet able to
present a complete system for many of these complex systems, however what
they have discovered shows many insights into the properties of complex pro-
cedural systems. While they have been divided into different groups discussing
different properties of natural morphology, many of the examples belong to more
than one group.
Figure 1: a) The cycle of a glider pattern in the Game of Life. b) The ”Gosper
glider gun”, a formation that creates a stream of gliders every 30 iterations.
Given just these simple rules and a simple starting arrangement, large and
complex patterns can be produced. There are several patterns that, once they
happen to occur, are self perpetuation, such as the glider in figure 1,a, which
moves through space. Initial conditions have even been discovered that create
a continuous stream of these gliders, such as figure 1,b.
Indeed it was cellular automata like these that caused Doyne Farmer and
Christopher Langton to discuss “life at the edge of Chaos”[32], while investigat-
4
ing the properties of cellular automata. This is generally taken to mean that
computation, and with it interesting form, mostly occurs in situations undergo-
ing phase-transition. That is there are not so many events to make information
storage impossible, but enough interactions to perform computations at all.
My feelings about cellular automata are that, while they produced intricate
patterns, because they were abstract and not founded on physical rules they
weren’t true to biological systems. I also wished to see if it was possible to
engineer successful outcomes. I performed a short experiment using a computer
running a 2D physics simulator[58].
A number of cells were modelled as circles. They are assigned types, repre-
sented as colours, and each diffuses a particular morphogen. These morphogens
disperse over time. Each type of cell changes it’s acceleration beased on the the
other morphogen gradients. For example the green cells may attempt to move
in the direction of the blue morphogen, while avoiding the morphogen that they
themselves emit, as in figure 2.
By changing the response to the morphgen gradient, it was indeed possible
to create quite complex behaviour. For example the cells quickly created the
three-layered objects in figure 2, however the results were dramatically different
every time the simulation was run. In comparision with a pure geometric design,
(where we might have simply stated a center and three radii) it is a difficult
system to work with. However if we didn’t know the volume that the layered
object would be bounded by, the morphogen-gradient method may be preferable.
Indeed the process of evolution itself can be regarded as an emergent be-
haviour of simple proteins. Like the other emergent behaviours, their is no
predefined goal or destination to the morphological forms.
Generally emergent behaviours to have the following properties:
• Robust. Generally the shape and forms that are generated can be broken
up, but will often reform with similar characteristics.
• Variety of output. The unpredictable nature of emergent behaviours tends
to lead to a large variety of results.
• Difficult to Control. Almost by definition, emergent behaviours do some-
thing other than that they were designed for. This makes them difficult
for humans to engineer in a standard graphical workflow.
• Expensive. The phenomena examined here are parallel mechanisms. That
is a set events happen in parallel inside a “simulation”. Because of the
serial von Neumann bottleneck these scenarios are expensive to compute.
2.2 Growth
When two growing bodies compete for space, they subdivide that space. For
example cells within a membrane, such as occurs in an embryonic mammal,
grow and divide, whilst carving the space within the membrane into discrete
regions. Partitioning space in this way turns out to be a useful procedural tool,
figure 3.
In two dimensions, with bodies growing at a constant speed, the result
is very similar to a computational geometry algorithm known as the Voronoi
tessellation[60], figure 4. The tessellation has some useful properties - it will
5
Figure 2: Simulated cells (red, green & blue) following morphogen gradients
(green type morphogen shown in white). Panels 1-4 shown as the simulation
continues.
colonise all the space, that is growth continues until every region belongs to one
cell or another, and it will terminate with as many partitions as specified when
starting.
The Voronoi algorithm classifies all space as being nearest one or another of
the cell centers. Viewed from the perspective of growth, each area is colonised
first by the nearest cell.
There are several algorithms to calculate the Voronoi diagram[60], the edge-
cutting technique was used to create the city street layouts for one of the au-
thor’s earlier projects (figure 5), while Fortune’s algorithm is faster in lower
dimensions[21].
Additionally we may wish to have our objects in 2D grow at different rates,
or to partition space in three or more dimensions. This leads to the weighted
Voronoi diagram[10], as in figure6, and higher dimensional Voronoi diagrams[61]
as in figure 7, respectively.
Using this class of space-subdivision algorithms provides some of the geo-
metric robustness that biological systems have, but remain easily controlled. It
is also requires less computing power, and is entirely deterministic. The straight
skeleton[3] can also be used as a space subdivision technique, I work on the
algorithm in great detail in later chapers.
6
Figure 3: Belousov-Zhabotinsky reaction forming a Voronoi-like pattern because
the boundaries occur where the chemical’s phases collide [2].
7
Figure 5: An earlier project that takes sets of points, and uses the Voronoi
tesselation to create city-street-like maps, such as those on the right. To add
realism, randomly selected “plots” are merged with their neighbours.
Figure 6: An additively weighted Voronoi diagram. The points are the cell
centers [28].
8
Figure 7: Three dimension Voronoi tessellation. Cell centers not show [52].
“in this way the final specification of how a limb cell should behave is built up
combinatorially; first it is supplied with information as whether it is to be a leg
or wing then signals within the growing limb bud specify more fine-grained
components of positional value, reflecting the precise position within the
limb.[4]”
So a programmer might say that values have been curried into the code
for each part of the limb. You can see this in an experiment - if the tip of a
embryonic chicken’s foot is transplanted onto the end of the wing, the result in
an adult is a wing with a toe on the end; that is the tissue has already been
curried (fated) as part of a leg.
As this chicken example shows these fields are robust when dealing with
geometrically changing features (as disrupted the system can re-organise itself
9
Figure 8: Cell Induction. i) two adjacent regions of cells, ii) new cell type
induced by adjacency, iii) additional strata of cells via induction
10
Figure 9: A cell with several different morphogenic fields. [4], plate 21-57.
start off emitting the same concentration of signal chemical. Cells near those
with a larger signal stop signalling, the result is an interspersed pattern. In this
example each of the selected cells then becomes a mother cell to a clutch of
11
Figure 11: The different repeating genes (white rectangles) can be combined
using different boolean operators to create a wide range of boolean patterns
(bottom) [4].
Figure 12: Lateral inhibition is used in the locating of hair follicles. i) The signal
strength starts out the same, ii) random noise ensures that some cells emit a
stronger signal that others. iii) Lateral inhibition causes cells near a large signal
to stop signalling, leaving an interspersed pattern that designates the growth
locations for the follicles. [4]
3 Commercial uses
Much of the leading work on procedural modelling happens in the commercial
world, and many of the results are never published. I am most of aware of work
in the video gaming communities.
12
Over the last two decades video games have adapted with Moore’s law to
become increasingly complex. One of the consequences of this is that our games
are more detailed. For example the complexity of each frame has risen from
the tens of polygons in the 1980’s to the tens of millions today [1]. Additional
techniques such as displacement and bump mapping are adding additional detail
beyond polygon meshes.
As figure 13 illustrates, the increasing requirement for detail is visible in the
structure of video game development companies. The majority of the man-years
required to make a modern video game are spent by artists creating models of
the world.
Unfortunately this bottleneck of creating geometry means that it costs more
than ever to create video games. Development costs for the like of Ubisoft’s Far
Cry 2 (2008) are expected in be in the tens of millions of pounds.
Discussions with staff from Frontier Software describe some of the tools used
to accelerate the generation of large urban environments. Because much of this
work remains unpublished, it is worth detailing a few companies that develop
procedural technologies.
13
The market cost is $4000, and they seem to be pitching to a wide range of
companies, everything from video games, architecture, archaeology, simulation,
film & TV.
A typical work flow involves selecting a terrain map, and a population map.
From these the application can create a road network from one of several designs.
After this subdivision into lots and buildings occurs. To construct buildings,
shape grammars are used and driven by a domain specific Python-like scripting
language. This final step means that using the package takes considerable train-
ing, but allows complex features such as recursion and responding to changes in
terrain. A complex example is shown in figure 14.
14
Figure 15: A promotional image Gamr7
threshold. That is, it is difficult to build a creature that doesn’t look like a
creature.
A small set of operations allows the effective creation of the torso and limbs
of a creature. The skeleton of the creature, and the width of the muscles around
the skeleton can be specified by the user. An unknown system then creates a
fitting skin around the skeleton and calculates where the skin should crease as
the creature moves. Finally the user can position pre-made meshes such as eyes
and horns, each of which has a parametrised range of variations.
This very usable domain specific geometry tool borders on a procedural
system. Considering that the game has been designed for young children, it is
quite believable that a simple artificial intellegence could create a large variety
of creatures of good quality.
A procedural animation system is then able to take the data about which
limbs are legs and which are arms to animate the creature. This is impressive
as there may be 0 or more limbs (figure 16).
Spore costs $40.
15
Figure 16: A user-generated character from EA’s Spore. (“An AVATAR Dire-
horse by CopperLou, from http://bit.ly/7AYJkZ”)
Figure 17: An screen capture of SpeedTree’s trees in the video game Fallout 3,
by Bethesda
16
Figure 18: An example of a staircase from GenerativeComponents. Source:
http://www.aecbytes.com/review/2009/BentleyArchV8i.html
4.1 Flora
The field of procedural botany has a larger, more structured corpus than urban
procedural modelling. The prevalent technology has been the L-system for the
creation of structured branches and leaves. This has been used to great effect
in commercial projects. For example IDV’s Speedtree allows for the procedural
creation of a variety of foliage very quickly (figure 17), and provides an extensive
library of plant models to be customised.
In this chapter I will first review Lindermayer’s work with L-Systems, fol-
lowed by a broader overview of the state of procedural botany.
initial:X
and apply our production rules. For example every instance of an X may be
17
replaced by the string (X → XY), and similarly (Y → -X+Y). This happens to
every symbol, once per iteration.
iteration 1: XY
iteration 2: XY-X+Y
iteration 3: XY-X+Y-XY+-X+Y
a h b i c → d
Together with the conventions that the number of iterations is n, the angle
that the turtle turns on a + or - symbol is δ, and Fd moves the turtle forward
d units, allows us to evaluate the grammar given in figure 19 to figure 20. The
L-system interpreter was written in Java, and the image rendered to a Scalable
Vector Graphics image.
These basic L-Systems are given various extensions to overcome certain lim-
itations. TABOP gives the following modifications:
18
n=40, δ=22.5◦
#ignore:+-F
starting string: F1F1F1
0 h 0 i 0 → 1
0 h 0 i 1 → 1[-F1F1]
0 h 1 i 0 → 1
0 h 1 i 1 → 1
1 h 0 i 0 → 0
1 h 0 i 1 → 1F1
1 h 1 i 0 → 1
? h + i ? → -
? h - i ? → +
Figure 19: example 1.31,b from TABOP, with some small modifications.
19
• Parametric L-systems. Here each symbol is given a set of parameters, and
a replacement can only take place if a logical statement associated with
the parameters is true.
Figure 21: A Map-L-system from [49]. Using the two production rules (bottom,
yellow), the initial rectangle (top left) can be subdivided into a tiling.
“The most prominent of these models has been the L-system. In an effort to
make these models produce more realistic results, some have encoded the
environmental influences, such as geotropism (sagging branches), directly into
the L-system. While this allows the genetic model to include more detailed
information about its reaction to external forces, it makes the model much
more complex and difficult to decypher.[25]”
20
only one hierarchy of components. For example a grid of windows on a facade
is either defined in terms row-major or column-major. In this situation there is
no requirement to specify a hierarchy, but the L-system enforces one.
As Chomsky points out[16], a grammar should reveal some insight into the
structure being examined. By the time several of the above extensions have been
instigated, the language becomes a mess of concepts and corrections (figure 22),
showing little more insight than if if the same structures where specified in any
other programming language.
21
Figure 23: a) opposite, b) alternate and c) Fibonacci spiral patterns of
Phyllotaxis[9]
This model only manages to represent one mode of Phyllotaxis, and although
there are similar models for the other modes, we cannot gradually change the
parameters to switch the mode of the model, figure 24, without creating an
unobserved pattern.
However, there are biological models [53], that when run as a simulation
correctly produce all known modes of Phyllotaxis by varying one parameter,
figure 25. However these are more expensive to compute than the simple for-
mula.
22
Figure 24: A range of different spiral generations with different values for alpha.
Only one of these uses the “correct” angle found in nature - it is the spiral with
the best coverage (second from top, right). Looking at the diagram from a
distance helps this pattern to become obvious. This image was generated from
java code, via an SVG renderer.
Figure 25: The suspected patterns of auxin transport that lead to the phenom-
ena of Phyllotaxis [53].
23
Figure 26: An example of a ’dappled’ pattern as resulting from a morphogen
system.[57]
ratio, a geometric progression. Knots are added to allow the spiral form to ro-
tate and as branches to add additional tendrils. There is an adjustment factor
to move child branches away from the parents. There isn’t a formal grammar
behind this system, rather a successive application of rules. It would be easy
to create these designs using a stochastic, 3D L-System, but this option is not
evaluated.
The ever prolific Prusinkiewicz provides the backbone to the field of algo-
rithmic research. In [50], a modification to a context sensitive, probabilistic
L-system is presented that creates vegetation of a required shape, as for top-
iary. By backtracking whenever a boundary is reached, figure 28, a realistic
branching structure is created in the interior, and sufficient foliage is shown on
the exterior.
The original premise behind L-systems was that they simulated the biological
process of induction, and growth. However, the backtracking algorithm here
grows plants in a artificial sequence, very different to natural growth.
24
Figure 28: Top: An implicit surface in the shape of a dinosaur, and the corre-
sponding topiary plant. Bottom Left: 2D results pruning to an oval. Bottom
right: The process of exploring space, and returning the active-pointer to the
previous branch[50].
25
Figure 29: L-systems can create complex environments when used on a large
scale[46].
Figure 30: A model [24] of a house was imported into a voxel grid. The plant
model was then biased to grow with respect to this model so that the branches
followed the roof shape and stayed clear of the doorway.
26
Figure 31: A model of a maple tree[13], note the close-fitting mesh and tex-
tures, not normally obtainable from L-System’s turtle-based discrete geometric
objects.
Figure 32: A fir tree with trauma evident on the lower branches[17].
Hart et al.[25] continue the theme of physically based simulations for the
modelling of trees. Different trees respond differently to gravity, there are two
main types -
27
• Gymnosperms (such as Pine or Spruce trees). These trees support their
weight of their branches by adding extra material below the branches, that
is “compression wood”.
These two types of growth produce different shaped branches and this model
simulates that by widening the area of the trunk above/below the branch for
Gymnosperms/Angiosperms respectively.
The algorithm used by Hart consists of
1. Compute mass
2. Compute center of mass
3. Compute photosynthesis
Figure 33: Space colonisation technique for tree generation. Left: final tree.
Right: A sapling and a set of attractors.
28
4.2 Urban
The body of work on urban procedural modelling is expansive and disjoint.
Unlike the modelling of flora, where the L-System is the key concept, no such
technique has appeared for Urban Modelling. Because urban modelling requires
approximating the designer’s thought processes, it is generally a much more
challenging field, and most of the corpus resorts to “what looks about right”:
“Voronoi points Pv are generated along an axis that approximately splits the
block into two halves. We have observed that for most queries vertices blocks
this axis corresponds closely to the central segments of the medial axis of the
block.[8]”
Parts of this chapter are from my MEng Research.
“The elements of this language are entities called patterns. Each pattern
describes a problem which occurs over and over again in our environment, and
then describes the core of the solution to that problem, in such a way that you
29
Figure 34: The complete Palladian villa floor plan [54].
Figure 35: Rules 20 and 21 from Stiny’s analysis of Palladian villas[54]. The
matching case on the left of each example is replaced with the geometry on the
right hand side. In this example the central block can either be lengthened or
shortened. The letter c is used as a marker to match later features.
can use this solution a million times over without ever doing it the same way
twice.[5]”
And procedes to list rules for the construction of a city from the large-scale
to the small:
1. independent regions
2. major city structures
30
11. common land (smaller than public land)
12. social institutions, family houses
It is worth noting that this list does not represent a hierarchy, but rather
groupings of patterns important to architects. Some of the patterns of tangi-
ble/implementable:
“Pattern 159: Light on two sides of every Room...Locate each room so that it
has outdoor space outside it on at least two sides, and then place windows in
these outdoor walls so that natural light falls into every room from more than
one direction.[5]”
31
While others are vague:
“Pattern 10. Magic of the City...Put the magic of the city within reach of
everyone in a metropolitan area. Do this by means of collective regional
policies which restrict the growth of downtown areas so strongly that no one
downtown can grow to serve more than 300,000 people. With this population
base, the downtown’s will be between two and nine miles apart.[5]”
However these patterns do not form a generative system, there is no algorithm,
just a hierarchy of goals. Texts like APL would be most useful when evaluating
a generative procedural system. We can ask an artist - “can you reliably create
Pattern 10 using our procedural system?”.
As Hiller[27] notes, architectural theory books tend towards representing an
idealised view of architecture.
Because of this bias, and the lack of generative detail, much of the corpus
of architectural theory books is hard to use for procedural modelling. However
some broad overviews can be useful.
One exception is the book How Buildings Learn[14], in this Bond describes
the way houses age, and how their appearance changes over time; Buildings that
have been used for a while end up looking very different to how they were built.
Figure 36: How Buildings Learn [14], front cover, left: houses New Orleans
1857, right same houses 1993.
In old cities each house in an initially identical row will have had many
different modifications made to it by different owners through the years. Some
houses will have had similar alterations to do with current trends (such as PVC
windows), others will have unique changes by generations of rich or poor owners
(such as telescopes and flag poles). Bond describes numerous examples of how
the floor plan of a house can over time grow.
Bond continues to give a description of the effect of wealth on house devel-
opment. Rich home owners are more likely to make changes to their properties.
Poorer home owners will not alter the appearance of their houses, and this may
preserve many historic features, such as has happened in the older parts of New
32
Orleans, figure 36. The end result is that the old buildings seen in European
cities are a complex mess of features with underlying patterns. There are more
likely to be correlations between buildings close to each other. Such structures
are built to similar plans and similar materials and modifications that are made
to one house are likely to be applied to other local houses. For examples when
conservatories became popular they were added to old and new houses alike.
Because of historic building protection laws uniform appearance is not corre-
lated with the age of the property. This huge variety provides a challenge for
city generation. Again, this book is not generative, and only gives an idea of
what the outcome should be, rather than saying how to achieve it.
Mitchell [39] starts to describe this problem of computability and makes one
of the first attempts at describing a machine learning centric approach to pro-
cedural modelling. He describes the huge potential search space for designing
buildings in real world architecture setting. Many parameters - from local build-
ing codes, to the quantity of light a window would produce must be encoded
and solved to produce a technically correct building. Trickier is the problem of
designing an algorithm with a sense of aesthetic beauty, which complicates this
search space again. For example we may desire that windows across a building
are different sizes in odd and even columns. Formulating a problem that is suf-
ficiently constrained, without over constraining the problem is a tough problem
itself, before solving this massive logic problem is considered. Mitchell suggests
a range of possibilities, from using a computer to design the buildings and hu-
mans to verify them to the opposite as possibilities for making use of computers
in architecture.
In [40] Mitchell describes the kind of first order logic predicates that may be
used to describe architecture. Throughout this lengthy volume many conflicting
approaches for describing architecture in logical form are given. None of these
are concise enough to implement and the NP-complete nature of inferring facts
from logic problems make this approach a little unrealistic. Mitchell does not
combine these different ways of viewing architecture into a single model.
33
Figure 37: Overview by the author of Procedural modelling of cities[47].
34
Figure 39: Left: A mass-model of a complex building, Note the way the win-
dows avoid the roof-lines. Right: the corresponding snap-lines used to position
components.
35
Figure 40: Two hierarchies give impressive detail, without exploding the com-
plexity of the grammars [20].
example model to fit the space in the synthesised road network. This is imple-
mented by subdividing the quad and using an affine texture transform. Because
of the large number of blocks in a typical input image, there is likely to be a
good match (so not so much stretch or distortion) in the synthesised image.
However it is a weakness of the system, that it is less suitable for use with small
quantities of input data. The results are convincing for large sets of input data,
figure 41, but largely statistically derived from certain properties of the existing
geometry.
Figure 41: The fragment on the left, and GIS data is applied and extrapolated
to produce the new geometry on the right.[8]
36
semantic patches that are laid on top of an L-system, the system can be re-
evaluated, and the artist-defined modifications are still present. Two concepts
are defined to help a user edit find the feature desired -
• exact instance locator - the decision path through the underlying gram-
mar is stored. By remembering the element number at each level in the
hierarchy (e.g. the 34th house, 3rd floor, 2nd window) it is fairly robust
to changes.
• semantic instance locator - this is the technique for selecting more abstract
constructions, e.g. columns of windows. Additional meta-data is added to
the grammar, so that split or repeat operations tag each production with
the given semantic property. Between this system, and an intuitive user
interface, editing existing grammars is a faster process, that involves less
programming.
Figure 42: Left: The red controls allow interactive window resizing[36]. Right:
The bricked-up window can be identified in an L-system generated facade.
37
files is approached by [15]. This paper details the task of rendering 3D scenes
in real time from a vector (rather than the normal raster) source. Because the
input data is in vector form, it is easy to define some objects (rivers, roads) as
smooth splines.
An octree stores each patch of land, with larger octs being used for further
away areas. The maps (texture and displacement) for the leaves of the octree
can be stored onto the GPU to increase speed. It’s also possible to edit vectors
on the fly - by only re-processing the elements that change with each edit it’s
possible to edit spline features in real time. Standard techniques like frustum
culling and LOD allow real time rendering of these massive terrains.
Figure 43: Screen captures from the real time display of GIS data [15].
The subject of Weber et al.’s paper [62] is the growth of cities over time. It is
based on simulation for the numerical aspects, rather than the pure estimation
& guesswork for the geometrical aspects. Similar to Müller’s earlier work [47]
the input to this system is a range of maps (height, water, forest...) and an
initial starting state (e.g. a single street). Subdivision occurs in the following
manner:
• Major Streets
• Quarters
• Minor Streets
• Block
• Lots
• Building Envelopes
In contrast to the earlier work, the streets in the simulation are grown for
each time step, and must be generated in chronological order, thus L-systems
cannot be used. This allows the user to influence the street pattern interactively.
Standard traffic and land-use simulating techniques from urban planners are
used to predict the growth of the city. The output of the model is compared
with the real world growth of Las-Vegas. Because the model is interactive,
subtle changes can be made at different points in time to keep the growth on
38
Figure 44: The growth of a city over time [62].
track. The final result is quite similar to current-day Vegas, with few changes,
given that so much theory is involved, figure 44
Ali et al. address the problem of rendering massive cities, once we’ve pro-
cedurally created them in [6]. Their approach is to use ray casting techniques
against a displacement mapped surface for each wall of each house. To cre-
ate a fast displacement-map intersection mechanism, the orthogonality of the
generated geometry is exploited on the GPU. Cubes can be matched to empty
volumes of space to allow fewer samples when casting each ray. By exploiting
the expected orthogonality, a lossless matrix-based algorithm is presented that
is carefully tailored for facades. The results of these techniques are shown to be
implementable on a GPU.
Gerth et al. present an example [23] of a domain specific tool for non-expert
users to create castles. GML is again used to describe the interactions of the
primitives. Users are able to draw the outlines of buildings and select the points
which walls should be built though. This presents a simple interface that can
create quite complicated castles. The domain specific information about castles
can be embedded in the system, gives good results, figure 45.
39
4.2.5 Reverse Procedural Techniques
Reverse engineering a model, or inverse proceduralization is the method of build-
ing a procedural model from a single example. This process gives many insights
as to how a general procedural modelling package could work.
For example, given the polygon mesh of a house, we may want to infer that
the windows are a repeated elements on a certain grid. This lets us compress
the geometry, correct for errors, and build procedural models.
To extract a building grammar from a set of photographs, [7] takes a set
of several photographs and a simple 3D model. The input mesh is manually
constructed, and aligned to the photos using a semi-automatic process. After
orthogonal subdivision the layout of each floor is represented by strings repre-
senting blocks. Analysis on theses strings with a few simple rules can produce
a useful grammar. Then several assumptions are made about the grammar of
a house. For example that there is a single ground floor, a single top floor, and
any floors between the two are repeated when the facade is re-sized. For sim-
ple examples, figure 46, reasonable results are achieved, however the grammar
analysis technique cannot work on more complicated designs.
40
Figure 47: Top Left: The input models. Right: The result of model synthe-
sis [38]
straints are satisfied to position each vertex in real time. The geometry is
analysed and a set of hard and soft constraints are entered into a matrix and
solved using least-squares. At interactive speeds, the user’s inputs are projected
using the found solution and applied - if the result is degenerate, the users edit
is rejected.
While this method cannot create new geometry, it provides a fast an in-
teractive solution for resizing rectilinear meshes, and infers a model using the
matrix-inverse technique.
Figure 48:
Li et al. examine reverse engineering feature trees from a given model [33].
This paper takes the approach that you have a 3D mesh and want to recreate
the constructive-solid-geometry primitives and operations used to create that
mesh. These operations are presented in a tree (similar to a parse tree) to
specify their inputs, outputs and ordering.
The algorithm identifies recoverable vertices, edges and faces that the origi-
nal mesh hints at. These might be external to the volume defined by the mesh,
or internal and are identified by intersecting existing features, such as edges or
faces.
One of the hardest parts of working with raw-geometry is determining where
symmetries lie. Because there is no construction intent, all symmetry informa-
tion is lost. Mitra et al. [41] recover this data by identifying many pairs of
symmetrical points. The algorithm identifies the prevalent symmetry trans-
forms by sampling many symmetric pairs of points, and clustering the lines of
symmetry to to reveal the strongest patterns. By quickly rejecting pairs biased
on the local features, the number of points to compare is reduced by an order
of magnitude.
Mean shift-clustering is used to merge nearby points. The Euclidean sym-
metry space used is 7 dimensional. Clustering is needed because noisy input
41
mesh is rarely perfectly symmetrical. Each clustered set of points indicates one
possible symmetry in the model.
Convincing results, such as the decimation of the castle mesh, figure 49 to
14% of it’s original size (transparent boxes are removed data) make this an
interesting technique.
Mitra later extends his work to find patterns expressed by two combined
transforms [48] by searching for lattices in a transform space. Some of the types
of pattern detected are shown in figure 50.
5 Straight Skeleton
The straight skeleton is a geometrical construction that I have become interested
in because of it’s applications to urban modelling, but also it’s ability to emulate
the expansion of an arbitrary polygon, in ways very similar to biological growth.
While exploring the possibilities for roof generation I came across a paper [3]
from Franz Aurenhammer explaining the issues generating a typical hatched
roof from an arbitrary floor plan. This problem, finding the straight skeleton,
is more complex than it initially appears. The straight skeleton is a mathemat-
ical structure that is defined by tracing the corners shrinking of a 2D polygon
(figure 51). The best solution found runs sub-quadratic time O(n17/11+e [18],
given n input vertices and an arbitrarily small constant e, which is traded off
for space. While Eppstein and Erickson describe this fast approach, the details
of the algorithm are best described by Felkel and Stepan [19], who provide a
sensible route for implementation.
Laycock and Day’s paper [44] investigates how to use the straight skeleton
to produce different types of roof edges, from Mansard to Gable. By adjusting
the result of the straight skeleton after it has run, they show that it is possi-
ble to produce a wide range of roof styles. My initial implementation of the
skeleton revealed several modifications that might make the skeleton a powerful
procedural primitive:
42
• A more interesting skeleton may be constructed if each edge is assigned
different slope. This could be used to create gabled ends of roofs without
Laycock and Days messy alteration after the skeleton algorithm has run.
For example the slope of a roof may be changed at any time to create say a
vertical wall, followed by an overhang, followed by a roof. This construct
is known as the weighted straight skeleton (WSS). [18]
• The skeleton can be truncated at any height during its construction, leav-
ing a bevelled object, this may be used as a wall if the edges slope is
near-vertical or for constructing a window or mitered door frame.
• It should be possible to construct skeletons from non-planar polygons. For
example the walls and roof of a house on a hillside.
5.1 Algorithm
In my Masters Thesis I was only able to create a crude straight skeleton imple-
mentation. What follows now is an explanation of a more careful algorithm I
have developed from Felkel’s description to include weights per edge.
It contributes a method for dealing with multiple co-sited split events in a
floating point environment, as well as a resolution strategy for horizontal roof
edges, this leads to a new degenerate case in which the weighted straight skeleton
is ambiguous.
The straight skeleton takes a simple polygon as input and outputs a graph
connecting the input vertices, figure 51. Strictly the skeleton is a two dimen-
sional construction, however here I regard it as a three dimensional “roof” -
given the floorplan of a house, the skeleton is the gutters and crest lines of a
roof when viewed from above.
5.1.1 Overview
The algorithm uses a sweep plane (figure 52) - this is always parallel to the
plane in which in the input polygon is embedded. It starts at height zero
from the input polygon, and ascends towards the top of the roof. Intersections
between edge-planes, or sides of the roof, are considered in height order as the
sweep plane passes them. The edge-planes (sides of the roof) are defined by
the gradient associated with each edge of the input polygon. In the unweighted
case these are all assumed to be the same positive gradient, whose value has no
effect on the output.
There are intersections that occur between faces that aren’t valid, these
must be ignored as in figure 53. After all collisions have been accounted for, the
algorithm is complete and will have output the edges of the WSS.
• the adjacent (next and previous) input edges. I assume a counter clockwise
ordering of points.
• the adjacent corners.
43
Figure 51: An example of the 2D unweighted skeleton (thin black lines) of an
input polygon (thick black lines), and the calculated faces (shades of grey).
Via the normal computer graphics convention, holes are represented by back-
wards (clockwise) loops of corners. There is a separate list of all input edgesEach
edge has:
Additionally there are a set of current edges at the height of the sweep plane.
Each edge may be referenced by more than one pair of corners. This happens
in the case that two parallel roof edges exist.
As the algorithm executes there is one loop of corner pointers for every area
in which the roof volume that intersects the current sweep plane. For example
if a skeleton produces a roof with two peaks, there would be two loops of corner
points at some point during execution.
44
Figure 52: An overview of the straight skeleton algorithm processing an input
polygon.
Each edge-plane cannot collide with just any old other edge-plane. Epp-
stein [18], gives more ideas on a fast approach, but concentrating on correctness
we can start by noting that when two planes collide it forms an edge. We need
three planes to collide to form a point; Before three planes can collide, two of
these planes must already be adjacent. Using the above list of possible inter-
sections, we can see we should only be testing for collisions between pairs of
adjacent edges and one other edge.
Figure 56 gives an overview of how the data structure is updated for each
three plane case. These three types of collisions are sufficient to calculate the
straight skeleton of almost all random input polygons. The other cases are
degenerate and are discussed in the next section. It is unfortunate that most
common roof shapes are classified as degenerate as many input edges are parallel
and include symmetrical shapes that cause more than three planes to meet at
a point.
45
Figure 53: The intersections between edge-planes bcd and abd should be ignored.
Figure 54: The pointer structure between live corners and edges.
• Store a list of events between polygons - After an event, find new events
and remove old events involving each edge or bisector that’s changed.
• Store a list of events between planes (planes don’t have bounds) and before
evaluating an event, ensure it occurs within all three faces. This is the
simpler method I implemented.
One trick here (as Felkel[19] describes) is to realize that if two adjacent
46
Figure 55: In 1)ab two adjacent edges meet another edge in its centre, 2) shows
three consecutive edges colliding in 3)ab we see a variation where three consec-
utive edges that form a loop collide.
Figure 56: An overview of the data structure manipulation that occurs at each
type of event. See 60 for detailed explanation of the general case.
edges are involved, these two edges overlap and no collision test is needed. These
adjacent edges form Felkel’s[19] bisectors. As Eppstein[18] explains, reduces this
47
Figure 57: So far the collisions have been presented as infinite planes, however
we are really colliding a set of three sided polygons or faces. For example the
back edge (bold, 2) in the above figure changes it’s topology (red, 2) after some
of the events. After event b the face belongs to two volumes, and hence gives two
polygons to collide against. This means that for all of the three faces involved
in a collision we must ensure that a collision occurs within it’s bounds.
to a ray-casting problem against triangles that has very fast known solutions.
Each of the three types of collisions involves one or more pairs of adjacent
edge-planes colliding. The faces that are intersected are sometimes triangles,
but sometimes they are unbounded triangles, akin to quads with infinite areas.
This occurs when the bisectors do not collide.
Floating point calculations sometimes miss collisions that we expect, topo-
logically, to happen. However we can increase the chances of getting a topologi-
cally sound result if we increase the margin (epsilon-error range) until we catch
all collisions. There are two places where we need to be careful - in checking
that a collision really happens on an edge’s face and in finding events that hap-
pen at the same height or in the same place. I use a cylinder shaped volume
to accumulate events that occur at a given height range and within a certain
distance to a centre point58, similar to work in [31].
Figure 58: Given a set of detected collision points (circles), they should be
combined using an robust-epsilon technique for height, δ2 and radius, δ3
48
5.1.5 Many Edges Colliding
In a degenerate case, more than three planes can meet at one point. This
happens in the center of regular polygons, as well as examples such as figure 59,
where five or eight faces meet single points. Here I present a resolution algorithm
that processes pairs of adjacent corners, for any number of edges meeting at a
single point.
Figure 59: Many building’s footprints lead to more than three edge-planes col-
liding at one point. In this example there are two points where 5 and 8 edges
collide at once.
49
In figure 60, a we see the input structure - a chain of edges abc and their
associated corners (dark blue circles). We now process each pair of edges that
are adjacent (orange lines) as in b and c:
• We remove each of these corners from the master-list. (note that inter-
corner pointers, green arrows, don’t need to be adjusted).
Then we process the non-adjacent edge pairs as in figure 60, d, adding in a new
input corner and finally adjusting the inter-corner pointers, (cutting out the
internal corners). However non-adjacent edge pairs take a little more thought
as multiple chains can collide at one point.
We then procede to process between the chains, figure 61, that is inter-chain
pointer updates. We still process corners by pairs, but this time we process the
three pairs that are non-adjacent. We order these around the collision point
(in the unweighted case this can be done by the angle any corner on the chain
makes with the collision point, but see later comments on the weighted case),
and process the pair made by first corner in the first chain, with the last corner
of the next.
Then we process the non-adjacent edge pairs as in figure 61 d, adding in a
new input corner and finally adjusting the inter-corner pointers, (cutting out the
internal corners). However non-adjacent edge pairs take a little more thought
as multiple chains can collide at one point.
For each of these pairs we add one additional corner that is adjacent to each
edge. This corner is at the location of the collision, and cuts out the inter-chain
corners from any edge loops.
50
Figure 60: Intra chain pointer manipulations.
The resolution strategy here depends on the chain type. If the chain has
more than one corner in it, it represents the intersection of two faces, so there
will always be a corner lying on this intersection whose adjacencies will lead to
the correct corner. If the chain is of length 1, we must resort to more geometric
calculations to project all referenced corners onto the input edge, and choose
the preceding corner.
As figure 63 shows, this is quite and involved procedure. Faces a,b,c,d and
e collide at point x. We find their positions in the given volumes by locating
51
Figure 62: In the above figure, there is a collision at x, then at the same height,
faces a,b,c &d collide at y. Face a should be rejected because we’re outside the
bisector. However as the edge forms a horizontal skeleton line, the bisector is
poorly defined (green boundaries), so we would have to accept that all four faces
collide, resulting in deformed output.
52
Figure 63:
53
Figure 64: The effect of reversing the polarity on a collision.
• when intermediate edges are removed to being two parallel edges together
When two roof-planes of parallel edges collide, they form a horizontal bi-
sector. That is, the line of collision is parallel to the input polygon. If the
two edges have different directions then this is a roof ridge and the algorithm
proceeds as normal, assured that at the opposite end of the ridge the two roof
ridges will collide again. However if the directions are the same then we are
only able to obtain a degenerate bisector, figure 65. The ambiguity arises in not
knowing which surface gives way to which, because we cannot determine using
the horizontal bisector.
This is a mathematical ambiguity arising from a singularity in the weighted
case, and unrelated to issues of robustness.
54
Figure 66: Work done outside my PhD. Two identical bay windows that lead
to the same ambiguous case. The one on the left is resolved using the volume
minimising technique, the one on the right is volume maximising.
5.2 Results
The results here are presented for completeness. They were generated from
work that did not take place under my PhD time quota.
This section has been censored by the Author. In lieu he gives these pretty
pictures (figure 68, 69).
55
Figure 67: Two cases of face reconstruction by following the map of edges, to
corners (orange dots) referenced by the input edge (orange line). The output
polygon (yellow) is another simple, monotonic, polygon.
6 Conclusions
In general Procedural Modelling is still a loosely defined field, it shows much
promise, but no single system of operation has emerged.
Procedural botany is a strong subject with solid commercial uses, meanwhile
procedural urban studies are just starting to make progress, and very little work
has been done towards procedural fauna.
Biologically inspired techniques are robust, but hard to control. They are
also expensive to evaluate. They’ve shown us that attempting to engineering
algorithms that imitate phenomena, such as Phyllotaxis, isn’t as good as un-
derstanding the phenomena directly. However when dealing with man-made
geometry, it is too complicated to model the thought processes and decisions
that are made, so sometimes there are no options, except to pick an algorithm
that gives a close result.
There are some discrete geometric algorithms, such as the straight skele-
ton and Voronoi tessellation that may make it affordable to create biologically
inspired models.
Architectural theory is at best analytical, rather than generative. Little
useful work in generative architectural studies has been performed. The best
generative work is still coming out of the computer science community. However
architectural theory may be useful for evaluating any results. It is easy to check
that a solution satisfies the constraints, even if we cannot generate the solution
from the constraints. (Like all good NP problems).
Generally urban modelling is a multi-scale problem. There are many varying
patterns, with many subtleties, at a wide range of scales. We are just beginning
to find tools to help us build those patters, and we are still a little way away
from giving those tools to artists to use.
56
Figure 68: A range of building styles that can be generated with this technique.
None of these models took longer that a few minutes to create, and all used less
than a second of CPU time on a 2009 machine.
7 Future Directions
Procedural geometry is a subject that is still being defined. Here I outline
some of the many unanswered questions that I have stumbled across, before
summarising some likely final theses for my PhD.
57
Figure 69: A haunted house, created in 15 minutes.
• Fastest
• Cheapest
• Most believable
• Most diverse
• Ease of use
Whilst the objective criteria can be measured easily enough, the subjective
criteria pose more of a problem. For example, testing the believability of a
procedural, fictional, castle is a subjective, yet critically important aspect of
development. We cannot ask for subjective response on the model, as it would be
58
meaningless to the man on the street. We cannot ask for a subjective response on
a single instance itself, as we must evaluate the procedural model. Attempting
to evaluate a representative sample of instances is quite an involved task.
59
Background Work weeks
Computational graphics algorithms 4
Cellular Automata and Growth 4
Methods of continuous and discrete growth 4
Uses of Growth in Architectural Theory 4
Other uses of growth algorithms 4
Evaluate tools available to current artists 4
Evaluate tools available to current architects and designers (CAD) 4
Methods for combining procedural operators 4
Total 32
60
References
[1] Develop insider. 69.
[2] Reaction oscillante de belousov-zhabotinsky.
[3] O. Aichholzer, F. Aurenhammer, D. Alberts, and B. Grtner. A novel type of
skeleton for polygons. Journal of Universal Computer Science, 1(12):752–
761, 1995.
[4] Bruce Alberts, Alexander Johnson, Peter Walker, Julian Lewis, Martin
Raff, and Keith Roberts. Molecular Biology of the Cell. Garland Publishing,
2008.
[5] Christopher Alexander, Sara Ishikawa, and Murray Silverstein. A Pattern
Language: Towns, Buildings. Oxford University Press, later printing edi-
tion, August 1977.
[6] Saif Ali, Jieping Ye, Anshuman Razdan, and Peter Wonka. Compressed
facade displacement maps. IEEE Transactions on Visualization and Com-
puter Graphics, 15:262–273, 2008.
[7] Daniel G. Aliaga, Paul A. Rosen, and Daniel R. Bekins. Style grammars
for interactive visualization of architecture. IEEE Transactions on Visual-
ization and Computer Graphics, 13(4):786–797, 2007.
[8] Daniel G. Aliaga, Carlos A. Vanegas, and Bedřich Beneš. Interactive
example-based urban layout synthesis. ACM Trans. Graph., 27(5):1–10,
2008.
[9] Fabricio Anastacio, Przemyslaw Prusinkiewicz, and Mario Costa Sousa.
Sketch-based interfaces and modeling (sbim): Sketch-based parameteriza-
tion of l-systems using illustration-inspired construction lines and depth
modulation. Comput. Graph., 33(4):440–451, 2009.
[10] Peter F. Ash1l and Ethan D. Bolker. Generalized dirichlet tessellations.
Geometriae Dedicata, 20:209–243, 1984.
[11] Shai Avidan and Ariel Shamir. Seam carving for content-aware image
resizing. ACM Trans. Graph., 26(3):10, 2007.
[12] Gill Barequet and Amir Vaxman. Straight skeletons of three-dimensional
polyhedra. In SCG ’09: Proceedings of the 25th annual symposium on
Computational geometry, pages 100–101, New York, NY, USA, 2009. ACM.
[13] Jules Bloomenthal. Modeling the mighty maple. SIGGRAPH Comput.
Graph., 19(3):305–311, 1985.
[14] Stewart Brand and Penguin U. S. A. Paper. How Buildings Learn: What
Happens After They’re Built. Penguin Books, October 1995.
[15] Eric Bruneton and Fabrice Neyret. Real-time rendering and editing of
vector-based terrains. In Eurographics, 2008.
[16] N. Chomsky. Three models for the description of language. Information
Theory, IRE Transactions on, 2(3):113–124, January 1956.
61
[17] Phillippe de Reffye, Claude Edelin, Jean Françon, Marc Jaeger, and Claude
Puech. Plant models faithful to botanical structure and development. In
SIGGRAPH ’88: Proceedings of the 15th annual conference on Computer
graphics and interactive techniques, pages 151–158, New York, NY, USA,
1988. ACM.
[18] David Eppstein and Jeff Erickson. Raising roofs, crashing cycles, and play-
ing pool: applications of a data structure for finding pairwise interactions.
In SCG ’98: Proceedings of the fourteenth annual symposium on Compu-
tational geometry, pages 58–67, New York, NY, USA, 1998. ACM.
[19] Petr Felkel and Stepn Obdrzlek. Straight skeleton implementation. In
Proceedings of Spring Conference on Computer Graphics, pages 210–218,
1998.
[20] Dieter Finkenzeller. Detailed building facades. IEEE Computer Graphics
and Applications, 28:58–66, 2008.
[21] S Fortune. A sweepline algorithm for voronoi diagrams. In SCG ’86:
Proceedings of the second annual symposium on Computational geometry,
pages 313–322, New York, NY, USA, 1986. ACM.
[22] M. Gardner. The fantastic combinations of John Conway’s new solitaire
game “life”. Scientific American, 223:120–123, October 1970.
[23] Björn Gerth, René Berndt, Sven Havemann, and Dieter W. Fellner. 3d
modeling for non-expert users with the castle construction kit v0.5. In
VAST 2005: 6th International Symposium on Virtual Reality, Archaeology
and Intelligent Cultural Heritage, pages 49–58, November 2005.
[24] N. Greene. Voxel space automata: modeling with stochastic growth pro-
cesses in voxel space. In SIGGRAPH ’89: Proceedings of the 16th annual
conference on Computer graphics and interactive techniques, pages 175–
184, New York, NY, USA, 1989. ACM.
[25] John C. Hart and Brent Baker. Structural simulation of tree growth and
response. In In: Proceedings International Conference on Shape Modeling
and Applications, pages 7–11. Springer-Verlag, 1996.
[26] Sven Havemann and Dieter Fellner. Generative parametric design of gothic
window tracery. Shape Modeling and Applications, International Confer-
ence on, 0:350–353, 2004.
[27] Bill Hillier and Christian Altmann. Space is the machine, 1996.
[28] M Karavelas and M Yvinec. 2d apollonius graphs (delaunay graphs of
disks).
[29] Yoichiro Kawaguchi. A morphological study of the form of nature. In
SIGGRAPH ’82: Proceedings of the 9th annual conference on Computer
graphics and interactive techniques, pages 223–232, New York, NY, USA,
1982. ACM.
[30] T. W. Knight. The generation of hepplewhite-style chair-back designs.
Environment and Planning B, 7(2):227–238, 1980.
62
[31] Rüdiger Köhling, Jens Reinel, Jan Vahrenhold, Klaus H. Hinrichs, and
Erwin-Josef Speckmann. Spatio-temporal patterns of neuronal activity:
Analysis of optical imaging data using geometric shape matching. Journal
of Neuroscience Methods, 114(1):17–23, 2002.
[32] Chris G. Langton. Computation at the edge of chaos: phase transitions
and emergent computation. Phys. D, 42(1-3):12–37, 1990.
[33] M. Li, F. C. Langbein, and R. R. Martin. Constructing regularity feature
trees for solid models. In Proc. Geometric Modeling and Processing; LNCS,
pages 267–286. Springer, 2006.
[34] Aristid Lindenmayer. Mathematical models for cellular interactions in de-
velopment ii. simple and branching filaments with two-sided inputs. Journal
of Theoretical Biology, 18(3):300–315, March 1968.
[35] Markus Lipp, Peter Wonka, and Michael Wimmer. Interactive visual edit-
ing of grammars for procedural architecture. ACM Transactions on Graph-
ics, 27(3):102:1–10, August 2008. Article No. 102.
[36] Markus Lipp, Peter Wonka, and Michael Wimmer. Interactive visual edit-
ing of grammars for procedural architecture. ACM Trans. Graph., 27(3):1–
10, 2008.
[37] Paul Merrell. Example-based model synthesis. In I3D ’07: Proceedings of
the 2007 symposium on Interactive 3D graphics and games, pages 105–112,
New York, NY, USA, 2007. ACM.
[38] Paul Merrell and Dinesh Manocha. Continuous model synthesis. ACM
Trans. Graph., 27(5):1–7, 2008.
[39] William J. Mitchell. The automated generation of architectural form. In
DAC ’71: Proceedings of the 8th Design Automation Workshop, pages 193–
207, New York, NY, USA, 1971. ACM.
[42] Pascal Müller, Peter Wonka, Simon Haegler, Andreas Ulmer, and Luc
Van Gool. Procedural modeling of buildings. ACM Trans. Graph.,
25(3):614–623, 2006.
[43] Radomı́r Měch and Przemyslaw Prusinkiewicz. Visual models of plants
interacting with their environment. In SIGGRAPH ’96: Proceedings of the
23rd annual conference on Computer graphics and interactive techniques,
pages 397–410, New York, NY, USA, 1996. ACM.
[44] Laycock University Of, R. G. Laycock, and A. M. Day. Automatically
generating roof models from building footprints, 2003.
63
[45] Department of Trade and Industry. From exuberant youth to sustainable
maturity. competitiveness analysis of the uk games software sector., 2002.
[46] Wojciech Palubicki, Kipp Horel, Steven Longay, Adam Runions, Brendan
Lane, Radomı́r Měch, and Przemyslaw Prusinkiewicz. Self-organizing tree
models for image synthesis. ACM Trans. Graph., 28(3):1–10, 2009.
[47] Yoav I. H. Parish and Pascal Müller. Procedural modeling of cities. In
SIGGRAPH ’01: Proceedings of the 28th annual conference on Computer
graphics and interactive techniques, pages 301–308, New York, NY, USA,
2001. ACM.
[48] Mark Pauly, Niloy J. Mitra, Johannes Wallner, Helmut Pottmann, and
Leonidas J. Guibas. Discovering structural regularity in 3d geometry. In
SIGGRAPH ’08: ACM SIGGRAPH 2008 papers, pages 1–11, New York,
NY, USA, 2008. ACM.
[49] P. Prusinkiewicz and A. Lindenmayer. The Algorithmic Beauty of Plants.
Springer Verlag, 1991.
[50] Przemyslaw Prusinkiewicz, Mark James, and Radomı́r Měch. Synthetic
topiary. In SIGGRAPH ’94: Proceedings of the 21st annual conference on
Computer graphics and interactive techniques, pages 351–358, New York,
NY, USA, 1994. ACM.
[51] Adam Runions, Brendan Lane, and Przemyslaw Prusinkiewicz. Modeling
trees with a space colonization algorithm. In Eurographics Workshop on
Natural Phenomena, 2007.
[56] K. Sugihara and M. Iri. Construction of the voronoi diagram for ’one
million’ generators in single precision arithmetic. Proc IEEE., 80:1471–
1484, 1992.
[57] A. M. Turing. The chemical basis of morphogenesis. Philosophical Trans-
actions of the Royal Society of London. Series B, Biological Sciences,
237(641):37–72, 1952.
[58] twak. Morphogens Simulation, January 2009. [online] http://www.dcs.
gla.ac.uk/~tkelly/bits/morphogens/launch.jnlp.
64
[59] C Vanegas, D Aliaga, P Müller, P. Waddell, B. , Watson, P. Wonka, and
Tanzima Zerin Islam. Modeling the appearance and behavior of urban
spaces, Nov 2009.
65