APP下载

基于Unity3D 的地铁线路三维模型自动生成的研究

2022-06-08周徐熠郎诚廉

铁路计算机应用 2022年5期
关键词:道岔曲线线路

周徐熠,郎诚廉

(同济大学 电子与信息工程学院,上海 200331)

目前,三维视景技术在我国轨道交通领域的应用愈加广泛,列车运行控制、人员培训等都结合该技术开发了新型仿真系统[1-3]。但构建三维视景,通常需要利用建模软件搭建出线路的三维模型,再导入至Unity3D 等场景驱动引擎中进行操作,其过程复杂、耗时较长。

为满足快速构建地铁线路三维视景的需求,本文研究了地铁线路三维模型的自动生成方法,并利用基于Unity3D 和 C#开发的程序实现线路生成与场景驱动,可有效简化人工建模过程,降低三维视景搭建难度,缩减工作量。

1 路径生成

线路路径是生成地铁线路三维模型的基础,为将线路尽可能完整地还原至三维视景当中,本文结合线路平面和纵断面数据,计算获得平面路径并将其映射为空间路径。

1.1 线路数据结构定义

线路平面由直线、圆曲线和缓和曲线组成,纵断面设计线由直线和竖曲线组成[4]。由于线路参数较多,为便于读取数据,本文利用数据库对各类线路数据进行存储和管理,并运用面向对象方法进行路径坐标计算。为此,定义了直线类、曲线类和坡道类,它们具有部分相同字段,可继承自同一基类,如图1 所示。同时,采用路径点列表描述路径定义了路径点类,其字段包括Vector 3 类型的空间坐标和double 类型的里程信息,相应的路径点对象存入泛型列表中,由此构成线路路径。此外,还定义了道岔类、信号机类和车站类,便于生成和定位相应的模型。

图1 线路数据类示意

1.2 路径点平面坐标计算

(1)直线部分:根据始端坐标、长度和方位角数据,可计算出直线段末端的路径点坐标。(2)曲线部分:可按照第一缓和曲线、圆曲线、第二缓和曲线的顺序计算路径点。由于缓和曲线的曲率是变化的,而圆曲线的曲率固定,为使得路径平滑和计算简便,本文采用按长度分段计算的方法得到缓和曲线上的路径点坐标,间隔取1 m,采用按圆心角分段计算的方法得到圆曲线上的路径点坐标,间隔取0.01 rad,相比其他间隔取值,该取值可得到精度较高且视觉效果良好的平曲线。

1.2.1 缓和曲线路径点坐标计算

在如图2 所示的对称基本型平曲线中,J点为两侧缓和曲线切线交点,ZH点为直缓点,HY点为缓圆点,YH点为圆缓点,HZ点为缓直点,O点为圆曲线圆心,线段OM垂直于左侧缓和曲线的切线。圆曲线半径R、缓和曲线长LS和路线偏转角α通常由线路平面图给出,ZH点到J点之间的缓和曲线切线长T、内移距p、切垂距q和缓和曲线角β0的求解过程涉及到曲线要素计算,本文不再赘述。

图2 对称基本型平曲线示意

计算缓和曲线上的路径点坐标时,以ZH点(或HZ点)为原点,以曲线切线里程增加方向为x轴正方向,建立局部平面直角坐标系,将待求路径点到原点的里程长度l代入三次抛物线型缓和曲线的参数方程,求得路径点在该坐标系下的坐标(x,y),再通过坐标系变换,得到路径点在全局坐标系下的坐标(X,Y)。

1.2.2 圆曲线路径点坐标计算

计算J点至ZH点的单位向量,将该向量逆时针旋转γ并乘以J点至O点的距离,得到,进而求出O点的坐标。将从O点指向HY点的向量绕O点旋转至YH点,计算并记录圆曲线上的一组路径点坐标。

缓和曲线对称时,计算较为简单,但在非对称基本型平曲线中,两侧缓和曲线的长度LS不同,需分别计算第一、第二缓和曲线的内移距p1、p2和切垂距q1、q2,并按公式(2)[5]计算第一缓和曲线切线长T1,为

非对称情况下圆心坐标 (XO,YO)的求解表达式为

式中

最后将所有直线、缓和曲线和圆曲线上的路径点按里程递增的顺序依次存入列表,构成线路的平面路径。

1.3 路径点空间坐标计算

本文结合纵断面数据,计算各变坡点的平面坐标,并更新平面路径上各路径点的高度值,为提高竖曲线的平滑度,在变坡点的两侧通过线性插值增补多个路径点,并进行纵距修正,获得线路的空间路径。

1.3.1 路径点高度值计算

根据变坡点里程,查找平面路径中与变坡点里程最接近的前后两点,并通过线性插值确定变坡点的平面坐标。如图3 所示,点P、B'为两个变坡点,其中,B'的高度值尚未得出,点B为B'在水平面上的投影,根据P至B的里程长度 Δm和坡度i,计算出B'相对于B的高度 Δh,进而得到B'的高度值。采用同样的方法计算并更新该坡段上的所有路径点的高度值,可得到P、B'间的空间路径。将B之后所有路径点的高度值增加 Δh,使之与B'处于同一水平面上,以便后续坡段上各路径点高度值的计算。遍历各坡段,重复上述过程,可得到不带有竖曲线的线路空间路径。

