Loading [MathJax]/jax/output/SVG/jax.js
  • 查询稿件
  • 获取最新论文
  • 知晓行业信息
官方微信 欢迎关注

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

周徐熠, 郎诚廉

周徐熠, 郎诚廉. 基于Unity3D的地铁线路三维模型自动生成的研究[J]. 铁路计算机应用, 2022, 31(5): 71-76. DOI: 10.3969/j.issn.1005-8451.2022.05.14
引用本文: 周徐熠, 郎诚廉. 基于Unity3D的地铁线路三维模型自动生成的研究[J]. 铁路计算机应用, 2022, 31(5): 71-76. DOI: 10.3969/j.issn.1005-8451.2022.05.14
ZHOU Xuyi, LANG Chenglian. Automatic generation of 3D metro line models based on Unity3D[J]. Railway Computer Application, 2022, 31(5): 71-76. DOI: 10.3969/j.issn.1005-8451.2022.05.14
Citation: ZHOU Xuyi, LANG Chenglian. Automatic generation of 3D metro line models based on Unity3D[J]. Railway Computer Application, 2022, 31(5): 71-76. DOI: 10.3969/j.issn.1005-8451.2022.05.14

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

详细信息
    作者简介:

    周徐熠,在读硕士研究生

    郎诚廉,高级工程师

  • 中图分类号: U231.2 : TP39

Automatic generation of 3D metro line models based on Unity3D

  • 摘要: 地铁线路三维模型的自动生成有助于快速实现三维视景仿真。以线路平面和纵断面数据为基础,研究了线路路径点的坐标计算方法;采用Unity3D和C#程序,结合数据库技术,实现了数据读取与路径生成;采用线渲染器组件和生成Mesh网格的方法,实现了轨道、道岔等模型的创建;并通过Douglas–Peucker算法,实现对轨道三维模型的简化,有效提升了画面渲染速度和帧率;运用碰撞检测、消息广播等技术,实现了虚拟场景漫游和列车运行模拟。基于该研究开发的软件可快速构建地铁线路模型并进行驱动,为地铁运营场景仿真提供三维视景基础。
    Abstract: The automatic generation of the 3D models of metro line is beneficial to the rapid realization of 3D visual simulation. Based on the route plan and profile data, this paper researched on the coordinate calculation of the route path point, implemented data reading and path generation by using Unity3D and C# program and database technology, used the line renderer component and the method of generating mesh to create models such as tracks and turnouts, and simplified the 3D models of the track by the Douglas–Peucker algorithm, which effectively improved the rendering speed and frame rate, used technologies like collision detection, message broadcasting to implement virtual scene roaming and train operation simulation. The software developed based on this research can quickly construct and drive metro line models, provided a 3D visual basis for the simulation of metro operation scenarios.
  • 目前,三维视景技术在我国轨道交通领域的应用愈加广泛,列车运行控制、人员培训等都结合该技术开发了新型仿真系统[1-3]。但构建三维视景,通常需要利用建模软件搭建出线路的三维模型,再导入至Unity3D等场景驱动引擎中进行操作,其过程复杂、耗时较长。

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

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

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

    图  1  线路数据类示意

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

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

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

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

    该部分的关键是计算圆心O的坐标。根据ZH点坐标(XZH,YZH)ZH点到J点之间的缓和曲线切线长T 、切线方位角,计算出J点的坐标(XJ,YJ)。记JMJ点逆时针旋转γ后与JO重合,γ的计算公式为

    γ={tan1(R+pTq), 线tan1(R+pTq), 线 (1)

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

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

    T1=(R+p1)tanα2+q1+p2p1sinα (2)

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

    [XOYO]=[cosγsinγsinγcosγ][(XZHXJ)/T1(YZHYJ)/T1](T1q1)2 + (R+p1)2+[XJYJ] (3)

    式中

    γ={tan1(R+p1T1q1), 线tan1(R+p1T1q1), 线 (4)

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

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

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

    图  3  路径点高度计算示意

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

    TS=RS(i2i1)2000 (5)
    图  4  竖曲线示意

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

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

    z=f22RS (6)

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

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

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

    图  5  钢轨模型

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

    图  6  站台模型

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

    图  7  道岔模型

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

    当线路较长时,计算得出的路径点数量庞大,用于列车运行模拟或路径漫游时效果较好,但如果采用未简化的路径点来生成钢轨、道床面等整体长度较大的模型,得到的模型里将包含大量冗余的三角面,增加了内存消耗,同时,在进行视野缩放后,若视野内模型面数过多,会导致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  ε不同取值对应的道床面模型参数
    ε路径点数压缩率三角面数占用内存/KB
    010932100%218621238.38
    0.05148213.56%2962167.90
    0.1110810.14%2214125.50
    下载: 导出CSV 
    | 显示表格

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

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

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

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

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

    在画面的每一帧内,计算出车辆当前位置到下一路径点的距离a,同时根据运行速度计算该帧内车辆的行驶距离b。根据ab的大小关系判断车辆是否会到达或超越当前正在追踪的路径点,若不能到达,即b<a时,则继续追踪当前路径点,由于每两个相邻路径点之间均为直线,基于行驶距离b进行线性插值,计算出车辆在两点间的位置,对车辆模型的坐标进行更新;若车辆能够到达甚至超越当前追踪的路径点,即b≥a时,通过while循环语句进一步判断该帧内车辆实际能够到达的最远路径点,采用线性插值计算出车辆能够到达的位置坐标,并调整车辆模型的坐标和朝向。

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

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

    图  8  车门与屏蔽门控制

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

  • 图  1   线路数据类示意

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

    图  3   路径点高度计算示意

    图  4   竖曲线示意

    图  5   钢轨模型

    图  6   站台模型

    图  7   道岔模型

    图  8   车门与屏蔽门控制

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

    ε路径点数压缩率三角面数占用内存/KB
    010932100%218621238.38
    0.05148213.56%2962167.90
    0.1110810.14%2214125.50
    下载: 导出CSV
  • [1] 郑 凯. 融合3D技术的计算机联锁车务仿真系统设计与实现[D]. 北京: 北京交通大学, 2015.
    [2] 韩 龙. 三维仿真技术在铁路培训系统中的应用 [J]. 铁路运营技术,2014,20(4):52-54.
    [3] 王佳杰,郎诚廉. Unity3D在城市轨道交通线路电子沙盘中的应用 [J]. 铁路计算机应用,2017,26(10):36-39. DOI: 10.3969/j.issn.1005-8451.2017.10.011
    [4] 中华人民共和国住房和城乡建设部. 地铁设计规范: GB 50157—2013[S]. 北京: 中国建筑工业出版社, 2014.
    [5] 易思蓉. 城市轨道交通线路规划与设计[M]. 北京: 科学出版社, 2013.
    [6] 吕希奎. 线路三维可视化设计理论、方法与应用[M]. 北京: 科学出版社, 2015.
    [7] 于春华. 城市轨道交通道岔设计、施工及维修[M]. 北京: 中国铁道出版社, 2012.
    [8] 于 靖,陈 刚,张 笑,等. 面向自然岸线抽稀的改进道格拉斯—普克算法 [J]. 测绘科学,2015,40(4):23-27,33.
  • 期刊类型引用(0)

    其他类型引用(1)

图(8)  /  表(1)
计量
  • 文章访问数:  132
  • HTML全文浏览量:  149
  • PDF下载量:  32
  • 被引次数: 1
出版历程
  • 收稿日期:  2022-01-02
  • 刊出日期:  2022-05-30

目录

/

返回文章
返回