Hololens 和 Unity 空间坐标系统-CSDN博客文章浏览阅读79次。这意味着,在 X、Y 或 Z 轴上相距 2 个单位的物体,在混合现实中的渲染效果是相距 2 米。虽然左手坐标和右手坐标是最常见的系统,但 3D 软件中也会使用其他坐标系。例如,3D 建模应用程序使用坐标系统,其中 Y 轴指向或远离查看器,Z 轴指向上。在这两个坐标系统中,正 X 轴指向右侧,正 Y 轴指向上方。两者之间的区别在于,在右手坐标系中,Z 轴指向你,而在左侧坐标系中,Z 轴远离你。通常,笛卡尔坐标系称为“右手”或“左手”,因为可以使用手部位置来指示 XYZ 轴的方向。https://blog.csdn.net/loveric/article/details/141267469
设备支持
混合现实体验级别
HoloLens 尚不支持场地参照系。 HoloLens 上的房间级别应用目前需要使用空间映射或场景理解来查找用户的活动区域地面和围墙。
构建“仅限方向”或“坐立空间规模”的体验
Orientation-only or Seated-scale
全息影像渲染的关键是,当用户四处移动时,根据预测的头部运动,改变应用中每一帧全息影像的视角。 如果使用固定参照系,可以创建一个可识别和反映用户头部位置和朝向变化的“坐立空间级别”体验。
有些内容需要忽略头部位置变化,始终保持选定的朝向和距离。 一个显著例子就是 360 度视频:因为视频是在一个单独的固定视角拍摄的,如果视窗的位置根据内容移动,会破坏观影,但视窗的朝向会跟着用户四处观看而转动。 如果使用动态参照系,可以创建“仅朝向”体验。
固定参照系 Stationary frame of reference
固定参照系提供的坐标系统会根据物体在世界中的位置尽可能地让用户附近的物体保持稳定,但同时会反映出用户头部位置的变化。
对于“坐立空间级别”体验,在 Unity 这样的游戏引擎中,采用固定参照系来定义引擎的“世界原点”。位于特定世界坐标的物体,使用固定参照系来定义它们在真实世界中采用相同坐标系时的位置。 在用户四处走动时,有些内容在世界中始终是固定不变的状态,这些内容称为“世界锁定”内容。
应用通常会在启动时创建一个固定参照系,并在整个应用生命周期中使用这个坐标系统。 作为 Unity 中的应用开发人员,你可以开始根据用户头部的起始位置和朝向来确定原点,并基于原点放置内容。 如果用户移动到新的位置并想继续他们的“坐立空间级别”体验,你能够根据他们的新位置重新定位世界原点。
随着时间的推移,系统会识别到更多用户周围环境的信息,它可能会开始判断现实世界中各个点之间的距离比系统之前确定的是更短还是更长。 如果为 HoloLens 中的应用使用固定参照系来渲染全息影像,而用户在 5 米的范围内移动,你可能会观察到应用中全息影像在观察位置出现漂移。 所以如果你的应用需要用户在超过 5 米的范围移动,你可以创建一个世界级别体验,这会需要额外的技术来保持全息影像的稳定,详见下文。
动态参照系 Attached frame of reference
动态参照系会跟着用户移动,它会在参照系刚创建时确定一个固定的朝向。 这使用户在观看按该参照系确定位置的内容时会感到很舒适。 按照这种与用户相关的方式渲染的内容称为“身体锁定”内容。
当头戴显示设备无法确定它在世界中的位置时,动态参照系可提供唯一的坐标系统来渲染全息影像。 这使得它非常适合用于显示回退用户界面,来告知用户其设备无法在世界中发现他们。 “坐立空间级别”或更高级别的应用应含有“仅朝向”的回退信息,帮助用户通过使用与混合现实主页中类似的用户界面在应用中继续操作。
创建一个“站立空间级别”或“房间级别”体验
Standing-scale or Room-scale
在沉浸式头戴显示设备上提供比“坐立空间级别”更高级别的“站立空间级别”体验时,可以使用场地参照系。
若要提供“房间级别”体验,让用户能够在他们预先设定的 5 米范围边界内移动,你还可以添加“场地边界”。
场地参照系 Stage frame of reference
首次设置沉浸式头戴显示设备时,用户将定义一个场地,代表他们在混合现实中体验时的活动区域。 场地最小限度地定义了场地原点,用户使用设备时选择的地板位置和自己所面向的朝向确定了空间坐标系统。 在这个场地坐标系统下,将内容放置在坐标为 Y=0 的地板平面上,可以确保全息影像在用户站立时显示得很自然,这就是“站立空间级别”体验。
场地边界 Stage bounds
用户也可以自主定义场地边界,也就是在清理出的活动区域中定义一个用来在混合现实中移动的区域。 如果是这种情况,应用可以创建一个“房间级别”体验,使用边界来确保全息影像始终位于用户可及的范围内。
由于场地参照系使用单一固定坐标系来显示依赖于地板的内容,因此可以很便捷地用来移植 VR 头戴显示设备上的“站立空间级别”和“房间级别”体验。 但是,在这些 VR 平台上,单一坐标系只能在 5 米(16 英尺)直径内显示稳定内容,超出这个范围则会因为杆臂效应导致在系统调整时远离中心的内容产生明显的漂移。 为了能够移动超过 5 米,需要空间定位点。
创建“世界规模”体验
World-scale
Hololens 允许用户移动超过 5 米,是真正的“世界级别”体验。 创建一个“世界级别”的应用,要使用比“房间级别”体验更多的技术。
为什么单一精确坐标系统的使用范围不能超过 5 米
如今,在编写游戏、数据可视化应用或虚拟现实应用时,典型的方法是建立一个所有其他坐标都能可靠映射回的绝对世界坐标系。 在这种环境下,存在一个稳定的转换方式来定义世界中任何两个物体之间的关系。 如果不移动这些对象,它们的相对变换将始终保持不变。 在渲染一个事先知晓其中所有几何信息的纯虚拟世界时,这种全局坐标系可以发挥很好的作用。 现在,房间规模 VR 应用通常会建立这种绝对房间规模坐标系,其原点在地板上。
相比之下,HoloLens 等不受限制的混合现实设备通过动态传感器来理解世界,当用户在建筑物的整个楼层行走数米时,会不断调整其对周围环境的了解。 在“世界级别”体验里,如果根据单一精确坐标系来显示全息影像,这些影像总是会随时间推移发生漂移,无论是它们与世界之间还是它们彼此之间。
例如,头戴显示设备当前可能认为世界上的两个位置相距 4 米,然后再完善这种理解,了解到这些位置实际上相距 3.9 米。 如果这些全息影像最初被放在一个单一的刚性坐标系中,相距 4 米,那么其中一个将始终与现实世界相差 0.1 米。
空间定位点 Spatial anchors
在 Windows 混合现实中,你可以创建空间定位点来解决前述问题,也就是在世界中标记出用户放置全息影像时的重要放置点。 空间定位点表示系统应随时间跟踪的世界上的重要点。
随着设备对世界越来越了解,这些空间定位点可以根据需要调整相互间的位置,以确保每个定位点精确位于基于真实世界所放置的位置。 通过在用户放置全息影像的位置放置空间定位点,然后基于全息影像的空间定位点来定位该全息影像,可以确保即使在用户漫游数十米的情况下,全息影像也能保持最佳稳定性。
空间定位点会持续地根据其他的定位点进行调整,这是采用空间定位点的坐标系与固定参照系的主要区别:
固定参照系中的各全息影像彼此之间始终保持严格的位置关系。 但是当用户长距离移动后,该参照系的坐标系统可能会基于世界中的情况发生漂移,确保用户附近的全息影像显示稳定。
场地参照系中的全息影像也相互之间保持严格的位置关系。 相比于固定参照系,场地参照系始终基于其设定的物理原点保持固定不变。 但是,当场地坐标系中渲染的内容超出其 5 米边界时,就只有当用户站在该边界内时才会稳定显示。
根据某个空间定位点显示的全息影像,可能会根据使用另一个空间定位点的全息影像发生漂移。 这使得 Windows 能改进它对各个定位点位置的了解,即使(例如)是在一个定位点需要向左调整,另一个需要向右调整的情况下也是如此。
相比于固定参照系始终为了用户附近的稳定性进行优化,场地参照系和空间定位点则是为了确保其原点附近的稳定性而优化。 这有利于全息影像随时间推移能始终保持在准确的位置,但也意味着离坐标系原点过远的影像会受到非常大的杆臂效应的影响。 这是因为场地或定位点的位置和朝向上微小的调整会依据与原点的距离等比例放大。
一个好的经验法则是,确保根据遥远的空间定位点的坐标系渲染的所有物体位于距离其原点 3 米内的范围。 对于附近的场地原点,渲染远处的内容是没问题的,因为在用户的视野里,任何增加的位置错误只会影响发生很少漂移的小全息影像。
空间定位点的持久性 Spatial anchor persistence
空间定位点还可以让你的应用记住重要的位置,即使是在应用挂起或设备关闭后。
你可以将应用创建的空间定位点保存在硬盘中,并在下一次体验时重新加载回来,方法是将它们保存在应用的“空间定位点存储”中。 在保存和加载定位点时,你需要提供一个对应用而言有意义的关键词,用于唯一标识定位点。 可以将这些关键词理解为定位点的文件名。 如果想将其他的数据与定位点关联起来,例如用户放置在该位置的 3D 模型,可以将这些数据保存在应用的本地存储中,并将其与你选择的关键词关联起来。
通过将定位点持久保存在存储中,你的用户可以放置单独的全息影像或在周围设置工作空间,将全息影像放置在各处,并在后续的使用中找到它们。
还可以使用 Azure 空间定位点在 HoloLens、iOS 和 Android 设备上实现异步全息影像持久性。 通过共享持久的云空间定位点,多个设备可以随着时间推移观察相同的持久全息影像,即使这些设备没有同时出现,也是如此。
空间定位点共享 Spatial anchor sharing
应用还可以与其他设备实时共享空间定位点,从而提供实时共享体验。
通过使用 Azure 空间定位点,应用可以跨多个 HoloLens、iOS 和 Android 设备共享空间定位点。 通过使每个设备使用相同的空间定位点呈现全息影像,所有用户将看到全息影像显示在现实世界中的相同位置。