用于光线跟踪的混合层级的制作方法

文档序号:16686236发布日期:2019-01-22 18:20阅读:219来源:国知局
用于光线跟踪的混合层级的制作方法

本发明涉及图像处理,更具体地,本发明涉及用于光线跟踪的图像处理。



背景技术:

光线跟踪系统可以模拟在其中光线(例如光的光线)与场景相互作用的方式。例如,光线跟踪技术可以被用在图形绘制系统中,该图形绘制系统被配置为根据3-d场景描述产生图像。图像可以是具有照片真实感的,或实现其他目标。例如,动画电影可以使用3-d绘制技术来产生。3d场景的描述通常包括限定场景中的几何形状的数据。该几何形状数据通常根据图元来限定,图元通常是三角形图元,但有时可以是其他形状,诸如其他多边形、线或点。

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

在非常广泛的层级上,光线跟踪涉及:(i)标识场景中的光线和几何形状(例如,图元)之间的相交,以及(ii)响应于标识相交执行一些处理(例如,通过执行着色器程序)以确定相交如何影响正在被绘制的图像。着色器程序的执行可能导致更多光线被发射到场景中。这些更多的光线可以被称为“二次光线”。

在标识场景中的光线和几何形状之间的相交时许多处理被涉及。在一种非常初级的方法中,每个光线可以针对场景中的每个图元被测试,然后当所有相交命中被确定时,最近的相交可以被标识。对于可能具有数百万或数十亿个图元的场景(其中要被处理的光线的数目也可能是数百万),这种方法是不可行的。所以,光线跟踪系统通常使用加速结构,该加速结构以可以减少用于相交测试所需的工作的方式表征场景中的几何形状。然而,即使使用当前最先进的加速结构,也难以以适合于实时绘制图像的速率(例如,用于游戏应用)执行相交测试,特别是在对硅区域、成本和功耗具有严格的限制的设备上,诸如在移动设备(例如智能手机、平板电脑、笔记本电脑等)上。



技术实现要素:

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

提供了一种在光线跟踪系统中执行相交测试以用于绘制3d场景的图像的计算机实现的方法,该方法包括:

通过以下方式遍历分层加速结构:

根据第一遍历技术遍历分层加速结构的一个或多个较高级别的节点,上述第一遍历技术是深度优先遍历技术;以及

根据第二遍历技术遍历分层加速结构的一个或多个较低级别的节点,上述第二遍历技术不是深度优先遍历技术;

其中上述遍历分层加速结构的结果被用于绘制3d场景的图像。

提供了一种光线跟踪单元,该光线跟踪单元被配置为执行相交测试以用于绘制3d场景的图像,该光线跟踪单元包括:

相交测试逻辑,被配置为访问分层加速结构并通过以下方式遍历分层加速结构:

根据第一遍历技术遍历分层加速结构的一个或多个较高级别的节点,上述第一遍历技术基于深度优先遍历技术;以及

根据第二遍历技术遍历分层加速结构的一个或多个较低级别的节点,上述第二遍历技术不是深度优先遍历技术;以及

处理逻辑,被配置为使用遍历分层加速结构的结果以用于绘制3d场景的图像。

第二遍历技术可以基于广度优先遍历技术,其中节点与光线的相交测试基于节点数据和光线数据的可用性(例如,使用调度方案)来调度。例如,分层加速结构的一个或多个较低级别的节点可以根据第二遍历技术通过将相交测试工作项收集到要被并行执行的集合中来遍历,其中相交测试工作项标识要被用于相交测试的光线和节点,并且其中工作项集合基于集合中的工作项的数目被调度以执行。

根据深度优先遍历技术遍历分层加速结构的一个或多个较高级别的节点可以包括使用度量来确定下降分层加速结构的节点的顺序。该度量可以包括:(i)距离度量分量,其中该距离度量分量被布置为使得较近的节点在较远的节点之前被下降;(ii)遮挡度量分量,其中该遮挡度量分量被布置为使得具有较多遮挡几何形状的节点在具有较少遮挡几何形状的节点之前被下降;(iii)相交长度度量分量,其中该相交长度度量分量被布置为使得具有较长相交间隔的光线的节点在具有较短相交间隔的光线的节点之前被下降(其中,用于光线和节点的相交间隔是光线进入由节点表示的体积的点与光线离开体积的点之间的距离);和/或(iv)先前相交度量分量,其中相交数目的指示被存储以用于一个或多个较高级别的不同节点,并且其中先前相交度量分量被布置为基于上述指示使得具有较多相交数目的节点在具有较少相交数目的节点之前被下降。

分层加速结构的一个或多个较高级别的节点可以根据第一结构来限定,并且分层加速结构的一个或多个较低级别的节点可以根据第二结构来限定,其中第一结构不同于第二结构。

分层加速结构的一个或多个较高级别的节点可以根据空间细分结构来限定,诸如:(i)网格结构,(ii)多级网格结构,(iii)八叉树结构,或(iv)空间分隔结构(例如k-d树)。

分层加速结构的一个或多个较低级别的节点可以根据包围体结构来限定。包围体结构可以参考八叉树结构来限定。

根据深度优先遍历技术被遍历的较高级别节点的数目可以被预先确定。备选地,根据深度优先遍历技术要被遍历的较高级别节点的数目的指示可以从存储器被检索,其中该指示在分层加速结构被构建时被确定,并被存储在存储器中。

提供了一种生成被用于光线跟踪系统中的相交测试的分层加速结构的计算机实现的方法,该方法包括:

接收用于位于3d场景中的图元的原始数据;

基于所接收的原始数据确定分层加速结构的节点,其中分层加速结构的一个或多个较高级别节点根据空间细分结构被限定,并且其中分层加速结构的一个或多个较低级别的节点根据包围体结构被限定;以及

存储用于在相交测试中使用的分层加速结构。

提供了一种处理模块,该处理模块被配置为生成要被用于光线跟踪系统中的相交测试的分层加速结构,该处理模块包括:

输入,被配置为接收用于位于3d场景中的图元的图元数据;以及

加速结构构建逻辑,被配置为基于所接收的图元数据来确定分层加速结构的节点,其中分层加速结构的一个或多个较高级别的节点根据空间细分结构来限定,并且其中分层加速结构的一个或多个较低级别的节点根据包围体结构来限定;

其中,处理模块被配置为使得分层加速结构被存储以用于相交测试。

