用于光线跟踪的相交测试的制作方法

文档序号:30417333发布日期:2022-06-15 11:51阅读:87来源:国知局
用于光线跟踪的相交测试的制作方法

1.本发明涉及用于光线跟踪的相交测试。


背景技术:

2.光线跟踪系统可以模拟光线(例如光线)与场景相互作用的方式。例如,光线跟踪技术可以用于被配置成从3d场景描述产生图像的图形渲染系统中。图像可以是具有照片真实感的,或实现其它目标。例如,可以使用采用光线跟踪技术的3d渲染技术制作动画电影。3d场景的描述通常包括定义场景中的几何形状的数据。这种几何形状数据通常根据图元来定义,图元通常是三角形图元,但有时也可以是其它形状,例如其它多边形、线或点。
3.光线跟踪模仿光与场景中的对象的自然交互,并且复杂的渲染特征可以自然地从光线跟踪3d场景中产生。光线跟踪可以在逐个像素的级别上相对容易地并行化,因为像素通常彼此独立。然而,在诸如环境遮挡、反射、焦散线等的环境中,由于3d场景中光线的分布和不同位置和行进方向,难以将光线跟踪中涉及的处理流水线化。光线跟踪允许渲染逼真的图像,但通常需要高水平的处理能力和大的工作存储器,使得光线跟踪可能难以实施以用于实时渲染图像(例如,与游戏应用一起使用),特别是在可能对硅面积、成本和功耗具有严格限制的装置上,例如在移动/便携式装置(例如,智能电话、平板计算机、膝上型计算机等)上。
4.在非常广泛的层面上,光线跟踪涉及:(i)相交测试,以标识光线与场景中的几何形状(例如,图元)之间的相交,及(ii)着色,包括响应于标识相交而执行某些处理(例如,通过执行着色器程序)以确定所述相交对正被渲染的图像有何贡献。着色器程序的执行可致使将另外的光线发射到场景中。这些另外的光线可以被称为“二次光线”。
5.在标识场景中的光线和几何形状之间的相交时涉及许多处理。在非常简单的方法中,可以针对场景中的每个图元来测试每条光线,然后当已经确定了所有的相交命中时,可以标识出最接近的相交。对于可能有数百万或数十亿个图元的场景,其中要处理的光线的数目也可能是数百万,这种方法是不实际的。因此,光线跟踪系统通常使用加速结构,所述加速结构以能够减少相交测试所需的工作的方式来表征场景中的几何形状。然而,即使利用现有技术的加速结构,也难以以适合于实时渲染图像(例如,与游戏应用一起使用)的速率执行相交测试,特别是在对硅面积、成本和功耗具有严格限制的装置上,例如在移动装置(例如,智能电话、平板计算机、膝上型计算机等)上。
6.现代光线跟踪架构通常使用基于包围体积分层结构—特别是包围盒分层结构的加速结构。将图元一起分组到包围所述图元的包围盒中。这些包围盒又被分组在一起成为包围它们的较大包围盒。因此,相交测试变得更容易,因为如果光线未命中包围盒,则不需要针对该包围盒的任何子节点来测试它。


技术实现要素:

