Professional Documents
Culture Documents
Figure 1: We present an interactive procedural modeling system that is able to model difficult architectural surfaces, such as roof construc-
tions. This figure shows procedural extrusions applied to 6000 floorplans from a GIS database of Atlanta.
FA
1 Abstract
2 We present an interactive procedural modeling system for the exte-
3 rior of architectural models. Our modeling system is based on pro-
4 cedural extrusions of building footprints. The main novelty of our
5 work is that we can model difficult architectural surfaces in a pro-
6 cedural framework, e.g. curved roofs, overhanging roofs, dormer
7 windows, interior dormer windows, roof constructions with verti-
8 cal walls, buttresses, chimneys, bay windows, columns, pilasters,
9 and alcoves. We present a user interface to interactively spec-
10 ify procedural extrusions, a sweep plane algorithm to compute a
11 two-manifold architectural surface, and applications to architectural
12 modeling.
13 1 Introduction
14 The main motivation for our work is to develop an interactive and
procedural modeling tool for complex architectural surfaces. We
KE
15
1
Online Submission ID: 0174
59 architecture [MPB05]. Merrel and Manocha [MM08] propose a 101 The UI consists of one window showing the floorplan, one window
60 more general approach that can create new models from an ex- 102 for profile curves, and a 3D preview window as shown in figure 4.
61 ample mesh. Given a man-made model as input, great results for
62 reshaping were achieved by Cabral et al. [CLDD09] and Gal et 103 A closed simple polygon defines the footprint of the house, and a
63 al. [GSMCO09]. The output of our proceudral extrusions could 104 set of polyline segments define a profile for each edge in the floor-
64 also be further processed to distribute brick patterns [LDG01] 105 plan. Users are able to edit both of these structures, while the solid
65 and in special cases maybe to perform PQ or conical remesh- 106 geometry is updated in the 3D preview window. Each plan edge is
66 ing [LPW∗ 06]. Appendix A, (Chapter 8) details other loosely re- 107 assigned a profile; A profile can be assigned to more than one plan
67 lated procedural extrusion techniques. Our methodology is also re- 108 edge.
68 lated to the work by Finkenzeller [Fin08] and Haveman [Hav05] 109 To present the user with easily understood behavior, the profiles
69 who also suggested to use extrusion operations similar to the 110 must be monotonic in the vertical direction. Because the underlying
70 straight skeleton for architectural modeling. The straight skeleton 111 procedural extrusions grow the architecture upwards, a downwards
71 was introduced by Aichholzer et al. [AAAG95, AA96] and the au- 112 facing profile segment is meaningless. The interface enforces this
72 thors commented how the straight skeleton computes a very plau- 113 constraint in the polyline editor. The concept we use is to break
73 sible roof construction over a polygon. Applications of the straight 114 non-monotone profiles into a sequence of upward growing profiles
74 skeleton to roof modeling were demonstrated by several authors, 115 through profile offset events, described next.
75 e.g. [LD03, Hav05, MWH∗ 06b]. Implementations for the straight
76 skeleton were proposed by Felkel and Obdrzalek [FO98] and Cac-
77 ciola [Cac04]. The idea of weights for the straight skeleton has been 116 3.3 Profile Offset Events
KE
78 briefly mentioned by Eppstein and Erickson [EE99], but the topic
79 was only developed for convex polygon decomposition [Aur08]. In 117 In an architectural setting, overhanging roof sections are often at the
80 conclusion, while we are inspired by a lot of great previous work, 118 same height on several sides of a house. To facilitate creating these
81 most previous work focused on interesting theory in computational 119 shared overhangs, we introduce profile offset events, figure 5. These
82 geometry. In constract, we propose actual algorithms for the com- 120 are shown to the user by a handle and associated two polylines in
83 putation and many extensions so that interesting roof surfaces can 121 the profile editing window. The polylines represent the gradients of
84 be modeled. 122 the inner and outer faces of the roof respectively. After they have
123 been added to one profile, the offset event is copied to all profiles.
85 Appendix A gives details of related geometric techniques. 124 The offset distance and associated roof gradients can then be edited
125 for each edge individually, or the offset removed from any given
126 edge. The challenge of the implementation is the procedural defini-
86 3 User Interface Description 127 tion. The edit has to remain valid even after the building footprint
128 is changed.
87 Our interface controls a sequence of extrusions that are particularly
88 suitable for creating manifold urban models. In this section we will
89 introduce the functionality of our user interface.
129 3.4 Anchors
2
Online Submission ID: 0174
162 by adding a rectangle exterior to the plan, and applying the appro-
163 priate profiles we can create buttresses, as in figure 22. If the input
164 plan has several repeated elements, such as bay windows or but-
165 tresses, plan-edits give a convenient tool for defining the shape and
166 profile application once, and repeating it a number of times around
167 the perimeter.
169 Anchors can be used to mark the first and last element in a grid
170 of features, such as windows. Parameters can be set to control the
171 width of the repetitions, and when combined with relative anchors
172 allows features to be distributed on resizable façades. Variations
173 on this theme allow rows or columns of features to be located, for
174 example a line of dormer windows on a roof.
175 The location of anchors may also be used to specify the location for
Figure 5: Left: One profile offset (a,b) defining a shared start- 176 complex external features, such as windows and doors, described
ing height for two different gradients of roofs. Right: Sharing this 177 by arbitrary meshes. Each mesh element can be further parameter-
profile offset event allows the roof height to be parameterized. 178 ized by the location of several defining bones. These control bones
FA
179 deform their associated meshes using pre-defined weights. For ex-
180 ample moving the control bones at the top or bottom of a pillar will
140 We allow the user to select from two types of anchor - relative and 181 change its height.
141 absolute. A relative anchor’s position is taken to be a fraction of 182 Faces of the output model can be identified by adding tags to the
142 its length on the plan edge. As long as that plan-edge still exists at 183 profile segment. These are represented by small triangles in the
143 the specified height, the feature is instanced using the same fraction 184 user interface. Once the manifold is complete, the faces that were
144 taken on the length of the plan edge at the that height. An absolute 185 generated from the specified profile segment are processed in a par-
145 anchor is projected from its location on the input plan edge onto 186 ticular way, for example to add tiles to the roof.
146 a line defined by the current plan edge line-segment. If this point
147 is within the bounds of the line segment, it is used. Because a face
148 defined by a plan line segment may grow as it ascends, it is possible 187 3.7 Modeling Larger Environments
149 to position absolute anchors beyond the ends of the line segment.
188 We provide tools to model larger environments by example. We
189 implemented several feature extraction algorithms to automatically
150 3.5 Plan Edits 190 label edges of building footprints. Example labels are length ∈
191 short, medium, long and orientation ∈ street, side, back. The
151 Discrete edits to the plan at a certain height are know as plan-edits. 192 most important label is an angle computed by orienting the build-
152 These are located by an anchor specified by the user, and introduce 193 ing to the street and mapping the normal vectors of the footprint
153 new edges into the structure. Again the user is offered several tech- 194 edges to the unit sphere S2 . We assume that each footprint in the
154 niques with different advantages. Forced steps allow a portion of 195 environment is labeled with a building type by another procedu-
an edge to be replaced by arbitrary geometry, while natural steps ral algorithm. For each building type we can assign one or multiple
KE
155
196
156 offer a range of simple shapes that can be inserted. For reasons that 197 profiles to each edge type including a probability value if more than
157 are discussed later, forced steps are more powerful, but can break 198 one profile is assigned.
158 the manifold, while natural steps are guaranteed to create manifold
159 geometry.
199 4 Algorithm
200 In this section we give an overview of the algorithm to create the
201 procedural extrusions defined by the user interface. This algorithm
202 extrudes footprints according to a set of profiles. We begin with
203 an overview of the algorithm, before discussing the many possible
204 events that drive the extrusion algorithm, and finally giving details
205 of the computation.
207 We describe the input, the output, define the terminology, and give
Figure 6: Left: The plan (green line) and profiles profiles (blue 208 an outline of the algorithm.
lines) define the shape of the structure, while the anchors (orange) 209 Input: The input of the algorithm is a collection of simple poly-
locate the chimney feature. A step is inserted into building at the 210 gons (polygons without self intersections) with an arbitrary number
anchored location. Middle: The finished inverse dormer window. 211 of holes. A polygon is described by n polygon corners ci ∈ R3
Right: Alternative structure which adds in an additional rectangle 212 with 1 ≤ i ≤ n. All input corners are restricted to the same height
to the plan and corresponding profiles in the first stage to specify a 213 value, that is they lie in a plane parallel to the xy-plane. Each cor-
chimney. 214 ner ci is connected to its counterclockwise neighbor by a polygon
215 edge (p-edge) ei . Additionally, each p-edge is associated with an
160 As shown in figure 6 we can use discrete plan-edits to locate fea- 216 angle θi so that −π/2 ≤ θi ≤ π/2. Each p-edge ei together with
161 tures such as inverse dormer windows, or chimneys. Additionally 217 the associated angle θi define a skeleton-plane s-plane pi through
3
Online Submission ID: 0174
218 the p-edge ei . See figure 7. Note that the order for inner loops 248 These can be basic topological changes or user driven events such
219 is reversed (clockwise) and that we can have an arbitrary nesting of 249 as offset or anchor events.
220 loops (another loop inside a hole). Without loss of generality we de-
221 scribe the algorithm for a single polygon, as multiple polygons can
222 just be interpreted as a single polygon with multiple disconnected
223 loops.
Main begin
foreach corner ci in input do
InsertCornerInPriorityList( ci );
sweepZ = 0;
while !EventPriorityQueue.Empty() do
event = PriorityList.NextEvent();
if event.Height() ≥ sweepZ then
KE
sweepZ = event.Height();
HandleEvent(event);
PriorityList.Insert(event.newEvents);
end
Figure 8: Pseudo-code for the main dispatch loop. Figure 10: The data structure used to build the skeleton, shown
midway through the sweep
4
Online Submission ID: 0174
266 4.2 Description of Events 307 corners, at the height of the event. The offset-distance is specified
308 independently, or disabled entirely for each profile curve.
267 In this section we describe the events encountered as the sweep
268 plane ascends. 309 Anchor Events: As the sweep plane reaches the height of a profile
310 anchor we firstly identify any of the active edges on the sweep plane
269 Generalized Intersection Event: There are three events types, 311 that use this profile. From these edges the corresponding plan-
270 given by previous authors [FO98] [EE98], which occur to edges as 312 anchors are located and either the absolute or relative outer prod-
271 the sweep plane rises. Edge events occur as the length of a polygon 313 uct specifies the location of the anchor single location. Plan Edit
272 edge shrinks to zero. The faces defined by three consecutive (linked 314 Anchors: These modify a subset of the corners and edges on the
273 by corners) edges collide, (figure 9, 1). Split events take place when 315 sweep plane to represent new features such as chimneys, or dormer
274 two adjacent s-planes, and one non adjacent s-plane collide, (figure 316 windows. Mesh Anchors: These store the location of the anchors
275 9, 3). These split the contained area on the sweep plane into several 317 as an attachment point for geometry.
276 parts. Finally vertex events occur when more that three s-planes
277 collide at one point. 318 4.3 Generalized Intersection Event
FA
Figure 12: Left: Straight skeleton, middle: Straight Skeleton with
gradient changes, right: Procedural extrusions
319 Although the concept of the straight skeleton has existed for several
320 years, we found that there is no information about an actual algo-
Figure 11: Two Weighted Staight Skeletons for degenerate cases. 321 rithm to implement the weighted straight skeleton. Even though
At a and b, four planes collide at one point. Point c shows seven 322 the algorithm in this section is based on previous work in the un-
planes colliding from a variety of angles, including horizontally. 323 weighted case e.g. [Cac04] [FO98], our modifications result in sub-
324 stantial improvements in the speed and range of forms that can be
325 produced.
278 Unfortunately, we did not find this categorization of events help-
279 ful to designing a robust algorithm. In practice our architectural 326 We are the first to introduce an algorithm for extrusions using inde-
280 models give rise to a large number of degenerate events and the 327 pendently weighted edges. We also remove the monotonic restrici-
implementation is dominated by special event handling. Therefore ton on profiles of earlier work [Hav05] to allow overhanging roofs.
KE
281 328
282 it is surprising that previous work does not detail the implemen- 329 This results in a 3D instead of a 2D algorithm. We are also the first
283 tation of vertex events, the main difficulty in the implementation. 330 to recognise the difficulty of independendly weighted edges, that
284 Since edge and split events are special cases of a vertex event, we 331 is the existence of ambigous events (and we present a strategy to
285 introduce one general intersection event that consists of an arbitrary 332 resolve these events). The possibility of a 2D weighted skeleton is
286 number of planes intersecting at one point. See figure 11 and 13 for 333 discussed in previous work [EE98] [BEGV08], but no algorithm is
287 two examples. We introduce a new algorithm to resolve this gener- 334 given and the ambigous cases were not discovered.
288 alized intersection event that uses chains of p-edges involved in the
289 intersection. 335 Our second novelty is the introduction of a floating point algorithm
336 instead of an exact arithmetic one. Previous floating point imple-
290 Edge Direction Events: User generated profiles curves define 337 mentations were unreliable near degenerate collisions of four or
291 heights at which the edge direction will change. An edge direc- 338 more edges because they rely on split and edge events being cor-
292 tion event is specified by each vertex in a profile. Given that the 339 rectly ordered by height. When more than three faces meet at a
293 corresponding p-edge is still active, it is replaced by a new p-edge 340 point, the order of the events is chaotic due to floating point insta-
294 with a different gradient. 341 bilities. We introduce a novel event clustering algorithm to make
342 the floating point computations robust. The advantage of our algo-
295 Profile Offset Events: Profile offset events are generated by the
343 rithm is a much faster implementation speed, but we believe that
296 corresponding edits. Intuitively, the profile offset event results in
344 extending the exact arithmetic implementation would also be of in-
297 an addition to the polygon defining the cross-section at a speci-
345 terest.
298 fied height. The difficulty of specifying and handling profile offset
299 events comes from the procedural definition. While it is easy to 346 Robust Event Detection: One key to the success of the algorithm
300 specify changes to one specific polygon, subsequent edits may alter 347 is to use robust event detection and event clustering. There are two
301 the definition of the extrusion. We therefore need to specify a robust 348 robustness problems that we address at this stage of the algorithm.
302 procedure that can procedurally perform changes to a polygon with-
303 out creating awkward self-intersections. When the required height 349 First, in symmetrical inputs, like floor plans, it is very common for
304 is reached a new offset polygon is created for the area currently en- 350 more than three s-planes to meet at a point. To avoid degenerate
305 closed on the sweep plane, using a sub-application of procedural 351 output [EE99] in a floating point situation it is necessary to find
306 extrusions. This offset polygon is then added to the p-edges and 352 events whose intersection locations, inti , are close together and
5
Online Submission ID: 0174
388 collision occurs on the surface, but find the corner that represents
389 that portion of the edge. At this point we note that due to earlier
390 events one p-edge may end up in two or more separate volumes as
391 the algorithm progresses. When we evaluate a chain of length one
392 we ask if the collision lies between the corner’s previous edge, and
393 the next corners following edge. To do this robustly we expand the
394 bounds given by the adjacent edges to detect a collision. A small
395 epsilon range δ1 expands the bounds and ensures that collisions oc-
396 cur reliably. On our inputs we find δ1 = 10−5 a sufficient margin.
Figure 13: Left: 5 roof-planes creating an intersection event.
Right: events can interfere with each other if they have the same 397 Second, we need to filter p-edges that are no longer part of the con-
height, in this case the four points share a roof ridge. 398 struction. If this filtering produces events with less than three par-
399 ticipating edges, they are ignored.
400 Intra-chain handling: In an intra-chain collision we remove all
353 treat these events as if they had a single intersection point. See 401 interior corners, leaving only the start and the end of the chain, as
354 figure 13, left, for an example. 402 shown in figure 15. S-edges are output between all removed corners
355 Second, even events that are far apart from each other can interfere 403 and the position of the collision. Unreferenced edges are removed.
356 if they are close to each other in height, figure 13, right. It is nec-
357 essary to detect and handle these events together for resolving the
FA
358 ambiguities that can occur (described in section 4.5).
359 Basic Event Clustering: After the initialization the we iteratively
360 processes (potential) events stored in the event priority queue. To
361 address the two previously mentioned robust event detection prob-
362 lems, we cluster the basic events in two directions. Each event that
363 we get from the event priority queue consists of all events whose
364 height, z, is within some δ2 threshold of the initial event. Second,
365 we cluster all the basic events according to their location after pro-
366 jection onto the xy plane. That means all events that are within a
367 cylinder of radius δ3 and height δ2 will be grouped into a cluster.
368 See figure 14 for an illustration of the clustering step. For our build-
369 ing footprints with size in meters we use double precision floating
370 point representations and values δ2 = 10−4 , δ3 = 10−6 . Figure 15: Intra-chain pointer modification.
371 Chain construction: Our previous clustering step ensures that near
372 collisions are treated as occuring at the same location. Thereafter
373 we construct a list of chains containing corners from the set of p-
374 edges in the collision event as follows. A chain consists of currently
375 consectutive p-edges that are colliding. There may be several chains
376 involved in a collision. These are identified by the corners at the
377 start of each edge. The list of chains is ordered by their orientation Figure 16: Inter-chain pointer modification.
378 around the collision point at the clustered height. We process ad-
379 jacent pairs of edges, first within each chain, and then between the
410 Special cases: If only one cluster of face intersections occurs at
380 chains themselves.
411 a given height this algorithm is sufficient, however when several
381 Filtering invalid events: There are several ways an event has to be 412 events occur at one height we loose information from the corner
382 filtered. 413 data structure that we would otherwise use to determine if a col-
414 lision has occurred on a face. This is one of the purposes of the
383 First, there are events whose corresponding intersections do not oc- 415 height-clustering introduced in section 4.3.
384 cur on the surface of the architectural manifold. In a chain of two
385 or more corners, the edges share a s-edge that leads to the collision, 416 For this reason all chains at one height are found before any are
386 so both must be involved in a collision. However if there is only 417 modified. However a chain may have been separated from it’s in-
387 one edge, a chain of length one, we must not only ensure that the 418 tended collision by an earlier event at the same height. Before pro-
6
Online Submission ID: 0174
419 cessing, each chain must then recover their new current set of cor-
420 ners.
422 To handle edge direction and profile offset events we stop the al-
gorithm before any given event and calculate the polygonal cross-
FA
423
424 section at the sweep plane. We then replace the relevant s-planes
425 with planes with the new angles, and restart the evaluation. An
426 edge’s profile may then be defined by runs of line segments. In pre-
427 vious work the runs are monotonic in the upwards direction, that is
428 they are limited to angles above the sweep plane.
429 The output is poorly defined as the angle of an edge approaches
430 horizontal, ±π/2, as two horizontal planes do not intersect to form
431 a roof edge. Additionally, as the angle approaches these limits we
432 are colliding near coplanar faces, causing numerical instability. We
433 propose a two step solution to calculate the bounds of a horizontal Figure 19: Two indentical bay windows that lead to the same am-
434 profile section. As figure 17 illustrates, we first increase the gra- biguous case. The one on the left is resolved using the volume min-
435 dients for numerical robustness, recursively start a procedural ex- imizing technique, the one on the right is volume maximizing
436 trusion, and then project this sub-application onto the sweep plane.
437 This produces the required horizontal, or near horizontal offset sur-
438 face. 466 Depending on the configuration as the edges approach parallel, the
439 In order to create the downwards moving faces seen on overhanging 467 result is quite different, and so the limiting case is of little help
440 roofs the user builds runs of profiles, monotonic in the direction the 468 when resolving these situations. Because of the utility of a robust
441 horizontal sweep plane travels, figure 5. Then, as the sweep plane 469 algorithm, this is an important situation to define. We resolve the
situation by selecting one roof-plane to replace the others in the
KE
470
442 approaches the start of each run, it can be inserted into the current
443 polygon. The difficulty of this computation is that we cannot spec- 471 corner data structure (appendix 8.2, 31). This is a reason for the
444 ify the location of the inserts in absolute coordinates, but only rela- 472 vertical clustering outlined earlier.
445 tive to the current polygon. We found that a recursive application of 473 It is interesting to note that most architectural roof structures en-
446 procedural extrusions in 2D is a very powerful and elegant solution 474 close the maxiumum volume in the ambiguous case. Alternately
447 to this problem. We found that the flexibility (weights per edge) 475 the minium case may be useful when estimating conservative off-
448 and geometric output is much better suited for our application than 476 sets. The other useful case is when we want to ensure that two edges
449 other morphological operations. We can compute the position of 477 with angles θ1 , θ2 , give a reflection when the direction of the edge
450 the edits by the 2D projection of another extrusion operation on the 478 is reversed, and the angles are negated.
451 current outline. As figure 5,a demonstrates it is necessary to define
452 additional runs in pairs as they define the boundaries of a volume
453 on the sweep plane. 479 4.6 Insertions into the polygon
480 We describe how plan-edits operate efficently, and detail two meth-
454 4.5 Ambiguities in Procedural Extrusions
481 ods to define them.
455 We show that the weighted straight skeleton in the concave case is 482 It can be noted that it is possible to halt the sweep plane between
456 ambiguous, and how different uses of procedural extrusions lead to 483 any two sets of height events during the algorithm and calculate the
457 different resolution strategies. 484 current cross-section polygon. Thus we can insert plan-edits into
485 the priority queue of height events, adding or removing edges as in
458 When two s-planes of parallel edges collide, they form a horizontal 486 figure 20 .
459 bisector. If the two corresponding p-edges have different directions
460 then this is a roof ridge and the algorithm proceeds as normal, as- 487 However doing this incurs a speed penalty as all intersections be-
461 sured that at the opposite end of the ridge the two roof ridges will 488 tween edges need to be recalculated. Here we note that it is simply
462 collide again. However if the directions are the same then we are 489 possible to insert edges into the data structure at a given height,
463 only able to obtain a degenerate bisector, figure 18. The ambigu- 490 and have adjoining corners reference the existing previous and next
464 ity arises in not knowing which direction along the intersection the 491 edges, as shown in figure 20. This has the advantage that only the
465 roof edge moves in at this point, as it has no gradient. 492 new corners and edges must have their intersections recalculated.
7
Online Submission ID: 0174
8
Online Submission ID: 0174
FA
Figure 23: Inset: using a complex footprint, horizontal sections Figure 24: A fully procedural model that renders a street from a
and plan-edits we are able to create pillars, covered parking and spline. In this case the street was generated by four points defining
alcoves respectively. Main: A procedural condo surrounded by pro- the street’s curve. Seed points were grown using another applica-
cedural trees tion of the skeleton to create the house footprints.
544 (see figure 1). The current model has three million polygons, 5 dif-
545 ferent building types, took 20 minutes modeling time, 10 minutes to
546 compute the procedural extrusions, and 15 minutes to render. Our
547 current limitation is that we were not able to find a rendering in-
548 frastructure to render a few hundred million polygons of a detailed
549 model. We therefore had to omit ornaments and some details of the
550 roof constructions from the designs.
560 6 Discussion 578 a formal guarantee that the implementation will work correctly on
579 all inputs. It is certainly possible to construct pathological input
561 We discuss differences to previous work and limitations. 580 cases. We hope to make progress in this direction in later work.
562 Interactive procedural modeling: We believe that the combina-
563 tion of interactive and procedural modeling is a significant boost 581 7 Conclusions
564 to artists productivity and a great complement to existing model-
565 ing tools. In some sense our work is complementary to previous 582 The main contribution of this paper is to introduce an interactive
566 work by Lipp et al. [LWW08]. Our approach to encoding proce- 583 procedural modeling tool for complex architectural surfaces. Pro-
567 dural models is very different from the previous shape grammar 584 cedural extrusions can model many complex architectural surfaces
568 approach [MWH∗ 06b, LWW08]. We believe that we are the first to 585 that could not be easily modeled with previous procedural model-
569 provide a solution for the procedural modeling of roofs, procedu- 586 ing tools. Examples are curved roofs, overhanging roofs, dormer
570 ral modeling from arbitrary building footprints, and other complex 587 windows, interior dormer windows, roof constructions with verti-
571 architectural surfaces. However, previous work is better suited for 588 cal walls, buttresses, chimneys, bay windows, columns, pilasters,
572 placing elements on facade planes and we see some potential in 589 and alcoves.
573 combining both approaches in future work.
574 Limitations: We share a limitation with the straight skeleton that 590 References
575 certain smaller edits to the footprint can result in bigger changes to
576 the roof surface. This might lead to an unexpected output. Addi- 591 A ICHHOLZER O., AURENHAMMER F.: Straight skeletons for gen-
577 tionally, the algorithms are difficult to implement. It is hard to give 592 eral polygonal figures in the plane. In Computing and Combina-
9
Online Submission ID: 0174
10
Online Submission ID: 0174
673 8 Appendix A - Comparable Techniques 699 or different gradients on different edges. However by modifying
700 the algorithm to allow different weights on each edge, figure 12:
674 Extruding a profile along a path, figure 27 simply positions a num- 701 right, the weighted straight skeleton is able to directly specify the
675 ber of profile instances at different points on a path and creates a 702 gradients on a per-edge basis.The straight skeleton defines a profile
676 surface between each adjacent pair. This is a modeling primitive 703 per edge rather than per corner in the case of extrude and loft tools.
677 extensively used in 3D modeling packages. Extrusion provides a
678 simple method for the construction of rooflines, however because 704 Another popular method for geometry creation is the union of sev-
679 the profiles are unable to modify themselves in response to the re- 705 eral polygon solids to create a mass model of the output geometry.
680 mainder of the profiles the are not suitable for creating complex 706 The mathematics of this approach is introduced by CSG [Ath83],
681 architecture, an example is show in figure 27. 707 and has been used by several system since to create urban model-
708 ing tools. Sugihara and Hayashi [SH08] create roofs on orthagonal
709 geometry by unioning roofs after rectangular decomposition. This
710 concept is extended by CGA-Shape [MWH∗ 06a] by the use of a
711 visibility approach to determine which parts of the exterior walls
712 are visible. The combination of simple primitives is not capable of
713 expressing buildings with arbitrary floor plans, although it is possi-
714 ble to guarantee manifold results, and as such these techniques are
715 the most popular in commercial procedural products.
11
Online Submission ID: 0174
Resolve begin
ListOfCorner chains = ChainsOfAmbiguousBisectors();
foreach g in chains do
SetOfCorner f = FindHighestPriorityFirstCorners(g);
Boolean inside = ! ( f contains (FirstIn(g)) );
foreach ci in g do
if ci member of f then
if !inside then
inside = false;
AddSkeletonEdge (ci , Raise (ci ));
else
if inside then
inside = false;
AddSkeletonEdge (ci , Raise (ci ));
AddSkeletonEdge(Raise(ci ),Raise
(ci .nextCorner));
KE
Corner f irst = Raise(FirstIn(g));
Corner last = Raise (LastIn(g).nextCorner);
InsertCornerBefore(g, f irst);
InsertCornerAfter(g, last);
RemoveCorners(g);
f irst.nextEdge = FindOneEdge(f );
last.prevEdge = FindOneEdge(f );
f irst.nextCorner = last;
last.previousCorner = f irst;
end
FindHighestPriorityEdges begin g
if VolumeMaximizing then
return members of g with largest angle;
else if VolumeMinimizing then
return members of g with smallest angle;
end
Raise begin Corner ci
if cache contains ci then
return cache.get(ci );
raised = new Corner ( Collide ( sweepplane, ci .previousEdge,
ci .nextEdge ) );
return raised;
end
Figure 31: Pseudo-code for the resolving the ambiguous case. Cal-
culates a geometrically consistent solution to the ambiguity given
a chain of corners that start edges which become coincident and
adjacent at a the sweep plane’s height.
12