对SceneGraph的简单理解

文章目录

      • 概述
      • 游戏引擎中的场景图
      • 图像中的场景图
      • openscenario中的场景图
      • 场景图和BVH(Bounding volume hierarchy)

概述

根据维基百科对该词条的介绍,Scene Graph就是一个树结构。这个概念主要应用于矢量图形编辑3D场景。矢量图形编辑不是很了解,3D场景中的scene graph可以直接在游戏引擎中看到。此外,在图像中、地图中也有scene graph的概念。

游戏引擎中的场景图

1.Cocos2D-x官方文档中关于scene graph的介绍:

场景图(Scene Graph)是一种安排场景内对象的数据结构,它把场景内所有的 节点(Node) 都包含在一个 树(tree) 上。(场景图虽然叫做"图",但实际使用一个树结构来表示)。”

对SceneGraph的简单理解_第1张图片对SceneGraph的简单理解_第2张图片
2.Unity中的scene graph介绍:

对SceneGraph的简单理解_第3张图片

在 Unity Editor 中我们可以直观的从 Hierarchy 视图中看到整个 Scene Graph 结构。当你移动一个 GameObject 时,它下面的所有子节点也会跟随它一起移动。 从代码的角度看,场景节点中的父子关系并不由 GameObject 负责管理,而是由 Transform 组件去完成。

3.OpenSceneGraph引擎中的scene graph介绍:

场景图是一棵树!很简单,它是发明的最好和最可重用的数据结构之一。通常示意性地绘制,其根在顶部,叶在底部。所有这些都从一个最高的根节点开始,它涵盖了整个虚拟世界,无论是2D还是3D。然后,将世界分解为代表节点的层次结构,这些节点代表对象的空间分组,对象的位置设置,对象的动画或对象之间的逻辑关系的定义,例如管理交通信号灯各种状态的逻辑关系。图的叶子表示物理对象本身,可绘制的几何形状及其材料属性。

图像中的场景图

图像中的内容也可以叫“scene”,所以也有场景分割、场景理解这样的术语。图像中的场景也可以是由objects组成的。有一个研究方向就是“scene graph generation”,可以去知乎、CSDN上搜搜论文推荐。

在论文《Neural Motifs: Scene Graph Parsing with Global Context》中,场景图是这么画的:
对SceneGraph的简单理解_第4张图片
这篇论文使用下面这种“scene graph”代替“sentence”来生成图像内容。

对SceneGraph的简单理解_第5张图片

openscenario中的场景图

Openscenario是德国vtk公司推出的一些列用于自动驾驶仿真的标准之一。如其名字所示,openscenario使用与描述自动驾驶场景的标准化文件格式。目前carla等开源平台也支持openscenario文件格式的导入。
openscenario文件后缀为.xosc,其中xo表示x-open,sc表示scenario。其文本内容是xml格式,主要内容有以下几部分。
对SceneGraph的简单理解_第6张图片
在RoadNetwork节点中包含了Scene Graph节点,具体是什么文件,还没有仔细查看。
对SceneGraph的简单理解_第7张图片

<RoadNetwork>
    <Logics filepath="Tracks/Bin/RQ31_130Limit/RQ31_130Limit.xodr"/>
    <SceneGraph filepath="Tracks/Bin/RQ31_130Limit/RQ31_130Limit.opt.osgb"/>
RoadNetwork>

先码一个CARLA解析OpenSCENARIO文件的教程。

场景图和BVH(Bounding volume hierarchy)

根据维基百科介绍,一个BVH是一个树结构上的一组几何对象。所有几何对象都包裹在形成树的叶子节点的Bounding volume中。然后将这些节点分组为小集合,并包含在较大的Bounding volume内。这些也依次以递归的方式被分组和封装在其他较大的Bounding volume内,最终导致在树的顶部具有单个Bounding volume的树结构。Bounding volume hierarchy结构用于有效地支持对一组几何对象的几种操作,例如在碰撞检测和光线追踪中。

对SceneGraph的简单理解_第8张图片

你可能感兴趣的:(自动驾驶仿真)