本文介绍了一种名为“样条距离场”的新地形生成技术,该技术由作者Aeva Palecek开发,用于其名为Rainy Road的赛车游戏项目。
**问题与需求**
作者在开发Rainy Road时,面临着如何快速、高效地生成地形的问题,并提出了如下需求:
1. 部分地形特征(尤其是道路)必须用样条曲线定义;
2. 地形特征必须可组合,以便运行时快速更换地图片段;
3. 该系统必须适用于程序化物体放置;
4. 地形数据必须快速处理成渲染中间体;
5. 地形数据必须非常紧凑,最好是隐式表示;
6. 设计关卡片段的迭代过程必须快速且简单;
7. 尽可能使用现有工具;
8. 不使用专有工具。
**解决方案:样条距离场**
作者发现,可以利用样条曲线描述重要的地形特征(河流、道路、铁轨、悬崖等),通过计算空间中每个点到最近样条曲线的距离,生成地形表面。
这种方法本质上是将样条曲线在空间内挤压,其结果类似于Voronoi图。
**核心原理**
1. **样条曲线数学基础:**作者介绍了Blender中样条曲线的切线、法线和副法线向量,以及如何计算副法线向量。副法线向量用于定义样条曲线上的平面,进而确定地形的高度。
2. **生成Surfel:**将样条曲线转换为一系列名为Surfel的基元,每个Surfel包含一个空间点和一个副法线向量。
3. **Surfel采样:**使用网格节点生成地形网格,并使用“Sample Nearest”节点找到每个网格顶点最近的Surfel。
4. **生成高度图:**计算每个网格顶点到最近Surfel所在平面的有符号距离,并使用模糊操作平滑过渡,最后将距离值作为Z轴偏移量,生成变形后的地形网格。
**应用与案例**
作者分享了样条距离场技术的应用案例,包括:
1. Rainy Road游戏原型:展示了样条距离场生成的地形效果。
2. Bitmap的游戏项目:该项目采用了样条距离场技术,并取得了成功。
3. Sculptor工具:Dbat开发的Godot引擎的程序化建模工具,该工具使用了样条距离场技术的扩展,可以生成自由曲面网格。
4. 逆距离加权变体:Danpiker提出的将逆距离加权应用于样条距离场的方法,解决了边界问题,并产生了光滑的效果。
**未来工作**
作者表示该技术仍处于实验和研究阶段,未来将探索以下方向:
1. 将该技术修改为描述自由曲面而非高度图;
2. 探索其他插值策略;
3. 比较稀疏点云和高度图作为Star Machine渲染中间体的优劣;
4. 在Star Machine中实现该技术。