图3 路径点高度计算示意

1.3.2 路径点增补

在如图4 所示的半径为RS的凹形竖曲线中,前后两坡段的坡度分别为i1和i2,点P为变坡点,点A、B分别为竖曲线的起点和终点,竖曲线切线长TS[6]的计算公式为

图4 竖曲线示意

根据TS在水平面上的投影长度可以确定A、B的里程,并进一步得到A、B的空间坐标。当A、P间路径点较少时,经纵距修正后无法得到平滑的竖曲线,因此,需在A、P间通过线性插值增补n个等距的路径点,并分别进行修正,以获得平滑竖曲线。B、P之间同理,n的大小取决于线性插值的间隔步长,考虑精度和视觉效果,本文中该间隔取1 m。

1.3.3 纵距修正

图4 中,根据点A、P间各路径点至A的距离f计算纵距z,并对高度值进行修正。在P、B间进行相同操作,可得到较为平滑的完整竖曲线路径。各点处纵距z的近似公式为

2 模型创建与简化

Unity3D 集成了DirectX 和OpenGL,可快速创建模型并进行图形渲染。本文利用Unity3D 完成线路模型的创建,采用Douglas–Peucker 算法对模型进行简化,减少了模型的三角面数。

2.1 模型创建

2.1.1 轨道模型创建

本文通过Unity3D 中的线渲染器(Line Renderer)组件实现路径的可视化,并调用该组件的BakeMesh方法,得到带有网格碰撞体的路径实体模型。为提高三维视景的真实感,需给线渲染器添加PNG 格式的枕木贴图,纹理模式为Tile,可达到根据线路长度自适应重复贴图的效果,将路径实体模型作为简易道床面,添加道砟贴图。若不将枕木与道砟进行图层分离,则道岔处会发生贴图重叠,显示效果不好,分离图层后,可有效改善显示效果。

本文采用生成Mesh 网格的方法对钢轨进行建模。选取60 kg/m 钢轨截面上的部分关键点作为模型的轮廓节点,计算各路径点处的轮廓节点坐标并存入Vector 3 类型的顶点数组vertexes 中,计算出每个三角面各顶点在顶点数组vertexes 中的索引,并存入int 类型数组indices 中,将这两个数组赋值给Mesh网格对象的相应字段“vertices”“triangles”,完成生成钢轨的三维网格轮廓,配合相应的材质即可渲染出钢轨模型,如图5 所示。

图5 钢轨模型

2.1.2 站台模型生成

考虑到线路中的部分站台可能位于曲线上,因此需要沿着线路路径来生成站台模型。在确定了车站中心里程并设计站台部分的线路路径后,创建站台的Mesh 网格并进行渲染。根据屏蔽门平面布置图,结合站台形式,将各类屏蔽门的预制体定位至具体位置,如图6 所示。

图6 站台模型

2.1.3 道岔模型创建

本文根据道岔的型号和参数计算各关键节点坐标,并以岔心坐标为基准,对尖轨和非尖轨部分采用生成Mesh 网格的方法分段建模,构造出道岔模型。尖轨单独建模,通过模型旋转动画可模拟道岔开通位置的切换。本文以上海地铁14 号线正线采用的60 kg/m 钢轨9 号道岔[7]为例实现了道岔建模,如图7 所示。此外,在生成模型前将道岔前后路径进行了分段,有效避免了辙叉部分与前后钢轨重叠。

图7 道岔模型

2.1.4 信号机模型定位

本文将信号机模型作为预制体,根据里程位置确定坐标并实时加载、定位模型。预制体带有灯光控制脚本,可根据仿真信号切换灯光显示。

2.2 模型简化

当线路较长时,计算得出的路径点数量庞大,用于列车运行模拟或路径漫游时效果较好,但如果采用未简化的路径点来生成钢轨、道床面等整体长度较大的模型,得到的模型里将包含大量冗余的三角面,增加了内存消耗,同时,在进行视野缩放后,若视野内模型面数过多,会导致GPU 渲染速度下降和画面帧率降低。减少部分路径点后再生成轨道模型,对视觉效果的影响较小,且能够降低模型三角面数,提高渲染速度和帧率。

本文采用Douglas–Peucker 算法对路径点的数量进行适当压缩。该算法的优点是具有平移和旋转不变性,基本思路为:对路径的起点和终点虚连一条直线,求各点至该直线的距离,找出最大距离值dmax,给定误差上限ε,若dmax<ε,则该段路径上的中间点全部舍去;若dmax≥ε,则保留dmax对应的点,并以该点为界,把路径分为两部分,分别递归调用该方法,最终保留下来的点即为简化结果[8]。

