透视Passthrough的局限
透视只是将应用的背景从虚拟的图层替换成了现实图层,类似于P图换了一个背景,这个时候虚拟物体相当于叠加在现实图层之上的元素。在单纯的透视下,虚拟物体和现实物体是毫不相干的,二者之间并不会进行交互。
场景理解的作用
加上场景理解功能,设备就能够理解现实环境,分辨出现实物体在什么位置。因为MR相当于把虚拟和现实融合成了一个新世界,通过场景理解,识别出的现实物体就被当作了MR世界中的一部分,而虚拟物体也属于MR世界中的一部分,因此能够实现虚拟物体和现实物体之间的交互。
场景理解 (Scene Understanding: Meta用Scene API实现) 能用2D平面或3D立方体来代表现实物体的位置和范围,在系统眼中现实世界由不同的2D平面和3D立方体组成。此外,场景理解还能用语义标签来标识这些不同的2D平面或3D立方体,让系统理解标识出的东西具体代表哪一种现实中的物体。
Scene Model场景模型
场景理解使用Scene Model(场景模型)来表示现实环境。场景模型包含了几何(现实物体的范围和边界)和语义(标识一个物体具体是哪种物体)的信息。
Scene Anchor场景锚点
Scene Model由许多Scene Anchor(场景锚点)组成。 每个Scene Anchor存储着一些数据组件 (Component),这些数据组件可能存储着不同种类的数据,用来表示几何和语义信息。
ECS结构
Scene Anchor的内部结构类似于ECS结构。
C代表Component,包含了数据。
E代表Entity,是一系列Component组件的集合。这一系列包含了数据Component组件组成了一个物体,Entity相当于一个ID,标识了这个物体。
S代表System,用来处理Component的数据,执行逻辑。因为ECS是面向数据的思想,所以最终处理的还是Component中 的数据。
在Scene Model当中,每一个Scene Anchor相当于一个Entity。因此一个Scene Anchor中会包含一些不同种类的Component组件,不同种类的组件里存储着不同类型的数据。
Scene Anchor内部结构
因为场景理解基本是用于室内的场景,所以Scene Anchor可以用来表示整个房间,也可以用来表示房间里单独的某个物体。
如果用于表示整个房间,Scene Anchor需要包含RoomLayout组件和AnchorContainer组件。RoomLayout用来表示整个房间的布局,包含天花板,地板,墙壁的布局,因为这三个元素可以构成一个房间。AnchorContainer包含了房间内的所有Scene Anchor。
如果用于表示房间内单独的物体,Scene Anchor需要Locatable组件,Bounded2D或者Bounded3D组件(取决于物体是2D平面还是3D物体),Semantic Classification (语义分类)组件。Locatable组件用来定位物体,表示物体在房间中的位置。Bounded2D/3D组件用来表示物体的边界框,一个Scene Anchor也可以同时拥有2D和3D组件,比如桌子,桌面可以用2D,整个桌子可以用3D。语义分类组件相当于用标签来表示物体是哪一种物体。
Meta官方预定义的语义标签(仍在更新中)
Scene Anchor和Spatial Anchor的区别
Scene anchor 是Quest系统创建的,由系统进行管理。
Spatial anchor 是由应用本身创建的,由用户进行管理。
Space Setup 空间设置
Space Setup 空间设置(以前称为场景捕获)是捕获场景模型的过程。它由 Quest系统管理,因此在设备上运行的所有应用都可以访问相同的环境数据。空间设置是一个用户引导的过程:在设置之前,需要先允许应用访问设备的空间数据。开启了获取空间数据的权限后,首先要扫描环境,获取空间网格,提取空间信息(如地板和天花板的高度,墙壁的位置),然后用户通过修正错误(校准墙壁位置)和添加缺失信息(房间物体)来完成这个过程。
空间设置无法在串流模式下进行。
如何在Quest中进行空间设置
场景理解可以实现什么功能
把虚拟物体放置在物理平面上。比如把虚拟物体放置到现实桌子上;把虚拟相框贴在现实墙壁上。
如何增加放置的真实感
-
Shadow 给虚拟物体增加阴影
-
alignment 校准虚拟物体和现实平面之间的距离和位置,让物体贴合在现实平面上
遮挡 Occlusion
利用场景理解中标记的平面和立方体,我们可以实现用场景理解标记过的现实物体去遮挡虚拟物体。
Scene API和Depth API中的遮挡区别
Scene API只对在空间设置过程中被标记过的,静止不动的物体有效
DepthAPI可以用于动态遮挡
物理碰撞 Physics
被场景理解标记过的现实物体能和虚拟物体产生物理碰撞效果。比如将虚拟的球扔到现实墙壁上,会产生反弹效果。
导航 Navigation
让虚拟物体在现实平面上移动。比如让虚拟人在现实地面上行走。