程序化路网生成器
程序化道路生成器 基于OpenGL采用C++开发,可以程序化生成适配给定地形的道路网络。
我遇到的问题主要是路网结构不应该是规则的,不像曼哈顿(网格)风格。 由于地形不平坦,因此地形的标高应该变化,以便将道路放置在地形表面上。此外,道路与其他道路交叉且没有明显缺陷,并且道路应适应地形的海拔。
我的解决方案是使用Voronoi单元使道路网络的形状多样化,每条道路选择其最低海拔不同的路线来绕山。
局限性在于,由于系统使用Voronoi,因此很难控制路网的形状。 即,用户无法控制道路的特定部分。
1、道路生成过程
为了生成自然道路网络,系统遵循以下过程。
首先,地形由平面生成:
然后生成平面上的基础路网。 由于 Voronoi 单元是二维函数,因此它应该适应地形的高程:
每条道路细分为4段,路段适应地形高程:
每条路选择高差最小的路线:
3、规格
道路生成过程可以分为2部分。
首先,在平面上生成 Voronoi 图。 Voronoi 图由 Voronoi 边、Voronoi 单元和 Voronoi 顶点组成。
Voronoi边。 Voronoi 图的边是点的最近邻发生变化的地方。 通过距离函数的连续性,这意味着 Voronoi 边上的每个点与至少两个站点的距离相等。 换句话说,这些点满足方程:
Voronoi单元。 Voronoi单元由比任何其他站点更接近固定站点的所有点组成。 它可以表示为该站点与所有其他站点的 Voronoi 边生成的所有半空间的交集。 由于边界线是凸的,因此半空间也是凸的。
Voronoi顶点。 最后,Voronoi 图的顶点是至少三个边的交点,因此 Voronoi 顶点与至少三个站点等距。
其次,每条道路被细分为5段,每段都适应地形的高程。 选择路径的策略有3种。
上图表示选择路线的不同策略:
- 最小高程策略(蓝色):这是最基本的策略,其中选择具有最低海拔的样本,从而形成类似于河流或溪流所采取的路线的道路路径。
- 最小高程差策略(红色):这是一种比第一种策略更有效的策略,它可以避免海拔下降或上升,并力求保持整个路段的海拔均匀。
- 等高差(绿色):第一法和第二法相结合。
在这个项目中,我使用了“最小高差”方法。 这种方法使道路绕山而行,而不是选择经过山峰的最短部分。
此外,下图显示了道路如何适应地形的高程:
原文链接:Procedural Road Generator
BimAnt翻译整理,转载请标明出处