用于快速体积重建的视点相关砖块选择的制作方法

文档序号:22557316发布日期:2020-10-17 02:41阅读:166来源:国知局
用于快速体积重建的视点相关砖块选择的制作方法

相关申请的交叉引用

本申请要求于2017年12月22日提交的题为“viewpointdependentbrickselectionforfastvolummetricrestruction(用于快速体积重建的视点相关砖块选择)”的美国临时专利申请序列号62/610,000的优先权和权益,其全部内容在此通过引用并入本文。本申请还要求于2017年12月22日提交的题为“multi-stageblockmeshsimplificationformultipletargets(用于多个目标的多级区块网格简化)”的美国临时专利申请序列号62/609,990的优先权和权益,其全部内容在此通过引用并入本文。本申请还要求于2017年12月22日提交的题为“cachingandupdatingofdense3dreconstructiondataonmobiledevices(移动设备上密实3d重建数据的缓存和更新)”的美国临时专利申请序列号62/609,962的优先权和权益,其全部内容在此通过引用并入本文。本申请还要求于2017年12月22日提交的题为“methodofocclusionrenderingusingraycastandlivedepth(使用光线投射和实时深度进行遮挡渲染的方法)”的美国临时专利申请序列号62/609,979的优先权和权益,其全部内容在此通过引用并入本文。本申请还要求于2018年7月24日提交的题为“viewpointdependentbrickselectionforfastvolummetricrestruction(用于快速体积重建的视点相关砖块选择)”的美国临时专利申请序列号62/702,761的优先权和权益,其全部内容在此通过引用并入本文。本申请还要求于2018年7月24日提交的题为“cachingandupdatingofdense3dreconstructiondata(密实3d重建数据的缓存和更新)”的美国临时专利申请序列号62/702,740的优先权和权益,其全部内容在此通过引用并入本文。本申请还要求于2018年7月24日提交的题为“methodofocclusionrenderingusingraycastandlivedepth(使用光线投射和实时深度进行遮挡渲染的方法)”的美国临时专利申请序列号62/702,736的优先权和权益,其全部内容在此通过引用并入本文。

本申请总体上涉及使用3d世界重建来渲染场景的跨现实系统。



背景技术:

计算机可以控制人类用户接口以创建x现实(xr或跨现实)环境,在该环境中,由计算机生成被用户所感知(perceive)的xr环境的部分或全部。这些xr环境可以是虚拟现实(vr)、增强现实(ar)和混合现实(mr)环境,其中xr环境的部分或全部可以由计算机部分地使用描述该环境的数据生成。该数据可以描述例如虚拟对象,该虚拟对象可以以用户感应(sense)或感知为物理世界的一部分并且可以与虚拟对象交互的方式来渲染。由于数据是通过用户接口设备(例如,头戴式显示设备)渲染和呈现的,因此用户可能体验到这些虚拟对象。数据可以显示给用户看,或者可以控制播放给用户听的音频,或者可以控制感触(tactile)(或触觉(haptic))接口,从而使用户能够体验到用户感应或感知到感觉虚拟对象的触摸感觉。

xr系统可对许多应用很有用,跨越科学可视化、医学培训、工程设计和原型制作、远程操纵和远程呈现以及个人娱乐等领域。与vr相比,ar和mr包括一个或多个与物理世界的真实对象相关的虚拟对象。虚拟对象与真实对象交互的体验极大地增强了用户使用xr系统的乐趣,也为各种应用打开了大门,这些应用呈现了有关如何改变物理世界的现实且易于理解的信息。



技术实现要素:

本申请的方面涉及用于快速生成包含计算机生成的对象的环境的方法和装置。本文描述的技术可以一起地、分开地或以任何合适的组合来使用。

一些实施例涉及一种操作计算系统以生成场景中的表面的三维(3d)重建的方法。该计算系统通过多个砖块表示场景。每个砖块包括多个体素。该方法包括:从用户佩戴的深度传感器捕获深度图像,所述深度图像包括多个像素,每个像素指示到与所述场景中的所述表面相邻的区域的距离;对所述多个砖块中的每个砖块进行第一接受测试,其中,所述第一接受测试包括:至少部分地基于确定所述多个像素中的像素与所述砖块相交,接受所述砖块以用于进一步的处理;以及基于所接受的砖块生成所述3d重建。

在一些实施例中,该方法进一步包括进行第二接受测试,所述第二接受测试包括接受位于在由所述深度图中的像素指示的背景的前面的砖块。

在一些实施例中,所述第二接受测试包括接受位于在由所述深度图中的像素指示的实心背景或有孔背景的前面的砖块。

在一些实施例中,生成所述3d重建包括:基于所述像素是在所述第一接受测试中还是在所述第二接受测试中被接受来对所接受的像素进行选择处理。

在一些实施例中,顺序执行所述第一接受测试和所述第二接受测试,以使得所述第二接受测试对在所述第一接受测试中既没有被接受也没有被拒绝的砖块执行。

在一些实施例中,确定所述多个像素中的像素与所述砖块相交包括:以所述深度图的坐标来计算到在所述砖块到所述深度图的投影周围的边界框的最小距离和最大距离;以及对于至少一个像素,当所述像素的距离值在最小尺寸和最大尺寸之间时,接受所述砖块。

在一些实施例中,该方法还包括对于在所述第二接受测试中被接受的每个砖块,基于所述最小尺寸是否大于所述深度图中任何像素的所述距离值,对所接受的像素进行选择处理。

在一些实施例中,该方法还包括对于在所述第二接受测试中被接受的每个砖块,基于所述最小尺寸是否大于所述深度图中任何像素的所述距离值,对所接受的像素进行选择处理。

在一些实施例中,该方法还包括当砖块被确定位于在所述深度图中表示的表面的后面时,拒绝所述砖块用于进一步的处理。

在一些实施例中,所述进一步的处理包括:基于所述场景的图像数据,更新所接受的砖块的所述多个体素。

在一些实施例中,确定像素与所述砖块相交包括:将所述砖块的砖块轮廓投影到所述深度图像中。所述砖块轮廓是用于被投影到所述深度图像上的所述砖块的最小边界框。

在一些实施例中,确定所述多个像素的所述部分中的每个像素是否与所述砖块相交包括:针对所述砖块计算最小填充值和最大填充值;对于所述多个像素的所述部分中的每个像素,将由所述像素指示的所述距离与所述砖块的所述最小填充值和所述最大填充值进行比较;以及当由所述像素指示的所述距离在所述最大填充值和所述最小填充值之间时,所述像素被确定为与所述砖块相交。

在一些实施例中,所述深度图像对应于相机平截头体。所述相机平截头体呈3d梯形棱柱的形状。所述方法包括:在进行所述第一接受测试之前,针对所述相机平截头体挑选所述多个砖块的一部分,以产生减少的砖块集。所述第一接受测试是针对所述减少的砖块集进行的。

在一些实施例中,针对所述相机平截头体挑选所述多个砖块的一部分包括:查找容纳所述梯形棱柱的立方轴对齐的边界框(aabb);进行第三接受测试,其中,所述第三接受测试包括:将所述aabb划分为多个子aabb,确定所述多个子aabb中的每一个与所述梯形棱柱相交,当确定所述子aabb不与所述相机平截头体相交时,将对应于所述子aabb的砖块拒绝为在所述相机平截头体的外面;以及重复所述第三接受测试,直到子aabb仅对应一个砖块。

在一些实施例中,确定所述多个子aabb中的每一个与所述梯形棱柱相交包括:确定所述子aabb的至少一个拐角点位于界定所述相机平截头体的每个平面的内部;以及确定所述相机平截头体的每个拐角点位于所述子aabb的内部。

一些实施例涉及一种被配置为生成场景的一部分的三维(3d)重建的计算设备。所述计算设备包括:支撑构件,深度传感器,其被耦合至所述支撑构件,图像传感器,其被耦合至所述支撑构件,中央处理单元(cpu),其被耦合以从所述深度传感器接收深度图像和从所述图像传感器接收视觉图像,以及至少一个非暂时性计算机可读介质,其包括被配置为在所述cpu上执行的计算机可执行指令,所述计算机可执行指令在由所述cpu执行时执行一种方法。所述方法包括:从所述深度传感器捕获深度图像,所述深度图像包括所述场景相邻表面内的区域的表示;至少部分地基于砖块与所述深度图像之间的相交,选择表示所述场景的部分的砖块;以及基于所述视觉图像与所选择的砖块对应的部分来计算3d表示。

在一些实施例中,所述支撑构件包括可穿戴设备。所述cpu被耦合至所述支撑构件。

在一些实施例中,所述支撑构件包括头戴式设备的一部分。

在一些实施例中,所述头戴式设备还包括显示器。

在一些实施例中,所述图像传感器具有限定所述场景内的平截头体的视场。所述场景的所述部分由所述平截头体限定。

一些实施例涉及一种被配置为生成场景的一部分的三维(3d)重建的计算设备。所述计算设备包括:支撑构件,深度传感器,其被耦合至所述支撑构件,中央处理单元(cpu),其被耦合以从所述深度传感器接收深度图像,以及至少一个非暂时性计算机可读介质,其包括被配置为在所述cpu上执行的计算机可执行指令,所述计算机可执行指令在由所述cpu执行时执行一种方法。所述方法包括:至少部分地基于所述深度图,生成或更新与所述场景的所述部分相对应的体素栅格,每个体素包括有符号的距离场(sdf)值,所述有符号的距离场(sdf)值指示从所述场景的所述部分中的对应区域到所述区域的在所述场景的所述部分中的闭合表面的距离;至少部分地基于多个砖块来提取平面数据,每个砖块包括所述体素栅格的一部分并可由砖块id标识;以及将所述平面数据存储在平面数据存储库中。

在一些实施例中,用于砖块的所述砖块id指示所述砖块在所述场景的所述部分中的位置。

在一些实施例中,所述平面数据包括面元,所述面元包括用于所述多个砖块的网格的顶点。

在一些实施例中,提取所述平面数据包括:对于所述多个砖块中的每个砖块,提取最多一个砖块平面。

在一些实施例中,提取所述平面数据包括:对于所述多个砖块提取砖块平面,以及生成全局平面,每个全局平面包括多个砖块平面。

在一些实施例中,提取所述平面数据还包括:为所述砖块平面和所述全局平面分配平面id。

在一些实施例中,对于所述多个砖块提取砖块平面包括:对于所述多个砖块生成砖块网格;将所述砖块网格中的至少一个砖块网格划分为多个子砖块网格;基于所述多个子砖块网格,检测子砖块平面;以及基于所述检测的子砖块平面,对于与所述砖块网格中的所述至少一个砖块网格对应的所述砖块,提取砖块平面。

在一些实施例中,所述平面数据存储库包括:在接收所述深度图之前,对于所述多个砖块中的至少一部分现有砖块平面和现有全局平面,每个所述现有全局平面包括多个所述现有砖块平面。将所述平面数据存储在所述平面数据存储库中包括:用所述平面数据更新所述平面数据存储库中的现有砖块平面和现有全局平面。

在一些实施例中,更新所述平面数据存储库中的现有砖块平面和现有全局平面包括:基于所述平面数据,添加和/或移除和/或替换所述现有砖块平面的一部分。

在一些实施例中,更新所述平面数据存储库中的现有砖块平面和现有全局平面包括:基于所述平面数据,合并和/或拆分所述现有全局平面的一部分。

在一些实施例中,所述方法还包括:基于所述平面数据来更新所述砖块网格,以使得所更新的砖块网格的噪声较小。

一些实施例涉及一种操作计算系统以生成场景的一部分的三维(3d)表示的方法。所述方法包括:从应用接收请求平面几何图形表示的查询;在平面数据存储库中搜索与所述查询相对应的平面数据;根据与所述查询相对应的所述平面数据生成栅格化的平面掩模,所述栅格化的平面掩模包括多个平面覆盖点;根据所请求的平面几何图形表示,至少部分地基于所述栅格化的平面掩模,生成所述场景的所述部分的所述3d表示;以及将所生成的所述场景的所述部分的所述3d表示发送给所述应用。

在一些实施例中,所述查询指示以下至少一个:平面的位置、大小、或取向。

在一些实施例中,所请求的平面几何图形表示选自包括以下项的组:外部矩形平面,内部矩形平面,和多边形平面。

在一些实施例中,生成所述栅格化的平面掩模包括:通过将砖块平面的边界点投影到全局平面上来生成所述平面覆盖点。

在一些实施例中,根据所请求的平面几何图形表示,至少部分地基于所述栅格化的平面掩模,生成所述场景的所述部分的所述3d表示包括:当所请求的平面几何图形表示是外部矩形平面时,生成外部矩形,所述外部矩形是围绕所述栅格化的平面掩模的最小矩形。

在一些实施例中,根据所请求的平面几何图形表示,至少部分地基于所述栅格化的平面掩模,生成所述场景的所述部分的所述3d表示包括:当所请求的平面几何图形表示是内部矩形平面时:通过将“1”分配给具有两个平面覆盖点的砖块并将“0”分配给不具有两个平面覆盖点的砖块,生成栅格化的网格;确定砖块组,每个组包括被标记为“1”并且沿与砖块的边缘平行的线对齐的多个砖块;以及对于所述砖块组生成内部矩形,每个内部矩形是围绕相应的组的最小矩形。

在一些实施例中,根据所请求的平面几何图形表示,至少部分地基于所述栅格化的平面掩模,生成所述场景的所述部分的所述3d表示包括:当所请求的平面几何图形表示是多边形平面时,通过连接所述栅格化的平面掩膜的所述多个平面覆盖点的至少一部分来生成所述多边形,以使得所述多个平面覆盖点都不在所述多边形的外部。

前述发明内容通过举例说明的方式来提供,并且不是旨在进行限制。

附图说明

附图不是旨在按比例绘制。在附图中,在各个附图中示出的每个相同或几乎相同的部件由相同的数字表示。为了清楚起见,并非每个部件都会在每个附图中被标记。在附图中:

图1是示出根据一些实施例的简化的增强现实(ar)场景的示例的示意图。

图2是示出根据一些实施例的包括视觉遮挡、基于物理的交互和环境推理的示例性世界重建用例的示例性简化ar场景的草图。

图3是示出根据一些实施例的ar系统中的数据流的示意图,该ar系统被配置为提供ar内容与物理世界交互的体验。

图4是示出根据一些实施例的ar显示系统的示例的示意图。

图5a是示出根据一些实施例的当用户穿戴随着用户通过物理世界环境移动时渲染ar内容的ar显示系统的示意图。

图5b是示出根据一些实施例的观看光学组件和伴随部件的示意图。

图6是示出根据一些实施例的使用世界重建系统的ar系统的示意图。

图7a是示出根据一些实施例的离散为体素的3d空间的示意图。

图7b是示出根据一些实施例的相对于单个视点的重建范围的示意图。

图7c是示出根据一些实施例的相对于单个位置处的重建范围的感知范围的示意图。

图8a至8f是示出根据一些实施例的通过从多个位置和视点观看物理世界中的表面的图像传感器将该表面重建为体素模型的示意图。

图9是示出根据一些实施例的由包括体素的砖块表示的场景、场景中的表面、以及捕获深度图像中的表面的深度传感器的示意图。

图10a是示出由八个砖块表示的3d空间的示意图。

图10b是示出图10a的砖块中的体素栅格的示意图。

图11是示出根据一些实施例的体积表示层次的示意图。

图12是示出根据一些实施例的操作计算系统以生成场景的3d重建的方法的流程图。

图13是示出根据一些实施例的针对图12中的深度传感器的相机平截头体挑选多个砖块的一部分的方法的流程图。

图14是示出根据一些实施例的进行图13中的相机平截头体接受测试的方法的流程图。

图15是示出根据一些实施例的针对图12中的深度图像挑选第一多个砖块的一部分的方法的流程图。

图16是示出根据一些实施例的进行图15中的第一深度图像接受测试的方法的流程图。

图17是示出根据一些实施例的进行图15中的第二深度图像接受测试的方法的流程图。

图18示出根据一些实施例的相对于图17中的最小砖块值(bmin)和最大砖块值(bmax)对矩形中的所有像素进行分类的方法所使用的表。

图19a至19f是示出根据一些实施例的针对相机平截头体挑选砖块的示意图。

图20a至20b是示出根据一些实施例的针对包括表面的深度图像挑选砖块的示意图。

图21是示出根据一些实施例的平面提取系统的示意图。

图22是示出根据一些实施例的具有关于平面提取的细节的图21的平面提取系统的各部分的示意图。

图23是示出根据一些实施例的由包括体素的砖块表示的场景以及场景中的示例性平面数据的示意图。

图24是示出根据一些实施例的图21的平面数据存储库的示意图。

图25是示出根据一些实施例的当将平面查询发送给图21的平面数据存储库时的平面几何提取的示意图。

图26a是示出根据一些实施例的生成图25的平面覆盖点的示意图。

图26b是示出根据一些实施例的可从示例性栅格化平面掩模(mask)中提取的各种示例性平面几何图形表示的示意图。

图27示出了根据一些实施例的用于场景的网格。

图28a示出了根据一些实施例的由外部矩形平面表示的图27的场景。

图28b示出根据一些实施例的由内部矩形平面表示的图27a的场景。

图28c示出根据一些实施例的由多边形平面表示的图27的场景。

图29示出根据一些实施例的通过对图27中所示的网格进行平面化具有去噪的网格的图27的场景。

图30是示出根据一些实施例的生成由网格表示的环境的模型的方法的流程图。

图31是示出根据一些实施例的通过四个区块的物理世界的一部分的2d表示的示意图。

图32a-32d是示出根据一些实施例的在多级简化期间的示例性网格区块的网格演进的示意图。

图33a和33b分别示出了没有简化的和通过三角形减少进行了简化的相同环境的表示。

图34a和34b分别示出了没有简化的和通过三角形减少进行了简化的相同环境的特写(close-up)表示。

图35a和35b分别示出了没有平面化和具有平面化的相同环境的表示。

图36a和36b分别示出了没有简化的和通过移除断开的部件进行了简化的相同环境的表示。

图37是示出根据一些实施例的为多个用户启用交互式x现实环境的电子系统的示意图。

图38是示出根据一些实施例的图37中的电子系统的部件的交互的示意图。

图39是示出根据一些实施例的操作图37中的电子系统的方法的流程图。

图40是示出根据一些实施例的捕获关于物理世界中的对象的3d信息并将该物理世界表示为图39中的3d重建的区块的方法的流程图。

图41是示出根据一些实施例的选择表示图39中的区块的子集的区块的版本的方法的流程图。

图42是示出根据一些实施例的操作图37中的电子系统的方法的流程图。

图43a是示出根据一些实施例的在由网格区块表示的物理世界的一部分中检测的更新的简化示意图。

图43b是示出根据一些实施例的网格区块的简化示意图。

图43c是示出根据一些实施例的在两个相邻的网格区块的边缘处的裂纹的简化示意图。

图43d是示出根据一些实施例的通过实现与相邻的网格区块重叠的网格侧缘来掩盖(paper)图43c中的裂纹的简化示意图。

图44是示出了根据一些实施例的通过四个区块的物理世界的一部分的2d表示的示意图。

图45是示出了根据一些实施例的通过八个区块的物理世界的一部分的3d表示的示意图。

图46是示出根据一些实施例的通过更新图45中的3d表示获得的物理世界的一部分的3d表示的示意图。

图47是示出了根据一些实施例的佩戴ar显示系统的第一和第二用户可观看的增强世界的示例的示意图。

图48是示出根据一些实施例的通过用区块的新版本更新图47的增强世界而获得的增强世界的示例的示意图。

图49是示出根据一些实施例的遮挡渲染系统的示意图。

图50是示出具有孔的深度图像的示意图。

图51是示出根据一些实施例的在增强现实环境中进行遮挡渲染的方法的流程图。

图52是示出根据一些实施例的根据由图51中的用户佩戴的深度传感器捕获的深度信息生成表面信息的细节的流程图。

图53是示出根据一些实施例的过滤深度信息以生成图52中的深度图的细节的流程图。

图54a是用深度相机从第一视角(pointofview)成像以标识被表面占据的体素和空的体素的区域的草图。

图54b是用深度相机从多个视角成像以标识被表面占据以及空的体素并指示“孔”的区域的草图,对于“孔”,由于“孔”的区域中的体素没有用深度相机成像从而没有可用体积信息。

具体实施方式

本文描述了用于在增强现实(ar)、混合现实(mr)或虚拟现实(vr)系统中创建和使用三维(3d)世界重建的方法和装置。为了向用户提供逼真的ar/mr/vr体验,ar/mr/vr系统必须了解用户的物理环境,以便正确地将虚拟对象的位置与真实对象相关联。可以根据关于那些物理环境的图像和深度信息构建世界重建,该图像和深度信息是由作为ar/mr/vr系统一部分的传感器收集。然后,该世界重建可由这种系统的多个部件中的任何一个部件使用。例如,该世界重建可由执行视觉遮挡处理、计算基于物理的交互或执行环境推理的部件使用。

遮挡处理标识虚拟对象的不应为用户渲染和/或显示给用户的部分,因为在物理世界中存在某个对象会阻止该用户观看将由该用户感知到该虚拟对象的位置。计算基于物理的交互以确定虚拟对象向用户显示的位置或方式。例如,虚拟对象可被渲染,以看起来像被搁在物理对象上、移动通过空的空间或与物理对象的表面碰撞。该世界重建提供了一个模型,从中可以获得有关物理世界中的对象的信息以进行这种计算。