7.提供本发明内容是为了以简化的形式介绍下文在具体实施方式中进一步描述的
一系列概念。本发明内容不旨在标识所要求保护的主题的关键特征或必要特征,也不旨在用于限制所要求保护的主题的范围。
8.一种用于在光线跟踪系统中执行光线的相交测试的系统和方法。光线跟踪系统使用包括多个节点的分层加速结构,每个节点标识能够由光线相交的一个或多个元素。所述系统利用串行模式光线相交过程,其中,当光线与包围盒相交时,生成有限数目的新光线请求,并且存储可用于标识未针对其生成光线请求的包围盒的交点信息。
9.提供了一种在光线与由光线跟踪系统的分层加速结构的节点标识的元素之间执行相交测试的计算机实施的方法,其中,节点标识用于相交测试的一个或多个元素,其中,由分层加速结构的非叶节点标识的元素由分层加速结构的另一节点表示。
10.该计算机实施的方法包括:为分层加速结构的每个叶节点定义序列值,其中,从任何给定非叶节点分支的叶节点的序列值相对于彼此是相续的;为分层加速结构的每个非叶节点定义值,其中,对于每个非叶节点,所述值便于标识从所述非叶节点分支的任何叶节点的序列值;为光线定义进度信息,所述进度信息包括第一进度信息,所述第一进度信息标识针对其不知道光线是否与其元素中的任一个相交的叶节点的序列值中的最早序列值;执行相交测试过程以标识光线与由分层加速结构的节点标识的元素之间的任何交点;以及在相交测试过程期间,基于光线与由分层加速结构的节点标识的元素之间的任何标识的交点来更新进度信息。
11.进度信息单独地可以用于改进对相交测试的状态的理解或控制如何执行相交测试过程。例如,可以限制在相交测试系统的时钟周期或一系列时钟周期中执行的光线与由分层结构的节点标识的元素之间的相交测试的次数,同时最小化将错过一些相交测试的可能性。
12.本公开由此提供了一种机制,通过所述机制可以跟踪光线与由加速结构的节点标识的元素之间的相交测试的进度,从而生成标识相交测试过程的内部状态的信息。
13.该相交测试过程可以是迭代相交测试过程,其可以包括:获得针对光线的一个或多个光线请求,每个光线请求标识不同节点,所述不同节点标识光线将针对其经历相交测试的元素;通过处理所获得的一个或多个光线请求来标识光线与由所获得的一个或多个光线请求标识的任何节点标识的任何元素之间的任何交点;以及基于光线与由分层加速结构的节点标识的元素之间的任何标识的交点来更新进度信息。
14.任选地,获得针对光线的一个或多个光线请求的步骤包括获得针对光线的多达预定最大数目的光线请求。光线请求的预定最大数目可以等于1。
15.对于相交测试过程的第一次迭代,获得一个或多个光线请求的步骤可以包括生成标识分层加速结构的根节点的光线请求。
16.迭代相交测试过程还可以包括处理第一进度信息和任何标识的交点,以定义将在相交过程的后续迭代中获得的一个或多个光线请求。
17.在一些实施例中,处理第一进度信息和任何标识的交点以定义一个或多个光线请求的步骤包括:处理第一进度信息和标识的交点以标识第一数目的标识的交点,标识的交点的第一数目是作为光线和与具有在序列上位于第一进度信息标识的序列值处或之后的序列值或是具有所述序列值的一个或多个叶节点的父节点的叶节点相关联的非叶节点的元素之间的交点的标识的交点的数目;以及基于第一数目的标识的交点定义一个或多个光
线请求。
18.处理第一进度信息和任何标识的交点以定义一个或多个光线请求的步骤任选地包括,如果标识的交点的第一数目小于或等于预定最大数目:针对光线与非叶节点的元素之间的每个标识的交点定义光线请求,每个光线请求标识与非叶节点的相交元素相关联的节点。
19.处理第一进度信息和任何标识的交点以定义一个或多个光线请求的步骤可以包括:如果光线与非叶节点的任何元素之间的标识的交点的第一数目大于预定最大数目,则定义要针对相交测试过程的下一次迭代获得的第一组一个或多个光线请求,其中,第一组一个或多个光线请求中的光线请求的数目等于光线请求的预定最大数目,并且其中,第一组一个或多个光线请求中的每个标识的节点:与非叶节点的相交元素相关联;具有在与相交元素相关联的节点中在序列上最接近但不早于第一进度序列值的序列值,或者是具有所述序列值的一个或多个叶节点的父节点。
20.处理第一进度信息和任何标识的交点以定义一个或多个光线请求的步骤可以包括,如果光线与非叶节点的任何元素之间的标识的交点的第一数目为零:定义光线请求,所述光线请求标识分层加速结构的最高层级处的作为具有等于由第一进度信息标识的序列值的值的叶节点的父节点的节点。
21.第一进度信息可以包括等于针对其不知道光线是否与其元素中的任一个相交的叶节点的序列值中的最早序列值的值。
22.在一些实施例中,分层加速结构的每个非叶节点的值包括等于从该非叶节点分支的任何叶节点的最早序列值的值。
23.在一些示例中,进度信息还包括第二进度信息,其标识以下序列值中的在序列上最早的序列值:与在相交测试过程的该迭代中将不针对或尚未针对其定义任何光线请求的任何相交元素相关联的任何叶节点的序列值;以及从与在相交测试过程的该迭代中将不针对或尚未针对其定义任何光线请求的任何相交元素相关联的任何非叶节点分支的任何叶节点的序列值。
24.基于标识的交点更新进度信息的步骤可以包括,如果未标识与非叶节点相关联的元素的交点,则使用第二进度信息更新第一进度信息。
25.在一些示例中,基于任何标识的交点更新进度信息的步骤包括,如果未标识与非叶节点相关联的元素的交点,则控制第一进度信息以标识由第二进度信息标识的序列值。
26.还提供了一种用于在一个或多个光线yu由分层加速结构的节点标识的元素之间执行相交测试的相交测试系统,其中:为分层加速结构的每个叶节点定义序列值,其中,从任何给定非叶节点分支的叶节点的序列值相对于彼此是相续的;为分层加速结构的每个非叶节点定义值,其中,非叶节点的值便于标识从非叶节点分支的任何叶节点的序列值;为光线定义进度信息,所述进度信息包括第一进度信息,所述第一进度信息标识针对其不知道光线是否与其元素中的任一个相交的叶节点的序列值中的最早序列值;其中,所述相交测试系统被配置成:执行相交测试过程以标识光线与由分层加速结构的节点标识的元素之间的任何交点;以及在相交测试过程期间,基于光线与由分层加速结构的节点标识的元素之间的任何标识的交点来更新进度信息。
27.在相交测试系统中,节点可以标识用于相交测试的一个或多个元素,其中,由分层
加速结构的非叶节点标识的元素由分层加速结构的另一节点表示。
28.相交测试系统可以包括被配置成执行相交测试过程的相交测试处理器。还提供了一种配置成执行任何本文描述的方法的图形处理系统。还提供了一种包括任何本文描述的相交测试系统的图形处理系统。还提出了一种被配置成执行光线跟踪的光线跟踪系统,其中光线跟踪系统包括相交测试系统。光线跟踪系统可以包括相交测试系统和着色器。
29.相交测试系统、光线跟踪系统或图形处理系统可以包含在集成电路上的硬件中。
30.还提供了一种使用集成电路制造系统制造任何本文中的图形处理系统的方法。
31.还提供了一种使用集成电路制造系统制造如上简述的相交测试系统、光线跟踪系统或图形处理系统的方法,所述方法包括:使用布局处理系统处理相交测试系统、光线跟踪系统或图形处理系统的计算机可读描述,以生成包含相交测试系统、光线跟踪系统或图形处理系统的集成电路的电路布局描述;以及使用集成电路生成系统,根据电路布局描述来制造相交测试系统、光线跟踪系统或图形处理系统。
32.还提供了一种计算机可读代码,所述计算机可读代码被配置成在运行所述代码时使任何本文请求保护的方法被执行。还提供了一种计算机可读存储介质,在其上编码有计算机可读代码。存储介质可以是非暂态计算机可读存储介质。计算机可读代码当在计算机系统上执行时可以使计算机系统执行本文中描述的任何方法。
33.还提供了一种集成电路定义数据集,所述集成电路定义数据集当在集成电路制造系统中处理时将集成电路制造系统配置成制造所请求保护的任何本文描述的图形处理系统。
34.还提供了一种非暂态计算机可读存储介质,该非暂态计算机可读存储介质上存储有如上简述的相交测试系统、光线跟踪系统或图形处理系统的计算机可读描述,该计算机可读描述在集成电路制造系统中被处理时致使集成电路制造系统制造包含该相交测试系统、光线跟踪系统或图形处理系统的集成电路。
35.还提供了一种非暂态计算机可读存储介质,其上存储有如上简述的相交测试系统、光线跟踪系统或图形处理系统的计算机可读描述,当在集成电路制造系统中处理该计算机可读描述时,其使得集成电路制造系统:使用布局处理系统处理相交测试系统、光线跟踪系统或图形处理系统的计算机可读描述,以生成包含相交测试系统、光线跟踪系统或图形处理系统的集成电路的电路布局描述;以及使用集成电路生成系统,根据电路布局描述来制造相交测试系统、光线跟踪系统或图形处理系统。
36.还提供了一种被配置成制造图形处理系统的集成电路制造系统。
37.集成电路制造系统可以包括:非暂态计算机可读存储介质,其上存储有如上文简述的相交测试系统、光线跟踪系统或图形处理系统的计算机可读描述;布局处理系统,该布局处理系统被配置为处理计算机可读描述以生成包含相交测试系统、光线跟踪系统或图形处理系统的集成电路的电路布局描述;以及集成电路生成系统,该集成电路生成系统被配置为根据电路布局描述来制造相交测试系统、光线跟踪系统或图形处理系统。
38.该布局处理系统可以被配置成确定从集成电路描述导出的电路的逻辑部件的位置信息,以生成包含该相交测试系统、光线跟踪系统或图形处理系统的集成电路的电路布局描述。如对本领域的技术人员显而易见的,上述特征可以适当地组合,并且可以与本文所述的示例的任何方面组合。
39.本发明的这些和其它方面将从下文描述的实施例显而易见并参考所述实施例加以阐明。
附图说明
40.现在将参考附图详细描述示例,在附图中:
41.图1示出了根据包围体积结构划分的场景;
42.图2表示用于图1中所示的包围体积结构的分层加速结构;
43.图3是示出了一种方法的流程图;
44.图4是示出了一种方法的部分的流程图;
45.图5示出了分层加速结构;
46.图6示出了相交测试系统;
47.图7示出了在其中实现图形处理系统的计算机系统;以及
48.图8示出了用于生成包含图形处理系统的集成电路的集成电路制造系统。
49.附图示出了各种示例。技术人员将理解,附图中所示的元素边界(例如,框、框的组,或其它形状)表示边界的一个示例。在一些示例中,情况可能是一个元素可以被设计为多个元素,或者多个元素可以被设计为一个元素。在适当的情况下,贯穿各附图使用共同的附图标记来指示类似的特征。
具体实施方式
50.通过示例的方式给出以下描述,以使本领域的技术人员能够制造和使用本发明。本发明不限于本文描述的实施例,并且对所公开的实施例的各种修改对于本领域的技术人员将是显而易见的。
51.现在仅通过示例的方式来描述实施例。
52.在详细解释所公开系统的示例之前,解释所使用的加速结构的示例将是有用的。
53.图1示出了场景100,其包括许多不同的对象或图元(示出为圆形、正方形和三角形)。为了简单起见,场景以两个维度示出,但在典型示例中,图元在三维(3d)空间中定位和取向,并且包围盒是三维包围体积。场景在概念上可划分成包围盒101-112,即轴对齐包围盒(aabb)。由此,每个包围盒表示场景的一部分。从概念上讲,每个包围盒界定或包含一个或多个元素,其中元素可以是包围盒、图元或用于光线跟踪架构中的另一合适的元素结构(例如,如果与光线相交,则触发使用另一分层结构的实例)。例如,第一组包围盒101-104可以各自界定一个或多个其它包围盒。第二组包围盒105-112可以各自界定场景中的一个或多个图元。例如,包围盒105可以界定第一组图元。
54.在所示的示例中,第一包围盒101界定两个其它包围盒104、105;第二包围盒102界定两个其它包围盒106、107,并且第三包围盒103界定三个其它包围盒108、109、110。第一包围盒101的其它包围盒104中的一个,“第一其它包围盒104”,继而界定两个额外包围盒111、112。
55.显而易见的是,如果光线未能与包围盒相交,则可以推断光线不会与由该包围盒界定或包含的任何元素相交。因此,使用包围盒提供了一种用于减少需要执行的相交测试的数目的机制。
56.场景100可以由分层加速结构20表示,如图2所示。分层加速结构20由从根节点200(表示场景100)分支的多个节点201-212形成。每个节点201-212表示相应的包围盒101-112。具体而言,每个节点可以包括标识由该节点表示的包围盒包含的任何元素的列表(有时标记为“测试列表”)或其它集合。以此方式,每个节点标识(“具有”)可以与光线相交的一个或多个元素(例如,其它包围盒或图元)。在所示的分层加速结构20中,这种标识被示出为来自节点的分支。
57.用于确定用于构建分层结构的节点的包围盒的方法在本领域中是已知的,并且可以以自顶向下的方式(例如,在根节点处开始并且沿分层结构向下工作)执行,或者可以以自底向上的方式(例如,在叶节点处开始并且沿分层结构向上工作)执行。
58.可以通过从根节点开始通过分层加速结构来对光线进行工作,从而对光线执行相交测试。标识节点的元素(例如,从节点分支的元素)与光线之间的任何交点。如果确定光线与另一包围盒(其本身由分层加速结构的节点表示)相交,则针对由该包围盒表示的节点的元素测试光线,从而通过分层结构对其光线进行工作。
59.确定光线和元素之间的交点的方法是众所周知的,并且通常包括处理元素的几何形状和光线的数据以标识光线是否与元素相交。
60.显而易见的是,分层加速结构的所有非叶节点标识至少一个其它包围盒,每个其它包围盒由分层加速结构的另一节点表示。
61.因此,必须在节点表示的元素(包围盒)与节点标识的元素之间进行区分,节点标识的元素是包含在节点表示的包围盒内的元素。
62.分层加速结构的叶节点标识至少一个图元或单实例(特定类型的包围盒的示例,这将在下面简要解释)。一些分层结构可以仅包括标识实例的叶节点。其它分层结构可以仅包括标识图元的叶节点。
63.在该示例中的图元(圆形、三角形和正方形)是简单的几何形状;因此,可以使用单个图元来描述它们中的每一个。更复杂的对象可以由多个图元来描述。如本领域技术人员所公知的,三角形图元在图形应用中是常见的。然而,本公开的范围不限于三角形图元。具体而言,在光线跟踪中,在它们可以通过编程方式定义的意义上,图元可以是“程序性”的。
64.图1和图2中示出的示例描绘了一种简单的情境,其中,场景的所有对象由分层加速结构的叶节点直接标识的图元表示。
65.然而,在一些示例中,对象可以由“实例”表示,所述实例是特定类型的包围盒,并且提供分层加速结构20的叶节点的元素的另一示例。
66.实际上,实例对场景中的预定义对象进行定位和取向。实例与描述对象的“局部空间”内的预定义对象的底级加速结构(blas)相关联,例如,标识相对于一些预定义坐标空间(其可能不同于场景的“世界空间”,这取决于场景内的对象的给定实例的取向)形成对象的图元的相对位置。blas本身可以由节点形成,所述节点以与先前描述的结构20类似的方式标识界定/包围预定义对象的图元的包围盒。因此,场景中的对象的实例可以由所谓的实例变换矩阵指定,所述变换矩阵将如对象的“局部空间”中定义的对象(及其相关联的包围体积分层结构)映射到“世界空间”中的所需位置/取向。实例变换矩阵还可以对底层对象执行其它操作,例如拉伸或反射。
67.如果检测到光线与实例之间的交点,这可以触发光线遍历与该实例相关联的
blas,从而确定光线与预定义对象的图元之间的任何交点。
68.以此方式,实例被视为一种类型的包围盒,其在与光线相交时触发该光线与不同分层加速结构的一个或多个节点的进一步相交测试,而不是与原始分层加速结构的其它节点的相交测试。
69.与实例相交由此触发光线遍历次级分层加速结构,即底级加速结构(blas)。当一个或多个blas可用时,具有具有/标识元素(其是标识blas(例如,结构20)的实例)的节点的分层加速结构通常被称为顶级加速结构(tlas)。由此,tlas以高级别描述场景,从顶级的根节点开始,并且在(标识blas)的实例和/或最低级的图元中终止。tlas的一个示例仅在最低级的实例中终止(即,本身不包括任何图元)。tlas的精确性质将取决于实施细节。
70.用于遍历blas的必要操作是本领域众所周知的,例如,使用实例变换矩阵变换“世界空间”光线的参数或“局部空间”节点的几何形状,以将光线和(“局部空间”节点的)几何形状置于相同坐标系中以执行相交测试,并且为了简洁起见未详细描述。
71.为了在光线与场景中表示的元素之间执行相交测试,先前的方法利用了光线请求。光线请求标识光线以及具有光线进行相交测试所针对的一个或多个元素的分层加速结构的节点。因此,光线请求是针对分层结构的特定节点的一个或多个子节点测试光线的请求。
72.在先前的方法中,如果确定(光线请求的)光线与包围盒相交,这会触发生成针对光线的新光线请求。新光线请求是在该光线与表示包围盒的节点的元素之间执行相交测试的请求。因此,单个光线请求可以触发生成多个新光线请求(例如,如果确定光线请求的光线与包含在由光线请求的节点表示的包围盒内的超过一个包围盒相交)。以这种方式生成的光线请求可以存储在堆栈上以用于稍后的相交测试,其中该相交测试本身有可能向该堆栈添加更多光线请求。
73.本公开认识到,现有方法的这种特征意味着可能发生链式反应,其中可能针对给定光线生成极大数目的光线请求(例如,如果它与场景的许多元素相交)。由于通常希望同时对多个光线执行相交测试,因此在相交测试过程中使用多个光线会加剧这种链式反应效应。因此,先前的方法可能导致计算成本高昂的相交测试过程,从而需要大量的存储器和处理能力来执行完整的相交测试(即,相交测试过程)。
74.本公开提供了一种用于使用分层加速结构执行相交测试的新机制。这种新机制提供了一种执行相交测试的过程,其能够使用相对较低(或可配置)量的存储器和处理能力来对给定光线执行光线跟踪。所提供的机制利用了新的解决方案,其中针对每个光线存储关于哪些节点已经或尚未被处理的信息。然后,可以在多个轮次中执行光线的完整相交测试,其中,在任何特定轮次中的任何给定时刻,对于光线而言,有限或受限数目的光线请求是活动的。所存储的信息允许后续轮次在先前轮次结束时恢复相交测试,使得可以完成光线的完整相交测试。
75.图3示出了由实施例执行的计算机实施的方法300。计算机实施的方法300被设计成用于在(单个)光线与由分层加速结构描述的元素之间执行相交测试。
76.该计算机实施的方法包括初始化过程310和相交测试过程320。初始化过程310设置参数和值以用于相交测试过程320中。
77.初始化过程310包括为分层加速结构的每个叶节点定义序列值的步骤311。从相同
父节点分支的叶节点的序列值是彼此相续的。应当清楚的是,这在整个分层加速结构中是迭代的,例如使得从任何给定非叶节点(可能经由一个或多个其它非叶节点)分支的所有叶节点具有彼此的序列值。
78.序列值(可以是单调值)由此为每个叶节点提供唯一标识符,使得相同加速结构没有叶节点与相同序列值相关联。
79.序列值的集合形成序列值的(整体)序列。从相同(父)节点分支的节点的所有序列值构成序列值的子序列。每个序列或子序列中的序列值是彼此相续的。
80.在本公开中提及“在序列上之前/更早”或“在序列上之后/更晚”时,这是指序列中两个元素之间的位置比较。在本公开中提及“在序列上下一个”时,这是指在序列值的整体序列中紧随特定序列值之后的序列值。“在序列上最早”或“在序列上最晚”是指序列值的特定范围或子集内的在序列上最早/最晚的值。
81.作为简单的工作示例,每个序列值可以是单调的(例如,从0开始,以1为步长递增,到n-1结束,其中n是叶节点的数目)。序列值的其它合适的序列对于技术人员会是显而易见的,例如:从1开始(以1为步长递增)到n结束;从n开始(以1为步长递减)到1结束;从n-1开始(以1为步长递减)到0结束;从0开始(以2为步长递增)到2n-2结束;等等。
82.为每个叶节点提供的序列值系统允许跟踪通过分层结构的进度。具体而言,可以确定针对哪些叶节点已知它们是否具有与光线相交的元素。
83.初始化过程310还包括为每个非叶节点定义(即,分配或设置)值的步骤312。非叶节点的值有助于标识从该非叶节点分支的叶节点的序列值(的范围),这继而有助于标识分层加速结构中的用于测试针对其叶节点的特定子集的轮次的适当开始点。
84.例如,非叶节点的值可以标识从该非叶节点(例如,经由一个或多个其它叶节点)分支的叶节点的所有序列值中的仅最早或仅最晚序列值。在特定示例中,非叶节点的值可以等于从该非叶节点分支的任何节点的所有序列值中的最早序列值。
85.因此,作为其它非叶节点的父节点的非叶节点的值可以等于从其分支的所有非叶节点的值中的最早序列值。这在功能上等价于在(经由其它非叶节点)从其分支的所有叶节点的值中的具有最早序列值的相同非叶节点。
86.此方法有助于标识从所述非叶节点分支的叶节点的所有序列值,因为可以在由该非叶节点标识的序列值与由在加速结构的相同层级上的每个其他非叶节点标识的序列值之间进行比较(例如,以确定从所述非叶节点分支的叶节点的序列值的范围)。
87.作为另一示例,非叶节点的值可以标识从其分支的叶节点的一组序列值。具体而言,非叶节点的值可以包含未包含在任何其他叶节点的序列值中的与从其分支的叶节点的序列值相关/特定的信息(即,对于从其分支的叶节点的序列值而言唯一的信息)。例如,如果叶节点的序列值是连续二进制值,则非叶节点的值可以标识相关叶节点的唯一(和公共)的数据(例如,最高有效位)。
88.例如,考虑加速结构包括4个叶节点的情境,其中的前两个叶节点从第一非叶节点分支,后两个叶节点从第二非叶节点分支。叶节点的序列值可以设置为000、001、010和011。第一非叶节点的值可以设置为00(因为作为其序列值的两个最高有效位,这包含了对于前两个叶节点唯一且公共的信息),并且第二非叶节点的值可以设置为01(因为作为其序列值的两个最高有效位,这是对于后两个叶节点唯一且公共的信息)。
89.此方法可以降低计算复杂性并增大用于为分层结构的所有节点定义(序列)值的机制的灵活性,因为可以使用自顶而下的方法来分配值。如果对由每个节点标识的元素的最大数目存在约束,则这尤其有利,因为这对从其分支的叶节点的序列值的可能选项的数目提供了约束。
90.作为又一示例,步骤312可以包括为每个非叶节点定义两个值,例如,在从该非叶节点分支的叶节点的所有序列值中标识最早和最晚序列值。
91.其他示例对于技术人员将是显而易见的。
92.初始化过程310还包括定义光线遍历分层加速结构的进度信息的步骤315。进度信息有助于标识光线通过加速结构的当前进度,例如,标识针对哪些叶节点已知它们是否具有与光线相交的元素。
93.进度信息可以作为光线的光线信息的一部分或与光线信息一起存储,例如,存储在如下文所述的光线储存库中。
94.显而易见的是,如果多个光线要与由分层结构表示的单个场景的元素进行相交测试,则只需要执行步骤311和312一次。对每个个体光线执行步骤315,从而为每个光线定义进度信息。可以(例如,并行地)执行步骤315的多个实例/版本,每个版本针对不同的光线。
95.进度信息至少包含第一进度信息315a。第一进度信息315a包含有助于标识针对其已知光线是否与任何元素相交的叶节点的数据。例如,第一进度信息可以标识针对其不知道光线是否与其元素中的任一个相交的所有叶节点的序列值中的最早序列值。作为替代示例,第一进度信息可以标识针对其已知光线是否与其元素中的任一个相交的所有叶节点的序列值中的最晚序列值。
96.在下文出于理解而使用的一个工作示例中,第一进度信息315a可以标识“第一进度序列值”,即针对其不知道光线是否与其元素中的任一个相交的叶节点的序列值中的最早序列值。具体而言,第一进度信息可以包括“第一进度序列值”。然而,技术人员将能够提供用于(例如,使用指针等)标识这个值的其它方法。
97.最初,例如在初始化过程期间,第一进度序列值是所有叶节点的序列值中的(在序列中的)最早序列值。
98.迭代地执行相交测试过程320。过程320的每次迭代可以降低分层加速结构的一个层级,直到到达叶节点为止。然后,如果尚未针对所有叶节点的元素获得或以其它方式确定相交结果,则过程320可以在较高层级的节点处(例如,在根节点或另一非叶节点处)恢复处理,并且接着可以在不同路径上使分层加速结构降级。分层加速结构的每次降级可以称为轮次。当已知光线是否与分层加速结构的所有叶节点的元素相交时,终止相交测试过程。
99.显而易见的是,如果光线与由非叶节点表示的包围盒相交,则仍然不知道该光线是否与由所述非叶节点标识的元素(即,由该节点表示的包围盒中包含的元素)相交。然而,如果光线未能与由非叶节点表示的包围盒相交,则知道该光线将不与由所述非叶节点标识的任何元素(即,由该节点表示的包围盒内包含的元素)相交。
100.相交测试过程320包括获得针对待处理的(单个)光线的一个或多个光线请求的步骤321。光线请求标识光线以及具有光线进行相交测试所针对的一个或多个元素的分层结构的节点。因此,光线请求是针对由分层结构的特定节点标识的元素测试光线的请求。可以定义标识分层加速结构的根节点的初始光线请求。然后,进一步的光线请求可以在相交过
程320的迭代期间被定义,并且可以暂时存储在存储器中(例如,在小堆栈上),在步骤321中可以从存储器获得进一步的光线请求。
101.可以存在在步骤321中获得的光线请求的最大数目,其是预定的—即是“预定最大数目”。优选地,预定最大数目相对较小,例如不超过32,例如不超过16,例如不超过8,例如为1。
102.具体而言,步骤321获得标识具有第一进度序列值处或之后的序列值的叶节点,和/或是此类叶节点的父节点的非叶节点的光线请求。标识具有全部小于第一进度序列值的序列值的叶节点和/或是此类叶节点的父节点的非叶节点的光线请求标识已经针对其完成测试的节点。因此,任何此类光线请求(如果存在的话)都可以因为表示重复的工作而被丢弃。
103.在一些示例中,在相交测试过程的第一次迭代期间,步骤321可以包括获得多达预定数目的光线请求,所述光线请求一起标识一个或多个非叶节点,所述一个或多个非叶节点是在加速结构的最高级别节点中具有在序列上最早值的叶节点的父节点。在一些示例中,预定数目是1,但这可以根据加速结构的布局(例如,如果加速结构具有多个根节点)而变化。
104.预定数目优选地小于或等于(光线请求的)预定最大数目。
105.相交测试过程的后续迭代可以获得由相交测试过程的先前迭代定义的光线请求,如下文所述。
106.相交测试过程320进一步包括通过处理所获得的一个或多个光线请求来标识光线与由所获得的一个或多个光线请求标识的节点标识的任何元素之间的任何交点的步骤322。此步骤可以通过将光线的几何形状与(每个光线请求的)节点标识的元素的几何形状进行比较以标识任何交点而以常规方式执行。可以基于所标识的交点的数目来设置被称为重复值或重复标志的指示符或标志。如果交点的数目大于预定数目(例如,光线请求的预定数目),则标志被设置成指示在该轮次中不能处理所有交点,并且将需要至少一个另外的轮次。
107.相交测试过程320包括基于标识的交点更新进度信息(例如,第一进度序列值)的步骤323。更新第一进度序列值以反映针对光线的通过测试过程的进度,从而允许标识针对其交点结果已知的那些叶节点以及针对其交点结果未知的那些叶节点。
108.可以通过如下方式执行步骤323:处理标识的交点(和非交点)以推断或标识光线与具有在序列上位于第一进度序列值处或之后的序列值的叶节点标识的元素之间的任何交点(和非交点),以及相应地更新第一进度序列值。
109.例如,考虑步骤322标识光线与由非叶节点标识的元素之间的一个或多个交点的情境。第一进度序列值可以设置成以下叶节点的值中的在序列上最早的值:表示相交元素的任何叶节点(如果存在的话);以及从表示相交元素的非叶节点分支的任何叶节点(如果存在的话)。因此,更新第一进度序列值以反映沿分层加速结构的级别的向下(即,朝向叶节点)进度。更新后的第一进度序列值指示要进行相交测试的下一叶节点的序列值,这继而允许推断具有较小值的任何叶节点的相交结果现在已知,例如因为它从不与光线相交的非叶节点分支。
110.作为另一示例,考虑步骤322未标识光线与由光线请求标识的节点标识的任何元
素之间的交点的情境。在简化的实施例中,第一进度序列值可以被设置成以下叶节点的值中的在序列上最晚的值之后的下一序列值:由一个或多个光线请求标识的任何叶节点(如果存在的话);以及从由一个或多个光线请求标识的任何非叶节点分支的任何叶节点(如果存在的话)。因此,更新第一进度序列值以指示测试完成(对于分层加速结构的该轮次),并且在由光线请求标识的节点下方的分层加速结构的分支中不会发现更多交点。
111.如果一个或多个光线请求仅标识(一个或多个)叶节点,则可以在步骤323中将第一进度序列值更新为在步骤322中处理的光线请求的叶节点的所有序列值中的最晚序列值之后的下一序列值。因此,第一进度序列值指示哪些叶节点在步骤322中已经被处理,哪些叶节点未被处理。
112.上文提供的示例提供了步骤323所提供的机制的简单实施方式。然而,稍后将描述用于执行步骤323的更完整和有效的方法。
113.相交测试过程320还包括过程325,其确定过程320应当结束还是开始新轮次。如果不需要生成新光线请求(例如,找不到交点,或者这些交点都具有由叶节点标识的元素,例如,图元),则该过程不能或不需要进一步向分层加速结构中降级。
114.重复标志可以用于确定是否需要新轮次。如果未设置重复标志,则不存在要测试的更多节点,并且过程320可以结束。然而,如果已经设置了重复标志(如下所述),则这指示需要通过分层加速结构的新轮次,并且过程320不结束。
115.在一些实施例中,省略重复标志/值。具体而言,可以使用第一进度信息代替重复标志/值(因为它将指示针对哪些节点已知/未知光线是否相交)。如果第一进度信息指示针对所有节点已知相交/不相交,则过程320可以结束。
116.相交过程320还包括处理任何标识的交点和第一进度信息以定义将在相交过程320的后续迭代中获得的一个或多个光线请求的过程324。例如,当标识与元素的交点时,可以针对表示该元素的节点定义新光线请求。当在相交过程320的后续迭代中获得此光线请求时,将针对交点测试该节点标识的元素。以此方式,测试过程在分层加速结构中朝向叶节点降级。过程324可以定义多达预定最大数目的光线请求以进行下一次迭代。如果定义的光线请求的数目少于交点的数目(其中元素由节点表示),则显然地将需要在后续轮次中重新访问这些元素。此时,可以使用第一进度信息来为在当前轮次中未针对其定义光线请求的那些交点定义光线请求。此外,如果测试过程已经到达分层加速结构的底部并且设置了重复标志(如上文关于步骤325所述),则应该开始新轮次。为了开始新轮次,可以清除重复标志(如果存在的话),并且可以定义新光线请求,其指示新轮次在分层加速结构中的起始点。此光线请求可以标识根节点,或如下文所述可以标识结构中的另一节点。
117.图4示出了过程324的实施例。
118.过程324包括,如果步骤322标识出光线与一个或多个包围盒(每个包围盒由分层加速结构的节点表示)之间的交点,则基于交点生成一个或多个光线请求。具体而言,每个生成的光线请求可以标识光线以及表示相交包围盒中的不同包围盒的节点。
119.如果步骤322未能标识光线与包围盒之间的任何交点,则过程324可以确定需要(通过分层结构的)新轮次。在这种情况下,过程324使用第一进度信息来生成光线请求。具体而言,第一进度信息用于标识针对其不知道叶节点的元素是否与光线相交的叶节点。然后,第一进度信息可以例如用于标识分支到此标识的叶节点中的非叶节点。换句话说,定义
光线请求,其将导致在分层加速结构中的第一进度信息指示尚未对光线进行测试的部分中对光线进行相交测试。
120.定义一个或多个光线请求的精确过程可以取决于在步骤322中标识的光线与由在步骤321中获得的光线请求中标识的任何非叶节点标识的任何元素之间的交点的数目。
121.具体而言,所述过程可以取决于光线与由以下任一项表示的任何元素之间的(在步骤322中)标识的交点的数目:由具有在序列上位于由(在步骤321中获得的)光线请求标识的非叶节点标识的第一进度序列值处或之后的值的叶节点表示;或者由作为具有在序列上位于由(在步骤321中获得的)光线请求标识的非叶节点标识的第一进度序列值处或之后的值的至少一个叶节点的父节点的非叶节点表示。
122.因此,过程324可以包括执行确定第一数目的标识的交点的步骤324a。标识的交点的第一数目是作为光线与由具有在序列上位于第一进度信息标识的序列值处或之后的序列值或作为具有所述序列值的一个或多个节点的父节点的节点表示的元素之间的交点的标识的交点的数目。通过处理第一进度信息和标识的交点来执行步骤324a。
123.由步骤324a执行以确定叶节点(表示相交元素)是否具有在序列上位于由第一进度信息标识的序列值处或之后的序列值的过程是相当简单的,只需通过将该序列值与第一进度序列值进行比较即可。
124.由步骤324a执行以确定特定非叶节点是否是具有在序列上位于第一进度序列值处或之后的序列值的叶节点的父节点的过程将取决于每个非叶节点的值的内容。
125.考虑第一情境,其中步骤312为每个非叶节点定义两个值,第一值标识从该非叶节点分支的任何叶节点的最早序列值,第二值标识从该非叶节点分支的任何叶节点的最晚序列值。可以通过确定第一进度序列值是否落在由非叶节点的第一值和第二值标识的序列值定义的序列内,来确定节点是否是具有在序列上位于第一进度序列值处或之后的值的叶节点的父节点。序列的下限由第一值限定(例如等于第一值),序列的上限由第二值限定(例如等于第二值)。
126.考虑第二情境,其中步骤312为每个非叶节点定义单个值,所述单个值标识从其分支的任何叶节点的最早序列值。在这种情境中,可以通过确定第一进度序列值是否落在由以下值限定的序列内来执行确定节点是否是具有在序列上位于第一进度序列值处或之后的值的叶节点的父节点:所述节点的值标识的序列值(作为序列中的最早序列值);以及在序列上位于由所述节点的值标识的序列值之后的同一分层级别处的其他节点的序列值中的在序列上最接近的值(作为序列中的最晚序列值)。
127.其他方法对于技术人员将是显而易见的。
128.如果步骤324a确定标识的交点的第一数目大于光线请求的预定最大数目,则可以执行步骤324b。
129.步骤324b可以包括为过程320的下一次迭代定义一个或多个光线请求(“第一组一个或多个光线请求”),其中,定义的光线请求的数目等于预定最大数目m。每个定义的光线请求都可以标识具有在序列上位于第一进度序列值处或之后的序列值或作为具有所述序列值的叶节点的父节点的节点(表示步骤322中标识的相交元素中的一个)。
130.具体而言,第一组一个或多个光线请求可以标识具有在序列上最接近(但不早于)第一进度序列值的序列值或是具有所述序列值的节点的父节点的一个或多个节点(每个节
点表示相交元素)。
131.如果步骤324a确定标识的交点的第一数目为零,则可以执行步骤324c。
132.步骤324c可以包括为下一次迭代定义单个光线请求。定义的光线请求可以标识分层结构的最高层级的作为具有第一进度序列值的叶节点的父节点的节点。
133.如果步骤324a确定标识的交点的第一数目大于零但小于或等于预定最大数目m,则可以执行步骤324d。
134.步骤324d可以包括为在步骤322中标识的每个交点定义光线请求。具体而言,每个定义的光线请求可以标识表示相交元素中的相应相交元素的节点。
135.返回到图3,迭代过程320在针对分层结构的每个叶节点的每个元素已知光线是否与所述元素相交时结束。如先前所述,可以在步骤325中检查此标准。该信息可以由光线的标志(例如,重复值)包含,该标志指示是否存在具有针对其不知道光线是否相交的元素的未完成的叶节点。可以在步骤322或323中,例如,基于未能标识任何交点以及(更新的)第一进度信息不再标识分层结构的叶节点的任何序列值更新光线的标志。在其它示例中,可以使用第一进度信息。
136.如果光线请求的预定最大数目m为1,则上述方法实际上通过分层加速结构执行一个或多个搜索轮次,其中,搜索轮次是针对分层结构的每个层级上的节点的元素测试光线的单个过程,直到不标识任何交点或直到执行与叶节点的元素的相交测试为止。每个搜索轮次包括相交测试过程320的一个或多个迭代。
137.方法300的先前描述描述了基于任何标识的交点对第一进度信息进行天真更新(naively updated)的相当简单的示例。
138.在一些示例中,当未标识出与非叶节点的交点时,可以通过存储关于一个或多个过去交点的信息来改进对第一进度序列值的更新。
139.具体而言,进度信息还可以包括第二进度信息315b。第二进度信息标识以下序列值中的在序列上最早的序列值:表示在相交测试过程的该迭代中将不针对或未针对其定义任何光线请求的任何相交元素的任何叶节点的序列值;以及从表示任何相交元素的任何非叶节点分支的(在相交测试过程的该迭代中将不针对或尚未针对其定义任何光线请求的)任何叶节点的序列值。
140.该信息可以呈一个或多个“第二进度序列值”的形式,等于此在序列上最早的序列值。可以在在过程324或在步骤323中生成光线请求之后生成/更新此第二进度信息。
141.例如,如果光线与由具有在序列上位于第一进度序列值处或之后的序列值的叶节点或作为具有所述序列值的一个或多个叶节点的父节点的非叶节点表示的多于预定最大数目(m)的元素相交,则可以更新第二进度信息以标识如下序列值中的第(m+1)个在序列上最早的序列值:表示(在步骤322中标识的)任何相交元素的任何叶节点的序列值;以及从表示(在步骤322中标识的)任何相交元素的任何非叶节点分支的任何叶节点的序列值。
142.如果使用第二进度信息,则在步骤323中更新第一序列信息的步骤可以包括,如果步骤322未标识光线与非叶节点的元素之间的交点,则更新第一序列信息以标识由第二进度信息标识的相同序列值。以此方式,第二进度信息用于指示需要在通过分层加速结构的稍晚轮次中进行测试的节点。与仅基于第一进度信息的系统不同,使用第二进度信息的系统能够将从在当前轮次期间执行的相交测试导出的信息转入到下一轮次中。具体而言,当
存针对其未标识交点的节点时,第二进度序列值可以比第一进度序列值推进得更远。这可以允许在后续轮次中完成较少的相交测试工作。
143.如果步骤322未标识光线与非叶节点的元素之间的交点,则这种方法使得基于先前(例如,在图4中的步骤324c中)由第二进度信息标识的序列值定义步骤324中的光线请求。
144.返回图4,在步骤324e(即,如果交点的第一数目在0与m(含)之间,则当也执行步骤324d时被执行)中,如果光线与具有在序列上位于第一进度序列值处或之后的值的非叶节点表示的零个和最大数目之间的元素相交,也可以使用第二进度信息来定义更多光线请求。
145.步骤324e包括使用第二进度信息为过程320的后续迭代定义至少一个其他光线请求。其他光线请求可以例如标识分层结构的最高层级的节点,该节点是具有在序列上最接近但不晚于由第二进度信息标识的序列值的序列值的一个或多个叶节点的父节点。这种方法可以帮助预测未来光线请求的生成。
146.当然,如果光线请求的预定最大数目(m)为1,则不执行步骤324e。
147.在上述方法中,通常假设第二进度信息仅标识表示光线(但自身尚未测试)相交的元素的单个叶节点或从表示所述元素的非叶节点分支的单个叶节点的序列值。然而,在一些示例中,第二进度信息可以标识表示光线相交的元素的多个叶节点和/或从表示所述元素的一个或多个非叶节点分支的叶节点的序列值。
148.通常,第二进度信息标识表示先前被标识为与光线相交但在过程300的当前迭代期间针对其未生成或将不生成光线请求的元素(或从表示所述元素的非叶节点分支)的叶节点(具有在序列上位于第一进度序列值之后的值)的在序列上最早的值中的一个或多个。相比之下,第一进度信息标识尚未获得相交结果或另外未知相交结果的叶节点,而不管该叶节点是表示已经或将要在当前轮次中进行相交测试的元素还是从表示所述元素的非叶节点分支。
149.上述方法可以针对任何合适的分层加速结构(包括tlas或blas)执行。
150.在特定示例中,针对tlas执行上述方法300,其中针对由确定与光线相交的实例标识的每个blas执行该方法的新版本或实例化。举例来说,如果在步骤322中检测到光线与实例相交,则可以对方法300的新版本进行实例化。
151.为了清楚起见,在本文中使用术语“版本”意指方法的通常被称为“实例”的新实例化。不使用常用术语“实例”,以避免与先前描述的分层加速结构的实例混淆。
152.因此,显而易见的是,在针对tlas的方法300的任何单次执行期间,则可以执行针对blas的方法300的一次或多次执行。
153.任选地,方法300的原始版本(例如,针对tlas)被暂停,同时相对于blas处理光线。在一些实施例中,一次仅传播方法300的一个版本(例如,传播针对tlas的版本300,传播或针对blas的方法300的单个版本)。
154.在一些示例中,进度信息可以分开存储关于tlas和进行中的blas的进度信息,即也存储blas特定的进度信息。
155.因此,进度信息可以存储第三进度信息,当方法300的第二版本已经通过与tlas中的实例相交触发时,所述第三进度信息标识针对其不知道光线是否与其元素中的任一个相
交的(blas的)叶节点的序列值中的最早序列值。
156.分开存储tlas和blas特定的信息允许在使用blas的光线追踪已完成时容易地重新开始方法300的原始版本(针对tlas)。
157.在使用blas的光线跟踪已完成之后,可以更新第一进度信息以标识位于表示使用blas触发光线跟踪的实例的节点的序列值之后的序列值。这可以使用任何先前描述的方法(例如,利用第二进度信息等)来执行。
158.在一些示例中,方法300进一步包括存储实例信息。实例信息标识具有在序列上位于第一进度序列值处或之后的序列值的任何叶节点(标识一个或多个实例),其中确定光线与由叶节点标识的实例相交。
159.如果存储了有效实例信息(即,如上所述,如果光线与标识实例的叶节点相交),则暂停方法300(针对tlas),并针对与实例(由具有由该实例信息标识的在序列上最早的值的节点标识)相关联的blas执行方法300的新版本。每次完成针对blas的方法的版本时,都更新实例信息。
160.如果没有存储有效实例信息,则方法300如常进行。
161.在单个光线与由单个分层加速结构(以及任选地一个或多个辅分层加速结构或取决于其的blas)描述的元素之间执行相交测试的上下文中描述了上述方法。
162.在一些实施例中,对多个光线中的每一个执行方法300的版本。相同的分层结构可以用于多个光线中的每一个(例如,以在相同场景中的元素与多个不同光线中的每一个之间执行相交测试)。
163.可以针对方法300的用于不同光线的不同版本同时执行标识光线与由一个或多个光线请求标识的任何节点标识的任何元素之间的任何交点的步骤。
164.具体而言,步骤322可以包括相干性收集步骤,其包括将(方法300的不同版本间的不同光线请求的)多个光线收集或捆绑成光线的集合(“光线集合”)。每个光线集合标识要针对同一节点的元素进行测试的光线。这是通过如下方式执行的:处理在方法300的不同版本中获得的光线请求以标识多组标识相同节点的光线请求,从而确定哪些光线形成相同光线集合的一部分。
165.每个光线集合然后可以针对该光线集合的所有光线公共的节点的元素进行测试,从而(对于每个光线)标识光线与节点的元素之间的任何交点。
166.使用相干性收集步骤意味着仅需要从存储器检索一次(特定节点的)元素列表和关于测试列表的元素的(几何形状)信息,以便测试光线集合中的所有光线,例如,而不是针对每个单独的光线请求(例如,对于方法300的每次迭代)检索。因此,可以显著地减少存储器检索的次数。
167.在一些实施例中,描述整个场景的分层加速结构被细分为两个或更多个子结构,每个子结构表示分层加速结构的一部分并且自身是分层加速结构。可以执行方法300的多个版本以在光线与每个子结构的元素之间执行相交测试过程。因此,如果分层加速结构被细分为n(n》=2)个子结构,则可以针对单个光线对方法300的n个版本进行实例化。
168.可以对多个光线中的每一个执行过程300。在这些情况下,步骤311和312仅需要针对要针对相同场景的元素(例如,相同分层加速结构的元素)测试的每个光线执行一次。
169.图5示出了分层加速结构500的简化工作示例。分层加速结构500在此处是tlas,其
具有六个叶节点l1-l6、两个非叶节点nl1-nl2和根节点r。当然,根节点也是非叶节点的示例。
170.每个节点表示场景的不同包围盒。每个叶节点标识一个或多个元素(例如,图元或实例)。每个非叶节点标识一个或多个包围盒,每个包围盒与分层结构的另一节点相关联并由其表示。
171.第一叶节点l1、第二叶节点l2和第三叶节点l3都从第一非叶节点nl1分支。第四叶节点l4、第五叶节点l5和第六叶节点l6都从第二非叶节点nl2分支。第一非叶节点nl1和第二非叶节点nl2都从根节点r分支。
172.每个叶节点l1-l6被分配了不同的序列值(此处:范围为0至5,以1递增)。从相同非叶节点分支的叶节点的序列值是彼此相续的。因此,从第一非叶节点分支的第一叶节点、第二叶节点和第三叶节点的值(在0到2的子序列中)是彼此相续的。因此,从第二非叶节点nl2分支的第四叶节点l4、第五叶节点l5和第六叶节点l6的值(在3到5的子序列中)是彼此相续的。
173.每个非叶节点nl1、nl2、r被分配了标识(或促进标识)(例如,经由一个或多个其它叶节点)从其分支的叶节点的最早序列值的值。作为一个示例,每个非叶节点可以被简单地分配了等于从其分支的叶节点的最早序列值的值。例如,可以为第二非叶节点分配值3以标识从其分支的叶节点的最早序列值。
174.下文描述了将(参考图3描述的)方法应用于分层加速结构500的描述,以改进上下文理解。为了简单起见,可以获得和/或定义的光线请求的最大数目被设置为1。还假设,如果使用,第二进度信息仅标识单个其它值(即,针对单个其它交点的值)。
175.对于这种情境,光线与和第一叶节点l1、第三叶节点l3和第五叶节点l5相关联的元素相交。因此,将存在通过分层结构的三个搜索轮次,其中,搜索轮次是针对分层结构的每个层级处的节点的元素测试光线的单个过程。由于分层结构由三个层级形成,因此每个搜索轮次包括相交测试过程的三次迭代。
176.对于相交测试过程的第一次迭代,第一进度信息标识第一叶节点l1(具有最早序列值),例如,被设置为0。因此,第一进度信息指示相交结果未知的第一叶节点。在第一次迭代中获得的光线请求可以标识根节点r。
177.相交测试过程接着标识光线与由根节点r标识的每个元素(此处:由另外的节点表示的包围盒)之间的交点。对于根节点的两个元素,即对于由不同非叶节点nl1、nl2表示的两个元素,都将检测交点。然后基于检测到的交点更新第一进度信息。此处,第一进度信息没有任何改变,因为与相交的元素相关联的节点的任何序列值的在序列上最早的值标识与由当前第一进度信息标识的现有序列值相同的值。定义单个新光线请求,其标识第一非叶节点nl1(因为其具有在序列上最早的值)。如果使用,则第二进度信息标识第二非叶节点nl2的值(因为它具有下一序列值)。因此,基于在当前搜索轮次期间确定的交点的知识,第二进度信息标识将来搜索轮次的起始点。将设置重复标志(如果存在的话),因为已经标识了将不针对其生成光线请求的交点。
178.在第二次迭代期间,获得的光线请求是在先前迭代中定义的标识节点nl1的光线请求。第一非叶节点nl1的元素(与节点相关联的包围盒)进行与光线的相交测试过程。将检测光线与针对第一叶节点l1的包围盒之间以及光线与针对第三叶节点l3的包围盒之间的
交点。然后基于检测到的交点更新第一进度信息。此处,第一进度信息没有任何改变,因为与相交的元素相关联的节点的任何序列值的在序列上最早的值标识与由当前第一进度信息标识的现有序列值相同的值。注意,尽管已经标识了光线与表示叶节点l1和l3的包围盒之间的交点,但尚未针对由这些节点标识的元素(例如,实例或图元)执行相交测试。因此,对第一进度信息不作任何改变以指示相交测试结果已知的叶节点。定义单个新光线请求,其标识第一叶节点l1(因为其具有在与相交元素相关联的节点中在序列上最早的值)。如果使用,如在此示例中那样,将第二进度信息更新为值2,以标识第三叶节点l3的值。因此,第二进度信息标识表示加速结构的分支上的在本轮次中尚未(并且将不会)定义光线请求但应在稍后轮次遍历的相交元素的节点。
179.在第三次迭代期间,获得的光线请求再次是在先前迭代中定义的光线请求,即,标识叶节点l1的光线请求。第一叶节点l1的元素(实例和/或图元)进行与光线的相交测试过程。然后更新第一进度信息,以标识在已经针对其执行相交测试的叶节点的序列值之后的在序列上的下一序列值(即,在本示例中,其可以设置为1),或者与第二进度信息(如果有的话)中标识的序列值相同的序列值。在此示例中,第二进度信息存在(即,包含有效数据)且在前一轮次中被设置为2,因此第一进度信息被设置为2。由于未标识与非叶节点的新交点,因此通过定义光线请求来启动新轮次,所述光线请求标识加速结构中的具有在序列上位于由更新的第一进度信息标识的序列值处或之前的最接近值的最高层级节点(此处:根节点)。如果使用,可以清除或擦除第二进度信息。
180.当然,如果标识了与实例的交点,则可以发起本文所述方法的新版本,以与相关blas执行光线相交测试。为了简洁起见,未描述此过程。
181.对于通过加速结构的第二轮次,第一进度信息标识第三叶节点的序列值(即,值2),且重复标志(如果存在的话)将被清除。
182.在通过加速结构的第二轮次期间,与表示第一叶节点的元素的任何标识的交点实际上被忽略,因为已经知道光线是否与已经处理的第一交点的元素相交。相交测试结果已知的叶节点的知识反映在第一进度信息的值中,所述第一进度信息的值被设置成高于第一叶节点l1的序列值(例如0)的值(例如2)。
183.因此,第二轮次包括第三叶节点l3进行与光线的相交测试过程。在第二轮次结束时,修改第一进度信息以标识第四叶节点的值(例如3)。这是因为第一进度信息或者被改变以标识序列上的下一序列值(在第三叶节点的序列值之后),或者可以被改变以标识与第二进度信息中标识的序列值相同的序列值(其将标识由第二非叶节点nl2标识的值,等同于第四叶节点l4的值)。第二进度信息将标识该值,因为它是具有在分层加速结构的当前轮次期间未针对其生成光线请求的最低序列值的最可能节点(the most node)。
184.因此,对于通过加速结构的第三轮次,与第一非叶节点nl1的任何交点被忽略,因为第一进度信息标识第四叶节点的序列值。第二非叶节点nl2具有序列值3,其指示序列值为3或以上的任何叶节点(例如第四叶节点)由加速结构的nl2下方的部分表示。因此,第三轮次将处理加速结构的该部分。在上文所述的迭代程序之后,第三轮次将标识与叶节点l4的交点,且该节点的元素将进行与光线的相交测试过程。在例如nl2的元素之间没有更多交点被标识之后,将不会设置重复标志(如果使用的话),将不会执行另外轮次,并且对光线的测试过程结束。
185.图6示出了根据本发明的实施例的相交测试系统600。该相交测试系统被配置成执行本文所述的方法的步骤。
186.所示的相交测试系统600包括光线请求处理器(rrp)610、相交测试处理器(itp)620、光线储存库(rs)630和存储器640。
187.光线储存库630存储关于要与特定场景的元素进行相交测试的所有光线的信息。所存储的信息可以至少包含光线的唯一标识符和光线的几何形状信息(例如,光线相对于场景的来源和方向)。例如,光线的唯一标识符可以仅仅是光线储存库630的存储器地址。
188.存储器640存储关于分层结构(包括分层结构的元素)的信息。具体而言,存储器640可以存储节点信息和关于将在相交测试中涉及的每个元素的几何形状的信息。
189.光线请求处理器610被配置成执行参考图3描述的方法300的步骤321、323和324。相交测试处理器620被配置成执行方法300的步骤322。
190.因此,光线请求处理器610获得并定义光线请求,并更新光线的进度信息。因此,光线的进度信息可以存储在光线储存库630中。
191.当光线(例如,由外部设备)首次添加到光线储存库时,光线请求处理器可以与光线储存库通信以生成或发起第一光线请求。第一光线请求标识此新光线和分层加速结构的根节点,使得光线开始其通过加速结构的遍历。
192.当添加新光线时,也针对该光线发起进度信息(并且优选地与其它光线信息一起存储在光线储存库中)。
193.光线请求处理器610将关于要执行的测试的信息提交给相交测试处理器620。具体而言,光线请求处理器610获得或生成光线请求,并将信息提交给相交测试处理器620,使得相交测试处理器能够协调相交测试。光线请求处理器610可以包括光线请求存储器/缓冲器(rrm)615或与其通信,所示光线请求存储器/缓冲器存储要处理的光线请求。
194.在一些示例中,光线请求处理器610还被配置成向相交测试处理器提供关于被处理的光线请求的相交测试中涉及的场景的元素的信息。此过程可以包括从存储器640请求数据,所述数据包含相交测试中将涉及的每个元素的几何形状。
195.在其它示例中,相交测试处理器620被配置成获得此几何形状信息本身。
196.相交测试处理器(itp)620可以包括相交测试调度器(its)621,该相交测试调度器协调光线与场景的元素(例如,包围盒、实例或图元)之间的相交测试。相交测试处理器从光线请求处理器接收光线请求。相交测试调度器可以与一个或多个相交测试单元(itu)622、623通信以基于所接收的光线请求执行相交测试。具体而言,测试单元可以在已知操作之后,通过将元素的几何形状与光线的几何信息进行比较来执行实际相交测试。相交测试调度器621可以调度测试单元622、623的执行。
197.上面的描述指示分配给叶节点的序列值如何可以用于跟踪哪些叶节点已被处理。设想了向叶节点分配序列值的各种方法。
198.在构建加速结构时,例如,如果使用自底而上的分层结构构建器,可以分配叶节点的值。这种方法避免了完全遍历加速结构以将值分配给叶节点的需要。
199.在一个示例中,在加速结构的构建期间,每当生成非叶节点(表示场景的包围盒)时,就确定从其分支的叶节点的总数目(“叶节点总数”)。标识与其它非叶节点相关联的一个或多个包围盒的非叶节点可以使用针对所述其它非叶节点计算的叶节点总数来简化此
程序。一旦已知叶节点的总数目,就可以在整个加速分层结构中简单地分配序列值。
200.例如,参考图5描述的加速结构500,一旦已知存在六个叶节点,则可以确定需要六个序列值。还知道从每个非叶节点分支的叶节点数目,因此可以向每个非叶节点分配序列值的子序列,以用于设置每个叶节点的序列值。例如,可以将第一序列(包含最早的三个序列值)分配给第一非叶节点nl1,并且可以将第二序列(包含次最早的三个序列值)分配给第二非叶节点nl2。然后可以将每个序列的序列值分配给(从非叶节点分支的)每个叶节点。
201.图7示出了可以在其中实现图形处理系统的计算机系统。计算机系统包括cpu702、gpu 704、存储器706和其它装置714,诸如显示器716、扬声器718和相机719。处理块710(对应于相交测试系统600)在gpu 704上实现。在其它示例中,处理块710可以cpu 702上实现。计算机系统的部件可通过通信总线720彼此通信。储存库712(与存储器112相对应)被实现为存储器706的一部分。
202.图6的相交测试系统被示出为包括多个功能块。这仅是示意性的,并不旨在限定此类实体的不同逻辑元件之间的严格划分。每个功能块可以任何合适的方式提供。应当理解,本文中描述的由相交测试系统形成的中间值不需要由相交测试系统在任何时间点物理地生成,并且可以仅仅表示方便地描述由相交测试系统在其输入与输出之间执行的处理的逻辑值。
203.本文中描述的相交测试系统(以及结合了它们的光线跟踪系统和/或图形处理系统)可以包含在集成电路上的硬件中。本文中描述的相交测试系统可以被配置成执行本文中描述的任一种方法。一般来讲,上文所述的功能、方法、技术或部件中的任一者可在软件、固件、硬件(例如,固定逻辑电路系统)或其任何组合中实现。本文可以使用术语“模块”、“功能”、“部件”、“元件”、“单元”、“块”和“逻辑”来概括地表示软件、固件、硬件或其任何组合。在软件实现方式的情况下,模块、功能、部件、元件、单元、块或逻辑表示程序代码,所述程序码在处理器上执行时执行指定任务。本文中所描述的算法和方法可以由执行码的一个或多个处理器执行,所述码使处理器执行算法/方法。计算机可读存储介质的示例包含随机存取存储器(ram)、只读存储器(rom)、光盘、闪存存储器、硬盘存储器以及可以使用磁性、光学和其它技术来存储指令或其它数据并且可以由机器存取的其它存储器装置。
204.如本文中所使用的术语计算机程序代码和计算机可读指令是指供处理器执行的任何种类的可执行代码,包含以机器语言、解释语言或脚本语言表达的代码。可执行代码包含二进制代码、机器代码、字节代码、定义集成电路的代码(例如硬件描述语言或网表),以及用例如c、java或opencl等编程语言码表达的代码。可执行代码可以是例如任何种类的软件、固件、脚本、模块或库,当在虚拟机或其它软件环境中被适当地执行、处理、解释、编译、运行时,这些软件、固件、脚本、模块或库使支持可执行代码的计算机系统的处理器执行由所述代码指定的任务。
205.处理器、计算机或计算机系统可以是任何种类的装置、机器或专用电路,或其集合或一部分,它具有处理能力使得可以执行指令。处理器可以是任何种类的通用或专用处理器,例如cpu、gpu、神经网络加速器(nna)、片上系统、状态机、媒体处理器、专用集成电路(asic)、可编程逻辑阵列、现场可编程门阵列(fpga)等。计算机或计算机系统可以包括一个或多个处理器。
206.本发明还意图涵盖限定如本文中所描述的硬件的配置的软件,诸如硬件描述语言
(hdl)软件,用于设计集成电路或用于配置可编程芯片以执行所需功能。也就是说,可以提供一种计算机可读存储介质,其上编码有集成电路定义数据集形式的计算机可读程序代码,当被在集成电路制造系统中处理(即运行)时,这种集成电路定义数据集将该系统配置为制造被配置为执行如本文所述的任何方法的相交测试系统(或光线跟踪系统或图形处理系统),或者制造包括如本文所述的任何设备的相交测试系统(或光线跟踪系统或图形处理系统)。集成电路定义数据集可以是例如集成电路描述。
207.因此,可以提供一种在集成电路制造系统中制造如本文所述的系统(或光线跟踪系统或图形处理系统)的方法。此外,可以提供一种集成电路定义数据集,当在集成电路制造系统中被处理时,该集成电路定义数据集使得制造系统(或光线跟踪系统或图形处理系统)的方法被执行。
208.集成电路定义数据集可以是计算机代码的形式,例如作为网表,用于配置可编程芯片的代码,作为定义适合于在集成电路中以任何级别制造的硬件描述语言,包括作为寄存器传输级(rtl)代码,作为高级电路表示法(诸如verilog或vhdl),以及作为低级电路表示法(诸如oasis(rtm)和gdsii)。在逻辑上定义适合于在集成电路中制造的硬件的更高级表示法(诸如rtl)可以在计算机系统上处理,所述计算机系统被配置用于在软件环境的上下文中生成集成电路的制造定义,所述软件环境包括电路元件的定义和用于组合这些元件以便生成由所述表示法定义的集成电路的制造定义的规则。如通常软件在计算机系统处执行以便定义机器的情况一样,可能需要一个或多个中间用户步骤(例如,提供命令、变量等),以便将计算机系统配置为生成集成电路的制造定义,以执行定义集成电路以便生成所述集成电路的制造定义的代码。
209.现在将参考图8描述在集成电路制造系统处处理集成电路定义数据集以便将该系统配置为制造相交测试系统(或光线跟踪系统或图形处理系统)的示例。
210.图8示出了集成电路(ic)制造系统802的示例,其被配置为制造如本文任一示例中所描述的相交测试系统(或光线跟踪系统或图形处理系统)。特别地,ic制造系统802包括布局处理系统804和集成电路生成系统806。ic制造系统802被配置为接收ic定义数据集(例如,定义如本文的任何示例中描述的相交测试系统),处理ic定义数据集,并根据ic定义数据集来生成ic(例如,其包含如本文任何示例中所述的相交测试系统)。ic定义数据集的处理配置ic制造系统802以制造包含如本文任一示例中所描述的相交测试系统(或光线跟踪系统或图形处理系统)的集成电路。
211.布局处理系统804被配置为接收和处理ic定义数据集以确定电路布局。根据ic定义数据集确定电路布局的方法在本领域中是已知的,并且例如可以涉及合成rtl代码以确定待生成的电路的门级表示,例如就逻辑部件(例如,nand、nor、and、or、mux和flip-flop部件)而言。通过确定逻辑部件的位置信息,可以根据电路的门级表示来确定电路布局。这可以自动完成或者在用户参与下完成,以便优化电路布局。当布局处理系统804确定了电路布局时,它可以将电路布局定义输出到ic生成系统806。电路布局定义可以是例如电路布局描述。
212.ic生成系统806根据如本领域已知的电路布局定义生成ic。例如,ic生成系统806可以实现生成ic的半导体器件制造工艺,其可以包括光刻和化学处理步骤的多步骤序列,在此期间,在由半导体材料制成的晶片上逐渐形成电子电路。电路布局定义可呈掩模的形
式,其可以在光刻工艺中用于根据电路定义来生成ic。替代性地,提供至ic生成系统806的电路布局定义可以是计算机可读代码的形式,ic生成系统806可以使用该代码形成用于生成ic的适当掩模。
213.由ic制造系统802执行的不同处理可以全部在一个位置实现,例如,由一方。替代性地,ic制造系统802可以是分布式系统,使得过程中的一些可以在不同位置执行,且可以由不同各方执行。例如,以下阶段中的一些可以在不同位置和/或由不同方来执行:(i)合成表示ic定义数据集的rtl码,以形成要生成的电路的门级表示;(ii)基于门级表示来生成电路布局;(iii)根据电路布局来形成掩模;以及(iv)使用掩模来制造集成电路。
214.在其它示例中,通过在集成电路制造系统处对集成电路定义数据集的处理,可以将系统配置为制造相交测试系统(或光线跟踪系统或图形处理系统),而无需处理ic定义数据集以确定电路布局。例如,集成电路定义数据集可以定义可重新配置的处理器诸如fpga的配置,并且对该数据集的处理可以将ic制造系统配置成(例如,通过将配置数据加载到fpga)生成具有该定义的配置的可重新配置的处理器。
215.在一些实施例中,当在集成电路制造系统中被处理时,集成电路制造定义数据集可以使集成电路制造系统生成如本文中描述的装置。例如,由集成电路制造定义数据集以上文参考图8描述的方式对集成电路制造系统进行配置,可以制造出如本文所述的装置。
216.在一些示例中,集成电路定义数据集可以包括在数据集处定义的硬件上运行的软件,或者与在数据集处定义的硬件组合运行的软件。在图8所示的实例中,ic生成系统可以进一步由集成电路定义数据集配置成在制造集成电路时根据在集成电路定义数据集中定义的程序代码将固件加载到所述集成电路上,或者以其它方式向集成电路提供与集成电路一起使用的程序代码。
217.与已知的实现方式相比,在本技术中阐述的概念在装置、设备、模块和/或系统中(以及在本文中实现的方法中)的实现方式可以引起性能改进。性能改进可以包含计算性能提高、延迟减少、处理量增大和/或功耗降低中的一个或多个。在制造此类装置、设备、模块和系统(例如,在集成电路中)期间,可以在性能改进与物理实现方式之间进行权衡,从而改进制造方法。例如,可以在性能改进与布局面积之间进行权衡,从而匹配已知实施方式的性能,但使用更少的硅。例如,这可以通过以串行化方式重复使用功能块或在装置、设备、模块和/或系统的元件之间共享功能块来完成。相反,在本技术中阐述的引起装置、设备、模块和系统的物理实施方式的改进(诸如硅面积减小)的概念可以针对性能提高进行权衡。例如,这可以通过在预定义面积预算内制造模块的多个示例来完成。
218.申请人据此独立地公开了本文中所描述的每个单独的特征以及两个或更多个此类特征的任意组合,到达的程度使得此类特征或组合能够根据本领域的技术人员的普通常识基于本说明书整体来实行,而不管此类特征或特征的组合是否解决本文中所公开的任何问题。鉴于以上描述,本领域的技术人员将清楚,可以在本发明的范围内进行各种修改。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1