场景理解(Scene Understanding,Meta用Scene API实现)能用2D
平面或3D立方体来代表现实物体的位置和范围,在系统眼中现实世界由不同的2D平面和3D立方体组成。此外,场景理解还能用语义标签来标识这些不同的2D平面或3D立方体,让系统理解标识出的东西具体代表哪一种现实中的物体。
Scene Anchor场景锚点
Scene Model由许多Scene Anchor(场景锚点)组成。
每个Scene Anchor存储着一些数据组件(Component),这些数据组件可能存储着不同种类的数据,用来表示几何和语义信息;
ECS结构
Scene Anchor的内部结构类似于ECS结构。
在Scene Model当中,每一个Scene Anchor相当于一个Entity。
因此一个Scene Anchor中会包含一些不同种类的Component组件,不同种类的组件里存储着不同类型的数据。
说人话就是,Scene Anchor→Entity = 实体对象
Component = 组件 = 包含了数据的程序
System就是引擎的这个大系统,能够执行工作中的逻辑。
Scene Anchor的内部结构
因为场景理解基本是用于室内的场景,所以Scene Anchor可以用来表示整个房间,也可以用来表示房间里单独的某个物体。
Meta官方预定的语义标签
未来还可能会有更多
Scene Anchor和Spatial Anchor的区别
Scene anchor 是 Quest 系统创建的,由系统进行管理。 Spatial anchor 是由应用本身创建的,由用户进行管理。
Space Setup 空间设置
- Space Setup 空间设置(以前称为场景捕获)是捕场景模型的过程。它由 Quest系统管理,因此在设备上运行的所有应用都可以访问相同的环境数据。
- 空间设置是一个用户引导的过程:在设置之前,需要先允许应用访问设备的空间数据。开启了获取空间数据的权限后,首先要扫描环境,获取空间网格,提取空间信息(如地板和天花板的高度,墙壁的位置),然后用户通过修正错误(校准墙壁位置)和添加缺失信息(房间物体)来完成这个过程。
- 空间设置无法在串流模式下进行。
空间设置的这个过程,简单讲就是头显的佩戴者,依靠某些方式(比如用手柄扫描,头显的摄像机扫描),将透视的现实空间,经过一定程度的简化,抽象成具有虚拟边界的虚拟空间。
Quest进行空间设置:设置面板->实际空间->空间设置
场景理解能够实现的功能
放置 Placement
把虚拟物体放置在物理平面上。比如把虚拟物体放置到现实桌子上;把虚拟相框贴在现实墙壁上。
如何增加放置的真实感
- Shadow 给虚拟物体增加阴影
- alignment 校准虚拟物体和现实平面之间的距离和位置,让物体贴合在现实平面上
遮挡 Occlusion
利用场景理解中标记的平面和立方体,我们可以实现用场景理解标记过的现实物体去遮挡虚拟物体。
因为场景理解的颗粒度太大了,几乎无法将现实空间中的物体细节还原出来,只能描摹个大概轮廓,任何形状的物体都被当作了2D平面或者3D立方体,出现下面这种情况就很容易失真。
上面是Scene API的遮挡效果,已经说过,在一些情况下可能会失真,这是因为Scene API的空间数据是静态存储的,一旦经过了之前的空间设置,虚拟空间就这样不变了,就好像之前一个椅子在这里生成了一个立方体,但你移动这把椅子,这个立方体还在那不动,所以Scene API更适合于模拟那些不需要移动的现实物体的空间环境。
而DepthAPI可以用于动态遮挡,比如可以实现现实中的手与虚拟物体之间的遮挡,因为手的位置是移动的,与虚拟物体之间的相对位置就会发生变化,所以需要对它们的遮挡关系进行动态计算处理。
物理碰撞 Physics
被场景理解标记过的现实物体能和虚拟物体产生物理碰撞效果。比如将虚拟的球扔到现实墻壁上,会产生反弹效果。
导航 Navigation
让虚拟物体在现实平面上移动。比如让虚拟人在现实地面上行走。