分层加速结构的节点可以表示3d场景内的体积元素,其中图元指示可以被存储以用于分层加速结构的叶节点,以指示存在于对应于相应的叶节点的体积元素内的图元。分层加速结构的节点可以通过标识3d场景内的体积元素内哪些图元存在来确定。

在本文所描述的示例中,一个或多个较高级别的节点在分层加速结构的顶部处,并且一个或多个较低级别的节点在分层加速结构中的一个或多个较高级别下方(例如,紧接在其下方)。

一个或多个较低级别的节点可以表示分层加速结构内的多子层级,并且子层级的根节点可以被表示为分层加速结构的一个或多个较高级别内的叶节点。

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

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

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

如对技术人员显而易见的,上述特征可以被适当地组合,并且可以与本文所描述的示例的任何方面组合。

附图说明

现在将参考附图来详细描述示例,其中:

图1a显示了根据网格细分结构划分的场景;

图1b表示用于图1a中所示的网格细分结构的加速结构;

图2a显示了根据二进制空间分区结构划分的场景;

图2b表示用于图2a中所示的二进制空间分区结构的分层加速结构;

图3a显示了根据四叉树结构划分的场景;

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

图4a显示了根据包围体结构划分的场景;

图4b表示用于图4a中所示的包围体结构的分层加速结构;

图5示出了光线跟踪系统;

图6是用于生成分层加速结构的方法的流程图;

图7是用于在光线跟踪系统中执行相交测试的方法的流程图;

图8a示出了通过场景的光线的路径,该场景根据空间细分结构被细分;

图8b表示用于图8a中所示场景的分层加速结构;

图9a表示通过网格元素的光线的路径,其中网格元素内的空间根据包围体结构被细分;

图9b表示用于图9a中所示的包围体结构的分层加速结构;

图10示出了参考八叉树细分结构的场景内的包围体层级的节点的空间位置;

图11示出了通过场景的光线的路径,该场景被细分为网格元素;

图12示出了分层加速结构的遍历;

图13显示了一种计算机系统,其中光线跟踪单元被实现;以及

图14显示了用于生成实现光线跟踪单元或处理模块的集成电路的集成电路制造系统。

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

具体实施方式

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

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

先前的光线跟踪系统使用分层加速结构,其整体具有单一类型的结构。举一些例子,分层加速结构可以具有网格结构、八叉树结构、空间分区结构(例如k-d树)或包围体结构中的一个。相反,在本文所描述的示例中,分层加速结构在不同级别处具有不同的结构。例如,层级的一个或多个较高级别具有空间细分结构,而一个或多个较低级别(即,在层级中的一个或多个较高级别下方)具有包围体结构。空间细分结构与包围体结构不同。因此,分层加速结构具有混合结构。换言之,分层加速结构(或“层级”)在其所有级别上不具有统一的结构,即,不同级别的层级被构建,使得它们具有不同的结构。

出于在光线跟踪系统中进行相交测试的目的,存在用于遍历分层加速结构的不同技术。例如,一些系统实现深度优先遍历技术,其中在层级的特定级别的其他节点被下降之前,层级的特定级别的节点的子集被下降。然而,其它系统实现广度优先遍历技术,其中所有在层级的特定级别的节点在同一时间被调度,以进行处理。先前光线跟踪系统在遍历分层加速结构时实现单一类型的遍历技术。相反,在本文所描述的示例中,不同的遍历技术被用来遍历分层加速结构的不同级别。特别地,在层级中部分地存在遍历行为的转换。在本文所描述的示例中,分层加速结构的一个或多个较高级别根据深度优先遍历技术被遍历。深度优先遍历技术涉及选择最合适的节点(或节点的子集)以首先下降,并且最初仅下降所选节点(或节点的子集)。例如,深度优先遍历技术可能意味着一次只有一个节点被下降。分层加速结构的一个或多个较低级别根据第二遍历技术被遍历,该第二遍历技术不同于被用于遍历层级的一个或多个较高级别的遍历技术。在本文所描述的示例中,第二遍历技术基于广度优先遍历技术。第二遍历技术涉及同时下降层级的级别的所有节点,其中调度方案可以控制节点被调度用于处理的顺序,例如基于用于处理节点的所需输入的机会可用性,包括获取的节点数据和临界质量的光线以使测试能力饱和。第二遍历技术基于广度优先遍历技术,在某种意义上,对于给定节点,所有子节点将在任何孙子节点之前被处理。然而,第二遍历技术没有强制执行深度n的每个节点在任何深度n+1的节点被处理之前被处理的条件,因此它可以被认为不是严格的广度优先遍历技术,而是基于在广度优先的技术。

深度优先遍历技术允许级别的最合适的节点(例如,最接近光线的光线源的节点针对节点要被测试)在该级别的其他节点被下降之前被下降。如果遍历在下降其中一个节点时发现光线的命中(即相交),那么它可能不需要针对从其他节点下降的子层级测试光线。这可以减少需要被执行的相交测试的数目,从而提高相交测试处理的效率。相反,基于广度优先方法的遍历技术可以允许用于要被执行的并行化工作的更大的机会,例如通过将更多的光线聚集在一起形成要针对相同节点而被测试的数据包。广度优先方法还可以减少存储装置带宽(即从存储装置获取的数据量),因为在获取用于节点的数据之前,更多的光线可以被聚集在一起以针对给定节点进行测试。例如,simd执行单元可以被用于并行地对一组光线执行相应的相交测试。相交测试的效率可以通过增加被处理的每个simd指令中包括的工作项的平均数目来增加。工作项标识要对相交进行测试的光线和节点,并且工作项可以被一起收集到要被并行执行的集合中。

分层加速结构顶部附近的节点表示场景中相对较大的体积(与分层加速结构底部附近的节点被表示的体积相比),因此,与层级顶部附近的节点相交的光线数目大于与层级底部附近的节点相交的光线数目。因此,通过减少光线被测试的节点数目实现的深度优先遍历的效率增益在层级顶部附近比在层级底部附近更大。此外,在一些系统中,当使用深度优先遍历技术时,与对于层级底部附近的节点被包括在simd指令中的工作项的数目相比,对于层级顶部附近的节点被包括在simd指令中的平均工作项数目相对较高。例如,对于层级顶部附近的节点,大多数simd指令可以是满的,而对于层级底部附近的节点,即使它们未满,许多simd指令也可以被执行。广度优先遍历技术提供了用于将工作项一起收集到要被并行执行的数据包中的更多机会。因此,通过使用基于广度优先遍历技术的遍历技术(与使用深度优先遍历技术相比)而实现的可以被并行执行的平均工作项数目的好处对于层级底部附近的节点更大。