环境推理还可以在生成可用于计算如何渲染虚拟对象的信息的过程中使用世界重建。例如,环境推理可涉及通过识别透明表面是窗玻璃还是玻璃桌面来标识透明表面。根据这种标识,可以将包含物理对象的区域分类为不遮挡虚拟对象,但可被分类为与虚拟对象交互。环境推理还可生成以其他方式使用的信息,例如标识可以相对于用户的视场进行跟踪的固定对象,以计算用户的视场的运动。

然而,在提供这种系统方面存在重大挑战。计算世界重建可能需要大量处理。此外,ar/mr/vr系统必须正确知道如何相对于用户的头部、身体等定位虚拟对象。随着用户相对于物理环境的位置发生变化,物理世界的相关部分也可发生变化,这会需要进一步的处理。而且,经常需要随着对象在物理世界中移动(例如,杯子在桌子上移动)来更新3d重建数据。必须快速执行对表示用户正在体验的环境的数据的更新,而无需使用生成ar/mr/vr环境的计算机的大量计算资源,因为无法在执行世界重建时执行其他功能。此外,通过“消耗”数据的部件来处理重建数据会加剧对计算机资源的需求。

已知的ar/mr/vr系统仅在预定义的重建体积(例如,预定义的体素栅格)内需要高计算能力(例如,gpu)以运行实时世界重建。发明人已经认识并理解了用于操作ar/mr/vr系统以实时地提供准确的3d重建数据而很少使用计算资源(例如,计算能力(例如,单个arm核)、存储器(例如,小于1gb)和网络带宽(例如,小于100mbps))的技术。这些技术涉及减少生成和维护世界重建所需的处理,以及以低计算开销提供和消耗数据。

这些技术可包括例如通过标识随时可用于创建或更新世界重建的传感器数据部分,来减少更新世界重建时处理的数据量。例如,可以基于传感器数据是否表示物理世界的一部分来选择该传感器数据,该物理世界的一部分很可能接近世界重建中所表示的对象的表面。

在一些实施例中,可以通过简化表示世界重建的数据来减少计算资源。更简单的表示可减少用于该数据的处理、存储和/或管理以及其使用的资源。

在一些实施例中,可以通过在可被单独存储和检索的区块中表示物理世界来减少计算资源的使用,但是以提供物理世界的逼真表示的方式来组合。这些区块可以在存储器中管理以限制计算资源,并且在一些实施例中,可以使得能够在相同物理空间中操作的ar/mr/vr系统之间共享区块,从而每个ar/mr/vr系统进行较少的处理以构建世界重建。

在一些实施例中,可以通过在访问关于物理世界的信息时从物理世界的不同表示中进行选择来减少计算资源的使用。世界重建例如可包括从不同传感器捕获和/或以不同格式存储的关于物理世界的信息。消耗或提供的最简单数据可被提供给使用世界重建来渲染虚拟对象的部件。如果更简单的数据不可用,则可以访问使用其他传感器获取的数据,这可生成更高的计算负载。作为示例,世界重建可包括利用深度传感器收集的深度图和3d世界的更繁琐的表示,诸如可被存储为根据图像信息计算的网格。关于物理世界的信息可被提供给基于深度图(可用的情况下)进行遮挡处理的部件。在深度图中有孔的情况下,可以从网格中提取填充这些孔的信息。在一些实施例中,深度图可以是“实时的(live)”,表示在访问数据时由深度传感器捕获的物理世界。

如本文所述的技术可与多种类型的设备一起使用或单独使用以及用于多种类型的场景,包括具有有限计算资源的可穿戴设备或便携式设备,这些资源提供增强现实场景。

ar系统概述

图1-2示出了这样的场景。为了说明的目的,ar系统被用作xr系统的示例。图3-8示出了示例性ar系统,其包括可以根据本文描述的技术进行操作的一个或多个处理器、存储器、传感器和用户接口。

参考图1,描绘了一个ar场景4,其中ar技术的用户看到了物理世界公园状的设置6,其特征在于人、树、背景中的建筑物以及混凝土平台8。除了这些项目之外,ar技术的用户还认为他们“看到”了站在物理世界混凝土平台8上的机器人雕像10、以及飞行着的看起来像是大黄蜂的拟人化的卡通般的化身角色2,即使这些元素(例如,化身角色2和机器人雕像10)在物理世界中不存在。由于人类视觉感知和神经系统的极端复杂性,因此要产生一种在其他虚拟或物理世界图像元素中促进虚拟图像元素的舒适的、感觉自然的、丰富的呈现的ar技术是有挑战的。

这样的ar场景可以通过包括世界重建部件的系统来实现,该系统可以构建和更新用户周围的物理世界表面的表示。该表示可用于在基于物理的交互中遮挡渲染、放置虚拟对象,以及用于虚拟角色路径规划和导航,或用于其中使用有关物理世界的信息的其他操作。图2描绘了ar场景200的另一示例,其示出了根据一些实施例的示例性世界重建用例,包括视觉遮挡202、基于物理的交互204和环境推理206。

示例性场景200是具有墙壁、墙壁一侧上的书架、房间角落处的落地灯、地板、沙发和地板上的咖啡桌的客厅。除了这些物理项目之外,ar技术的用户还感知虚拟对象,诸如沙发后面墙上的图像、飞过门的鸟儿、从书架上窥视的鹿、以及具有放在咖啡桌上的风车形式的装饰品。对于墙壁上的图像,ar技术不仅需要有关墙壁的表面的信息,还需要有关房间内正遮挡图像的对象和表面)的信息(例如灯的形状)以正确渲染虚拟对象。对于飞翔的飞鸟,ar技术需要有关房间周围所有对象和表面的信息,用于以逼真的物理效果渲染鸟儿,以避开对象和表面或在鸟儿碰撞时反弹。对于鹿,ar技术需要有关表面(例如,地板或咖啡桌)的信息,以计算鹿的放置位置。对于风车,系统可以标识其是与桌子分离的对象,并且可以推理它是可移动的,而书架的角落或墙壁的角落可被推理为是固定的。这样的区别可以用于推理关于场景的哪些部分在各种操作的每一个操作中被使用或更新。

可以通过包括多个部件的系统向用户呈现场景,多个部件包括可以刺激一个或多个用户感应(包括视觉声音和/或触摸)的用户接口。另外,该系统可包括可以测量场景的物理部分的参数(包括用户在场景的物理部分内的位置和/或运动)的一个或多个传感器。此外,该系统可包括具有相关联的计算机硬件(例如存储器)的一个或多个计算设备。这些部件可以集成到单个设备中,也可以分布在多个互连的设备中。在一些实施例中,这些部件中的一些或全部可以集成到可穿戴设备中。

图3描绘了根据一些实施例的被配置为提供ar内容与物理世界306交互的体验的ar系统302。ar系统302可包括显示器308。在所示的实施例中,显示器308可以由用户作为头戴式耳机的一部分来佩戴,使得用户可以像一副护目镜或眼镜一样将显示器戴在他们的眼睛上。显示器的至少一部分可以是透明的,使得用户可以观察透视现实(see-throughreality)310。透视现实310可以对应于物理世界306在ar系统302的当前视点内的部分,在用户正戴着并入了ar系统的显示器和传感器的头戴式耳机来获取有关物理世界的信息的情况下,ar系统302的当前视点可对应于用户的视点。

ar内容也可被呈现在显示器308上,覆盖在透视现实310上。为了在显示器308上提供ar内容和透视现实310之间的准确交互,ar系统302可包括被配置为捕获有关物理世界306的信息的传感器322。

传感器322可包括输出深度图312的一个或多个深度传感器。每个深度图312可具有多个像素,每个像素可表示在相对于深度传感器的特定方向上到物理世界306中的表面的距离。原始深度数据可来自深度传感器以创建深度图。这样的深度图可与深度传感器可以形成新图像的速度一样快地被更新,每秒可达成百上千次。但是,该数据可能噪音且不完整,并且在所示的深度图上具有被显示为黑色像素的孔。

系统可包括其他传感器,例如图像传感器。图像传感器可获取可以以其他方式被处理以表示物理世界的信息。例如,可以在世界重建部件316中处理图像以创建网格,该网格表示物理世界中对象的连接部分。有关此类对象的元数据(包括例如颜色和表面纹理)可以类似地通过传感器来获取并被存储为世界重建的一部分。

系统还可以获取关于用户相对于物理世界的头部姿势(headpose)的信息。在一些实施例中,传感器310可包括可用于计算和/或确定头部姿势314的惯性测量单元。用于深度图的头部姿势314可指示传感器以例如六个自由度(6dof)捕获深度图的当前视点,但是头部姿势314可用于其他目的,诸如将图像信息与物理世界的特定部分相关或将佩戴在用户头上的显示器的位置与物理世界相关。在一些实施例中,头部姿势信息可以以不同于imu的其他方式(例如,分析图像中的对象)来推导。

世界重建部件316可接收来自传感器的深度图312和头部姿势314以及任何其他数据,并将该数据集成到重建318中,重建318可至少看起来是单个的组合的重建。重建318可比传感器数据更完整并且噪声更少。世界重建部件316可使用随时间变化的来自多个视点的传感器数据的空间和时间平均来更新重建318。

重建318可包括具有包括例如体素、网格、平面等的一种或多种数据格式的物理世界的表示。不同格式可表示物理世界的相同部分的替代表示,或者可表示物理世界的不同部分。在所示的示例中,在重建318的左侧,物理世界的部分被呈现为全局表面;在重建318的右侧,物理世界的部分被呈现为网格。

重建318可用于ar功能,诸如产生物理世界的表面表示以用于遮挡处理或基于物理的处理。该表面表示可随着用户移动或物理世界中对象的变化而变化。重建318的各方面可例如由产生在世界坐标中变化的全局表面表示的部件320使用,该变化的全局表面表示可由其他部件使用。

ar内容可以基于该信息例如由ar应用304来生成。ar应用304可以是例如基于关于物理世界的信息(例如,视觉遮挡、基于物理的交互和环境推理)执行一个或多个功能的游戏程序。它可以通过查询来自世界重建部件316产生的重建318的不同格式的数据来执行这些功能。在一些实施例中,部件320可被配置为当物理世界的感兴趣区域中的表示变化时输出更新。该感兴趣区域例如可被设置为近似于系统的用户的附近的物理世界的一部分,例如用户视场内的部分,或者被投影(预测/确定)为进入用户的视场。

ar应用304可使用该信息来生成和更新ar内容。ar内容的虚拟部分可与透视现实310结合被呈现在显示器308上,从而创建逼真的用户体验。

在一些实施例中,可以通过可穿戴显示系统向用户提供ar体验。图4示出了可穿戴显示系统80(以下称为“系统80”)的示例。系统80包括头戴式显示设备62(以下称为“显示设备62”)以及各种机械和电子模块和系统以支持显示设备62的功能。显示设备62可耦合至框架64,框架64可由显示系统用户或观看者60(以下称为“用户60”)佩戴并且被配置为将显示设备62定位在用户60的眼睛的前面。根据各种实施例,显示设备62可以是顺序显示器(sequentialdisplay)。显示设备62可以是单眼或双眼的。在一些实施例中,显示设备62可以是图3中的显示器308的示例。

在一些实施例中,扬声器66耦合到框架64并被定位在用户60的耳道附近。在一些实施例中,未示出的另一扬声器定位在用户60的另一耳道附近,以提供立体声/可整形(shapeable)声音控制。显示设备62例如通过有线引线或无线连接68可操作地耦合到本地数据处理模块70,该本地数据处理模块70可以以各种配置来安装,例如固定地附接到框架64,固定地附接到由用户60佩戴的头盔或帽子,嵌入耳机中、或以其他方式可拆卸地连接到用户60(例如,以背包式配置,以皮带耦合式配置)。

本地数据处理模块70可包括处理器以及数字存储器,例如非易失性存储器(例如闪存),两者均可以用于协助数据的处理、缓存和存储。数据包括a)从传感器(其可以例如可操作地耦合到框架64)捕获的或以其他方式附接到用户60(例如图像捕获设备(例如相机)、麦克风、惯性测量单元、加速度计、指南针、gps单元、无线电设备和/或陀螺仪)的,和/或b)使用远程处理模块72和/或远程数据存储库74获取的数据,可能用于在这样的处理或检索之后传递给显示设备62。本地数据处理模块70可以通过通信链路76、78(例如经由有线或无线通信链路)可操作地分别耦合到远程处理模块72和远程数据存储库74,使得这些远程模块72、74可操作地彼此耦合并且可用作本地处理和数据模块70的资源。在一些实施例中,图3中的世界重建部件316可以至少部分地在本地数据处理模块70中实现。例如,本地数据处理模块70可被配置为执行计算机可执行指令以至少部分地基于至少该数据的一部分来生成物理世界表示。

在一些实施例中,本地数据处理模块70可包括被配置为分析和处理数据和/或图像信息的一个或多个处理器(例如,图形处理单元(gpu))。在一些实施例中,本地数据处理模块70可包括单个处理器(例如,单核或多核arm处理器),这将限制模块70的计算预算但是启用更小型的设备。在一些实施例中,世界重建部件316可使用小于单个arm核的计算预算来在非预定义空间上实时生成物理世界表示,使得可以访问单个arm核的剩余计算预算以用于其他目的,例如提取网格。

在一些实施例中,远程数据存储库74可包括数字数据存储设施,其可以通过因特网或“云”资源配置中的其他网络配置来使用。在一些实施例中,所有数据被存储并且所有计算在本地数据处理模块70中被执行,从而允许来自远程模块的完全自主的使用。世界重建例如可以全部或部分地存储在该存储库74中。

在一些实施例中,本地数据处理模块70可操作地耦合到电池82。在一些实施例中,电池82是可拆卸电源,例如在反压(counter)电池上方。在其他实施例中,电池82是锂离子电池。在一些实施例中,电池82既包括在系统80的非操作时间期间可由用户60充电的内部锂离子电池又包括可拆卸电池,使得用户60可以在更长的时间段内操作系统80而不必连接到电源以对锂离子电池充电或者必须关闭系统80以更换电池。

图5a示出了在用户30在物理世界环境32(以下称为“环境32”)中移动时佩戴渲染ar内容的ar显示系统的用户30。用户30将ar显示系统放置在位置34处,并且ar显示系统记录可通行(passable)世界相对于位置34的环境信息(例如,物理世界中的真实对象的数字表示,其可被存储并随着物理世界中的真实对象的变化来更新),例如与映射特征或定向音频输入有关的姿势。位置34被聚集到数据输入36,并且至少由可通行世界模块38处理,这例如可以通过在图3的远程处理模块72上的处理来实现。在一些实施例中,可通行世界模块38可包括世界重建部件316。

可通行世界模块38确定ar内容40可以如从数据输入36确定的那样被放置在物理世界中的位置和方式。通过经由用户接口呈现物理世界的表示和ar内容,ar内容被“放置”在物理世界中,其中ar内容被渲染为好像正在与物理世界中的对象进行交互,并且物理世界中的对象被渲染为好像在适当时ar内容正遮挡用户对这些对象的视线。在一些实施例中,可以通过从重建(例如重建318)中适当地选择固定元素42(例如桌子)的部分来确定ar内容40的形状和位置来放置ar内容。作为示例,固定元素可以是桌子,并且虚拟内容可被放置为使得它看起来好像在该桌子上。在一些实施例中,可以将ar内容放置在视场44中的结构内,该视场可以是当前视场或估计的未来视场。在一些实施例中,可以相对于物理世界的映射网格模型46放置ar内容。

如所描绘的,固定元素42用作物理世界内的任何固定元素的代理,其可被存储在可通行世界模块38中,使得用户30可以感知固定元素42上的内容,而系统不必每当用户30看到它时就映射到固定元素42。固定元素42可以因此是来自先前的建模会话的映射网格模型,或者是根据单独的用户确定的,但是都被存储在可通行世界模块38上,以供多个用户将来参考。因此,可通行世界模块38可以从先前映射的环境中识别环境32并显示ar内容,而无需用户30的设备首先映射环境32,从而节省了计算过程和周期并且避免了任何渲染的ar内容的延迟。

物理世界的映射网格模型46可由ar显示系统创建,并且将用于交互和显示ar内容40的适当的表面和度量可被映射并存储在可通行世界模块38中,以供用户30或其他用户将来检索,而无需重新映射或建模。在一些实施例中,数据输入36是诸如地理位置、用户标识和当前活动之类的输入,以向可通行世界模块38指示一个或多个固定元素中的哪个固定元素42可用、哪个ar内容40最后被放置在固定元素42上、以及是否显示该相同的内容(无论用户观看特定的可通行世界模型与否,该ar内容都是“保留(persistent)”内容)。

图5b示出了观看光学组件48和伴随部件的示意图。在一些实施例中,面向用户眼睛49,两个眼睛跟踪相机50检测用户眼睛49的度量,例如眼睛形状、眼睑遮挡、瞳孔方向和用户眼睛49上的闪烁(glint)。在一些实施例中,深度传感器51(例如飞行时间传感器)向世界发射中继信号,以确定到给定对象的距离。在一些实施例中,世界相机52记录大于周边(greater-than-peripheral)视图以映射环境32并检测可影响ar内容的输入。相机53可以进一步捕获用户的视场内的物理世界图像的特定时间戳。世界相机52、相机53和深度传感器51中的每一个具有相应的视场54、55和56,以从诸如图3a所示的物理世界环境32的物理世界场景收集数据并记录该物理世界场景。

惯性测量单元57可以确定观看光学组件48的运动和取向。在一些实施例中,每个部件可操作地耦合至至少一个其他部件。例如,深度传感器51可操作地耦合到眼睛跟踪相机50,作为对相对于用户眼睛49正看着的实际距离的所测量的调节(accommodation)的确认。

来自观看光学组件48中的这些传感器的信息可以耦合到系统中的一个或多个处理器。处理器可生成可被渲染以使得用户感知与物理世界中的对象交互的虚拟内容的数据。该渲染可以以任何合适的方式来实现,包括生成描绘物理和虚拟对象的图像数据。在其他实施例中,可以通过调制用户通过其观看物理世界的显示设备的不透明度来在一个场景中描绘物理和虚拟内容。可以控制不透明度,以创建虚拟对象的外观,并且还阻止用户看到物理世界中被虚拟对象遮挡的对象。无论如何向用户呈现内容,都需要物理世界的模型,以便可受物理对象影响的虚拟对象的特性,包括虚拟对象的形状、位置、运动和可见性,可被正确计算。在一些实施例中,模型可包括物理世界的重建,例如重建318。

可以根据从用户的可穿戴设备上的传感器收集的数据创建该模型。但是,在一些实施例中,可以根据多个用户收集的数据创建模型,该数据可被聚集在远离所有用户的计算设备中(并且可以在“云中”)。

可以至少部分地通过世界重建系统(例如,图6中更详细地描绘的图3的世界重建部件316)来创建模型。世界重建部件316可包括感知模块160,感知模块160可生成、更新和存储物理世界的一部分的表示。在一些实施例中,感知模块160可以将传感器的重建范围内的物理世界的部分表示为多个体素。每个体素可以对应于物理世界中预定体积的3d立方体,并且包括表面信息,该表面信息指示在该体素表示的该体积中是否存在表面。可以向体素分配值,该值指示它们的对应体积是否已被确定为包括物理对象的表面,被确定为为空还是尚未用传感器测量并且因此其值是未知的。应当理解,不需要显式地存储指示被确定为空或未知的体素的值,因为可以以任何合适的方式将体素的值存储在计算机存储器中,包括不存储关于被确定为空的或未知的体素的信息。

图7a描绘了离散为体素102的3d空间100的示例。在一些实施例中,感知模块160可以确定感兴趣的对象并设置体素的体积,以便捕获感兴趣的对象的特征并避免冗余信息。例如,感知模块160可被配置为标识较大的对象和表面,例如墙壁、天花板、地板和大型家具。因此,可以将体素的体积设置为相对大的大小,例如4cm3的立方体。

包括体素的物理世界的重建可被称为体积模型。随着传感器在物理世界中移动,随着时间的推移可创建用于创建体积模型的信息。当包括传感器的可穿戴设备的用户四处移动时,可发生这种运动。图8a-f描绘了将物理世界重建为体积模型的示例。在所示示例中,物理世界包括图8a中所示的表面的一部分180。在图8a中,在第一位置的传感器182可具有视场184,在该视场184内该表面的部分180是可见的。

传感器182可以是任何合适的类型,例如深度传感器。但是,深度数据可从图像传感器获得或以其他方式获得。感知模块160可从传感器182接收数据,并且然后如图8b所示设置多个体素186的值,以表示由传感器182在视场184中可见的表面的部分180。

在图8c中,传感器182可移动到第二位置并具有视场188。如图8d所示,另一组体素变得可见,并且这些体素的值可被设置以指示该表面已经进入传感器182的视场188的部分的位置。可以将这些体素的值添加到用于该表面的体积模型。

