掌桥专利:专业的专利平台
掌桥专利
首页

针对射线跟踪系统的减小的加速结构

文献发布时间:2024-04-18 19:58:21


针对射线跟踪系统的减小的加速结构

本申请是申请号为201811076877.3、发明名称为“针对射线跟踪系统的减小的加速结构”并且申请日为2018年09月14日的发明申请的分案申请。

技术领域

本申请的各实施例涉及针对射线跟踪系统的减小的加速结构。

背景技术

射线跟踪系统可以模拟射线(例如,射线)与场景交互的方式。例如,射线跟踪技术可以用在被配置为从3D场景描述产生图像的图形绘出(render)系统中。图像可以是真实照片,或实现其他目标。例如,可以使用3D绘出技术来生成动画电影。3D场景的描述通常包括定义场景中的几何结构的数据。这种几何数据通常在基元(primitive)方面中被定义,基元通常是三角形基元,但有时可以是其他形状,诸如其他多边形、线或点。

射线跟踪可以模仿光与场景中的对象的自然交互,并且复杂的绘出特征可以自然地由射线跟踪3D场景而产生。射线跟踪可以在逐个像素级别上相对容易地并行化,因为像素通常彼此独立。然而,由于在诸如环境遮挡、反射、焦散等情况下三维场景中的射线的分布式的和不同的位置和行进方向,很难对射线跟踪中涉及的处理流水线化。射线跟踪允许绘出逼真的图像,但通常需要高水平的处理能力和大的工作存储器,从而使得射线跟踪可能难以实现以实时地绘出图像(例如,用于与游戏应用一起使用),尤其是在对硅面积、成本和功耗具有严格限制的设备上,诸如在移动设备(例如,智能手机、平板计算机、笔记本计算机等)上。

在非常广泛的层面上,射线跟踪涉及:(i)标识场景中的射线和几何结构(例如,基元)之间的交叉,以及(ii)响应于标识交叉而执行某些处理(例如,通过执行着色器(shader)程序)以确定交叉如何对正在绘出的图像做出贡献。着色器程序的执行可能导致更多射线被发射到场景中。这些另外的射线可以被称为“次级射线”,并且可以包括用于确定阴影效果的遮挡射线、或用于确定场景中的反射的反射射线。射线从原点被跟踪,并且可以确定射线与场景中的几何结构的交叉。图1示出了包括两个表面104

标识场景中的射线和几何结构之间的交叉涉及大的处理工作量。在一种非常天真的方法中,可以针对场景中的每个基元测试每个射线,并且然后当确定了所有交叉命中时,可以针对每个射线标识最近的交叉。这种方法对于可能具有数百或数十亿个基元的场景是不可行的,其中要处理的射线的数目也可能是数百万个。因此,射线跟踪系统通常使用加速结构,加速结构以可以减少交叉测试的工作量的方式表征场景中的几何结构。加速结构可以具有分层结构,从而使得加速结构内存在多级节点。本文中可以使用术语“层级”来指代分层加速结构。举一些示例,分层加速结构可以具有网格结构、八叉树结构、空间划分结构(例如,k-d树)或边界体积结构。

八叉树结构(其是空间细分结构的示例)通过将三个空间方向(例如,沿x、y和z轴)中的每个空间方向中的节点减半来将3D空间递归地细分,从而将节点细分为八个相等的区域,它们在层级中被表示为子节点。图2a表示相应的二维示例(即,四叉树),其中节点在x和y方向上减半,这取决于节点内的内容的复杂性(例如,基元的数目)。图2a示出了包括三个对象202、204和206的场景200。图2b表示表示图2a中所示的区域的分层加速结构的节点。图2a和图2b中所示的加速结构具有覆盖整个场景200的顶级节点210。节点210被细分为四个四分之一,由节点212