出于这些原因,本文所描述的示例有利地使用深度优先遍历技术以用于遍历分层加速结构顶部附近的节点,并且使用基于广度优先遍历技术的遍历技术以用于遍历分层加速结构底部附近的节点。在最小化节点测试的数目(使用深度优先遍历技术)和增加被并行执行的工作项的平均数目(使用广度优先遍历技术)之间存在折衷。这样,遍历行为中的转换被实现的层级内的级别是设计选择,并且在不同示例中可以是不同的。

如下面更详细被解释的,不同类型的加速结构具有不同的属性。例如,图1a示出了包括三个对象102、104和106的场景100。场景100被细分为网格结构,其具有以4×4形式布置的十六个网格元素(或“网格小区”)。这是一个非常简单的加速结构,并不是分层的。对于每个网格元素,在网格元素内存在的对象(或图元)的指示列表被存储。这些列表的生成是一个简单的过程,并且可以在相交测试之前被执行。图1b示出了构成该简单示例中的加速结构的列表的内容。图1b标识了每个对象所在的网格元素。当光线被处理以标识场景中具有几何形状的任何相交时,相交测试可以针对每个网格元素对光线来执行。如果光线与网格元素相交,则光线可以针对网格元素内存在的对象/图元中的所有来测试,以找到场景100中的一个或多个图元和光线之间的一个或多个相交。如果多于一个相交被找到,则最接近的“命中”可以被标识,从而标识场景100中的图元与光线的第一相交。如果光线不与网格小区相交,则光线可能不需要针对被标识为存在于该网格小区内的图元而被测试(除非那些图元也存在于与光线相交的另一个网格小区中)。因此,仅当图元存在于与光线相交的至少一个网格小区内时,光线才被调度以针对图元进行相交测试。

图1a中所示的网格结构易于实现,但它确实存在一些问题,特别是当图元在场景中不均匀分布时。在场景中存在大面积空区域的情况下,处理资源被浪费来跟踪通过空网格小区的光线。此外,在存在高局部复杂度的情况下,在网格小区内可能存在大量图元,与网格小区相交的光线利用该图元来测试。网格的分辨率可以被增加以减少网格小区内的图元数目,但这会加剧空空间问题。分层加速结构允许在具有许多图元的区域中网格小区的分辨率被增加,而不增加具有相对较少图元的区域中的网格小区的分辨率。在这种意义上,分层加速结构可以被构建以适应场景中图元的分布。例如,覆盖空区域的小区可能不被细分,而覆盖包括许多图元的区域的小区可以被细分。一种形式的分层加速结构是多级网格结构。

分层加速结构的另一种形式是空间分区结构,例如k-d树。k-d树是二叉树,其中每个节点都是k维点。每个非叶节点隐式地生成一个将空间分为两部分的分割平面。例如,图2a显示了二维二叉树(即k-d树,其中k=2)的示例。取决于被包括在节点中的图元的数目,加速结构的每个节点可以被划分或不被划分。图2b表示了表示图2a中所示区域的分层加速结构的节点。在该示例中,场景200包括三个对象(202、204和206)。图2a中所示的二进制空间分区结构具有覆盖整个场景200的顶部级别节点210。在该2d示例中,包含多于一个对象的节点沿x方向或y方向(在交替方向上)被分成两半。在3d示例中,分裂平面可以依次循环通过x、y和z轴。由于节点200包括多于一个对象,因此它被分成两个节点(左节点和右节点)2121和2122。右节点2122仅覆盖一个对象(202),因此节点2122不再被细分。节点2122是叶节点并且包括对对象202的引用。左节点2121覆盖两个对象(204和206)并且被分成两个节点(顶部和底部节点)2141和2142。顶部节点2141仅覆盖一个对象(204),因此节点2141不进一步被细分(其中术语“覆盖”在此被用于表示“至少部分覆盖”)。节点2141是叶节点,并且包括对对象204的引用。底部节点2142覆盖两个对象(204和206),并且被分成两个节点(左节点和右节点)2161和2162。右节点2162仅覆盖对象206,因此它是包括对对象206的引用的叶节点。左节点2161覆盖对象204和206两者。尽管节点2161覆盖的不仅仅是对象,但是在该示例中,节点未被进一步细分,因为层级中的级别数目的限制被强加。因此,节点2161包括对对象204和206的引用。

空间细分结构的另一个示例是八叉树结构,其中3d空间通过在三个空间方向中的每一个(例如沿x、y和z轴)中将节点减半来递归地细分,从而将节点细分为八个相等的区域,其被表示为层级中的子节点。图3a表示相应的二维示例(即四叉树),其中节点在x方向和y方向两者上均被减半,这取决于节点内的内容(例如,图元的数目)的复杂度。图3a示出了场景300,其包括三个对象302、304和306。图3b表示了表示在图3a中所示区域中的分层加速结构的节点。图3a和图3b中所示的加速结构具有顶部级别节点310,其覆盖整个场景300。节点310被细分为四个四边形,由节点3121到节点3124表示。节点3121表示节点310的左上四边形,并且不进一步被细分。节点3121包括对对象304的引用。节点3122表示节点310的右上四边形,并且不进一步被细分。节点3122包括对对象302的引用。节点3124表示节点310的右下四边形并且是空的并且不进一步被细分。节点3123表示节点310的左下四边形,其覆盖对象304和306两者。节点3123被细分为四个四边形3141到四边形3144。节点3141表示节点3123的左上四边形,并且不进一步被细分。节点3141包括对对象304和306的引用。节点3142表示节点3123的右上四边形并且是空的并且不进一步被细分。节点3143表示节点3123的左下四边形,并且不进一步被细分。节点3143包括对对象306的引用。节点3144表示节点3123的右下四边形,并且不进一步被细分。节点3144包括对对象306的引用。

空节点(例如3124和3142)可以完全从层级中被排除,或者它们可以被包括在层级中但被标记为“空”,以便没有相交测试对空节点来执行。编码格式确定这两个选项中的哪一个更合适。在这两种情况下,从概念上讲,空节点可以被认为被排除了,因为在相交测试期间遍历层级将不包括空节点的测试。