在图8e中,传感器182可进一步移动到第三位置并且具有视场190。在所示示例中,该表面的附加部分在视场190中变得可见。如图8f所示,另一组体素可变得可见,并且这些体素的值可被设置为指示该表面已经进入传感器182的视场190的部分的位置。这些体素的值可被添加到用于该表面的体积模型中。如图6所示,该信息可作为体积信息162a被存储为保留世界的一部分。也可以存储有关该表面的信息,例如颜色或纹理。这样的信息可被存储为例如体积元数据162b。

除了生成用于保留世界表示的信息之外,感知模块160还可以标识并输出ar系统的用户周围的区域中的变化的指示。这种变化的指示可以触发对作为保留世界的一部分存储的体积数据的更新,或者触发其他功能,诸如触发生成ar内容的触发部件304以更新该ar内容。

在一些实施例中,感知模块160可以基于有符号的距离函数(sdf)模型来标识变化。感知模块160可被配置为接收诸如深度图160a和头部姿势160b之类的传感器数据,并且然后将传感器数据融合到sdf模型160c中。深度图160a可以直接提供sdf信息,并且图像可被处理以获得sdf信息。sdf信息表示距用于捕获该信息的传感器的距离。由于那些传感器可以是可穿戴单元的一部分,因此sdf信息可以从可穿戴单元的角度以及因此从用户的角度表示物理世界。头部姿势160b可以使sdf信息能够与物理世界中的体素相关。

回到图6,在一些实施例中,感知模块160可生成、更新和存储物理世界在感知范围内的部分的表示。感知范围可以至少部分地基于传感器的重建范围来确定,该重建范围可以至少部分地基于传感器的观察范围的极限来确定。作为特定示例,使用有源ir脉冲操作的有源深度传感器可以在一定距离范围内可靠地操作,从而创建传感器的观察范围,该观察范围可以从几厘米或几十厘米到几米。

图7b描绘了相对于具有视点106的传感器104的重建范围。可以基于由传感器104捕获的数据来构建视点106内的3d空间的重建。在所示的示例中,传感器104的观察范围为40cm至5m。在一些实施例中,可以将传感器的重建范围确定为小于传感器的观察范围,因为接近其观察极限的传感器输出可更加嘈杂、不完整和不准确。例如,在所示的40cm至5m的示例中,对应的重建范围可被设置为从1至3m,并且使用传感器收集的指示该范围之外的表面的数据可以不被采用。

在一些实施例中,感知范围可大于传感器的重建范围。如果使用关于物理世界的数据的部件164需要关于感知范围内的区域的数据,这些区域在物理世界在当前重建范围之内的部分之外,则可以从保留世界162中提供该信息。相应地,通过查询可以容易地访问关于物理世界的信息。在一些实施例中,可以提供api以响应这样的查询,从而提供关于用户的当前感知范围的信息。这样的技术可减少访问现有重建所需的时间并提供改善的用户体验。

在一些实施例中,感知范围可以是与围绕用户位置为中心的边界框相对应的3d空间。随着用户移动,物理世界在感知范围内的可通过部件164查询的部分可以与用户一起移动。图7c描绘了以位置112为中心的边界框110。应当理解,边界框110的大小可被设置为以合理的扩展包围传感器的观察范围,因为用户不能以不合理的速度移动。在所示示例中,用户佩戴的传感器的观察极限为5m。边界框110被设置为20m3的立方体。

返回图6,世界重建部件316可包括可与感知模块160交互的附加模块。在一些实施例中,保留世界模块162可以基于感知模块160获取的数据来接收物理世界的表示。保留世界模块162还可包括各种格式的物理世界的表示。例如,可以存储诸如体素的体积元数据162b以及网格162c和平面162d。在一些实施例中,可以保存其他信息,例如深度图。

在一些实施例中,感知模块160可包括以各种格式(包括例如网格160d、平面和语义160e)生成用于物理世界的表示的模块。这些模块可以基于在生成表示时一个或多个传感器的感知范围内的数据以及在先前时间捕获的数据和保留世界162中的信息来生成表示。在一些实施例中,这些部件可以在利用深度传感器捕获的深度信息上进行操作。然而,ar系统可包括视觉传感器,并且可以通过分析单眼或双眼视觉信息来生成这样的表示。

在一些实施例中,如下所述,这些模块可以在物理世界的区域上操作,诸如由区块或图块表示的区域。当感知模块160检测到物理世界在其他子区域中的变化时,那些模块可被触发以更新物理世界的区块或图块或该子区域。例如,可以通过在sdf模型160c中检测新表面或其他标准(例如改变表示该子区域的足够数量的体素的值)来检测这种变化。

世界重建部件316可包括可从感知模块160接收物理世界的表示的部件164。关于物理世界的信息可由这些部件根据例如来自应用的使用请求来拉取(pull)。在一些实施例中,可以例如经由对预标识区域中的变化或感知范围内的物理世界表示的变化的指示,将信息推送给使用部件。部件164可包括例如执行用于视觉遮挡、基于物理的交互以及环境推理的处理的游戏程序和其他部件。

响应于来自部件164的查询,感知模块160可以以一种或多种格式发送对物理世界的表示。例如,当部件164指示该使用是用于视觉遮挡或基于物理的交互时,感知模块160可发送表面的表示。当部件164指示该使用是用于环境推理时,感知模块160可以发送物理世界的网格、平面和语义。

在一些实施例中,感知模块160可包括格式化信息以提供部件164的部件。这种部件的示例可以是光线投射部件160f。使用部件(例如,部件164)例如可以从特定视角查询关于物理世界的信息。光线投射部件160f可以从该视点从视场内的物理世界数据的一个或多个表示中选择。

用于快速体积重建的视点依赖砖块选择

从前面的描述中应该理解,感知模块160或ar系统的另一部件可以处理数据以创建物理世界的部分的3d表示。可以通过至少部分基于相机平截头体和/或深度图像挑选3d重建体积的部分、提取和保留平面数据、捕获、保留和更新允许本地更新同时保持邻居一致性的区块中的3d重建数据、向生成此类场景的应用提供遮挡数据(其中,遮挡数据是从一个或多个深度数据源的组合中推导的)、和/或执行多级网格简化来减少要处理的数据。

世界重建系统可以从物理世界的多个视点随时间积分传感器数据。当包括传感器的设备移动时,可以跟踪传感器的姿势(例如,位置和取向)。由于传感器的框架姿势是已知的及其与其他姿势如何相关,物理世界的这些多个视点中的每个视点可被融合在单个的组合的重建。通过使用空间和时间平均(即,随时间推移从多个视点对数据进行平均),重建可以比原始传感器数据更完整并且噪声更少。

重建可包含不同复杂级别的数据,包括例如原始数据(例如实时深度数据)、融合的体积数据(例如体素)和计算的数据(例如网格)。

在一些实施例中,ar和mr系统表示具有规则体素栅格的3d场景,其中每个体素可包含有符号的距离场(sdf)值。sdf值描述了体素位于要重建的场景中的表面的内部还是外部以及从体素到该表面的距离。计算表示场景所需体积的3d重建数据需要大量的存储器和处理能力。由于3d重建所需的变量数量随处理的深度图像数量立方增长,对于表示较大空间的场景,这些要求也随之增加。

本文描述的是减少处理的有效方式。根据一些实施例,场景可由一个或多个砖块表示。每个砖块可包括多个体素。处理的以生成场景的3d重建的砖块可以通过以下来选择:基于从图像传感器的视场(fov)推导的平截头体和/或使用深度传感器创建的场景的深度图像(或“深度图”)挑选表示该场景的砖块集。

深度图像可具有一个或多个像素,每个像素表示到场景中的表面的距离。这些距离可以与相对于图像传感器的位置有关,从而从图像传感器输出的数据可被选择性地处理。图像数据可以针对表示3d场景的包含从图像传感器的视角(或“视点”)可见的表面的部分的那些砖块来处理。可以省略一些或所有剩余砖块的处理。通过这种方法,所选择的砖块可以是可能包含新信息的砖块,该新信息可以通过挑选图像传感器的输出不太可能提供关于其的有用信息的砖块来获得。从图像传感器输出的数据不太可能提供有关比深度图所指示的表面更靠近或更远离图像传感器的砖块的有用信息,因为这些砖块是空的空间或在表面的后面并且因此未描绘在来自图像传感器的图像中。

在一些实施例中,可以应用一个或多个标准来有效地选择砖块集进行处理。初始砖块集可以限于图像传感器的平截头体内的那些砖块。然后可挑选平截头体之外的大量砖块。然后可以在挑选之后在被接受以进行处理的砖块的子集上执行更多的计算机资源密集处理以更新3d重建。因此,使用减少数量的体素的处理,可以更有效地计算要更新的场景的3d表示。

通过基于深度图像挑选砖块,可以实现更大程度地减少处理。根据一些实施例,可以通过将初始集中的每个砖块的轮廓投影到深度图像中来执行砖块的挑选和/或接受。这样的挑选可以基于砖块是否对应于深度图像指示的场景的一部分在表面附近。可被简单地标识为完全在表面之前或完全在表面之后的砖块可被挑选。在一些实施例中,可以有效地进行这种确定。例如,围绕砖块到深度图中的投影的边界框可用于确定沿z坐标方向的最大砖块值和最小砖块值,z坐标方向可基本垂直于深度图像的2d平面。通过将这些最大砖块值和最小砖块值与由深度图中的像素表示的距离进行比较,砖块可被挑选和/或接受以用于进一步的处理。这样的处理可以导致选择用于初始处理的砖块,该砖块与深度图像中反映的表面相交和/或在深度图像中反映的表面的前面。在一些实施例中,这样的处理可以区分在实心表面前面的砖块和在有孔表面前面的砖块(即,表示深度传感器对其不能可靠地测量到表面的距离的区域的砖块)。

在一些实施例中,挑选/接受标准可以导致对被接受的用于进一步的处理的一些或全部砖块进行分类,使得可以针对砖块的特性来定制用于计算体积重建的处理算法。在一些实施例中,可以基于砖块是被分类为与表面相交、在实心表面前面还是在有孔表面前面而选择不同的处理。

图9示出了沿平行于y坐标和z坐标的平面的场景400的截面图。xr系统可以通过体素栅格504表示场景400。常规的xr系统可以基于传感器406捕获的每个新深度图像来更新体素栅格的每个体素,传感器406可以是图像传感器或深度传感器,使得从体素栅格生成的3d重建可以反映场景中的变化。以这种方式进行更新可消耗大量的计算资源,并且还由于例如繁重的计算而导致的时间延迟从而在xr系统的输出处引起伪像。

在此描述的是例如通过至少部分基于图像传感器406的相机平截头体404和/或由图像传感器捕获的深度图像挑选体素栅格504的部分,来提供具有计算资源利用率低的准确3d重建数据的技术。

在所示的示例中,图像传感器406捕获包括场景400的表面402的深度图像(未示出)。该深度图像可以以捕获某个参考点与场景400中的表面之间的距离的任何便利方式被存储在计算机存储器中。在一些实施例中,深度图像可被表示为在平行于x轴和y轴的平面中的值,如图9所示,其中参考点是坐标系的原点。x-y平面中的位置可以对应于相对于参考点的方向,并且那些像素位置处的值可指示在由平面中的坐标所指示的方向上从参考点到最近的表面的距离。这样的深度图像可以包括在平行于x轴和y轴的平面中的像素的栅格(未示出)。每个像素可指示在特定方向上从图像传感器406到表面402的距离。在一些实施例中,深度传感器可能无法测量在特定方向上到表面的距离。例如,如果该表面超出图像传感器406的范围,则可导致这种情况。在一些实施例中,深度传感器可以是基于反射能量来测量距离的有源深度传感器,但是表面可能不反射足够的能量来进行准确的测量。因此,在一些实施例中,深度图像可能有“孔”,在这些孔处的像素未被分配值。

在一些实施例中,深度图像的参考点可以变化。这样的配置可允许深度图像表示整个3d场景中的表面,而不限于相对于特定参考点具有预定和有限角度范围的部分。在这样的实施例中,深度图像可指示当图像传感器406移动通过六个自由度(6dof)时到表面的距离。在这些实施例中,深度图像可包括用于多个参考点中的每一个参考点的像素集。在这些实施例中,可以基于“相机姿势”来选择深度图像的一部分,“相机姿势”表示在捕获图像数据时图像传感器406所指向的方向和/或取向。

图像传感器406可具有视场(fov),其可以由相机平截头体404表示。在一些实施例中,通过假设图像传感器406可以提供的最大深度410和/或图像传感器406可以提供的最小深度412,可以将所描绘的无限相机平截头体减小为有限的3d梯形棱柱408。3d梯形棱柱408可以是在六个平面处界定的凸多面体。

在一些实施例中,一个或多个体素504可被分组为砖块502。图10a示出了场景400的一部分500,其包括八个砖块502。图10b示出了包括83个体素504的示例性砖块502。参考图9,场景400可包括一个或多个砖块,在图4所示的视图中示出了其中的十六个。每个砖块可通行砖块标识例如[0000]-[0015]来标识。

图11描绘了可以在一些实施例中实现的体积表示层次。在一些实施例中,这种体积表示层次可减少数据传输的延迟。在一些实施例中,物理世界的体素栅格可被映射以符合用于计算ar内容的处理器(诸如在其上执行部件304的处理器)的存储架构的结构。一个或多个体素可被分组为“砖块”。一个或多个砖块可被分组为“图块(tile)”。图块的大小可以对应于处理器本地的存储介质的存储页面。可以基于使用或预期使用来根据存储管理算法在本地存储器与远程存储器之间例如通过无线连接来移动图块。

在一些实施例中,可以在一次操作中在多个图块上执行感知模块160和保留世界模块162之间的上传和/或下载。一个或多个图块可被分组为“ram图块集”。ram图块集的大小可以对应于用户佩戴的传感器的重建范围内的区域。一个或多个ram图块集可被分组为“全局图块集”。全局图块集的大小可以对应于世界重建系统的感知范围(例如,感知模块160的感知范围)。

图12是示出了根据一些实施例的操作计算系统以生成场景的3d重建的方法600的流程图。方法600可以开始于用一个或多个砖块(例如,砖块502)表示场景(例如,场景400),每个砖块包括一个或多个体素(例如,体素504)。每个砖块可表示场景的一部分。砖块相对于保留坐标系可以是可标识的,使得即使图像传感器(例如,图像传感器406)的姿势变化,相同的砖块也表示场景中的相同体积。

在动作604,方法600可以从深度传感器(例如,深度传感器406)捕获深度图像(例如,包括表面402的深度图像)。深度传感器可以是发送例如用于反射的ir辐射和测量飞行时间的有源深度传感器。每个这样的测量表示在特定方向上从深度传感器到表面的距离。该深度信息可表示与砖块所表示的体积相同的体积。

在动作606处,方法600可以针对相机平截头体(例如,从相机平截头体404推导的有限3d梯形棱柱408)挑选一个或多个砖块的一部分,以产生第一一个或多个砖块,这是来自该一个或多个砖块中的减少的砖块集。这样的挑选可以消除表示在获取正被处理的图像数据时该场景在图像传感器的视场之外的部分的砖块。该图像数据因此不太可能包含对创建或更新砖块有用的信息。

在动作608处,方法600可以针对深度图像挑选第一一个或多个砖块的部分,以产生第二一个或多个砖块,第二一个或多个砖块是来自第一一个或多个砖块的减少的砖块集。在动作610,方法600可以基于第二一个或多个砖块来生成场景的3d重建。

返回图9,给定由深度图像捕获的表面402和对应的相机姿势,图像传感器406和表面402之间的体素可以为空。体素离图像传感器406在表面402的后面越远,就越不可能确定体素表示对象的内部或空的空间。确定性的程度可由权重函数表示,该权重函数基于到表面402的距离对体素更新进行加权。当位于表面402后方(距离图像传感器402较远)的体素的权重函数高于阈值时,体素可能没有更新或具有零更新(例如,零变化的更新)。而且,未落入相机平截头体404中的所有体素可能不会针对该深度图像进行更新或调查。

方法600不仅可以提高体积深度图像融合的处理速度,而且可以消耗更少的存储器存储,这使得方法600可以在可穿戴硬件上运行。例如,具有1cm3体素大小和每体素8个字节(4个字节用于距离值,4个字节用于权重值)的5m*5m*3m的小重建体积将已经需要大约600mb。方法600可以根据相对于截断(truncated)阈值的砖块到表面的距离对砖块进行分类。例如,方法600可以标识空的砖块(例如,被挑选的砖块,或者远离表面超过截断阈值的砖块),以便不为空的砖块分配存储器空间。方法600还可以通过截断阈值标识远离表面的砖块,以便以负截断阈值和权重1的恒定距离值来存储这些砖块。方法600还可以标识具有在零和截断阈值之间的到表面的距离的砖块,以便以正截断阈值但权重有所变化的恒定sdf值存储这些砖块。存储对于具有单个值的砖块而言恒定的距离或权重值可以是用于零熵场的基于熵的压缩。

方法600可以允许在体素更新期间将砖块标记为“不包含表面的任何部分”,这可以显著加速砖块的处理。该处理可包括例如将由砖块表示的场景的部分的图像转换为网格。

图13示出了根据一些实施例的针对图像传感器406的相机平截头体404挑选一个或多个砖块的一部分的示例性方法606。方法606可以开始于查找用于容纳相机平截头体404的立方轴对齐的边界框(aabb)。aabb可以包含场景中的一个或多个砖块。方法606可包括将aabb划分(动作704)成一个或多个子aabb,以及进行(动作706)相机平截头体接受测试。如果方法606在动作708处确定子aabb达到砖块的大小,则方法606可以产生(动作710)第一一个或多个砖块。如果方法606在动作708处确定子aabb大于砖块的大小,则方法606可以重复动作704-708,直到子aabb达到砖块的大小。

例如,给定与相机平截头体404相对应的3d梯形棱柱408,可以在恒定时间内查找aabb,其边长为2的幂,并且包含3d梯形棱柱408。aabb可被分为八个子aabb。可以测试八个子aabb中的每一个与相机平截头体404的相交。当确定子aabb不与相机平截头体404相交时,可以挑选对应于该子aabb的砖块。挑选的砖块可被拒绝进一步的处理。当确定子aabb与相机平截头体404相交时,可以将该子aabb进一步划分为该子aabb的八个子aabb。然后,可以测试该子aabb的八个子aabb中的每一个与相机平截头体404的相交。划分和测试的迭代继续进行,直到子aabb对应于单个砖块为止。为了确定相机平截头体404是否与aabb相交,可进行两步测试。首先,可测试aabb的至少一个拐角点是否位于界定相机平截头体404的每个平面内。其次,可测试相机平截头体404的每个拐角点是否位于aabb内部以使得可捕获不与相机平截头体404相交但被错误地分类为部分位于内部(例如,只有平截头体边缘上的一个拐角点)的aabb的一些情况。

此两步测试的理想副产品是,对于与相机平截头体404相交的每个砖块,它是完全位于相机平截头体404内还是仅部分位于相机平截头体404内可以是已知的。对于完全位于相机平截头体404内的砖块而言,稍后在各个体素更新时,可以针对每个体素跳过它是否位于相机平截头体404内部的测试。

图14示出了根据一些实施例的进行相机平截头体接受测试的示例性方法706。方法706可以开始于相对于界定相机平截头体404的每个平面测试(动作802)一个或多个子aabb中的每一个子aabb。在动作804,方法706可以确定所测试的子aabb是否完全在相机平截头体404外部。在动作806,如果确定测试的子aabb完全在相机平截头体404的外部,则方法706可以挑选该测试的子aabb包含的所有砖块。在动作808,如果确定测试的子aabb不完全在相机平截头体404外部,则方法706可以确定测试的子aabb是否完全在相机平截头体404内部。

在动作810,如果确定测试的子aabb完全在相机平截头体404内部,则方法706可以将测试的子aabb包含的所有砖块添加到第一一个或多个砖块中。在动作708,如果确定测试的子aabb不完全在相机平截头体404内部,这可指示测试的子aabb与相机平截头体404相交,则方法706可以确定测试的子aabb是否达到一个砖块的大小。

在动作814,如果确定测试的子aabb等于砖块的大小,则方法706可以进一步确定相机平截头体404的每个拐角点是否位于测试的子aabb内部。如果确定相机平截头体404的每个拐角点位于测试的子aabb的砖块的内部,则方法706可以挑选(动作806)测试的子aabb的砖块。如果确定不是相机平截头体的每个拐角点都位于测试的子aabb的砖块的内部,则方法706可以将测试的子aabb的砖块添加(动作810)到第一一个或多个砖块中。

图15示出了根据一些实施例的针对深度图像挑选第一一个或多个砖块的一部分的示例性方法608。方法608可以开始于对第一一个或多个砖块中的每一个砖块进行(动作902)第一深度图像接受测试。在动作904,方法808可以确定第一深度图像接受测试是否接受了测试的砖块。如果确定测试的砖块被第一深度图像接受测试接受,这可指示测试的砖块与场景中的表面相交,则方法608可以将变化的增量应用(动作906)于选择的体素,并将测试的砖块添加(动作914)到第二一个或多个砖块中。

