如何快速生成全球任意路网?51WORLD工程师为你揭晓

9个月前 (02-09) 阅读数 196 #科技
文章标签 大数据

近日,51WORLD高级工程师彭博在Unreal Fest Shanghai 2024大会上进行了以“克隆地球之路”为主题的分享。以下是演讲文稿整理。

本次分享的主题地球克隆之路有两层含义,第一层,表达我们公司正走在克隆地球的路上。第二层,借此重点分享51WORLD在地球克隆之路上,有关道路要素的数据定义、实时生成、实时编辑和动态车流的一些思考和实践。

51WORLD高级工程师彭博

数据定义

为了实现克隆整个地球的核心愿景,在数据设计上我们定了三个目标:

1.兼容全球最大的开源地图数据库OpenStreetMap的道路数据

2.支持路口独立编辑

3.支持车道级编辑

基于OpenStreetMap,我们定义了自己的道路数据规格,仍用LineString表达道路的中心线,增加了记录道路的连接关系,PrefabId来记录道路所用的预制体风格。路口的几何使用多边形来表达。路口同样拥有自己的PrefabId来记录预制体风格。

实时生成

数据准备好之后我们开始进入实时生成环节,实时生成的起点源自AesEarthActor。创建后,它会进行数据读取和初始化各种系统。其中最主要的就是初始化MarkerSystem和LodSystem。

MarkerSystem是一个异步生成系统,可以实时异步处理海量的相互依赖数据(Marker),生成整个可渲染的地球。

LodSystem基于四叉树调度,通过MarkerSystem处理相互依赖的Marker数据,以满足RoadPayload的需求。

由依赖关系形成的依赖图大致可分为读取数据与转换数据、执行生成、提交生成结果三个部分。

我们提供了两种解决方案来优化提交的性能和渲染的性能。第一个是InstancedSplineMesh解决方案,其目标是让实例化静态网格体也能产生样条线变形,并支持Nanite。

但当场景中实例太多时,碰撞生成也会成为性能的瓶颈。为了降低碰撞提交开销,我们在异步创建碰撞时直接构造ChaosTriMesh,省去UBodySetup的CreatePhysicsMeshes时间,使用时则在主线程设置给Component。
以上三个部分其实只是完整依赖图的冰山一角,现在展示的是MarkerSystem中其他Marker对道路相关Marker的依赖,基于此系统,就能产出包括CPU的和GPU的各种各样的数据。

实时编辑

在代码实现上,线的编辑可分为三个方面:数据表达,拾取检测和可视化。

Way为编辑器内的道路和路口的数据结构。EntityArray为选中范围内的可编辑数据的集合。每个EntityArray都会进行八叉树的构建,用于点和线的拾取检测。渲染数据时,则用UE自带的UPointSetComponent渲染点的集合,用UAesEditorLineSetComponent渲染线的集合。

为了简化玩家编辑道路时陷入无穷无尽的参数配置的困局中,我们提供了不同道路类型的Prefab用于绘制或替换已绘制的道路。

编辑时还伴随着生成结果的预览。预览生成的实现依托于程序化资产系统中的资产创作工具。预览时会生成临时对象,通过读取道路矢量数据和Prefab信息生成特殊的预览模型。当最终落笔完成时,会调用编辑器的更新流程去更新生成物。

动态车流

路建好了,怎么能不通车呢,所以我们尝试在这套系统上生成动态车流。

在UE4中,我们借助了HoudiniNiagara插件,将寻路网络保存为HoudiniPointCache并在Niagara中采样。在UE5的方案选型时,我们则采用了Mass AI + CitySample工程中的Traffic插件为学习、扩展、维护提供更为完善的保障。

对于不了解Mass Traffic的朋友,我们提供了一些MassTraffic的入门参考,并在此列举Mass Traffic系统的使用流程。

先创建车辆和交叉口的EntityAsset,然后放置并配置MassSpawner,配置TagInfo和LaneProfile,绘制ZoneShapeComponent,再点击Build ZoneGraph构建ZoneGraph,最后运行关卡,虚幻引擎就会自动生成可以动的车流。

方案实践时,我们主要面临4个问题。

第一个问题是Traffic插件在每个引擎版本下都有差异,为了维护方便,我们需要插件能一份代码同时兼容UE5.1-UE5.4。

第二个问题最为致命,Build->Build ZoneGraph是WITH_EDITOR的,我们需要能运行时构建ZoneGraph。为了解决这个问题,我们通过对齐,然后通过路网信息,分别构建路口的Polygon和道路的Spline。接着扩展FZoneGraphBuilder,使其能接收注册,并生成FZoneGraphStorage。最后FZoneGraphStorage种完成注册。

第三个问题在于,在路网封闭的条件下,ZoneGraph才能持续不断地寻路,而现实的路网数据充满断头路,我们需要让断头路也能寻路,所以我们制定了相关规则解决了这个问题。

现在我们来到第四个问题,数据是分地块提交的,寻路无法在不同地块的ZoneGraphData间进行。该问题目前无法解决,只能增加限制,以保证不会发生崩溃。

解决完以上四个问题,整个地球任意地块的寻路网络就能正常构建,车流就能正常生成。

我们坚信,尽管克隆地球之路漫长且充满挑战,但我们对于构建一个真实、完整、恒久的数字地球的承诺坚定不移。我们诚邀您继续关注51Earth,加入我们的Builder和Developer大家庭。

了解更多产品及解决方案

可扫描下方二维码

添加小秘书阿文



51WORLD是一家致力于克隆地球5.1亿平方公里的科技公司,通过建立一个数字孪生世界来改变世界。公司长期围绕3D图形、物理仿真及人工智能三大技术构建核心竞争力,已面向企业端与用户端推出三款核心产品:51Aes数字孪生平台,51Sim数据仿真平台,51Earth数字地球平台,并已被全球超千家大中型企业广泛应用。
▼点击阅读原文了解更多

版权声明

本文仅作者转发或者创作,不代表旺旺头条立场。
如有侵权请联系站长删除

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

热门