World Locking Tools for Unity
坐标系
World Locking Tools提供了一个稳定的世界锁定坐标系.
这种从不稳定的坐标空间到世界锁定坐标系的转换是分布进行的.
每一步的中间坐标系都有一个名称.
WorldLockingManager提供了这些空间之间的变换,例如FrozenFromSpongy
Spongy Space
Unity全局坐标空间(与WLT无关,空间中的物体会出现漂移问题).
Play Space
海绵状空间的位置/旋转变换,可用于实现传送等功能.
Locked Space
由FrozenWolrd引擎计算并由WLT实现的世界锁定空间.锁定空间中的静止物体将相对于物理世界中的特征保持固定.但是,其坐标数值是任意的.
Pinned Spcae
锁定空间的一种变换,用于将坐标映射到物理世界.具有位置(x,y,z)的物体将出现在相对于物理世界特征的已知预定位置.
Frozen Space
Pinned空间的位置/旋转变换,允许应用程序对相机层次应用任意变换.
SessionOrigin
定义
SessionOrigin是相机绑定的变换对象.它允许在虚拟场景中放值相机,而且它定义了一个特殊的坐标空间.
与Unity(以及所有现代渲染引擎)的父子关系变换一样,修改父对象的全局姿势将改变子对象的全局姿势.然而相机并不渲染,它只决定渲染器的视角
示例(Unity)
一个非常简单的Unity场景
相机在原点(0,0,0),而红球在(0,0,10).
然后,用户向红球靠近了9m.
我们有两种方式:
1.将相机移动到(0,0,9).
2.将红球移动到(0,0,1).
两种方法的唯一区别是两个对象的绝对全局坐标.而相对坐标,在任何情况下都是相同的.
对于方法一,如果我们设置相机的坐标,它们将被跟踪系统覆盖。相反,我们将相机附加到父对象,然后移动父对象。跟踪器设置相机机的局部姿势,从而相对于父对象移动相机。父对象现在是SessionOrigin。
随着场景复杂性增加,移动所有对象变得更加复杂.而通过SessionOrigin移动相机始终是相同的操作.
示例(AR)
一个简单的AR场景
除了相机和红球,还有物理环境中的绿椅.
现在,我们通过SessionOrigin移动相机到红球附近.虽然红球看起来更近了,但是绿椅却处于原地.
如果在椅子上有定位点,则定位点应与椅子保持一致.
解释
在AR应用程序中,Unity的全局坐标系在默认情况下是任意定位的。除了将重力矢量(Y轴)与“上”对齐外,位置和方向完全由跟踪器在启动时放置相机的位置决定。
如果上一个例子中,需要保持红球与绿椅的相对位置,我们可以调整SessionOrigin来实现.
如果我们希望(0,0,10)处的球体沿X轴距离椅子1米,那么我们希望椅子位于(-1,0,10)。如果当相机位于原点时,我们确定相机直接沿负Z轴从椅子向后2米,那么椅子当前位于(0,0,2)。(请记住,物理对象没有固有的坐标,只有靠近摄影机和虚拟对象所暗示的坐标)。
但是,如果我们将SessionOrigin变换设置为(-1,0,8),现在摄影机的位置为(-1,0,8)。正前方2米处的椅子位于(-1,0,10)。红色球体(0,0,10)将根据需要显示在椅子右侧1米处。
因此,我们有效地使用SessionOrgin变换来重新定位Unity的全局空间,以便红色球体和所有其他全局对象恰好出现在相对于物理世界的正确位置。
Space Pins
Space Pinning特性可以解决"漂移"问题和"比例"问题.
漂移问题
当“靠近”一个 Space Pin 时,该 Space Pin 在世界锁定空间中的姿势将与 Space Pin 在建模空间中的姿势相同。
考虑在全局坐标 (0, 0, 1) 处建模的 Unity 场景中的立方体。当场景加载到 HoloLens 时,立方体将出现在初始头部姿势前方 1 米处。根据最初的头部姿势,这可能在物理房间的任何地方。
Space Pin 允许将该立方体锁定到房间中的真实世界特征,例如特定桌子的角落。与使用空间锚点锁定立方体不同,Space Pin 移动整个 Unity 空间,使立方体与桌角对齐。因此,例如,在 Unity 中相对于立方体建模的其他桌面项目将正确分散在真实桌面上。
比例问题
多个Space Pins提供了比例错误的解决方案.当靠近任何特定的 Space Pin 时,世界将根据该 Space Pin 对齐.当用户在 Space Pin 之间移动时,平滑的插值可以最大限度地减少空间中任何给定点的比例误差.以足够密度的空间引脚作为参考点,现实世界和虚拟特征的错位可以减少到头部跟踪器误差的数量级。
虽然所需的空间引脚密度取决于环境支持的跟踪质量和应用程序的精度要求,但这里的一些数字可能有助于设定期望值。在具有足够照明和跟踪可见特征的办公室环境中,空间引脚之间的间距为10米,可减少10米以上10-20厘米的累积误差到毫米误差(最大误差l.t.0.5厘米,端点处0.0误差).
插值和外推
插值和外推都是在未进行直接测量的情况下估算数据值的技术。如前所述,空间引脚是进行测量的位置。虚拟坐标是所需的坐标,物理坐标是我们希望这些虚拟坐标出现的测量坐标。
系统执行插值,但不执行外推,如下所述。一般来说,插值比外推更安全、更稳定。提供的分段线性插值将满足大多数应用的需要。外推不太安全,其理想实现通常需要应用程序级别的知识。因此,由应用程序处理如下所述的外推。
在应用程序不添加外推接点的情况下,接点边界外的空间由最近边界
处的值专门固定。如果只有两个针A和B,则当用户从A移动到B时,针脚会在A指定的针脚和B指定的针脚之间混合(插值)。但是当用户通过B时,针锁定到B(常数扩展)指定的位置。
插值
在pin之间的2D区域中,空间定位是线性插值的。这意味着,如果准确放置空间针,并且跟踪误差均匀分布在该区域上,则在空间销之间应用的校正将完全正确。
外推
外推详见链接