在动作908,如果确定第一深度图像接受测试未接受测试的砖块,则方法608可以针对测试的砖块进行(动作908)第二深度图像接受测试。在动作910,确定第二深度图像接受测试是否接受了测试的砖块。如果确定第二深度图像接受测试接受了测试的砖块,这可指示测试的砖块位于场景中的实心或有孔背景的前面,则方法608可以将恒定增量应用(动作912)于所有体素或选择的体素,然后将测试的砖块添加(动作914)到第二一个或多个砖块中。如果确定第二深度图像接受测试也不接受测试的砖块,则方法608可以挑选(动作916)测试的砖块。

图16示出了根据一些实施例的进行第一深度图像接受测试的示例性方法902。对于每个要测试的砖块,方法902可以开始于确定(动作1002)沿着平行于z坐标的方向的最小砖块值(bmin)和最大砖块值(bmax)。可以填充bmin值和bmax值以说明积分阈值(integrationthreshold),超出该阈值的深度值指示对砖块中体素的不断更新。在动作1004,方法902可以通过将砖块的拐角投影到深度图像中来计算测试的砖块的拐角的2d像素位置。在动作1006,方法902可以通过建立砖块的拐角的2d像素位置的凸包(convexhull)来计算矩形。在动作1008,方法902可以针对bmin值和bmax值测试矩形中的每个像素。在动作1010,方法902可以确定矩形中的所有像素是否具有在bmin值和bmax值之间的深度值。如果确定矩形中的所有像素具有在bmin值和bmax值之间的深度值,则方法902可以接受(动作1012)该砖块。如果确定不是矩形中的所有像素都具有在bmin值和bmax值之间的深度值,则方法902可以针对该砖块进行(动作908)第二深度图像接受测试。

图17示出了根据一些实施例的进行第二深度图像接受测试的示例性方法908。方法908可以通过相对于bmin值和bmax值对矩形中的所有像素进行分类来在动作1102处开始。在动作1104,方法908可以例如通过使用图18中所示的表来确定测试的砖块是否在实心或有孔背景的前面。如果确定测试的砖块在实心或有孔背景的前面,则方法908可以接受(动作1106)该砖块。如果确定测试的砖块不在实心或有孔背景的前面,则在动作916,方法908可以挑选该砖块。

图19a-f描绘了针对相机平截头体192挑选表示场景190的砖块的示例。在图19a中,场景190由单个aabb194a表示,该单个aabb194a在所示示例中包括16×16个砖块。在图19b中,单个aabb194a被划分成四个子aabb194b,每个子aabb194b包括8×8个砖块。在进行相机平截头体接受测试(例如,方法706)之后,四个子aabb194b之一未能通过相机平截头体接受测试,因此失败的子aabb194b中的8×8个砖块被挑选并被图示为白砖块。在图19c中,将通过相机平截头体接受测试的三个子aabb194中的每一个进一步划分成四个子aabb194c,每个子aabb194c包括4×4个砖块。在进行相机平截头体接受测试(例如,方法706)之后,十六个子aabb194c中的八个未通过相机平截头体接受测试,因此失败的子aabb194c中的砖块被挑选并被图示为白砖块。类似地,在图19d中,子aabb194d包括2×2个砖块。在图19e中,子aabb194e包括单个砖块,并且因此通过相机平截头体测试的子aabb194e和相应的砖块被产生为第一多个砖块并且在图19f中被图示为灰色砖块196f。在示出的示例中,如果不执行挑选,则世界重建部件将计算所有256个砖块。随着针对相机平截头体的砖块挑选,世界重建部件仅需要计算第一多个砖块,即34个砖块,并且因此可以更快地渲染结果。

图20a描绘了通过进行例如方法608而针对包括表面220的深度图像进一步挑选34个砖块196f的示例。图20b描绘了针对深度图像的挑选结果,示出了34个砖块196f中的12个砖块222a通过了第一深度图像接受测试(例如,方法904),34个砖块196f中的9个砖块222b通过了第二深度图像接受测试(例如方法910),最后在针对包括表面220的深度图像进行挑选之后,34个砖块196f中的13个砖块222c被挑选。结果,在所示示例中,通过针对深度图像的砖块挑选,由世界重建部件计算的砖块数量被进一步减少到21个砖块。还应当理解,由于第一和第二深度图像接受测试的结果,不仅可以通过减少砖块的数量而且可以通过对砖块的分类来加速世界重建部件的计算速度。例如,如关于图15所讨论的,可以对未通过第一深度图像接受测试但是通过第二深度图像接受测试的9个砖块222b应用恒定增量。与将可变增量应用于每个体素相比,批量应用恒定增量可以进一步提高计算速度。可以在xr系统中获得场景中的几何图形(例如,平面)以支持应用,例如放置虚拟屏幕的墙和/或导航虚拟机器人的地板。场景的几何图形的常见表示是网格,其可包括具有顶点和边缘的连接的三角形的组。按照惯例,场景中的几何图形是通过为该场景生成网格并在该网格中搜索该几何图形来获得的,这花费一些时间(例如几秒钟)来处理,并且并不指示不同查询所请求的几何图形之间的关系。例如,第一查询可以是针对桌子平面的。响应于第一查询,系统可以查找桌子平面并将手表留在桌子平面上。然后第二查询可以是针对手表的。响应于第二查询,系统可以查找所有可能的桌子平面,并在每个桌子平面上检查是否存在手表,直到查找该表为止,因为从对第一查询的响应中没有指示桌子平面是否为该桌子平面。

在此描述一种几何图形提取系统。在一些实施例中,几何图形提取系统可以在用相机和/或传感器扫描场景时提取几何图形,这允许可以适应动态环境变化的快速有效的提取。在一些实施例中,几何图形提取系统可以将提取的几何图形保留在本地和/或远程存储器中。保留的几何图形可具有唯一的标识,使得例如在不同的时间戳和/或来自不同应用的不同查询可以共享保留的几何图形。在一些实施例中,几何提取系统可以根据各个查询来支持几何图形的不同表示。在下面的图21-29的描述中,平面被用作示例性几何图形。应当理解,几何图形提取系统可以检测其他几何图形,以代替平面或除了平面之外用于后续处理中,包括例如圆柱体、立方体、线、角或诸如玻璃表面或孔之类的语义。在一些实施例中,本文关于几何图形提取所描述的原理可以适用于对象提取等。

图21示出了根据一些实施例的平面提取系统1300。平面提取系统1300可包括深度融合1304,其可接收多个深度图1302。多个深度图1302可以由佩戴深度传感器的一个或多个用户创建、和/或从本地/远程存储器下载。多个深度图1302可表示相同表面的多个视图。多个深度图之间可存在差异,这可以通过深度融合1304来调和。

在一些实施例中,深度融合1304可以至少部分地基于方法600来生成sdf1306。网格砖块1308可以通过例如在对应的砖块(例如,图23中的砖块[0000]至[0015])上应用移动立方体算法(marchingcubealgorithm)而从sdf1306中提取。平面提取1310可以检测网格砖块1308中的平面平面并且至少部分地基于网格砖块1308提取平面。平面提取1310还可以至少部分地基于对应的网格砖块来提取每个砖块的面元。面元网格可包括网格中的顶点,但不包括连接相邻顶点的边缘,使得存储面元比网格消耗更少的存储空间。平面数据存储库1312可以保留提取的平面和面元。

在一些实施例中,xr应用可以通过平面查询1314从平面数据存储库1312请求并获得平面,平面查询1314可以由应用程序接口(api)发送。例如,应用可以向平面提取系统1300发送关于其位置的信息,并请求其附近的所有平面(例如,在五米半径内)。平面提取系统1300然后可以搜索其平面数据存储库1312,并且将所选择的平面发送给该应用。平面查询1314可包括诸如该应用在哪需要平面、该应用需要哪种平面、和/或该平面应看起来如何的信息(例如,水平、垂直或成角度,这可以通过检查平面数据存储库中平面的原始法线(primitivenormal)来确定)。

图22示出了根据一些实施例的平面提取系统1300的部分1400,其示出了关于平面提取1310的细节。平面提取1310可包括将每个网格砖块1308划分成子砖块1402。可以对每个子砖块1402进行平面检测1404。例如,平面检测1404可以:在子砖块中比较每个网格三角形的原始法线;将具有小于预定阈值的原始法线差异的那些网格三角形合并为一个网格三角形;以及将面积大于预定面积值的网格三角形标识为平面。

图23是示出根据一些实施例的由包括体素的砖块[0000]至[0015]表示的场景1500以及包括该场景中的砖块平面1502、全局平面1504和面元1506的示例性平面数据的示意图。图23示出了被划分为四个子砖块1508的砖块[0011]。应当理解,可以将网格砖块划分为任何合适数量的子砖块。由平面检测1404检测的平面的粒度(granularity)可以由子砖块的大小来确定,而砖块的大小可以由存储体积3d重建数据的本地/远程存储器的粒度来确定。

回到图22,平面检测1404可以至少部分地基于针对网格砖块中的每个子砖块的检测平面来确定每个网格砖块的砖块平面(例如,砖块平面1502)。平面检测1404还可以确定延伸多于一个砖块的全局平面(例如,全局平面1504)。

在一些实施例中,平面提取1310可包括平面更新1406,平面更新1406可以至少部分地基于由平面检测1404检测的平面来更新存储在平面数据存储库1312中的现有砖块平面和/或全局平面。平面更新1406可包括添加附加的砖块平面、移除一些现有的砖块平面、和/或用由平面检测1404检测到并对应于相同砖块的砖块平面来替换一些现有的砖块平面,以使得该场景中的实时变化保留在平面数据存储库1312中。平面更新1406还可包括将由平面检测1404检测的砖块平面聚合到现有的全局平面,例如,当砖块平面被检测到与现有全局平面相邻时。

在一些实施例中,平面提取1310可以进一步包括平面合并和拆分1408。例如,当砖块平面被添加并连接两个全局平面时,平面合并可以将多个全局平面合并为一个大的全局平面。平面拆分可将一个全局平面拆分为多个全局平面,例如,当全局平面中间的砖块平面被移除时。

图24示出了根据一些实施例的平面数据存储库1312中的数据结构。由平面id1612索引的全局平面1614可以处于该数据结构的最高级别。每个全局平面1614可包括多个砖块平面和与对应的全局平面相邻的砖块的面元,使得可以为每个砖块保留一个砖块平面,而当全局平面的边缘不合格为用于对应砖块的砖块平面时可以准确地呈现全局平面。在一些实施例中,与全局平面相邻的砖块的面元而不是场景中所有砖块的面元被保留,因为这足以准确地呈现全局平面。例如,如图23所示,全局平面1504跨砖块[0008]至[0010]和[0006]延伸。砖块[0006]具有砖块平面1502,砖块平面1502不是全局平面1504的一部分。利用平面数据存储库1312中的数据结构,当平面查询请求全局平面1504时,砖块[0006]和[0012]的面元被检查以确定全局平面1504是否延伸到砖块[0006]和[0012]中。在所示的示例中,面元1506指示全局平面1504延伸到砖块[0006]中。

回到图24,全局平面1614可以与对应的砖块平面1610双向关联。砖块可以通过砖块id1602来标识。砖块可被划分为包括至少一个平面的平面砖块1604和不包括平面的非平面砖块1606。平面砖块和非平面砖块的面元都可被保留,这取决于砖块是否与全局平面相邻而不取决于该砖块是否包括平面。应当理解,在xr系统正观看场景时,无论是否存在平面查询1314,都可以将平面连续保留在平面数据存储库1312中。

图25示出了根据一些实施例的当应用向平面数据存储库1312发送平面查询1314时可以提取平面以供该应用使用的平面几何图形提取1702。平面几何图形提取1702可被实现为api。平面查询1314可指示请求的平面几何图形表示,例如外部矩形平面、内部矩形平面或多边形平面。根据平面查询1314,平面搜索1704可以在平面数据存储库1312中搜索并获得平面数据。

在一些实施例中,来自平面覆盖点1706的栅格化可生成平面覆盖点。在图26a中示出了示例。存在四个砖块[0000]-[0003],每个砖块具有砖块平面1802。通过将砖块平面的边界点投影到全局平面1804上,生成平面覆盖点1806(或“栅格化点”)。

回到图25,来自平面覆盖点1706的栅格化还可以从该平面覆盖点生成栅格化的平面掩模。根据平面查询1314所请求的平面几何图形表示,可以分别通过内部矩形提取1708、外部矩形提取1710和多边形提取1712来提取内部矩形平面表示、外部矩形平面表示和多边形平面表示。在一些实施例中,应用可以在发送平面查询后的几毫秒内接收请求的平面几何图形表示。

图26b中示出了示例性栅格化的平面掩模1814。根据栅格化的平面掩模,可生成各种平面几何图形表示。在所示的示例中,通过连接栅格化的平面掩模的一些平面覆盖点来生成多边形1812,以使得该掩模中的平面覆盖点中没有一个在多边形外部。生成外部矩形1808,以使得外部矩形1808是围绕栅格化的平面掩模1814的最小矩形。内部矩形1810通过以下操作来生成:将“1”分配给具有两个平面覆盖点的砖块,而将“0”分配给没有两个平面覆盖点的砖块以形成栅格化栅格,确定被标记为“1”并在平行于砖块的边缘的线上对齐的砖块组(例如,砖块[0001]、[0005]、[0009]和[00013]作为一组,砖块[0013]-[0015]作为一组),并为每个确定的组生成一个内部矩形,使得该内部矩形是围绕相应组的最小矩形。

图27示出了根据一些实施例的用于场景1900的网格。图28a-c示出了根据一些实施例的分别由外部矩形平面、内部矩形平面和多边形平面表示的场景1900。

图29示出了场景1900的噪声较小的3d表示,其是通过基于提取的平面数据(例如图28a-c所示的平面)将图27所示的网格平面化而获得的。

多级区块网格简化

在一些实施例中,在xr环境的表示被存储或用于渲染功能(诸如xr环境中的对象之间的遮挡处理或计算物理交互)之前,可以采用处理来降低该表示的复杂性。例如,网格部件160d可以在将网格或网格的一部分作为网格162c存储在保留世界162中之前简化该网格或该网格的一部分。

这样的处理可能需要在xr环境的表示上分级执行操作。这些级可包括在基于区域的操作之前和之后的简化操作。与简化操作一样,基于区域的操作可减少xr环境的表示的复杂性。通过以这种方式对操作进行分级,可减少产生xr环境的简化表示的总处理,同时保持xr环境的表示的质量。结果,简化的高质量表示可被频繁地更新,使得xr环境可被频繁地更新,从而诸如通过向用户呈现更逼真的环境来改善xr系统的性能。

xr环境可表示物理世界,而表示xr环境的数据可被一个或多个传感器捕获。但是,本文描述的技术可以应用于xr环境,而不管表示该环境的数据源如何。在一些实施例中,xr环境可以由包括一个或多个点和由点的子集限定的多边形(例如三角形)的网格来表示。在基于区域的操作之前的第一简化操作可减少该环境的表示的复杂性。例如,可以通过减少网格中此类多边形的数量来简化该网格。作为特定示例,第一简化操作可以采用三角形减少算法,其可减少用于表示xr环境的三角形数量。

基于区域的操作可以是可以检测一个或多个形状的形状检测操作。常见的形状检测操作是平面化操作,其中所检测的形状是平面。检测的平面可表示对象或对象的部分。平面的检测可简化渲染xr环境的过程。例如,在xr环境中渲染的移动对象例如可以在与平面碰撞时以易于计算的方式运动。因此,与基于表示环境的相同部分的多个多边形执行计算相比,标识平面可以简化移动对象的后续渲染。代替平面或除了平面以外,可以检测其他形状并将其用于后续处理中,包括圆柱体、立方体、直线、拐角或诸如玻璃表面或孔的语义。这样的操作可以对表示检测的形状的表面的多边形进行分组。

在基于区域的操作之后的第二简化操作可以进一步简化环境的表示,例如通过进一步减少该表示中的多边形数量。第二简化操作可以集中于减少通过基于区域的操作检测的每个区域内的多边形的数量。

这样的处理可以启用网格划分服务,该网格划分服务处理在物理环境中收集的传感器数据并为生成内容的应用提供网格。在一些实施例中,该处理可以提供虚拟对象在虚拟环境中的简化表示。

在xr系统(例如虚拟现实(vr)、增强现实(ar)和混合现实(mr)系统)中,三维(3d)网格数据通常用于多种目的,包括例如基于环境中的物理对象遮挡图形/游戏引擎中的虚拟内容,或者在游戏引擎的物理引擎中计算虚拟对象的刚体碰撞效果。在一些实施例中,对于网格的不同用途,对网格的要求可以不同,并且简化的网格可以适用于许多这样的用途,其中一些简化技术比其他技术更适合于某些用途。

因此,可以用多种简化技术和/或可以基于简化网格的预期用途来配置的简化技术中的任何一种来实现本文所述的处理。可以使用本文所述的处理来改进向多个客户端应用提供简化网格的网格划分服务的实用性,该客户端应用可以以不同的方式使用该网格。每个客户端应用可能需要具有不同简化级别的网格。在一些实施例中,访问网格划分服务的应用可以指定目标简化或要提供给它的网格。本文所述的网格简化方法可以用于多个客户端应用,包括例如执行虚拟内容遮挡、物理仿真、或环境几何图形可视化的那些客户端应用。本文描述的网格处理可具有低延迟并且可以是灵活的,因为它可以针对不同的用途(例如,平坦的表面、变化的三角形计数)优化/偏置操作。

如本文所述的网格简化方法可以提供实时性能(例如,低延迟以支持飞行(fly)(实时)环境变化)、本地更新能力(例如,重新开始(renw)网格自从上次更新以来变化的部分)以及平坦化的表面(例如,平坦化的平坦表面以支持鲁棒的物理仿真)。

在一些实施例中,xr环境的表示可被分割成多个区块,其中一些或全部可被并行处理。在一些实施例中,所得的区块然后可被重新组合。在一些实施例中,区块可以用与相邻区块重叠的“侧缘(skirt)”来限定。侧缘使得能够在重新组装的区块的对接处以更少和/或更不明显的不连续性重新组合区块。

因此,在一些实施例中,网格简化方法可包括网格区块分割、预简化、网格平面化和后简化。为了加速该过程,全局网格可首先被分割成部件网格的区块,使得网格区块可被并行应对(例如,处理)。然后,网格区块可在相邻区块之间的边界上以侧缘来延伸。对于带侧缘的网格区块,可以对单个网格区块进行简化,而全局网格虽然在拓扑上是断开的但在视觉上可以是无缝的。

在一些实施例中,网格简化方法可适合于由使用简化的网格来表示xr环境中的对象的交互的应用来使用,例如通过使简化处理成为平面感知的。为了简化网格,可以实现三步简化过程。可以首先使用相对较高的目标三角形计数来适度地预简化网格。然后,可以通过区域增长算法来检测平面区域。可以通过将对应的三角形投影到所检测的平面来使网格平面化。在一些实施例中,可以通过将平面(或原始)法线调整为基本垂直并平行于所检测的平面来使网格被规范化。之后,可以在平面化的网格上运行后简化过程。后简化处理可以更关注所检测的平面区域,例如,简化每个所检测的平面区域的网格,以达到所需的复杂性级别(例如,度量复杂性),例如可由一个或多个度量的目标值指示。

图30示出了根据一些实施例的生成由网格表示的环境的模型的方法3000。在一些实施例中,可以在xr平台上的网格划分服务上执行方法3000。方法3000可以在动作3002处从输入表示环境的网格开始。在一些实施例中,输入网格可具有高分辨率,其可以由三角形的数量指示。输入网格可以由重建系统(例如,体积3d重建系统)生成,并且输入网格可包括3d重建数据。

在一些实施例中,重建系统可生成环境的体积3d表示,其可创建由一个或多个传感器捕获的环境的3d信息的数据层次。例如,传感器可以是深度相机,其可以捕获环境的3d信息,例如具有深度相机的相应姿势(即,相机姿势)的深度图像流。可以将环境的3d信息处理为体素栅格。每个体素可包含描述该体素是位于环境中对象的几何图形的内部还是外部的一个或多个有符号的距离函数(sdf)。体素可被分组为“砖块”。每个砖块可包括例如立方体积的多个体素,例如83体素。砖块可被进一步分组为“图块”。每个图块可包括多个砖块。

可以选择图块的大小以促进计算设备中的存储器操作。例如,该大小可基于在处理这样的数据的设备的有源存储器中维护的关于环境的信息量来选择。例如,系统可以在通常位于设备本地的有源存储器和具有更大延迟的其他存储器(例如非易失性存储器或云中的远程存储器)之间传递图块。一个或多个完整的或部分的图块可包含表示网格中的“区块”或环境的其他表示的信息。

在一些实施例中,体积3d重建系统可以将输入网格3002生成为拓扑连接的全局网格。在一些实施例中,体积3d重建系统可以将输入网格3002生成为全局网格,该全局网格虽然在拓扑上是断开的但是在视觉上是无缝的。例如,拓扑断开的全局网格可以由多个网格区块组成,每个网格区块由区块生成。

