因为可用的资料比较少,就记录下吧,大家也可以少走弯路,节省时间。
场景理解,通俗的讲,可以识别空间当中的墙面、地板、天花板、平台等.
场景理解(Scene Understanding)是指 HoloLens2 通过深度传感器、摄像头和计算机视觉算法等技术,能够对周围的物体、空间和用户的动作进行理解和分析。这使得 HoloLens2 可以根据场景进行自适应的显示和交互,为用户提供更加真实和自然的 AR 体验。
场景理解可转换混合现实设备捕获的非结构化环境传感器数据,并将其转换为强大的抽象表示形式。
混合现实设备会不断集成它在环境中看到的内容信息(传感器数据)。 场景理解SDK汇总所有这些数据源,并生成单一且一致的抽象。
场景理解生成场景,这是 一个场景Object 的构成,表示单个事物的实例, (例如墙/天花板/地板。) 场景对象本身是 [SceneComponents, 它代表构成此 SceneObject 的更精细的片段。 组件的示例包括四边形和网格,但未来可能表示边界框、冲突网格、元数据等。
场景理解观察程序 - MRTK 2 | Microsoft Learn
场景理解概述
场景理解 - Mixed Reality | Microsoft Learn
场景理解 SDK 概述
场景理解 SDK - Mixed Reality | Microsoft Learn
一)、启动样例场景
最好理解的方式找个样例跑起来看下效果. 刚好MRTK当中有样例。
SceneUnderstandingExample, 现在关键是要把例子跑起来, 这个花了不少时间,因为资料比较少.
我用的unity版本为2020.3.42版本,这个版本影响应该问题不大.
第一步,先给项目引入SDK包, 从MRTK Tools中导入SceneUnderstanding包
第二步,
Library\PackageCache\com.microsoft.mixedreality.toolkit.foundation@f2323a9b7aec\Providers\Experimental\WindowsSceneUnderstanding\WindowsSceneUnderstandingObserver.cs(1491,72): error CS7069: Reference to type 'Vector2' claims it is defined in 'System.Numerics', but it could not be found 会有这个报错。
需要在Player当中,设置兼容性级别,改为.NET 4.x
到这里场景大概率可以跑起来了。
用到的一些配置,MRTK样例当中已经配置好。
比如说需要启用空间感知系统、观察点是否在间隔上自动更新其观测值、更新的频率,还有支持检测的类型,可以配置墙面、天花板、地板等(也可以后续在代码当中进行配置,设置IMixedRealitySceneUnderstandingObserver observer;
设置observer.SurfaceTypes).
勾选这个可以加载保存的场景文件,在unity编辑器当中进行调试,看到一些效果,这个很方便,如果不知道的话,每次都需要打到HoloLens当中去看效果,很费时间,最初的我就是如此(奔溃).
样例中关键的脚本,DemoSceneUnderstandingController.cs.
二)、效果图
将HoloLens当中保存的.bytes场景文件,放到unity编辑器当中使用,效果图如下:
上面的菜单,
Get meshs: Get RequestMeshData,启用后,该服务将提供表面网格。
Get quads: RequestPlaneData,启用后,该服务将提供表面平面,表示为四边形。
Occlusion: observer.RequestOcclusionMask,启用后,该服务将生成适合空间查询的纹理数据。
下面的菜单:,表示过来检测的空间表面层类型,检测哪些类型。
检测平台Platforms(上面的杯子,是通过DemoSceneUnderstandingController脚本设置的)
检测到墙壁
三)、关键的API
空间表面层类型对应的API解释:
空间感知表面类型枚举 (Microsoft.Mixed Reality.Toolkit.SpatialAwareness) |微软学习
背景:Background 32
不适合已定义曲面类型之一的曲面。
空间表面层类型:
天花板:Ceiling 4
环境的天花板。
地板:Floor 2
环境的地板。
推断:Inferred 128
我们没有观测到的物体
平台:Platform 16. 桌子Platform
可以放置对象的大凸起表面。
可以放置全息影像的较大平面。 它们往往表示桌子、台面和其他较大水平面。
未知:Unknown 1. red椅子。
尚无法分类的曲面。
墙:Wall 8
用户空间内的垂直表面。
世界:World 64
一个无边无际的世界网格。
IMixed现实场景理解观察者接口
IMixedRealitySceneUnderstandingObserver Interface(Microsoft.Mixed Reality.Toolkit.Experimental.SpatialAwareness) |微软学习https://learn.microsoft.com/zh-cn/dotnet/api/microsoft.mixedreality.toolkit.experimental.spatialawareness.imixedrealitysceneunderstandingobserver?view=mixed-reality-toolkit-unity-2020-dotnet-2.8.0