Building parcel / lot generation

   2371   6   0
User Avatar
Member
34 posts
Joined: Nov. 2016
Offline
I've recently be looking into city and building generation, mostly through papers and thesis write-ups and I am starting to play around with generating some HDAs for this kind of thing. I have a city block mostly defined for each individual lot from some voronoi splitting, roads from polyExpand2D, etc, but I'm having a bit of trouble getting some believable parcel/footprint generation for the building themselves from these areas between the streets. Most of the implementations seem to rely on OBB(object aligned bounding box) subdivision or Straight Skeleton subdivision for generation of building footprints. However I'm really after a result more in line with what Assassin's Creed Unity did with their building tools. I'm not sure what technique they are using (maybe it is one I already mentioned), but I'm running into a snag trying to reproduce it in Houdini.

I've tried a few techniques, namely utilizing polyExpand2D (which I guess is basically straight skeleton sub-d) stepping inwards from the boundary curves, however this technique produces a lot of problems with triangles in corners where points are close together. It also has the problem of being uniform inset distance. Another thought I had was to use ConvertLine to split each segment of the resampled curve into unique prims, iterate over them in a for each and walk them inwards along @N pointing inwards. I can randomize the step distance in the loop, but I have problems with overlaps which need to be solved with some collision detection.

I'm wondering if anyone has any suggestions for how to achieve this type of result. Thanks for any tips




Attachments:
ac_buildingexample.png (1.0 MB)
buildinglot.png (44.8 KB)

User Avatar
Member
77 posts
Joined: Feb. 2017
Offline
It just look like the skeleton subdivide (offset mode).

multi polyexpand2d and some boolean can achieve it.

If you really read the paper about OBB and skeleton subdivide, you would have no problem to achieve it.
Edited by zengchen - March 25, 2020 01:17:08

Attachments:
FastStoneEditor1.png (121.0 KB)

My Youtube Channel [www.youtube.com]
User Avatar
Member
34 posts
Joined: Nov. 2016
Offline
zengchen
It just look like the skeleton subdivide (offset mode).

multi polyexpand2d and some boolean can achieve it.

If you really read the paper about OBB and skeleton subdivide, you would have no problem to achieve it.

Thanks, I have read the papers. I'm more of an artist than a programmer so translating it from their algorithms into something in Houdini is the challenge. I don't really understand your suggestion of boolean and how it would play a part in this. I thought I could solve it with the local ‘offsetscale’ attrib for the polyexpand2d but the curve has to be closed in order for polyexpand2d to work, so I'm having trouble getting the different offset depths.

The Straight Skeleton Method from polyExpand2d also suffers from the problem of diagonal edges at the corners, which is solved somehow in Houdini in that above example image. The process of solving this issue is documented in this paper in section 4.2.2 (Procedural generation of Parcels [www.cs.purdue.edu]). I'm just not VEX fluent enough to translate it over into VEX
Edited by TheProgg - March 25, 2020 13:08:41
User Avatar
Member
77 posts
Joined: Feb. 2017
Offline
sorry, English is not my mother tongue, I am hard to tell you how to do that by word.
so I made a hip file. hope you like it

notice:
  1. the hip file must be opened by Houdini 18
  2. I choose a simple method to divide the whole lot to piece (the method mentioned in paper need hundreds of nodes).
    And the paper need to combine small area and triangle poly finally, and also need many further optimizations.
    they are all need heavy vex code or complex for-each / repeat loop.
    so I do not achieve those goals in this hip
  3. I use a HDA created by myself in the hip
    the HDA called “convert_edge_group_to_line”
    you can replace it by labs::edgegroup_to_curve SOP
    or you can download my HDA here My HDAs [drive.google.com]
Edited by zengchen - March 27, 2020 00:42:18

Attachments:
example.hip (183.2 KB)
2020-03-27_124031.png (29.8 KB)

My Youtube Channel [www.youtube.com]
User Avatar
Member
34 posts
Joined: Nov. 2016
Offline
zengchen
sorry, English is not my main tongue, I am hard to tell you how to do that by word.
so I made a hip file. hope you like it

notice1:
the hip file must be opened by Houdini 18

notice2:
I choose a simple method to divide the whole lot to piece (the method mentioned in paper need hundreds of nodes).
And the paper need to combine small area and triangle poly finally, and also need many further optimizations.
they are all need heavy vex code or complex for-each / repeat loop.
so I do not achieve those goals in this hip

notice3:
I use a HDA created by myself in the hip
the HDA called “convert_edge_group_to_line”
you can replace it by labs::edgegroup_to_curve SOP
or you can download my HDA here My HDAs [drive.google.com]

Thank you very much for taking the time to make a file and help explain.This is definitely a step in the right direction. Thanks!
Edited by TheProgg - March 26, 2020 07:33:44
User Avatar
Member
77 posts
Joined: Feb. 2017
Offline
In this hip file, I only want to show how to get variant scale of Lot. (this step seems no mentioned in the paper)
other steps in hip are different from the paper because it needs many many nodes to follow the paper's steps.

TheProgg
This is definitely a step in the right direction. Thanks!
It must in the right direction, as I have almost completed the OBB and Skeleton Subdivide in Houdini (just lack of the definition of the output attributes)…
https://www.sidefx.com/forum/topic/70404/?page=1#post-306973 [www.sidefx.com]
Edited by zengchen - March 27, 2020 00:43:45
My Youtube Channel [www.youtube.com]
User Avatar
Member
34 posts
Joined: Nov. 2016
Offline
zengchen
TheProgg
This is definitely a step in the right direction. Thanks!
It must in the right direction, because I have almost completed the OBB and Skeleton Subdivide in Houdini (just lack of the definition of the output attributes)…

https://www.sidefx.com/forum/topic/70404/?page=1#post-306973 [www.sidefx.com]

Thanks for you help. Really looking forward to that CityEngine tools
  • Quick Links