上图是周边式的街区地块随便拉的盒子,redshift的水印还在。。。
上文讲到了如何程序式生成街道,那么下一步就是将街区划分为地块。实际中的街区形态多种多样,又以三种最为典型。一种是地块平铺在街区中,自发形成内部道路,姑且称为平铺式。另一种是地块面向街区外侧,成环状,姑且成为周边式。第三种,整个街区并没有划分地块的产权,而是整体开发了,姑且称为独立式。
平铺式以北京就成四合院为典型,主干街道划分了街区,每个街区内部自发形成了胡同。

周边式在很多西方文艺复兴之后的城市中比较常见,得益于规范的城市规划体系。当代城市中又以巴塞罗那最为典型 

至于第三种独立式,就是北京最为典型了,一个没有街道的城市。公共道路划分的街区都整体交给开发商,要么盖办公楼,要么盖居住小区,没有街道立面,都是独立街区。
第三种没什么好讲的,因为街块不用划分,但是前两种的街块划分就需要程序式生成了。
至于实现,前人有很多种方式,比如Parish/Muller使用L-System/ShapeGrammer生成了地块的划分,不过没有细讲。这也是CityEngine中的实现方式。Vanegas提供了比较详细的实现方法,本文也是基于这篇论文的方法重现的。
周边式
原始街区
分这么几步:
1 skeleton
作者用的CGAL库的方法,不过这个库的python wrapper版本不全没这功能,houdini里大概是没法用了。
好在houdini自带一个polyexpand2d的节点可以直接生成skeleton

2 A-Strip
然后把同一条边上的组合在一起,在论文里叫A-Strip,这时很像一个屋顶,原文4.2.1节

3 B-Strip
之后把很多斜角做掉,这一步在论文里叫B-Strip,4.2.2节

4 切分
那之后就是划分了,沿面街的线按一定距离等分,见原文4.2.3节

最后划分完的结果!

平铺式
在4.3节中,是一种按照object-oriented bounding box的中线递归划分的方式,算法相较上一种周边式是简单多和稳定度了,上面那个参数要调很久还有很多bug。。。。
对于每一块,houdini的bound节点直接可以找oriented bounding box,沿中线划分一下就好了。中线也可以有一定讲究,比如平行于某条街道边之类

对这种不规则的地块划分完其实比较诡异。。。。还是稍方正或者长条形的效果比较好

最后用周边式划分完的结果

Procedural城市系列索引:
Blocking Out City With Houdini PDG | 使用Houdini PDG生成城市白模
Procedural Parcel Modelling In Houdini | Houdini中程序式生成街区地块
Procedural Street Modelling In Houdini 1 | Houdini中程序式街道生成
IProcedural Building, A Prefabricated Way | 程序式建筑生成-预制方法
参考文献
Parish Y. I H. Procedural Modeling of Cities[J]. Computer Graphics, 2001.
Vanegas C A, Kelly T, Weber B, et al. Procedural Generation of Parcels in Urban Modeling[J]. Computer Graphics Forum, 2012, 31(2pt3):681-690.

你好,请问具体是怎么实现的可以告知一下吗?道路、城市,方便分享一下工程么?