重建系统可被配置为捕获环境的实质细节,这使该系统能够区分表示的相邻部分之间的区别,表示的相邻部分具有相对较小特性差异。具有不同性质的相邻区域可被标识为不同的表面,从而导致系统标识环境中的大量表面。但是,这样的系统可捕获对于许多应用的不必要的但仍被处理的细节。例如,对于从网格划分服务请求网格的客户端应用,当制成矩形的两个三角形将是墙的充分表示时,重建系统可能不必要地以许多三角形在墙上显示隆起(bump)。在一些实施例中,当从网格划分服务请求网格时,应用可以指定请求的网格的目标简化级别。该目标简化级别可被表达为压缩的程度、每单位面积的三角形数量、或以任何其他合适的方式来表达。

方法3000可以根据输入网格有效地生成足以用于客户端应用的环境的模型。在动作3004,可以将输入网格分割成一个或多个第一网格区块,每个第一网格区块可以对应于环境的体积3d表示的数据层次中的区块。

每个第一网格区块可表示环境的一部分,并且复杂性度量(例如,网格分辨率)可为第一值。在一些实施例中,网格区块的复杂性度量指示该网格区块中的三角形的数量。在一些实施例中,可以顺序地和/或并行地对网格区块执行处理。然而,如本文所述的简化处理可被应用于整个网格或任何合适的部分(例如,一个或多个网格区块)。

动作3006表示对多个网格区块中的每一个网格区块执行的子过程。可以独立地在多个网格区块上执行该子处理,使得可以容易地对一些或所有网格区块并行地执行该处理。可以对所有网格区块或选择的用于进一步处理的网格区块的子集执行该子过程。可以至少部分地基于请求简化网格的应用正在其上执行的设备的视场来选择网格区块的子集。

在动作3006中,可以基于例如第一网格区块中描述的对象或第一网格区块的位置来选择一些第一网格区块。对于每个所选择的第一网格区块,可以执行多级简化。在一些实施例中,可以并行地执行所选择的第一网格区块上的多级简化,结果,所选择的第一网格区块上的简化可以在大约相同的时间点完成,尽管这可取决于所选择的第一网格区块的每个网格区块的复杂性度量。

多级简化可包括预简化操作、基于区域的操作(例如,平面化操作)和后简化操作。在一些实施例中,可以基于来自客户端应用的输入值来执行多级简化。该输入值可指示客户端应用所需的网格复杂性(例如,网格分辨率)。对于每个所选择的第一网格区块,来自客户端应用的输入值可以相同或不同。

在动作3012,可对选择的第一网格区块执行预简化操作以生成第二网格区块。该预简化操作可减少该区块的复杂性。对于网格区块,预简化可减少该网格区块中多边形的数量。在一些实施例中,在动作3012处的预简化的量可以是可配置的。例如,目标值可由例如客户端应用提供作为对动作3012处的处理的输入。该目标值可以是一个或多个指定的或预定的度量的单个值或多个值。一个或多个度量可包括例如绝对三角形计数、初始三角形计数的百分比、和/或二次误差度量,它们可测量简化网格和原始网格(例如,输入网格3002)之间的平均平方距离。

可以以任何合适的方式提供目标值。例如,方法3000的实例可被预先配置有目标值。在一些实施例中,该目标值可由从执行方法3000的网格划分服务请求网格的应用通过api来提供。例如,动作3012的目标值可以是渲染功能所请求的最终目标(例如,请求的应用)。在一些实施例中,可以调整或重写(override)作为输入提供的目标值,以确保在网格中保留足够的数据以用于后续处理。例如,动作3014中的处理可能需要最小数量的三角形,并且如果目标值低于三角形的最小数量,则由应用提供的目标值可以被该最小值替换。

在这样的实施例中,预简化的网格可具有一个或多个度量的值,使得该预简化的网格在基于区域的操作期间可以比原始区块分割的输入网格更快地被处理,同时仍然包含原始区块分割的输入网格的全部或大部分区域。

因为不控制一个或多个度量的值,简化的网格可能过于粗糙、分布不均匀、和/或丢失了以下基于区域的操作所需的原始区块分割的输入网格的许多区域。

在动作3012中产生的第二网格区块的复杂性度量可为第二值,该第二值可以小于度量复杂性的第一值。在一些实施例中,可以使用三角减少算法来执行动作3012的预简化操作。

在动作3014,可以在第二网格区块上执行形状检测操作以生成第三网格区块。以平面化操作为例。第三网格区块的复杂性度量可为第三值。在一些实施例中,度量复杂性的第三值可以与度量复杂性的第二值相同。在一些实施例中,度量复杂性的第三值可以小于度量复杂性的第二值。平面化操作可包括:例如使用区域增长算法,在第二网格区块中检测平面区域,将所检测的平面区域的网格投影到对应平面,将所检测的平面区域的平面法线调整为基本垂直于对应平面,以及基于例如目标三角形计数简化每个对应平面上的所投影的网格。在一些实施例中,可以在将所检测的平面区域的网格投影到对应平面之前,调整所检测的平面区域的平面法线。

在动作3016,可以在第三网格区块上执行后简化操作以生成第四网格区块。在一些实施例中,动作3014处的处理可以期望地以比将要从方法3000输出的简化网格中需要的分辨率更高的分辨率在网格上被执行。在一些实施例中,动作3016处的处理可以简化整个网格区块以达到期望的复杂性级别(例如,度量复杂性),例如可以由一个或多个度量的目标值指示,该目标值可以与提供给动作3012的目标相同或不同。在一些实施例中,动作3016处的后简化操作可以集中于减少由动作3014处的平面化操作检测的每个平面内的多边形的数量。

第四网格区块的复杂性度量可为第四值,该第四值可以小于度量复杂性的第三值。在一些实施例中,度量复杂性的第三值与度量复杂性的第四值之间的百分比减少可以大于度量复杂性的第一值与度量复杂性的第二值之间的百分比减少。在一些实施例中,度量复杂性的第三值与度量复杂性的第四值之间的百分比减少可以比度量复杂性的第一值与度量复杂性的第二值之间的百分比减少至少大一倍。在一些实施例中,可以使用三角减少算法来执行动作3016处的后简化操作。在一些实施例中,可以使用与动作3012处的预简化操作相同的简化算法来执行动作3016处的后简化操作。

在动作3008中,简化的所选择的区块可以与动作3006中类似地处理的其他所选择的网格区块组合,和/或可以与未被选择的块组合成环境的新网格。在动作3010,可以将环境的新网格提供给客户端应用。在一些实施例中,环境的新网格可被称为简化网格。

在一些实施例中,动作3008可被跳过。可以将简化的网格区块直接发送给客户端应用,在该客户端应用中,网格区块尽管在拓扑上是断开的但是在视觉上可以是无缝的。

图31示出了根据一些实施例的将环境的网格表示3100分割成网格区块的示例。网格表示3100可被分割成四个网格区块:网格区块a-d。在一些实施例中,网格区块可以对应于属于环境的物理世界中具有相同体积的区域。在一些实施例中,网格区块可以对应于属于环境的物理世界中具有不同体积的区域。例如,当物理世界是办公室时,办公室可被划分为多个区域,每个区域可为一个立方英尺。一个区块可包括该办公室的一个区域的3d表示。

尽管以二维(2d)示出了环境的网格表示3100,但是应当理解,环境可以是三维的,对应地由3d网格表示来表示。尽管环境的网格表示3100被图示为四个网格区块的组合,但是应当理解,环境可以由任何合适数量(例如,两个、三个、五个、六个或更多)的网格区块表示。

表示3100可被分割为四个部分:例如由实线3110所示的部分3102、3104、3106和3108。在一些实施例中,部分3102、3104、3106和3108可被分别指定为网格区块a-d。

当网格区块被更新时,它可以继续与未被更新的相邻区块对接。结果,在网格区块之间的边界处可出现不连续性。如果由相邻块表示的区域具有不连续性,则在后续处理中可以将融合的网格解释为指示相邻区块之间存在裂纹。在一些实施例中,在物理世界空间的表示中的这种裂纹可被解释为具有无限深度的空间。这样,空间可以是物理世界的表示的人工痕迹(artifact),而不是实际上的特征。使用此类融合网格以生成物理世界中的对象的表示的任何应用可能无法正确生成输出。例如,在物理世界中的表面上渲染虚拟角色的应用可将该角色渲染为好像它掉入裂纹一样,这不会创建该对象的所需外观。

为了减少这种裂纹的出现,在一些实施例中,相邻区块的一部分可表示物理世界的相同区域。例如,相邻区块之间的对接区域可以由每个相邻区块的一部分来表示,这可以实现考虑层次细节(lod)的容易的独立的更新和/或渲染(例如,降低物理世界的一部分的3d重建的复杂性,因为该部分移出用户的视场)。即使一个区块被更新而其相邻区块没有被更新,则融合的网格也可以通过组合表示来自两个区块的对接区域的数据来表示。作为特定示例,当将更新的区块与相邻区块融合时,物理引擎可以基于例如相邻区块中的哪一个在其重叠区域中可观察到来确定相邻区块的重叠区域。基于区块的数据结构可以采用侧缘、拉链(zipper)或任何其他合适的方法来表示相邻区块之间的对接区域,使得区块在被更新时,它将继续与未被更新的相邻区块对接。这种方法的外观可以是在相邻区块之间在裂纹上“掩盖(paperover)”。因此,可以独立于相邻区块来更新区块。

在图31所示的示例中,部分3102、3104、3106和3108的边界处的区域可被指定为侧缘,如虚线3112所示。在一些实施例中,每个网格区块a-d可包括部分3102、3104、3106和3108之一以及对应的侧缘。例如,网格区块b可包括部分3104和侧缘3114,侧缘3114与网格区块b的相邻网格区块a、c和d的边界部分重叠,使得当区块被连接成单个网格时网格区块之间的裂纹可被掩盖。网格区块a、c和d也可包括对应的侧缘。因此,在将单个连接的3d网格表示返回给应用之前,处理器可以在网格区块之间的任何裂纹上进行掩盖。

在一些实施例中,可以将包括侧缘的区块网格直接发送给应用,而无需将其组合到拓扑连接的全局网格。该应用可具有由区块网格组成的全局网格,该全局网格尽管在拓扑上是断开的但在视觉上是无缝的。

图32a-32d示出了根据一些实施例的在多级简化期间的示例性网格区块3201的网格演进。网格区块3201可包括顶点3206、边缘3208和面3210。每个面可具有法线,该法线可以由多个坐标(例如在图32中示为x、y、z)表示。

可以对网格区块3201执行预简化操作以生成网格区块3202。可以使用边缘折叠变换(edgecollapsetransformation)。在所示的示例中,网格区块3202将网格区块3201的面的数量从十减少到八。网格区块3202的所得面可各自具有对应的法线集(例如,x1,y1,z1;x2,y2,z2;……;x8,y8,z8)。

可以在网格区块3202上执行平面化操作以生成网格区块3203。平面化操作可包括基于例如面的平面(或原始)法线来检测网格3202中的平面区域。可以比较第一面3212的平面法线x1,y1,z1和第二面3214的平面法线x2,y2,z2的值。第一面和第二面的平面法线的比较结果可指示平面法线之间的角度(例如,x1和x2之间的角度)。当比较结果在阈值内时,可确定第一平面和第二平面在相同的平面区域上。在示出的示例中,平面3212、3214、3216和3218可被确定为在与平面3228相对应的第一平面区域上;平面3220、3222、3224和3226可被确定为在与平面3230相对应的第二相同平面区域上。

平面化操作还可包括:如虚线3232所示,将由平面3212、3214、3216和3218的边缘形成的三角形投影到平面3228;以及如虚线3234所示,将由平面3220、3222、3224和3226的边缘形成的三角形投影到平面3230。平面化操作还包括:将平面3212、3214、3216和3218的平面法线调整为与平面3228的平面法线(x_a,y_a,z_a)相同;以及将平面3220、3222、3224和3226的平面法线调整为与平面3230的平面法线(x_b,y_b,z_b)相同。

可以在网格区块3203上执行后简化操作以生成网格区块3204。在所示的示例中,网格区块3204将网格区块3203的面数从八个减少到四个。

图33a和33b至36a和36b示出了简化的效果,并排示出了在应用和不应用简化的情况下物理世界的相同部分。这些图提供了图形化的图示,说明简化能够提供可用信息以操作ar系统,同时提供较少的需要处理的数据。

图33a和33b分别示出了没有简化的和通过三角形减少进行了简化的相同环境的表示。这种处理是可在图30中的预简化框3012和后简化框3016处执行的处理的示例。

图34a和34b分别示出了没有通过三角形减少进行了简化的和进行了简化的相同环境的特写(close-up)表示。

图35a和35b分别示出了没有平面化和具有平面化的相同环境的表示。这样的处理是可在图30中的平面化框3014处执行的处理的示例。

图36a和36b分别示出了没有简化的和通过移除断开的部件进行了简化的相同环境的表示。这样的处理是可在图30的框3014处执行的基于区域的操作的替代实施例的示例。

密集3d重建数据的缓存和更新

在一些实施例中,可以以区块的形式捕获、保留和更新3d重建数据,这可以允许在保持相邻一致性的同时进行本地更新。基于区块的3d重建数据表示可以与多层缓存机制结合使用,该多层缓存机制对于ar和mr应用(包括单设备和多设备应用)有效地检索、预取(prefetch)和存储3d数据。例如,体积信息162a和/或网格162c(图6)可以存储在区块中。使用部件164可以使用该基于该区块的表示来接收关于物理世界的信息。类似地,感知部件160可以在区块中存储和检索这样的信息。

这些技术利用有限的计算资源扩展了便携式设备的功能,以高度逼真的方式呈现ar和mr内容。这样的技术例如可用于在资源有限并且连接到因特网(连续或不连续)的移动设备中有效地更新和管理实时或离线重建和扫描的输出。这些技术可在共享和更新相同3d重建数据的单设备应用或多设备应用中为各种移动ar和mr应用提供最新、准确和全面的3d重建数据。这些3d重建数据可以采用任何合适的格式,包括网格、点云、体素等。

一些ar和mr系统已尝试通过限制随时处理的3d重建数据量来简化mr和ar场景的呈现。用于捕获3d信息的传感器可具有最大重建范围,该最大重建范围可限制传感器的视场周围的边界体积。为了减少3d重建数据量,一些重建系统仅将该传感器的视场附近的区域保持在有源工作存储器中,并将其他数据存储在辅助存储设备中。例如,传感器的视场附近的区域被存储在cpu存储器中,而其他数据则被保留在本地缓存(例如磁盘)中,或者通过网络保留到远程存储设备(例如在云中)。

生成存储在cpu存储器中的信息的计算成本,尽管有限,但可能仍然相对较高。一些ar和mr系统不断地重新计算重建系统所见过的环境的全局表示,以便选择要存储在cpu存储器中的信息,这对于交互式应用而言可能是非常昂贵的。其他ar和mr系统使用某些方法仅计算对连接的表示的本地更新可能同样昂贵,尤其是对于简化的网格,因为它需要分解现有网格、计算具有相同边界的另一个网格、然后重新连接网格部分。

在一些实施例中,3d重建数据可被分割成区块。3d重建数据可基于区块在存储介质之间发送。例如,可以从有源存储器中页出(pageout)区块并将其保留到本地或远程缓存中。该系统可实现页式算法(pagingalgorithm),其中与可穿戴设备(例如,头戴式显示设备)相关联的有源存储器存储在可穿戴设备的用户的视场中表示物理世界的3d重建的一部分的区块。可穿戴设备可捕获关于与可穿戴设备的用户的视场相称的物理世界的部分的数据。随着物理世界在用户的视场中变化,表示物理世界的那个区域的区块可在有源存储器中,从有源存储器中可以容易地对其进行更新。随着用户的视场变化,可将表示从用户的视场中移出的物理世界的区域的区块移动到缓存中,使得可以将表示进入用户的视场中的物理世界的区域的区块加载到有源存储器中。

在一些实施例中,可以为要3d重建的物理世界的一部分创建坐标系。物理世界的该部分的3d表示中的每个区块可对应于使用坐标系可标识的物理世界的不同区域。

在一些实施例中,当区块被更新时,更新的区块可以继续与可能尚未被更新的相邻区块对接。如果相邻区块表示的区域不重叠,则相邻区块的融合网格中可能会有裂纹。在一些实施例中,在物理世界空间的表示中的这种裂纹可被解释为具有无限深度的空间。这样,空间可以是物理世界的表示的人工痕迹,而不是实际上的特征。使用此类融合网格以生成物理世界中的对象的表示的任何应用可能均无法正确生成输出。例如,在物理世界中的表面上渲染虚拟角色的应用可将该角色呈现为好像它掉入裂纹一样,这不会创建该对象的所需外观。因此,在一些实施例中,相邻区块的一部分可表示物理世界的相同区域,例如,相邻区块之间的对接可表示物理世界的相同区域,这可以实现考虑层次细节(lod)的容易的独立的更新和/或渲染(例如,降低物理世界的一部分的3d重建的复杂性,因为该部分移出用户的视场)。例如,当区块被更新时,其相邻的区块可不被更新。当将更新的区块与相邻区块融合时,物理引擎可以基于例如相邻区块中的哪一个在其重叠区域中可观察到来确定相邻区块的重叠区域。基于区块的数据结构可以采用侧缘、拉链(zipper)或任何其他合适的方法来表示相邻区块之间的对接区域,使得区块在被更新时,它将继续与未被更新的相邻区块对接。这种方法的外观可以是在相邻区块之间在裂纹上“掩盖”。因此,已经变化的区块可以独立于相邻区块而被更新。

在一些实施例中,这些技术可以在ar和/或mr“平台”中使用,该ar和/或mr“平台”从一个或多个用户佩戴的传感器接收并处理数据。该传感器数据可用于创建和更新表示用户所遇到的部分物理世界的3d重建数据。当传感器正在捕获和更新数据时,重建服务可以连续重建物理世界的3d表示。可以使用一种或多种技术来确定受物理世界的变化影响的区块,并且那些区块可被更新。然后可以将该3d重建数据提供给应用,该应用使用3d重建数据来渲染场景以描绘放置在物理世界中或与物理世界中的对象交互的虚拟现实对象。该数据可以通过应用编程接口(api)被提供给应用。api可以是推送(push)或拉取(pull)接口,当相关部分变化时或者响应于来自该应用对最新信息的请求将数据推送给该应用。

在拉取接口的示例中,当应用请求物理世界的3d重建数据时,重建服务可以确定需要提供给该应用的每个区块的适当版本,从而使重建服务能够从最新的区块开始。重建服务例如可搜索先前保留的区块。单设备系统可以使单个设备能够贡献有关物理世界的3d重建数据。在单设备系统中,如果所请求的物理世界的区域处于活动区域(例如,该设备的当前视场中的区域)或在活动区域之外延伸,则保留的区块可被直接用作最新区块,因为这些保留的区块将不会被更新,因为当该区域移出该设备的视场时它们被保留。另一方面,多设备系统可以使多个设备能够提供有关物理世界的3d重建数据,例如使用云保留性(persistence)或区块的对等本地缓存共享。每个设备可以更新其活动区域内可被保留的区域。多设备系统可创建坐标系,使得由不同设备生成的区块可使用坐标系来标识。因此,如果那些更新是在第一设备做出任何版本之后进行的,则由该应用为第一设备生成的数据所请求的区块可以基于来自其他设备的更新。使用来自第一设备和其他设备的数据构建的区块可以通过使用坐标系来合并。

选择的区块可被用于以任何合适的格式提供关于物理世界的3d重建数据,但是网格在此被用作合适表示的示例。网格可以通过处理图像数据被创建以标识环境中的感兴趣点(例如对象的边缘)。这些点可被连接,形成该网格。网格中与相同对象或其一部分相关联的点的组(通常为三个点)限定了该对象或其部分的表面。与该点的组一起存储的信息描述了环境中的表面。该信息然后可以以各种方式被用来渲染和/或显示关于环境的信息。所选择的区块可以用于以任何合适方式提供3d重建数据。在一些实施例中,可以提供最新的区块。在一些实施例中,最新区块可被用来确定是否需要更新区块。

例如,在一些实施例中,在多设备系统中,当应用请求的区块已被标识时,重建服务可以检查其他设备保留的区块,以确定是否存在任何显著更新(例如,通过几何变化阈值或时间戳),在已变化的区块上重新运行网格划分,然后保留这些更新的网格区块。

在一些实施例中,当由应用请求的区块集已被标识时,如果该应用请求了连接的网格,则该区块集可被处理为全局网格,该全局网格可以是拓扑连接的,或者尽管使用任何合适的技术(例如侧缘和拉链)在拓扑上是断开的但在视觉上是无缝的。

在一些实施例中,当区块变化发生时,应用(例如,图形/游戏引擎)可以更新其内部区块(例如,存储在有源存储器和/或本地缓存中的区块)。重建服务可以知道应用具有哪些区块,并因此可以计算出在引擎中需要更新哪些其他(例如,相邻的)区块,以在视场中的区块更新时保持与侧缘/拉链的正确重叠。

在一些实施例中,ar和/或mr平台可被实现为支持例如在移动设备上执行ar和/或mr应用。在用户接口上执行或生成用于呈现的数据的应用可请求表示物理世界的3d重建数据。该3d重建数据可以从设备上的有源存储器提供,可随着用户变化其视场,用表示设备的视场中的物理世界的3d重建数据来更新有源存储器。有源存储器中的3d重建数据可表示移动设备的活动区域。在一些实施例中,设备的活动区域外部的3d重建数据可被存储在其他存储器中,例如存储在该设备上的本地缓存中,或者通过低延迟连接耦合到该设备。在一些实施例中,设备的活动区域外部的3d重建数据也可被存储在远程缓存中,例如云中,其可以通过较高的延迟连接被该设备访问。当用户变化其视场时,平台可以从缓存中访问/加载3d重建数据,以添加到有源存储器中以表示移入用户的视场中的区域。该平台可将表示移出用户的视场的区域的其他数据移动到缓存中。

