很多人询问《DRIFT RIDE 2》中的程序化道路生成是如何实现的,以下是当前设置的简要说明。

路径由 200 米的段组成。

每个段包含可以与道路一起变形或保持不变的物体。我目前使用了多种不同的基础段类型,这些类型在地形形状和道路布局上有所差异。例如,一种主要是平坦的,另一种在一侧有悬崖,它们还可以使用不同数量的车道。

目前这些基础类型仍然相对独立,不能在同一运行中随意组合。

随后在段上放置的附加环境物体。每个物体都可以配置为随道路变形,这对于需要随地形或道路形状移动的较大物体(如围栏、护栏等)很有用。

一些不随道路变形的物体会经过随机化处理。随机化器决定在下一段哪些物体处于活动状态以及出现的数量,从而在不必手动构建每种可能版本的情况下增加变化。

实际道路形状是通过一组参数单独控制的。我可以定义水平转弯、海拔变化、道路不规则以及这些变化持续的时间范围。这些值在路径延伸时连续生成,使得结果既随机又可预测且可控,而不是完全混乱。

斜坡(banking)是单独在代码中处理的,根据转弯强度决定是否添加。

每个段还标记了交通信息。我只需要定义车道宽度、车道数量以及它们的方向,交通系统即可利用这些数据在生成的路径上运行。

在接受下一段之前,会进行一个检查,防止路径与自身相交。在此之前,会用盒碰撞检测该段的方向是否会与已生成的部分重叠。如果检测到相交,则该抛物线会被拒绝,并生成一个不同的抛物线。

路径会一直向玩家前方无限延伸,而距离玩家足够远的段会被移除。

一些大型的背景元素(如远处的山脉)并不作为道路的一部分生成。我使用了经典赛车游戏中的老技巧:远景通常保持静态。在此项目中,这些背景元素挂在天空盒(skybox)上,并与玩家保持固定距离,从而产生它们比实际距离更遥远的错觉。

大致如此。

我计划接下来要改进的主要是不同基础类型之间的过渡。理想情况下,我希望这些过渡能在运行时自动生成,使得形状差异很大的段仍能平滑连接。最终,甚至基础几何体也可以实现程序化,而不是依赖预设的网格。

此外,我也希望在环境方面投入更多时间。当前的环境工作比较匆忙,因为我是独自开发整个项目。未来,我希望为不同道路和场景类型创建更多基于真实参考的专用资产,而不是在整个项目中重复使用相对有限的资产集。

附带的视频是当前游戏的最新版本。