如上所述的图1a至图3b涉及用于将场景的空间划分成区域并且形成分层加速结构的节点以表示场景的那些区域的空间细分结构的示例。相反,图4a和图4b涉及具有包围体结构的层级。图4a示出了场景400,其包括三个对象402、404和406。图4b示出了分层加速结构的节点,其中根节点410表示整个场景400。图4a中所示的场景中的区域具有与图4b中所示的层级中的相应节点的引用相匹配的引用,但是用于图4a中的区域的引用包括附加的撇号(')。场景中的对象被分析以便构建层级,并且两个节点4121和4122在节点410内被限定,其界定包含对象的区域。在该示例中,包围体层级中的节点表示轴对齐的包围盒(aabbs),但是在其他示例中,节点可以表示采用其他形式的区域,例如球体或其他简单形状。节点4121表示覆盖对象404和406的盒4121’。节点4122表示覆盖对象402的盒4122’。节点4121被细分为两个节点4141和4142,其表示分别界定对象404和406的aabbs(4141’和4142’)。用于确定用于构建层级的节点的aabbs的方法在本领域中是公知的,并且该方法可以以自上向下的方式(例如从根节点开始并且沿层级向下工作)来执行,或者可以以自下而上的方式(例如从叶节点开始并且沿层级向上工作)来执行。在图4a和图4b所示的示例中,对象不跨越多于一个叶节点。

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

图5示出了光线跟踪系统500,其被配置为绘制3d场景的图像。光线跟踪系统500包括光线跟踪单元502,其被配置为响应于标识相交而执行相交测试并执行着色器程序。光线跟踪单元502包括处理模块504,其被配置为生成分层加速结构,以被用于光线跟踪系统500中的相交测试。光线跟踪单元502还包括相交测试逻辑506和处理逻辑508。光线跟踪系统500还包括被耦合到光线跟踪单元502的多个不同的存储器(510至518)。图5示出了在光线跟踪单元502外部被实现的并被耦合到光线跟踪单元502的存储器(510至518),但是在一些示例中,存储器(510至518)中的一个或多个可以被实现为光线跟踪单元502的一部分。特别地,光线跟踪系统500包括场景几何形状数据存储器510、加速结构存储器512、光线数据存储器514、着色器程序存储器516和输出缓冲器518。

场景几何形状数据存储器510被配置为存储限定要被绘制的场景中的几何形状的数据。光线跟踪单元502被耦合到场景几何形状数据存储器510并且被配置为接收限定场景中的几何形状的数据(例如,以描述场景中的对象的图元的形式)。几何形状数据被提供给处理模块504和相交测试逻辑506。处理模块504包括输入520和加速结构构建逻辑522,并且被配置为使用几何形状数据来生成描述场景内的几何形状的分层加速结构。分层加速结构的生成下面参考图6来描述。由处理模块504提供的分层加速结构被传递到加速结构存储器512并被存储在加速结构存储器512中。

相交测试逻辑506被配置为访问被存储在存储器512中的分层加速结构。相交测试逻辑506进一步被配置为接收场景几何形状数据并接收限定要被遍历的通过加速结构的光线的光线数据。相交测试逻辑506包括用于存储光线数据的光线高速缓存524、用于存储几何形状数据的几何形状高速缓存526、集合收集逻辑528、调度逻辑530和一个或多个执行单元5321到5323。相交测试逻辑506被配置为通过遍历分层加速结构来执行相交测试,如下面参考图7所述。

相交测试的结果被传递到处理逻辑508。处理逻辑508包括一个或多个执行单元5341到5342,并且被配置为使用分层加速结构的遍历结果以用于绘制3d场景的图像。特别地,处理逻辑508可以响应于场景中的光线和图元之间的相交的指示,执行着色器程序(例如,已经从着色器程序存储器516接收到的着色器程序)。在处理逻辑508处着色器程序的执行可以导致一个或多个光线(其可以被称为“次光线”)的发射,其可以被传递回相交测试逻辑506以进行相交测试。在处理逻辑508处着色器程序的执行还可以确定可以被存储在输出缓冲器518中的图像值(例如,像素值)。输出缓冲器518(其可以被称为帧缓冲器)可以存储由光线跟踪系统500绘制的图像的像素值。

图6是对产生被用于光线跟踪系统500中的相交测试的分层加速结构的方法的流程图。在步骤s602中,位于要被绘制的3d场景中的图元的原始数据在处理模块504的输入520处被接收。在图5所示的示例中,图元数据(或“几何形状数据”)从场景几何形状数据存储器510被接收。

在步骤s604中,加速结构构建逻辑522确定用于场景的分层加速结构的节点。分层加速结构的节点表示3d场景内的体积元素。用于分析场景内的图元根据包围体结构来确定加速结构的节点的方法在美国专利号8717357中被描述。例如,加速结构构建逻辑522可以标识3d场景内的体积元素内哪些图元存在。逻辑522可以确定用于分层加速结构的叶节点的图元指示,以指示存在于对应于相应的叶节点的体积元素内的图元。然而,如上所述,在本文所描述的示例中,被构建以描述场景中的几何形状的分层加速结构不具有单一类型的结构。特别地,分层加速结构的一个或多个较高级别节点具有与被用于分层加速结构的一个或多个较低级别节点的结构类型不同的结构类型。因此,分层加速结构具有混合结构。例如,加速结构的一个或多个较高级别可以根据空间细分结构(例如,网格结构、多级网格结构、八叉树结构或诸如k-d树的空间分区结构)来限定;而加速结构的一个或多个较低级别可以根据包围体结构来限定。

在不同的示例中,分层加速结构内的不同类型的结构之间的转换可以被不同地处理。图10显示了一个简单的示例,其中场景1000使用八叉树结构被细分以用于层级的较高的四个级别。为清楚起见,图10是对应于分层加速结构的节点的一些区域的2d描绘。层级的最高级节点(即“根节点”)表示覆盖整个可见场景的aabb。根节点具有八个子节点,表示根节点区域内的八分圆。这些子节点中的每一个被细分为八个另外的子节点,然后这些另外的子节点中的每一个被细分为八叉树结构的八个最终子节点。图10的2d表示显示根节点被细分为四个象限,每个象限被细分为四个象限,其中那些象限中的一个被示为进一步被细分为四个象限,其中所有象限是根据要被绘制的场景的空间的细分来确定的。在这些象限中的一个象限内是包围盒1002,其根据包围体结构来限定。包围盒1002被细分为另外的包围体节点。

在该示例中,加速结构的较低级别的节点由数字对齐的八叉树架组装而成。例如,aabb1002通过引用八叉树结构的节点然后指定被引用的八叉树结构的节点内的盒1002的最小和最大坐标(在x方向和y方向上)来限定。以盒1002开始的子层级的最大尺寸可以通过简单地标识被引用的八叉树结构的节点来推断。

在其他示例中,根据包围体结构来限定的较低级别的节点可能不与较高级别的八叉树结构对齐。在这些示例中,加速结构可以以自上而下的方式被构建,例如,加速结构的构建可能需要保守地将图元体素化为网格体素(即,根据空间细分结构),然后构造叶层级(根据包围体结构)。备选地,加速结构可以以自下而上的方式被构建。平衡算法可以被使用,其中较高级别的节点在加速结构的构造期间被有组织地限定,例如,当封闭的图元或表面区域的阈值被超出时,则较高级别的节点可以被划分为较高级别层级中的多个子节点。

在一些示例中,整个层级可以根据包围体结构从下到上地被构建,然后所得到的层级可以被分析,并且较高级别的节点可以用根据空间细分结构限定的节点来替换。在其他示例中,层级可以根据包围体结构从底部向上被构建,直到一个点(例如,特定的八叉树尺寸),然后较高级别(在该点之上)可以根据空间细分结构来构建。

当加速结构已经被构建,在步骤s606中,分层加速结构被存储在加速结构存储器512中以用于相交测试。特别地,处理模块504将加速结构发送到存储器512以用于存储在其中。如前所述,尽管加速结构存储器512在图5中被示出为在光线跟踪单元502的外部(例如,存储器512可以在系统存储器中被实现并且经由系统总线被耦合到光线跟踪单元502),在一些示例中,加速结构存储器512可以在芯片上被实现,例如作为光线跟踪单元502的一部分。

图7是在光线跟踪系统500中执行相交测试的方法的流程图。在步骤s702中,相交测试逻辑506从加速结构存储器512接收表示场景中的几何形状的分层加速结构。相交测试逻辑506还可以从场景几何形状数据存储器510接收几何形状数据(例如,图元数据)。在步骤s704中,相交测试逻辑506接收限定针对加速结构要被测试的光线的数据。光线数据可以从光线数据存储器514被接收。光线数据可以被存储在光线高速缓存524中,使得它可以被多于一次地被使用而无需在每次其被使用时从存储器514获取数据。

相交测试逻辑506通过遍历分层加速结构针对场景中的几何形状对光线执行相交测试。在本领域中已知用于测试光线是否与由层级中的节点表示的体积(例如,轴对齐的包围盒)相交的方法。特别地,在步骤s706中,相交测试逻辑506根据第一遍历技术遍历分层加速结构的一个或多个较高级别节点。在本文所描述的示例中,根据第一遍历技术被遍历的分层加速结构的一个或多个较高级别节点是根据空间细分结构(例如,八叉树结构)被限定的节点。第一遍历技术基于深度优先遍历技术。以这种方式,在加速结构内的级别上存在多个节点的情况下,相交测试逻辑选择最合适的节点(或节点子集)首先下降,并且一次只下降所选节点(或节点子集)。

在步骤s708中,相交测试逻辑506根据第二遍历技术遍历分层加速结构的一个或多个较低级别的节点。在本文所描述的示例中,根据第二遍历技术被遍历的分层加速结构的一个或多个较低级别节点是根据包围体结构被限定的节点。当光线被发现与分层加速结构的叶节点相交时,则光线针对图元被测试,图元被指示为存在于由叶节点表示的体积内。表示要被测试的图元的几何形状数据可以被存储在几何形状高速缓存526中。在本文所描述的示例中,第二遍历技术不基于深度优先遍历技术。特别地,第二遍历技术可以基于广度优先遍历技术,在某种意义上,对于给定节点,在任何孙子节点被处理之前所有子节点将被处理。调度逻辑530可以基于节点数据和光线数据的可用性来调度节点与光线的相交测试。在一些示例中,第二遍历技术可以同时下降层级的级别的所有节点,其中相交测试的调度由输入的可用性(例如,获取的节点数据)和足够数目的光线来控制,以有效地利用测试能力,即尝试增加由执行单元532执行的simd任务中所包括的工作项的数目。作为示例,在任务被执行之前,必须被满足的simd任务中可能存在阈值数目的工作项。

集合收集逻辑528将相交测试工作项一起收集到要由执行单元532并行执行的集合中。如上所述,相交测试工作项标识要被用于相交测试的光线和节点。在本文所描述的示例中,调度逻辑530基于集合中的工作项的数目来调度由执行单元532执行的工作项的集合。

由相交测试逻辑506执行的相交测试的结果指示,对于每个被测试的光线,相交是否在场景中已经被找到(即“命中”或“未命中”),并且如果命中已经被找到,那么结果可以指示哪个图元已经被相交(例如,通常是最接近的相交图元,其中光线已经与多于一个图元相交)。结果还可以指示相交图元内的相交的位置(例如,使用重心坐标)。相交测试的结果可以被传递到处理逻辑508。在步骤s710中,处理逻辑508使用相交测试结果,例如用于绘制3d场景的图像。例如,处理逻辑508可以在执行单元534上执行着色器程序。着色器程序可以从着色程序存储器516被检索。在处理逻辑508处执行着色器程序的结果可以是被绘制的图像的绘制的像素值,并且在这种情况下,绘制的像素值可以被提供给输出缓冲器518以用于存储在其中。如上所述,着色器程序的执行可以将一个或多个光线(次光线)发射到场景中,这些光线被传递回相交测试逻辑506以进行相交测试。

图8a至图9b示出了可以对于通过场景的光线被执行的相交测试的示例。该示例是二维的以便于说明;本领域技术人员在阅读本说明书后,将理解关于该2d示例描述的原理可以被应用于3d示例。此外,该示例在场景中存在的图元(或对象)的数目方面非常简单,并且在实际系统中,可能在场景中将存在比图9a中所示出的更多的对象。图8a显示了光线802通过的场景800。图8b示出了为场景800被创建的分层加速结构的较高级别。根节点810对应于覆盖整个场景800的aabb810’。盒810’内的空间被细分为上半部和下半部(8121’和8122’),并且相应的节点8121和8122构成图8b所示层级中的第二级别。盒8121被细分为四个象限(8141’至8144’),并且盒8122’被细分为四个象限(8145’至8148’)。层级的第三级别具有对应于八个盒8141’至8148’的八个节点8141至8148。在该示例中,分层加速结构的较高的三个级别是根据空间细分方案被限定的。然而,分层加速结构内的第三级别以下的级别根据包围体方案来限定。

图9a显示了盒8147’内的更多细节。盒8147’是对应于光线802相交的第三级别节点的盒中的第一个。在图9a所示的示例中,场景包括盒8147’内的七个对象(902、904、906、908、910、912和914)。在分层加速结构中,节点8147具有两个子节点:9161和9162。从图9a中可以看出,盒9161’是aabb,其界定六个对象904、906、908、910、912和914;并且盒9162’是界定对象902的aabb。盒9162’是界定对象902的aabb。节点9162在加速结构中不具有任何子节点,使得节点9162是包括对对象902的引用的叶节点。节点9161具有在加速结构中的三个子节点:9181、9182和9183。从图9a中可以看出,盒9181’是aabb,其界定四个对象904、906、908、910。节点9181在加速结构中不具有任何子节点,使得节点9181是叶节点,其包括对对象904、906、908和910的引用。盒9182’是界定对象912的aabb。节点9182在加速结构中不具有任何子节点,使得节点9182是叶节点,其包括对对象912的引用。盒9183’是界定对象914的aabb。节点9183在加速结构中没有任何子节点,使得节点9183是叶节点,其包括对对象914的引用。

相交测试逻辑506遍历图8b和图9b中所示的分层加速结构,以执行光线802针对场景800的相交测试。层级的顶部三个级别以深度优先的方式被遍历。根据深度优先技术的遍历使用度量来确定下降分层加速结构的节点的顺序。度量被选择以便更合适的节点在不太合适的节点之前被下降。例如,度量可以包括距离度量分量,其中距离度量分量被布置成使得更近的节点(即,更靠近光线源)在更远的节点之前被下降。相交测试逻辑506可以使用数字差分分析器(dda)技术来根据距离度量分量来确定一个或多个较高级别的节点被下降的顺序。用于dda技术的dda算法首先计算数据结构中光线的起始小区。该结构需要在空间上被分离(如网格或八叉树),以便小区被相互堆积(即小区被连续堆积)。然后,dda算法按照它们被相交的顺序确定光线穿过的小区。该算法使用光线的斜率(即梯度)来计算光线首先离开的当前小区的哪个面,并且该轴是光线应该“步进”到下一个的那个轴。这相当于三个(在3d情况下)光线平面相交,并且我们找到最小的相交距离。换言之,该算法找到光线离开的小区的哪个面,然后进入邻接该面的小区。当前小区然后被更新并处理,例如通过遍历从当前小区下降的包围体子层级,然而这是必需的。到下一个边缘的距离使用光线的斜率和网格小区尺寸可以很容易地被更新,以便后续迭代不需要重新计算它们。该过程可以被重复以使光线穿过结构(例如,如下面所描述的图11中所示)。

在图8a所示的示例中,光线802的原点位于场景800的下方和左侧。因此,节点8122(其对应于较低区域8122’)在节点8121(其对应于较高区域8121’)被下降之前被测试并下降。如果相交测试在从节点8122下降的节点内发现命中,则相交测试可能不在节点8121或从节点8121下降的节点上被执行。

根据距离度量分量,节点8121内的节点的以8147、8145、8148、8146的顺序被测试。因此,节点8147下面的子层级是要被用于相交测试的包围体子层级的第一个。该子层级的节点(如图9b所示)根据第二遍历技术(即,基于广度优先技术)被测试。例如,节点9161和9162可以同时被调度以进行相交测试。相交测试的实际执行取决于相交工作项如何被一起收集到要被并行执行的集合中。例如,针对相同节点要被测试的不同光线可以被组合在一起以进行并行相交测试。此外,在一些示例中,针对相同光线要被测试的不同节点可以被组合在一起以进行并行相交测试。将相交测试工作项分组为用于相交测试的集合是依赖于实现的,并且该分组过程的细节超出了当前公开的范围。可以在图9a中看出光线802击中盒9161,因此,光线802被调度用于针对节点9181、9182和9183的相交测试。

交点测试的结果将显示,光线802未击中盒9162、9181、9182和9183。因此,光线802不针对任何对象(902至914)而被测试。

由于光线不与盒8147内的任何几何形状相交,因此相交测试然后根据距离度量下降下一个子层级,即从节点8145下降的子层级,因为这是光线802相交的下一个节点。

相交测试继续进行,直到相交对于光线802被标识出。如果在盒8145内没有相交被找到,则光线802针对节点8148被测试,但是将发现光线802未击中盒8148,因此节点8148没有被下降,相反光线802将针对节点8146(其是命中)而被测试,并且然后从节点8146下降的子层级将被遍历。

如果在从层级中的节点8122下降的节点内没有相交对于光线802被找到,则从节点8121下降的节点被测试。根据由本示例的深度优先遍历技术所使用的距离度量,节点8141至8144将以8143(未命中)、8141(未命中)、8144(命中)、8142(命中)的顺序被测试。

较低级别的节点(例如,根据包围体结构限定的节点)表示分层加速结构内的多个子层级,其中,子层级的根节点被表示为分层加速结构的一个或多个较高级别内的叶节点。例如,节点8147是较高三个级别内的叶节点(即,它处于较高级别的最低级别(第三级别)),并且该节点8147是图9b所示的子层级的根节点。在步骤s706中的分层加速结构的一个或多个较高级别节点的深度优先遍历(即节点810到814的遍历)确定在步骤s708中子层级被选择用于遍历的顺序。

换句话说,可以认为是子层级的层级(或“叶层级”),其中叶层级之上的层级的级别具有与叶层级(即包围体树)本身不同的格式化结构。光线以一种顺序遍历“叶层级”,这意味着在遍历其他叶层级之前包括更合适的节点(例如,更近的节点)的叶层级被遍历。此外,将对于给定光线的同时遍历操作限制到相交的叶子树的子集是有益的,有效地推迟更远距离子树中的遍历。以这种方式,相交测试逻辑506通过将用于一个或多个子层级的子集内的节点的相交测试工作项分组为要被并行执行的集合,根据第二遍历技术遍历分层加速结构的一个或多个较低级别的节点。子集的尺寸可以是一,通过子树给出完美有序的“行进”。在每个子集包括单个子层级的示例中,相交测试逻辑506通过顺序地选择要被遍历的子层级来遍历分层加速结构,其中,子层级被选择的顺序通过分层加速结构的一个或多个较高级别节点的深度优先遍历来确定。在加速结构的遍历期间,相交测试逻辑506通过加速结构的较高级别来执行光线的行进,并且在每个被访问过的体积元素中,光线被排队以用于针对索引图元的子树的遍历,该图元与该体积重叠。

图11示出了场景1100,其被细分为多个网格小区。光线1102以指示的顺序通过场景1100并与被标记为1至6的小区相交。该序列的排序可以使用如上所述的dda技术来确定。每个小区可以对应于要被下降的子层级(或“叶层级”)的根节点。在一次单个子层级被下降的示例中,其中小区1是根节点的子层级首先被遍历。然后,如果没有相交被找到,其中小区2是根节点的子层级被遍历;然后,如果没有相交被找到,其中小区3是根节点的子层级被遍历,等等,直到相交命中被找到。

然而,在一些示例中,被一起遍历的子层级的子集包括多个子层级(例如两个子层级)。例如,参考图11,其中小区1和2是根节点的子层级首先被一起遍历。然后,如果没有相交被找到,其中小区3和4是根节点的子层级被遍历,等等,直到相交命中被找到。在这些示例中,子层级的组一次被遍历,例如对应于小区1和2的第一组被遍历,然后对应于小区3和4的第二组被遍历,等等。相交测试逻辑506通过遍历一系列子层级的组来遍历分层加速结构的较低级别的节点。

图12示出了根据本文所描述的示例的分层加速结构的遍历。图12中所示的分层加速结构具有三个较高级别节点12001(包括节点1202到1214)和两个较低级别节点12002(包括节点1216到1250)。节点的遍历用图12中的箭头来示出。遍历从根节点1202开始。较高级别12001的遍历是深度优先遍历,其定位层级(或“树”)的部分。节点1204在节点1206之前被下降。节点1208在节点1210之前被下降。较低级别12002的遍历是平行的广度优先遍历,这增加了用于将光线聚集在一起以进行并行测试的机会,从而增加了并行处理的一致性。这增加了并行处理执行单元的利用率(例如,增加了被并行执行的simd工作项的平均数目),从而提高了相交测试的效率。从节点1208下降,节点1216、1218和1220可以被调度以用于执行。此外,如果节点1216被发现是对于光线的命中,则从节点1216下降的节点1236至1242还可以被调度以用于光线的测试;并且类似地,如果节点1220被发现是对于光线的命中,则从节点1220下降的节点1244至1250还可以被调度以用于光线的测试。在一些示例中,如果光线在从节点1208下降的叶节点中找到相交(即命中),则从节点1210和1206下降的节点不需要被测试。以这种方式,在层级的较高级别延迟树的部分(由于较高级别的深度优先遍历)可以减少相交测试的数目,该相交测试对于早期离开的光线被执行(即,在相交测试开始附近被测试的层级的节点中(例如,在图12所示的示例中从节点1208下降的节点中)找到相交的光线)。

在上述示例中,相交测试逻辑506根据深度优先遍历技术遍历分层加速结构的较高级别,该深度优先遍历技术使用度量来确定下降分层加速结构的节点的顺序。该度量被选择以便更合适的节点首先被下降。以这种方式,度量可以被用来确定用于下降特定节点的相应优先级。如上所述,度量可以包括距离度量分量。在一些示例中,附加地或备选地,度量可以基于除距离之外的因素。例如,为了确定场景内的光照效果,光线跟踪系统可以跟踪图元上的相交和光源之间的遮挡光线,以确定图元上的相交是否被光源遮挡。当跟踪主光线时,目标是确定光线相交的几何形状的第一片,因此距离度量是有用的,因为找到一个较近的不透明几何形状的相交意味着更多的远节点不需要被测试。然而,当跟踪遮挡光线时,目的是确定遮挡光线在其到达光源之前是否与任何几何形状相交(即,到遮挡对象的距离不一定重要)。因此,在这些示例中,被用于确定其中较高级别的节点被下降的顺序的度量可以包括遮挡度量分量。遮挡度量分量被布置成使得具有更多遮挡几何形状的节点在具有较少遮挡几何形状的节点之前被下降。节点内的图元的数目和节点内的图元的表面区域是节点中的遮挡几何形状数目的指示的两个示例,其可以被用于根据遮挡度量来确定其中节点被下降的顺序。与具有较少遮挡几何形状的节点相比,具有更多遮挡几何形状的节点中的光线更可能具有相交,因此具有更多遮挡几何形状的节点(即使它们更远)可以被认为“更适合”以根据遮挡度量分量来首先下降。

被用于确定层级的较高级别节点被下降的顺序的度量可以包括不止一个本文所描述的度量分量。这样,在确定较高级别节点被下降的顺序时,可能存在不同度量分量之间的折衷。用于下降特定节点的相应优先级可以基于一个或多个度量分量来确定。例如,对于遮挡光线,度量可以包括距离度量分量和遮挡度量分量。更接近遮挡光线原点的节点可以表示跨越绕遮挡光线原点的球体的较大立体角的体积,而不是远离遮挡光线原点的节点;因此,与更远的节点相比,光线可能更可能在更近的节点内与遮挡几何形状相交。这样,基于距离度量分量和遮挡度量分量两者的度量可以适合于确定节点被下降以用于遮挡光线的顺序。

作为另一示例,度量可以包括相交长度度量分量,其被布置成使得具有较长相交间隔的光线的节点在光线具有较短相交间隔的节点之前被下降。用于光线和节点的相交间隔是进入由节点表示的体积的光线与离开体积的光线之间的距离。换言之,相交间隔是光线在由节点表示的体积内行进的距离。相交长度度量分量是对于遮挡光线的有用度量分量,但也可以被用于其他光线。如果光线与节点相交较长距离,则光线可能更可能与节点内的几何形状相交。例如,参考图8a,光线802与节点8147相交的距离大于光线802与节点8146相交的距离。这样,相交长度度量分量将用于在下降节点8146之前对下降节点8147进行优先级排序。

在一些示例中,相交测试逻辑506可以存储已经对于一个或多个较高级别的不同节点被标识的相交的数目的指示。在这些示例中,度量可以包括先前的相交度量分量。先前的相交度量分量被布置成使得具有较多相交数目的节点在具有较低相交数目的节点之前被下降,如所述存储的指示所示。以这种方式,系统可以从先前相交测试的结果中学习,以便标识哪些节点更可能包含当前光线与之相交的几何形状。换言之,如果许多先前的光线已经与过去的特定节点内的几何形状相交,那么先前的相交度量分量可以被用于指示当前光线可能与特定节点内的几何形状相交;然而,如果很少先前的光线已经与特定节点内的几何形状相交,那么先前的相交度量分量可以被用于指示当前光线不太可能与特定节点内的几何形状相交。

层级中的较高级别(例如,根据深度优先遍历技术被遍历的级别)的数目可以被预先确定。在这种情况下,较高级别的数目(例如,为三个或四个)可以在使用光线跟踪系统500来绘制场景之前被设置。较高级别的数目可以在光线跟踪系统500的设计期间被设置,使得该数目是固定的。

在其他示例中,当处理模块504构建加速结构时,它可以灵活地选择将被分类为较高级别的适当数目的级别,例如根据空间细分结构被构建的层级的多个级别。特别地,加速结构构建逻辑522可以确定将根据空间细分结构被限定的节点的较高级别的数目,并且例如,利用加速结构存储器512中的加速结构,引起要被存储的确定的级别数目的指示。加速结构构建逻辑522可以基于3d场景中的图元的空间覆盖范围来确定节点的较高级别的数目。例如,如果图元均匀地分布在场景上,则较高级别节点的数目可以被确定大于图元在场景上非常不均匀分布的情况。如上所述,空间细分结构适用于均匀分布的图元,但是对于非均匀分布的几何形状,空间细分结构可能不如包围体结构那样好。

增加分层加速结构中的较高级别的数目允许更高的效率通过不下降到表示场景中的被遮挡区域的层级的节点来实现。这减少了被执行的相交测试的数目。然而,增加分层加速结构中的较高级别的数目减少了分层加速结构的较低级别的数目,因此通过将光线聚集在一起成为要被一起处理的数据包来减少用于提高并行处理效率的机会。因此,在决定层级中较高级别的数目时折衷需要被考虑。

相交测试逻辑506可以检索存储的较高级别的数目的指示,以便确定如何最好地遍历加速结构(例如,根据深度优先遍历技术确定要遍历多少级别)。

在上述示例中,层级的较高级别是根据空间细分结构来限定的,并且根据深度优先遍历技术被遍历;而层级的较低级别是根据包围体结构来限定的,并且根据广度优先技术被遍历。在其他示例中,“较高级别”不一定以相同的方式被限定以用于确定:(i)节点是根据空间细分结构还是包围体被构建的,或者(ii)节点是根据深度优先遍历技术还是基于广度优先遍历技术被遍历的。在一些示例中,层级可以具有与上述结构不同的结构(例如,它可以具有统一的结构),但是遍历仍然可以基于用于层级的一个或多个较高级别的深度优先遍历技术或者基于用于层级的一个或多个较低级别的广度优先遍历技术。此外,在一些示例中,遍历技术可以与上面所描述的不同(例如,一致的遍历技术可以对层级的所有级别被应用),但是分层加速结构可以仍然具有上述的混合结构,其中层级的一个或多个较高级别根据空间细分结构来限定,并且层级的一个或多个较低级别根据包围体结构来限定。特别地,即使遍历技术与上面所描述的不同,用于层级的较高部分和较低部分的混合层级本身也具有益处。空间细分结构倾向于以通过图元分割/分箱创建额外节点为代价来实现更高的“质量”(即更少的节点测试)层级。对象分区的层级(例如bvhs)倾向于创建更少的节点,但它们之间可能存在冗余的空间重叠。这在被执行的节点测试的数目方面更糟糕,但是减少的节点计数使得更容易收集一致性,因为一次飞行中的唯一节点更少。空间细分结构在较高级别中被使用以最小化相交测试,其中节点计数或一致性不是问题。然而,在较低级别,在空间细分结构上选择包围体层级(bvh)有助于减少节点总数(其中节点数目已经很高),并与广度优先样式遍历协同作用以增加最需要的一致性。

图13显示了计算机系统,其中本文所描述的光线跟踪系统可以被实现。计算机系统包括cpu1302、gpu1304、光线跟踪单元502、存储装置1308和其他设备1310(诸如显示器1312和扬声器1314)。计算机系统的组件可以经由通信总线1316彼此通信。数据存储器510、512、514、516和518可以被实现为存储器1308的一部分。

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

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

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

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

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

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

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

在集成电路制造系统处处理集成电路限定数据集以便配置系统以制造光线跟踪单元的示例现在将参考图14来描述。

图14示出了集成电路(ic)制造系统1402的示例,其被配置为制造如本文任何示例中所描述的光线跟踪单元。特别地,ic制造系统1402包括布局处理系统1404和集成电路生成系统1406。ic制造系统1402被配置为接收ic限定数据集(例如,限定如本文任何示例中所描述的光线跟踪单元)、处理ic限定数据集、并根据ic限定数据集生成ic(例如,其体现了如本文任何示例中所描述的光线跟踪单元)。ic限定数据集的处理配置ic制造系统1402以制造体现如本文任何示例中所描述的光线跟踪单元的集成电路。

布局处理系统1404被配置为接收和处理ic限定数据集以确定电路布局。从ic限定数据集确定电路布局的方法在本领域中是已知的,并且例如可以涉及合成rtl代码以确定要被生成的电路的门级表示,例如在逻辑组件方面(例如,nand、nor、and、or、mux和flip-flop组件)。通过确定用于逻辑组件的位置信息,电路布局可以从电路的门级表示被确定。这可以自动被完成或者在用户参与下被完成,以便优化电路布局。当布局处理系统1404已经确定了电路布局时,它可以将电路布局限定输出到ic生成系统1406。电路布局限定可以是例如电路布局描述。

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

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

在其他示例中,在集成电路制造系统处对集成电路限定数据集的处理可以将系统配置为制造光线跟踪单元,而不需要ic限定数据集被处理以便确定电路布局。例如,集成电路限定数据集可以限定可重新配置的处理器(诸如fpga)的配置,并且该数据集的处理可以配置ic制造系统以生成具有该限定的配置的可重新配置的处理器(例如,通过将配置数据加载到fpga)。

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

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

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

申请人在此独立地公开了本文所描述的每个单独的特征以及两个或更多个这样的特征的任何组合,在一定程度上这些特征或组合能够基于本说明书作为整体根据本领域技术人员的普通常识来执行,不管这些特征或特征组合是否解决了本文所公开的任何问题。鉴于前面的描述,对于本领域技术人员显而易见的是,各种修改可以在本发明的范围内被做出。

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