对设备的移动(其可能导致区域移入该设备的视场中,而其他区域移出该设备的视场)的预测可被用于发起3d重建数据在有源存储器和缓存之间的传输。移动的预测可以例如用于选择3d重建数据以传输到有源存储器中和/或从有源存储器中传输出来。在一些实施例中,通过从远程缓存检索或向远程缓存传输3d重建数据,预测的移动可被用于将3d重建数据传输到本地缓存中和/或从本地缓存中传输出来。基于用户的预测的移动在本地缓存和远程缓存之间交换3d重建数据,可以确保3d重建数据以低延迟可用,以移入有源存储器中。

在用区块表示物理世界的区域的实施例中,发起区块的传输可能需要预先请求表示被预测进入用户的视场的区域的区块。例如,如果平台基于传感器数据或其他数据确定该用户正以特定速度在特定方向上行走,则它可以标识可能进入用户的视场的区域并传输表示这些区域的区块到移动设备上的本地缓存。如果移动设备是可穿戴设备,例如一组眼镜,则预测运动可能需要接收指示用户的头部的位置、方向和/或旋转的传感器数据。

图37示出了根据一些实施例的为多个用户启用交互式x现实环境的系统3700。系统3700可包括计算网络3705,该计算网络3705包括通过一个或多个高带宽接口3715连接的一个或多个计算机服务器3710。计算网络中的服务器不需要同地协作(co-located)。该一个或多个服务器3710可各自包括用于执行程序指令的一个或多个处理器。这些服务器还包括用于存储程序指令和由服务器在程序指令的指导下执行的过程使用和/或生成的数据的存储器。系统3700可包括一个或多个设备3720,其包括例如ar显示系统80(例如,图3b中的观看光学组件48)。

计算网络3705通过一个或多个数据网络连接3730在服务器3710之间以及服务器和设备3720之间传递数据。此类数据网络的示例包括但不限于任何和所有类型的公共和私有数据网络,移动的和有线的,包括例如许多这样的网络的互连,通常称为因特网。该图无意暗示任何特定的媒体、拓扑或协议。

在一些实施例中,设备可被配置为直接与计算网络3705或任何服务器3710通信。在一些实施例中,设备3720可以与远程服务器3710通信,并且可选地,通过用于在网络3705与一个或多个设备3720之间处理数据和/或传递数据的本地网关3740与其他设备和ar显示系统本地通信。

如图所示,网关3740被实现为单独的硬件部件,其包括用于执行软件指令的处理器和用于存储软件指令和数据的存储器。网关具有其自己的与数据网络的有线和/或无线连接,用于与包括计算网络3705的服务器3710通信。在一些实施例中,网关3740可以与用户佩戴或携带的设备3720集成在一起。例如,网关3740可被实现为在设备3720中包括的处理器上安装并运行的可下载软件应用。在一个实施例中,网关3740为一个或多个用户提供通过数据网络3730到计算网络3705的访问。在一些实施例中,网关3740可包括通信链路76和78。

服务器3710每个都包括例如用于存储数据和软件程序的工作存储器和存储设备、用于执行程序指令的微处理器、图形处理器和其他用于渲染和生成图形、图像、视频、音频和多媒体文件的特殊处理器。计算网络3705还可包括用于存储由服务器3710访问、使用或创建的数据的设备。在一些实施例中,计算网络3705可包括远程处理模块72和远程数据存储库74。

在服务器以及可选的设备3720和网关3740上运行的软件程序用于生成用户通过其与设备3720交互的数字世界(本文也称为虚拟世界)。数字世界由描述和/或限定可通过设备3720呈现给用户用于用户体验并与之交互的虚拟、不存在的实体、环境和条件的数据和过程来表示。例如,当在用户正在观看或体验的场景中被实例化时,看起来物理存在的某种类型的对象、实体或项目可包括其外观、其行为、如何允许用户与其交互、以及其他特性的描述。用于创建虚拟世界(包括虚拟对象)的环境的数据可包括例如大气数据、地形数据、天气数据、温度数据、位置数据以及用于限定和/或描述虚拟环境的其他数据。另外,限定监管(govern)虚拟世界的操作的各种条件的数据可包括例如物理定律、时间、空间关系以及可用于限定和/或创建监管虚拟世界(包括虚拟对象)的操作的各种条件的其他数据。

除非上下文另有指示,否则本文将通用地将数字世界的实体、对象、条件、特性、行为或其他特征作指为对象(例如,数字对象、虚拟对象、渲染的物理对象等)。对象可以是任何类型的有生命或无生命的对象,包括但不限于建筑物、植物、车辆、人、动物、生物、机器、数据、视频、文本、图片和其他用户。还可以在数字世界中限定对象,以存储有关物理世界中实际存在的项目、行为或条件的信息。描述或限定实体、对象或项目或存储其当前状态的数据在本文中通常称为对象数据。该数据由服务器3710、或根据实现情况由网关3740或设备3720处理,以实例化对象的实例并以使用户通过设备3720体验的适当方式渲染该对象。

开发和/或策划数字世界的程序员可创建或限定对象以及实例化对象的条件。但是,数字世界可以允许其他人创建或修改对象。一旦对象被实例化,可以允许体验数字世界的一个或多个用户更改、控制或操纵该对象的状态。

例如,在一个实施例中,数字世界的开发、生成和管理通常由一个或多个系统管理程序员来提供。在一些实施例中,这可包括数字世界中的故事情节、主题和事件的开发、设计和/或执行,以及通过各种形式的事件和媒体(例如,电影、数字、网络、移动、增强现实和直播娱乐)对叙述的分发。系统管理程序员还可以处理数字世界和与之相关联的用户社区的技术管理、审核(moderation)和策划(curation),以及通常由网络管理人员执行的其他任务。

用户使用某种类型的本地计算设备(通常称为设备3720)与一个或多个数字世界进行交互。此类设备的示例包括但不限于智能手机、平板电脑设备、抬头显示(hud)、游戏机、或他能够向用户传递数据并提供接口或显示的任何其设备、以及这些设备的组合。在一些实施例中,设备3720可包括本地外围设备或输入/输出部件(例如键盘、鼠标、操纵杆、游戏控制器、触觉接口设备、运动捕获控制器、音频设备、语音设备、投影仪系统、3d显示器和全息3d接触镜片)或与之通信。

图38是示出根据一些实施例的电子系统3800的示意图。在一些实施例中,系统3800可以是图37的系统3700的一部分。系统3800可包括第一设备3810(例如,第一用户的第一便携式设备)和第二设备3820(例如,第二用户的第二便携式设备)。设备3810和3820例如可以是图37的设备3720和ar显示系统80。设备3810和3820可以分别通过网络3804a和3804b与云缓存3802通信。在一些实施例中,可以在图37的一个或多个服务器3710的存储器中实现云缓存3802。网络3804a和3804b可以是图37的数据网络3730和/或本地网关3740的示例。

设备3810和3820可以是单独的ar系统(例如,设备3720)。在一些实施例中,设备3810和3820可包括它们各自的用户所佩戴的ar显示系统。在一些实施例中,设备3810和3820之一可以是用户佩戴的ar显示系统;另一个可以是用户持有的智能手机。尽管在该示例中示出了两个设备3810和3820,但是应当理解,系统3800可包括一个或多个设备,并且该一个或多个设备可以运行相同类型的ar系统或不同类型的ar系统。

设备3810和3820可以是便携式计算设备。第一设备3810例如可包括处理器3812、本地缓存3814和一个或多个ar应用3816。处理器3812可包括计算部分3812a,其被配置为至少部分地基于由一个或多个传感器(例如,图3b的深度传感器51、世界相机52、和/或惯性测量单元57)收集的数据执行计算机可执行指令以提供物理世界的一部分的3d表示(例如,3d重建数据)。

计算部分3812a可以将物理世界表示为一个或多个区块。每个区块可表示物理世界的不同区域中的对象。每个区域可具有对应的体积。在一些实施例中,区块可表示具有相同体积的区域。在一些实施例中,区块可表示具有不同体积的区域。例如,当物理世界是办公室时,办公室可被划分为立方体,每个立方体可为一个立方英尺。一个区块可包括该办公室的一个立方体的3d表示(例如3d重建数据)。在一些实施例中,办公室可被划分成具有各种体积的区域,并且每个体积可包括相似量的3d信息(例如,3d重建数据),使得每个区域的3d表示的数据大小可以相似。该表示可被格式化,以便于诸如遮挡处理之类的进一步的处理,以确定虚拟对象是否被物理对象或物理处理所遮挡,以确定虚拟对象在与物理世界中的物理对象交互时应如何移动或变形。区块例如可被格式化为网格区块,其中物理世界中对象的特征(例如拐角)成为网格区块中的点,或者被用作创建网格区块的点。网格中的点之间的连接可指示物理对象的相同表面上的点的组。

每个区块可具有一个或多个版本,每个版本包含基于时间点上的数据表示其对应区域的数据(例如,诸如体素的体积3d重建数据,和/或可表示由对应区块所表示的区域中的表面的网格)。当附加数据变得可用时,计算部分3812a可创建区块的新版本,诸如指示物理世界中的对象已经变化的数据或者可以根据其创建物理世界的更精确表示的附加数据。附加数据可来自设备(例如,设备3810和/或3820)上的传感器。在一些实施例中,附加数据可来自远程传感器,并且可以例如通过网络连接获得。

处理器3812还可包括有源存储器3812b,该有源存储器3812b可被配置为存储设备的视场中的区块。在一些实施例中,有源存储器3812b可以存储设备的视场外部的区块。在一些实施例中,有源存储器3812b可以存储与设备的视场中的区块相邻的区块。在一些实施例中,有源存储器3812b可以存储被预测为在设备的视场中的区块。在一些实施例中,如果区块当时在设备的视场内,则处理器3812维持区块在有源存储器3812b中。视场可以由一个或多个传感器的成像区域确定。在一些实施例中,视场可以通过向该设备的用户所呈现的或普通用户可以感知的物理世界的量来确定,而不使用ar系统。因此,视场可取决于用户在物理世界中的位置以及设备的可穿戴部件的取向。

如果当用户移动时区块变为在设备3810的视场外部,则处理器3812可以将区块视为非活动的。非活动区块可从有源存储器中页出到缓存。缓存可以是本地缓存或远程缓存。在图38的实施例中,首先通过本地网关3818b将区块页出到本地缓存3814。在一些实施例中,本地缓存3814可以是唯一可用的缓存。

在一些实施例中,可存在可通过网络访问的远程缓存。在所示的实施例中,通过网络3804a访问的云缓存(例如,远程缓存)3802是远程缓存的示例。处理器3812可以管理何时在本地缓存3814和云缓存3802之间移动区块。例如,当本地缓存3814已满时,处理器3812可以通过网络3804a将区块页出到云缓存3802。由于本地缓存3814中的区块可访问以比云缓存中的区块以更低的延迟来渲染场景,因此处理器3812可使用旨在将最有可能变得活动的区块保留在本地缓存3814中的算法来选择要从本地缓存3814中页出的区块。这样的算法可以基于访问的时间。在一些实施例中,算法可以基于将改变设备的视场的设备的运动的预测。

渲染场景的应用(例如,计算机游戏)可以获得表示物理世界中影响要渲染的场景的部分的信息。应用3816可以通过本地网关3818a从有源存储器3812b获得活动区块。在一些实施例中,本地网关3818a可被实现为应用编程接口(api),使得处理器3812为应用3816实现“服务”。在将物理世界的数据表示为网格的实施例中,该服务可以是“网格划分服务”。api可被实现为推送或拉取接口,或者可具有两者的属性。在拉取接口中,例如,应用3816可指示其需要数据的物理世界的部分,并且服务可以提供那些部分的数据。例如,在推送系统中,当此类数据变化或变得可用时,服务可以提供有关物理世界的部分的数据。

有关数据被提供的物理世界的部分可限于应用3816指示的相关部分,例如,设备的视场内的数据或表示物理世界在设备的视场的阈值距离内的部分的数据。在拉取/推送系统中,应用3816可以请求物理世界的一部分的数据,并且服务可以提供关于所请求的部分加上其中数据已经变化的任何相邻部分的数据。为了将信息限制为已变化的信息,除了维护描述物理世界的区块之外,服务还可以跟踪区块的哪些版本被提供给了每个应用3816。确定物理世界的表示的哪一部分将被更新以及更新发生的位置的操作可以以任何合适的方式在应用3816和服务之间被分区(partition)。同样,更新的数据被并入到物理世界的表示中的位置可以以任何合适的方式被分区。

在一些实施例中,当传感器正在捕获和更新数据时,重建服务可以连续地重建物理世界的3d表示。数据然后可以被提供给使用3d重建数据来渲染场景以描绘物理世界和位于物理世界中或与物理世界中的对象交互的虚拟现实对象的应用3816。该数据可以通过api被提供给应用3816,api可被实现为当相关部分变化时将数据推送给应用3816的推送接口,或者响应于来自应用3816对最新信息的请求的拉取接口、或两者兼而有之。

例如,应用3816可以在对相对于由设备的当前位置和设备所面对的方向限定的原点的10米距离构成45度视角的物理世界的一部分的网格表示上运行。当该区域变化或数据指示该区域内的物理变化变得可用时,可以计算网格来表示该区域。该网格可以基于服务提供的数据在应用3816中被计算,或者可以在服务中被计算并提供给应用3816。在两种情况下,服务都可以在物理世界中存储信息,从而简化网格的计算。如本文所述,可以使用具有拉链、侧缘或利用其他技术实现的以便于在相邻区块之间的裂纹上“掩盖”的区块,以使得能够仅处理物理世界的表示的变化的部分。物理世界的表示的变化的部分然后可以替换物理世界的先前的表示中的对应部分。

有效访问物理世界中用于生成将由应用3816用来向用户渲染场景的网格的部分的表示可减少计算机资源,从而使xr系统更易于在便携式设备或具有有限计算资源的其他设备上实现,并且可产生更逼真的用户体验,因为xr场景与物理世界更好地匹配。相应地,代替或除了使用具有侧缘、拉链的区块或其他技术来促进在区块之间的裂纹上掩盖,如本文其他地方所述,用于将区块页入和页出有源存储器和/或本地缓存的算法可被选择来减少对在任何给定时间计算网格所需的区块的访问时间。

在图38的示例性实施例中,网关3818a是拉取接口。当ar应用3816请求关于物理世界的区域的信息,但是表示区域的区块不在有源存储器3812b中时,处理器3812可以搜索保留在本地缓存3814中的区块。如果处理器3812在有源存储器3812b和本地缓存3814两者中找不到区块,处理器3812可以搜索保留在云缓存3802中的区块。由于对有源存储器3812b的访问比对本地缓存3814中的数据的访问具有更低的延迟,对本地缓存3814中的数据的访问比对云缓存3802中的数据的访问具有更低的延迟,生成网格的总体速度可以通过实现页式(paging)算法的服务来提高,页式算法在区块被请求之前,将区块加载到有源存储器中,或者在区块被请求之前,将区块从云缓存3802移到本地缓存3814。

类似于第一设备3810,第二设备3820可包括具有计算部分3822a和有源存储器3822b的处理器3822、本地缓存3824、以及一个或多个ar应用3826。ar应用3826可以通过本地网关3828a与处理器3822通信。本地缓存3824可以通过本地网关3828b与处理器3822通信。

因此,云缓存3802可以保留从设备3810和3820两者发送的区块。第一设备3810可以在云缓存3802中访问从第二设备3820捕获和发送的区块;同样,第二设备3820可以在云缓存3802中访问从第一设备3810捕获和发送的区块。

设备3801和3802被提供作为便携式ar设备的示例。可以类似地使用并且执行任何合适的设备,例如智能手机。

图39是示出根据一些实施例的操作系统(例如,系统3700)的方法3900的流程图。在动作3902,设备可以捕获关于包括物理世界中的对象的物理世界的3d信息,并且将物理世界表示为包括3d重建数据的区块。在一些实施例中,3d重建数据可以由单个系统捕获,并且仅用于在该系统上渲染信息。在一些实施例中,3d重建数据可由多个系统捕获,并且可用于在多个系统中的任何一个系统或任何其他系统上渲染信息。在这些实施例中,来自多个系统的3d重建数据可被组合并且可被多个系统或任何其他系统访问。

例如,各自戴着ar系统的几个用户,可以在探索仓库时将他们的设备设置为增强模式。每个设备的传感器可正在捕获在传感器的视点文件(fileofview)中的仓库的3d信息(例如,包括深度图、图像等的3d重建数据),视点文件包括仓库中的对象(例如,桌子、窗户、门、地板、天花板、墙壁)。每个设备可以将仓库分割为具有对应体积的区域,并将各个区域表示为区块。这些区块可具有版本。区块的每个版本可具有表示在某个时间点在物理世界的区域中的对象的值。

当应用需要有关物理世界的信息时,表示物理世界的那部分的区块的版本可被选择并用于生成该信息。尽管这种选择处理可以由任何合适的处理器执行或分布在任何合适的处理器上,但是根据一些实施例,处理可以在请求数据的应用正在其上执行的设备上本地进行。

因此,在动作3904,处理器(例如,处理器3812或3822)可以响应来自应用(例如,ar应用3816或3826)的对3d重建数据的请求。在一些实施例中,不管应用是否请求3d重建数据,设备都可以继续捕获包括关于物理世界的3d重建数据的3d信息,并将物理世界表示为3d重建数据的区块。3d重建数据可以用于创建区块的新版本。

如果应用请求3d重建数据,则处理可以进行到动作3906,在步骤3906中,处理器可以根据请求标识与传递3d重建数据所需的物理世界的一部分相对应的区块的子集。区块的标识可以基于例如由传感器(例如,深度传感器51、世界相机52、惯性测量单元57、全球定位系统等)收集的数据。多设备系统可创建公共坐标系,从而可以使用公共坐标系来创建与物理世界的对应部分相关联的不同设备所生成的区块,而无需考虑哪个设备提供了3d重建数据来重建由该区块表示的物理世界的部分。作为可以如何创建公共坐标系的一个示例,可以将来自大致相同附近的设备的数据路由到相同服务器或一个或多个服务器进行处理。在那里,来自每个设备的数据可以最初在特定于设备的坐标系中表示。一旦从每个设备收集了足够的数据以标识物理世界的公共部分中的特征,就可以将这些特征关联起来,从而提供从一个特定于设备的坐标系到其他特定于设备的坐标系的转换。这些特定于设备的坐标系中的一个可被指定为公共坐标系,而其他坐标系之间可以进行转换,并且该坐标系可被用于将数据从特定于设备的坐标系转换为被指定为公共坐标系的坐标系。无论创建公共坐标系的具体机制如何,一旦创建了公共坐标系,由生成用于第一设备的数据的应用请求的3d重建数据都可以基于来自其他设备的更新(如果这些更新是在第一设备制作的任何版本之后进行的)。可以通过使用例如公共坐标系来合并来自第一设备和其他设备的区块。

动作3906中的特定处理可以取决于请求的性质。在一些实施例中,如果请求3d重建数据的应用维持其自己的关于区块的信息并请求特定区块,则在动作3904处对3d重建数据的请求可包括对区块的特定子集的参考,并且在动作3906处标识区块的子集可包括确定与区块的特定子集相对应的区块的子集。在一些实施例中,在动作3904处对3d重建数据的请求可包括对应用正在其上执行的设备的视场的参考,并且在动作3906处标识区块的子集可包括确定与设备的参考视场相对应的区块的子集。

不管标识/确定区块的方式如何,在动作3908,处理器可以选择区块子集的区块的版本。选择可以基于一个或多个标准。标准可以例如基于来自可用源的区块的最新版本。在所示的实施例中,区块的版本可以存储在有源存储器、本地缓存或远程缓存中。动作3908例如可包括在有源存储器中选择版本(如果可用),或者如果不可用,在本地缓存中选择版本(如果可用),或者从远程缓存中选择版本(如果可用)。如果没有可用的区块版本,则选择可能需要例如根据利用传感器(例如深度传感器51、世界相机52和/或惯性测量单元57)收集的数据(例如3d重建数据)来生成区块。这种用于区块选择的算法可以用在管理诸如后台过程、存储在每个可能位置中的区块版本的系统中。下面结合图41描述示例性管理过程。

在动作3910,处理器可以将基于选择的区块版本的信息提供给应用。动作3910处的处理可能需要简单地将区块提供给应用,这在应用直接使用区块时可以是适当的。在应用接收网格的情况下,动作3910处的处理可能需要从区块和/或区块子集生成网格,并将网格或网格的任何适当部分提供给应用。

图40是示出根据一些实施例的捕获关于物理世界中的对象的3d信息并将物理世界表示为3d重建数据的区块的细节的流程图。在一些实施例中,图40是示出了图39的动作3902的细节的流程图。在动作4002,系统(例如系统3700)的一个或多个传感器(例如深度传感器51、世界相机52、惯性测量单元57等)捕获关于物理世界中的对象的3d信息,物理世界包括物理世界中的对象。

