术语表
操作 (Action)
操作就是在发生代理匹配时执行的行为。操作是一类组件(可由您编写),分为两大种类并可置于对应的游戏对象上:
操作响应 QueryState 的变化,例如代理获取或丢失匹配的数据或者更新其数据。
应用程序逻辑 (Application logic)
这是与纯数字内容交互的传统脚本和组件,不考虑现实世界中的任何对象,也不会与之交互。Unity MARS 不会为应用程序逻辑提供脚本和实用程序。您可以为应用程序的现有 Unity MARS 功能添加自己的逻辑。
功能 (Capability)
给定场景所需的特性。这包括场景是否需要云数据以及 TraitRequirement(用于指定“空间点”、“GPS 坐标”、“模型”、“平面”、“语义标签”、“语音命令”和“面部”等特性)的列表。这些功能可由硬件提供程序或由人工合成数据提供。有关硬件提供程序的更多信息,请参阅功能注入。
配套应用程序 (Companion apps)
用于手机和 AR 头显 (HMD) 的独立可执行程序,使您可以在外部执行与 Unity MARS 相关的一部分任务。这些任务包括:
- 定义代理和条件
- 捕获图像标记和房间平面图
- 使项目资源同步并将这些资源置于现实空间中
- 记录 AR 数据、摄像机跟踪和视频以及同步回 Unity MARS
在 Simulation View 中比较 (Compare in Simulation View)
允许将 Inspector 中定义的任何结果与 Simulation View 做比较。从特定代理进入“比较”模式,将鼠标悬停在 Simulation View 中的数据(例如,表面)上,并在 Inspector 中查看关于为何所选代理与当前鼠标悬停的数据不匹配的反馈。
条件 (Condition)
条件用于定义对世界数据的具体要求,例如平面大小、对齐方式或语义标签(例如,“面部”、“地板”和将来的对象分类标签)。代理通常包含多个条件,其中每个条件描述不同的单个要求。例如,“大桌子”代理可以具有以下条件:IsPlane、PlaneSize (large) 和 Alignment (Horizontal+Up)。Unity MARS 包含适合常见用例的若干条件,并提供 API 来供您编写自己的条件。
数据 ID (Data ID)
自动递增的非重复编号,用于标识与某个数据段关联的代理。每个查询都按同一数据 ID 来提供所有结果数据。
例如,与检测到的给定平面有关的所有语义标签都具有同一数据 ID,因为它们是有关同一表面的信息。
数据库 (Database)
Unity MARS 识别的所有数据的集中存储位置。提供程序和人工合成对象将数据写入数据库。MARSEntities 从数据库读取数据,两者都会查找匹配条件的数据并运行相应操作。数据库提供各种方法来搜索、更新和“保留”数据,以便两个 MARSEntities 不会尝试将内容放置在同一区域。
面部跟踪 (Face tracking)
这是一种可跟踪人脸特征的技术。为了在 Unity MARS 中启用面部跟踪,请使用面部跟踪提供程序。提供程序将面部数据插入数据库,然后根据条件来匹配面部数据。接下来,Unity MARS 以界标的形式访问面部跟踪特征点。
面部表情 (Facial expressions)
与传达视觉状态的概念相对应的单值标签,例如“微笑”、“耸肩”、“张嘴”和“扬眉”等。Unity MARS 当前以两种方式计算面部表情:
- 观察视频流中的视觉界标
- 分析面部网格上的混合变形 (blendshape)
回退 (Fallbacks)
回退定义了 Unity MARS 找不到请求的代理时的处理方法。回退是一种对您试图解决的问题进行划分从而更便于思考的方法。
力 (Forces)
力描述代理上的复杂空间对齐方式(相对于姿态、相对于边缘/表面、相对于占用等)。名称“力”指的是 Unity MARS 使用物理式模拟来平衡多种影响,就像是围绕代理游戏对象的弹簧一样。
功能注入 (Functionality Injection, FI)
这是分离 Unity MARS 片段以便这些片段不会相互依赖的主要方法。模块、组件以及 Unity MARS 的其他功能可以订阅或提供通用功能集。这可以通过使用接口对来实现;接口对可定义提供程序及其订阅者之间的合同。这些接口让订阅者代码可以通过通用接口来访问各个功能,而无需了解提供这些功能的硬件或服务的任何实现细节。还允许在运行时切换提供程序。与数据库相比,功能注入提供了更面向代码的 AR 数据抽象。
硬件提供程序 (Hardware provider)
这是一种作为功能提供程序的代码,可以包裹硬件 SDK 或抽象层并将数据馈入 Unity MARS 中。例如,MARS AR Foundation Providers 包使用 AR Foundation 将设备数据插入数据库中。
头部姿态估算 (Head pose estimation)
这种算法用于确定头部在用户本地坐标系中的位置及其注视的方向。根据提供程序的不同,有时会以 3D 原生形式公开此数据,有时会提取 2D 头部姿势并且必须根据该信息来计算 3D 位置。
集成 (Integrations)
通过外部 API 和工具向 Unity MARS 提供功能和支持。提供程序是集成(例如,ARCore 和 ARKit 提供程序支持依赖于各自平台的 AR 本地化和映射),但集成不只是提供程序。
界标 (Landmark)
指定的一组空间性或几何性数据,例如点、姿态、边缘、样条图、网格、边界区域、眼睛和鼻子等。界标对于定位和对齐非常有用。在 Unity MARS 中,“界标”封装了行业标准的“面部界标”术语。
实时数据 (Live data)
实时数据是现实世界中的数据(与人工合成数据相对),此数据在现实世界中同时生成并由计算机处理。例如,实时数据可能来自视频源。
MARSEntity
这是 Unity MARS 的三个主要构造(代理、代理组和复制器)的基类。这有助于 Unity 创建可应用于任何类型的 Unity MARS 游戏对象的功能(例如数据可视化工具)。
匹配评级 (Match rating)
介于 0(失败)和 1(完美)之间的数字,表示数据集与用户编写的条件和关系的匹配程度。Unity MARS 会汇总条件评级和整个查询的评级来确定匹配程度。
匹配评级有多个级别。例如:
模块 (Module)
Unity MARS 由互不依赖的独立主要功能(例如数据库、功能注入等)组成。这些功能被称为“模块”。
姿态 (Pose)
姿态描述了位置和方向,这一点类似于 Unity 的 Transform 属性。但是,姿态不包含缩放信息,因此需要不同于 Transform 的唯一标识符。有关姿态为何不包含缩放的更多信息,请参阅缩放比。
提供程序 (Provider)
通常指的是 MARS 数据库和 AR 事件的任何外部数据源。在这种情况下,提供程序指的是将此数据源实际传递到 Unity MARS 中的脚本。
代理 (Proxy)
MARS 代理是添加到游戏对象的一种组件,用于指明这个代理代表现实世界中存在的某种对象。定义代理的方法是将一组条件附加到代理。MARS 数据库使用代理根据条件来匹配数据。
代理组 (Proxy Group)
代理组是一种组件,其中包含至少两个代理游戏对象作为子游戏对象。为了使代理组匹配,每个代理上的所有条件都必须匹配,否则如果只是部分条件匹配,都不算作代理组匹配。可以将更多关系添加到此游戏对象,从而对用于匹配这些代理的任何数据施加其他规则或约束。
查询 (Query)
查询是对数据库的持久性请求,用于查找给定条件集的匹配项。找到这些条件后,查询将执行一组给定操作。每个代理或代理组在激活时都会创建查询,但是大多数时候您不会直接处理查询。
查询状态 (Query state)
指的是与代理或代理组所在数据库中的数据进行匹配过程中的阶段。
评级配置 (Rating configuration)
评级配置包含两个数字,这些数字决定条件/关系优化所针对的对象。可以定义为中心(0.001-0.999 之间的数字)或死区(0-0.99 之间的数字):
- 中心:表示在可能匹配项的统计分布中您认为最佳匹配项的位置。
- 死区:表示在理想中心点附近的多大统计分布范围也被视为理想匹配项。
推断 API (Reasoning API)
推断 API 是一项高级功能,所包含的用户脚本可以一次性与整个 MARS 数据库交互,而不是一次与一个特征交互。这允许脚本进行高级推断,并可合并、创建和变异数据。
记录的数据 (Recorded data)
记录的数据指的是已从现实世界捕获并保存的一种数据。它引用并回放现实世界的数据集,而不是人工合成的数据集。记录的数据可能来自配套应用程序或 Editor 中的视频源。
关系 (Relation)
指的是代理组的约束,可评估与两个子代理匹配的现实世界数据之间的关系。
复制器
指的是具有复制器(Replicator)组件的游戏对象。一个复制器包含一个代理或代理组。现有游戏对象与数据库中的数据匹配时,复制器会不断创建新的游戏对象,直至达到您指定的限值。复制器本质上将代理和代理组变成“通用*”规则。
必需子项 (Required children)
代理组的子代理,必须保持这些代理的匹配才能保持代理组的匹配。
语义标签 (Semantic tag)
语义标签是一种特定的特征,其名称就是数据本身。通过查询可以检查是否存在语义标签。
模拟模式 (Simulation Mode)
模拟模式可改变模拟行为方式。它的内置值为:
- Synthetic,用于处理 Unity MARS 内部已建模的环境
- Recorded,用于根据记录的数据来测试 Unity MARS
- Live,用于根据实时数据(例如来自连接的摄像机的视频源)来测试 Unity MARS
Simulation View
Simulation View 是一种自定义的 Unity MARS 视图,可显示根据各种数据源(从人工合成环境、录制流到实时设备视频源)运行的场景。该视图可显示场景如何响应数据快照或随时间变化的数据。该视图按混合的编辑和运行模式运行,可提供一定程度的回放,还允许您同时编辑内容。
人工合成数据 (Synthetic data)
人工创造而不是由现实世界事件生成的数据。出于很多原因,Unity MARS 会使用人工合成数据。在某些用例中,人工合成数据会更好;例如,如果您的应用程序需要使用现实世界中不存在的数据,则可以使用人工合成数据(如果应用程序需要一堵墙,但设备位于野外,您可以使用人工合成数据来创建此墙)。
人工合成数据可用于让许多不同类型的条件汇集到一个适合设计并作为创作依据的语义数据段中(例如,应该生成角色的人工合成点)。
人工合成环境 (Synthetic environments)
这是一种用数据填充 MARS 数据库的虚拟环境,就像这些环境是设备读取的物理环境一样。这些环境是环境管理器 (Environment Manager) 加载的预制件。
人工合成对象 (Synthetic object)
被 Unity MARS 视为现实世界对象的游戏对象。这些游戏对象激活后会将自定义数据写入数据库。
人工合成对象有以下用途:
- 这是用于使模拟环境就像现实环境一样与 Unity MARS 交互的机制。
- 这些模拟的人工合成对象可用于模拟未来的平台功能(例如,通过提供比当前可用标签更详细的语义标签)。
- 人工合成数据可用于让许多不同类型的条件汇集到一个适合设计并作为创作依据的语义数据段中(例如,用于生成角色的合成点)。
特征 (Trait)
代理的一个指定属性(以名称和类型进行定义)。名称可以是数据本身,并与任何内置类型或自定义类型配对。还可以通过名称(即语义标签)来测试特征是否存在(不管其类型或值如何)。
特征就是:
- 如何存储 MARS 数据库中的所有数据
- 操作和条件期望如何读取数据
- 提供程序和人工合成对象如何将它们的数据写入数据库。
特征要求 (Trait requirement)
指定一个给定特征和一个 true/false 值(指示此特征是否为必需)。
Unity MARS
Mixed & Augmented Reality Studio:Unity 扩展和配套应用程序的组合,让用户可以创建跨数字设备并适应现实世界数据的应用程序。
世界比例 (World scale)
指的是 Unity MARS 用于使数字内容显得大于或小于现实世界环境或人工合成环境的体系和缩放因子。需要进行缩放的原因通常是将游戏对象缩放为极大或极小的比例在许多 Unity 系统(例如物理和导航网格)中都无法正常运行。变通方法是按 n 比例进行缩放处理,并按缩放比进行渲染。