以上海地铁14 号线上行线作为算例,线路长度为39.1 km,缓和曲线路径点间隔取1 m,圆曲线路径点间隔取0.01 rad,对简化前的路径应用Douglas–Peucker 算法,得出不同ε取值时道床面模型参数,如表1 所示。ε取0.05 时,原始路径点至简化路径的垂直距离不超过5 cm,模型简化后可以保持原有路径形状,视觉效果与简化前差距较小,且模型的点、面数和内存占用得到显著降低,简化效果较好。

表1 ε 不同取值对应的道床面模型参数

此外,本文对各类三角面数量较多的模型采用多层次细节(LOD,Levels of Detail)技术提高了渲染速度,采用Mip 映射(Mip-mapping)技术降低了远距离情况下的贴图失真程度,改善了视觉效果,提升了渲染速度。

3 虚拟场景驱动

Unity3D 作为一款场景驱动引擎,还包括了三维视景所需要的其他元素,如物理引擎、网络通信、输入输出模块等。本文采用Unity3D 开发的三维视景软件实现了对线路数据库的访问,并在生成线路三维模型的基础上,实现了虚拟场景漫游和列车运行模拟。

3.1 线路数据获取

本文采用MySQL 数据库对线路数据进行管理,采用客户端—服务器架构实现三维视景软件对线路数据的获取。三维视景软件客户端采用Unity3D 结合C#程序进行开发,通过Unity3D 内置的UGUI 系统完成人机交互界面设计,通过C#程序响应UI 事件,完成模型生成与场景驱动。服务器主要负责数据管理,客户端向服务器发送数据请求后,服务器通过SQL 语句获取数据库内线路数据,通过JSON 格式数据返回给客户端,客户端接收并处理数据后生成对应的模型。

3.2 虚拟场景漫游

虚拟场景漫游可通过角色控制器(Character Controller)组件和摄像机(Camera)来实现。采用胶囊体充当角色模型,绑定角色控制器组件,并将摄像机置于角色父物体下,用于获得角色前方视野。通过监听输入设备事件,借助键盘按键获取角色移动方向向量,由角色控制器的Move 函数更新角色位置;角色模型和摄像机带有Transform 组件,该组件包含了用于模型旋转的Rotate 函数,程序在每一帧内获取鼠标移动方向,并调用Rotate 函数调整角色朝向和视野范围。

3.3 列车运行模拟

3.3.1 车辆模型控制

本文以8 编组列车为例,通过C#程序控制列车每节车辆模型的运行路径、位置和朝向,以路径点列表作为各节车辆的运行路径,控制车辆朝着当前追踪的路径点行驶,各节车辆速度保持一致,实现了列车在轨道上的运行。

在画面的每一帧内,计算出车辆当前位置到下一路径点的距离a,同时根据运行速度计算该帧内车辆的行驶距离b。根据a和b的大小关系判断车辆是否会到达或超越当前正在追踪的路径点,若不能到达,即b

3.3.2 道岔功能实现

在创建道岔模型时,根据数据库提供的道岔链路信息,将道岔各开通方向与相应的路径点列表进行绑定,道岔的开通状态决定了车辆通过岔心后的运行路径。在岔心处设有虚拟球体作为车辆通过时的触发器(Trigger),该球体位于道岔父物体下,且对摄像机不可见。车辆经过道岔时会穿过该球体,通过碰撞检测技术结合触发器的OnTriggerEnter 函数,获取道岔的实际开通方向,根据开通方向所对应的路径点列表对车辆运行路径进行调整。

3.3.3 车门、屏蔽门模型控制

列车到站停车后,利用“消息广播”机制结合模型动画实现了图8 所示的车门和屏蔽门的开闭。模型动画可通过Unity3D 的Animation 制作并绑定在模型预制体上,也可以通过导入iTween 插件编写代码实现平移动画,并通过BroadcastMessage 函数对多个门体对象进行消息广播,触发模型动画。

图8 车门与屏蔽门控制

4 结束语

本文对地铁线路的三维模型自动生成方法进行了研究,采用数据库存储线路数据,利用Unity3D和C#完成对线路数据的读取,实现了路径生成、模型创建与简化,在此基础上通过角色控制器、碰撞检测等技术实现了虚拟场景漫游和列车运行模拟。研究得出的方法具有通用性和拓展性,可应用于地铁三维视景仿真,以较高的精度还原地铁线路场景,简化建模过程,加快虚拟场景搭建进度。

猜你喜欢

道岔曲线线路
未来访谈:出版的第二增长曲线在哪里?
跨座式单轨交通折线型道岔平面线形设计与研究
有砟线路道岔运输及铺换一体化施工技术与方法
超高压架空输电线路工程建设施工分析
高压输电线路对输气管道干扰与防护研究
跨座式单轨整体平转式道岔系统研究
防雷技术在输电线路设计的应用
黎塘一场三渡五交组合道岔无缝化大修设计
幸福曲线
梦寐以求的S曲线