在动作4004,系统的处理器(例如,处理器3812或3822)可以基于由一个或多个传感器捕获的3d信息来创建包括物理世界的3d重建数据的区块的版本。在一些实施例中,每个区块可被格式化为网格的一个或多个部分。在一些实施例中,可以使用物理世界的其他表示。

区块可具有版本,使得每当关于物理世界的区域的信息被任何设备捕获时,区块的新版本就可被存储。区块的每个版本可具有3d重建数据,3d重建数据包括表示在某个时间点的物理世界的区域中的对象的值。在一些实施例中,这种处理可以在设备上本地执行,导致区块的新版本被存储在有源存储器中。在一些实施例中,在多设备系统中,类似的处理可以在服务器(例如,图37的服务器3710)中执行,服务器可以管理区块的版本,使得每个区块在其远程缓存中可用的最新版本每当被任何设备请求时都会被提供。

因为这些区块表示物理世界,而其大多数都将保持不变,所以当表示物理世界的对应区域的新3d重建数据可用时,区块的新版本不一定会被创建。而是,管理区块的版本可能需要处理表示物理世界的3d重建数据,以确定自从表示物理世界的那些区域的区块的上次版本以来是否存在足够的变化以保证变化。在一些实施例中,自从已经存储了上次版本以来,可以通过区块度量的大小变得高于阈值来指示足够的变化。

在一些实施例中,当区块被请求时,可以应用其他标准来确定提供区块的哪个版本被提供作为当前版本,例如具有指示区块中的数据的完整性或准确性的度量的最小值的版本。可以在每个设备上执行类似的处理,从而产生存储在设备上的本地缓存中的区块版本。

可以使用一种或多种技术来管理对每个设备上的服务可用的区块的版本。例如,如果存在已经计算出的区块的可接受版本,而不是根据传感器数据创建区块的新版本,则处理器可以访问先前存储的区块。这样的访问可以通过管理区块的版本的存储来有效地执行。在动作4006,设备的处理器可以从有源存储器(例如,有源存储器3812b或3822b)中页出物理世界的3d重建数据的区块的版本。页式可包括处理器访问传感器数据,以便例如根据设备的视场连续地更新有源存储器/本地缓存/云缓存中的区块。当设备的视场变化时,对应于新视场的区块可以从本地缓存和/或云缓存转移(例如,页式)到有源存储器中,并且对应于恰在新视场外部的区域的区块(例如,与新视场中的区块相邻的区块)可被从有源存储器和/或云缓存转移(例如,页式)到本地缓存。例如,在动作4008,可以将由处理器页出的区块的版本保留在本地存储器(例如,本地缓存3814或3824)和/或远程存储器(例如,云缓存3802)中。在一些实施例中,当例如在设备上创建区块的每个新版本时,该版本可被发送给远程存储器,使得其他用户可以访问它。

图41是示出根据一些实施例的用于执行选择表示区块的子集的区块的版本的示例性过程的流程图。在一些实施例中,图41是示出图39的动作3908的细节的流程图。为了选择区块的子集中的每个区块的版本,在动作4102,处理器(例如,处理器3812或3822)可以查询是否在有源存储器(例如,有源存储器3812b或3822b)中存储了最新版本。在一些实施例中,可以通过将附加到版本的值(例如,几何图形变化大小、时间戳等)与用传感器(例如,深度传感器51、世界相机52和/或惯性测量单元57)收集的数据进行比较,来确定版本是否是最新的。在一些实施例中,可以在当前传感器数据和有源存储器中存储的区块的版本之间进行比较。基于差异的程度,其可表示物理世界的变化或例如有源存储器中版本的质量,则有源存储器中的版本可被认为是最新的。

如果最新版本存储在有源存储器中,则处理进行到动作4104,在动作4104中选择最新版本。如果有源存储器中没有存储最新版本,则处理进行到动作4106,在动作4106中处理器可以查询是否将最新版本存储在本地存储器(例如,本地缓存3814或3824)中。可以使用以上结合动作4102描述的标准或任何其他合适的标准来执行查询。如果最新版本被存储在本地存储器中,则在动作4108,选择最新版本。

如果在本地存储器中没有存储最新版本,则在动作4110,处理器可以查询是否在远程存储器(例如,云缓存3802)中存储了最新版本。查询还可以使用上面结合动作4102描述的标准或任何其他合适的标准来执行。如果在远程存储器中存储了最新版本,则在动作4112,选择最新版本。

如果在远程存储器中没有存储最新版本,则处理可以进行到动作4114,在动作4114中设备的处理器可以基于传感器捕获的3d信息(例如,3d重建数据)生成区块的新版本。在一些实施例中,在动作4116,处理器可以用新版本标识区块的相邻区块,并根据区块的新版本来更新标识的相邻区块。

图42是示出了根据一些实施例的操作系统的方法4200的流程图。在方法4200中,不是在设备需要那些区块时将区块拉入有源存储器和/或本地缓存中,而是可以基于设备运动基于设备的视场的投影来管理页式。

与动作3902相似,在动作4202,设备上的传感器可以捕获有关包括物理世界中的对象的物理世界的3d信息,并将物理世界表示为包括3d重建数据的区块。

在动作4204,处理器(例如,处理器3812或3822)可以至少部分地基于传感器的输出来计算物理世界的区域,便携式可指向部件(例如,深度传感器51、世界相机52和/或惯性测量单元57)将在将来的某个时间被指向区域。在一些实施例中,处理器可以基于来自惯性传感器的运动数据或捕获的图像的分析结果进行计算。在简单的计算中,例如,为了获得快速的结果,处理器可以基于用户的头部的平移和旋转来进行计算。在应用更全面的算法时,处理器可以基于场景中的对象进行计算。例如,算法可以认为朝向墙壁或桌子行走的用户不太可能穿过墙壁或桌子行走。

在动作4206,处理器可以基于计算的区域来选择区块。在动作4208,处理器可以使用选择的区块来更新有源存储器(例如,有源存储器3812b或3822b)。在一些实施例中,处理器可以基于图41的流程图选择区块。在动作4210,处理器可以基于每个区块自区块的版本上次被提供给应用以来的变化,从有源存储器中选择区块以例如通过api提供给应用(例如,应用3816或3826)。

在一些实施例中,在动作4206,处理器可以从远程存储器(例如,云缓存3802)请求选择的区块,并且更新存储在本地缓存(例如3814或3824)中的信息,使得本地缓存存储选择的区块。动作4206可以类似于图39中描述的动作3908。

如上所述的基于区块的处理可以基于允许3d表示的部分被分别处理然后与其他区块组合的区块。根据一些实施例,可以对区块进行格式化,使得当区块变化时,变化的表示在与其他区块的接口处很大程度上或完全保持区块的值。这样的处理使得区块的变化版本能够与未变化的相邻区块的版本一起使用,而不会在基于变化和未变化的区块渲染的场景中创建不可接受的人工痕迹。图43a-48示出了这样的区块。

物理世界的3d表示可以通过体积3d重建来提供,体积3d重建可创建由传感器捕获的物理世界的3d信息的3d重建数据层次。例如,传感器可以是深度相机,其可以捕获物理世界的3d信息,例如,具有深度相机的各个姿势(即,相机姿势)的深度图像流。物理世界的3d信息可被处理为体素栅格。每个体素可包含一个或多个有符号的距离函数(sdf),这些函数描述体素是位于物理世界中的对象的几何图形的内部还是外部。体素可被分组为“砖块”。每个砖块可包括例如立方体积的多个体素,例如83个体素。砖块可被进一步分组为“图块”。每个图块可包括多个砖块。

在一些实施例中,体素栅格可被映射为符合存储器结构。图块可以对应于存储介质的存储页式。图块的大小可以例如取决于使用的存储介质的存储页式的大小是可变的。因此,可以基于图块,在存储介质(例如,设备的有源存储器和/或本地存储器,和/或云中的远程存储器)之间发送3d重建数据。在一些实施例中,可以处理一个或多个图块以生成区块。区块可以例如在一个或多个图块中的至少一个体素变化时被更新。

区块可能未必限于与图块相对应。在一些实施例中,区块可以根据一个或多个砖块、一个或多个体素、或一个或多个sdf样本等生成。区块可以是物理世界的任何适当分区。区块不必一定限于网格的格式。区块可以是3d重建数据的任何合适的格式。

图43a-d示出了由网格区块4302表示的示例性物理世界4300。每个网格区块4302可以从与网格区块的预定体积相对应的体素4304中提取。在所示的示例中,每个区块可以是低级重建模型中体素的立方体区域(例如1m3)的输出。每个网格区块4302可包含世界网格的一部分并且可被独立地处理。由于在探索新区域或环境中移动的事物时某些区块变化了,因此可以通过快速本地更新实现可扩展性(scalability)。在所示的示例中,除了网格区块4306(其具有放置在现有表面4310前面的新对象4308)之外,网格区块没有任何变化。在这种情况下,ar系统仅需要更新网格区块4306,与对世界的整个网格任意更新相比,这可以节省大量的计算能力。

图43b是示出根据一些实施例的网格区块的简化示意图。在所示的示例中,网格区块在内部可具有完全连接的网格,这意味着顶点由多个三角形共享。

另一方面,单独的网格区块可以是不连接的独立网格。图43c是示出根据一些实施例的裂纹的简化示意图,裂纹可存在于两个相邻的网格区块的边缘处。图44d是示出根据一些实施例通过实现与相邻网格区块重叠的网格侧缘来掩盖图43c中的裂纹的简化示意图。

图44是示出了根据一些实施例的以2d分割物理世界的一部分的表示4400的示意图。可以通过连接四个区块(区块a-d)集来获得2d表示4400。表示4400可被分割成四个区块:例如由实线4410示出的区块4402、4404、4406和4408。在一些实施例中,可以将区块4402、4404、4406和4408分别指定为区块a-d。应用可能需要具有网格格式的3d重建数据,以用于进一步的处理,例如遮挡测试,以及在物理引擎中生成物理效果。在一些实施例中,区块集可以是网格的格式,其可以由设备(例如,设备3810、3820)、网络(例如,包括云缓存3802的云)、或离散的应用(例如,应用3816、3826)生成。

在一些实施例中,区块4402、4404、4406和4408的边界处的区域可以是例如由虚线4412示出的侧缘。在一些实施例中,区块a-d中的每个区块可包括区块和对应的侧缘。例如,区块b可包括区块4404和与区块b的相邻区块a、c和d的边界部分重叠的侧缘4414,以便在将区块连接成全局网格时可以掩盖区块之间上的裂纹。区块a、c和d也可包括对应的侧缘。因此,在将包括3d重建数据的区块返回给应用之前,处理器可以掩盖区块之间的任何裂纹。

在一些实施例中,全局网格可以是拓扑连接的全局网格。例如,区块集中的相邻区块可以在诸如线4410之类的区块边界处共享网格顶点。在一些实施例中,全局网格使用任何合适的技术(例如侧缘和拉链)尽管在拓扑上是断开的但是在视觉上可以无缝的。

尽管示出了采用侧缘的方法,但是可以使用其他方法来使变化后的区块能够与未变化的相邻区块结合,例如拉链。尽管在所示示例中,物理世界的一部分由四个2d区块表示,但是应意识到,物理世界的一部分可由任意合适数量(例如,两个、三个、五个、六个或更多)的2d和/或3d区块表示。每个区块可以对应于物理世界中的空间。在一些实施例中,物理世界的一部分的2d和/或3d表示中的区块可以对应于物理世界中相同大小(例如,面积/体积)的空间。在一些实施例中,物理世界的一部分的2d和/或3d表示中的区块可以对应于物理世界中不同大小的空间。

图45是示出根据一些实施例的物理世界的一部分的3d表示4500的示意图。类似于2d表示4400,可以通过连接八个区块(区块a-h)来获得3d表示4500。在一些实施例中,区块a-h可以彼此排他,例如不具有重叠区域。在一些实施例中,区块a-h可具有与相邻区块重叠的区域(例如,侧缘4516)。在一些实施例中,区块a-h中的每个区块可具有版本。区块的每个版本可具有表示某个时间点物理世界的区域中的对象的值。在所示的示例中,3d表示4500包括区块a-h的版本:区块a的版本4502、区块b的版本4504、区块c的版本4514、区块d的版本4512、区块e的版本4534、区块f的版本4506、区块g的版本4508和区块h的版本4510。区块a的版本4502可包括值4518;区块b的版本4504可包括值4522;区块c的版本4514可包括值4528;区块d的版本4512可包括值4532;区块e的版本4534可包括值4520;版本4506可包括值4524;版本4508可包括值4526;版本4510可包括值4530。

图46是示出了根据一些实施例的通过更新3d表示4500获得的物理世界的一部分的3d表示4600的示意图。与3d表示4500相比,3d表示4600可具有包括信息4630的区块h的新版本4610。信息4630可以与信息4530不同。例如,第一设备可以将区块h的版本4510保留在远程存储器中。区块h的版本4510可包括与具有空表面的桌子相对应的信息4530。在第一设备离开区域(例如,第一设备的视场不再包括区块h)之后,第二设备可以将虚拟和/或物理盒子放在桌子的表面上,然后将区块h的版本4610保留在远程存储器中。区块h的版本4610可包括与具有虚拟和/或物理盒子的桌子相对应的信息4630。如果第一设备返回,则第一设备能够选择区块h的版本4610,以从区块h的可用版本(包括区块h的版本4610和4510)进行观看。

图47是示出了第一设备4702(例如,设备3810)和第二设备4712(例如,设备3820)可观看的增强世界4700的示意图。第一和第二设备可包括以增强模式操作的ar显示系统4704和4714(例如,ar显示系统80)。可以通过连接四个区块(区块a-d)获得增强世界4700。在所示的示例中,增强世界4700包括区块a-d的版本:区块a的版本4702a、区块b的版本4702b、区块c的版本4702c和区块d的版本4702d。第一设备4702可正在看第一方向4706并且具有第一视场(fov)4708。在所示示例中,第一fov包括区块b的版本4702b和区块d的版本4702d。第二设备4704的处理器(例如3812)可包括计算机可执行指令,用于标识与第一fov对应的区块b和d,并选择区块b的版本4702b和区块d的版本4702d。第二设备4714可正在看第二方向4716,并具有第二fov4718。在所示示例中,第二fov包括区块c的版本4702c和区块d的版本4702d。第二设备4714的处理器(例如3822)可包括计算机可执行指令,用于标识与第二fov相对应的区块c和d,并选择区块c的版本4702c和区块d的版本4702d。

图48是示出根据一些实施例的通过用区块的新版本更新增强世界4700而获得的增强世界4800的示意图。与增强世界4700相比,增强世界4800可包括与版本4702c不同的区块c的版本4802c,以及与版本4702d不同的区块d的版本4802d。第一设备4702可以看向第三方向4806并且具有第三fov4808。在所示的示例中,第三fov包括区块c的版本4802c和区块d的版本4802d。第一设备4702的处理器可包括计算机可执行指令,用于基于例如基于用第一设备4702的传感器收集的fov和/或信息的变化确定向应用提供版本4702c、4802c、4702d和4802d中的哪个版本。在一些实施例中,第一设备4702的处理器可包括计算机可执行指令,用于在本地存储器(例如,本地缓存3814、3824)或远程存储器(例如,云缓存3802)中没有区块c和d的对应最新版本时,生成区块c的版本4802c和区块d的版本4802d。在一些实施例中,第一设备4702能够估计其fov的变化(例如,从第一fov4708到第三fov4808),基于估计来选择区块c,并且将区块c的版本存储到更接近于处理器的存储器中(例如,将区块c的版本从远程存储器移动到本地缓存,或从本地缓存移动到有源存储器)。

使用光线投射和实时深度进行遮挡渲染的方法

可以通过向生成ar和mr场景的应用提供遮挡数据来增强向用户呈现ar和mr场景的真实感,其中遮挡数据是从一个或多个深度数据源的组合中推导的。遮挡数据可表示场景中的物理对象的表面,并且可以以任何适当的方式格式化,例如通过深度数据,深度数据指示与要渲染场景的视点和表面的距离。例如,使用部件164可从感知模块160(图6)接收遮挡数据。

然而,在一些实施例中,一个数据源可以是一个或多个深度相机,其直接感测并捕获深度相机与物理世界中的真实对象之间的位置。来自深度相机的数据可被直接提供给使用部件164,或者可以例如通过感知模块160被间接提供。一个或多个深度相机可以以足够高以捕获物理世界中的变化但足够低以不增加处理负担的帧速率提供对物理世界的即时视图。在一些实施例中,帧速率可以是每秒5帧、每秒10帧、每秒12帧、每秒15帧、每秒20帧、每秒24帧、每秒30帧,等等。在一些实施例中,帧速率可以小于每秒5帧。在一些实施例中,帧速率可以大于每秒30帧。因此,在一些实施例中,帧速率可以在每秒1-5帧、每秒5-10帧、每秒10-15帧、每秒15-20帧或每秒20-30帧等的范围内。

第二数据源可以是可以捕获物理世界的视觉表示的立体视觉相机。来自深度相机的深度数据和/或来自视觉相机的图像数据可被处理以提取表示物理世界中的真实对象的点。可以处理来自诸如立体相机的视觉相机的图像,以计算物理世界的三维(3d)重建。在一些实施例中,深度数据可以例如使用深度学习技术根据来自视觉相机的图像生成。可以在遮挡数据之前计算一些或全部3d重建,并将其存储在存储器中。在一些实施例中,3d重建可通过与生成用于遮挡处理的深度信息的任何过程无关的过程被维持在计算机存储器中,遮挡处理可以根据需要访问存储的3d重建。在一些实施例中,3d重建可被维持在存储器中,并且其部分可以响应于以下指示被更新,例如基于深度信息计算出的物理世界中存在与3d重建的部分相对应的变化。在一些实施例中,第二数据源可以通过到物理世界的3d重建中的光线投射来实现,以获得低级3d重建数据(例如,光线投射点云)。通过光线投射,来自第二数据源的数据可被选择以填充遮挡数据中的任何孔,使得能够积分来自两个(或更多)源的数据。

根据一些实施例,可以相对于ar或mr系统的用户来定向深度数据和/或图像数据和/或3d重建的低级数据。例如,可以通过使用来自用户佩戴的传感器的数据来实现这种定向。传感器可被佩戴在例如头戴式显示设备/单元上。

在其中可以根据多个深度数据源生成遮挡数据的系统中,系统可包括过滤器,过滤器标识3d区域的哪些部分由来自多个深度数据源中的每一个的数据表示。过滤器可以应用一个或多个标准来标识区域的部分,针对该部分将收集来自第二数据源的数据。这些标准可以是深度数据的可靠性的指示。由于收集了深度数据,另一标准可以是在区域的部分中检测的变化。

在多个深度数据源之间进行选择以为3d区域的表示的不同部分提供数据可减少处理时间。例如,当从用第一数据源收集的数据中推导遮挡数据所需的处理要比用第二数据源所需的处理少时,选择可能偏爱来自第一数据源的数据,但是当来自第一数据源的数据不可用或不可接受时使用来自第二源的数据。作为特定示例,第一数据源可以是深度相机,第二数据源可以是立体视觉相机。来自立体相机的数据可被格式化为物理世界的3d重建。在一些实施例中,可以在需要遮挡数据之前计算3d重建。替代地或附加地,当需要遮挡数据时,可以重新计算3d重建。在一些实施例中,可以应用标准来确定是否应重新计算3d重建。

在一些实施例中,该遮挡数据由服务计算,从而通过应用编程接口(api)将遮挡数据提供给在将渲染xr场景的计算设备上执行的应用。服务可以在与应用相同的计算设备上执行,或者可以在远程计算机上执行。服务可包括本文讨论的部件中的一个或多个,例如用于来自第一数据源的数据的过滤器,和/或用于基于来自第一数据源的所过滤的数据有选择地从第二数据源获取数据的引擎。服务还可包括将来自第一数据源的所过滤的数据与来自第二数据源的所选择的数据进行组合以生成遮挡数据的部件。

遮挡数据可以以表示物理世界中的表面的任何适当方式被格式化。例如,遮挡数据可被格式化为表面的深度缓冲器,从而存储标识表面在物理世界中的位置的数据。然后可以以任何合适的方式使用该遮挡数据。在一些实施例中,可以将遮挡数据提供给一个或多个想要使虚拟对象被真实对象遮挡的应用。在一些实施例中,遮挡数据可被格式化为由系统创建的深度过滤器,用于向遮挡服务请求遮挡数据以在一个或多个位置处渲染虚拟对象的应用。深度过滤器可以标识应用不应为其渲染用于虚拟对象的图像信息的位置,因为这些位置中的虚拟对象将被物理世界中的表面遮挡。应当理解,“遮挡数据”可以具有适当的格式以提供关于物理世界中的表面的信息,并且不需要用于遮挡处理。在一些实施例中,遮挡数据可以用于基于物理世界的场景中的表面的表示执行处理的任何应用中。