空节点(例如,212

空间细分结构(例如,图2a和图2b的八叉树结构)将场景的空间划分成区域并且形成分层加速结构的节点以表示场景的那些区域。相反,边界体积结构具有与基于场景的内容而定位的体积元素对应的节点。图3a和图3b涉及具有边界体积结构的层级。图3a示出了包括三个对象302、304和306的场景300。图3b示出了分层加速结构的节点,其中根节点310表示整个场景300。图3a中所示的场景中的区域具有与图3b中所示的层级中的相应的节点的附图标记相匹配的附图标记,但图3a中区域的附图标记包括附加的基本符号(')。分析场景中的对象以便构建层级,并且从节点310向下定义绑定包含对象的区域的两个节点312

当遍历用于场景中的射线的交叉测试的分层加速结构时,最初针对根节点测试射线。如果在射线与节点之间发现交叉,则可以测试射线与作为交叉节点的子节点的一个或多个节点的交叉。有很多不同的遍历技术可以用于遍历分层加速结构,诸如深度优先遍历技术和广度优先遍历技术。在深度优先遍历技术中,可以测试交叉节点的子节点的子集(例如,交叉节点的单个子节点)的交叉,然后可选地测试交叉节点的其他子节点的交叉,这取决于先前的交叉测试的结果。相反,根据广度优先遍历技术,如果在射线与节点之间发现交叉,则可以测试射线与作为交叉节点的子节点的所有节点的交叉,然后针对这些子节点中的任何一个执行交叉测试。

利用当前现有技术的加速结构,难以按照适合于尤其是在对硅面积、成本和功耗具有严格限制的设备上、诸如在移动设备(例如,智能手机、平板计算机、笔记本计算机等)上实时绘出图像(例如,用于与游戏应用一起使用)的速率执行射线跟踪中涉及的过程(例如,构建加速结构,执行交叉测试并且根据交叉测试的结果执行着色器程序)。此外,加速结构需要存储在例如存储器中,并且这可能涉及存储大量数据,这增加了系统的存储器要求并且还表示在存储器与实现射线跟踪系统的芯片之间传输大量数据。大量数据的传输(即,高存储器带宽)通常对应于射线跟踪系统的高延时(latency)和功耗。

发明内容

提供本“发明内容”是为了以简化的形式介绍一些概念,这些概念将在下面的“具体实施方式”中被进一步描述。本“发明内容”并非旨在标识所要求保护的主题的关键特征或必要特征,也并非旨在用于限制所要求保护的主题的范围。

在本文中描述的实施例中,生成表示3D场景的子集的减小的加速结构。3D场景的子集包括部分但不是整个3D场景。以这种方式,减小的加速结构比表示整个3D场景的加速结构(其可以称为“世界空间加速结构”)更小(例如,在加速结构中的节点数目方面,和/或在用于表示加速结构的数据量方面)。被包括在加速结构中的节点的数目的减少减少了在为了交叉测试的目的而遍历加速结构时被执行的处理量。此外,用于表示加速结构的数据量的减少减少了存储在存储器中的用于表示加速结构的数据量并且减少了在存储器与实现射线跟踪系统的芯片之间传输的数据量,从而减少了射线跟踪系统的延时和功耗。

特别地,提供了一种计算机实现的方法,其生成一个或多个减小的加速结构,一个或多个减小的加速结构件将被用于在用于处理(例如,绘出)3D场景的射线跟踪系统中的交叉测试,该方法包括:确定一个或多个减小的加速结构的节点,其中一个或多个减小的加速结构中的每个表示3D场景的相应的子集;以及存储一个或多个减小的加速结构以用于交叉测试。

一个或多个减小的加速结构中的每个可以表示3D场景中的相应的基元子集。一个或多个减小的加速结构中的每个可以表示3D场景内的相应的子区域(例如,感兴趣的区域)。例如,感兴趣的区域可以对应于场景中的视图区域,例如视锥体(view frustum)。可以基于从其为帧绘出场景的视点来确定帧的感兴趣的区域。至少一个减小的加速结构的节点可以在视图空间(view space)或剪辑空间(clip space)中被定义。以这种方式,减小的加速结构可以表示在视图空间或剪辑空间中定义的场景的几何结构。在一些示例中,可以经由API接收视图空间的指示。

可以提供一种计算机实现的方法,其生成减小的加速结构,减小的加速结构将被用于在用于绘出3D场景中的基元的射线跟踪系统中的交叉测试,该方法包括:确定减小的加速结构的节点,其中减小的加速结构表示3D场景中的基元子集;以及存储减小的加速结构以用于交叉测试。

提供了一种处理模块,被配置为生成一个或多个减小的加速结构,以用于在用于处理3D场景的射线跟踪系统中的交叉测试,处理模块包括:被配置为确定一个或多个减小的加速结构的节点的加速结构构建逻辑,其中一个或多个减小的加速结构中的每个表示3D场景的相应的子集;其中处理模块被配置为尤其一个或多个减小的加速结构被存储以用于交叉测试。此外,可以提供一种用于处理3D场景的射线跟踪单元,其包括:如本文所述的处理模块;以及被配置为通过遍历一个或多个减小的加速结构来执行交叉测试的交叉测试逻辑。

可以提供一种顶点处理流水线(例如,用于射线跟踪系统),用于从视点处理(例如,绘出)场景,其中顶点处理流水线被配置为:接收场景的几何结构;通过基于视点对接收的几何结构执行剪辑和剔除(culling)中的一种或两种来处理接收的几何结构以确定相关几何结构;以及从确定的相关几何结构(例如,未剔除的几何结构)构建减小的加速结构。例如,当从视点观看场景时超出界限的几何结构可以被剪辑和剔除,从而使得仅从视点来看存在于场景的视图内的几何结构被保持和包括在减小的加速结构中。在一些示例中,可以不剪辑基元,但是如果基元完全位于正在针对其构建减小的加速结构的场景的相关子区域之外(例如,与从视点观看的场景对应的视图中的视锥体),则基元被剔除。此外,在一些示例中,可以实现背面剔除,从而使得背面基元被剔除。

本文中描述的射线跟踪单元和处理模块可以在集成电路上被体现在硬件中。可以提供一种在集成电路制造系统中制造如本文所述的射线跟踪单元或处理模块的方法。可以提供一种集成电路定义数据集,其当在集成电路制造系统中被处理时将系统配置为制造如本文所述的射线跟踪单元或处理模块。可以提供一种非暂态计算机可读存储介质,其上存储有集成电路的计算机可读描述,计算机可读描述在被处理时使得布局处理系统生成在集成电路制造系统中使用以制造如本文所述的射线跟踪单元或处理模块的电路布局描述。

可以提供一种集成电路制造系统,其包括:其上存储有计算机可读集成电路描述的非暂态计算机可读存储介质,计算机可读集成电路描述描述了如本文所述的射线跟踪单元或处理模块;被配置为处理集成电路描述以生成实施射线跟踪单元或处理模块的集成电路的电路布局描述的布局处理系统;被配置为根据电路布局描述来制造射线跟踪单元或处理模块的集成电路生成系统。

可以提供一种用于执行本文中描述的任何方法的计算机程序代码。可以提供一种其上存储有计算机可读指令的非暂态计算机可读存储介质,计算机可读指令当在计算机系统处执行时使得计算机系统执行本文所述的任何方法。

如对技术人员很清楚的,上述特征可以被适当地组合,并且可以与本文中描述的示例的任何方面组合。

附图说明

现在将参考附图详细描述实施例,在附图中:

图1示出了从视点被绘出的示例场景;

图2a示出了根据四叉树结构而被划分的场景;

图2b表示图2a中所示的四叉树结构的分层加速结构;

图3a示出了根据边界体积结构而被划分的场景;

图3b表示图3a中所示的边界体积结构的分层加速结构;

图4示出了射线跟踪系统;

图5是生成减小的加速结构的方法的流程图;

图6是在射线跟踪系统中执行交叉测试的方法的流程图。

图7示出了场景内的感兴趣的区域;

图8示出了与绘出空间的两个相应的图块(tile)对应的场景内的两个区域;

图9a示出了世界空间层级的节点;

图9b示出了与图9a中所示的世界空间层级的节点对应的场景内的体积元素;

图9c示出了与图9a中所示的世界空间层级的子集对应的减小的加速结构的节点;

图10示出了游戏引擎、几何流水线和射线跟踪流水线之间的交叉;

图11示出了从视点被绘出的场景,其中场景由点光源和定向光源照亮;

图12示出了其中实现射线跟踪单元的计算机系统;以及

图13示出了用于生成实施射线跟踪单元或处理模块的集成电路的集成电路制造系统。

附图示出了各种示例。技术人员将理解,附图中示出的元件边界(例如,框、框组或其他形状)表示边界的一个示例。在一些示例中,可以将一个元素设计为多个元素,或者可以将多个元素设计为一个元素。在适当的情况下,在整个附图中使用共同的附图标记来表示类似的特征。

具体实施方式

通过示例的方式呈现以下描述以使得本领域技术人员能够制造和使用本发明。本发明不限于本文中描述的实施例,并且对所公开的实施例的各种修改对于本领域技术人员来说是很清楚的。

现在将仅通过示例的方式描述实施例。

可以参考很多不同的“空间”来描述要被绘出的场景中的对象,并且可以执行变换以将对象的坐标变换到不同的空间中。在很多光栅流水线中,对象最初在“对象空间”(或“局部空间”)中被描述,对象空间是每个对象的唯一坐标系,其中对象的坐标相对于其本地原点而被定义的。以这种方式,可以参考不同的对象空间来描述不同的对象。然后可以将对象变换到“世界空间”中,这是所有对象的统一坐标系,其中对象的坐标相对于全局原点而被定义。以这种方式,可以在世界空间中描述不同对象在场景中的相对位置。可以定义要从其绘出场景的视点,并且可以将场景中的对象从世界空间变换到“视图空间”(或“眼睛空间”)中,视图空间是围绕观看者的坐标系,其具有某些约定,从而使得能够从观看者的角度定义坐标。例如,在一些示例中,视图空间中的对象的坐标可以根据轴来定义,其中+x是观看者的右边,+y是从观看者的角度向下,并且+z远离观看者。在其他示例中,可以不同地定义轴,但是“视图空间”的概念表示坐标系相对于观看者而被定义,例如,视图空间中的坐标已经针对观看者的位置和取向进行了变换和调节。

然后,在视图空间中定义的场景可以被投影到“剪辑空间”中,从而为对象的每个顶点产生4维点(x,y,z,w)。以这种方式,剪辑(例如,丢弃)超出预期范围(例如,预期范围(-1000,+1000))的任何坐标(在视图空间中)。这些4D点通过'w'分量而被划分,以在“归一化设备坐标”中产生3维点(x,y,深度),例如,其值在范围(-1.0,+1.0)内。然后可以将坐标变换到“屏幕空间”中,其中每个点由具有相应的深度(z缓冲器)值的二维位置(由x和y坐标定义的)定义。可以通过以下方式来执行到屏幕空间中的变换:将归一化设备坐标的x和y分量除以2再加上0.5(使得值位于范围(0,1)中),并且x、y原点被移动到屏幕角落而不是屏幕中心),并且按屏幕分辨率缩放x和y分量以在屏幕上产生2D“屏幕空间”x和y坐标。在归一化设备坐标与屏幕空间坐标之间不改变深度值(在z缓冲器中)。

可以通过将坐标乘以变换矩阵来执行从一个空间到另一空间的坐标变换。在上述简单示例中,如下对坐标变换:(i)从对象空间到世界空间,(ii)从世界空间到视图空间,(iii)从视图空间到剪辑空间,(iv)从剪辑空间到归一化设备坐标,以及(v)从归一化设备坐标到屏幕空间。然而,在一些示例中,通过单个变换矩阵相乘,可以将上述两个或更多个变换实现为单个步骤。例如,从对象空间到剪辑空间的变换(即,上述变换(i)到(iii))可以折叠成单个矩阵乘法运算,因此数据在栅格流水线中可能永远不会存在于世界空间或视图空间中。

在先前的射线跟踪系统中,完全遍历表示整个场景中的几何结构的世界空间加速结构以确定射线与场景中的对象的最近交叉。在本文中的示例中,关于要跟踪的射线的信息(例如,射线的原点或目的地,其可以例如基于要从其绘出场景的视点来确定)用于提高射线跟踪系统处理射线的效率。例如,可以生成减小的层级,其包括较大世界空间的子区域或感兴趣的区域内的几何结构(例如,已经变换到视图空间或剪辑空间中的几何结构),并且不包括不是至少部分在感兴趣的子区域或区域内的几何结构。例如,世界空间可以描述角色可以在游戏应用中移动通过其的建筑物,而子区域可以对应于角色当前所在的建筑物内的房间(或建筑物内的其他可见子区域)。场景中的射线的最近交叉可能是与位于与从观看者的视点可观看的场景内的视锥体对应的子区域内的几何结构的交叉。这样,遍历与子区域内的几何结构对应的减小的层级可能足以找到场景中射线与几何结构的最近交叉。这对于初级射线尤其可能,但对于次级射线可能稍微不太可能。如果射线在减小的加速结构内没有找到交叉,则射线可以被发射或不被发射到不同的加速结构中,例如,表示整个场景的世界空间加速结构。为世界空间加速结构中的几何结构存储的数据的精度可以低于为减小的加速结构中的几何结构存储的数据的精度。

在一些示例中,射线跟踪系统可以被实现为基于图块的绘出系统的一部分,并且可以为基于图块的绘出系统中的绘出空间的多个图块中的每个图块生成相应的减小的加速结构。以这种方式,图块的减小的加速结构表示可以在绘出空间的图块内看到的场景的几何结构。因此,可以在与图块对应的减小的加速结构内测试针对这个图块而处理的射线的交叉。这大大减少了需要对射线执行的交叉测试的数目(与遍历世界空间层级相比)。当在基于图块的绘出系统内处理主射线时,系统可以简单地基于射线的属性(例如,射线原点和射线方向)标识主射线被跟踪的图块,因为图块在绘出空间中的位置是已知的,而无需执行任何特定处理。因此,选择要被遍历以进行主射线的交叉测试的正确的每图块的减小的加速结构是很简单的。每图块的减小的加速结构对于主射线是有用的,但是在发现任何交叉之前,次级射线可以在与减小的加速结构对应的场景的子区域之外行进,因此次级射线可以被发射到另外的加速结构中(例如,视图空间层级或世界空间层级)以查找次级射线的交叉。视图空间层级可以表示正在绘出的场景的视图的场景内的视锥体。然而,更一般地,视图空间层级可以表示感兴趣的体积(例如,角色所在的房间,即使整个房间不在视锥体内)。

在本文中描述的示例中,针对特定功能(例如,观看场景的特定子区域,或用于确定来自特定光源的阴影)构建一个或多个减小的加速结构。减小的加速结构可以具有针对特定功能而优化的结构。换言之,可以生成单独的用例优化的加速结构。可以在减少用于存储加速结构的数据量方面和/或在减少要在交叉测试期间遍历加速结构所需要的处理方面优化减小的加速结构。在以下两者之间存在折衷:(i)优化减小的加速结构(例如,通过减小由减小的加速结构表示的场景内的子区域的尺寸),以及(ii)减少针对减小的加速结构进行测试以进行交叉测试的射线在减小的加速结构中没有找到交叉的次数(例如,通过增加由减小的加速结构表示的场景内的子区域的尺寸)。如本文所述,当射线在减小的加速结构中没有找到交叉时,射线可以被发射到另外的加速结构中;或者替代地,射线可以不重新发射,并且可以容忍在减小的加速结构中缺失几何结构的射线的后果(例如,绘出假象或默认着色器行为)。因此,基于减小的加速度结构的用途,减小的加速结构表示可能找到交叉的场景的子集,但是不表示不太可能找到交叉的场景的部分。

在一些示例中,顶点处理流水线具有定义的视图空间,并且能够在从未被剔除的几何结构构建层级之前基于该视图空间来剪辑和/或剔除几何结构。这可以包括剪辑超出界限的几何结构。然而,剪辑三角形可能没有必要或甚至没有效率,从而使得在一些示例中三角形不被剪辑,但是如果三角形完全位于正在构建层级的场景的子区域(例如,视锥体)之外,则可以剔除三角形。此外,在一些示例中,在决定是否剔除基元时可以考虑基元的取向。以这种方式,可以实现背面剔除,由此可以剔除不面向观看者的单侧三角形(或“基元”),从而使得它们不被包括在层级中。

使用如本文所述的减小的加速结构可以提高由射线跟踪系统执行的交叉测试的效率,并且可以减少用于存储加速结构的存储器存储要求,并且可以减少在射线跟踪单元与存储器之间传送的数据量,从而减少射线跟踪系统的延时和功耗。

图4示出了被配置为绘出3D场景的图像的射线跟踪系统400。射线跟踪系统400包括被配置为执行交叉测试并且响应于标识交叉而执行着色器程序的射线跟踪单元402。射线跟踪单元402包括被配置为生成分层加速结构以用于射线跟踪系统400中的交叉测试的处理模块404。射线跟踪单元402还包括预处理逻辑403、交叉测试逻辑406和处理逻辑408。射线跟踪系统400还包括耦合到射线跟踪单元402的多个不同的存储器(410到418)。图4示出了存储器(410到418)在射线跟踪单元402外部被实现并且被耦合到其,但是在一些示例中,存储器(410至418)中的一个或多个可以被实现为射线跟踪单元402的一部分。特别地,射线跟踪系统400包括场景几何数据存储库410、加速结构存储库412、射线数据存储库414、着色器程序存储库416和输出缓冲器418。

场景几何数据存储库410被配置为存储定义要被绘出的场景中的几何结构的数据。射线跟踪单元402耦合到场景几何数据存储库410并且被配置为接收定义场景中的几何结构的数据(例如,以描述场景中的对象的基元的形式)。预处理逻辑403是射线跟踪单元402的可选组件,这是它在图4中用虚线示出的原因。在一些示例中,预处理逻辑403存在于射线跟踪单元402内,并且从场景几何数据存储库410提供给预处理逻辑403的几何数据(表示要被绘出的3D场景中的基元)尚未被变换到视图空间(或剪辑空间)中,例如,几何数据可以在对象空间或世界空间中。在这些示例中,预处理逻辑403被配置为对3D场景中的基元执行预处理,其中预处理可以包括对基元进行剪辑和变换中的一种或两种。经预处理(例如,剪辑和变换的)的基元从预处理逻辑403输出并且提供给处理模块404和交叉测试逻辑406。然而,在一些其他示例中,可以在射线跟踪单元402处接收顶点数据之前,执行顶点处理(例如,通过对处理单元执行顶点着色器程序)。例如,顶点变换流水线可以处理基元的顶点以将顶点变换到视图空间或剪辑空间中,并且经变换的顶点数据可以存储在场景几何数据存储库410中。因此,当从场景几何数据存储库410接收几何数据时,它已经在视图空间(或剪辑空间)坐标中定义。视图空间(或剪辑空间)顶点可以被馈送到处理模块404中以便构建加速结构,而不需要在射线跟踪单元402中执行任何预处理。因此,在这些示例中,预处理逻辑403不存在于射线跟踪单元402内,并且从场景几何数据存储库410输出的几何数据被提供给处理模块404和交叉测试逻辑406。处理模块404包括输入420和加速结构构建逻辑422,并且被配置为使用其接收的几何数据来生成描述场景内的几何结构的一个或多个分层加速结构。加速结构构建逻辑422可以被实现在通用处理硬件上执行的软件中,或者可以被实现在硬件中,例如,在物理地配置为实现如本文所述的加速结构构建逻辑422的功能的固定功能电路中被实现。下面参考图5描述分层加速结构的生成,并且这个生成包括生成至少一个减小的加速结构。由处理模块404提供的分层加速结构被传递到加速结构存储库412并且存储在加速结构存储库412中。

交叉测试逻辑406被配置为访问存储在存储器412中的分层加速结构。交叉测试逻辑406还被布置为接收场景几何数据(其可以已经被或未被预处理逻辑403处理)并且接收定义要穿过加速结构的射线的射线数据。如果预处理逻辑403存在于射线跟踪单元402中,则预处理逻辑403可以将射线变换到场景几何已经被变换到的相同空间(例如,视图空间或剪辑空间)中。如果预处理逻辑403没有存在于射线跟踪单元402中,则射线跟踪单元402可以假定在射线跟踪单元402处接收的几何结构和射线都被定义在相同的空间(例如,视图空间或剪辑空间)中,从而使得可以正确地执行交叉测试。交叉测试逻辑506包括用于执行交叉测试的一个或多个执行单元,其可以在固定功能硬件中被实现,例如,专用电路。交叉测试逻辑406被配置为通过遍历分层加速结构来执行交叉测试,如下面参考图6所述。

在前两段中描述的示例中,处理模块404接收经变换的几何数据,即,已经在视图空间(或剪辑空间)坐标中定义的几何数据。在其他示例中,处理模块404可以接收未经变换的几何数据,并且处理模块404(例如,加速结构构建逻辑422)被配置为将几何数据的顶点变换到视图空间或剪辑空间中,并且然后为经变换的几何数据构建加速结构。在这些其他示例中,不需要预处理逻辑403,并且不需要在射线跟踪单元402处接收几何数据之前将几何数据变换到视图空间中。

交叉测试的结果被传递到处理逻辑408。处理逻辑408包括一个或多个执行单元,并且被配置为使用加速结构的遍历的结果来绘出3D场景的图像。特别地,处理逻辑408可以响应于场景中的射线与基元之间的交叉的指示而执行着色器程序(例如,已经从着色器程序存储库416接收的软件程序)。在处理逻辑408处的着色器程序的执行可以导致一个或多个射线(其可以被称为“次级射线”)的发射,这些射线可以被传递回交叉测试逻辑406以进行交叉测试。在处理逻辑408处的着色器程序的执行还可以确定可以存储在输出缓冲器418中的图像值(例如,像素值)。输出缓冲器418(可以被称为帧缓冲器)可以存储由射线跟踪系统400绘出的图像的像素值。

图5是用于生成用于在射线跟踪系统400中进行交叉测试的减小的加速结构的方法的流程图。在步骤S502中,在处理模块404的输入420处接收要被绘出的3D场景中的基元的基元数据。在图4所示的示例中,可以从预处理逻辑403接收基元数据(或“几何数据”),并且可以在视图空间或剪辑空间中定义基元数据(或“几何数据”)。因此,在一些示例中,在确定一个或多个减小的加速结构的节点之前,由预处理逻辑403对3D场景中的基元执行预处理。

在一些示例中,从场景几何数据存储库410接收的基元数据可能尚未被变换到视图空间或剪辑空间中。例如,可以在相应的对象空间中定义对象的所接收的几何数据。可以针对不同的对象或不同组的对象确定相应的加速结构。可以合并不同的加速结构以创建一个或多个复合加速结构。这可以将帧之间的加速结构构建过程加速,由此针对前一帧而被构建的加速结构(例如,表示场景中的静态几何结构)可以被用作当前帧的加速结构构建过程的输入。动态对象的加速结构可以与来自前一帧的静态几何结构的加速结构合并,以便针对当前帧生成合并的加速结构。随着视点在帧之间变化,可以由加速结构构建逻辑422针对每个帧将各个对象空间加速结构重新变换到适当的视图空间中。可以在美国专利申请号15/464729中找到可以将单独的加速结构合并在一起的方法的解释。

通常,加速结构构建逻辑422被配置为构建引用基元的通用数据结构。这种数据结构可以是简单的基元列表(例如,在参数缓冲器中)。然而,在一些示例中,加速结构构建逻辑422被配置为构建超出简单的基元列表的更丰富的索引结构。在这些示例中,加速结构构建逻辑422可以创建更高级的加速结构,诸如边界体积层级(BVH)、深度排序的区间、kd树或oct树等。

在步骤S504中,加速结构构建逻辑422确定场景的一个或多个减小的加速结构的节点。如下所述,这可以在不同示例中以多种不同方式而被进行。加速结构的节点表示3D场景内的体积元素。一个或多个减小的加速结构被构建,其中一个或多个减小的加速结构中的每个减小的加速结构表示3D场景的相应的子集。加速结构可以具有边界体积结构和/或空间细分结构。用于分析场景内的基元以确定加速结构的节点的方法在本领域中是已知的。例如,在美国专利号8717357中描述了用于分析场景内的基元以根据边界体积结构来确定加速结构的节点的方法。例如,加速结构构建逻辑422可以标识哪些基元存在于3D场景中的体积元素内。逻辑422可以确定分层加速结构的叶节点的基元指示,以指示存在于与各个叶节点对应的体积元素内的基元。

减小的加速结构在其不是表示整个3D场景而是仅表示3D场景的子集(例如,3D场景中的基元子集)的意义上被“减小”。因此,“子集”可以被认为是“真子集”。3D场景由应用提交给绘出系统以用于绘出的几何数据来表示。可以通过从较大的加速结构剔除节点(例如,通过从表示整个3D场景的世界空间加速结构剔除节点)来生成减小的加速结构,但是在一些示例中,可以生成减小的加速结构而不参考更大的加速度结构(即,没有“减小”更大的超集层级的有效步骤)。实际上,在一些示例中,不存在更大的加速结构(诸如整个场景层级)。例如,客户端或游戏引擎可以管理减小的层级,而不需要构成以任何具体形式存在的较大层级的一组几何结构。例如,场景子集的几何结构子集可以从存储器中分页,或者甚至可以在运行中生成。可以针对特定功能优化减小的加速结构。例如,可以针对特定视图方向优化减小的加速结构,从而使得其表示3D场景的视图区域(例如,视图视锥体)内的几何结构,用于针对视图区域内的几何结构进行射线的交叉测试。

作为另一示例,可以针对特定射线方向优化减小的加速结构,从而使得其表示可以从特定射线方向观看的几何结构,以用于确定由沿着特定射线方向定位的光源使得的阴影效应。例如,可以为3D场景的一个或多个光源中的每个生成相应的减小的加速结构,其中光源的减小的加速结构表示可以从光源向要在3D场景的视图空间内绘出的基元上投射阴影的场景的子区域内的基元。

当已经构建了一个或多个减小的加速结构时,在步骤S506中,将减小的加速结构存储在加速结构存储库412中,以便随后用于交叉测试。特别地,处理模块404将减小的加速结构发送到存储器412以存储在其中。如前所述,尽管加速结构存储库412在图4中示出为在射线跟踪单元402外部(例如,存储器412可以在系统存储器中被实现并且经由系统总线被耦合到射线跟踪单元402),但是在一些示例中,加速结构存储库412可以被实现为射线跟踪单元402的一部分,例如在芯片上被实现。

图7示出了场景702内的感兴趣的区域704(或“子区域”或“感兴趣部分”)的示例。作为示例,场景可以对应于游戏的角色当前所在的整个城市,而感兴趣的区域704可以对应于角色当前所在的城市内的建筑物。在一些示例中,感兴趣的区域704可以对应于在视图空间(或剪辑空间或屏幕空间)方面定义的场景的子集,其中场景的子集可以表示要从其绘出场景的视图的视点的视锥体内的场景的一部分。在一些示例中,加速结构构建逻辑422基于要从其为帧绘出场景的视点来确定帧的感兴趣的区域。换言之,加速结构构建逻辑422使用要从其绘出场景的视点的指示来确定场景的哪些部分位于视锥体内。可以生成减小的加速结构以仅表示位于子区域704内的几何结构。从图7可以理解,子区域704可以显著小于场景702。因此,减小的加速结构表示子区域704可以明显小于表示整个场景702的世界空间加速结构(在用于表示加速结构的数据量方面和在加速结构内的节点的数目方面)。

在一些示例中,提交要被绘出的几何数据的应用(例如,游戏应用)还可以定义要为其生成加速结构的视图空间(或感兴趣的区域)。在这些示例中,加速结构构建逻辑422可以经由应用程序编程接口(API)接收视点(即,视图空间)的指示。图10示出了游戏引擎1002、几何流水线1004和射线跟踪流水线1006之间的交互。在1008处,游戏引擎选择要从其绘出场景的观看位置。在1010处,游戏引擎经由API向几何流水线1004提交几何结构和观看位置。提交用于绘出当前帧的数据包括针对当前帧定义从当前视点被绘出的可见几何结构和可见几何结构的照明效果所需要的数据。可以从先前绘出的帧重用一些数据(例如,对于帧序列上的静态数据),并且这样的数据可能不需要针对当前帧重新提交。因此,提交的数据可以取决于先前提交的内容,例如任何先前提交的数据是否可以重新用于当前绘出。例如,经绘出的帧中的阴影可能会随着绘出场景的视点而发生变化,因为被遮蔽的几何结构会随着视点而变化。但是,在某些情况下,如果在针对前一帧生成的阴影层级中包含足够的几何结构,例如,如果当前视点可见的所有几何结构都已经被包括在阴影层级中,则阴影可能不会随着视点而改变。在另一示例中,几何流水线可以按照低于全帧速率的速率从主视点构建层级。在这个实施例中,视点的层级可以每秒30次更新地定期更新,而射线跟踪流水线可以每秒120帧地绘出帧。或者替代地,当视点基本上偏离从其构建最后层级的视点时,可以重新生成层级。

几何流水线1004可以生成多个(n个)层级,其中n>=1。如本文所述,“层级”是可以由将来的绘出操作引用的场景几何结构的已处理版本。层级可以引用原始几何数据,或者是几何数据的已处理副本或几何数据的子集。在1012

图10示出了可以与几何流水线1004并行操作的射线跟踪流水线1006。当射线跟踪流水线1006使用由几何流水线1004构造的层级时,存在数据依赖性(其可以用API中的存储器栅栏表示),但是针对场景的一部分或前一帧的绘出可以由射线跟踪流水线1006在几何流水线1004处理场景的另一帧或部分的同时(即,并行地)执行。一个或多个层级(其可以包括一个或多个减小的层级)可用于射线跟踪流水线。射线跟踪流水线与几何流水线异步操作。射线跟踪流水线可以使用在先前操作中构造的一个或多个层级来绘出帧。或者,几何流水线可以处理多个层级以为射线跟踪流水线的一个操作生成先决条件数据。在1018处,射线跟踪流水线从存储器接收一个或多个层级(例如,从图4中所示的加速结构数据存储器412)。在1020处,使用一个或多个接收的层级处理射线。例如,可以针对所接收的层级执行射线的交叉测试,并且可以基于交叉测试的结果来执行着色器程序。在1022处,将结果存储在帧缓冲器(例如,图4中所示的输出缓冲器418)中。在1024处,使帧缓冲器可用于显示。

图10中所示的流水线的不同步骤可以在射线跟踪系统内的不同功能组件中被实现。例如,几何结构变换(1012)可以由顶点变换模块实现,顶点变换模块可以用专用的固定功能硬件或在处理单元中执行的软件而被实现。步骤1014、1018和1020可以由专用硬件模块、软件模块或其组合中的射线跟踪单元(诸如图4中所示的射线跟踪单元402)而被实现。

为不同目的(例如,具有不同视图空间)创建不同层级,并且射线跟踪流水线1006的绘出操作可以在绘出最终输出的过程中使用若干层级。例如,对一个层级中的交叉的结果执行的着色器程序可以使得射线被发射到另一层级中以绘出特定效果,如阴影或反射。

一些示例使用带有单独入口点的显式API来生成层级,并且然后使用它们。但是,其他一些示例允许使用模拟单个流水线的即时模式API。以这种方式,可以通过即时模式API公开射线跟踪流水线。驱动程序将隐藏所创建的中间层级。

图6是在射线跟踪系统400中执行交叉测试的方法的流程图。在步骤S602中,交叉测试逻辑406从加速结构存储库412接收表示场景的各个子集中的几何结构的减小的加速结构。交叉测试逻辑406可以接收或不接收表示整个场景中的几何结构的世界空间加速结构。交叉测试逻辑406还可以从场景几何数据存储库410接收几何数据(例如,基元数据)。在步骤S604中,交叉测试逻辑406接收定义要针对加速度结构进行测试的射线的数据。射线数据可以从射线数据存储库414接收。射线数据可以存储在交叉测试逻辑406内的射线高速缓存中,从而使得它可以被多次使用而无需在每次使用时都从存储器414获取数据。

在步骤S606中,交叉测试逻辑406遍历减小的加速结构,从而针对由减小的加速结构表示的场景的子集中的几何结构对射线执行交叉测试。在本领域中已知用于测试射线是否与由层级中的节点表示的体积(例如,轴对齐的边界框)相交的方法。如上所述,遍历可以根据任何合适的技术而被实现,诸如深度优先遍历技术或广度优先遍历技术。可以根据由节点表示的区域的“深度”(即,距相机视点的距离)对节点进行深度排序,从而使得在深度优先遍历技术中(其中现在“深度”是指树空间拓扑),在与场景中的较远区域对应的节点之前测试与场景中的较近区域对应的节点。以这种方式,如果找到具有相对接近基元的交叉,则可以跳过对较远距离基元的交叉测试。

由交叉测试逻辑506执行的交叉测试的结果指示对于每个测试的射线是否在场景中找到了交叉(即,“命中”或“未命中”),并且如果找到了命中,则发现结果可以指示哪个基元已经被交叉(例如,通常是相交的基元中最近的基元,其中射线已经交叉多于一个基元)。结果还可以指示交叉基元内的交叉的位置(例如,使用重心坐标)。在步骤S608中,交叉测试逻辑406确定在步骤S606中的减小的加速结构的遍历期间是否发现了射线的命中。如果发现了命中,则该方法转到步骤S610。

可以将交叉测试的结果传递到处理逻辑408。在步骤S610中,处理逻辑408使用交叉测试结果例如用于绘出3D场景的图像。例如,处理逻辑408包括用于执行着色器程序的执行单元。着色器程序可以从着色器程序存储库器416被检索。在处理逻辑408处执行着色器程序的结果可以是正被绘出的图像的绘出的像素值,并且在这种情况下,绘出的像素值可以被提供给输出缓冲器418以用于存储在其中。如上所述,着色器程序的执行可以将一个或多个射线(次级射线)发射到场景中,这些射线被传递回交叉测试逻辑406以进行交叉测试。

如果在步骤S608中,在步骤S606中的减小的加速结构的遍历期间没有发现射线的命中,则该方法转到步骤S612。在步骤S612中,交叉测试逻辑406确定是否存在要针对射线进行遍历的另外的加速结构,即,尚未针对射线进行遍历的加速结构。如果没有要针对射线进行遍历的其他加速结构,则该方法转到步骤S610,在步骤S610中,处理逻辑408相应地使用射线的“未命中”结果例如用于绘出3D场景的图像。在一些示例中,当遇到未命中结果时,可以在步骤S610中执行“未命中着色器程序”。未命中着色器程序可以被编程为具有用于处理未命中结果的任何合适的功能,并且可以使得另外的射线被重新发射到从其获取未命中结果的相同层级中或者被重新发射到不同层级中用于另外的交叉测试。

如果在步骤S612中确定存在要针对射线进行遍历的另外的加速度结构,则该方法转到步骤S614。在步骤S614中,射线被发射到另外的加速结构中。例如,另外的加速结构可以是表示整个3D场景的世界空间加速结构。在一些示例中,另外的加速结构可以是表示3D场景的子集的另一减小的加速结构。例如,要遍历的第一减小的加速结构可以表示3D场景的相对较小的子集,并且因此第二减小的加速结构可以表示3D场景的相对较大的子集。

在步骤S616中,交叉测试逻辑406遍历另外的加速结构。步骤S616中的另外的加速结构的遍历类似于步骤S606中的减小的加速结构的遍历。这样,可以使用任何合适的遍历技术,例如,深度优先遍历技术或广度优先遍历技术。

该方法从步骤S616转到上面描述的步骤S608。

在一些示例中,生成多于一个减小的加速结构,其中每个减小的加速结构表示3D场景内的相应的子区域。每个子区域不是包括整个3D场景。由各个减小的加速结构表示的子区域可以彼此重叠,也可以不重叠。

图11示出了要从视点1104被绘出的场景1102。场景中的对象由点光源1106(例如,灯泡)和定向光源1108照亮。不同的减小的加速结构可以用于不同的目的。例如,可以确定一个减小的加速结构,用于对源自视点1104的主射线(“相机射线”)执行交叉测试的目的。可以如上所述确定相机射线的减小的加速结构,例如,基于位于视点1104的视锥体内的场景1102的子区域。此外,可以针对来自特定光源的阴影射线确定减小的加速结构。例如,可以使用透视投影将几何结构变换到与来自点光源1106的场景的视图对应的视图空间中。以这种方式,光源1106的减小的加速结构可以表示从光源1106的角度来看的视锥体内的场景的几何结构。此外,用于光源的减小的加速结构的生成包括对从光源的角度来看的场景中的基元执行剪辑和剔除操作中的一种或两种。例如,可以从光源的角度执行剔除面部取向(即,背面剔除)、视锥体剔除、近和远剪辑平面上的剪辑。作为另一示例,可以使用正交投影将几何结构变换到与来自定向光源1108的场景的视图对应的视图空间中。以这种方式,用于定向光源1108的减小的加速结构可以表示从定向光源1108的视点来看在视锥体内的场景中的几何结构。与上面针对点光源描述的类似,可以从定向光源1108的角度执行剪辑和/或剔除操作,例如,剔除面部取向(即,背面剔除)、视锥体剔除、近和远剪辑平面等。针对各个光源1106和1108而被确定的减小的加速结构表示场景1102的相应的子集,从而使得它们可以小于表示整个场景的世界空间加速结构。

为了从视点1104绘出场景1102的图像,从视点1104投射主射线,并且对与视点1104对应的减小的加速结构执行交叉测试。如果找到交叉,则执行着色器程序,其可以发射阴影射线(或“遮挡射线”)。可以使用针对各个光源1106和1108确定的每个减小的加速结构对阴影射线执行交叉测试,以便确定由每个光源产生的阴影效应。

不同的层级可以具有不同的特性,诸如不同的方向优化、包括场景内的基元的不同子集、以及由层级表示的基元的不同细节水平。此外,不同的层级可以具有不同的格式。例如,方向优化的层级可以用于主射线,而边界框层级可以用于全局照明射线(例如,来自定向光源1108)。响应于一个层级中的射线交叉而运行的着色器可以向不同层级中发射一个或多个射线(次级射线,诸如遮挡射线)。

在一些示例中,针对要被绘出3D场景的绘出空间的多个区域中的每个区域生成相应的减小的加速结构。绘出空间是二维的。绘出空间的区域可以各自小于整个绘出空间,从而使得每个减小的加速结构表示总视图空间的子部分。例如,射线跟踪系统400可以在基于图块的绘出系统中被实现,并且绘出空间的区域可以对应于基于图块的绘出系统的图块。

图8示出了从视点804观看场景802的不同示例。在806处表示正在绘出场景的绘出空间(即,要被绘出的帧的视图平面)。绘出空间806被示出为被细分为多个区域。每个区域可以是绘出空间806的图块。然而,在一些示例中,绘出空间的区域与图块之间的映射可以不是确切地一对一的。例如,每个区域可以对应于绘出空间的多于一个图块。在图8所示的示例中,绘出空间被细分为以4×4模式排列的16个区域,其中两个区域被标记为808

如本文所述,加速结构是加速搜索基元的索引结构,例如,用于射线跟踪系统中的交叉测试。定向优化的加速结构非常适合于搜索与来自相干或近似相干投影的射线相交的基元。例如,可以组织或划分定向优化的加速结构内的几何结构,从而使得对于与层级的优化的投影对准的射线,需要加速结构的较少粗粒度测试。这些优化可以降低具有与优化的方向或取向基本上不同的方向或取向的射线的效率。定向优化的加速结构对于相机射线(即,眼睛射线)是理想的,其中大多数射线源自相同的视点。这对于会聚在点上或会聚在场景区域附近的射线也是理想的,就像针对光源测试阴影射线所需要的。此外,使用正交投影来创建加速结构对于测试所有具有非常相似方向的射线非常有用,例如来自诸如太阳或一组相干镜面反射等定向光源的阴影。

换言之,可以针对感兴趣的取向构建或优化层级。可能仍然存在相同的基元,但是层级被优化以便在感兴趣的取向上更快地遍历。层级并不总是包含与由于背面剔除而未针对感兴趣的取向而优化的层级相同的基元,其中背面由取向或“虚拟视点”、焦点或会聚点来定义。

在某些情况下,射线可能几乎是相干的,但不一定是100%相干的。如果射线是由着色器操作发出的,而不是常规采样模式,则可能会发生这种情况。例如,相机着色器实现用于景深效果的薄透镜模型。射线可能在原点和方向上略有不同,但总的来说,射线几乎是相干的。因此,在针对绘出空间的不同图块定义相应的视锥体的示例中(例如,如图8中所示),在一些示例中,射线可能不完全与图块的截头体对齐。这种情况可以根据不同的解决方案而被处理。

术语“相干”可以是指相似的方向,但也是指相似的源点和来自该源点的可预测的扩散,例如,来自相机的射线,或聚光在点光源上的射线。此外,“相干”可能表示“存储器相干”,其中彼此靠近发射的射线可能源自并且终止于相同的粗略空间区域,即使它们的方向是完全随机的。注意,“相干”是一个比较概念,例如,大部分沿相同方向行进的射线比随机射线更相干,但是共享相同方向的射线仍然更相干。

在第一种解决方案中,允许射线在不同(例如,相邻)的视锥体之间迁移。如果射线从一个视锥体开始,但是到达视锥体的边缘(由于射线方向与视锥体的边缘之间的微小差异)而没有找到基元命中,则它可以在相邻的视锥体中进行测试。为了测试相邻视锥体中的射线,可以将射线重新发射到与该相邻视锥体对应的加速结构中。

在第二种解决方案中,允许视锥体具有重叠边界,从而使得最大射线发散表示任何射线将能够通过遍历单个视锥体的加速结构来进行场景的交叉测试。这种方法要求将射线发散限制在固定的最大量。在一些示例中,可以使用多射线格式,从而使得多个射线可以一起分组成为射线束,由此对射线束的射线执行交叉测试。可以对射线束中的射线执行着色器程序,其中着色器程序的执行可以包括使用射线束的另一射线的数据来确定射线束的特定射线的差分数据。在美国专利申请号15/458110中更详细地描述了用于处理射线束中的射线的方法。

与世界空间加速结构的分辨率相比,减小的加速结构可以具有不同的分辨率。例如,减小的加速结构可以表示具有比由世界空间加速结构表示的基元更高的分辨率、即更高的细节水平(LOD)的基元。这表示,用于存储世界空间加速结构的数据量小于以生成减小的加速结构的分辨率为整个场景存储加速结构的情况。这表示,减小的加速结构的LOD(对应于最可能发生交叉的场景的区域)可以相对较高,而不会增加存储器存储要求或带宽要求,就像整个场景是以相同的相对较高的LOD用加速结构表示的。

在本文中描述的示例中,针对3D场景的每个绘出动态地生成减小的加速结构。以这种方式,当视口随着帧而改变时(例如,当视点804改变时),并且当为每个帧提供动态几何结构时,更新或重新生成减小的加速结构。为每个绘出动态生成世界空间加速结构所涉及的处理往往太大而不适合于实时绘出。然而,由于减小的加速结构仅表示整个场景的子集(并且子集通常比整个场景小得多),因此针对每个绘出动态地生成减小的加速结构所涉及的处理负担预计不会太大。

可以基于要从其绘出3D场景的观看方向来确定减小的加速结构的节点,以便提高减小的加速结构的效率,例如,以便提高在交叉测试期间遍历减小的加速结构的效率,或者以便提高用于表示减小的加速结构的数据量的效率。例如,减小的加速结构的节点可以具有在与观看方向大致对齐的方向上伸长的形状。例如,如果观看方向使得射线在通常与x、y或z轴之一对应的方向上行进,则减小的加速结构的节点可以被形成为沿着上述轴之一伸长的AABB。当使用加速结构对所有具有相似射线方向的射线执行交叉测试时,通过在加速结构中具有沿着与射线的方向相同或相似的方向伸长的节点,可以提高交叉测试的效率。由于要测试的所有主射线具有相似的方向,因此减小的加速结构具有在与射线方向近似匹配的方向上伸长的节点对交叉测试的效率可能是有益的。次级射线的效率增益不太明显,因为次级射线的方向变化远大于主射线的方向。此外,伸长节点可以使得每个单独节点大于节点未伸长的情况,这可以导致加速结构中包括更少的节点,从而使得用于表示加速结构的数据量减少(与不使用伸长节点相比)。因此,构建与绘出空间的图块对应的减小的具有在沿着主射线方向或接近主射线方向的方向上伸长的节点的加速结构可能是有用的(因为这些可以是将针对其来测试主射线的减小的加速结构);但是在一些示例中,可以构建具有在任何特定方向上不优先伸长的节点的减小的加速结构(因为这可以是将针对其来测试次级射线的减小的加速结构)。可以存在用于生成减小的加速结构的节点(除了节点的伸长形状之外)的方式的其他方面,这些节点被确定以便提高减小的加速结构的效率。

在一些示例中,为了减少为每个绘出动态地生成减小的加速结构所使得的处理成本,加速结构构建逻辑422可以为3D场景生成静态世界空间加速结构。世界空间加速结构是“静态的”,因为它不是为每个绘出重新生成的。可以减少静态世界空间加速结构(即,可以移除节点)以形成减小的加速结构(例如,对应于场景内的视图空间)。可以通过分析世界空间加速结构的节点并且确定每个父节点是否在视图空间中来执行从世界空间加速结构中移除(或“剔除”)节点,其中如果父节点不在查看空间中,则该节点和从其向下的所有节点被剔除。可以通过从绘出到绘出发生的场景内的内容的变化来更新减小的加速结构,从而使得减小的加速结构正确地表示场景内的静态几何结构和动态几何结构。如上所述,可以为相应的动态对象生成单独的加速结构,并且可以将动态对象的加速结构与来自前一帧的静态几何结构的加速结构合并,以便为当前绘出生成合并的加速结构。可以在美国专利申请号15/464729中找到可以对用于将单独的加速结构合并在一起的方式的解释。在一些示例中,从其剔除节点以形成减小的加速结构的层级可以是除了世界空间加速结构之外的加速结构,例如,它可以是不表示整个3D场景但是确实表示3D场景的较大部分而不是由减小的加速结构表示的部分的加速结构。

图9a示出了表示在一个示例中由加速结构构建逻辑422生成的整个3D场景的世界空间层级的节点。图9b示出了与图9a中所示的世界空间加速结构的节点对应的场景内的体积元素。图9a和图9b中使用的符号类似于图3a和图3b中使用的符号,因为图9b中所示的场景中的区域具有与图9a中所示的层级中的相应的节点的附图标记相匹配的附图标记,但是图9b中的区域的附图标记包括附加的基本符号(')。注意,为清楚起见,图9b是场景的2D表示,但是对于本领域技术人员来说很清楚的是,场景可以是3D场景。

根节点902对应于要被绘出的场景902'的整个体积。图9a和图9b中所示的示例加速结构具有边界体积结构,其中节点对应于场景中的轴对齐的边界框(AABB)。在根节点902下面的第一级中有四个节点(904到910),它们从根节点902向下,并且这四个节点分别对应于图9b中所示的区域904'到910'。在根节点下面的第二级中有十二个节点(912到934),并且这些节点分别对应于图9b中所示的区域912'到934'。在根节点下面的第三层中有24个节点(936到982),并且这些节点分别对应于图9b中所示的区域936'到982'。在根节点下面的第四级中有七个节点(984到996),并且这些节点分别对应于图9b中所示的区域984'到996'。特别地,从节点904向下有三个节点(912到916),并且这三个节点对应于图9b中所示的AABB 912'到916'。从节点912向下有三个节点(936到940),并且这三个节点对应于图9b中所示的AABB 936'到940'。从节点938向下有两个节点(984和986),并且这两个节点对应于图9b中所示的AABB 984'和986'。从节点914向下有两个节点(942和944),并且这两个节点对应于图9b中所示的AABB 942'和944'。从节点916向下有两个节点(946和948),并且这两个节点对应于图9b中所示的AABB 946'和948'。从节点906向下有四个节点(918到924),并且这四个节点对应于图9b中所示的AABB 918'到924'。从节点918向下有两个节点(950和952),并且这两个节点对应于图9b中所示的AABB 950'和952'。从节点920向下有三个节点(954到958),并且这三个节点对应于图9b中所示的AABB 954'到958'。从节点954向下有三个节点(988到992),并且这三个节点对应于图9b中所示的AABB 988'到992'。从节点924向下有两个节点(960和962),并且这两个节点对应于图9b中所示的AABB 960'和962'。从节点908向下有三个节点(926到930),并且这三个节点对应于图9b中所示的AABB 926'到930'。从节点926向下有两个节点(964和966),并且这两个节点对应于图9b中所示的AABB 964'和966'。从节点928向下有两个节点(968和970),并且这两个节点对应于图9b中所示的AABB968'和970'。从节点930向下有两个节点(972和974),并且这两个节点对应于图9b中所示的AABB 972'和974'。从节点972向下有两个节点(994和996),并且这两个节点对应于图9b中所示的AABB 994'和996'。从节点910向下有两个节点(932和934),并且这两个节点对应于图9b中所示的AABB 932'和934'。从节点932向下有两个节点(976和978),并且这两个节点对应于图9b中所示的AABB 976'和978'。从节点934向下有两个节点(980和982),并且这两个节点对应于图9b中所示的AABB 980'和982'。

图9b中的虚线框998表示与场景内的视图空间(或其他感兴趣的区域)对应的场景的子区域。如上所述,子区域998可以基于观看场景的视点而被确定。在这个示例中,加速结构构建逻辑422通过减小图9a中所示的世界空间加速结构以聚焦在子区域998上来确定表示场景902'内的子区域998的减小的加速结构的节点。这可以通过剔除与场景中不与子区域998重叠的区域对应的世界空间加速结构的节点来进行。图9a中以粗体示出的节点(即,节点902、904、912、914、936、938、940、942、984和986)对应于场景中与子区域998重叠(至少部分)的区域(即,AABB 902'、904'、912'、914'、936'、938'、940'、942'、984'和986');而世界空间加速结构中的所有其他节点(即,图9a中未以粗体示出的节点)对应于场景中不与子区域重叠(即,不至少部分位于其中)的区域。因此,通过从世界空间加速结构剔除图9a中未以粗体示出的节点,可以示出子区域998的减小的加速结构。

图9c示出了表示子区域998的所得到的减小的加速结构。通过比较图9a和图9c可以理解,图9c中所示的减小的加速结构具有更少的节点,并且用于表示图9c中所示的减小的加速结构的数据量将小于用于表示图9a中所示的世界空间加速结构的数据量。这表示,用于存储减小的加速结构的存储空间量小于将用于存储世界空间加速结构的存储空间量。此外,当使用与世界空间加速结构相比而减小的加速结构时,在射线跟踪单元402与加速结构存储库412之间传送的数据量(可以称为“存储器带宽”)较小。如上所述,加速结构存储库412可以被实现为系统存储器,其中射线跟踪单元402与系统存储器之间的通信可以经由通信总线来进行。通过通信总线传输数据可能涉及相对较高的延时,例如,在片上系统(SOC)中(与片上通信相比),因此使用减小的加速结构(而不是世界空间加速结构)可以减少射线跟踪过程中涉及的延时。此外,当交叉测试逻辑406执行交叉测试时,图9c中所示的减小的加速结构的遍历比图9a中所示的世界空间加速结构的遍历更快。

图12示出了其中可以实现本文中描述的射线跟踪系统的计算机系统。计算机系统包括CPU 1202、GPU 1204、射线跟踪单元402、存储器1208和其他设备1210,诸如显示器1212和扬声器1214。计算机系统的组件可以经由通信总线1216彼此通信。数据存储器410、412、414、416和418可以被实现为存储器1208的一部分。

图4的射线跟踪系统400被示出为包括多个功能块。这仅是示意性的,并非旨在定义这样的实体的不同逻辑元件之间的严格划分。每个功能块可以按照任何合适的方式而被提供。应当理解,本文中描述为由射线跟踪系统形成的中间值不需要由射线跟踪系统在任何点物理地生成,并且可以仅仅表示逻辑值,这些逻辑值方便地描述射线跟踪系统在其输入和输出之间执行的处理。

本文中描述的射线跟踪单元可以在集成电路上被体现在硬件中。本文中描述的射线跟踪系统可以被配置为执行本文中描述的任何方法。通常,上述任何功能、方法、技术或组件可以用软件、固件、硬件(例如,固定逻辑电路)或其任何组合而被实现。本文中可以使用术语“模块”、“功能”、“组件”、“元件”、“单元”、“块”和“逻辑”来概括地表示软件、固件、硬件或其任何组合。在软件实现方式的情况下,模块、功能、组件、元件、单元、块或逻辑表示当在处理器上执行时执行指定任务的程序代码。本文中描述的算法和方法可以由一个或多个处理器执行使得处理器执行算法/方法的代码来执行。计算机可读存储介质的示例包括随机存取存储器(RAM)、只读存储器(ROM)、光盘、闪存、硬盘存储器、以及可以使用磁性、光学和存储指令或其他数据的其他技术并且可以由机器访问的其他存储器设备。

本文中使用的术语计算机程序代码和计算机可读指令是指用于处理器的任何种类的可执行代码,包括以机器语言、解释语言或脚本语言表示的代码。可执行代码包括二进制代码、机器代码、字节代码、定义集成电路的代码(诸如硬件描述语言或网表)、以及用诸如C、Java或OpenCL等编程语言代码表示的代码。可执行代码可以是例如任何类型的软件、固件、脚本、模块或库,其当在虚拟机或其他软件环境处适当地执行、处理、解释、编译、执行时使得支持可执行代码的计算机系统的处理器执行由代码指定的任务。

处理器、计算机或计算机系统可以是任何种类的设备、机器或专用电路、或其集合或部分,其具有处理能力使得它可以执行指令。处理器可以是任何种类的通用或专用处理器,诸如CPU、GPU、片上系统、状态机、媒体处理器、专用集成电路(ASIC)、可编程逻辑阵列、现场可编程门阵列(FPGA)等。计算机或计算机系统可以包括一个或多个处理器。

还旨在包括定义如本文所述的硬件配置的软件,诸如HDL(硬件描述语言)软件,其用于设计集成电路或用于配置可编程芯片以执行所需功能。也就是说,可以提供一种计算机可读存储介质,其上编码有集成电路定义数据集形式的计算机可读程序代码,计算机可读程序代码当在集成电路制造系统中处理(即,运行)时将该系统配置为制造被配置为执行本文中描述的任何方法的射线跟踪单元,或者制造包括本文中描述的任何装置的射线跟踪单元。集成电路定义数据集可以是例如集成电路描述。

因此,可以提供一种在集成电路制造系统中制造如本文所述的射线跟踪单元(或射线跟踪系统或其任何组件)的方法。此外,可以提供一种集成电路定义数据集,其当在集成电路制造系统中处理时使得制造射线跟踪单元(或其任何组件,例如处理模块)的方法被执行。

集成电路定义数据集可以是计算机代码的形式,例如作为网表,用于配置可编程芯片的代码,作为在任何级别定义集成电路的硬件描述语言,包括作为寄存器传输级别(RTL)代码,作为高级电路表示,诸如Verilog或VHDL,以及低级电路表示,诸如OASIS(RTM)和GDSII。逻辑上定义集成电路(诸如RTL)的更高级表示可以在计算机系统中处理,计算机系统被配置用于在软件环境的上下文中生成集成电路的制造定义,软件环境包括电路元件的定义和用于组合这些元件以便生成由表示定义的集成电路的制造定义的规则。软件在计算机系统中执行以便定义机器通常就是这样,可能需要一个或多个中间用户步骤(例如,提供命令、变量等),以便被配置用于生成集成电路的制造定义的计算机系统执行定义集成电路的代码以便生成该集成电路的制造定义。

现在将参考图13描述在集成电路制造系统中处理集成电路定义数据集以便将系统配置为制造射线跟踪单元的示例。

图13示出了被配置为制造如本文中的任一示例中所描述的射线跟踪单元或处理模块的集成电路(IC)制造系统1302的示例。特别地,IC制造系统1302包括布局处理系统1304和集成电路生成系统1306。IC制造系统1302被配置为接收IC定义数据集(例如,定义如本文中的任一示例中描述的射线跟踪单元或处理模块),处理IC定义数据集,并且根据IC定义数据集生成IC(例如,其实施如本文中的任一示例中描述的射线跟踪单元或处理模块)。IC定义数据集的处理将IC制造系统1302配置为制造实施如本文中的任一示例中描述的射线跟踪单元或处理模块的集成电路。

布局处理系统1304被配置为接收和处理IC定义数据集以确定电路布局。从IC定义数据集确定电路布局的方法在本领域中是已知的,并且例如可以涉及合成RTL代码以确定要被生成的电路的门级表示,例如,在逻辑组件方面(例如,NAND、NOR、AND、OR、MUX和FLIP-FLOP组件)。通过确定逻辑组件的位置信息,可以从电路的门级表示确定电路布局。这可以自动进行或者在用户参与下被进行,以便优化电路布局。当布局处理系统1304确定了电路布局时,它可以将电路布局定义输出到IC生成系统1306。电路布局定义可以是例如电路布局描述。

如本领域中已知的,IC生成系统1306根据电路布局定义生成IC。例如,IC生成系统1306可以实现半导体器件制造工艺以生成IC,其可以涉及光刻和化学处理步骤的多步骤序列,在此期间,在由半导体材料制成的晶片上逐渐形成电子电路。电路布局定义可以是掩模的形式,其可以用于光刻工艺中,用于根据电路定义生成IC。或者,提供给IC生成系统1306的电路布局定义可以是计算机可读代码的形式,IC生成系统1306可以使用该计算机可读代码来形成用于生成IC的合适的掩模。

由IC制造系统1302执行的不同过程可以全部在一个位置中被实现,例如,由一方。或者,IC制造系统1302可以是分布式系统,从而使得一些过程可以在不同位置执行,并且可以由不同方执行。例如,以下的一些阶段可以在不同的位置和/或由不同的方来执行:(i)合成表示IC定义数据集的RTL代码以形成要生成的电路的门级表示,(ii)基于门级表示来生成电路布局,(iii)根据电路布局来形成掩模,以及(iv)使用掩模制造集成电路。

在其他示例中,集成电路制造系统处的集成电路定义数据集的处理可以将系统配置为制造射线跟踪单元或处理模块,而不对IC定义数据集进行处理以便确定电路布局。例如,集成电路定义数据集可以定义可重新配置的处理器(诸如FPGA)的配置,并且该数据集的处理可以将IC制造系统配置为生成具有该定义的配置的可重新配置的处理器(例如,通过将配置数据加载到FPGA)。

在一些实施例中,当在集成电路制造系统中处理时,集成电路制造定义数据集可以使得集成电路制造系统生成如本文所述的设备。例如,通过集成电路制造定义数据集以上面参考图13描述的方式配置集成电路制造系统可以使得制造如本文所述的设备。

在一些示例中,集成电路定义数据集可以包括在数据集处定义的硬件上运行的软件,或者与在数据集处定义的硬件组合运行的软件。在图13所示的示例中,IC生成系统还可以由集成电路定义数据集配置为在制造集成电路时根据在集成电路定义数据集处定义的程序代码将固件加载到该集成电路上或者以其他方式提供带有集成电路的程序代码用于与集成电路一起使用。

与已知实现方式相比,本申请中阐述的设备、装置、模块和/或系统中(以及本文中实现的方法中)阐述的概念的实现方式可以使得性能改进。性能改进可以包括增加的计算性能、减少的延时、增加的吞吐量和/或降低的功耗中的一种或多种。在制造这样的设备、装置、模块和系统(例如,集成电路)期间,性能改进可以与物理实现方式相抵消,从而改进了制造方法。例如,可以用布局区域换取性能改进,从而匹配已知实现方式的性能但使用较少的硅。例如,这可以通过以串行方式重用功能块或在设备、装置、模块和/或系统的元件之间共享功能块来进行。相反,可以用本申请中提出的使得设备、装置、模块和系统的物理实现方式中的改进(例如,减小的硅面积)的概念换取性能改进。例如,这可以通过在预定义区域预算内制造模块的多个实例来完成。

申请人由此独立地公开了本文所述的每个单独的特征以及两个或更多个这样的特征的任何组合,只要这些特征或组合能够鉴于本领域技术人员的公知常识基于本说明书作为整体执行,而不管这样的特征或特征组合是否解决了本文中公开的任何问题。鉴于前面的描述,对于本领域技术人员很清楚的是,可以在本发明的范围内进行各种修改。

相关技术
  • 针对射线跟踪系统的减小的加速结构
  • 针对射线跟踪系统的减小的加速结构
技术分类

06120116484358