(XR Navigation Network 2024年06月27日)在虚拟环境中,存储大量数据是一项挑战。为了解决这个问题,一些系统会对声学数据进行采样,并在运行时依赖插值。然而,采样过于粗糙会导致运行时难以实现精确的插值。
为了应对这一问题,Microsoft在名为“Geometry-aware spatial interpolation”的专利申请中提出了一个几何感知空间插值的方案。
图2A展示了一个示例性虚拟环境200及其相关采样点210的网格。虚拟环境200包含各种虚拟物体,例如墙壁202。虚拟环境200可以包含任意类型和数量的虚拟物体,比如墙壁、地板、天花板等,以及可移动物体。
在图2A中,采样点210以均匀网格的方式分布在整个虚拟环境200中。每个采样点210可以存储对应虚拟环境位置的环境数据。例如,每个采样点可以存储声学数据、温度数据、气压数据、光传播数据等。
每个采样点210都与虚拟环境200中的坐标关联。系统可以根据这些坐标确定每个采样点210相对于虚拟环境200中几何体的位置。
图2B 展示了虚拟环境200的一部分(图2A中的“2B”区域)及其相关的采样点210。图2B中还显示了每个采样点210的各自安全区域212,用以每个采样点210为中心的圆圈表示。
每个安全区域212 从其对应的采样点210 延伸到虚拟环境200 中最近的几何体或虚拟物体。例如,在图 2B 的实施例中,每个安全区 212 从其相应的采样点 210 延伸,直到安全区 212 到达墙壁 202 的最近部分。
因此,每个安全区域212 可以用其各自的安全距离来表征,安全距离表示其相应采样点 210 到虚拟环境 200 内最近的虚拟物体的距离。每个相应的安全距离可以定义每个安全区域 212 的半径或其他几何特征。
可以采用多种方法选择距离其相关采样点 210 最近的虚拟物体。
在图 2B 的示例中,每个安全距离(以及相应的安全区域 212)从其各自的采样点 210 向最近的虚拟物体的体积内的中点延伸。中点可以选择沿着从采样点 210 延伸并穿过最近的虚拟物体的轴线。
每个安全距离可以存储在其相关采样点 210 的数据结构中。在一个实施例中,安全距离可以有效地提供虚拟环境 200 几何形状的表示,同时仅向每个采样点 210 添加单个值。
可以在运行时利用上面讨论的安全区域 212 来促进为各种用例生成插值值。
例如,如果每个采样点 210 与声学数据相关联,可以使用采样点 210 生成虚拟环境 200 内查询点的内插声学数据。用于采样点 210 的安全区域 212 可以指示使用哪些特定的采样点 210 来生成用于特定查询点的内插声学数据。换句话说,每个各自的安全区域 212 可以指示其关联的采样点 210 可用于生成内插数据的区域。
图2C 说明了虚拟环境 200 中查询点 220A 和 220B 的概念表示。与采样点 210 一样,每个查询点 220A 和 220B 都与虚拟环境 200 中的各自位置坐标相关联。如上所述,可以使用与虚拟环境 200 相关联的一个或多个采样点 210 为查询点 220A 和 220B 生成插值数据。
为了生成查询点 220A 的内插数据,系统可以确定查询点 220A 是否包含在与虚拟环境 200 相关联的采样点 210 的任何安全区域 212 中。例如,系统可以对采样点 210 的安全区域 212 测试查询点 220A,从而确定查询点 220A 是否位于安全区域内。图 2C 示出与采样点 210A 相关联的安全区域 212A 和与采样点 210B 相关联的安全区域 212B 所包含的查询点 220A。
为了确定查询点 220A 包含在一个或多个安全区域 212 中,系统可以利用与包含查询点 220A 的安全区域 212 相关联的采样点 210 来为查询点 220A 生成插值数据。
在图 2C 的示例中,由于采样点 210A 和 210B 的安全区域 212A 和 212B 分别包含查询点 220A,所以可以利用采样点 210A 和 210B 为查询点 220A 生成插值数据。重要的是,安全区域的实现可以防止与查询点分开的采样点用于为查询点生成插值数据。
在一个实施例中,虚拟环境的某些部分可能不包含在安全区域中,从而可能导致在尝试为虚拟环境的这些部分中的查询点生成插值数据时出现问题。在图 2C 中,查询点 220B 不包含在任何安全区域 212 中,但它几乎分别包含在采样点 210B 和 210C 的安全区域 212B 和 212C 中。
系统可以通过生成修改的安全区域来减少虚拟环境中不包含在安全区域中的空间量。安全区域组合可以作为构建存储采样点的数据结构的预计算的一部分和/或作为运行时插值的一部分来执行。
为了组合相邻的安全区域 212 以提供修改的安全区域,系统可以在数据结构中识别相邻的安全区域 212,并确定相邻的安全区域 212 是否与相似的环境数据相关联。如果相邻的安全区域 212 包含类似的环境数据,则系统可以将相邻的安全区域 212 组合以定义修改的安全区域。
作为举例说明,图 2D 示出了修改后的安全区域 214。安全区域 214 分别由采样点 210B 和 210C 相邻的安全区域 212B 和 212C 构成。修改后的安全区域 214 包含相邻安全区域 212B 和 212C 之间的空间,从而包含未被任何单个安全区域 212 包含的查询点 220B。
为了生成查询点 220B 的内插数据,系统可以确定查询点 220B 是否包含在任何修改的安全区域中。在确定查询点 220B 包含在修改的安全区域 214 中后,系统可以利用用于获得修改的安全区域 214 的相邻采样点 210B 和 210C 的环境数据来为查询点 220B 生成插值数据。
如上所述,当相邻安全区域的环境数据不同时,系统可以避免使用相邻安全区域来获得修改的安全区域。例如,位于墙壁两侧的相邻采样点的声学数据不太可能相似。所以,通过预先检查相邻采样点的底层环境数据的相似性,系统可以避免会导致被场景几何/虚拟对象分开的采样点用来为单个查询点生成插值数据的方式组合安全区域。
在一个实施例中,与虚拟环境相关联的数据结构的一个或多个采样点可能位于虚拟环境的几何形状中。
图 3A 示出了示例性虚拟环境 300 的侧视图,其中采样点 310A 和 310B 位于地板 304 上方和墙壁 302 相对两侧的空中坐标处,并且其中采样点 310C 和 310D 位于虚拟环境 300 的地板 304 内。
位于层 304 中的采样点 310C 和 310D 省略了环境数据或包含无效的环境数据,它们在运行时无法用于生成插值数据。
图 3A 同时示出不位于任何安全区域内的查询点 320。例如,查询点 320 位于采样点 310A 的安全区域 312A 下方。如果采样点 310C 具有安全区和可用的环境数据,则可以使用包含查询点 320 的采样点 310A 和 310C 的安全区域构建修改的安全区,从而能够使用采样点 310A 和 310C 为查询点 320 生成插值数据。
对于位于场景几何中的采样点,系统将来自环境其他附近部分的环境数据结合起来,以使所述采样点可用于在运行时生成插值数据。所述操作可以作为预计算来执行,以构建采样点的数据结构,从而在运行时生成插值数据。
在一个实施例中,为了将环境数据和安全区域分配给场景几何包含的采样点,系统确定环境的单个部分是否存在:最接近特定采样点;不包含在虚拟对象中。
例如,为了将环境数据和安全区域分配给位于虚拟环境 300 的地板 304 内的采样点 310C,图 3B 示出了环境 300 的最近部分 316,部分 316 不包含在虚拟环境 300 的任何虚拟对象中。
为响应检测到最近部分 316 的存在,系统可以为最近部分 316 定义安全距离和安全区域 318,如图 3B 所示。
然后,为最近的部分 316 定义的安全距离和/或区域 318 可以分配采样点 310C,如图 3C 所示,其中安全区域 318 以采样点 310C 为中心。除了为最近部分 316 计算的安全区域 318 之外,与最近部分 316 相关联的环境数据可以与位于虚拟环境 300 的几何结构内的采样点 310C 相关联。
在图 3C 的示例中,与所述采样点 310C 相关联的安全区域 318 包含所述查询点 320,使得与所述采样点 310C 相关联的环境数据可用于在运行时为所述查询点 320 生成插值数据。
可以利用上文所讨论的技术产生修改的安全区域。采样点 310C 的安全区 318 可与采样点 310A 的安全区 312A 组合,形成一个修改后的安全区 314,覆盖在安全区 318 和 312A 之间的空间。图 3D 表明,可以利用采样点 310A 和 310C 来为查询点 320 生成插值数据。
在一个实施例中,系统不是确定与采样点 310C 关联的最近部分 316 的安全距离和/或安全区域 318,而是直接为采样点 310C 确定安全距离和/或安全区域 312C,如图 3E 所示。最近部分 316 的安全距离和环境数据可以与采样点 310C 一起存储。
与图 3D 类似,对于相邻的采样点 310A,可以将安全区 312C 与安全区 312A 组合,以提供修改后的安全区 324。图 3F 表明,可以利用采样点 310A 和 310C 来为查询点 320 生成插值数据。
图 4A 示出位于虚拟环境 400 内墙壁 402 的角落附近的查询点 420。查询点 420 位于与采样点 410A 和 410B 相关联的组合安全区域 414 内。然而,采样点 410A 和 410B 相对于查询点 420 位于墙 402 的另一侧,这可能导致使用采样点 410A 和 410B 的环境数据为查询点 420 生成的插值数据是不现实的。
为了应对这种情况,系统可以实现替代插值模式,而不是依赖基于安全区域的方法。图 4B 到 4E 描述了相关的概念表示,包括最近邻插补模式(图 4B)、几何无关插补模式(图 4C)、特定于数据的启发式插补模式(图 4D)和推矢量插补模式(图 4E)。
在图 4B 的最近邻插值模式中,使用坐标最接近查询点 420 坐标的采样点来生成查询点 420 的插值数据。与所选最近邻采样点 410A 结合使用与所选最近邻采样点 410A 接近的一个或多个附加采样点,以生成查询点 420 的内插数据。
在图 4C 的几何无关插值模式中,使用坐标最接近查询点 420 坐标的采样点集生成查询点 420 的插值数据。
在图 4D 所示的特定于数据的启发式插值模式中,选择包含满足一个或多个条件的环境数据的邻近采样点为查询点 420 生成插值数据。
在图 4E 的推向量插值模式中,从查询点 420 扩展推向量 422,并选择推向量 422 指向的最接近查询点 420 的采样点,以生成查询点 420。所述推矢量 422 可以采取各种形式,例如指向虚拟环境 400 内空间中心的矢量,具有与虚拟环境 400 内最近的虚拟对象相关联的法矢量方向的矢量等。
图 5A 示出包括墙壁 502 的示例性虚拟环境 500。图 5A 同时示出与虚拟环境 500 相关联的采样点 510A、510B、510C。
从图 5A 可以看出,采样点 510A、510B、510C 在虚拟环境 500 中是不均匀分布的。每个采样点 510A、510B、510C 存储或与环境数据相关联。例如在声学数据的示例中,每个采样点 510A、510B、510C 可以存储包括环境声学数据的采样点的各自数据结构。
对于相同的虚拟环境,一个非均匀的采样点网格包含的采样点比一个相应的均匀的采样点网格包含的采样点要少,这就为每个采样点留下了更多的空间来解释场景几何,而不是每个采样点的单个安全距离。
图 5B 示出为与虚拟环境 500 相关联的采样点 510B 定义的示例安全区域 512B 的概念表示。系统可以通过从采样点 510B 向外扩展一个或多个体积来确定采样点 510B 的安全区域 512B。在图 5B 中,体积由从采样点 510B 向外延伸的虚点三角形表示。体积可以采取各种形式,如多面体体积。
在一个实施例中,系统利用非均匀网格的多个采样点为单个查询点生成插值数据。例如,对于包含查询点的安全区域,系统可以利用安全区域也包含的其他采样点来为查询点生成插值数据。
在一个实施例中,由单个安全区域包含的多个采样点的安全区域可以组合以提供修改的安全区域。所有安全区域属于修改安全区域的采样点都可以用来为修改安全区域中包含的所有查询点生成插值数据。
图 6 和 7 分别举例的流程图 600 和 700 描述了与促进几何感知空间插值相关的行为。
在图 6 中,602 包括访问包含一组采样点的数据结构,其中所述采样点集的每个采样点与相对于虚拟环境的各自坐标相关联,所述虚拟环境包括一个或多个虚拟对象。
604 包括确定与采样点集合的至少一些采样点关联的各自安全距离,每个各自的安全距离表示从采样点集合的其相关采样点到虚拟环境中最近的虚拟对象的距离,每个各自的安全距离表示其相关采样点的各自安全区域。
606 包括将数据结构内的每个各自的安全距离与其所述采样点集的相关采样点相关联地存储起来。
608A 包括,为了检测该采样集的特定采样点的各自坐标表明该特定采样点在虚拟环境的虚拟对象内的定位,可以确定环境中是否存在最接近该特定采样点且不包含在虚拟对象中的单个部分;为了确定环境的单个部分存在,可以测量环境的单个部分的安全距离,以及将安全距离存储在与特定采样点相关的数据结构中。
608B 包括,为了检测该采样集的特定采样点的各自坐标表明该特定采样点在虚拟环境的虚拟对象内的定位,确定环境中是否存在最接近该特定采样点且不包含在虚拟对象中的单个部分;为了确定环境的单一部分存在,测量特定采样点的安全距离,以及在数据结构中存储与特定采样点相关的安全距离。
610 包括使用所述数据结构生成插值数据。生成内插数据包括确定查询点是否包含在数据结构的一个或多个安全区域中;以及针对确定所述查询点包含在所述一个或多个安全区域中,利用与所述一个或多个安全区域相关联的一个或多个采样点为所述查询点生成内插数据。
在一个实施例中,生成内插数据包括:确定查询点是否包含在一个或多个修改的安全区域中,所述一个或多个修改的安全区域基于与所述数据结构的相邻采样点相关联的相邻安全区域确定;以及为了确定所述查询点包含在一个或多个修改的安全区域中,利用相邻的采样点为所述查询点生成插值数据。
对于虚拟环境中的至少一些查询点,生成内插数据包括利用最近邻内插模式、几何无关内插模式、数据特定的启发式内插模式或推矢量内插模式。
在图 7 中,702 包括访问包含一组采样点的数据