相关申请
本申请要求于2016年8月19日提交的美国临时专利申请序列号62/377,471的权益,并且所述美国临时专利申请通过引用以其全文结合于此。
本公开总体上涉及计算机系统领域,并且更具体地,涉及计算机视觉和增强或混合现实系统。
背景技术:
随着诸如来自magicleaptm、microsofttmhololenstm、oculustmrifttm的那些增强现实(ar)、虚拟现实(vr)和混合现实(mr)产品以及诸如来自valvetm和htctm的系统等其他vr系统的出现,计算机视觉和图形的世界迅速融合。这种系统中的现有方法是使用并行运行的分开的图形处理单元(gpu)和计算机视觉子系统。这些并行系统可以由与在处理器阵列和/或可编程硬件加速器阵列上运行的软件中实施的计算机视觉流水线并行的预先存在的gpu来组装。
附图说明
当结合以下附图考虑时,参考下面对所公开主题的详细描述,可以更充分地理解所公开主题的各种目的、特征和优点,在附图中相似的附图标记表示相似的元件。这些附图是示意性的,并且不旨在按比例绘制。为了清楚起见,在每个附图中并非每个组件都被标记。也并未示出所公开主题的每个实施例的每个组件,其中图示无需允许本领域普通技术人员理解所公开主题。
图1展示了常规的增强或混合现实渲染系统;
图2展示了根据一些实施例的基于体素的增强或混合现实渲染系统;
图3展示了根据一些实施例的密集体积表示与稀疏体积表示之间的差异;
图4展示了根据一些实施例的场景的复合视图;
图5展示了根据一些实施例的示例元素树结构中的细节层次;
图6展示了根据一些实施例的可以利用本申请的数据结构和体素数据的应用;
图7展示了根据一些实施例的用于辨识3d数字的示例网络;
图8展示了根据一些实施例的使用隐含的细节层次来对同一数据结构执行的多种分类;
图9展示了根据一些实施例的2d卷积神经网络的操作消除;
图10展示了根据一些实施例的来自对示例测试图像的分析的实验结果;
图11展示了根据一些实施例的用于剔除操作的硬件;
图12展示了根据一些实施例的对用于剔除操作的硬件的精化;
图13展示了根据一些实施例的硬件;
图14展示了根据一些实施例的使用示例体积数据来合成音频流;
图15展示了根据一些实施例的可重复使用混响滤波器元件的示例;
图16展示了根据一些实施例的fir混响滤波器的构造;
图17示出了根据一些实施例的fir混响滤波器的向量化实施方式;
图18示出了根据一些实施例的使用向量化处理进行的光线投射;
图19描绘了根据一些实施例的示例多时隙向量处理器;
图20展示了根据一些实施例的示例体积加速硬件;
图21展示了根据一些实施例的体素立方体的组织;
图22展示了根据一些实施例的两级稀疏体素树;
图23展示了根据一些实施例的两级稀疏体素树;
图24展示了根据一些实施例的示例体素数据的存储;
图25展示了根据一些实施例的将体素插入示例体积数据结构中;
图26展示了根据一些实施例的用于将体素插入示例体积数据结构中的逻辑;
图27展示了根据一些实施例的用于生成地址三元组以控制多路复用器的逻辑;
图28展示了根据一些实施例的地址选择逻辑;
图29展示了根据一些实施例的示例3d体积对象的投影;
图30展示了涉及示例体积数据结构的示例操作;
图31示出了根据一些实施例的示例3d到2d投影的硬件组织;
图32示出了根据一些实施例的使用投影来生成简化地图;
图33展示了根据一些实施例的来自嵌入式设备的示例体积3d和/或简单2d测量结果的示例聚合;
图34展示了一些实施例中的x、y或z上的示例投影;
图35示出了根据一些实施例的由2d位图生成直方图金字塔的示例加速;
图36示出了根据一些实施例的由3d位图生成直方图金字塔的示例加速;
图37示出了根据一些实施例的在2d2×2位图上进行2d路径查找的示例加速;
图38示出了根据一些实施例的在2d2×2位图上进行2d路径查找的示例加速;
图39示出了根据一些实施例的使用示例体积数据结构进行碰撞检测的示例加速;
图40是包括使用示例体积数据结构进行路径引导的运载工具的示例系统的框图。
图41是包括维持示例体积数据结构的储存库系统的示例系统的框图。
图42是示例体积数据结构的表示。
图43是简化框图,展示了体积在地图上的投影和关联。
图44是使用示例体积数据结构进行光线投射的简化表示。
图45是示例处理器设备的简化框图。
图46是简化框图,展示了结合帧渲染的并行处理。
图47是有待用于执行光线投射的示例逻辑的简化框图。
图48是有待用于执行光线投射的示例逻辑的简化框图。
图49是简化框图,展示了示例光线投射的一方面。
图50是简化框图,展示了示例光线投射
图51a是有待用于执行光线投射的示例逻辑的简化框图。
图51b至图51c展示了示例光线投射技术。
图52是有待用于执行光线投射的示例逻辑的简化框图。
图53是示出了基于体积数据结构来使用所生成的滤波器的示例系统的框图。
图54是用于使用示例滤波器来生成音频输出的示例逻辑的简化框图。
图55是图示了体积内的声音反射的简化框图。
图56是展示了示例音响系统的简化框图。
图57是展示了示例个人音响系统的简化框图。
图58是展示了示例音响系统的简化框图。
图59a至图59b是流程图,展示了利用示例体积数据结构的示例技术。
图60是根据至少一些实施例的具有设备的示例性网络的简化框图;
图61是根据至少一些实施例的示例性雾或云计算网络的简化框图;
图62是根据至少一些实施例的包括示例设备的系统的简化框图;
图63是根据至少一些实施例的示例处理设备的简化框图;
图64是根据至少一些实施例的示例性处理器的框图;并且
图65是根据至少一些实施例的示例性计算系统的框图。
具体实施方式
在下面的描述中,关于所公开主题的系统和方法以及这些系统和方法可以运算的环境等,阐述了许多具体细节,以便提供对所公开主题的透彻理解。然而,本领域技术人员将清楚的是,可以在没有这些具体细节的情况下实践所公开主题,并且本领域公知的某些特征未进行详细描述,以避免使所公开主题复杂化。此外,应当理解的是,下面提供的实施例是示例性的,并且可以预期,在所公开主题的范围内存在其他系统和方法。
基于并结合增强现实、虚拟现实、混合现实、自主设备和机器人的各种技术正在出现,这些技术可以利用表示三维空间和几何结构的体积的数据模型。使用这种3d或体积数据对各种真实环境和虚拟环境的描述传统上涉及大数据集,一些计算系统一直在努力以期望的方式来处理所述大数据集。进一步地,随着诸如无人机、可穿戴设备、虚拟现实系统等设备变得越来越小,此类设备的存储器和处理资源也可能受到约束。作为示例,ar/vr/mr应用可能要求用于使用支持硬件生成的图形呈现的高帧速率。然而,在一些应用中,这种硬件的gpu和计算机视觉子系统可能需要以诸如高达130fps(7毫秒)的高速率来处理数据(例如,3d数据),以便产生期望的结果(例如,以生成具有产生可信结果、防止用户由于过长的等待时间而导致的晕动病、以及其他示例目标的帧速率的可信图形场景)。可以类似地挑战附加应用以令人满意地处理描述大体积的数据,同时满足相应系统的处理、存储器、功率、应用要求中的约束以及其他示例问题。
在一些实施方式中,计算系统可以设置有用于生成和/或使用根据格式定义的稀疏体积数据的逻辑。例如,可以提供定义的体积数据结构以统一各种系统和应用中的计算机视觉和3d渲染。例如,可以使用诸如立体相机或深度相机等光学传感器来捕获对象的体积表示。对象的体积表示可以包括多个体素。可以定义使得能够递归地细分相应的体积表示以获得对象的目标分辨率的改进的体积数据结构。在细分期间,体积表示中的可以包括在一个或多个体素中的空白空间可以从体积表示(和支持操作)中剔除。所述空白空间可以是体积表示中不包括对象的几何属性的区域。
因此,在改进的体积数据结构中,相应体积内的各个体素可以被标记为“被占据”(由于相应的体积空间内存在一些几何结构)或被标记为“空白”(表示相应的体积由空白空间组成)。此类标记可以另外被解释为指示其相应子体积中的一个或多个也被占据(例如,如果父级或更高级别的体素被标记为被占据)或者其所有子体积是空白空间(即,在父级或更高级别的体素被标记为空白的情况下)。在一些实施方式中,将体素标记为空白可以允许从用于生成相应体积表示的操作中有效地移除体素和/或其相应子体积体素。进一步地,这种用于稀疏体积数据结构的方法可以利用比传统上使用的方法相对更少的存储空间来存储对象的体积表示。另外,压缩体积数据可以增加传输这种表示的可行性,并且使得能够更快地处理这种表示,以及其他示例益处。在一些实施方式中,体积数据结构可以根据稀疏六四元树(sst)格式。
体积数据结构可以被硬件加速,以快速允许对3d渲染器的更新,从而消除可能在分开的计算机视觉系统和图形系统中发生的延迟。这种延迟可能引发等待时间,所述等待时间可能在ar、vr、mr和其他应用中使用时引起用户的晕动病以及其他附加缺点。在加速数据结构中快速测试体素的几何属性占据的能力允许构造可以实时更新的低等待时间ar、vr、mr或其他系统。
在一些实施例中,体积数据结构的能力还可以提供帧内警告。例如,在ar、vr、mr和其他应用中,当用户可能与成像场景中的真实或合成对象碰撞时,或者在无人机或机器人的计算机视觉应用中,当此类设备可能与成像场景中的真实或合成对象碰撞时,由体积数据结构提供的处理速度允许警告即将发生的碰撞。
本公开的实施例可以涉及针对诸如机器人、用于增强和混合现实头戴式耳机的头戴式显示器以及电话和平板计算机等应用中的体积数据进行存储和处理。本公开的实施例将一组体积元素(例如,体素)内的每个体素以及可选地与所述体素的几何结构有关的物理量表示为单个位。与一组64个体素有关的附加参数可以与诸如相应的红绿蓝(rgb)或其他着色编码、透明度、舍位带符号距离函数(tsdf)信息等体素相关联,并且被存储在相关联且可选的64位数据结构中(例如,使得使用两个或更多个位来表示每个体素)。这种表示方案可以实现最小的存储器要求。此外,由单个位来表示体素允许执行许多简化的计算以逻辑地或数学地组合来自体积表示的元素。组合来自体积表示的元素可以包括例如:对体积中的平面进行或运算(oring)以创建3d体积数据的2d投影,以及通过对2.5d流形中的被占据体素的数量进行计数来计算表面积等。为了进行比较,可以使用异或逻辑来对64位子体积(例如,4^3个子体积)进行比较,并且可以反转体积,其中,可以通过将对象一起进行或运算来合并所述对象以创建混合对象,以及其他示例。
图1展示了常规的增强或混合现实系统,其由具有后渲染连接装置的并行的图形渲染子系统和计算机视觉子系统组成,以考虑由于快速头部移动引起的变化、以及环境中可能在所渲染的图形中产生遮挡和阴影的变化。在一种示例实施方式中,系统可以包括由主机存储器124支持的主机处理器100,以通过经由总线101、片上片上网络的互连或其他互连来控制图形流水线、计算机视觉流水线和后渲染校正装置的执行。所述互连允许主机处理器100运行适当的软件来控制图形处理单元(gpu)106、相关联图形存储器111、计算机视觉流水线116、及相关联的计算机视觉存储器124的执行。在一个示例中,使用gpu106经由opengl图形着色器107(例如,对三角形列表105进行操作)来渲染图形可以以比计算机视觉流水线更慢的速率进行。因此,可以经由扭曲引擎108和显示/遮挡处理器109来执行后渲染校正,以考虑自通过gpu106渲染图形以来可能已经发生的头部姿态和遮挡场景几何结构的变化。除其他示例之外,对gpu106的输出加时间戳,使得其可以分别与来自头部姿态流水线120和遮挡流水线123的正确控制信号121和123结合使用以产生正确的图形输出,从而考虑头部姿态119和遮挡几何结构113的任何变化。
与gpu106并行地,多个传感器和相机(例如,包括用于深度和视觉处理的有源立体相机和无源立体相机117)可以连接到计算机视觉流水线116。计算机视觉流水线116可以包括至少三个级中的一个或多个,每个级可以包含多个更低级的处理级。在一个示例中,计算机视觉流水线116中的级可以是图像信号处理(isp)流水线118、头部姿态流水线120、和遮挡流水线122。isp流水线118可以获取输入相机传感器117的输出并对其进行调节,使得所述输出可以用于随后的头部姿态和遮挡处理。头部姿态流水线120可以获取isp流水线118的输出并将其与头戴式耳机110中的惯性测量单元(imu)的输出119一起使用,以计算自通过gpu106渲染相应的输出图形帧以来的头部姿态变化。可以将头部姿态流水线(hpp)120的输出121与用户指定的网格一起施加至扭曲引擎108以使gpu输出102失真,使得其与更新的头部姿态位置119相匹配。遮挡流水线122可以获取头部姿态流水线121的输出并且在视野中寻找新对象,诸如进入视野的手113(或其他示例对象),所述新对象应该在场景几何结构上产生相应的阴影114。遮挡流水线122的输出123可以由显示和遮挡处理器109使用,以将视野正确地覆盖在扭曲引擎108的输出103之上。除其他示例用例和特征之外,显示和遮挡处理器109使用计算的头部姿态119来产生用于合成阴影114的阴影掩码,并且显示和遮挡处理器109可以在阴影掩码之上合成手113的遮挡几何结构,以在扭曲引擎108的输出103之上产生图形阴影114,并产生最终的(多个)输出帧104以用于在增强/混合现实头戴式耳机110上显示。
图2展示了根据本公开的一些实施例的基于体素的增强或混合现实渲染系统。图2中描绘的装置可以包括在主机cpu200和相关联主机存储器201上组成的主机系统。这种系统可以经由总线204、片上网络或其他通信机制来与统一计算机视觉和图形流水线223以及相关联的统一计算机视觉和图形存储器213进行通信,所述统一计算机视觉和图形存储器包含要在最终场景中渲染以供在头戴式增强或混合现实显示器211上显示的真实体素和合成体素。ar/mr显示器211还可以包含多个有源图像传感器和无源图像传感器214以及用于测量头部姿态222的取向变化的惯性测量单元(imu)212。
在组合渲染流水线中,可以从三角形列表204开始生成合成几何结构,所述三角形列表由opengljit(即时)翻译器205进行处理以产生合成体素几何结构202。可以例如通过从三角形列表中选择三角形的主平面来生成合成体素几何结构。然后可以对所选平面中的每个三角形执行2d光栅化(例如,在x和z方向上)。可以创建第三坐标(例如,y)作为要跨三角形进行插值的属性。光栅化三角形的每个像素可以导致相应体素的定义。此处理可以由cpu或gpu来执行。除其他示例实施方式之外,当由gpu执行时,可以从gpu读回每个光栅化三角形以创建gpu在其中绘制像素的体素。例如,可以使用列表的2d缓冲器来生成合成体素,其中,列表的每个条目存储有在此像素处渲染的多边形的深度信息。例如,可以使用正投影视点(例如,自上而下)来渲染模型。例如,在示例缓冲器中提供的每个(x,y)可以表示相应体素体积中的(x,y)处的列(例如,从(x,y,0)到(x,y,4095))。然后可以根据所述信息使用每个列表中的信息将每个列渲染为3d扫描线。
继续图2的示例,在一些实施方式中,合成体素几何结构202可以与使用同步定位和建图(slam)流水线217构造的所测得几何结构体素227组合。slam流水线可以使用有源传感器和/或无源图像传感器214(例如,214.1和214.2),所述传感器首先使用图像信号处理(isp)流水线215进行处理以产生输出225,所述输出可以由深度流水线216转换为深度图像226。除其他示例之外,有源或无源图像传感器214(214.1和214.2)可以包括有源或无源立体传感器、结构光传感器、飞行时间传感器。例如,深度流水线216可以处理来自结构光或飞行时间传感器214.1、或可替代地无源立体传感器214.2的深度数据。在一种示例实施方式中,除其他示例实施方式之外,立体传感器214.2可以包括无源立体传感器对。
由深度流水线215生成的深度图像可以由密集slam流水线217使用slam算法(例如,kinect融合)来处理,以产生所测得几何结构体素227的体素化模型。可以提供光线跟踪加速器206,所述光线跟踪加速器可以将所测得几何结构体素227(例如,真实体素几何结构)与合成体素几何结构202组合以产生场景的2d渲染,以便经由显示处理器210输出到显示设备(例如,在vr或ar应用中的头戴式显示器211)。在这种实施方式中,可以由所测得几何结构体素227的真实体素和合成几何结构202来构造完整的场景模型。因此,不需要对2d渲染几何结构进行扭曲(例如,如图1所示)。这种实施方式可以与头部姿态跟踪传感器及相应逻辑组合,以将真实几何结构与所测得几何结构正确对齐。例如,示例头部姿态流水线221可以处理来自安装在头戴式显示器212中的imu212的头部姿态测量结果232,并且在渲染期间可以经由显示处理器210将头部姿态测量流水线的输出231考虑在内。
在一些示例中,统一渲染流水线还可以使用所测得几何结构体素227(例如,真实体素模型)和合成几何结构202(例如,合成体素模型),以便渲染音频混响模型并对真实世界场景、虚拟现实场景或混合现实场景的物理现象进行建模。作为示例,物理流水线218可以采用所测得几何结构体素227和合成几何结构202体素几何结构,并使用光线投射加速器206来计算头戴式显示器(hmd)211中的左耳机和右耳机的输出音频样本,以便使用内置于体素数据结构中的声反射系数来计算输出样本230。类似地,由202和227组成的统一体素模型还可以用于确定复合ar/mr场景中的合成对象的物理更新。物理流水线218将复合场景几何作为输入,并且使用光线投射加速器206来计算碰撞,然后计算对合成几何结构202的更新228以供渲染并作为物理模型的未来迭代的基础。
在一些实施方式中,除其他示例之外,诸如图2所示的系统等系统可以另外设置有一个或多个硬件加速器以实施和/或利用卷积神经网络(cnn),所述卷积神经网络可以处理来自isp流水线215的输出的rgb视频/图像输入、来自slam流水线217的输出的体积场景数据。神经网络分类器可以专门使用硬件(hw)卷积神经网络(cnn)加速器207来运行或在处理器与hwcnn加速器207的组合中运行,以产生输出分类237。除其他示例用途之外,用于对体积表示进行推断的hwcnn加速器207的可用性可以允许将所测得几何结构体素227中的体素组标记为属于特定对象类。
标记体素(例如,使用cnn和支持硬件加速)可以允许那些体素所属的那些对象被系统辨识为与已知对象相对应,并且源体素可以从所测得几何结构体素227中移除并由与对象和/或关于对象的原点、对象的姿态、对象描述符的信息以及其他示例信息相对应的边界框所替换。除其他示例用途之外,这可以导致对场景的语义上更有意义的描述,所述描述可以例如用作机器人、无人机或其他计算系统的输入以与场景中的对象进行交互,或者用作音频系统的输入以查找场景中对象的吸声系数并将其反映在场景的声学模型中。
可以提供一个或多个处理器设备和硬件加速器以实施图2中示出和描述的示例系统的流水线。在一些实施方式中,除其他示例实施方式之外,组合渲染流水线的所有硬件元件和软件元件可以共享对dram控制器209的访问,所述控制器进而允许将数据存储在共享ddr存储器设备208中。
图3被呈现用于说明根据一些实施例的在密集体积表示与稀疏体积表示之间的差异。如图3的示例所示,可以以如302所示的密集方式或如304所示的稀疏方式在体素方面描述真实世界或合成对象300(例如,兔子的雕像)。诸如302等密集表示的优点是对体积中所有体素的访问速度均匀,但缺点是可能需要的存储量。例如,对于密集表示,诸如512^3元素体积(例如,对于使用kinect传感器扫描的体积,1cm分辨率对应于5m),512m字节用于存储相对较小的体积,其中,每个体素4字节舍位带符号距离函数(tsdf)。另一方面,体现稀疏表示的八叉树表示304可以仅存储在真实世界场景中存在实际几何结构的那些体素,从而减少存储同一体积所需的数据量。
转到图4,展示了根据一些实施例的示例场景的复合视图。具体地,图4示出了场景404的复合视图可以如何使用并行数据结构来维持、显示或经受进一步处理,以分别表示在合成体素数据和真实世界体素数据的等效边界框400和402内的合成体素401和真实世界所测得体素403。图5展示了根据一些实施例的均匀4^3元素树结构(或体积数据结构)中的细节层次。在一些实施方式中,可以利用少至1位来描述使用八叉树表示的体积中的每个体素,诸如在图5的示例中所表示的。然而,基于八叉树的技术的缺点可能是用于访问八叉树中的特定体素的间接存储器访问次数。在稀疏体素八叉树的情况下,可以以有利地允许诸如光线投射、游戏物理、cnn和其他技术等操作的多个细节层次隐含地表示同一个几何结构,以便允许从进一步计算中剔除场景的空白部分,从而导致不仅所需存储减少,而且在功耗和计算负荷方面总体上减少,以及其他示例优点。
在一种实施方式中,可以提供改进的体素描述符(在本文中也称为“体积数据结构”)以将体积信息组织为4^3(或64位)无符号整数,诸如501中所示,其中,每体素的存储器要求为1位。在本示例中,每体素1位不足以存储舍位带符号距离函数值(与利用64位的slam平台/k融合中的tsdf相比)。在本示例中,体素描述符中可以包括附加(例如,64位)字段500。可以进一步增强这个示例,使得尽管64位字段500中的tsdf是16位的,但可以在体素描述符501中隐含地提供x、y和z中的附加2位的分数分辨率,以使得64位字段500中的体素tsdf与体素位置501的组合等效于诸如在slam平台/k融合或其他示例中所使用的更高分辨率的tsdf。例如,除其他示例之外,64位字段500(体素描述符)中的附加数据可以用于存储二次采样的rgb颜色信息(例如,经由无源rgb传感器来自场景),其中,每个信息具有一个字节、并且具有8位透明度值α以及两个1字节保留字段r1和r2,所述保留字段可以是应用特定的并且可以用于存储例如音频应用的声反射率、物理应用的刚性、对象材料类型等。
如图5所示,体素描述符501可以在逻辑上分组成四个2d平面,每个平面包含16个体素502。这些2d平面(或体素平面)可以基于4的升幂的连续分解来描述八叉树样式结构的每个级别,如图5中所表示的。在本示例实施方式中,选择64位体素描述符,因为其与相应的系统实施方式中使用的64位总线基础设施良好匹配(但在其他系统实施方式中可以提供其他体素描述符大小和格式并且根据系统的总线或其他基础设施来调整其大小)。在一些实施方式中,可以将体素描述符的大小调整以减少获得体素所使用的存储器访问次数。例如,除其他示例考虑和实施方式之外,与对2^3个元素操作的传统八叉树相比,可以使用64位体素描述符将访问八叉树中处于任意级别的体素所需的存储器访问次数减少2倍。
在一个示例中,可以从4^3根体积503、以及每个非零条目开始描述八叉树,在所述非零条目中,在示例256^3体积中描绘了针对在底层504、505和506中存在几何结构的代码。在这个特定示例中,可以使用四次存储器访问以便访问八叉树中的最低级别。在这种开销太高的情况下,可以采用替代方法将八叉树的最高级别编码为诸如64^3的更大体积,如507中所示。在这种情况下,507中的每个非零条目可以指示底层256^3体积508中存在底层4^3八叉树。这种替代组织的结果是,与503、504和505中所示的替代公式相比,仅需要两次存储器访问来访问256^3体积508中的任何体素。后一种方法在以下情况下是有利的:托管八叉树结构的设备具有较大量的嵌入式存储器,从而仅允许体素八叉树508的较低且较不频繁访问的部分处于外部存储器中。这种方法在存储方面可能成本更高(例如,其中将完整的、更大的(例如,64^3)体积存储在片上存储器中),但是折衷可以允许更快的存储器访问(例如,2倍)和更低的功耗、以及其他示例优点。
转到图6,示出了框图,其展示了根据一些实施例的可以利用本申请的数据结构和体素数据的示例应用。在一个示例中,诸如图5所示的示例,可以通过示例体素描述符500提供附加信息。虽然体素描述符可以将所利用的总存储器增加到每体素2位,但是体素描述符可以实现可以利用体素数据的广泛应用,诸如图6中所表示的。例如,诸如使用密集slam系统601(例如,slam平台)生成的共享体积表示602可以用于使用图形光线投射或光线跟踪603来渲染场景、用于音频光线投射604、以及其他实施方式。在仍其他示例中,体积表示602还可以用于卷积神经网络(cnn)推断605,并且可以由云基础设施607来备份。在一些实例中,云基础设施607可以包含诸如可以经由推断进行访问的树、家具或其他对象(例如,606)等对象的详细体积描述符。基于推断或以其他方式识别对象,可以将相应的详细描述符返回到设备,从而允许由具有姿态信息以及包含对象属性和其他示例特征的描述符的边界框表示来替换体积表示602的体素。
在仍其他实施例中,可以在一些系统中另外地或可替代地利用上面讨论的体素模型,以使用来自体积表示602的3d到2d投影来构造示例环境608的2d地图。这些2d地图可以再次经由通信机器、经由云基础设施和/或其他基于网络的资源607共享并且被聚合(例如,使用相同的云基础设施)以使用众包技术来构建更高质量的地图。这些地图可以由云基础设施607共享到所连接的机器和设备。在仍进一步的示例中,针对超低带宽应用,可以使用投影然后分段简化609(例如,假设运载工具或机器人的固定宽度和高度)来精化2d地图。然后,简化路径可以对于路径的每分段线性段仅具有单个x、y坐标对,从而减少将运载工具609的路径传达到云基础设施607所需的带宽量,并且所述简化路径在这同一个云基础设施607中被聚合以使用众包技术来构建更高质量的地图。这些地图可以由云基础设施607共享到连接的机器和设备。
为了实现这些不同的应用,在一些实施方式中,可以诸如通过共享软件库来提供共同的功能,在一些实施例中,可以使用硬件加速器或处理器指令集架构(isa)扩展以及其他示例来加速所述共享软件库。例如,这类功能可以包括将体素插入描述符中、删除体素或查找体素610。在一些实施方式中,还可以支持碰撞检测功能620、以及从体积630中删除点/体素、以及其他示例。如上文所介绍的,系统可以设置有根据相应的体积表示602(3d体积)(例如,其可以用作路径或碰撞确定的基础)来快速生成x、y和z方向上的2d投影640的功能。在一些情况下,能够使用直方图金字塔650由体积表示602生成三角形列表也可以是有利的。进一步地,系统可以设置有用于快速确定体积空间602的2d和3d表示中的自由路径660的功能。这种功能在各种应用中可能是有用的。可以提供进一步的功能,诸如详细说明体积中体素的数量、使用群体计数器对体积表示602的掩码区域中的1位的数量进行计数来确定对象的表面、以及其他示例。
转到图7的简化框图,展示了示例网络,其包括根据至少一些实施例的配备有辨识3d数字的功能的系统。例如,图6所示的应用之一是体积cnn应用605,其在图7中更详细地描述,其中,示例网络用于辨识根据数据集(诸如,混合国家标准与技术研究院(mnist)数据集)生成的3d数字700。通过在训练之前在x、y和z上对这种数据集内的数字施加适当的旋转和平移,可以使用所述数字来训练基于cnn的卷积网络分类器710。当用于嵌入式设备中的推断时,除其他示例之外,经训练网络710可以用于以高准确度对场景中的3d数字进行分类,即使在数字经受x、y和z上的旋转和平移的情况下也是如此720。在一些实施方式中,cnn分类器的操作可以由图2所示的hwcnn加速器207来加速。当神经网络的第一层使用体积表示602中的体素执行乘法时,可以跳过这些算术运算,因为乘以零始终为零并且数据值a与一(体素)的相乘等于a。
图8展示了使用隐含的细节层次对同一数据结构执行的多种分类。使用体积表示602进一步精化cnn分类可以是:因为在如图5所示的八叉树结构中八叉树表示隐含地包含多个细节层次,所以可以使用单个分类器830或多个并行分类器使用隐含细节层次800、810和820来并行的对同一数据结构执行多种分类,诸如图8所示。在传统系统中,由于图像需要在分类通道之间重新调整大小,因此相当的并行分类可能很慢。在应用本文所讨论的体素结构的实施方式中可以放弃这种重新调整大小,因为同一八叉树可以以多个细节层次包含相同的信息。实际上,基于体积模型的单个训练数据集可以覆盖所有细节层次而不是诸如将在常规cnn网络中需要的重新调整训练数据集的大小。
转到图9的示例,根据一些实施例通过2dcnn展示了示例操作消除。可以在3d体积cnn上以及在2dcnn上使用操作消除,如图9所示。例如,在图9中,在第一层中,位图掩码900可以用于描述输入910的预期“形状”,并且可以应用于传入视频流920。在一个示例中,不仅可以在3d体积cnn上而且还可以在2d体积cnn上使用操作消除。例如,在图9的示例的2dcnn中,位图掩码900可以应用于cnn的第一层以描述输入910的预期“形状”,并且可以应用于cnn的输入数据(诸如,传入视频流820)。作为示例,图9中示出了将位图掩码应用于行人的图像以用于cnn网络中的训练或推断的效果,其中,901表示行人901的原始图像,903表示应用了位图掩码的相应版本。类似地,902中示出了不包含行人的图像,并且904中示出了相应的位图掩码版本。相同的方法可以应用于任何类型的2d或3d对象,以便通过了解检测器所期望的预期2d或3d几何结构来减少cnn训练或推断所需的操作数量。911中示出了3d体积位图的示例。920中示出了使用2d位图用于真实场景中的推断。
在图9的示例实施方式中,示出了概念位图(在900处),而真实位图是通过对特定分类的对象910的一系列训练图像求平均来生成的。所示出的示例是二维的,但是也可以为采用所提出的每体素具有一位的体积数据格式的3d对象生成类似的位图掩码。实际上,除其他示例实施方式之外,所述方法还可以潜在地扩展为每体素/像素使用附加位来指定2d或3d对象的预期颜色范围或其他特性。
图10是表格,展示了根据一些实施例的涉及对10,000个cifar-10测试图像的分析的示例实验的结果。在一些实施方式中,由于在诸如lenet1000等cnn网络中频繁进行的修正线性单元(relu)操作,可以使用操作消除来消除1d、2d和3dcnn中的中间计算,如图10所示。如图10所示,在使用10,000个cifar-10测试图像的实验中,由relu单元生成的数据相关的零的百分比可以达到85%,这意味着在零的情况下,可以提供辨识零并且作为响应不取出相应数据和执行相应乘法运算的系统。在本示例中,85%表示根据修改的国家标准与技术研究院数据库(mnist)测试数据集生成的relu动态零的百分比。与这些零相对应的相应操作消除可以用于降低功耗和存储器带宽要求、以及其他示例益处。
可以基于位图来剔除琐碎操作。例如,这种位图的使用可以根据在名称为“circuitforcompressioningdataandaprocessorsusingthesame(用于压缩数据的电路以及使用所述电路的处理器)”的美国专利号8,713,080中讨论和说明的原理和实施例,所述美国专利通过引用以其全文结合在此。一些实施方式可以提供能够使用这样的位图的硬件,诸如系统、电路系统以及在名称为“hardwareforperformingarithmeticoperations(用于执行算术运算的硬件)”的美国专利号9,104,633中讨论和说明的其他实施方式,所述美国专利通过引用以其全文结合在此。
图11展示了根据一些实施例的可以结合到系统中以提供用于基于位图来剔除琐碎操作的功能的硬件。在本示例中,提供了包括重复的卷积层的多层神经网络。所述硬件可以包括一个或多个处理器、一个或多个微处理器、一个或多个电路、一个或多个计算机等。在这个特定示例中,神经网络包括初始卷积处理层1100、然后是池化处理1110、并且最后是激活函数处理(诸如,修正线性单元(relu)函数1120)。提供relu输出向量1131的relu单元1120的输出可以连接到随后的卷积处理层1180(例如,可能经由延迟1132),所述卷积处理层接收relu输出向量1131。在一种示例实施方式中,还可以与relu单元1120到随后的卷积单元1180的连接并行地生成relu位图1130,relu位图1130表示relu输出向量1131中的哪些元素为零并且哪些为非零。
在一种实施方式中,可以生成或以其他方式提供位图(例如,1130),以向启用的硬件通知消除在神经网络的计算中涉及的操作的机会。例如,relu位图1130中的位可以由位图调度器1160解释,考虑到乘以零将始终产生零作为输出,所述位图调度器指示随后的卷积单元1180中的乘法器跳过relu输出向量1131中的在relu位图1130中存在相应的二进制零的零条目。并行地,还可以跳过从地址生成器1140对与relu位图1130中的零相对应的数据/权重的存储器取出,因为在取出将由随后的卷积单元1180跳过的权重时几乎没有值。如果要经由ddr控制器1150从附接的ddrdram存储设备1170取出权重,则等待时间可能很高,以至于只能节省一些片上带宽和有关功耗。另一方面,如果从片上ram1180存储装置取出权重,则可以绕过/跳过整个权重取出操作,特别是如果在输入处将与ram/ddr取出延迟1132相对应的延迟添加到随后的卷积单元1180的话。
转到图12,提供了简化框图以说明根据一些实施例的对配备有用于剔除琐碎操作(或执行操作消除)的电路系统和其他逻辑的示例硬件的精化。如图12的示例所示,可以提供附加硬件逻辑以预测从在前的最大池化单元1210或卷积单元1200提前输入的relu单元1220的符号。将符号预测和relu位图生成添加到最大池化单元1210可以允许从定时的角度更早地预测relu位图信息以覆盖可能通过地址生成器1240、通过外部ddr控制器1250和ddr存储装置1270或内部ram存储装置1271发生的延迟。如果延迟足够低,则可以在地址生成器1240中解释relu位图,并且可以完全跳过与relu位图零相关联的存储器取出,因为可以确定从不使用来自存储器的取出的结果。除其他示例特征和功能之外,对图11的方案的这种修改可以节省附加的功率,并且如果通过ddr访问路径(例如,1240到1250到1270)或ram访问路径(例如,1240到1271)的延迟足够低以便不能保证延迟级1232,则还可以允许在到随后的卷积单元1280的输入处移除延迟级(例如,1132、1232)。
图13是另一简化框图,展示了根据一些实施例的示例硬件。例如,cnnrelu层可以产生与负输入相对应的大量输出零。实际上,可以通过查看到先前层(例如,图13的示例中的池化层)的(多个)符号输入来预测性地确定负relu输入。浮点和整数运算可以根据最高有效位(msb)显式地带有符号,因此在卷积层中跨要相乘的输入向量进行简单的逐位异或(xor)运算可以预测哪些乘法将产生输出零,诸如图13所示。所得的符号预测的relu位图向量可以用作用于确定乘法的子集和从存储器进行读取的相关联系数的基础,以便诸如以上文其他示例中描述的方式进行消除。
将relu位图的生成提供回到先前的池化级或卷积级(即,在相应的relu级之前的级)可能产生附加的功率。例如,可以提供符号预测逻辑以在乘法器将产生负输出时禁用所述乘法器,所述负输出将由relu激活逻辑最终设置为零。例如,这示出了乘法器1314的输入1301和1302的这两个符号位1310和1315在逻辑上由异或门进行组合以形成prerelu位图位1303的情况。除其他示例之外,此同一信号可以用于禁用乘法器1314的操作,所述操作否则将不必要地消耗生成负输出的能量,所述负输出将在被输入用于下一卷积级1390中的乘法之前由relu逻辑设置为零。
应注意的是,1300、1301、1302和1303(标注a)的表示示出了图13中标为b的表示中所示的更高级视图。在本示例中,到框1302的输入可以包括两个浮点操作数。输入1301可以包括:显式符号位1310、包括多个位的尾数1311、以及再次包括多个位1312的指数。类似地,输入1302同样可以包括符号1315、尾数1317和指数1316。在一些实施方式中,尾数和指数可以具有不同的精度,因为结果1303的符号分别仅取决于1301和1302、或者1310和1315的符号。事实上,1301和1302都不需要是浮点数,而是只要其是有符号数并且最高有效位(msb)实际上是显式或隐式的符号位(例如,如果数字是一或二的补码等),就可以是任何整数或定点格式。
继续图13的示例,这两个符号输入1310和1315可以使用异或(xor,有时在本文中可替代地表示为exor或exor)门进行组合以生成位图位1303,然后可以使用硬件来处理所述位图位以识别可能在下一卷积框(例如,1390)中省略的下游乘法。在这两个输入数字1313(例如,对应于1301)和1318(例如,对应于1302)具有相反符号并且将产生负输出1304的情况下,还可以使用相同的异或输出1303来禁用乘法器1314,所述负输出将由relu框1319设置为零,从而导致relu输出向量13191中的零值,所述零值将被输入到随后的卷积级1390。因此,在一些实施方式中,prerelu位图1320可以并行地传输到位图调度器1360,所述位图调度器可以调度乘法以在卷积单元1390上运行(和/或省略)。例如,对于位图1320中的每个零,可以在卷积单元1390中跳过相应的卷积运算。并行地,位图1320可以被示例地址生成器1330消耗,所述示例地址生成器控制对在卷积单元1390中使用的权重的取出。位图1320中对应于1的地址列表可以在地址生成器1330中被编译,并且控制经由ddr控制器1350到ddr存储装置1370的路径,或者控制到片上ram1380的路径。除其他示例之外,在任一种情况下,可以取出与prerelu位图1320中的一相对应的权重并且将其呈现(例如,在关于权重输入1371的时钟周期的一定等待时间之后)给卷积框1390,而可以省略对与零相对应的权重的取出。
如上所述,在一些实施方式中,可以在位图调度器1360与卷积单元1390之间插入延迟(例如,1361),以平衡通过地址生成器1330、ddr控制器1350和ddr1350的延迟,或者平衡通过地址生成器1330和内部ram1380的路径。所述延迟可以使得由位图调度器驱动的卷积能够在时间上与卷积单元1390中的卷积计算的相应权重正确对齐。实际上,从定时的角度来看,比在relu框1319的输出处更早生成relu位图可以允许得到附加的时间,所述附加时间可以用于在由地址生成器1330生成对存储器的读取之前拦截所述读取(例如,ram1380或ddr1370),使得可以放弃一些读取(例如,对应于零)。除其他示例优点之外,由于存储器读取可能比片上逻辑操作高得多,因此排除这种存储器取出可以导致非常显著的节能。
在一些实施方式中,如果在时钟周期方面仍然没有足够的节省来覆盖dram访问时间,则可以使用面向块的技术来提前从ddr中读取符号位(例如,1301)组。这些符号位组可以与来自输入图像或中间卷积层1302的符号块一起使用,以便使用一组(多个)异或门1300来生成prerelu位图块(例如,以计算2d或3d阵列/矩阵之间的2d或3d卷积中的符号位之间的差异,以及其他示例)。在这种实施方式中,可以提供ddr或片上ram中的附加1位存储来存储每个权重的符号,但是这可以允许以使得永远避免从ddr或ram中读取将从relu级乘以零的权重的方式来覆盖许多等待时间周期。在一些实施方式中,除其他示例考虑和实施方式之外,可以避免ddr或片上ram中的每权重的附加1位存储,因为符号以这样的方式被存储:它们可从指数和尾数中独立地寻址。
在一个示例中,可以进一步增强系统以利用ddr访问,所述访问可以进行自然脉冲串访问以实现最大数据传送速率。通过跳过各个ddr权重访问来节省能量在此内容中可能是不可行的,因为所述权重访问可能比脉冲串短。因此,在一些实例中,在与特定脉冲串事务相对应的所有位图位为零的情况下,可以跳过脉冲串。然而,这可能不频繁地发生,并且因此所得的功率节省和带宽节省可能是有限的。在仍其他实施方式中,可以针对脉冲串中的位图位的数量来设置寄存器可编程阈值,使得如果位图脉冲串中多于n个位为零,则将完全跳过脉冲串。这可能具有略微降低整体cnn分类准确度的效果,但是为了节省能量可以是可接受的。
图14展示了根据一些实施例的可以如何使用体积数据(例如,根据如上所述的格式)来合成音频流。一些增强现实(ar)和混合现实(mr)系统中存在的挑战是解决ar/mr呈现中的不一致性,以使得体验更加真实且更具沉浸感。这可以包括组合图像(例如,虚拟与虚拟、虚拟与真实等),如上所述。体积数据还可以用于增强ar和mr应用中的音频呈现。例如,图14所示的简图展示了(例如,如上所讨论的经格式化的)体积数据的示例使用,其用于通过以下方式来合成用于扩音器1460、头戴式耳机1470或其他扬声器的音频流:使用音频光线投射器1450根据体积模型创建混响模型,并且通过音频光线投射器生成的模型传递实时或预先录制的音频1440以生成与体积模型相对应的输出波形。在图14的特定示例中,可以提供连接到(诸如先前描述的)isp流水线1420的多个图像传感器1410,所述流水线的输出被馈送到slam流水线1430(诸如先前描述的)。图像传感器1410可以包括无源立体对、结构光或飞行时间有源ir相机、以及其他示例。
可以根据基于八叉树的体积模型1431以如以上升的细节层次和位的1441、1442、1443和1444所示的不同的细节层次(针对渲染速度)生成多个音频模型。实际上,可以使用相同的体积模型来生成用于不同扩音器位置的模型,以便可以支持包括立体声和环绕声在内的多个扩音器(包括立体对和头戴式耳机)。这些模型可以作为完整的模型实时生成或者实际上可以使用可重复使用的几何结构幻灯片来构建,所述幻灯片可以使用最终求和级来适当地且动态地组合,所述最终求和级考虑了可以基于收听者在由体积模型建模的场景中的当前位置而对声场作出贡献的光线。
图15示出了根据一些实施例的基于几何结构的这种可重复使用的混响滤波器元件的示例。在图15的特定示例中,考虑了图14的示例金字塔结构1400的截面视图。所述金字塔可以通过基于八叉树的体积数据结构来建模,并且所述体积数据结构可以用于生成与金字塔结构1400的尺寸和特性一致的音频混响模型。在本示例中,音频混响模型的生成可以主要基于阶梯1504的高度1503和深度、以及观察者相对于金字塔的第一阶梯1502的距离和取向。可以为此第一阶梯以及金字塔中的所有其他阶梯对混响进行建模。可以回到收听者的耳朵处(例如,经由连接到混响建模电路系统或其他逻辑的扬声器1505)对这些建模的混响进行求和。混响模型的输入可以是特定噪声(例如,拍手、语音或其他音频),包括来自现场环境的经由麦克风捕获的音频流、预先录制的音频流或其他声音1500。虽然本示例展示了金字塔几何结构的建模,但是根据本文所讨论的原理,可以通过相应的体积数据结构对可能的任何3d几何结构进行建模。因此,除其他示例之外,可以使用这种体积数据结构来开发和增强各种vr、ar和mr环境,并且可以开发与此类环境的混响和音频特性一致的相应混响模型。
图16展示了根据一些实施例的基于4×4体积立方体1600以及所确定的观察者位置1601由示例体积模型对有限脉冲响应(fir)混响滤波器的示例生成。从其中一条光线的角度来看,声波的传播可以通过考虑其传播通过每个体素体积1619至1612来建模,其中,系统通过与声音穿过空气相对应的传播系数来对声波的衰减进行建模。继续本示例,可以将建模的声音建模为从体积模型的第一部分1610(例如,图14至图15的示例中的金字塔模型的第一阶梯1611)反射,其中,反射系数与由体素1610建模的对象的材料相对应。例如,在前一示例中,体素1610可以表示石灰石金字塔(或具有其他几何结构的其他结构)的表面,其中,体积模型或相关联数据指定用于确定声音将如何从金字塔反射的石灰石(例如,金字塔表面的材料)反射系数。继续本示例,可以进一步对建模的且衰减的反射波的传播进行建模以将体素(例如,1612至1618)重新遍历回观察者位置1619,其中,可以基于由体素(例如,1612至1618)建模的介质(例如,空气、墙壁、水、玻璃等)的反射和衰减来进一步对信号进行建模,以创建与在实际存在的所建模的几何结构中预期的一致的虚拟延迟和混响特性,以及其他示例。
在一个实施例中,图16所展示的结构可以直接转录为fir滤波器,其中,输入音频样本进入1620,乘以通过第一体素c1(1620)的传播,并且穿过延迟级(1体素)1621,然后由一个体素1622的传播系数衰减,依此类推,直到在1630处最终输出样本退出fir滤波器。所有体素系数相等允许构建fir滤波器的集总版本,其中,使用一半数量的延迟和乘法器,其中,除了来自石头金字塔的反射系数1642保持不变之外,每个延迟元件1641为两倍长并且每个乘法器系数1640两倍大。换言之,在这种实例中,可以对n个反射系数进行求和,并且执行集总乘法而不是单独执行每个乘法。可以针对每次反射(例如,通过对由体积数据结构建模的几何结构的光线投射来确定)静态地进行这种求和。例如,所有延迟1661和所有传播系数1660可以集总到具有14d延迟元件和14×c1传播系数的完全优化的fir滤波器中,然而,这种方法可能是不可向量化的,这可能在向量处理器或向量化硬件上呈现低效率。对于fir混响滤波器的向量化实施方式,可以在四个向量运算1700至1703中的每个四元素宽的水平条带中对同一个4×4体积进行光线跟踪,然后在1704中对这四个向量化输出求和并将输出样本输出到扩音器或头戴式耳机1705,诸如图17的示例简图所示。因此,图17示出了根据一些实施例的fir混响滤波器的向量化实施方式。
转到图18,示出了简图,其展示了根据一些实施例的通过断言执行使用向量化处理进行的光线投射,其中,处理器具有至少四个功能单元;断言执行(peu)1805,其可以对三种可能的运算精度(fp32、fp16或uint8)之一的向量运算单元(vau)1807、以及标量运算单元(sau)1808执行每通道断言操作,所有这些运算单元都在分支重复单元(bru)的控制下,所述分支重复单元一次一个向量地逐步通过体积中的多个体素(深度)。在一些实施方式中,就向量运算而言,16位浮点操作数对于mp3音频可以是足够的(其中32位浮点(fp32)是可选的),从而允许通过vau1807将吞吐量加倍。事实上,原则上,除其他可能的示例实施方式之外,在许多情况下还可以利用具有无符号整数(例如,u8)乘以被除数的倒数的分数表示,从而允许vau吞吐量相对于fp32模式为几乎四倍。
可以通过从存储器读取的体积数据结构中选择位向量来构造断言单元1803的输入,如前所述,所述位向量可以由4^3个体素子体积构成,每个体素子体积由64位整数表示。在fp32运算的情况下,可以从1800中的4^3体积信息中逐行选择4位宽的向量。在16位运算的情况下,可以由级联单元18031级联来自1801的两个子体积(即18011和18012)的两个4位向量,以形成8位断言向量1803。最后,在8位运算的情况下,可以由级联单元18031通过级联来自1802的子体积的四个4位向量(即18021、18022、18023和18024)来构造16位断言向量1802,以此类推。不管运算表示如何,每通道断言都允许跨具有要跨单个循环中的向量并行地评估的4、8或16个体素的体素几何结构使用向量化。
在一种示例实施方式中,peu1805对vau1807的断言对1803上的4、8或16个体素宽的块中的体积数据进行如下操作:
·位图0-沿着用于音频信号通过空气传播的光线而求和的fir混响;
·位图1-停止准则和反射系数乘法;
·退出-当跨通过对每个位图1位与寄存器的先前内容进行或运算来维持的向量遇到所有一时循环并停止传播,并且当寄存器包含所有一时停止循环。
光线投射过程中的进一步优化可以通过分解以从原点跨体素的角度进行光线跟踪所需的2d插值来实施。跨体素体积在x和y维度上的2d插值可以被分解为跨向量共同的单独的共同y分量以及取决于距体素中心的距离的第二x分量。
诸如本文所讨论的体素表示可以用于增强不仅用于音频而且还用于其他应用的光线投射操作。在一些实例中,物理或光传播中使用的光线投射可能与针对音频的光线投射不同,其中,通过空气介质可能没有信号衰减,但对于流体而言,与先前针对空气概述的相同的光线投射机制可以用于物理或光传播。因此,用于利用空气作为介质的光/物理光线投射的断言机制可以例如如下实施:
·位图0-什么都不做,因为通过介质的衰减可忽略(在音频情况下,fir输出被更新);
·位图1-乘以光反射率(对象刚性)系数并将颜色(力)复制到输出缓冲器;
·退出-当跨通过对每个位图1位与寄存器的先前内容进行或运算来维持的向量遇到所有一时循环并停止传播,并且当寄存器包含所有一时停止循环。
图19是简化框图,表示根据一些实施例的示例多时隙向量处理器(例如,超长指令字(vliw)向量处理器)。在本示例中,向量处理器可以包括多个(例如,9个)功能单元(例如,1903至1911),所述多个功能单元可以由多端口存储器系统1900馈送、由向量寄存器堆(vrf)1901和通用寄存器堆(grf)1902支持。所述处理器包含指令解码器(idec)1912,所述解码器对指令进行解码并生成控制功能单元1903至1911的控制信号。功能单元1903至1911是断言执行单元(peu)1903、分支重复单元(bru)1904、加载存储端口单元(例如,lsu01905和lsu11906)、向量运算单元(vau)1907、标量运算单元(sau)1910、比较移动单元(cmu)1908、整数运算单元(iau)1911以及体积加速单元(vxu)1909。在此特定实施方式中,vxu1909可以加速对体积数据的操作,包括存储/检索操作、逻辑操作和运算操作。虽然在图19的示例中将vxu电路系统1909示出为单一组件,但是应当理解,vxu(以及任何其他功能单元1903至1911)的功能可以分布在多个电路系统中。进一步地,在一些实施方式中,除其他示例实施方式之外,vxu1909的功能在某些实施方式中可以分布在处理器的其他功能单元(例如,1903至1908、1910、1911)中的一个或多个功能单元内。
图20是简化框图,展示了根据一些实施例的vxu2000的示例实施方式。例如,vxu2000可以提供至少一个64位输入端口2001以接受来自向量寄存器堆1901或通用寄存器堆1902的输入。此输入可以连接到多个功能单元,所述多个功能单元包括:寄存器堆2003、地址生成器2004、点寻址逻辑2005、点插入逻辑2006、点删除逻辑2007、x维度中的3d到2d投影逻辑2008、y维度中的3d到2d投影逻辑2009、x维度中的3d到2d投影逻辑2010、2d直方图金字塔发生器2011、3d直方图金字塔发生器2012、群体计数器2013、2d路径查找逻辑2014、3d路径查找逻辑2015以及用于对64位无符号整数体积位图进行操作可能的附加功能单元。来自框2002的输出可以被写回向量寄存器堆vrf1901或通用寄存器堆grf1902寄存器堆。
转到图21的示例,表示了4^3体素立方体2100的组织表示。还表示了第二体素立方体2101。在本示例中,体素立方体可以在数据中被定义为64位整数2102,其中,立方体内的每个单个体素由64位整数中的单个相应位表示。例如,地址{x,y,z}={3,0,3}处的体素2012可以被设置为“1”以指示在由体素立方体2101表示的体积空间内的这个坐标处存在几何结构。进一步地,在本示例中,除其他示例之外,(体素2102旁边的)所有其他体素可以与“空白”空间相对应,并且可以被设置为“0”以指示在那些坐标处不存在物理几何结构。转到图22,展示了根据一些实施例的示例两级稀疏体素树2200。在本示例中,体积内(例如,在位置{15,0,15}中)仅包括单个“被占据”体素。在这种情况下,树的上级02201包含单个体素条目{3,0,3}。这个体素进而指向树的下一级2202,所述下一级包含元素{3,0,3}中的单个体素。数据结构中与稀疏体素树的级别0相对应的条目是其中一个体素被设置为被占据的64位整数2203。所设置体素意味着然后在与2203中设置的体素体积相对应的树级别1中分配64位整数的阵列。在级别1子阵列2204中,仅将这些体素之一设置为被占据,而所有其他体素设置为未被占据。在本示例中,由于树是两级树,因此级别1表示树的底部,使得层级结构在此处终止。
图23展示了根据一些实施例的两级稀疏体素树2300,其包含特定体积的位置{15,0,3}和{15,0,15}中的被占据体素。在这种情况下(其将特定体积细分为64个上级0体素),树的上级02301包含两个体素条目{3,0,0}和{3,0,3},其中,相应的数据2304示出两个体素被设置(或占据)。稀疏体素树(svt)的下一级作为64位整数的阵列被提供,所述阵列包含两个子立方体2302和2303,在级别0中设置的每个体素对应一个。在级别1子阵列2305中,两个体素被设置为被占据(v15和v63),并且所有其他体素被设置为未被占据和树。这种格式是灵活的,因为树的下一级中的64个条目总是与树的上层中的每个所设置体素相对应地分配。这种灵活性可以允许以灵活的方式(即,不是以固定的顺序,诸如随机地)将动态变化的场景几何结构插入到现有的体积数据结构中,只要已经设置了上层中的相应体素即可。如果不是,则将维护指针表,导致更高的存储器要求,否则将需要至少部分地重建树以便插入无法预料的几何结构。
图24展示了根据一些实施例的用于存储来自图23的体素的替代技术。在本示例中,总体积2400包含存储在如图23中的全局坐标{15,0,3}和{15,0,15}处的两个体素。在这种方法中,并非分配64条目的阵列来表示在级别0下面的级别1中的所有子立方体,而是仅分配级别1中实际包含几何结构(例如,如由相应的级别0体素是否为占据者所指示的)的那些元素作为相应的64位级别1记录,使得在本示例中,级别1仅具有两个64位条目而不是六十四个条目(即,对应这64个级别1体素中的每一个,无论是被占据还是空白)。因此,在本示例中,第一级02404等效于图23中的2304,而下一级2405在存储器要求方面比图23中的相应2305小62倍。在一些实施方式中,如果要将新几何结构插入级别0中,而级别1中尚未分配空间,则必须复制并重新排列树。
在图24的示例中,可以通过对在当前层上方的层中的被占据体素进行计数来导出子体积。以这种方式,系统可以确定在体素数据中一个较高层结束并且下一个较低层开始的位置。例如,如果三个层0体素被占据,则系统可以预期在体素数据中三个相应的层1条目将跟随,并且(在这三个之后的)下一条目与层2中的第一条目相对应,以此类推。在场景的某些部分不随时间变化或者在应用中需要比如从扫描冥王星表面的空间探测器远程传输体积数据(其中每个位的传输都昂贵且耗时)的情况下,这种最佳紧缩可以非常有用。
图25展示了根据一些实施例的可以将体素插入到表示为64位整数体积数据结构条目的4^3立方体中以反映相应体积内的几何结构的变化的方式。在一个示例中,每个体素立方体可以被组织为如2500中所示的64位整数内的四个逻辑16位平面。除其他示例组织之外,每个平面对应于z值0到3,并且在每个平面内,每个y值代码4个逻辑4位位移0到3,并且最后在每个4位y平面内,每个位代码4个可能的x值0到3。因此,在本示例中,为了将体素插入到4^3体积中,首先可以将1位的x值移位0到3,然后可以将这个值移位0/4/8/12位以对y值进行编码,并且最后可以通过移位0/16/32/48位来表示z值,如2501中的c代码表达式所示。最后,由于每个64位整数可以是多达64个体素的组合,其中每个体素是单独写入的,因此新位图必须通过对旧位图值与新位图值进行或运算而在逻辑上与从稀疏体素树读取的旧64位值组合,如2502中所示。
图26展示了根据一些实施例的用于将体素插入到由64位整数表示的4^3立方体中的逻辑。所述逻辑由3层多路复用器组成。第一多路复用器2603可以根据2位x输入2600来对x中的体素的位置进行编码,从而产生到第一多路复用器2604的4位输出上的在x上0、1、2或3位的有效移位。第二多路复用器2605根据y输入2601来将第一多路复用器2604的4位输出根据y输入移位0、4、8、或12位,从而产生16位多路复用器输出值2606。最后一个多路复用器2607根据z输入2602来将第二多路复用器2606的输出移位0、16、32或48位,从而在第三多路复用器2608的64位输出上对x、y和z上的体素的位置进行编码。除其他示例实施方式之外,第三多路复用器2608的输出可以通过2610与由64位整数2609表示的4^3体积的位图的先前值进行逻辑或运算,并且因此对体素位图2608的1位更新将出现在更新的64位位图中的正确位置,以便准备好将体积2611写回寄存器堆。
图27展示了根据一些实施例的用于生成6位地址三元组以控制多路复用器的逻辑,所述多路复用器执行体素插入、删除和检索(关于存在的检测)。在本示例中,要在稀疏体素树中插入、检索、测试等的体素的16位x、y和z地址被呈现给地址格式化逻辑2705作为紧缩的64位输入值2700,所述输入值由对应x、y和z中的每一个的三个16位地址后跟用于填充到64位的16个零的未使用字段组成。地址格式化逻辑1605由3个完全相同的选择框2706、2707和2708组成,所述选择框根据移位输入2704来从16位x、y和z地址中选择2位。然后将这三个两位地址xm(2712)、ym(2713)和zm(2714)地址应用于如图27和前一段落中的附随描述中所述的x、y和z多路复用器级别2715、2717和2719。
图28展示了根据一些实施例的地址选择逻辑,其用于从16位输入地址2802针对sel[3:0]输入2801指定的svt级别来生成2位地址输出地址2824。可以根据真值表2825在二进制独热解码器2803中执行对4位sel[3:0]输入2801的解码。在独热解码器中,仅输出线l0至l6(2804至2810)之一可以在任何时间都为高而所有其他输出都为零。如果来自独热解码器2803的电平为高,则选择到当前多路复用器级别的输入地址对,否则选择来自前一多路复用器级别的输出。在多路复用器树中,第一级由解码器输出l62806控制,所述解码器输出如果为高,则控制多路复用器对2811以选择地址位对a1:a0如果为高,并且如果为低则选择a3:a2,其中,所选择的多路复用器输入对出现在输出对2812上,所述输出对进而连接到l5多路复用器对2813。多路复用器2813的第二级由选择线l5(2805)控制,所述选择线如果为高,则选择前一多路复用器对2812的输出,否则如果2805为低,则选择a5:a4地址对。解码以类似的方式继续,直到产生2位输出地址对[1:0]2824的最终多路复用器级2823。
转到图29,示出了表示,用于展示根据一些实施例的可以如何通过逻辑或运算来在x方向上对存储在64位整数2900中的3d体积对象进行投影以产生2d图案2901、在y方向上进行投影以产生2d输出2902、并且最终在z方向上进行投影以产生2903中所示的图案。图30展示了根据一些实施例的如何对来自输入64位整数的位进行逻辑或运算以在x、y和z上产生输出投影。在本示例中,表格3001逐列示出了来自输入向量3000的哪些元素索引被进行或运算以产生x投影输出向量3002。表格3003逐列示出了来自输入向量3000的哪些元素索引被进行或运算以产生y投影输出向量3004。最后,3005逐列示出了来自输入向量3000的哪些元素索引被进行或运算以产生z投影输出向量3006。
x投影对来自输入数据3000的位0、1、2、3进行逻辑或运算以产生x投影3001的位0。例如,3001中的位1可以通过对来自3000的位4、5、6和7进行或运算来产生,以此类推。类似地,y投影3004中的位0可以通过对3000的位0、4、8和12一起进行或运算来产生。并且通过对3000的位1、5、9和13等一起进行或运算来产生3004的位1。最后,通过对3000的位0、16、32和48一起进行或运算来产生z投影3006中的位0。并且可以通过对3000的位1、17、33和49一起进行或运算来产生3006的位1,以此类推。
图31示出了根据一些实施例的z方向上的3d到2d投影的硬件组织。在这个特定示例中,所述硬件可以包括输入64位寄存器3100,其输出连接到十六个4输入或门3101、3102等的阵列,其中3101的输出连接到输出z投影3104中的位0,3102的输出连接到3104中的位1,以此类推。通过使用投影硬件来组合跨x、y或z上的多个体素立方体的投影,可以针对完整的体积生成在x、y或z上的投影。另外,除其他示例之外,如果需要,则添加掩码逻辑以允许从逻辑或中屏蔽掉来自4^3立方体的1至4个级别将是简单的,因此在x/y/z投影中存在单个体素粒度。
图32示出了根据一些实施例的可以如何使用投影来生成简化地图的示例。在这种场景下,目标可以是从体素体积3202产生高度h3201且宽度w3201的运载工具3200沿着向下的路径的紧凑2d地图。这里,y投影逻辑可以用于从体素体积3202生成初始粗略2d地图3203。在一些实施方式中,可以对地图进行处理以检查特定尺寸的特定运载工具(例如,汽车(或自主汽车)、无人机等)是否可以通过路径的宽度3201和高度约束3201。为了确保路径是可通过的,这可以通过以下方式来执行:通过在z上执行投影以检查宽度约束3201,并且可以屏蔽y上的投影以将计算限制到运载工具的高度3201。通过附加的后处理(例如,在软件中),可以看出,对于可通过并且满足宽度和高度约束的路径,仅沿着路径的点a3204、b3205、c3206、d3207、e3208和f3209的x和z坐标可以被存储或通过网络进行传输,以便完全重建运载工具可以沿着行驶的合法路径。假设路径可以被解析为这样的逐段分段,则可以以路径的每分段线性部分仅一个字节或两个字节来完全描述所述路径。除其他示例之外,这可以有助于这种路径数据的快速传输和处理(例如,通过自主车辆)。
作为使用lidar或其他昂贵手段进行精确测量的替代方案,图33展示了根据一些实施例的可以如何通过数学手段来聚合来自嵌入式设备的体积3d测量结果或简单2d测量结果以便生成高质量的众包地图。在所提出的系统中,多个嵌入式设备3300、3301等可以配备有能够进行测量的各种传感器,这些测量可以被传输到中央服务器3310。在服务器上运行的软件对所有测量结果3302执行聚合,并通过非线性求解器3303对所得矩阵执行数值求解,以产生高度准确的地图,所述地图然后可以被重新分配回嵌入式设备。实际上,数据聚合还可以包括来自卫星3320、空中lidar调查3321和陆地lidar测量3322的高准确度调查数据,以在这些高保真度数据集可用的情况下提高所得地图的准确度。在一些实施方式中,除其他示例实施方式之外,可以使用具有诸如本文所描述的格式的稀疏体素数据结构来生成、转换为或以其他方式表达所述地图和/或所记录的测量结果。
可以复制图31中的投影逻辑以产生x、y和z上的同步投影,或者可替代地当不需要同步投影时,图34中的简图示出了:在一些实施例中,可以如何在输入多路复用器级的控制下扩展图31中的逻辑以产生x、y或z上的投影,以便选择4个输入位的适当四边形以路由到图31中的这16个或门中的每一个。另外,在应用需要x、y和z投影的体素级准确度的情况下,可以使用一组64个与门来屏蔽掉位平面。出于相同保真度的原因,可以在图31的逻辑中复制这个掩码逻辑。3401是诸如掩码0、1、2或3等掩码,并且3400是与门。
图35是简图,示出了根据一些实施例的可以如何加速由2d位图生成直方图金字塔。可以通过对表示为示例体积数据结构的64位整数3500条目的2d二进制阵列的输入8×8位表示中的一的数量进行连续求和来计算直方图金字塔。直方图金字塔的第一级是通过对3500中的每个2×2位分组中的一的数量进行求和以产生3501中所示的十六个3位数字{0,1,2,3,4}来导出的。例如,64位值3504的位0、1、2和3(对应于350)可以由4×3位加法器3505来求和,以在i0_x寄存器3506中产生部分和。下一个4×3位加法器计算位4、5、6和7等的总和。十六个4×3位加法器的第一层的输出被紧缩到48位寄存器i0_x(也表示为3507)中。通过以下方式来计算直方图金字塔的下一级:使用8位加法器将寄存器i0_x(3505)中的部分乘积求和至3508,以对这四个3位部分和i0_0、i0_1、i0_2和i0_3进行求和,从而计算级别1的值i1_x(例如,3509),i1_x的元素被级联到也对应于3507的3517x中。最后级经由4×5位加法器树3510来将i1_x元素(例如,3509)求和到7位结果中。然后将3510的输出存储在与3503和3507相对应的寄存器3512中作为i2_0。除其他示例特征和实施方式之外,从易于使用的角度来看,从存储器映射的角度而言,这三个元素3514、3516和3507可以被紧缩成3518中所示的128位格式。
图36示出了根据一些实施例的可以如何加速由3d位图生成直方图金字塔。类似于图35的示例,示例体积数据结构(例如,3600、3601、3602、3603)的64位整数条目此次针对4^33d体积而不是8×82d体积进行编码。可以将3d体积缩小为由2个级别3604和3605、然后是3606组成的直方图金字塔。在图36的情况下,体积在3个维度上缩小2倍,而不是如图35的情况那样仅在2个维度上缩小。64位整数条目中的位可以如3610中所示地布置,并且由一行16个四位加法器3650至3655进行求和。第一个4位加法器3650对位0、1、4和5进行求和一直到第十六个加法器3655,所述第十六个加法器对3610的位58、59、62和63进行求和。然后,第二行的八个2×3位加法器3660至3665对4位加法器3650至3655的输出进行求和。例如,加法器3660对3650和3652的输出进行求和,并将结果存储在i1_0(3670)等中。最后,8×4位加法器树3614对i1_x元素3670至3675进行求和,并将结果存储在i2_0(3615)中。
图37是简图,示出了根据一些实施例的可以如何加速在2d2×2位地图上的2d路径查找。操作原理是:对于完全相同的网格单元格的地图上的点之间存在的连接性,x或y或者x和y上的连续运行的单元格的值必须全部设置为一。因此,可以对从这些单元格中绘制的位的逻辑与进行实例化以测试网格中的位图是否存在有效路径,并且可以针对通过n×n网格的每个有效路径对不同的与门进行实例化。在一些实例中,这种方法可能引入组合复杂性,因为即使8×82d网格也可能包含264-1个有效路径。因此,在一些改进的实施方式中,可以将网格减少到可以被分层测试连接性的2×2或4×4个图块。2×2位图3700包含标记为b0、b1、b2和b3的4个位。这4个位可以采用具有相应的标记3701至3717的值0000至1111。这些位图案中的每一个表示标记为3721至3730的2×2网格的面之间的不同级别的连接性。例如,当2×2网格3700包含位图1010(3712)、1011(3713)、1110(3716)或1111(3717)时,存在表示3700中的x0与y0之间的竖直连接性的3721或v0。如表格3718的行1所示,3700中的2输入逻辑与或者b0和b3在连接性图中生成v0,所述v0可以在更高级别的硬件或软件中用于通过已经被细分为2×2子网格的全局网格来决定全局连接性。如果全局图在x轴或y轴上包含奇数个网格点,则顶级网格将需要填充到下一最高偶数个网格点(例如,使得将需要1个额外的零行添加到全局网格上的x轴和/或y轴)。图37进一步示出了示例性7×7网格3750,其示出了如何通过添加用零填充的附加行3732和列3734来将所述网格填充到8×8。为了与其他技术(例如,深度优先搜索、广度优先搜索或迪杰斯特拉算法或其他基于图形的方法)相比加速路径查找,本示例可以将n×n地图3750逐步二次下采样为2×2地图。例如,在本示例中,通过对3750中的单元格a、b、c和d的内容进行或运算来填充3740中的单元格w,以此类推。进而,对3740中的2×2单元格中的位进行或运算以填充3742中的单元格。在路径查找方面,算法从网格3742的最小2×2表示开始并对每个位进行测试。仅需要测试3740的4×4网格(由四个2×2网格组成)中的与2×2网格3742中的一位相对应的部分的连接性,因为我们知道零位意味着在3740中不存在相应的2×2网格单元格。这种方法还可以用于搜索3720中的8×8网格,例如,如果3740中的单元格w包含零,那么我们就知道在3720中的abcd中不存在路径等。这种方法从所使用的图形搜索算法中修剪分支,所述图形搜索算法无论是a*、迪杰斯特拉、dfs、bfs还是其变体。除此之外,可以使用具有2×2组织3718的硬件基本路径查找器来进一步限制相关联的计算。实际上,可以使用具有与3740和3742相同的安排的五个2×2硬件块来组成4×4基本硬件元件,以进一步约束需要执行的图形搜索量。此外,针对潜在的任何n×n拓扑,可以利用具有与3742、3740、3700等相同的安排的二十一个2×2hw块(3718)来构造8×8基于硬件的搜索引擎。
图38示出了根据一些实施例的可以如何加速在3d2×2×2位图上的3d路径查找。类似于图37的示例,n×n×n网格可以被填充为2的倍数(n必须为偶数),如3800中所示。可以将这个网格逐步二次采样为如3801中所示的4×4×4网格,并且最后成为3802中的2×2×2网格。与图37类似,每个2×2×2网格单元格(3802)中的单元格中存在或不存在一可以用于判定是否应该搜索4×4×4网格的任何区域,4×4×4网格中的单元格可以用于修剪8×8网格中的计算,以此类推,直到得到独立于用于搜索整个n×n×n网格的图形算法的完整n×n网格。在2×2×2网格级别处,2×2×2位图中的8个位被标记为v0至v7,如3803中所示。在3804中使用相同的颜色编码示出了与立方体的面的连接性。如通过3805中所示的2×2×2体积的路径查找器的连接性矩阵所示,连接性是对称的,因此只需要表示下三角形,因为从a到b的连接性与从b到a的连接性相同。此外,不必考虑沿对角线的元素,因为它们是隐含的。3806至3813中示出了3维中的连接性的等式,其中,各个部分示出了为了在2×2×2体积3803中的体素之间存在连接性而需要全部为一的位的等式。例如,为了存在v0与v1之间存在的连接性,位v0与v1必须都为“1”,为了存在v0与v2之间存在的连接性,v0与v2两者必须都为“1”,并且为了v0与v3之间存在的连接性,则v0、v1或v2、与v3必须都为“1”,以此类推,如真值表的部分3086中所示。根据这个组织,所示的等式可以在与-或逻辑电路系统中实施,以在8位位图3803上实施2×2×2路径查找,并在单个并行步骤中输出体素v0至v7之间的路径。进一步地,以类似于图37所示的方式,可以按照以3802与3801之间示出的方式互连的3805使用五个2×2×2hw路径查找器来构造4×4×4原始hw路径查找器。实际上,可以按照3802、3801和3800的连接性来实施连接一百三十七个2×2×2hw路径查找器的8×8×8hw路径查找器,以及其他示例。
图39是简化框图,示出了根据一些实施例的可以如何使用所提出的体积数据结构来加速碰撞检测。可以将几何结构的3dn×n×n图二次采样成如先前图38所示的由最低细节层次(lod)2×2×2体积3802(3902)、下一个最高4×4×4体积3801(3901)、8×8×8体积3800(3900)、以此类推一直到n×n×n组成的金字塔。如果无人机、运载工具或机器人的位置3905在3d空间中经由诸如gps等定位装置或经由根据3d地图的重新定位而已知,则其可以快速地用于通过适当地缩放(将它们除以2的相关倍数)无人机/机器人的x、y和z位置并且查询3902是否存在几何结构(例如,检查相应的位图位是否为指示可能的碰撞的一)来测试相关的2×2×2子体积的象限中的几何结构的存在或不存在。如果存在可能的碰撞(例如,得到“1”),则可以在体积3901、3900等中执行进一步检查以确立无人机/机器人是否可以移动。然而,如果3902中的体素是自由的(例如,“0”),则机器人/无人机可以将其解释为自由空间并且操纵方向控制以在地图的大部分中自由移动。
如以上所讨论的,可以利用体积数据结构来增强包括各种几何结构的体积内的光线投射性能。虽然上面介绍了音频光线投射的概念(例如,结合图14至图19),但是应当理解,可以利用类似的原理来执行结合图形渲染、路径规划、碰撞避免的光线投射以及涉及3d几何结构的其他光线投射应用。例如,如图40的简化框图4000所示,示出了用于说明可以如何结合示例路径查找应用来使用体积数据结构的系统。作为示例,无人机4002(或其他设备,诸如机器人、遥控车辆等)可以负责导航3d体积4004。无人机4002(或相关联的控制器设备(例如,4006))可以配置有用于获取描述体积的体积数据结构4008的基于硬件和/或软件的逻辑,(多个)设备(例如,4002、4006)可以使用所述体积数据结构来识别体积4004内的几何结构以影响或指引无人机4002的行驶模式(例如,要避开的障碍物、无人机要作为目标的对象(例如,要拾取和运输的包裹)、表示潜在着陆和停机坪的区域等)。在一些实例中,可以将体积数据结构4008预先加载到无人机4002的本地存储器上,以准备在与建模的体积4004相对应的环境中使用无人机。在其他示例中,无人机4002可以从网络4010中的资源(例如,与不同体积和环境的范围相对应的体积数据结构的储存库4012)获取体积数据结构4008的至少一部分。例如,无人机4002(或控制器系统4006)可以向网络4010传输无线通信,以指示对特定环境的体积模型的请求。在一个示例中,所述请求可以包括全球定位数据或其他位置信息,储存库系统4012可以利用所述信息来识别相应的体积数据结构。因此,响应于无人机4002(或其控制器4006)的使用,可以(通过网络)返回相应的体积数据结构(例如,4008)。作为示例,可以在无人机处(或由其控制器)测量无人机4002的行驶方向(例如,4014),并且可以根据体积数据结构来识别体积4004中的体素(例如,4016、4018等)的路径,如果无人机继续沿着其当前航线,则无人机将进入所述路径。类似地,除其他示例之外,行驶路径(例如,4014)可以识别出一个体积的边界(由第一体积数据结构表示)正在接近并且应当访问和使用与相邻体积相对应的第二体积数据结构。可以在体积数据结构的即将到来的体素(例如,4018)内识别几何结构,并且可以由无人机系统来处理几何结构的存在,以改变或微调其在体积内的导航。例如,体积数据结构可以以多个细节层次定义几何结构,并且识别低细节层次体素中的几何结构可以使无人机系统逐步处理体积数据结构以识别相应的更高细节层次的体素。在一些实施方式中,这可以涉及无人机从基于云的储存库(例如,4012)请求体积数据结构的其余部分,所述其余部分包括对更高细节层次的体素的表示。在其他情况下,体积数据结构的紧凑性质可以允许无人机系统4002(其本身可以具有受约束的存储器和处理资源)来表示且方便地存储和处理所有细节层次。
在仍其他示例中,诸如图40所示,使用体积数据结构来导航体积(例如,4004)的无人机、机器人或其他设备(例如,4002)本身可以拥有传感器(例如,立体相机、深度扫描仪、光探测和测距(lidar)扫描仪或其他图像传感器),所述传感器可以允许设备向储存库系统(例如,4012)提供反馈以更新环境4004的主体积数据结构(例如,4020)。实际上,在一些实施方式中,系统(例如,4002和/或4006)可以拥有处理由图像传感器收集的图像数据以根据定义的结构生成体积数据结构的功能。例如,除其他示例实施方式之外,当导航体积时(例如,使用由云储存库4012提供的体积数据结构),设备(例如,4002)可以生成观察到的图像数据4022(例如,被更新以反映由无人机4002观察到的差异的观察到的体积数据结构),所述观察到的图像数据可以与检索到的体积数据结构4008(其可以用作体积4004的预期参考描述)进行比较,以生成体积数据结构的δ表示4024(例如,通过对观察到的数据结构4022与参考数据结构4008进行异或运算)。设备(例如,4002)可以将在体积4004中观察到的差异传达4026至储存库系统4012。在一些实施方式中,储存库系统4012(或另一系统,诸如无人机系统4002)可以处理这种反馈以导出4028体积数据结构的更新版本4030,所述更新版本可以替换4032体积数据结构的主版本。以这种方式,可以使用来自潜在的多个不同传感器和系统的反馈来插入或删除(例如,使用本文所公开的机制)体素以连续地精化和更新所维持的体积数据结构,以便描述在由体积数据结构建模的各种环境(例如,4004)中的潜在变化的几何结构。
转到图41的示例,示出了示例系统的简化框图4100,所述系统开发并维护用于各种应用的体积数据结构4205。例如,可以提供储存库系统4012,其可以通过一个或多个数据网络4010(例如,使用wi-fi、蓝牙、以太网和其他无线和/或有线通信技术)连接到配备有硬件和/或软件的各种客户端系统(例如,4002、4110、4115等)以便使用体积数据结构(例如,4105)。例如,空中无人机4002可以获得、本地存储和利用特定的体积数据结构4105a,以辅助相应3d环境内的碰撞检测和导航。在另一示例中,体积数据4105b可以服务于诸如智能电话、ar/mr/vr系统、游戏控制台等用户计算设备(例如,4010),以用于在设备4110的显示器上渲染与由体积数据结构4105b建模的3d环境相对应的图形。在另一示例中,除其他示例用例之外,诸如配备有车载计算机的汽车4015等运载工具可以获得并使用体积数据结构4105c,以辅助自主驾驶应用、(在仪表板或头戴式显示器上)呈现图形全球定位引导。
可以根据特定的体积数据结构格式(诸如在一些先前示例中所讨论的)来定义跨潜在的多个不同系统和应用而使用的体积数据结构(例如,4105a至4105c),以紧凑地表示相应体积的多个细节层次4120中的每个细节层次。例如,体积数据结构可以包括整数条目(例如,64位整数条目),所述整数条目的各个二进制值指示几何结构是否存在于表示由体积数据结构描述的总体积的子体积的相应体素中。体积数据结构中的条目可以根据使用体积数据结构定义的多个细节层次4120中的任何一个细节层次。在一个示例中,最低细节层次的体素(例如,由4125表示)可以提供最低粒度信息,其中,这些体素中的每一个表示由体积数据结构表示的总体积的子体积。处于这个第一(l0)且最低细节层次的体素是最大定义的子体积。处于下一细节层次4130(l1)的体素可以表示由l0体素表示的每个子体积的各个子体积。在一个示例中,可以在体积数据结构中提供单个l0条目以描述l0体素中的每个体素。体积数据结构中的每个l1条目同样可以描述细分l0体素中的相应体素的各个l1体素。如以上所讨论的,为了提供体积的稀疏数据表示,可以仅为被指示(例如,由二进制“1”)为包括几何结构的那些l0体素提供l1条目,因为空白的l0体素(例如,在l0条目的相应位中由二进制“0”指示的)表明所述体素(以及此体素的所有子体积)是空白的。因此,并非提供全零的l1条目,而是可以简单地省略这些条目,其中,在紧接的较低级条目(例如,l0)中的一指示下一较高级(例如,l1)中的哪些(以及多少)条目在体积数据结构中被提供。同样,下一细节层次4135(l2)可以表示l1体素的细分,以此类推,直到达到体积中定义的最高细节层次4140(ln),其中,ln体素表示体积和体积内的几何结构的地理上最小且最高粒度的表示。
转到图42的示例,示出了体积数据结构4200的示例表示。在本示例中,可以针对相应体积定义的多个细节层次中的每个细节层次提供条目(例如,4205、4210、4215、4220)。由于一些体积可以是以比其他体积更高且更多细节层次定义的,因此一些体积数据结构可以具有更多或更少的细节层次(以及相应的条目)。如在前述示例中的一个或多个示例中那样,本示例中的体积数据结构4200可以包括与处于最低细节层次的体素相对应的单个l0条目4205。所述条目可以包括与l0体素中的每一个相对应的二进制值。紧接着与l0条目4205邻接的可以是表示各个l0体素中的每一个的子体积的下一(更高)细节层次(l1)体素的一个或多个条目。对于在l0条目4205中标识为空白的任何l0条目,不提供l1条目。进一步地,如上文所介绍的,对于被识别(例如,通过“1”)为至少部分地包括几何结构的每个l0体素,可以提供相应的l1条目4210。因此,每个l1条目同样可以包括表示相应l0体素内的每个l1体素的二进制值。如在l0条目中那样,l1体素可以被识别为完全空白(例如,通过“0”)或至少部分地被几何结构占据(例如,通过“1”)。进一步地,对于被识别为被占据的每个l1体素,可以在体积数据结构4200中提供相应的l2条目,以识别相应的l2体素(表示l1体素中的对应体素的子体积)是否被任何几何结构占据,以此类推,直到将体积细分为针对体积和几何结构测量的最高粒度体素(如在一个或多个ln条目4220中所定义的)。
在一些实施方式中,头部4225可以另外与体积数据结构4200一起提供以指示特定体积数据结构4200的各种潜在可变特性。作为示例,头部4225可以包括头部大小字段,以标识头部4225何时结束并且l0条目4205何时开始(因为l0条目可以与头部位4225邻接)。头部4225可以包括版本字段和模式字段,其可以向消耗逻辑标识出在体积数据结构中采用什么格式(例如,以支持体积数据结构格式的增强和演进)。深度字段可以指示在由体积数据结构建模的体积内定义的细节层次的数量,其中,所测得的一些体积具有比其他体积更多且更高粒度的细节层次(例如,基于用于测量体积的技术的精度、所测得体积的大小、体素的比例等)。在体积数据结构头部4225的一些实施方式中可以提供坐标参考系(crs)字段,例如,以标识如何将体积数据结构中表示的体积映射到更大的体积(例如,在视频游戏或虚拟世界、世界地图、国家、太阳系等内定义的虚拟体积)。由于体积数据结构描述的体积可以是真实的或虚拟的并且位于潜在任何更大的地理区域中,因此可以定义各种不同的坐标参考系并将其用于以不同的精度标识体积在更大的地理区域中适合的位置。进一步地,可以提供坐标字段(例如,坐标x和坐标y)以指示与由体积数据结构建模(根据crs字段中标识的crs)的体积的位置相对应的坐标值。例如,可以提供纬度和经度或其他坐标值。这些值可以用于标识体积数据结构应该响应于识别到设备处于与这些坐标相对应的环境内或进入所述环境而服务于消耗设备。进一步地,坐标字段的数量和类型可以取决于crs字段中标识的特定crs。可以提供附加字段(例如,最小x、最小y、最小z、最大x、最大y、最大z),以定义体积数据结构的边界框(例如,如根据坐标x和坐标y字段等中提供的crs坐标所测量的),并且更敏锐地标识由体积数据结构建模的体积。
头部可以包括除了在图42的示例中示出的明确展示的信息之外的附加信息。例如,基于模式字段(和/或版本字段)的值,可以定义附加(甚至自定义)字段。模式字段还可以标识在体积数据结构的条目中是采用1位每体素表示、还是采用2+位每体素表示。除其他示例之外,在多位每体素表示的情况下,模式值还可以标识为每个体素提供的附加信息的(多种)类型(例如,体素的颜色、体素内的几何结构的材料、体素内的几何结构的反射系数、几何结构的类别或标识等等)。在一些实例中,包括在体积数据结构的头部4225中的信息可以被确定为对于要使用体积数据结构4200的应用是多余的,使得头部可以被消耗系统丢弃。例如,除其他示例实施方式之外,在受特定体积约束的应用中,定义特定体积在更大的真实或虚拟中适合的位置的信息可能是不相关的,并且头部(或这些字段)可以在被存储在本地存储器中或使用消耗系统来处理之前从体积数据结构中剥离。
转到图43的示例,示出了表示4300,其展示了特定体积4305(例如,立方体或矩形棱柱体积)到与较大环境(例如,由数字地图4315表示)相对应的空间4310的映射。在一些实施方式中,可以结合体积数据结构4305本身的生成来开发将所述体积数据结构映射到地图4315的信息。例如,可以对某个区域进行扫描以生成深度图、立体图像数据或其他信息,根据这些信息可以生成体积数据结构(例如,使用slam流水线)。在扫描期间,生成相应的位置信息并将其与图像数据和所得的体积数据结构相关联。除其他示例实施方式之外,在一个示例中,可以对地理区域的一部分(例如,城市的一部分)执行lidar扫描,并且可以由所得的lidar数据生成体积数据结构。将体积数据结构中的几何描述映射到物理环境可以实现许多特定于位置的应用。例如,混合和增强现实应用可能涉及将虚拟几何结构遮挡在物理几何结构之上或代替物理几何结构,这可以使用将虚拟几何结构表示为映射到物理几何结构(这可以由单独的体积数据结构来表示)的体积数据结构来实现或增强。全局位置、碰撞避免和路径查找应用也可以利用体积数据结构(或者甚至是由体积数据结构表示的体积内的各个体素)到位置信息的映射,诸如图43的示例所示。
在一个示例中,通过将地理信息系统(gis)表示的坐标映射到由体积数据结构表示的体积的坐标(例如,如在体积数据结构的头部中所指定的),可以将地理位置信息映射到体积数据结构信息或与体积数据结构信息相关联。在一些情况下,可以缩放gis表示或体积数据结构表示中的任一个或两者以将体积“拟合”到(潜在2d)gis表示。当gis信息和体积对齐时,可以利用与包括在gis表示中的信息相对应的元数据来增强相应的体积数据结构。这可以通过沿y轴进行投影以产生3dvola体积的2d平面布局地图来完成,所述平面布局地图可以与类似的2dgis地图对齐。产生2dvola投影可以涉及确定地平面处于3d地图中的何处,并且然后对3d体积进行适当分切,使得建筑物等的轮廓清晰可见。一旦vola和gis2d地图已经对齐(例如,通过配准),就可以将gis数据传播到3dvola体积中的叠加体素以对其进行标记。例如,gis表示可以标识未在体积数据结构中标识的街道、建筑物、树木、公园、水体、人行道、山和其他特征。实际上,在一些实施方式中,体积数据结构可以以纯二进制方式表示环境内的几何结构——其在那里,或者不在。通过将体积映射到更鲁棒的相应地理信息,体积数据结构中描述的体素可以与相应地理信息相关联,使得可以根据地理信息来定义表示特定几何结构的体素。例如,与gis表示中标识街道的一部分对齐的体素可以被系统确定为街道几何结构,同样地,与建筑物、树木、水等的gis表示对齐的体素同样可以与这些特征相关联。通过将体积数据结构与这种gis信息(或其他信息)结合或补充,可以针对各个体素定义元特性,诸如与由体素表示的特定材料或对象相关联的颜色(例如,对于与水对齐的体素为蓝色、对于与树木对齐的体素为绿色等)、与材料相关联的反射系数(例如,与建筑物对齐的体素可以被自动分配与混凝土、玻璃、金属和/或建筑物构造中使用的其他材料相关联的反射系数),等等。以这种方式,来自其他来源的信息(例如,gis信息)可以快速地与体积数据结构中描述的几何结构相关联,以丰富由体积数据结构提供的信息(并且无需手动定义单个体素几何结构的特性以建立更丰富的3d环境表示)。
如上文所介绍的,可以使用以多个上升细节层次定义体素的体积数据结构来辅助更高效地处理体积信息,以适当地渲染或以其他方式使用体积数据结构中描述的体积。例如,在体积内用于识别几何结构和反射点、潜在碰撞等的光线投射可以有效地利用示例体积数据结构以任何一个所需细节层次更高效地执行光线投射。图44包括3d空间在二维中的视图的表示4400(例如,3d空间的顶视图或侧视图)。在本示例中,将体积4405细分为处于第一最低细节层次的64个单独体素(例如,4415)的4×4×4矩阵。可以提供相应的体积数据结构来描述如被细分为多个细节层次体素的体积。在图44所示的表示(例如,4405、4415、4420)中,阴影框(例如,4415)指示相应的体素至少部分地被几何结构占据,而空白框指示相应的体素完全没有几何结构。
图44的示例中展示了光线4410穿过由体积数据结构表示的体积的投射。在本示例中,可以首先以最低细节层次处理光线投射。可以识别光线4410所穿过的处于第一细节层次的体素的子集。通过识别这个体素子集,可以忽略所有其他体素。然后可以评估由光线4410遍历的体素集合(例如,通过识别体积数据结构的l0条目内的相应二进制值)以识别这些较低级别体素中的任何体素是否至少部分地被几何结构占据。如果所有体素子集都是空白的(例如,如由体积数据结构中的相应零所表示的),则可以在无需任何进一步处理的情况下立即得出结论:光线4410在体积4405内未遇到任何几何结构。然而,在本示例中,体素子集4415中的至少一个被识别为拥有几何结构(处于某个细节层次)。为了判定光线4410是否与这个几何结构碰撞或相交,系统可以进一步处理体积数据结构以提升在这个基于树的数据结构中定义的细节层次。
例如,如图44中进一步展示的,通过识别出l0体素4415既与光线4410相交又包含某个几何结构,系统可以识别出体积数据结构内表示体素4415的64(43)个子体积的l1条目。l1条目可以针对每个l1体素(例如,4420)指示l1体素是否包括几何结构。因此,系统可以判定l1体素的哪个子集(细分l0体素4415)与光线4415相交,并进一步判定这个子集中的l1体素中的任何一个体素是否被某个几何结构占据。在本示例中,仅l1体素4420被识别为具有某个几何结构并且与光线4410相交。因此,系统可以识别出与l1体素4420的细分相对应的l2条目,并再次确定与光线4410相交的l2体素的子集。在本示例中,与光线4410相交的所有l2体素都未被识别为被几何结构占据。因此,对于体素4415的相交,可以得出结论:光线4410实际上不与几何结构相交,并且系统可以省略对任何更高细节层次体素4415的分析。对于与光线4410相交的任何其他体素,系统同样可以逐步地提升在体积数据结构的条目中定义的细节层次,以判定光线是否与处于特定(高)细节层次的几何结构相交,同时省略对不与光线相交、或不包括几何结构的任何更高级别体素的分析。以这种方式,可以高效地评估体现在示例体积数据结构中的体积的基于树的表示,以判定光线是否与处于期望细节层次(例如,由操作的深度级别指定)的几何结构相遇/相交,从而大大减少了用于做出这样的判定的处理资源、时间、上下文切换以及功率。
图45是简化框图4500,展示了根据本文所讨论的至少一些实施方式的用于消耗体积数据结构并执行光线投射分析和其他处理的示例计算系统。在本示例中,处理器设备4505可以设置有n个处理器核(例如,4506至4511),这些处理器核能够在各种应用中利用体积数据结构来执行操作的并行处理。核4510a至4510f可以与车载多端口共享存储器4515接口连接并共享所述车载多端口共享存储器。例如,每个核4510a至4510f可以具有到车载存储器4515的对应的读写端口。另外,可以另外提供读取存取存储器(例如,ddr存储器4520)来存储数据以供核4510a至4510f中的任何一个进行访问和处理。
在一些实施方式中,与渲染、光线投射、碰撞避免、路径查找或涉及由相应的体积数据结构建模的体积的其他应用有关的工作可以在各个核4510a至4510f之间进行划分,以促进并行计算效率。例如,对于要从特定点投射到特定体积中的多条光线,可以由对应的核4510a至4510f使用相应体积的体积数据结构来处置每个光线投射操作。进一步地,如本示例所示,因为将要最频繁地使用较低级别的体积数据结构条目(例如,因为在到达较高级别之前要遍历树的较低级别,并且某个应用可能不需要较高细节层次的分析等),可以有利的是,将体积数据结构(或vola)4525a的一部分加载到共享车载存储器4505中以便由核4510a至4510f快速访问,并将体积数据结构(例如,4525b)中与较高细节层次相对应的条目存储在ddr4520中,以及其他示例实施方式。在本示例中,由处理器设备4505从特定体积数据结构渲染(例如,使用光线投射)图像(例如,4530)。除其他示例输出和实施方式之外,当图像的部分或图块由并行核4510a至4510f导出时,经渲染图像4530可以被组装(例如,在车载存储器4515中)并且被加载到缓冲器中以递送到输入/输出接口4535(采用可能是各种不同技术(例如,照明、高清多媒体接口(hdmi)、通用串行总线(usb)等)中的任何一种),以供在一个或多个显示设备上呈现。
转到图46,示出了简化框图4600,其展示了使用处理器设备(诸如在图45的示例中示出和讨论的)利用多个向量处理核4610来将示例(例如,基于sst的)体积数据结构4605中描述的几何结构的视图渲染成2d帧4640的示例。例如,可以通过基于相对于在一个或多个体积数据结构中表示的(多个)体积内表示的几何结构定位的参考点(哪种方式移动、转动或以其他方式随场景进展变化)渲染帧而由一个或多个体积数据结构生成帧流(例如,4640)。在一些实施方式中,对体积数据结构4605的渲染(例如,通过在由体积数据结构4605描述的体积内进行光线投射)可以被划分为工作块或图块(例如,4615),所述工作块或图块可以被定义并且置于队列4620中,用于分配给设备中提供的各种处理核(例如,4610)或由其拉出。例如,可以逐行渲染所得的帧(例如,4640),其中,由对应的核来处置对各个行或部分行的渲染。除其他示例实施方式之外,作为另一示例,对将要投射到所描述体积中的一组光线中的各条光线的投射可以与队列4620中的要由多个并行处理核4610并行处置的定义作业(例如,4615)相对应。
在一些实施方式中,可以以有序的方式将图块4615分配给核。在其他情况下,核可以一旦完成前一作业就立即拉出队列中的下一图块(例如,结合前一图块进行渲染)。以这种方式,除其他示例优点之外,可以避免这样的瓶颈:其中为一个或多个核分配具有比由其他核处置的其他图块更重的处理要求的图块。还可以在处理硬件中实施附加优化,以利用紧凑的多级别格式的示例体积数据结构。例如,可以基于体积数据结构中的信息利用一个或多个核来剔除操作。例如,在光线投射应用中,体积数据结构的子集或这些结构内的条目可以被识别为与一条或多条光线相交,从而允许将与来自工作的其余体积和细节层次有关的操作分配给核(例如,4610)。例如,可以读取体积数据结构4605的l0条目,以基于l0体素内不存在与给定帧相对应的几何结构来识别可以被跳过或快速跟踪的操作。可替代地,除其他操作之外,体素中存在几何结构还可以允许基于识别出(例如,在渲染应用中)表示帧的前景的体素的几何结构阻挡此几何结构后面的其他几何结构来剔除作业,可以执行这样的操作以准备要在队列4620中提供以用于由处理核执行的操作的一组优化的作业或图块(例如,4615)。
继续图46的示例,当在帧4640的渲染中完成作业时,可以将这些段(例如,4625)写入存储器4630以组装所渲染帧。在一些实施方式中,除其他示例特征、步骤和实施方式之外,在处理帧时,可以在将所渲染帧4640递送到i/o端口以在设备上显示之前执行附加处理,诸如放大(例如,4635)。
如上文所介绍的,可以提供硬件和/或软件逻辑以利用体积数据的结构来快速缩小操作(诸如,在由示例体积数据结构表示的体积中的光线投射)的范围。例如,转到图47的示例,示出了简化框图4700,其展示了用于识别光线4710与示例体积数据结构4705中描述的几何结构的相交的硬件逻辑的示例实施方式。例如,在体积数据结构(或vola)4705被实施为一组64位整数(包括用于识别相应体素内是否存在几何结构的二进制值)的示例中,可以开发相应的一组64位整数条目用于识别光线4710在被投射到由vola4705表示的体积中时所穿过的体素。在图47的示例中,提供了可以从中识别体积数据结构的查找表4715,当在体积内投射时,所述查找表将光线描述为占据沿着光线轨迹的一组体素的几何结构。例如,给定光线进入体积的坐标(由最小x、y、z坐标4720指定)和光线从体积离开的坐标(由最大x、y、z坐标4725指定),可以从查找表4715识别相应的体积数据结构。因此,可以在体积4730内以最低细节层次生成表示光线4710的几何结构布置的64位整数作为来自查找表4715的输出并且将其提供为到与逻辑4735的输入。还可以在与逻辑4735处提供来自体积数据结构4705的相应的64位整数条目(以最低细节层次描述体积4730内的几何结构),以判定体积4730内的哪些最低细节层次(l0)体素被光线4710以及体积4715的几何结构两者占据。在由与门4735返回的值为“1”的l0体素中,l0体素可以被识别为确定光线“命中(hit)”体积内的几何结构或与其相交的体素。可以由与门逻辑4735生成位图以作为选择器值馈送到多路复用器电路系统4740,以从体积数据结构4750中选择与被指示为“命中”的l0体素的子体积相对应的l1条目。然后对这下一细节层次(4745)重复分析,但仅限于这些l1体素(表示识别到命中(在4735处)的l0子体积)。例如,下一细节层次可以涉及确定光线与这些所选l0体素中的相应体素相交的坐标,以确定光线相交的底层l1体素的子集(使用同一或另一查找表4715)。可以将这个体素子集与从体积数据结构4705中选择的相应l1条目(使用同一个或并行的与逻辑(例如,4735))进行比较,以判定光线是否与体积数据结构4705中为这个l1体素子集指定的任何l1几何结构相交。可以重复这个过程,直到达到最高(或目标)细节层次并且识别到光线4710与体素几何结构之间的任何“命中”。针对目标或最高细节层次的比较而识别到的命中(或“1”)可以被解释为识别光线4710与体积4730的几何结构的相交或碰撞的坐标。通过对评估不包括光线或几何结构的体素(例如,处于更高细节层次)的这种层级提前终止,如在本示例中讨论的,使用体积数据结构可以比使用传统光线投射过程明显更快地完成光线投射。
转到图48,示出了简化框图4800,其展示了用于在光线投射应用中检测光线与几何结构的相交的硬件逻辑的另一实施方式的一部分。在图47的示例中,提供了查找表以产生多个细节层次的体积数据条目,以对应于可能与体积相交的任何一条可能的光线(例如,基于光线进入和离开体积的对应进入点和离开点)。这种方法的一个缺点是查找表的大小,其可能约束处理速度。因此,在替代实施方式中,不是为体积中的所有体素提供单个查找表,而是可以将总体积4805在逻辑上细分(例如,4810)为更小的子体积(例如,4815),并且可以为每个子体积定义单独的、相应更小的查找表(例如,4820、4825、4830),以加速总体积4805内的光线投射命中的有关查找和计算。例如,可以将体积4805划分为八个子体积4815。由于光线可以遍历这些八叉树子体积中的至多三个,所以可以首先识别这些八叉树子体积,并且可以识别光线到这些子体积中的对应进入点(例如,4835a至4835c)和离开点(例如,4840a至4840c)并且将其提供作为这些子体积的对应查找表(例如,4820、4825、4830)的输入。每个查找表(例如,4820、4825、4830)可以生成将被提供作为对示例电路4850中的与门4845、4850、4855的输入的64位整数,以判定穿过这些子体积的对应光线段是否与在体积数据结构4860中描述的l0体素中识别的几何结构相交。逻辑门(例如,4865、4870、4875)的网络导出指示哪些l0体素具有潜在的几何结构-光线相交的结果4880。基于这些结果,如图47的示例中那样,可以对逐步更高的细节层次进行类似的评估,直到达到目标细节层次以识别接触并投射穿过体积数据结构4860中表示的地理区域的光线的相交或“命中”。
图49是简化框图4900,展示了光线穿过诸如使用根据上述一些示例中描述的原理定义的体积数据结构来描述的被细分为体素的体积投射的原理。可以利用这些原理来提供替代硬件实施方式,其被配置成根据体积数据结构来检测投射到体积中的任何给定光线是否以及在何处与体积4905内的几何结构相交或碰撞。例如,可以提供电路系统来计算处于每个细节层次的哪些体素与特定光线相交。例如,根据光线在{x,y,z}中进入和离开体积的坐标(例如,使用aabb光线盒相交来确定),可以在其对应的x、y和z分量中确定光线的斜率。使用斜率,并且已知处于每个细节层次的体积内所应用的比例,可以识别每个相交的体素(例如,通过它们在体积内的对应坐标)。然后可以测试这些体素中的每一个以查看是否存在相应的体素几何结构,从而表示光线与几何结构的相交(例如,对在示例体积数据结构中的条目的无符号整数位中找到的位使用逻辑与,如本文所讨论的)。
例如,如图49所展示的,实施方式可以将体积细分为4×4×4l0体素,其中,每个上升的细节层次(例如,4910、4915、4920)将下一较低级别的体素细分为4×4×4子体积。这些子体积可以以单个64位整数条目表示,其中,(例如,l0)条目中的一表示在层级结构4910的下一细节层次(例如,l1)中存在几何结构(编码为64位无符号整数)的位置。进一步地,l14910中的任何64位整数中的“1”位可以指示在下一细节层次(l2)4915处存在几何结构,以此类推,使得结果是仅描述包含表面几何结构的那些体素元素立方体的整个可跟踪体积。因此,使用体积数据结构实施的所得体积图高度稀疏且具有层级结构,以允许仅对可能产生相交的那些子体积进行快速地光线跟踪(例如,其中,不对空白空间进行光线跟踪)。虽然在本公开中讨论的这个和其他示例中提供了这种细分方式,但是应当理解,在不脱离本文所公开的原理的情况下,潜在的任何其他子体积划分(例如,2×2×2、16×16×16、4×4×8、4×5×2等)可以是可允许的并且可以采用非立方体体素。
在采用4×4×4划分的实施方式中,诸如图49的示例中所展示的,可以通过累加x、y和z上的比例斜率(例如,4930、4935、4940、4945)跨x、y和z方向中的每一个上的所有四个体素来对投影到体积(例如,4905)中的光线4925进行插值。判定光线是否与体积内的几何结构相交可以通过首先评估最低细节层次并且对识别到几何结构的那些体素上连续“放大”来开始。这可以允许在不存在与体积中的几何结构的相互作用(或相交、或命中)的情况下,在较低细节层次(即,比目标细节层次)上终止对至少一些光线的跟踪,从而节省时间、功率和存储器带宽。同样被认为是分为多达四个光线段,每个段与光线在体积中穿过的体素相对应。
使用在体积的三个维度(即,x、y和z斜率)中的每个维度上计算的光线斜率(例如,4950),可以执行插值以确定光线向下到目标深度或细节层次的相交。所述深度可以是针对(例如,相应的体积数据结构中的)体积定义的最高细节层次,或者可以简单地是足以针对给定应用确定的细节层次中的指定的一个细节层次。在图49的特定示例中,定义深度为四,意味着定义了四个细节层次(例如,l0至l3(4905、4910、4915、4920))并且光线跟踪应该在第四细节层次l34920处结束。在l3处,在本示例中,总体积被细分成总共2563个子体积。这些l3子体积可以表示体积内的体积几何结构的基本单位。因此,如4955处所示,可以根据比例4960来调整除l3之外的每个细节层次的体素(以及根据这些体素定义的斜率)。
在一个示例中,可以根据下式计算给定光线(例如,4925)的斜率:
斜率=(最大(x,y,z)-最小t(x,y,z))/dim
其中,最大(x,y,z)是光线的离开点,最小(x,y,z)是光线的进入点,并且dim是体积的3d尺寸(例如,在深度为l3的情况下为256)。斜率可以可替代地以分量化形式表示为:
斜率_x=((最大_x-最小_x)/4)*比例;
斜率_y=((最大_y-最小_y)/4)*比例;
斜率_z=((最大_z-最小_z)/4)*比例;
其中,比例是与要评估的光线相交所处的细节层次相对应的因子(其中,比例在每个连续更高的细节层次上呈指数减小(如4955处所展示的))。由于在本示例中通过除以每个方向上的体素数量(例如,x方向、y方向和z方向中的每个方向上4个体素)来确定斜率,因此应当理解,将相应地计算(例如,通过除以2或16而不是4)采用不同体素细分(例如,2×2×2或16×16×16等)的其他实施方式。根据所计算的斜率,可以利用以下逻辑来确定光线穿过的每个体素的x、y、z坐标(就从体积的参考角测量的体素而言),诸如下面的伪代码中所展示的:
其中,“acc.(累加.)”是累加函数,“int(整数)”是整数舍入函数,“vola_lookup(vola_查找)”是查找表的(例如,64位整数)输出,所述输出用于与体积数据结构的条目(例如,64位)进行比较,并且“i”是与任何细节层次的光线的潜在四个段相对应的增量变量,并且“lookup(查找)”是查找函数,用于返回将(x,y,z)处的体素映射到采用定义的体积数据结构格式(如在描述特定体积内的几何结构的体积数据结构中所采用的)的位的位掩码。
转到图50,示出了简化框图5000,其展示了与渲染来自一个或多个体积数据结构的图形图像相关联的光线投射。例如,可以渲染图形图像以在特定显示器5005上呈现,所述显示器由像素阵列组成。在一种实施方式中,为了渲染由所述一个或多个体积数据结构表示的3d空间,可以将光线从显示器上的每个像素投射到3d空间的(多个)体积中,以识别将从显示屏5005的有利位置呈现的各种几何结构。例如,可以将多条光线(例如,5010)从各种像素(例如,5015)(或显示屏的5005表面区域的其他细分)投射到包含几何结构的体积(例如,5020)中。诸如以上所讨论的,可以使用相应的体积数据结构来描述体积5020。可以确定光线5010进入和离开体积5020的进入点和离开点,并且可以根据此信息来处理体积数据结构以判定光线5010是否(并且在何处)与体积5020中的几何结构相交。在此上下文中,可以使用光线的相交(与从像素5015投射到体积5020中的其他光线的结果一起)来确定在屏幕中的像素处显示的内容。可以对显示器中的全部像素执行类似的光线投射操作,以确定对要在显示器5005上呈现的图像的渲染。
在一些实施方式中,用于{x,y,z}中的光线斜率的硬件插值逻辑(诸如图51a的示例中的简化框图5100a所展示的)可以将光线到由特定体积数据结构描述的体积中的x、y和z进入坐标(5105a至5105c)和离开(5110a至5110c)坐标作为输入。图51a中表示的电路系统可以在硬件中实施上面结合图49讨论的伪代码。例如,可以通过确定(例如,使用加法器5115a至5115c)最小与最大x、y和z坐标之间的差并将结果除以(例如,使用移位器电路5125a至5125c)与正在评估的当前细节层次相对应的比例值5120来确定光线的x、y和z斜率(例如,5130a至5130c)。然后,可以通过施加计数器值i并使用计数器5135来递增所述计数器值、并将计数器值i与每个分量斜率值5130a至5130c相乘(例如,使用乘法器电路系统5140a至5140c)来评估每个光线段(例如,如由体积/子体积中最多达四个体素的边界所划分的)。可以将这些乘积提供给累加器电路(例如,5145a至5145c)以根据斜率来向上移动段(例如,在每个时钟周期(5150)处)并生成要提供给多路复用器电路5155a至5155c的8位代码。基于对应的代码,多路复用器5155a至5155c可以各自基于循环(例如,其使00→01→10→11按顺序迭代)中的当前迭代i生成相应的体素地址值5160a至5160c。
在不脱离本公开的原理的情况下,一些系统实施方式可以结合替代电路系统和算法以针对体积数据结构执行光线投射。例如,尽管图51a的示例示出了当光线穿过体积或子体积时使用计数器(例如,5135)和循环以通过所述光线的这四个段进行插值,但是在其他实施方式中,可以再现(例如,四次)类似于图51a的示例中所展示的电路系统,以允许并行地而不是顺序地执行这些循环的插值(例如,其中,每个并联电路具有各自的使x、y、z斜率与0、1、2或3(而不是依赖于计数器值i)相乘的乘法器(例如,与乘法器5140a至5140c相对应))。这可以允许在单个周期(而不是四个)中执行四个并行插值,其中,对应的输出被提供给查找表以识别潜在的命中(类似于图52所示的电路系统和示例)。在这种实施方式中,可以执行插值,诸如以下伪代码所表示的:
//i=0,与这四个并联电路系统块中的第一个相对应;
acc0.x=min_x;(累加0.x=最小_x;)//+斜率_x*0;
acc0.y=min_y;(累加0.y=最小_y;)//+斜率_y*0;
acc0.x=min_z;(累加0.x=最小_z;)//+斜率_z*0;
x0=((int)acc0.x)>>scale;(x0=((整数)累加0.x)>>比例;)
y0=((int)acc0.y)>>scale;(y0=((整数)累加0.y)>>比例;)
z0=((int)acc0.z)>>scale;(z0=((整数)累加0.z)>>比例;)
vola_comp0=lookup(x0,y0,z0);(vola_计算0=查找(x0,y0,z0);)
//i=1,与这四个并联电路系统块中的第二个相对应;
acc1.x=min_x+slope_x;(累加1.x=最小_x+斜率_x;)//+斜率_x*1;
acc1.y=min_y+slope_y;(累加1.y=最小_y+斜率_y;)//+斜率_y*1;
acc1.x=min_z+slope_z;(累加1.x=最小_z+斜率_z;)//+斜率_z*1;
x1=((int)acc1.x)>>scale;(x1=((整数)累加1.x)>>比例;)
y1=((int)acc1.y)>>scale;(y1=((整数)累加1.y)>>比例;)
z1=((int)acc1.z)>>scale;(z1=((整数)累加1.z)>>比例;)
vola_comp1=lookup(x1,y1,z1);(vola_计算1=查找(x1,y1,z1);)
//i=2,与这四个并联电路系统块中的第三个相对应;
acc2.x=min_x+slope_x*2;(累加2.x=最小_x+斜率_x*2;)
acc2.y=min_y+slope_y*2;(累加2.y=最小_y+斜率_y*2;)
acc2.x=min_z+slope_z*2;(累加2.x=最小_z+斜率_z*2;)
x2=((int)acc2.x)>>scale;(x2=((整数)累加2.x)>>比例;)
y2=((int)acc2.y)>>scale;(y2=((整数)累加2.y)>>比例;)
z2=((int)acc2.z)>>scale;(z2=((整数)累加2.z)>>比例;)
vola_comp2=lookup(x2,y2,z2);(vola_计算2=查找(x2,y2,z2);)
//i=3,与这四个并联电路系统块中的第四个相对应;
acc3.x=min_x+slope_x*3;(累加3.x=最小_x+斜率_x*3;)
acc3.y=min_y+slope_y*3;(累加3.y=最小_y+斜率_y*3;)
acc3.x=min_z+slope_z*3;(累加3.x=最小_z+斜率_z*3;)
x3=((int)acc3.x)>>scale;(x3=((整数)累加3.x)>>比例;)
y3=((int)acc3.y)>>scale;(y3=((整数)累加3.y)>>比例;)
z3=((int)acc3.z)>>scale;(z3=((整数)累加3.z)>>比例;)
vola_comp3=lookup(x3,y3,z3);(vola_计算3=查找(x3,y3,z3);)
在另一实施方式中,如图51b至图51c的框图5100b至5100c中所展示的,可以使用类似于图51a的示例中所展示的电路系统通过应用逐次逼近技术来执行(并加速)插值。例如,可以执行逐次逼近以将周期减半(例如,与图51a的示例相比)。例如,可以对四元素体积的中点执行第一插值,以判定相交发生在这个中点之上还是之下。基于这个比较的结果,可以在第二周期中对上部或下部线段执行第二插值,以便确定确切的相交点,从而导致将要执行最大两个周期和两个插值,并提供潜在的早期退出机会(例如,在第一循环中不存在命中的情况下),从而导致在完成相应的光线投射过程速度方面的附加效率和增益。
转到图52的简化框图5200,可以提供附加电路系统,其可以接受由图51a的示例的电路系统生成的与特定光线相对应的这三个输出(例如,5160a至5160c)。值5160a至5160b可以被级联以形成6位地址5215,所述地址可以被提供给查找表电路5205。如表5210所示,每个可能的6位组合(由值5160a至5160c建立的)可以与特定细节层次的64个体素(以及相应的条目位)之一相对应。这个相对较小的查找表5205可以用于快速返回64位位掩码5220,所述位掩码与被识别(例如,使用图51的示例电路系统)为与特定光线相交(或包含其一段)的体素相对应。可以将所得的位掩码提供给与逻辑5230,以便与体积数据结构5225中描述同光线相交的体积的条目进行比较。如果与门5230的结果是除了64个零之外的任何值,则或逻辑5235将生成“1”(在5240处)以指示体素包含几何结构和光线段。否则返回“0”以指示未命中。在未命中的情况下,可以撤销针对与体素相对应的任何其余细节层次的所有其他操作。以这种方式,对于每次未命中,可以快速缩小体积内要评估的体素的范围。
如在上面讨论的其他示例中,当利用图51a至图52所示的示例电路系统时,可以执行迭代过程以从最低细节层次开始并且在树上向上(当识到别命中时)向更高细节层次评估体素,直到发现未命中或在叶节点(即,最高细节层次体素)处确立命中为止。例如,在电路的第一次迭代中,进入坐标和离开坐标可以是总体积的坐标,并且体积数据结构条目(被提供给与门5230)可以是体积数据结构的l0条目。如在其他示例中,响应于识别出l0体素中的一个或多个包含光线段和几何结构,操作可以循环回到评估l1的进入坐标和离开坐标,其中体积数据结构5225的相应l1条目(表示l0体素中找到“命中”的子体积)被提供作为(例如,在用于评估l0体素的电路系统(例如,图51a至52)的同一或另一个等效块中的)与逻辑5230的输入,以此类推,直到在最高(或另一目标)细节层次上检查了几何结构与光线相交。这种逻辑可以一次性或在设备内的多个块中实施。例如,除其他示例之外,可以提供多个并行块(例如,类似于图51a至52的示例),例如以便于对多个不同光线(例如,与同体积数据结构(或多个不同的体积数据结构)中描述的几何结构相关联的音频或视频渲染相关联)的并行评估。
如上文所讨论,可执行光线投射操作,这些光线投射操作使用描述体积内的几何结构的体积数据结构来评估针对光线反射或命中的体积。转到图53,示出简化的框图5300,该简化的框图5300展示了用于确定与各几何结构的光线相交以开发混响模型和滤波器(例如,5305)的系统(例如,并入了如上文所讨论的逻辑),通过该混响模型和滤波器可增强音频以反映如在一个或多个相应的体积数据结构(例如,5310)中所描述的几何结构。例如,可提供音频5315例如作为所记录的音频(例如,来自储存库系统5320),并且可通过有限脉冲响应(fir)滤波器5305处理音频5315以应用反映例如与先前存在于所记录的音频中的不同的几何结构(和/或反射系数)的混响模型。可诸如如上文所讨论,通过对在体积数据结构5310内建模的几何结构执行的光线投射操作来生成fir滤波器5305。例如,即时(jit)处理块5325可提供有用于以下操作的逻辑(诸如,如上文所讨论):(使用体积数据结构5310)在所建模的体积内执行光线跟踪;以及生成(或修改现有的)fir滤波器(例如,5305)以应用与所建模的几何结构相对应的几何特征和反射系数(例如,5330)两者。可使用该滤波器5305处理音频5315以生成音频输出5340。可通过(例如,在5338处)将音频与麦克风5336或其他音频混合来补充该音频。在一些情况下,还可针对(例如,通过使用体积数据结构5310而执行的光线跟踪操作而生成的)相应的fir滤波器来处理此类补充音频,以及其他示例实施方式。
如所讨论,体积数据结构5310可与元数据相关联或可用元数据来填充,该元数据用于指定在体积数据结构5310中描述的几何结构的特性。例如,体积数据结构5310的条目(例如,5335)不仅可并入用于指示几何结构是否存在于(处于特定细节层次的)相应体素内的二进制值(例如,5344),而且可通过附加数据5346提供针对每个体素表示的2+位以标识在相应条目中被建模的几何结构的各种特性。例如,在音频渲染应用的情况下,可在体积数据结构5310中定义反射系数以与实际几何结构或在体积数据结构中被建模的虚拟几何结构相对应。例如,可在每个条目中提供64位以标识64个相应的体素是否包括几何结构。此外,取决于描述符数据5346的实时方式的64位(或更多(例如,128位、256位等))可与几何结构标识数据5344的64位相关联地提供,以指定数据5344中描述的体素的特性。在一个示例中,描述符数据5346可指定诸如所表示的几何结构的颜色、材料、类型或反射系数之类的特性。在一些情况下,(例如,在扫描或以其他方式定义了体积数据结构5310中被建模的几何结构之后)可手动对描述数据中的信息进行编码。在其他示例中(诸如,如例如与图43相关联地所讨论),系统逻辑可标识所建模的几何结构与来自其他源(例如,地图)的几何信息之间的相互关系,并且该外部信息可归因于表示体积数据结构5310内的几何结构的相应体素。
作为另一示例,并且如图53中所展示,可为各种对象和结构定义各种模型,并且可由一个或多个储存库系统5350通过一个或多个网络5352来维护并服务这些模型。模型不仅可定义各种对象(例如,家具、地标、运载工具、建筑物等)的几何结构,而且还可定义这些对象的特性,包括它们的颜色、材料、(多个)反射系数(例如,对于对象的不同部分可能具有不同系数),以及其他示例特性。在一个实施例中,可利用卷积神经网络5355或其他机器学习逻辑来获取所有体积数据结构或体积数据结构的部分并执行推断以标识体积数据结构内的各种几何结构可能是由储存库5350的模型中的一个模型建模的对象的实例。在此类情况下,与所标识的对象相对应的体素可归因于在用于该对象的模型中所定义的相应的特性。在一些实施方式中,可在特性数据5346的相应字段中自动地对这些特性进行编码,使得可与处理各种应用中的体积数据结构相关联地标识反射系数(或其他特性)(诸如,构建fir滤波器5305,如在图53的示例中所示,以及其他示例)。
继续图53的示例,在一些实施方式中,可在一些系统中进一步增强(诸如,根据体积数据结构5310中所描述的几何结构而增强的)音频,以对各个用户(甚至同一空间汇总的多个不同用户)定制音频。例如,计算机视觉系统或其他系统可提供有传感器(例如,5360a-b),诸如,图像传感器和/或音频传感器。可将由传感器5360a-b生成的图像数据提供给例如立体成像流水线5362,该立体成像流水线5362配置成用于生成深度图,可(例如,由slam流水线5465)处理该深度图以生成体积数据结构(例如,5310),该体积数据结构对使用传感器5360a-b测得的几何结构进行建模。在一些情况下,可使用相同或不同的传感器以识别空间(例如,由体积数据结构5310建模的空间)内的用户。例如,可(例如,使用cnn5370)处理由传感器5360a-b捕获的图像数据以执行面部识别并确定特定用户在声音(例如,音频输出5340)将被呈现到的空间内。类似地,可(例如,使用cnn5375)附加地或替代地评估由传感器5360a-b捕获的音频数据以检测环境内的特定用户。特定用户的识别可允许用户的配置偏好被标识(例如,被存储在储存库5380中),并且(例如,由音频配置管理器5385)应用于一个或多个音频呈现(例如,通过混合器5338),以及其他示例特征和实施方式。
转到图54,示出简化的框图5400,该简化的框图展示了系统,该系统可支持(例如,通过相应的扬声器)从通道5410中的同一音频生成多个不同的音频呈现5405a-c。如上文所讨论,jit模块(例如,5415a-b)可(例如,通过多路复用器5418)选择性地生成或修改被应用于n个音频输出流水线中的每个音频输出流水线处的(潜在不同的)fir滤波器5420a-c。类似地,可提供预均衡器5425a-c(馈送有潜在不同的预均衡配置5430a-c)。可根据特定用户的检测来使用并配置这些单独的流水线组件,使得用户的偏好配置被应用于通道中的一个通道。可在同一环境中并发地识别其他用户,并且可配置相应的通道以便也将音频调谐到这些用户的偏好(例如,从流5410中的同一音频)。例如,附加于对fir滤波器5420a-c和预均衡器5425a-c进行调谐,音频流水线还可包括混合器(例如,5435a-c),该混合器用于选择性地添加(例如,来自麦克风5440的)附加音频,(例如,使用均衡器5450a-c)将后均衡参数5445a-c应用于被混合的音频,从而(使用增益模块5460a-c)应用特定的增益配置5455a-c,以及其他用户专用配置。
图55是在其中可提供一个或多个音频源(例如,5505、5510)的体积的表示5500,这一个或多个音频源可被建模以(例如,从对该体积进行建模的体积数据结构)生成相应的fir滤波器。还可从深度图或已(例如,使用神经网络)将一些后处理应用于其以填充深度图中的缺失信息的深度图直接计算fir滤波器,以及其他示例实施方式。在一些实施方式中,直接从深度图计算可以是有利的,因为可避免完整的slam重构,这对于在其中具有捕获体积的任务的图像传感器是静止的(例如,诸如可设于立体声系统上(例如,如图56中所示))实施方式可以是特别有用的,因为slam算法可在至少一些相机运动上中继以计算3d重构。
继续图55的示例,可基于音频源5505、5510的(多个)位置并基于观察者-收听者5515的有利位置来执行光线投射。可(例如,使用相应的体积数据结构)在体积中跟踪各种光线。体积数据结构的使用可使得能够更高效地处理光线跟踪操作,以确定由声音源(例如,5505、5510)生成的音频的反射并生成相应的fir滤波器。为了进一步优化混响模型和滤波器的生成,可评估体积内的光线投射以标识投射相同距离(例如,距离d)并从具有相同的反射系数的相同或不同的物体(例如,墙5530)反射的光线的组(例如,5520、5525)。在此类实例中,可在同一模型分量中使(具有相同的混响和延迟特性的)反射成组和求和,而不是独立地对两个反射建模。此类成组可进一步简化光线跟踪操作和(例如,使用jit音频渲染处理器进行的)相应滤波器的生成,以及其他示例优势。作为另一增强,二阶反射可被确定为对复合混响滤波器的贡献微不足道,并且可从被执行以生成相应的fir滤波器的操作省略,以及其他示例实施方式。
图56展示了简化的框图5600,该简化的框图示出了示例音频系统5605,该示例音频系统5605可应用本文中讨论的特征和逻辑中的一者或多者。在该示例中,音频系统5605可包括多个扬声器子系统(例如,5610、5615、5620)。系统5605可包括用于自动地调整扬声器子系统5610、5615、5620中的每个扬声器子系统的定位以将来自扬声器的音频输出引导到环境内的特定用户的功能。该音频可根据相应用户的各自偏好来配置。例如,音频系统5605可包括视觉子系统或可与视觉子系统通信,该视觉子系统包括相机或其他图像传感器(例如,5625、5630),该相机或其他图像传感器能够捕获环境内的图像数据,并使用图像数据来执行面部识别以检测环境内特定用户的存在。此类图像数据可用作对控制器逻辑的输入,该控制器逻辑配置成用于自动地操纵扬声器子系统5610、5615、5620的方向性以便使子系统5610、5615、5620中的一个子系统指向所标识的用户中的一个用户。
继续图56的示例,在识别了环境内的特定用户并将对应的扬声器子系统分配给(并且潜在地将对应的扬声器子系统引导向)该用户后,可为该用户标识用户专用的配置偏好(例如,本地存储的或在系统5605远程存储的(例如,存储在基于云的储存库中)),并且可(例如,由声音流水线模块5635、5640、5645)应用这些用户专用的配置偏好以为分配给并针对(多个)相应用户的扬声器子系统中的每个扬声器子系统生成输入音频的定制渲染。诸如上文所介绍的定制配置可包括诸如所应用的fir滤波器、均衡化和增益配置之类的示例,以及其他可调谐特性。在一些实施方式中,可提供超低音音箱子系统5650和超低音音箱扬声器5655,但是它们可由可能存在于环境内的各个用户共享(即,不是定制的)。
图57是简化的框图5700,该简化的框图5700示出了诸如头戴式耳机系统之类的个人音频系统的实时方式。在一个示例中,可结合虚拟现实或增强现实系统来提供头戴式耳机系统(例如,具有相应的显示透镜的头戴式耳机等)。在该特定示例中,头戴式耳机系统可包括音频系统5705以及计算机视觉系统5715,该音频系统5705用于渲染音频以在头戴式耳机5710上呈现,该计算机视觉系统5715可辅助音频(潜在地还有图形)呈现的渲染以便通过头戴式耳机系统提供给用户。例如,计算机视觉系统5715可包括能够捕获环境内的3d图像数据的相机5720a-b(例如,立体相机或其他图像传感器)。在一些实施方式中,计算机视觉系统5715可从由相机5720a-b捕获的图像数据构建体积表示(诸如,如上文所讨论的体积数据结构)。在一些示例中,可将该模型提供给音频渲染系统5705,该音频渲染系统5705可使用该模型来增强、调谐或以其他方式影响由音频渲染系统5705生成的音频呈现。可类似地使用(例如,来自头戴式耳机系统本地或远程的定位系统5725)来影响呈现什么音频,并提供信息供在构建用于环境的更稳健的体积数据结构时使用,以及其他示例使用。在一些示例中,定位系统5725可包括全球定位系统、罗盘、加速度计或重定位功能。在重定位的情况下,相机5720a-b可用于捕获数据,通过该数据可推导出该头戴式耳机系统的位置,以及其他示例。在一些实施方式中,头戴式耳机系统可类似地包括用于捕获音频的麦克风5730,该音频可与(例如,预先记录的或生成的)其他音频混合并且甚至(例如,根据环境内提供的实际或虚拟几何结构的体积模型)被增强,以及其他示例使用和特征。
图58是简化的框图5800,该简化的框图展示了另一可配置、多用户音响系统5802,该可配置、多用户音响系统5802在至少一些方面与关联于图56示出和讨论的示例类似。例如,可提供独立的扬声器子系统5805、5810、5815,这些独立的扬声器子系统5805、5810、5815可(使用音频流水线块5820、5825、5830)被独立地配置,以便在对应的扬声器子系统5805、5810、5815中的每个扬声器子系统处生成用户定制的音频输出。进一步地,可(例如,从描述将在其中呈现音频的现实或虚拟环境的体积数据结构)开发fir和其他滤波器以增强由系统5802生成的音频。例如,可基于在收听环境内发现的几何结构和反射系数来调谐系统的音频输出(例如,如在相应的体积数据结构中所描述)。如在图56的示例中那样,还可提供共享的超低音音箱系统(例如,5835、5840)。
与图56的示例不同,音响系统可利用由外部计算机视觉系统生成的图像数据和/或体积描述数据,而不是在音响系统自身上提供计算机视觉系统。在一些实施方式中,计算机视觉系统可周期性地扫描将使用子系统5805、5810、5815(它们可通过有线或无线连接被连接至音频系统5802)在其中呈现音频的一个或多个环境,使得可生成经更新的体积数据结构,可使用音频系统5802来处理该经更新的体积数据结构以调谐或增强与在体积数据结构中描述的现实或虚拟几何结构一致的(多个)音频呈现。
在一个示例实施方式中,可通过机器人或无人机(例如,5850)(例如,通过由无线通信模块5845促进的无线网络连接)提供体积数据结构的至少一部分,该机器人或无人机提供有一个或多个图像传感器(例如,5855、5860)且潜在地还有附加的计算机视觉逻辑和功能。机器人(例如,真空吸尘器机器人或其他家用自主设备)可周期性地进入空间,并且可捕获图像数据,该图像数据可与(例如,当前由音频子系统使用的)现有的体积模型进行比较以判定该体积数据是否是最新的。如果判定了要更新体积模型,则机器人、音频子系统或另一系统的相应功能可利用新图像数据来生成新版本或修改版本的体积模型。以此方式,由各种音频、视频或其他系统依赖的体积数据结构可随着体积或体积内的几何结构的改变被检测到(例如,由存在的或进入体积的一个或多个计算机视觉系统检测到)而被连续地更新,以及其他示例实施方式和特征。
图59a-图59b是展示出涉及诸如本文中所讨论的体积数据结构的示例技术的流程图5900a-b。例如,在图59a中,可将光线投射到由体积数据结构表示的体积内。该光线可以是将结合将由体积数据结构表示的3d体积渲染为2d表示而被投射到体积中的许多光线中的一条光线。可标识5905光线的坐标,并且可(例如,从本地存储器、基于云的源或其他存储)获取5910体积数据结构。从这些坐标,可确定5915(由体积数据结构描述的)体素的、光线穿过其的子集。可查询5920体积数据结构以判定(例如,处于n=0的第一最低细节层次的)体素的该子集是否由也可由光线相交的几何结构占据。对于该子集中的在体积数据结构中被标识为空白的那些体素,可导出无命中结果5925。对于该子集中的具有被置位的相应的体积数据结构位的体素,可检查与这些体素相对应的更精细(即,更高)的细节层次。例如,可判定5930是否满足用于分析的目标深度(即,表示几何结构的分辨率的目标细节层次)。
在未达到目标细节层次的情况下,可递增5940层次,以便以下一最高细节层次评估体积数据结构内的表示。相应地,可标识5945体积数据结构内的描述与(如5920处所确定的)自己中的被占据的体素的子体积相对应的下一最高细节层次体素的条目。可标识5905光线与这些之后层次的体素的相交的坐标,并且可确定5915体素的、与光线相交的子集。再一次地,可查询体积数据结构中的相应条目以判定体素的该下一子集中的任何体素是否被几何结构占据(在5920处)。该过程可继续,直到达到5930目标深度,其中,考虑光线与这些被占据的体素相交的指示,被占据的体素被指示为命中(在5935处)。“命中”5935可表示光线在与被占据的体素相对应的坐标处与几何结构的相交(和反射)。
转到图59b的示例,可获取5950图像数据,该图像数据由各种传感器或扫描仪中的任一个生成。例如,可从图像数据导出深度图。图像数据被用于生成5955体积数据结构,以便以多个细节层次在特定体积的边界内表示图像数据中捕获的几何结构。对于特定体积的每个体素子体积,体积数据结构可标识该几何结构中的任何几何结构是否在体素的相应子体积内。在这个(以及潜在地本文中讨论的任何示例)中的体积数据结构可根据稀疏六四元树(sst)格式。在一些实施方式中,可用附加信息来补充对于几何结构是否存在于相应的子体积内的逐体素的二进制表示。例如,可确定5960体积数据结构中描述的几何结构与包括几何结构的各种属性的定义的(相同或类似的)几何结构的另一描述之间的关联。例如,通过确定5960与已知的或预定义的对象相关联的一个或多个体素,可将该对象的属性(例如,其颜色、重量、材料、密度、反射系数、标签等)归因于5965这些相应的体素。相应地,可在体积数据结构内对属性数据编码,以将这些属性的标识包括在体积数据结构中所包括的这些体素的描述中,以及其他示例特征和实施例。
虽然本文所描述和展示的一些系统和解决方案已经被描述为包含多个元件或与多个元件相关联,但是并非所有明确展示或描述的元件都可以用于本公开的每个替代实施方式中。另外,本文所描述的一个或多个元件可以位于系统外部,而在其他实例中,某些元件可以包括在其他描述的元件以及未在所展示实施方式中描述的其他元件的一个或多个内或作为其一部分。进一步地,某些元件可以与其他组件组合以及用于除本文所描述的那些目的之外的替代或附加目的。
进一步地,应当理解,以上呈现的示例是仅出于说明某些原理和特征的目的而提供的非限制性示例,并且不一定限制或约束本文所描述的概念的潜在实施例。例如,可以利用本文所描述的特征和组件的各种组合、包括通过本文所描述的组件的各种实施方式实现的组合来实现各种不同的实施例。根据本说明书的内容应该理解其他实施方式、特征和细节。
图60至图65是根据本文公开的实施例可以使用的示例性计算机架构的框图。实际上,本文所描述的系统的计算设备、处理器、以及其他逻辑和电路系统可以并入功能以及用于实施这种功能的支持软件和/或硬件电路系统的全部或一部分。进一步地,除了这里示出的示例之外,还可以使用本领域中已知的用于处理器和计算系统的其他计算机架构设计。通常,用于本文公开的实施例的合适的计算机架构可以包括但不限于图60至图65中展示的配置。
图60展示了通过到对应网关的链路耦合的对应物联网(iot)网络的示例域拓扑。物联网(iot)是一种概念,在物联网中,大量的计算设备彼此互连并且互连至互联网以便在非常低的水平下提供功能和数据获取。因此,如本文所使用的,iot设备可以包括半自主设备,其执行诸如感测或控制等功能,与其他iot设备和更宽的网络(诸如互联网)通信。
通常,iot设备在内存、大小或功能方面受到限制,从而允许针对与较少数量的较大型设备类似的成本来部署更大的数量。然而,iot设备可以是智能电话、膝上型计算机、平板计算机、pc、或其他更大型设备。进一步地,iot设备可以是虚拟设备,诸如智能电话或其他计算设备上的应用。iot设备可以包括iot网关,所述网关用于将iot设备耦合至其他iot设备和云应用,以用于数据存储、过程控制等。
iot设备的网络可以包括商业和家庭自动化设备,诸如配水系统、配电系统、流水线控制系统、工厂控制系统、灯开关、恒温器、锁、相机、警报器、运动传感器等。可以通过远程计算机、服务器和其他系统来访问iot设备,例如,以控制系统或访问数据。
互联网和类似网络的未来发展可能涉及到非常大量的iot设备。因此,在本文所讨论的技术的上下文中,针对此类未来组网的大量创新将解决对以下方面的需要:所有这些层不受阻碍地增长;发现并制造可访问连接资源;以及支持隐藏和划分连接资源的能力。可以使用任何数量的网络协议和通信标准,其中,每个协议和标准被设计用于解决特定目标。进一步地,协议是支持人类可访问服务的结构的一部分,所述服务无论位置、时间或空间如何都运行。所述创新包括服务交付和相关联的基础设施,诸如如硬件和软件;安全增强;以及基于在服务级别和服务交付协议中规定的服务质量(qos)条款提供服务。如将理解的,对iot设备和网络(诸如在图60和图61中介绍的那些)的使用在包括有线技术和无线技术的组合的异构连接网络中提出了大量的新挑战。
图60具体提供了域拓扑的简化附图,所述域拓扑可以用于包括iot设备6004的多个物联网(iot)网络,其中,iot网络6056、6058、6060、6062通过骨干链路6002耦合至对应的网关6054。例如,多个iot设备6004可以与网关6054进行通信,并且可以通过网关6054彼此通信。为了简化附图,并非每个iot设备6004或通信链路(例如,链路6016、6022、6028或6032)都被标记。骨干链路6002可以包括任何数量的有线或无线技术(包括光网络),并且可以是局域网(lan)、广域网(wan)或互联网的一部分。另外,这种通信链路促进iot设备6004和网关6054两者之间的光学信号路径,包括使用促进各设备互连的复用/解复用组件。
网络拓扑可以包括任何数量类型的iot网络,诸如使用蓝牙低功耗(ble)链路6022与网络6056一起提供的网状网络。可能存在的其他类型的iot网络包括:用于通过ieee802.11
这些iot网络中的每一种都可以为新技术特征提供机会,诸如本文中所描述的那些。经改进的技术和网络可以实现设备和网络的指数增长,包括将iot网络用作雾设备或系统。随着这种经改进技术的使用的增长,可以开发iot网络以用于自我管理、功能演进和协作,而无需直接的人为干预。经改进的技术甚至可以使iot网络能够在没有集中控制系统的情况下运行。因此,本文中所描述的改进技术可以用于自动化和增强远远超出当前实施方式的网络管理和操作功能。
在示例中,诸如通过骨干链路6002在iot设备6004之间的通信可以由用于认证、授权和计费(aaa)的分散式系统保护。在分散式aaa系统中,可以跨互连的异构网络基础设施来实施分布式支付、信贷、审计、授权和认证系统。这允许系统和网络走向自主操作。在这些类型的自主操作中,机器甚至可以签订人力资源合同并与其他机器网络协商合作伙伴关系。这可以允许实现共同目标以及与概述的计划服务级别协议平衡的服务交付,并且实现提供计量、测量、可追溯性和可跟踪性的解决方案。创建新的供应链结构和方法可以实现创建大量服务、挖掘其价值并在没有任何人为参与的情况下瓦解。
通过将诸如声、光、电子交通、面部和模式识别、气味、振动等传感技术集成到iot设备中的自主组织中,可以进一步增强这种iot网络。感知系统的集成可以允许服务交付的系统性且自主的通信和协调,而不是基于合约性服务目标、编制和服务质量(qos)的资源的云集和融合。基于网络的资源处理的单独示例中的一些包括以下内容。
例如,网状网络6056可以由执行内联数据到信息变换的系统来增强。例如,包括多链路网络的处理资源的自形成链可以以高效的方式分配原始数据到信息的变换、以及区分资产和资源以及每个的相关联管理的能力。此外,可以插入基础设施和基于资源的信任和服务索引的适当组件,以改善数据完整性、质量、保障并递送数据置信度度量。
例如,wlan网络6058可以使用执行标准转换的系统来提供多标准连接,从而使得iot设备6004能够使用不同协议进行通信。进一步的系统可以在包括可见互联网资源和隐藏互联网资源的多标准基础设施之间提供无缝互连。
例如,蜂窝网络6060中的通信可以通过卸载数据、将通信扩展到更远程的设备、或这两者的系统来增强。lpwa网络6062可以包括执行到ip的互连非互联网协议(ip)、寻址和路由的系统。进一步地,iot设备6004中的每一个都可以包括用于与所述设备进行广域通信的适当收发机。进一步地,每个iot设备6004可以包括用于使用附加协议和频率进行通信的其他收发机。关于图62和图63中描绘的iot处理设备的通信环境和硬件来进一步讨论这一点。
最后,可以配备iot设备集群以与其他iot设备以及云网络进行通信。这可以允许iot设备在设备之间形成自组织(ad-hoc)网络,从而允许它们用作单个设备,所述单个设备可被称为雾设备。以下关于图61来进一步讨论这种配置。
图61展示了与作为云计算网络边缘处的雾设备操作的网状网络的iot设备(设备6102)进行通信的云计算网络。网状网络的iot设备可以被称为雾6120,其在云6100的边缘处操作。为了简化附图,并非每个iot设备6102都被标记。
雾6120可以被认为是大规模互连网络,在所述网络中,多个iot设备6102例如通过无线电链路6122彼此通信。作为示例,可以使用由开放互联基金会tm(ocf)发布的互连规范来促进这种互连网络。这个标准允许设备发现彼此并建立互连通信。还可以使用其他互连协议,包括例如优化链路状态路由(olsr)协议、移动自组织组网最佳方法(b.a.t.m.a.n.)路由协议、或oma轻量级m2m(lwm2m)协议等。
在此示例中示出了三种类型的iot设备6102,即网关6104、数据聚合器6126和传感器6128,但是可以使用iot设备6102和功能的任何组合。网关6104可以是提供云6100与雾6120之间的通信的边缘设备,并且还可以为从传感器6128获得的数据(诸如运动数据、流数据、温度数据等)提供后端处理功能。数据聚合器6126可以从任何数量的传感器6128收集数据,并且执行后端处理功能以进行分析。可以通过网关6104沿着云6100传递结果、原始数据或两者。传感器6128可以是例如既能收集数据又能处理数据的全iot设备6102。在一些情况下,传感器6128可能在例如收集数据并允许数据聚合器6126或网关6104处理所述数据的功能上更受限制。
来自任何iot设备6102的通信可以沿着任何iot设备6102之间的方便路径(例如,最方便的路径)被传递以到达网关6104。在这些网络中,许多互连提供了大量冗余,即使丢失了许多iot设备6102,也允许维持通信。进一步地,网状网络的使用可以允许使用功率非常低或者位于距基础设施一定距离处的iot设备6102,因为连接至另一iot设备6102的范围可能远小于连接至网关6104的范围。
从这些iot设备6102提供的雾6120可以被呈现给云6100中的设备,诸如服务器6106,作为位于云6100的边缘处的单个设备(例如雾设备)。在此示例中,来自雾设备的警报可以被发送而不会被识别为是来自雾6120内的特定iot设备6102。以这种方式,雾6120可以被认为是分布式平台,所述分布式平台提供计算和存储资源以执行处理或数据密集型任务,诸如数据分析、数据聚合和机器学习等。
在一些示例中,可以使用命令式编程风格来配置iot设备6102,例如,其中每个iot设备6102具有特定功能和通信伙伴。然而,形成雾设备的iot设备6102可以以声明性编程风格来配置,从而允许iot设备6102重新配置其操作和通信,诸如响应于条件、查询和设备故障来确定所需的资源。作为示例,来自位于服务器6106处的用户关于由iot设备6102监测的设备子集的操作的查询可以使得雾6120设备选择用于回答查询所需的iot设备6102,诸如特定传感器6128。然后,在由雾6120设备将来自这些传感器6128的数据发送至服务器6106以回答查询之前,可以通过传感器6128、数据聚合器6126或网关6104的任何组合对所述数据进行聚合和分析。在此示例中,雾6120中的iot设备6102可以基于查询来选择所使用的传感器6128,诸如添加来自流量传感器或温度传感器的数据。进一步地,如果iot设备6102中的一些不可操作,则雾6120设备中的其他iot设备6102可以提供类似数据(如果可用的话)。
在其他示例中,根据示例实施例,上述操作和功能可以由采用电子处理系统的示例形式的iot设备机器来实施,在所述电子处理系统可以执行一组或一系列指令以使所述电子处理系统执行本文所讨论的方法论中的任一种方法。所述机器可以是iot设备或iot网关,包括由个人计算机(pc)、平板pc、个人数字助理(pda)、移动电话或智能电话的各方面实施的机器、或者能够执行指定所述机器采取动作的指令(顺序的或以其他方式)的任何机器。进一步地,虽然在以上示例中可能仅描绘和参考了单个机器,但是这样的机器还应当被视为包括机器的任何集合,所述机器独立地或联合地执行一组(或多组)指令以便执行本文所讨论的方法中的任何一种或多种方法。进一步地,这些以及与基于处理器的系统相似的示例应当被视为包括一个或多个机器的任何集合,所述一个或多个机器被处理器(例如,计算机)控制或操作以独立地或联合地执行指令从而执行本文所讨论的方法论中的任何一种或多种方法。在一些实施方式中,一个或多个多重设备可以协同操作以实施功能并执行本文所描述的任务。在一些情况下,一个或多个主机设备可以供应数据、提供指令、聚合结果、或以其他方式促进由多重设备提供的联合操作和功能。虽然当由单个设备实施时,功能可以被认为是设备本地的功能,但是在多重设备作为单个机器进行操作的实施方式中,功能可以统一被认为是设备本地的,并且这个设备集合可以提供或消耗由其他远程机器(实施为单个设备或设备集合)提供的结果,以及其他示例实施方式。
例如,图62展示了与多个物联网(iot)设备进行通信的云计算网络或云6200的图。云6200可以表示互联网,或者可以是局域网(lan)、或广域网(wan),诸如公司的专有网络。iot设备可以包括以各种组合分组的任何数量的不同类型的设备。例如,交通控制组6206可以包括沿着城市街道的iot设备。这些iot设备可以包括交通信号灯、交通流量监测器、相机、天气传感器等。交通控制组6206或其他子组可以通过有线或无线链路6208(诸如lpwa链路、光学链路等)与云6200通信。进一步地,有线或无线子网络6212可以允许iot设备彼此通信,诸如通过局域网、无线局域网等。iot设备可以使用诸如网关6210或6228等另一设备来与诸如云6200等远程位置进行通信;iot设备还可以使用一个或多个服务器6230来促进与云6200或网关6210的通信。例如,所述一个或多个服务器6230可以作为中间网络节点进行操作,以支持局域网当中的本地边缘云或雾实施。进一步地,所描绘的网关6228可以在云到网关到多边缘设备配置中进行操作,诸如各种iot设备6214、6220、6224被约束或动态地分配和使用云6200中的资源。
iot设备的其他示例分组可以包括远程气象站6214、本地信息终端6216、警报系统6218、自动柜员机6220、警报面板6222、或移动车辆,诸如应急车辆6224或其他车辆6226等。这些iot设备中的每一个都可以与其他iot设备、与服务器6204、与另一个iot雾设备或系统(未示出,但在图61中进行描绘)、或其中的组合进行通信。iot设备组可以部署在各种住宅、商业和工业背景中(包括私人环境或公共环境两者中)。
如从图62中可以看出,大量iot设备可以通过云6200进行通信。这可以允许不同的iot设备自主地向其他设备请求或提供信息。例如,iot设备组(例如,交通控制组6206)可以从远程气象站组6214请求当前天气预报,所述远程气象站组可以在没有人为干预的情况下提供预测。进一步地,可以由自动柜员机6220向应急车辆6224警告正在发生盗窃。当应急车辆6224朝向自动柜员机6220前进时,其可以访问交通控制组6206以请求准许到达所述位置,例如,通过使灯变为红色以在交叉路口阻止交叉车流足够的时间从而使应急车辆6224无阻碍地进入交叉路口。
诸如远程气象站6214或交通控制组6206等iot设备集群可以被配备成与其他iot设备以及与云6200进行通信。这可以允许iot设备在设备之间形成自组织网络,从而允许它们用作单个设备,所述单个设备可被称为雾设备或系统(例如,如上文关于图61所描述的)。
图63是可以存在于iot设备6350中以用于实施本文描述的技术的组件的示例的框图。iot设备6350可以包括示例中示出的或在以上公开中引用的组件的任何组合。这些组件可以被实施为ic、其多个部分、分立电子设备、或在iot设备6350中适配的其他模块、逻辑、硬件、软件、固件、或其组合,或者作为以其他方式并入较大系统的机箱内的组件。另外,图63的框图旨在描绘iot设备6350的组件的高级视图。然而,可以省略所示组件中的一些组件、可以存在附加的组件、并且在其他实施方式中可以出现所示组件的不同安排。
iot设备6350可以包括处理器6352,所述处理器可以是微处理器、多核处理器、多线程处理器、超低电压处理器、嵌入式处理器或其他已知的处理元件。处理器6352可以是芯片上系统(soc)的一部分,其中处理器6352和其他组件形成为单个集成电路或单个封装体,诸如来自intel的edisontm或galileotmsoc板。作为示例,处理器6352可以包括基于
处理器6352可以通过互连6356(例如,总线)与系统存储器6354通信。可以使用任何数量的存储器设备来提供给定量的系统内存。作为示例,存储器可以是符合电子器件工程联合委员会(jedec)设计(诸如ddr或移动ddr标准(例如,lpddr、lpddr2、lpddr3或lpddr4))的随机存取存储器(ram)。在各实施方式中,各个存储器设备可以是任何数量的不同封装体类型,诸如单管芯封装体(sdp)、双管芯封装体(ddp)或四管芯封装体(q17p)。在一些示例中,这些设备可以直接焊接到母板上以提供较低轮廓的解决方案,而在其他示例中,这些设备被配置为一个或多个存储器模块,这些存储器模块进而通过给定的连接器耦合到母板。可以使用任何数量的其他存储器实施方式,诸如其他类型的存储器模块,例如,不同种类的双列直插式存储器模块(dimm),包括但不限于microdimm或minidimm。
为了提供对诸如数据、应用、操作系统等信息的持久存储,存储装置6358也可以经由互连6356耦合至处理器6352。在示例中,存储装置6358可以经由固态盘驱动器(ssdd)来实施。可用于存储装置6358的其他设备包括闪存卡(诸如sd卡、微型sd卡、xd图片卡等)、以及usb闪存驱动器。在低功率实施方式中,存储装置6358可以是管芯上存储器或与处理器6352相关联的寄存器。然而,在一些示例中,存储装置6358可以使用微型硬盘驱动器(hdd)来实施。进一步地,除了所描述的技术之外或者代替所述技术,任何数量的新技术可以用于存储装置6358,诸如阻变存储器、相变存储器、全息存储器或化学存储器等。
这些组件可以通过互连6356进行通信。互连6356可以包括任何数量的技术,包括工业标准架构(isa)、扩展isa(eisa)、外围组件互连(pci)、外围组件互连扩展(pcix)、pciexpress(pcie)、或任何数量的其他技术。互连6356可以是例如在基于soc的系统中使用的专有总线。可以包括其他总线系统,诸如i2c接口、spi接口、点对点型接口、以及电源总线等。
互连6356可以将处理器6352耦合至网状收发机6362以用于与其他网状设备6364通信。网状收发机6362可以使用任何数量的频率和协议,诸如符合ieee802.15.4标准的2.4千兆赫(ghz)传输,使用如由
网状收发机6362可以使用多个标准或无线电进行通信以用于不同范围的通信。例如,iot设备6350可以使用基于ble的本地收发机或另一低功率无线电与接近设备(例如,在大约10米内)进行通信以节省功率。可以通过zigbee或其他中间功率无线电到达更远的网状设备6364,例如,在大约50米内。这两种通信技术可以以不同的功率水平在单个无线电上发生,或者可以在单独的收发机(例如,使用ble的本地收发机和使用zigbee的单独网状收发机)上发生。
可以包括无线网络收发机6366以便经由局域网协议或广域网协议与云6300中的设备或服务进行通信。无线网络收发机6366可以是遵循ieee802.15.4或ieee802.15.4g标准等的lpwa收发机。iot设备6350可以使用由semtech和lora联盟开发的lorawantm(长距离广域网)在广泛区域上进行通信。本文中所描述的技术不限于这些技术,而是可以与实施长距离低带宽通信的任何数量的其他云收发机一起使用,诸如sigfox及其他技术。进一步地,可以使用ieee802.15.4e规范中描述的其他通信技术,诸如时隙信道跳变。
除了针对网状收发机6362和无线网络收发机6366所提到的系统之外,还可以使用任何数量的其他无线电通信和协议,如本文所述。例如,无线电收发机6362和6366可以包括使用扩频(spa/sas)通信以实施高速通信的lte或其他蜂窝收发机。进一步地,可以使用任何数量的其他协议,诸如用于中速通信和提供网络通信的
无线电收发机6362和6366可以包括与任何数量的3gpp(第三代合作伙伴计划)规范兼容的无线电,特别是长期演进(lte)、长期演进-高级(lte-a)和长期演进-高级专业版(lte-apro)。可以注意到,可以选择与任何数量的其他固定、移动或卫星通信技术和标准兼容的无线电。这些可以包括例如任何蜂窝广域无线电通信技术,其可以包括例如第5代(5g)通信系统、全球移动通信系统(gsm)无线电通信技术、通用分组无线电服务(gprs)无线电通信技术、或gsm演进增强数据速率(edge)无线电通信技术、umts(通用移动电信系统)通信技术,除了上面列出的标准之外,无线网络收发器6366可以使用任何数量的卫星上行链路技术,包括例如符合由itu(国际电信联盟)或etsi(欧洲电信标准协会)发布的标准的无线电等。因此,本文提供的示例被理解为适用于现有的和尚未发布的各种其他通信技术。
可以包括网络接口控制器(nic)6368以向云6300或其他设备(诸如网状设备6364)提供有线通信。有线通信可以提供以太网连接,或者可以基于其他类型的网络,诸如控制器区域网络(can)、本地互连网络(lin)、设备网(devicenet)、控制网(controlnet)、数据高速通道+、过程现场总线(profibus)或过程现场网(profinet)等。可以包括附加nic6368以允许连接至第二网络,例如,通过以太网提供到云的通信的nic6368、以及通过另一种类型的网络提供到其他设备的通信的第二nic6368。
互连6356可以将处理器6352耦合至外部接口6370,所述外部接口用于连接外部设备或子系统。外部设备可以包括传感器6372,诸如加速度计、水平传感器、流量传感器、光学光传感器、相机传感器、温度传感器、全球定位系统(gps)传感器、压力传感器、气压传感器等。外部接口6370可以进一步用于将iot设备6350连接至致动器6374,诸如电源开关、阀致动器、可听声音发生器、可视化警告设备等。
在一些可选示例中,各种输入/输出(i/o)设备可以存在于iot设备6350内或连接至所述iot设备。例如,可以包括显示器或其他输出设备6384以显示诸如传感器读数或致动器位置等信息。可以包括诸如触摸屏或小键盘等输入设备6386以接受输入。输出设备6384可以包括任何数量形式的音频或可视化显示器,包括简单的可视化输出(诸如二进制状态指示器(例如,led)和多字符可视化输出)、或者更复杂的输出(诸如显示屏(例如,lcd屏幕)),其中,字符、图形、多媒体对象等的输出是根据iot设备6350的操作生成或产生的。
电池6376可以为iot设备6350供电,但是在iot设备6350安装在固定位置的示例中,所述电池可具有耦合至电网的电源。电池6376可以是锂离子电池或金属-空气电池,诸如锌-空气电池、铝-空气电池、锂-空气电池等。
电池监测器/充电器6378可以包括在iot设备6350中以跟踪电池6376的充电状态(soch)。电池监测器/充电器6378可以用于监测电池6376的其他参数,以提供故障预测,诸如电池6376的健康状态(soh)和功能状态(sof)。电池监测器/充电器6378可以包括电池监测集成电路,诸如来自凌力尔特公司(lineartechnologies)的ltc4020或ltc2990、来自美国亚利桑那州凤凰城的安森美半导体公司(onsemiconductor)的adt7488a、或来自德克萨斯州达拉斯的德州仪器的ucd90xxx系列的ic。电池监测器/充电器6378可以通过互连6356将关于电池6376的信息传送至处理器6352。电池监测器/充电器6378还可以包括模数(adc)转换器,所述模数转换器允许处理器6352直接监测电池6376的电压或来自电池6376的电流。电池参数可以用于确定iot设备6350可执行的动作,诸如传输频率、网状网络操作、感测频率等。
电源块6380或耦合至电网的其他电源可以与电池监测器/充电器6378耦合以对电池6376进行充电。在一些示例中,电源块6380可以用无线功率接收器来代替,以例如通过iot设备6350中的环形天线无线地获得功率。无线电池充电电路(诸如来自加利福尼亚州米尔皮塔斯的凌力尔特公司的ltc4020芯片等)可以包括在电池监测器/充电器6378中。所选择的特定充电电路取决于电池6376的尺寸,并且因此取决于所需的电流。可以使用由airfuel联盟颁布的airfuel标准、由无线电力联盟(wirelesspowerconsortium)颁布的qi无线充电标准、或由无线电力联盟颁布的rezence充电标准来执行充电。
存储装置6358可以包括采用软件、固件或硬件命令形式以实施本文所述的技术的指令6382。虽然这种指令6382被示出为存储器6354和存储装置6358中所包括的代码块,但是可以理解的是,所述代码块中的任一个都可以利用例如内置在专用集成电路(asic)中的硬连线电路来代替。
在示例中,经由存储器6354、存储装置6358或处理器6352提供的指令6382可以被实施为非暂态机器可读介质6360,包括用于引导处理器6352在iot设备6350中执行电子操作的代码。处理器6352可以通过互连6356访问非暂态机器可读介质6360。例如,非暂态机器可读介质6360可以由针对图63的存装置6358描述的设备来体现,或者可以包括特定的存储单元,诸如光盘、闪存驱动器或任何数量的其他硬件设备。非暂态机器可读介质6360可以包括用于引导处理器6352执行特定动作序列或动作流的指令,例如,如关于上述操作和功能的(多个)流程图和(多个)框图所描述的。
图64是根据实施例的处理器的示例图示。处理器6400是可以结合上述实施方式使用的一类硬件设备的示例。处理器6400可以是任何类型的处理器,诸如微处理器、嵌入式处理器、数字信号处理器(dsp)、网络处理器、多核处理器、单核处理器、或执行代码的其他设备。尽管在图64中仅展示了一个处理器6400,但是处理元件可以可替代地包括图64中展示的多于一个处理器6400。处理器6400可以是单线程核,或者针对至少一个实施例,处理器6400可以是多线程的,因为其可以包括每核多于一个硬件线程上下文(或者“逻辑处理器”)。
图64还展示了根据实施例的耦合至处理器6400的存储器6402。存储器6402可以是本领域技术人员已知或另外可用的广泛存储器(包括存储器层次结构中的各个层)中的任何一种。这种存储器元件可以包括但不限于随机存取存储器(ram)、只读存储器(rom)、现场可编程门阵列(fpga)的逻辑块、可擦除可编程只读存储器(eprom)和电可擦除可编程rom(eeprom)。
处理器6400可以执行与本文详细描述的算法、过程或操作相关联的任何类型的指令。通常,处理器6400可以将元件或物件(例如,数据)从一个状态或事物变换为另一种状态或事物。
代码6404(其可以是待由处理器6400执行的一条或多条指令)可以存储在存储器6402中,或者可以存储在软件、硬件、固件、或其任何合适的组合中,或者(在合适的情况下并基于具体需要)存储在任何其他内部或外部组件、设备、元件或对象中。在一个示例中,处理器6400可以遵循代码6404所指示的程序指令序列。每条指令进入前端逻辑6406并由一个或多个解码器6408处理。所述解码器可以生成微操作作为其输出,如预定格式的固定宽度微输出,或者可以生成其他指令、微指令、或反映原始代码指令的控制信号。前端逻辑6406还包括寄存器重命名逻辑6410和调度逻辑6412,后者一般给资源和队列分配对应于用于执行的指令的操作。
处理器6400还可以包括具有一组执行单元6416a、6416b、6416n等的执行逻辑6414。一些实施例可以包括专用于特定功能或功能集合的大量执行单元。其他实施例可以包括仅一个执行单元、或可以执行特定功能的一个执行单元。执行逻辑6414执行由代码指令所指定的操作。
在完成执行由代码指令指定的操作后,后端逻辑6418可以引退代码6404的指令。在一个实施例中,处理器6400允许乱序执行但要求指令的按顺序引退。引退逻辑6420可以采取各种已知形式(例如,重排序缓存器等)。以这种方式,在代码6404执行的过程中处理器6400被变换,至少依据解码器所生成的输出、寄存器重命名逻辑6410所利用的硬件寄存器和表格、以及经执行逻辑6414修改的任何寄存器(未示出)。
尽管未在图64中示出,但是处理元件可以包括具有处理器6400的其他片上元件。例如,处理元件可以包括存储器控制逻辑以及处理器6400。处理元件可以包括i/o控制逻辑和/或可以包括与存储器控制逻辑集成的i/o控制逻辑。处理元件还可以包括一个或多个高速缓存。在一些实施例中,非易失性存储器(诸如,闪存或熔丝)也可以与处理器6400一起被包括在芯片上。
图65展示了根据实施例的被安排为点对点(ptp)配置的计算系统6500。具体地,图65示出了一种系统,在所述系统中,处理器、存储器以及输入/输出设备通过许多点对点接口互连。通常,可以采用与计算系统6500相同或类似的方式来配置本文所描述的计算系统中的一个或多个。
处理器6570和6580可以各自包括用于与存储器元件6532和6534进行通信的集成存储器控制器逻辑(mc)6572和6582。在替代实施例中,存储器控制器逻辑6572和6582可以是与处理器6570和6580分开的分立逻辑。存储器元件6532和/或6534可以存储要由处理器6570和6580用于实现本文所概述的操作和功能的各种数据。
处理器6570和6580可以是任何类型的处理器,诸如结合其他附图所讨论的那些处理器。处理器6570和6580可以分别使用点对点(ptp)接口电路6578和6588经由点对点接口6550来交换数据。处理器6570和6580中的每一个处理器可以使用点对点接口电路6576、6586、6594和6598经由单独的点对点接口6552和6554来与芯片组6590交换数据。芯片组6590还可以使用接口电路6592(这可以是ptp接口电路)经由高性能图形接口6539与高性能图形电路6538交换数据。在替代实施例中,图65所展示的任何或所有ptp链路可以被实施为多点分支总线而非有ptp链路。
芯片组6590可以经由接口电路6596与总线6520通信。总线6520可以具有一个或多个通过所述总线进行通信的设备,如总线桥接器6518和i/o设备6516。经由总线6510,总线桥接器6518可以与其他设备通信,诸如用户接口6512(诸如键盘、鼠标、触摸屏、或其他输入设备)、通信设备6526(诸如调制解调器、网络接口设备、或其他类型的可以通过计算机网络6560通信的通信设备)、音频i/o设备6514、和/或数据存储设备6528。数据存储设备6528可以存储代码6530,所述代码可以由处理器6570和/或6580执行。在替代实施例中,总线架构的任何部分用一个或多个ptp链路实施。
图65中描绘的计算机系统是可以用于实施在此讨论的各个实施例的计算系统的实施例的示意图。将理解的是,图65中所描绘的系统的各个部件可以结合在片上系统(soc)架构中或者在能够实现本文所提供的示例和实施方式的功能和特征的任何其他合适的配置中。
在进一步的示例中,机器可读介质还包括任何有形介质,所述有形介质能够存储、编码或携带用于由机器执行并使所述机器执行本公开的方法中的任何一个或多个的指令,或者所述有形介质能够存储、编码或携带由这样的指令利用或与这样的指令相关联的数据结构。“机器可读介质”因此可以包括但不限于固态存储器、以及光学介质和磁性介质。机器可读介质的特定示例包括非易失性存储器,所述非易失性存储器通过示例的方式包括但不限于半导体存储器装置(例如,电可编程只读存储器(eprom)、电可擦除可编程只读存储器(eeprom))和闪存装置;磁盘,如内置硬盘和可移除磁盘;磁光盘;以及cd-rom和dvd-rom磁盘。可以利用多个传输协议(例如,http)中的任一种协议、经由网络接口设备、使用传输介质、通过通信网络来进一步发射或接收由机器可读介质体现的指令。
应当理解,本说明书中所描述的功能单元或能力可以被称为或标记为部件或模块,以更加特别地强调其实施独立性。这些部件可以由任何数量的软件或硬件的形式实施。例如,部件或模块可以被实施为硬件电路,所述硬件电路包括定制超大规模集成(vlsi)电路或门阵列、现货供应的半导体,如逻辑芯片、晶体管、或其他分立部件。部件或模块还可以在如现场可编程门阵列、可编程阵列逻辑、可编程逻辑器件等可编程硬件装置中实施。部件或模块还可以在由各种类型的处理器执行的软件中实施。可执行代码的所标识部件或模块可以包括例如计算机指令的一个或多个物理块或逻辑块,所述物理块或逻辑块可以被组织为例如对象、程序或函数。然而,所标识部件或模块的可执行部分不需要物理上定位在一起,而是可以包括存储在不同位置的不同指令,这些指令当被逻辑地连接在一起时包括所述部件或模块并且实现所述部件或模块的所阐述的目的。
实际上,可执行代码的部件或模块可以是单个指令,或许多指令,并且甚至可分布在若干不同代码段中、在不同程序之间、并且跨越若干存储器装置或处理系统。具体地,所描述的过程的一些方面(如代码重写和代码分析)可以在不同的处理系统上(例如,在数据中心中的计算机中)发生,而不是在其中部署代码的处理系统上(例如,在嵌入传感器或机器人中的计算机中)。类似地,本文中操作数据可以在部件或模块内被标识和展示,并且可以以任何合适的形式体现并且组织在任何合适类型的数据结构中。操作数据可以被收集为单个数据集,或者可以分布在不同位置上,包括分布在不同的存储设备上,并且可以至少部分地仅作为电子信号存在于系统或网络上。所述部件或模块可以是被动或主动的,包括可操作以执行期望功能的代理。
目前所描述的方法、系统和设备实施例的附加示例包括以下非限制性配置。以下非限制性示例中的每个示例可以独立存在,或者可以任何枚举或组合与在下文或在整个本公开中提供的其他示例中的任何一个或多个示例进行组合。
尽管已经根据某些实施方式和总体上相关联的方法描述了本公开,但是这些实施方式和方法的替代方案和置换对于本领域技术人员而言将是显而易见的。例如,本文所描述的动作可以以与所描述的不同顺序来执行,并且仍然实现期望的结果。作为一个示例,在附图中描绘的过程不一定需要所示出的特定顺序或相继顺序来实现期望结果。在某些实施方式中,多重任务处理和并行处理可能是有利的。另外,可以支持其他用户接口布局和功能。其他变体处于以下权利要求的范围内。
尽管本说明书包含许多特定实施方式细节,但是这些细节不应被解读为是对任何发明或者可能要求保护的内容的范围的限制,而应被解读为是对具体发明的具体实施例特有的特征的描述。在单一实施例的背景下在本说明书中所描述的某些特征还可以组合地实施在单个实施例中。相反,在单一实施例的上下文中描述的各个特征也可以被单独地或以任何适合的子组合的方式实施在多个实施例中。而且,虽然特征在上文可以被描述为以某些组合起作用并且甚至如此最初被要求,但来自所要求保护的组合的一个或多个特征在某些情况下可以与组合离体,并且所要求保护的组合可以针对子组合或子组合的变化。
类似地,虽然附图中以具体顺序描绘了操作,但这不应被理解成要求这种操作以所示出的具体顺序或以有序顺序执行,或者所有展示的操作可以被执行,以实现令人希望的结果。在某些情况下,多重任务处理和并行处理可能是有利的。而且,上述实施例中的不同系统部件的分离不应被理解成在所有实施例中都要求这种分离,并且应理解的是,所描述的程序部件和系统通常可以一起整合在单个软件产品中或封装进多个软件产品中。
以下示例涉及根据本说明书的实施例。示例1是一种装置,该装置包括:数据处理装置;查找逻辑;以及相交逻辑。查找逻辑用于:标识用于被投射到特定体积中的光线的坐标;获取与特定体积相对应的体积数据结构,其中,体积数据结构以多个细节层次描述特定体积,体积数据结构中的第一条目包括以多个细节层次中的第一细节层次表示体素的第一组位,第一细节层次包括多个细节层次中的最低细节层次,第一组位的值指示体素中的相应体素是否至少部分地由对应的几何结构占据,其中,体积数据结构进一步包括多个第二条目,该多个第二条目以高于第一细节层次的第二细节层次表示体素,并且处于第二细节层次的体素表示处于第一细节层次的体素的子体积;以及确定光线将要穿过处于第一细节层次的体素的特定子集。相交逻辑用于从体积数据结构中的第一条目确定体素的特定子集中的至少特定体素被几何结构占据。
示例2可包括示例1的主题,进一步包括多路复用器逻辑,该多路复用器逻辑用于标识多个第二条目中的特定的第二条目,其中,该特定的第二条目基于确定了特定体素被几何结构占据而标识,特定的第二条目描述处于第二细节层次的体素的子集,处于第二细节层次的体素的子集包括特定体素的子体积,并且特定的第二条目包括第二组位,该第二组位具有用于指示处于第二细节层次的体素的子集中的相应体素是否至少部分地由对应的几何结构占据的值。
示例3可包括示例2的主题,其中,查找逻辑用于进一步确定光线将要穿过处于第二细节层次的体素的子集中的至少特定体素,并且相交逻辑进一步用于从体积数据结构中的第二组位来判定处于第二细节层次的体素的子集中的特定体素是否至少部分地由几何结构占据。
示例4可包括示例1-3中的任一示例的主题,其中,第二条目的数量与第一组位中具有指示处于第一细节层次的相应体素是否至少部分地由几何结构占据的值的位的数量相对应。
示例5可包括示例1-4中的任一示例的主题,其中,相交逻辑用于确定光线与特定体积内的特定几何结构相交。
示例6可包括示例5的主题,进一步包括渲染逻辑,该渲染逻辑用于确定光线从特定几何结构的反射。
示例7可包括示例6的主题,其中,光线对音频光线建模,并且光线的反射基于与特定几何结构相关联的反射系数来确定。
示例8可包括示例7的主题,其中,反射系数在体积数据结构内被标识
示例9可包括示例7-8中的任一示例的主题,其中,渲染逻辑用于基于被投射到特定体积中的多条光线的所确定的反射来生成与特定体积内的几何结构相对应的混响模型,并且多条光线包括该光线。
示例10可包括示例9的主题,进一步包括滤波器生成器,该滤波器生成器用于生成与混响模型相对应的有限脉冲响应滤波器。
示例11可包括示例6的主题,其中,光线从与图形显示对应的平面上的坐标被投射,并且渲染逻辑用于生成特定体积的、与坐标对应且基于反射的图形呈现的部分。
示例12可包括示例5-11中的任一示例的主题,其中,相交逻辑进一步用于标识与多个细节层次中的特定细节层次相对应的深度,并且确定光线与特定几何结构相交包括:标识特定体积数据结构中描述处于特定细节层次的体素的特定条目;确定光线穿过处于特定细节层次的体素中的特定体素;以及从特定条目确定处于特定细节层次的特定体素由特定几何结构占据。
示例13可包括示例1-12中的任一示例的主题,其中,体积数据结构中的条目中的每个条目包括与由在条目中描述的体素建模的64个子体积相对应的64个位。
示例14可包括示例1-13中的任一示例的主题,其中,查找逻辑包括第一硬件电路系统,并且相交逻辑包括第二硬件电路系统。
示例15可包括示例14的主题,其中,第一硬件电路系统包括查找表。
示例16可包括示例15的主题,其中,第一硬件电路系统包括用于计算光线的斜率的加法器和移位器。
示例14可包括示例1-13中的任一示例的主题,其中,第一硬件电路系统用于生成位掩码值以标识特定体素。
示例18可包括示例14-16中的任一示例的主题,其中,第二硬件电路系统包括逻辑与门,并且第二硬件电路系统用于接收第一硬件电路系统的输出来作为输入。
示例19是一种方法,该方法包括:标识用于被投射到特定体积中的光线的坐标;从存储器获取体积数据结构,其中,体积数据结构以多个细节层次描述特定体积,体积数据结构中的第一条目包括以多个细节层次中的第一细节层次表示体素的第一组位,第一细节层次包括多个细节层次中的最低细节层次,第一组位的值指示体素中的相应体素是否至少部分地由对应的几何结构占据,其中,体积数据结构进一步包括多个第二条目,该多个第二条目以高于第一细节层次的第二细节层次表示体素,并且处于第二细节层次的体素表示处于第一细节层次的体素的子体积;确定光线将要穿过处于第一细节层次的体素的特定子集;以及从体积数据结构中的第一条目确定体素的特定子集中的至少特定体素被几何结构占据。
示例20可包括示例19的主题,进一步包括:将多条光线投射到特定体积中以在该特定体积内生成几何结构的渲染。
示例21可包括示例20的主题,其中,渲染包括对特定体积的图像的渲染,并且生成图像的渲染包括:将光线投射到特定体积中以判定光线是否从特定体积内的几何结构反射。
示例22可包括示例20的主题,其中,渲染包括与特定体积内的几何结构相对应的音频混响模型。
示例23是一种系统,该系统包括用于执行如示例19-22中的任一示例的方法的装置。
示例24是一种机器可访问存储介质,具有存储于其上的指令,当在机器上执行这些指令时,这些指令使机器:获取与特定体积内的几何结构相对应的图像数据;基于图像数据生成体积数据结构,其中,体积数据结构以多个细节层次描述特定体积,体积数据结构包括头部和多个条目,体积数据结构中的第一条目包括以多个细节层次中的第一细节层次表示体素的第一组位,第一细节层次包括多个细节层次中的最低细节层次,第一组位的值指示体素中的相应体素是否至少部分地由对应的几何结构占据,其中,体积数据结构进一步包括多个第二条目,该多个第二条目以高于第一细节层次的第二细节层次表示体素,并且处于二细节层次的体素表示处于第一细节层次的体素的子体积。
示例25可包括示例24的主题,其中,第一条目进一步包括属性数据,该属性数据用于描述第一细节层次内的被占据的体素的一个或多个属性。
示例26可包括示例25的主题,其中,多个条目中的每个条目针对由条目描述的每个体素包括两个或更多个位。
示例27可包括示例25-26中的任一示例的主题,其中,对于多个条目中的每个条目属性数据被包括以描述由对应条目描述的体素的属性。
示例28可包括示例25-27中的任一示例的主题,其中,属性包括几何结构的反射系数。
示例29可包括示例25-28中的任一示例的主题,其中,属性包括以下一项或多项:颜色、由几何结构组成的对象的标签、该对象的重量、以及几何结构的材料。
示例30可包括示例25-29中的任一示例的主题,其中,指令当被执行时进一步使机器:使用积数据结构执行推断以标识特定体积的几何结构映射至一个或多个已知对象;以及基于特定体积的几何结构至一个或多个已知对象的映射来对体积数据结构内的属性编码。
示例31可包括示例30的主题,其中,使用卷积神经网络(cnn)来执行推断,并且体积数据结构的至少一部分被提供给cnn作为输入。
示例32可包括示例24-31中的任一示例的主题,其中,头部包括深度字段,该深度字段用于标识多个细节层次中的细节层次的数量。
示例33可包括示例24-32中的任一示例的主题,其中,头部包括模式字段,该模式字段用于标识多个条目的格式。
示例34可包括示例24-33中的任一示例的主题,其中,头部包括坐标字段,该坐标字段用于将特定体积映射至环境中的坐标集合。
示例35可包括示例24-34中的任一示例的主题,其中,与表示空白的较低层次体素的子体积的体素相对应的条目从体积数据结构被省略。
示例36是一种系统,该系统包括:处理器设备、计算机存储器和渲染引擎。计算机存储器用于存储体积数据结构,其中,体积数据结构以多个细节层次描述特定体积,体积数据结构中的第一条目包括以多个细节层次中的第一细节层次表示体素的第一组位,第一细节层次包括多个细节层次中的最低细节层次,第一组位的值指示体素中的相应体素是否至少部分地由对应的几何结构占据,其中,体积数据结构进一步包括多个第二条目,该多个第二条目以高于第一细节层次的第二细节层次表示体素,并且处于第二细节层次的体素表示处于第一细节层次的体素的子体积。渲染引擎用于使用体积数据结构对特定体积的表示进行渲染,其中,对表示进行渲染包括:将光线投射到特定体积以标识光线从特定体积内的几何结构的反射。
示例37可包括示例36的主题,进一步包括从经渲染的表示生成的音频滤波器。
示例38可包括示例37的主题,进一步包括音频输入和扬声器,其中,使用音频滤波器来处理音频输入以在扬声器处呈现音频输出。
示例39可包括示例36-38中的任一示例的主题,其中,经渲染的表示包括图形渲染。
示例40可包括示例39的主题,进一步包括用于显示图形渲染的显示设备。
示例41可包括示例36-37中的任一示例的主题,其中,处理器设备包括多个核,并且光线包括多条光线,其中,对多条光线的投射的至少一部分用于使用多个核来并行地执行。
示例40可包括示例39的主题,其中,计算机存储器包括由多个核共享的多端口存储器。
示例43可包括示例36-42中的任一示例的主题,进一步包括体积数据生成器,该体积数据生成器用于从与特定体积相对应的传感器数据生成体积数据结构。
示例44是一种机器可访问存储介质,具有存储于其上的指令,当在机器上执行这些指令时,这些指令使机器用于:标识用于被投射到特定体积中的光线的坐标;从存储器获取与特定体积相对应的体积数据结构,其中,体积数据结构以多个细节层次描述特定体积,体积数据结构中的第一条目包括以多个细节层次中的第一细节层次表示体素的第一组位,第一细节层次包括多个细节层次中的最低细节层次,第一组位的值指示体素中的相应体素是否至少部分地由对应的几何结构占据,其中,体积数据结构进一步包括多个第二条目,该多个第二条目以高于第一细节层次的第二细节层次表示体素,并且处于第二细节层次的体素表示处于第一细节层次的体素的子体积;确定光线将要穿过处于第一细节层次的体素的特定子集;以及从体积数据结构中的第一条目确定体素的特定子集中的至少特定体素被几何结构占据。
示例45可包括示例44的主题,其中,指令当被执行时进一步使机器:标识多个第二条目中的特定的第二条目,其中,该特定的第二条目基于确定了特定体素被几何结构占据而标识,特定的第二条目描述处于第二细节层次的体素的子集,处于第二细节层次的体素的子集包括特定体素的子体积,并且特定的第二条目包括第二组位,该第二组位具有用于指示处于第二细节层次的体素的子集中的相应体素是否至少部分地由对应的几何结构占据的值。
示例46可包括示例45的主题,其中,指令当被执行时进一步使机器:确定光线将要穿过处于第二细节层次的体素的子集中的至少特定体素,并且相交逻辑进一步用于从体积数据结构中的第二组位来判定处于第二细节层次的体素的子集中的特定体素是否至少部分地由几何结构占据。
示例47可包括示例44-46中的任一示例的主题,其中,第二条目的数量与第一组位中具有指示处于第一细节层次的相应体素是否至少部分地由几何结构占据的值的位的数量相对应。
示例48可包括示例44-47中的任一示例的主题,其中,指令当被执行时进一步使机器:确定光线与特定体积内的特定几何结构相交。
示例49可包括示例48的主题,指令当被执行时进一步使机器:确定光线从特定几何结构的反射。
示例50可包括示例49的主题,其中,光线对音频光线建模,并且光线的反射基于与特定几何结构相关联的反射系数来确定。
示例51可包括示例50的主题,其中,反射系数在体积数据结构内被标识
示例52可包括示例50-51中的任一示例的主题,其中,指令当被执行时进一步使机器:基于被投射到特定体积中的多条光线的所确定的反射来生成与特定体积内的几何结构相对应的混响模型,并且多条光线包括该光线。
示例53可包括示例52的主题,其中,指令当被执行时进一步使机器:生成与混响模型相对应的有限脉冲响应滤波器。
示例54可包括示例53的主题,其中,光线从与图形显示对应的平面上的坐标被投射,并且指令当被执行时进一步使机器:生成特定体积的、与坐标对应且基于反射的图形呈现的部分。
示例55可包括示例48-54中的任一示例的主题,其中,指令当被执行时进一步使机器:标识与多个细节层次中的特定细节层次相对应的深度,并且确定光线与特定几何结构相交包括:标识特定体积数据结构中描述处于特定细节层次的体素的特定条目;确定光线穿过处于特定细节层次的体素中的特定体素;以及从特定条目确定处于特定细节层次的特定体素由特定几何结构占据。
示例56可包括示例44-55中的任一示例的主题,其中,体积数据结构中的条目中的每个条目包括与由在条目中描述的体素建模的64个子体积相对应的64个位。
示例57可包括示例44-56中的任一示例的主题,其中,指令当被执行时进一步使机器:生成位掩码值以标识特定体素。
示例58是一种方法,该方法包括:获取与特定体积内的几何结构相对应的图像数据;基于图像数据生成体积数据结构,其中,体积数据结构以多个细节层次描述特定体积,体积数据结构包括头部和多个条目,体积数据结构中的第一条目包括以多个细节层次中的第一细节层次表示体素的第一组位,第一细节层次包括多个细节层次中的最低细节层次,第一组位的值指示体素中的相应体素是否至少部分地由对应的几何结构占据,其中,体积数据结构进一步包括多个第二条目,该多个第二条目以高于第一细节层次的第二细节层次表示体素,并且处于二细节层次的体素表示处于第一细节层次的体素的子体积。
示例59可包括示例58的主题,其中,第一条目进一步包括属性数据,该属性数据用于描述第一细节层次内的被占据的体素的一个或多个属性。
示例60可包括示例59的主题,其中,多个条目中的每个条目针对由条目描述的每个体素包括两个或更多个位。
示例61可包括示例59-60中的任一示例的主题,其中,对于多个条目中的每个条目属性数据被包括以描述由对应条目描述的体素的属性。
示例62可包括示例59-61中的任一示例的主题,其中,属性包括几何结构的反射系数。
示例63可包括示例59-62中的任一示例的主题,其中,属性包括以下一项或多项:颜色、由几何结构组成的对象的标签、该对象的重量、以及几何结构的材料。
示例64可包括示例59-63中的任一示例的主题,其中,指令当被执行时进一步使机器:使用积数据结构执行推断以标识特定体积的几何结构映射至一个或多个已知对象;以及基于特定体积的几何结构至一个或多个已知对象的映射来对体积数据结构内的属性编码。
示例65可包括示例64的主题,其中,使用卷积神经网络(cnn)来执行推断,并且体积数据结构的至少一部分被提供给cnn作为输入。
示例66可包括示例58-65中的任一示例的主题,其中,头部包括深度字段,该深度字段用于标识多个细节层次中的细节层次的数量。
示例67可包括示例58-66中的任一示例的主题,其中,头部包括模式字段,该模式字段用于标识多个条目的格式。
示例68可包括示例58-67中的任一示例的主题,其中,头部包括坐标字段,该坐标字段用于将特定体积映射至环境中的坐标集合。
示例69可包括示例58-68中的任一示例的主题,其中,与表示空白的较低层次体素的子体积的体素相对应的条目从体积数据结构被省略。
示例70是一种系统,该系统包括用于执行如示例58-69中的任一示例的方法的装置。因此,己经描述了本主题的特定实施例。其他实施例俱在以下权利要求的范围内。在一些情况下,权利要求书中所列举的动作可以用不同顺序来执行,并且仍然获得期望结果。此外,在附图中描绘的过程不一定需要所示出的特定顺序或相继顺序来实现所希望的结果。