
3.4 大场景真实感三维环境渲染
有了三维模型或场景,怎么把这些三维几何模型画出来,产生高逼真度的仿真场景?这就是传统的计算机图形学的核心任务,而如今借助物理级游戏引擎,逐步形成了基于高运行效率的超大规模模型渲染和地形渲染技术。该技术主要想解决的问题是海量地形模型,超大规模交通流和渲染服务器硬件算力之间的矛盾,这就要求尽可能降低地形模型的几何复杂度,减少实时绘制的数据量,提高整个场景的绘制效率,该领域所实现的技术工作主要集中在地形网格底层数据载体(OpenDRIVE)的快速加载、三维场景的关卡化管理和异步加载与卸载、动态模型和其他三维模型的LOD(Levels Of Detail,多细节层次)优化与呈现。大场景真实感渲染还原参见图3-3。

图3-3 大场景真实感渲染还原
大场景真实感三维环境渲染作为大规模场景构建的基础,首先要确定适合仿真、编辑和可视化的标准路网格式。标准路网格式应包括道路线型、宽度、高程,以及交通标线、信号灯、标志标牌等设施信息。目前,行业内一般采用OpenDRIVE标准格式。地形网格底层数据载体所采用的OpenDRIVE标准格式是对路网结构的描述性文件,文件格式为XML。XML文件种类包含了Road、Junction、Station等诸多道路路网信息,其路网结构化描述如图3-4所示,并支持自定义扩展。

图3-4 路网结构化描述
|- OpenDRIVE
|- header [1]
|- road [1+]
|- controller [0+]
|- junction [0+]
|- junctionGroup [0+]
|- station [0+]
|- road [name, length, id, junction]
|- link
|- type
|- planView
|- elevationProfile
|- lateralProfile
|- lanes
|- objects
|- signals
|- surface
|- railroad
结构的轻量化带来的好处是文件体积较小,解析快速,通过坐标转化的方式,将WGS-84坐标系统转换为渲染引擎内坐标系统,同时基于预设模型库自动/半自动地生成三维场景(生成流程参见图3-5),包括道路、路面标线、标识牌、交通灯、信号杆、龙门架、直立信号杆、停止线、路灯杆、斑马线区域等,仿真场景—三维道路构建如图3-6所示。

图3-5 三维场景生成流程

图3-6 仿真场景—三维道路构建
三维场景提供24小时昼夜变换、大气渲染和自动光照变化的效果。基于时间变化,在不同时段里自动加载不同时间段的渲染参数,包括太阳光角度、太阳光强度、雾的指数、月光强度、天空光的颜色和强度等,如图3-7、图3-8所示。

图3-7 仿真场景—清晨

图3-8 仿真场景—下午
时间参数也会关联场景环境的材质特效参数,当判断夜晚降临后,会自动开启夜景灯光效果,如图3-9所示。

图3-9 仿真场景—夜景灯光效果
除了天空云层效果,场景中还会同步一个天气粒子发射器,用于根据天气参数设置表格生成不同的粒子效果,如区分小雨、中雨、大雨、暴雨、雨夹雪、小雪、中雪、暴雪等的效果。另外,还有对应的材质变化效果,配合白平衡、全局色彩饱和度及对比度、Gamma、色差校正等后处理特效,可以更真实地还原不同的天气情况,以达到仿真模拟的效果。如图3-10、图3-11所示,为雨天和雪天两种不同的天气效果。

图3-10 仿真场景—雨天效果

图3-11 仿真场景—雪天效果
在三维场景规模较大、单机渲染算力无法满足需求的情况下,可以引入物理引擎的关卡流送技术。关卡流送技术可将地图文件加载到内存中,也可从内存中卸载地图文件,并在场景展示过程中切换地图的显示方式。这样一来,场景便能拆分为较小的文件块,只有相关的部分才会占用资源并被渲染。关卡分布在平面网格中,并在视角靠近时流入。实现关卡无缝混合的第一步是创建固定关卡。可将固定关卡视为一个主关卡,主要用于管理哪些关卡将流进和流出。通过渲染引擎的Levels窗口对流送关卡进行管理。流送关卡可与固定关卡重叠,或偏移,创建更大的世界场景。使用流送关卡的流送类型可设为Always Loaded或Blueprint。当流送关卡被设为Always Loaded时,将与固定关卡一同加载,也将与固定关卡一同变为可见状态。它将无视指定的流送体积域,以及来自蓝图或C++代码的所有加载/卸载请求。这类关卡分段常用于将固定关卡中的常见内容拆分为多个“层”,以便将重点区域总是加载在内存中,避免视角平移过程中的不断加载/卸载。Blueprint(蓝图)流送类型的流送关卡实际上会受到关卡流送体积域、蓝图或C++代码的控制。这些关卡可被动态加载或卸载。除了固定关卡,其他所有的关卡都会在小地图中有一个图片和一个在世界中的位置。当关卡里面的内容发生改变时,关卡的这张图片也会被更新。小地图允许你在顶视图预览你的世界,并且通过拖曳各个关卡来设定它们的位置。当拖动关卡时,它们将会捕捉其他关卡的边缘。
大规模场景的渲染性能提升除关卡流送技术之外,多细节层次(Level of Details,LOD)技术更为基础。多细节层次技术根据距离加载不同层级的场景,以控制整体的渲染预算,让整个体验过程非常流畅、顺滑。在微观视角下,采用比较真实的车辆及其周边元素模型。而在中观视角下,则使用更低级别的车辆和道路模型贴图等级,以确保大场景、多车辆交通仿真的流畅3D展示。业界对流畅度的理解基本定义为实现最低帧率不低于30帧/秒。为达到这一目标,数字资产需要支持L1~L5五个层级的LOD,根据可视距离自动切换,以符合从近到远的渲染需求。每个细节程度的层级,需要分别设置不同的加载距离,当渲染摄像机距离超过设置距离时,则隐藏高细节程度的模型。
如表3-1所示为场景分级组织子系统对于层级划分的需求。
表3-1 场景分级组织子系统对于层级划分的需求


图3-12 仿真场景—雪天效果