与其中应用使用网格数据来执行遮挡处理的常规ar和mr系统相比,本文所述的方法提供了具有更少的延迟和/或使用更低的计算资源的遮挡数据。网格数据可通过由处理图像传感器使用多个时间或成本密集型步骤所提取的几何数据而获得,这些步骤包括行进立方体算法、网格简化和应用三角形计数限制。网格数据的计算可能需要数百毫秒到几秒钟的时间,并且当环境动态变化并且应用使用过时的网格渲染场景时,具有最新网格的延迟可能导致可见的人工痕迹。这些人工痕迹例如表现为:当虚拟内容被假定在真实对象后面被渲染时,虚拟内容看起来叠加在真实对象的顶部,这破坏了这种应用的用户的沉浸的感知/感觉,并为用户提供了具有对3d深度感知的不正确提示。

对于使用网格进行遮挡处理以具有最新的网格的应用,应用必须连续查询网格(导致发生大量连续处理)或利用一种机制来确定是否存在变化,然后查询新的网格(这会减少总体处理,但是在物理世界中的变化之间以及反映这些变化的网格到达应用时仍然具有较高的延迟)。

通过直接使用3d重建数据(例如点云)的低级数据和实时深度数据代替网格来进行遮挡,可减少变化在环境中发生和被反映在遮挡数据中之间的延迟,从而与物理世界保持更紧密的同步,并因此获得更高的感知视觉质量。

在一些实施例中,可以从深度传感器(例如,深度相机)获得物理环境的实时深度图。深度图中的每个像素可以对应于从环境中的3d点捕获的离散距离测量。在一些实施例中,这些深度相机可以以实时速率提供包括点集的深度图。但是,深度图可能带有孔,这可以是由于深度相机无法获取表示区域的传感器数据或获取表示区域的不正确或不可靠的数据而导致的。在一些实施例中,如果深度传感器使用红外(ir)光,则这些孔可以是例如由于物理环境中的材料或结构无法很好地反射ir光或根本没有反射ir光而生成的。在一些实施例中,这些孔例如可以由非常薄的结构或表面以掠入的入射角产生,这些入射角不会将光反射朝向深度传感器。深度传感器在快速移动时也可能遇到运动模糊,这也可导致丢失数据。此外,深度图中的“孔”表示由于任何其他原因不适合在遮挡处理中使用的深度图的区域。可以使用任何适当的处理来检测这样的孔,诸如处理深度图以检测深度图中的点或区域之间的连接性不足。作为另一示例,可以使用针对深度图的区域计算质量度量的处理以及以低质量度量处理区域作为孔来检测孔。一种这样的度量可以是深度图中表示物理世界中相同位置的像素的图像间变化。具有超过阈值的这种变化的像素可被分类为孔。在一些实施例中,可以通过满足对于其中质量度量低于阈值的像素簇的预定统计标准的像素来标识孔。

在一些实施例中,深度图可以首先被“过滤”以标识孔。然后,来自场景将从其被渲染给孔的视角的光线可被确定。可以将这些光线“投射”到使用多个传感器而非单独的深度传感器创建的物理世界的3d表示中,以标识表示孔的区域的数据。物理世界的3d表示例如可以是从来自立体视觉相机的数据创建的3d重建。通过这种光线投射标识的来自3d重建的数据可被添加到深度图,从而填充孔。

当孔被标识时,3d重建可以根据图像传感器数据来计算。替代地,可以预先计算一些或全部3d重建并将其存储在存储器中。例如,可以通过与生成用于遮挡处理的深度信息的任何过程无关的过程来将3d重建保持在计算机存储器中,过程可以根据需要访问存储的3d重建。作为进一步的替代方案,3d重建可被保持在存储器中,但是它的部分可以响应于基于深度信息计算出的指示来更新,即物理世界中存在与3d重建的部分相对应的变化。

在xr系统中,光线可具有与用户的眼睛凝视相同的姿势。在如下所述的示例性系统中,深度图可以类似地以与用户相同的眼睛凝视相同来获取,因为深度传感器可以由用户佩戴,并且可被安装在用户的头部上靠近眼睛。用户可以类似地佩戴用于形成3d重建数据的视觉相机,使得图像和从这些图像推导的数据可以与坐标系相关,坐标系使得相对于深度图限定的光线能够被投射到根据视觉图像计算出的3d重建中。类似地由用户佩戴和/或与传感器关联的惯性测量单元和/或其他传感器,可以提供数据以执行坐标转换,以将数据添加到3d表示中,而与视觉相机的姿势无关,以及将关于深度图限定的光线与3d重建相关。

在一些实施例中,用户的焦点或相关的虚拟内容放置信息可以引导光线投射,以通过在深度不连续处投射更密集的光线以在对象边界处获得高质量的遮挡并投射稀疏的光线在对象的中心中以降低处理要求,从而使光线投射在图像空间中具有适应性。光线投射可以附加提供局部3d表面信息(例如法线和位置),这些信息可用于通过深度信息改进时间扭曲处理,并减轻需要在典型渲染引擎中进行渲染或光线追踪的可见像素的丢失。时间扭曲是xr中的一种技术,其在将渲染的图像发送给显示器之前修改渲染的图像,以校正计算出的在渲染和显示之间会发生的头部移动。在一些实施例中,时间扭曲可用于使来自深度图的数据与物理世界的3d表示同步,物理世界的3d表示可用于生成数据以填充深度图中的孔。来自两个数据源的数据可被时间扭曲,以表示显示时计算出的姿势。在一些实施例中,来自3d表示的数据可被时间扭曲以表示在用深度图捕获数据时计算出的姿势。

在一些实施例中,诸如时间扭曲的高级特征可以利用来自光线投射的3d局部表面信息。在没有物理世界遮挡或具有侵蚀的深度成像的情况下渲染内容帧时,时间扭曲可填充以前遮挡的所有丢失的可见像素。因此,可能不需要渲染引擎来填充像素,从而实现了更松散解耦的渲染应用(或更独立的时间扭曲)。

可以在许多适当形式的硬件处理器中对通过许多适当传感器获取并呈现在许多适当界面上的数据执行如上所述的处理。如下呈现包括传感器、处理和用户接口的合适系统的示例。在所示的实施例中,“服务”可被实现为具有计算机可执行指令的xr系统的一部分。这些指令的执行可以控制一个或多个处理器访问传感器数据,然后生成深度信息并将其提供给在xr系统上执行的应用。这些指令可以在执行向用户呈现xr场景的应用的相同处理器或相同设备上被执行,或者可以在用户设备通过计算机网络访问的远程设备上被执行。

图49示出了根据一些实施例的遮挡渲染系统4900。遮挡渲染系统4900可包括重建过滤器4902。重建过滤器4902可接收深度信息4904。在一些实施例中,深度信息4904可以是由深度相机捕获的深度图像的序列。在一些实施例中,可以例如使用基于单个相机的运动的结构和/或使用基于两个相机的立体计算从视觉相机捕获的图像序列中推导出深度信息4904。图50示出了根据一些实施例的深度图像5000。在一些实施例中,表面信息可以从深度信息中生成。表面信息可指示与在包括深度相机和/或视觉相机的头戴式显示设备的视场(fov)中的物理对象的距离。可以随着场景和fov变化实时更新表面信息。

深度信息的第二源被示出为3d重建4908。3d重建4908可包括物理世界的3d表示。可以在计算机存储器中创建和/或维护物理世界的3d表示。在一些实施例中,3d表示可以例如使用来自基于单个相机的运动的结构和/或使用基于两个相机的立体计算从由视觉相机捕获的图像中生成。在一些实施例中,3d表示可以从深度相机捕获的深度图像生成。例如,3d重建4908可以结合深度相机相对于世界原点的姿势使用深度信息4904来创建和/或更新。表示可以随着时间流逝而建立和修改,例如当戴着相机的用户在物理世界中四处看时。在一些实施例中,深度信息4904还可以用于生成物理世界的3d表示。3d重建4908可以是包括3d体素的体积重建。在一些实施例中,每个3d体素可表示一立方体空间(例如0.5米乘0.5米乘0.5米),并且每个3d体素可包括与立方体空间中的真实世界中的表面相关和/或描述该表面的数据。

世界的3d重建4908可以以任何合适的方式来存储。在一些实施例中,3d重建4908可被存储为表示物理世界中的对象的特征的点的“云”。在一些实施例中,3d重建408可被存储为网格,其中点组限定了表示表面的三角形的顶点。在一些实施例中,可以使用诸如房间布局检测系统和/或对象检测之类的其他技术来生成3d重建4908。在一些实施例中,可以一起使用多种技术来生成3d重建4908。例如,对象检测可被用于物理世界中的已知物理对象,3d建模可被用于物理世界中的未知物理对象,以及房间布局检测系统还可以用于标识物理世界中的边界,例如墙壁和地板。

重建过滤器4902可包括用于基于深度信息4904产生深度图的计算机可执行指令。深度图可包括一个或多个像素。每个像素可指示到物理世界中的表面的点的距离。在一些实施例中,重建过滤器4902可以将深度信息4904和来自光线投射引擎4906的数据进行合成。在一些实施例中,重建过滤器4902可以至少部分地基于来自光线投射引擎4902和/或来自深度信息4904和来自光线投射引擎4906的数据的合成的数据从深度信息4904减少或移除噪声。在一些实施例中,重建过滤器4902可以使用深度学习技术对深度信息4904进行上采样。

重建过滤器4902可以基于质量度量来标识深度图的区域。例如,当像素的质量度量高于阈值时,可以将像素确定为不正确或有噪声。包含不正确或有噪声像素的深度图的区域可被称为孔(例如,孔5002)。

图54a和54b提供了在其中深度图由多个深度图像构成的实施例中孔如何在深度图中产生的替代示例。图54a是从第一视角用深度相机成像以标识被表面占据的体素和空的体素的区域的示意图。图54b是从多个视角用深度相机成像以标识被表面占据且为空的体素的区域的示意图。图54b示出了通过融合来自多个相机图像的数据而被确定为被表面占据或为空的多个体素。但是,区域5420中的体素尚未被成像。区域5420可能已使用深度相机在位置5422处被成像,但相机尚未移动到位置。因此,区域5420是观察的空间,对于观察的空间没有体积信息可用。ar系统可以引导佩戴它的用户扫描观察的空间。

返回图49,重建过滤器4902可以通知光线投射引擎4906有关孔的位置。光线投射引擎4906可以在给定用户姿势的情况下生成物理世界的视图,并且可以从深度图中移除孔。数据可表示在当前时间或使用时间扭曲的情况下在数据将被时间扭曲的时间处物理世界的用户当前视图的部分。光线投射引擎4906可生成一个或多个2d图像,例如每只眼睛一个图像。在一些实施例中,重建过滤器4902可以移除深度图的与虚拟对象的位置间隔开超过阈值距离的区域,因为这些区域可与虚拟对象的遮挡测试无关。

光线投射引擎4906可以由任何适当的技术来实现,光线投射引擎4906在给定用户的姿势的情况下生成物理世界的视图。在一些实施例中,光线投射引擎4906可在3d重建4908上实现光线投射算法以从中提取数据。光线投射算法可以将用户的姿势作为输入。光线投射引擎4906可以将光线从虚拟相机投射到物理世界的3d重建4908,以获得深度图(例如孔)中缺少的表面信息。光线投射引擎4906可以在物理世界中的物理对象的边界处投射密集的光线以获得在对象边界处的高质量的遮挡,并且在物理对象的中心区域中投射稀疏光线以降低处理要求。然后,光线投射引擎4906可以将光线投射点云提供给重建过滤器4902。光线投射引擎4906被示出作为示例。在一些实施例中,光线投射引擎4906可以是网格划分引擎。网格划分引擎可以在3d重建4908上实现网格划分算法以从中提取数据,例如包括三角形和这些三角形的连接性。网格划分算法可以将用户的姿势作为输入。

重建过滤器4902可以将深度信息4904和来自光线投射引擎4906的数据进行合成,从而用来自光线投射引擎4906的光线投射点云的数据来补偿来自深度信息4904的深度图中的孔。在一些实施例中,可以改善深度图的分辨率。该方法可被用于从稀疏或低分辨率深度图像生成高分辨率深度图像。

重建过滤器4902可以将更新的深度图提供给遮挡服务4910。遮挡服务4910可以基于更新的深度图和关于场景中的虚拟对象的位置的信息来计算遮挡数据。遮挡数据可以是物理世界中的表面的深度缓冲器。深度缓冲器可以存储像素的深度。在一些实施例中,遮挡服务4910可以是与应用4912的接口。在一些实施例中,遮挡服务4910可以与图形系统接口。在这些实施例中,图形系统可以向应用4912公开深度缓冲器,其中深度缓冲器预先被遮挡数据填充。

遮挡服务4910可以将遮挡数据提供给一个或多个应用4912。在一些实施例中,遮挡数据可以对应于用户的姿势。在一些实施例中,遮挡数据可以是逐像素表示。在一些实施例中,遮挡数据可以是网格表示。应用4912可被配置为基于遮挡数据执行计算机可执行指令以在场景中渲染虚拟对象。在一些实施例中,遮挡渲染可以由单独的图形系统而不是应用4912进行。单独的图形系统可以使用时间扭曲技术。

在一些实施例中,重建过滤器4902、光线投射引擎4906和遮挡服务4910可以是远程服务,例如远程处理模块72;或者3d重建4908可被存储在远程存储器中,例如远程数据存储库74;以及应用4912可以在ar显示系统80上。

图51示出了根据一些实施例的在增强现实(ar)环境中进行遮挡渲染的方法5100。在动作5102,可以从例如头戴式显示设备上的深度传感器(例如,深度传感器51)捕获深度信息。深度信息可指示头戴式显示设备与物理对象之间的距离。在动作5104,表面信息可以从深度信息生成。表面信息可指示与在头戴式显示设备和/或头戴式显示设备的用户的视场(fov)中的物理对象的距离。表面信息可以随着场景和fov变化被实时更新。在动作5106,可以根据表面信息和关于场景中虚拟对象的位置的信息来计算要渲染的虚拟对象的部分。

图52示出了根据一些实施例的动作5104的细节。在动作5202,深度信息可被过滤以生成深度图。深度图可包括一个或多个像素。每个像素可指示到物理对象的点的距离。在动作5204,物理对象的3d重建的低级数据可以选择性地例如从3d重建4908中获取。在动作5206,表面信息可以基于深度图和选择性获取的物理对象的3d重建的低级数据来生成。

图53示出了根据一些实施例的动作5202的细节。在动作5302,可以确定深度图的区域的质量度量。质量度量可指示深度图的区域是不正确还是有噪声。在动作5304,可基于质量度量通过例如与阈值进行比较来标识深度图中的孔。在动作5306,可以将标识的孔从深度图中移除。

结论

因此,已经描述了一些实施例的几个方面,应当理解,本领域技术人员将容易想到各种更改、修改和改进。

作为一个示例,结合增强(ar)环境来描述实施例。应当理解,本文描述的一些或全部技术可以在mr环境中或更普遍地在其他xr环境和vr环境中应用。

作为另一示例,结合诸如可穿戴设备之类的设备来描述实施例。应当理解,本文描述的一些或全部技术可以经由网络(例如云)、离散应用和/或设备、网络和离散应用的任何合适的组合来实现。

这样的更改、修改和改进旨在成为本公开的一部分,并且旨在落入本公开的精神和范围内。此外,尽管指示了本公开的优点,但是应当理解,并非本公开的每个实施例将包括每个描述的优点。一些实施例可不实现在此以及在某些情况下被描述为有利的任何特征。因此,前面的描述和附图仅作为示例。

可以以多种方式中的任何一种来实现本公开的上述实施例。例如,可以使用硬件、软件或其组合来实现实施例。当以软件实现时,软件代码可以在任何合适的处理器或处理器集合上被执行,无论是在单台计算机中提供还是在多台计算机中分布。这样的处理器可被实现为集成电路,在集成电路部件中具有一个或多个处理器,包括本领域已知的命名为诸如cpu芯片、gpu芯片、微处理器、微控制器或协处理器的可商用的集成电路部件。在一些实施例中,处理器可以在诸如asic的定制电路或通过配置可编程逻辑设备而生成的半定制电路中实现。作为另一替代方案,处理器可以是较大的电路或半导体设备的一部分,无论是可商购的、半定制的还是定制的。作为特定示例,一些可商购的微处理器具有多个核,使得这些核中的一个或子集可以构成处理器。但是,可以使用任何适当格式的电路来实现处理器。

此外,应当理解,计算机可以以多种形式中的任何一种来体现,例如机架式计算机、台式计算机、膝上型计算机或平板计算机。另外,计算机可被嵌入通常不被认为是计算机但具有适当处理能力的设备中,包括个人数字助理(pda)、智能电话或任何其他适当的便携式或固定电子设备。

此外,计算机可具有一个或多个输入和输出设备。这些设备尤其可以用于呈现用户接口。可以用于提供用户接口的输出设备的示例包括用于视觉呈现输出的打印机或显示屏,以及用于听觉呈现输出的扬声器或其他声音生成设备。可以用于用户接口的输入设备的示例包括键盘和指向设备,例如鼠标、触摸板和数字化平板电脑。作为另一个示例,计算机可以通过语音识别或其他可听格式接收输入信息。在所示的实施例中,输入/输出设备被示为与计算设备物理上分开。然而,在一些实施例中,输入和/或输出设备可以物理地集成到与处理器或计算设备的其他元件相同的单元中。例如,键盘可被实现为触摸屏上的软键盘。在一些实施例中,输入/输出设备可以与计算设备完全断开,并且通过无线连接在功能上集成。

这样的计算机可以通过任何适当形式的一个或多个网络互连,包括作为局域网或诸如企业网络或因特网之类的广域网。这样的网络可以基于任何适当的技术,并且可以根据任何适当的协议进行操作,并且可包括无线网络、有线网络或光纤网络。

此外,本文概述的各种方法或过程可被编码为可在采用多种操作系统或平台中的任何一种的一个或多个处理器上执行的软件。另外,这样的软件可以使用多种合适的编程语言和/或编程或脚本工具中的任何一种来编写,并且还可被编译为在框架或虚拟机上执行的可执行机器语言代码或中间代码。

在这方面,本公开可被体现为编码有一种或多种程序的计算机可读存储介质(或多个计算机可读介质)(例如,计算机存储器、一个或多个软盘、压缩光盘(cd)、光盘、数字视频盘(dvd)、磁带、闪存、现场可编程门阵列或其他半导体设备中的电路配置、或其他有形计算机存储介质),这些程序在一台或多台计算机或其他处理器上被执行时执行实现以上讨论的本公开的各种实施例的方法。从前述示例显而易见的是,计算机可读存储介质可以将信息保留足够的时间,以提供非暂时形式的计算机可执行指令。这样的一个或多个计算机可读存储介质可以是可移动的,使得可以将存储在其上的一个或多个程序加载到一个或多个不同的计算机或其他处理器上,以实现如上所述的本公开的各个方面。如本文所使用的,术语“计算机可读存储介质”仅包括可被认为是制造(即,制造品)或机器的计算机可读介质。在一些实施例中,本公开可被体现为除计算机可读存储介质之外的计算机可读介质,例如传播信号。

本文在一般意义上使用术语“程序”或“软件”来指代可用于对计算机或其他处理器进行编程以实现如上所述的本公开的各种方面的任何类型的计算机代码或计算机可执行指令集。另外,应了解,根据此实施例的一方面,当被执行时执行本公开的方法的一个或多个计算机程序不需要驻留在单个计算机或处理器上,而是可以以模块化的方式分布在多个不同的计算机或处理器中来实现本公开的各个方面。

计算机可执行指令可以采用多种形式,例如由一个或多个计算机或其他设备执行的程序模块。通常,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、部件、数据结构等。通常,在各种实施例中,程序模块的功能可以根据需要进行组合或分布。

此外,数据结构可以以任何合适的形式被存储在计算机可读介质中。为了简化说明,数据结构可被显示为具有通过数据结构中的位置相关的字段。这样的关系同样可以通过在传达字段之间的关系的计算机可读介质中为具有位置字段的分配存储设备来实现。但是,可以使用任何合适的机制来建立数据结构的字段中的信息之间的关系,包括通过使用指针、标签或在数据元素之间建立关系的其他机制。

本公开的各个方面可以单独地、组合地或以在前述实施例中未具体讨论的各种布置来使用,并且因此不限于应用于在前面的描述中阐述或在附图中示出的部件的细节和布置。例如,一个实施例中描述的方面可以以任何方式与其他实施例中描述的方面组合。

此外,本公开可被体现为一种方法,其示例已被提供。作为方法的一部分执行的动作可以以任何合适的方式排序。因此,可以构建这样的实施例,其中以与所示出的顺序不同的顺序执行动作,这可包括同时执行即使在说明性实施例中被示为顺序动作的一些动作。

在权利要求中使用序数术语(例如“第一”、“第二”、“第三”等)来修改权利要求元素本身并不表示一个权利要求元素相对于另一个权利要求具有任何优先权、在先权或顺序或执行方法的动作的时间顺序,而是仅用作标签,以区分具有某名称的一个权利要求元素与具有相同名称的另一个元素(但用于序数词)来区分这些权利要求元素。

此外,本文中使用的措词和术语是出于描述的目的,并且不应被视为限制。本文中“包括”或“具有”、“包含”、“涉及”及其变体的使用意在涵盖其后列出的项目及其等同物以及附加项目。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1