备注:第一篇文章被系统删了,很气,就更新了一张图,然后就被封号了,文章也被系统删了。所以现在只能新开文章,重新写了,先立个标题。
所以本篇算是一种重置版,加了一些最新进度和效果,上一篇文章是8月底写的,难免有些不完善。
本人菜鸟,一路摸爬滚打过来的,有兴趣的可以联系我,欢迎讨论相关话题。
先大致说下我的制作流程:
1、制作OSM
在第三方软件自定义编辑OSM数据,其实就是一些数据点,连线作为道路,包含一些自定义属性,如Lanes,车道数量,highway=primary,secondary,道路类型,oneway,是否为单向道等等,用于模型生成,也适合关卡设计的制作。
2.分析OSM
就是把制作好的OSM数据文件以OSM Import节点导入Houdini,在houdini里面的处理,就是先用python分析数据文件,把数据转化为Houdini geometry的点线面数据,包括一些自定义的其他数据。然后再以这些数据为基础生成道路模型。
此处也做了一些额外处理,比如后期生成道路需要的一些参数,可以在这里提前计算好,存入Geometry,另外对原始的OSM数据进行了修改,做了resample采样,再保存进OSM,这样可以使得数据的点分布显得更均匀一些,生成的模型也会更圆滑一些。还有就是这些数据还要转成json,放入Unity与程序那边的交通系统做衔接。
在分析这一步骤里,还有一点比较重要的是,我计算了一个自定义的angleLength,为了给不同的十字路口适配合适的距离。这个距离,跟当前车道的数量,以及与相邻车道的夹角有关,通过计算得到的值,然后调节了resample之后的数据,把那些离十字路口太近,小于angleLength的点删除,并调整离交叉点最近的点 与交叉点的直线距离为angleLength+2,这一步花费了我挺多的时间的。
3.生成道路模型
这里是核心内容,涉及到的东西也很多,前期做了主干道模型的生成,到目前为止已经初步做好了车道的划分,斑马线的绘制,马路牙子模型,今天刚刚做完建筑区域的随机分布,参考的是杨超的一篇文章的思路,具体实现是自己想的,以及朋友的帮助。
杨超:houdini路网zhuanlan.zhihu.com十字路口的核心算法参考的是荷兰人的一篇文章,在此基础上做了改动,具