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

文档序号:29617833发布日期:2022-04-13 12:21阅读:145来源:国知局
用于光线跟踪的相交测试的制作方法

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


背景技术:

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


技术实现要素:

8.提供本发明内容是为了以简化的形式介绍下文在具体实施方式中进一步描述的一系列概念。本发明内容不旨在标识所要求保护的主题的关键特征或必要特征,也不旨在用于限制所要求保护的主题的范围。
9.一种用于在光线跟踪系统中执行光线的相交测试的系统和方法。光线跟踪系统使用包括多个节点的分层加速结构,每个节点标识能够由光线相交的一个或多个元素。该系统迭代地获得光线请求,所述光线请求中的每一个标识光线和要针对其测试光线的节点,并且基于光线请求执行相交测试。每次迭代中获得的光线请求的数目响应于与(正在进行相交测试的)光线有关的信息所占用的存储器的量增加而减小。
10.提供了一种在一个或多个光线与分层加速结构的节点标识的元素之间执行相交测试的计算机实施的方法,其中:光线由光线信息定义;节点标识用于相交测试的一个或多个元素,其中,由总体分层加速结构标识的至少一些元素由分层加速结构的另一节点表示。
11.该计算机实施的方法包括迭代地执行以下的光线相交过程:获得一个或多个光线请求,每个光线请求标识光线和分层结构的标识光线请求的光线将针对其进行相交测试的元素的节点;处理一个或多个光线请求和分层加速结构以针对每个光线请求识别光线请求的光线与由光线请求的节点标识的元素之间的任何交点,其中,在获得一个或多个光线请求的步骤中获得的光线请求的数目响应于与一个或多个光线有关的信息所占用的存储器的量增加而减小。
12.在获得一个或多个光线请求的步骤中获得的光线请求的数目可以响应于与一个或多个光线有关的信息所占用的存储器的量超过用于信息的可用存储器的第一预定百分比而减小。
13.由系统执行的迭代光线相交过程只能在光线和/或分层加速结构已由系统定义和/或获得之后执行。以此方式,获得的光线请求的数目与光线的数目和/或分层结构的格式无关。此方法在考虑存储器使用的同时,在执行光线相交过程(例如,允许分层加速结构的无限制数目的光线和无限制格式)中提供了改进的灵活性。
14.第一预定百分比可以在用于该信息的可用存储器的50%与80%之间。例如,第一预定百分比可以在50%与70%之间,例如50%与60%之间。
15.在一些示例中,在获得一个或多个光线请求的步骤中获得的光线请求的数目可以响应于与一个或多个光线有关的信息所占用的存储器的量超过用于信息的可用存储器的第二更高预定百分比而进一步减小。
16.第二预定百分比在用于该信息的可用存储器的70%与90%之间。第二预定百分比的下限可以高于第一预定百分比。作为一个示例,第二预定百分比可以在80%与90%之间。
17.与一个或多个光线有关的信息包括针对光线相交过程的光线请求。光线请求被存储在存储器中,并且形成与光线有关的信息。此实施例有助于降低用于光线请求的存储器溢出的可能性,由此降低任何给定光线将从相交测试过程“漏掉”的可能性。
18.任选地,由总体分层加速结构标识的元素中的至少一些由分层加速结构的另一节点表示,该方法还可以包括:对于每个光线请求,响应于光线与由另一节点表示的至少一个
元素相交,生成用于光线相交过程的后续迭代的一个或多个新光线请求,每个新光线请求标识光线请求的所述光线,以及表示由光线请求的光线相交的元素的相应另一节点。
19.在一些示例中,每个光线被定义为串行模式光线或并行模式光线,其中,如果光线请求的光线被定义为串行模式光线,则所生成的新光线请求的数目限于不大于第一预定数目。
20.第一预定数目可以是例如1。优选地,第一预定数目不大于12,例如不大于8,例如不大于4。在一些示例中,第一预定数目是1,并且生成最多第一预定数目的新光线请求的步骤包括生成单个新光线请求。
21.光线相交过程可以包括,针对每个光线请求,如果光线请求的光线被定义为串行模式光线,并且所标识的与加速结构的另一节点表示的元素的交点的数目大于第一预定数目,则生成第二预定数目的新光线请求。
22.在一些示例中,光线相交过程包括:针对每个光线请求:如果光线请求的光线被定义为串行模式光线,并且所标识的与加速结构的另一节点表示的元素的交点的数目大于第一预定数目:存储针对光线请求的光线的交点信息,该交点信息可用于标识未针对其生成新光线请求并且表示被标识为光线请求的光线相交的元素的其它节点的信息。
23.与一个或多个光线有关的信息可以包括交点信息。具体而言,与一个或多个光线有关的信息可以包括进行相交测试的所有光线的所有交点信息。
24.任选地,每个光线被定义为串行模式光线或并行模式光线,其中,如果光线请求的光线被定义为串行模式光线,则所生成的新光线请求的数目限于不大于第一预定数目。
25.光线相交过程可以包括,针对每个光线请求,如果光线请求的光线被定义为串行模式光线,并且所标识的与加速结构的另一节点表示的元素的交点的数目大于第一预定数目,则生成第二预定数目的新光线请求。
26.光线相交过程可以包括:针对每个光线请求:如果光线请求的光线被定义为串行模式光线,并且所标识的与加速结构的另一节点表示的元素的交点的数目大于第一预定数目:存储针对光线请求的光线的交点信息,该交点信息可用于标识未针对其生成新光线请求并且表示被标识为光线请求的光线相交的元素的其它节点。
27.与一个或多个光线有关的信息可以包括交点信息。
28.光线相交过程可以包括:对于每个光线请求:如果光线请求的光线被定义为串行模式光线,并且响应于光线与由另外节点表示的元素之间的交点数目为零:确定光线请求的光线是否与任何存储的交点信息相关联;以及响应于确定光线与存储的交点信息相关联,处理存储的交点信息以生成第三预定数目的新光线请求,每个新光线请求标识光线以及分层结构中尚未针对其生成对于光线的光线请求并且表示光线与其相交的元素的节点。
29.光线相交过程可以包括,针对每个光线请求:如果光线请求的光线被定义为串行模式光线,并且响应于光线与由其它节点表示的元素之间的交点的数目介于一与第一预定数目之间,包括端值,则针对由另一节点表示的每个相交元素生成新光线请求,每个新光线请求标识光线请求的光线和表示相交元素的相应另一节点。
30.该光线相交过程可以包括,针对每个光线请求:如果光线请求的光线被定义为并行模式光线,则允许所生成的新光线请求的数目大于第一预定数目。
31.还提供了一种在一个或多个光线和由分层加速结构的节点标识的元素之间执行
相交测试的相交测试系统,其中,光线由光线信息定义并且节点标识用于相交测试的一个或多个元素。
32.该相交测试系统包括:光线请求处理器,其被配置成迭代地获得一个或多个光线请求,每个光线请求标识光线和分层结构的标识光线请求的光线将针对其进行相交测试的元素的节点;相交测试处理器,其被配置成针对每个迭代获得的光线请求,处理一个或多个光线请求和分层加速结构以针对每个光线请求识别光线请求的光线与由光线请求的节点标识的元素之间的任何交点,其中,由光线请求处理器获得的光线请求的数目响应于与一个或多个光线有关的信息所占用的存储器的量增加而减小。
33.还提出了一种光线跟踪系统或图形处理系统,其被配置成执行本文所述的任何方法。还提出了一种包括本文所述相交测试系统的光线跟踪系统或图形处理系统。相交测试系统、光线跟踪系统或图形处理系统可以包含在集成电路上的硬件中。
34.还提供了一种使用集成电路制造系统制造如本文所述的相交测试系统、光线跟踪系统或图形处理系统的方法。
35.还提供了一种使用集成电路制造系统制造如上简述的相交测试系统、光线跟踪系统或图形处理系统的方法,所述方法包括:使用布局处理系统处理相交测试系统、光线跟踪系统或图形处理系统的计算机可读描述,以生成包含相交测试系统、光线跟踪系统或图形处理系统的集成电路的电路布局描述;以及使用集成电路生成系统,根据电路布局描述来制造相交测试系统、光线跟踪系统或图形处理系统。
36.还提供了一种计算机可读代码,所述计算机可读代码被配置成在运行所述代码时使本文任何所述方法被执行。还提供了一种计算机可读存储介质,在其上编码有本文所述的计算机可读代码。存储介质可以是非暂态计算机可读存储介质。计算机可读代码当在计算机系统上执行时可以使计算机系统执行本文中描述的任何方法。
37.还提供了一种集成电路定义数据集,所述集成电路定义数据集在集成电路制造系统中处理时将集成电路制造系统配置成制造如本文描述的相交测试系统、光线跟踪系统或图形处理系统。
38.还提供了一种非暂态计算机可读存储介质,该非暂态计算机可读存储介质上存储有如上简述的相交测试系统、光线跟踪系统或图形处理系统的计算机可读描述,该计算机可读描述在集成电路制造系统中被处理时致使集成电路制造系统制造包含该相交测试系统、光线跟踪系统或图形处理系统的集成电路。
39.还提供了一种非暂态计算机可读存储介质,其上存储有如上简述的相交测试系统、光线跟踪系统或图形处理系统的计算机可读描述,当在集成电路制造系统中处理该计算机可读描述时,其使得集成电路制造系统:使用布局处理系统处理相交测试系统、光线跟踪系统或图形处理系统的计算机可读描述,以生成包含相交测试系统、光线跟踪系统或图形处理系统的集成电路的电路布局描述;以及使用集成电路生成系统,根据电路布局描述来制造相交测试系统、光线跟踪系统或图形处理系统。
40.还提供了一种集成电路制造系统,其被配置成制造任何如本文所述的相交测试系统、光线跟踪系统或图形处理系统。
41.该集成电路制造系统可以包括:非暂态计算机可读存储介质,其上存储有如上文简述的相交测试系统、光线跟踪系统或图形处理系统的计算机可读描述;布局处理系统,该
布局处理系统被配置为处理该计算机可读描述以生成包含相交测试系统、光线跟踪系统或图形处理系统的集成电路的电路布局描述;以及集成电路生成系统,该集成电路生成系统被配置为根据电路布局描述来制造相交测试系统、光线跟踪系统或图形处理系统。
42.该布局处理系统可以被配置成确定从集成电路描述导出的电路的逻辑部件的位置信息,以生成包含该相交测试系统、光线跟踪系统或图形处理系统的集成电路的电路布局描述。
43.如对本领域的技术人员显而易见的,上述特征可以适当地组合,并且可以与本文所述的示例的任何方面组合。
附图说明
44.现在将参考附图详细描述示例,在附图中:
45.图1示出了根据包围体积结构划分的场景;
46.图2表示用于图1中所示的包围体积结构的分层加速结构;
47.图3是根据示例的用于对光线进行相交测试的系统的简化框图;
48.图4是示出一种方法的流程图;
49.图5是根据示例的用于对光线进行相交测试的系统的更详细框图;
50.图6示出了用于存储由串行模式光线控制器的存储模块存储的数据的数据结构;
51.图7示出其中实现图形处理系统的计算机系统;以及
52.图8示出了用于生成包含图形处理系统的集成电路的集成电路制造系统。
53.附图示出了各种示例。技术人员将理解,附图中所示的元素边界(例如,框、框的组,或其它形状)表示边界的一个示例。在一些示例中,情况可能是一个元素可以被设计为多个元素,或者多个元素可以被设计为一个元素。在适当的情况下,贯穿各附图使用共同的附图标记来指示类似的特征。
具体实施方式
54.通过示例的方式给出以下描述,以使本领域的技术人员能够制造和使用本发明。本发明不限于本文中描述的实施方案,并且对所公开的实施方案的各种修改对于所属领域的技术人员而言将是显而易见的。
55.现在仅通过示例的方式来描述实施例。
56.在详细解释所公开系统的示例之前,解释所使用的加速结构的示例将是有用的。
57.图1示出了场景100,其包括许多不同的物体或图元(示出为圆形、正方形和三角形)。场景在概念上可以划分成包围体积101-112,即轴对齐包围盒(aabb)。由此,每个包围体积表示场景的一部分。从概念上讲,每个包围体积界定或包含一个或多个元素,其中元素可以是包围体积、图元或用于光线跟踪架构中的另一合适的元素结构(例如,如果由光线相交,则触发使用另一分层结构的实例)。例如,第一组包围体积101-104可以各自界定一个或多个其它包围体积。第二组包围体积105-112可以各自在场景中界定一个或多个图元。例如,包围体积105可以界定第一组图元。
58.在所示的示例中,第一包围体积101界定两个其它包围体积104、105;第二包围体积102界定两个其它包围体积106、107,并且第三包围体积界定三个其它包围体积108、109、
110。第一包围体积的其它包围体积104中的一个,“第一其它包围体积”,继而界定两个额外包围体积111、112。
59.显而易见的是,如果光线未能与包围体积相交,则可以推断光线不会与由该包围体积界定或包含的任何元素相交。因此,使用包围体积提供了一种用于减少需要执行的相交测试的数目的机制。
60.场景100可以由分层加速结构20表示,如图2所示。分层加速结构20由从根节点200(表示场景100)分支的多个节点201-212形成。每个节点201-212表示相应的包围体积101-112。具体而言,每个节点可以包括列表(有时标记为“测试列表”)或标识由节点表示的包围体积包含的任何元素的其它集合。以此方式,每个节点标识可以由光线相交的一个或多个元素(例如,其它包围体积或图元)。在所示的分层加速结构20中,这种标识被示出为来自节点的分支。
61.用于确定用于构建分层结构的节点的包围体积的方法在本领域中是已知的,并且可以以自顶向下的方式(例如,在根节点处开始并且沿分层结构向下工作)执行,或者可以以自底向上的方式(例如,在叶节点处开始并且沿分层结构向上工作)执行。
62.可以通过从根节点开始通过分层加速结构来对光线进行工作,从而对光线执行相交测试。标识由节点标识的元素(例如,从节点分支的元素)与光线之间的任何交点。如果确定光线与另一个包围体积(其本身由分层加速结构的(另一)节点表示)相交,则针对由该包围体积表示的节点的元素测试光线,从而通过分层结构对其光线进行工作。
63.确定光线和元素之间的交点的方法是众所周知的,并且通常包括处理元素的几何形状和光线的数据以标识光线是否与元素相交。
64.分层加速结构的叶节点标识至少一个图元或单实例(特定类型的包围盒的示例,这将在下面简要解释)。一些分层结构可以仅包括标识实例的叶节点。其它分层结构可以仅包括标识图元的叶节点。
65.在该示例中的图元(圆形、三角形和正方形)是简单的几何形状;因此,可以使用单个图元来描述它们中的每一个。更复杂的物体可以由多个图元来描述。如本领域技术人员所公知的,三角形图元在图形应用中是常见的。然而,本公开的范围不限于三角形图元。具体而言,在光线跟踪中,在它们可以通过编程方式定义的意义上,图元可以是“程序性”的。
66.图1和图2中示出的示例描绘了一种简单的情境,其中,场景的所有物体由在分层加速结构中直接标识的图元表示。
67.然而,在一些示例中,物体可以由“实例”表示,所述实例是特定类型的包围体积,并且提供可由分层加速结构20的叶节点标识的元素的另一个示例。
68.有效地,实例对场景中的预定义物体进行定位和取向。实例与描述物体“局部空间”内的预定义物体的底级加速结构(blas)相关联,例如,标识相对于一些预定义坐标空间(其可能不同于场景的“世界空间”,取决于场景内物体的给定实例的取向)形成物体的图元的相对位置。blas本身可以由节点形成,所述节点以与先前描述的结构20类似的方式标识界定/包围预定义物体的图元的包围体积。因此,场景中的物体的实例可以由所谓的实例变换矩阵指定,所述矩阵将如物体的“局部空间”中所定义的物体(及其相关联的包围体积分层结构)映射到“世界空间”中的所需位置/取向。实例变换矩阵还可以对底层的物体执行其它操作,例如拉伸或反射。因此,当为更宽的场景创建加速结构时,实例化允许多次使用单
个blas,以在场景中在不同位置和取向表示相同物体的多个版本或“实例”。
69.如果检测到光线和实例之间的交点,这能够触发光线遍历与实例相关联的blas,从而确定光线和预定义物体的图元之间的任何相交。
70.以此方式,实例被作为一种类型的包围体积,在由光线相交时,其触发所述光线与不同分层加速结构的一个或多个节点的进一步相交测试,而不是与原始分层加速结构的其它节点的相交测试。
71.与实例相交由此触发光线遍历次级分层加速结构,即底级加速结构(blas)。当一个或多个blas可用时,具有标识用于触发blas(例如,结构20)的遍历的实例的节点的分层加速结构通常被称为顶级加速结构(tlas)。由此,tlas以高级别描述场景,从顶级的根节点开始,并且在标识实例(标识blas)的叶节点和/或最低级的图元中终止。tlas的一个示例仅在最低级的实例中终止(即,本身不包括任何图元)。tlas的精确性质将取决于实施细节。
72.用于遍历blas的必要操作是本领域众所周知的,例如,使用实例变换矩阵变换“世界空间”光线的参数或“局部空间”节点的几何形状,以将光线和(“局部空间”节点的)几何形状置于相同坐标系中以执行相交测试,并且为了简洁起见未详细描述。
73.图3示出了根据示例的用于利用光线跟踪系统的光线执行相交测试的相交测试系统300的框图。将理解,该框图是整个光线跟踪系统的一部分,该系统的其它部件在本公开的范围之外。
74.系统300包括光线请求处理器(rrp)310、相交测试处理器(itp)320和光线储存库(rs)330。
75.光线储存库330存储关于需要针对特定场景进行相交测试的所有光线的信息。所存储的信息可以至少包含光线的唯一标识符和光线的几何信息(例如,光线相对于场景的来源和方向,以及指定要进行相交测试的光线的一段的边界的可能光线范围)。例如,光线的唯一标识符可以仅仅是光线储存库330的存储器地址。
76.相交测试处理器(itp)320可以包括相交测试调度器(its)321,其协调光线和场景的元素(例如,包围体积,包括实例或图元)之间的相交测试。相交测试处理器接收标识待测试的光线的信息,并且对于每个光线,接收标识要针对其测试该光线的元素的信息(例如,标识要针对其测试该光线的元素列表的信息)。相交测试调度器可以与一个或多个相交测试单元(itu)322、323通信以执行相交测试。具体而言,测试单元可以在已知操作之后,通过将元素的几何形状与光线的几何信息进行比较来执行实际相交测试。相交测试调度器321可以调度测试单元322、323的执行。
77.光线请求处理器310将关于要执行的相交测试的信息提交给相交测试处理器320。具体而言,光线请求处理器310可以获得和/或使用存储于光线储存库330中的关于光线的信息生成光线请求,并将信息提交给相交测试处理器320,所述相交测试处理器使相交测试处理器能够协调相交测试。光线请求可以标识光线和标识要针对其测试光线的元素的节点。
78.在一些示例中,光线请求处理器310被配置成向相交测试处理器320提供关于被处理光线请求的相交测试中涉及的场景元素的信息。这一过程可以包括从存储器340请求数据,所述数据包含相交测试中将涉及的每个元素的几何形状。
79.光线请求处理器310可以包括光线请求存储器/缓冲器(rrm)315或与其通信。光线
请求存储器存储待处理的光线请求。
80.在特定示例中,光线请求处理器310获得光线请求(均标识光线和分层加速结构的节点,所述节点标识要针对其测试光线的元素),并将光线捆绑成光线堆栈。光线堆栈标识要针对同一节点的元素进行测试的光线。因而,光线堆栈实际上是一组已整理的光线请求,即,实际可以被视为标识多于一个光线(而不是单个光线)的光线请求。这些光线堆栈接着可以被传递到相交测试处理器320以供处理。因此,光线请求处理器310可以是相干性采集器。
81.每个光线堆栈可以伴有关于节点(其标识要针对其测试光线堆栈的元素)的元素的几何信息,所述几何信息可以由rrp 310从存储器340获得。这有利于这些元素与光线堆栈的光线之间的相交测试。
82.可以基于由光线请求处理器和/或相交测试处理器执行的处理来更新存储于光线储存库330中的关于光线的信息。例如,该信息可以包括指示与光线的相交测试过程是否完成的数据(例如计数器)。
83.相交测试系统300可以能够在本公开中描述的两种不同模式,即并行模式或串行模式中处理光线。在本文的上下文中,“模式”是根据光线的类型对光线执行的处理路径或过程。因此,相交测试系统300可以同时以并行模式和串行模式操作,以并行模式处理一些光线,并以串行模式处理其它光线。在串行模式中处理的优点从以下公开内容将显而易见。
84.在并行模式中进行处理的光线可以被标记为“并行模式光线”,并且在串行模式中进行处理的光线可以被标记为“串行模式光线”。因此,定义了两种类型的光线:在并行模式中处理的并行模式光线和在串行模式中处理的串行模式光线。对串行模式光线的光线请求可以被标记为“串行模式光线请求”,而对并行模式光线的光线请求可以被标记为“并行模式光线请求”。每个光线可以与模式指示符相关联,例如,模式指示符作为存储于光线储存库330中的光线的信息的一部分被存储,其指示要在这两个模式中的哪种模式中处理光线。用于标识光线当前模式的其它方法将显而易见,例如通过适当标记光线的身份或将光线的身份经由单独的查找表与模式关联。
85.图4是示出迭代执行的过程400的流程图,所述过程用于使用分层加速结构执行光线的相交测试。所有光线,即串行模式和并行模式两者,都可以经历此过程。过程400可以由图3中描述的相交测试系统300执行。
86.过程400可以在已经获得光线和分层加速结构(要针对其测试光线)之后执行。换句话说,过程400仅可以在已定义光线和分层结构时执行。因此,过程400提供在分层结构中表示的现有和定义光线与节点之间的相交测试过程。
87.过程400包括获得光线请求的步骤410。此步骤由光线请求处理器310执行。
88.受过程400影响的每个光线都与光线请求相关联。光线请求包含光线信息,其在此处标识光线(例如,光线的起点和方向,以及可能还有指示待测试的光线的一部分的光线范围)和标识要针对其对光线请求的光线进行相交测试的元素的(分层加速结构的)节点。
89.当光线首次提交给过程400(即,与先前光线请求不相关联)时,光线标识的节点是分层加速结构的根节点。针对节点的第一光线请求的生成可以由光线请求处理器执行(例如,通过接收并处理来自光线储存库330的新光线)。
90.当没有针对光线生成或有可用的新光线请求时,光线退出或完成过程400。
91.过程400包括处理光线请求以标识每个光线请求的光线与之相互作用的元素(由光线请求的节点标识)的子过程420。换句话说,子过程420包括确定(光线请求的)光线与(由每个光线请求的节点标识的)对应元素之间的交点。
92.子过程420可以包括相干性收集步骤421,其包括将多个光线聚集或捆绑成光线集合(“光线堆栈”)。每个光线堆栈标识要针对同一节点的元素进行测试的光线。这是通过如下方式执行的:处理所获取的光线请求来标识具有/标识相同节点的光线请求组,从而确定哪些光线形成相同光线堆栈的一部分。
93.如先前解释的,光线堆栈实际上是一组已整理的光线请求,即,实际可以被视为标识多于一个光线(而不是单个光线)的光线请求。
94.如果执行,步骤421由光线请求处理器310执行。
95.子过程420还可以包括测试步骤422,其中针对与光线堆栈相关联的节点(由其标识的元素)来测试每个光线堆栈(或者如果步骤421未执行,则测试光线请求)。具体而言,针对光线堆栈的节点的每个元素测试光线堆栈(或光线请求)的每个光线,以标识任何光线与任何元素之间的任何交点。以此方式,对于光线堆栈的每个光线和由节点标识的每个元素,确定该光线是否与该元素相交。这有效地标识了光线堆栈的每个光线与由光线堆栈的节点表示的包围体积内包含的任何元素之间的任何交点。
96.用于执行元素(例如,包围体积或图元)与光线之间的相交测试的方法是本领域众所周知的,并且通常包括处理元素和光线的几何形状,以便确定光线是否与元素相交。
97.使用相交测试处理器320执行步骤422。相交测试处理器可以例如使用its 321来协调使用测试单元322-323的相交测试。
98.如先前解释的,在一些示例中,每个节点是或包括列表,该列表标识在概念上从该节点上分支出来的元素(从概念上讲,由节点表示的包围体积界定或包含在包围体积中的元素)。针对特定节点的列表的每个元素(的几何形状)测试(与该特定节点相关联的)光线堆栈的每个光线以标识光线与元素之间的任何交点。
99.以此方式,子过程420可以标识由获得的光线请求标识的光线与由获得的光线请求标识的对应节点的元素之间的交点。
100.使用所描述的相干性收集步骤421意味着,每次执行步骤421时,仅需要从存储器检索列表和关于列表元素的(几何)信息一次,例如,而不是针对每个单独的光线请求都进行检索。
101.步骤410和子过程420对于串行模式和并行模式光线两者是共同的。因此,可以按先前描述的方式处理对串行模式和并行模式光线两者的光线请求。
102.过程400进一步包括子过程430,其基于任何标识的交点执行一个或多个动作。在子过程430中执行的动作取决于光线(请求)是串行模式光线(请求)还是并行模式光线(请求)。
103.因此,子过程430可以包括确定光线是串行模式光线还是并行模式光线。这可以例如通过在确定步骤435中检查光线的身份(例如,咨询光线储存库)来执行。
104.对于并行模式光线请求,并行模式光线请求生成步骤在过程440中进行。对于串行模式光线请求,串行模式光线请求生成步骤在过程450中进行。
105.过程440包括针对光线请求的光线与由光线请求的节点标识的包围体积之间的每
个交点生成新光线请求,每个新光线请求标识光线请求的(相同)光线和表示包围体积的后续节点。在每个新光线请求中标识的光线是与导致生成新光线请求的(原始)光线请求相同的光线(即,具有相同性质的光线)。因此,在过程440中,所述请求的光线与包围体积(包含在由光线请求标识的节点表示的包围体积内)之间的每个标识的交点都触发新(并行模式)光线请求的生成。新光线请求标识并行模式光线,以及由与并行模式光线相交的包围体积表示的节点。因此,如果在子过程420中针对给定的并行模式光线检测到多个包围体积交点,则可以在过程440中生成多个新光线请求。
106.以此方式,每次针对并行模式光线执行过程440时产生的新光线请求的数目是不受限制的。
107.新光线请求的生成可以由光线请求处理器310(例如,基于从相交测试处理器320接收的关于标识的交点的信息)或相交测试处理器320本身执行。因此,步骤440可以由光线请求处理器或(不太优选)相交测试处理器320执行。
108.新生成的并行模式光线请求可以存储在光线请求存储器315中。在步骤410中获得每个新产生的并行模式光线请求,并在过程400的后续迭代中在步骤420中进行处理。
109.对于并行模式光线,如果光线与针对所述光线的任何光线请求的节点标识的任何进一步包围体积之间没有标识的交点,则光线已成功地遍历分层加速结构(即,光线已经错过场景中的所有物体,或者其已经与图元相交)。
110.这可以通过针对每个并行模式光线存储计数器来检查。此计数器可以存储在光线储存库330(其存储关于每个光线的信息)中。计数器在1处被初始化(当光线首次被提交给过程时)。每次生成新光线请求(即,标识出交点)时,该光线的计数器就可以针对相交的每个包围体积增加1(通过从相交测试处理器到光线储存库330的通信)。每次完全处理光线请求时(例如,当光线请求的光线进行相交迭代测试时),特定光线的计数器减少1。计数器由此有效地跟踪与特定光线相关联的光线请求的数目。当计数器达到0时,光线是“完成”的,然后可以从光线储存库中删除该光线。
111.根据前述内容,显而易见的是,单个并行模式光线可以与可能无限数目的不同光线请求相关联。这是因为每次确定光线与包围体积相互作用时,就会生成新的光线请求。
112.本公开认识到,在一些情况下,并行模式光线可能导致生成极大量的新光线请求(例如,如果光线与场景的超过阈值数量的元素相交)。这样可能例如填满光线请求存储器或以其它方式(例如,在光线请求处理器中)导致溢出。
113.本公开提出了一种标记为“串行模式”的新处理模式,其通过有效地限制能够在过程400的每次迭代期间产生的新光线请求(对于给定的串行模式光线请求而言)的数目而克服了这些问题。在一些示例中,光线可以最初在并行模式中被处理,并且如果发生溢出状况,则(例如,从过程400)被丢弃或在串行模式中被标记并重新处理。
114.以下文章描述根据实施例对串行模式光线请求执行的操作。
115.仅对串行模式光线执行的串行模式光线请求生成过程450包括,如果标识到光线请求的光线与包围体积之间的至少一个交点:生成最多第一预定数目的新光线请求。于是,针对串行模式光线的新光线请求的数目限于不大于第一预定数目。每个新光线请求再次标识光线请求的(触发或导致新光线请求的生成的)(相同)光线和表示被标识为与光线请求的光线相交的元素的另一节点。以此方式,每个新光线请求不同于原始光线请求,即触发或
导致生成新光线请求的光线请求,因为标识了不同的节点,而通过新光线请求标识的光线与原始光线请求未改变。
116.优选地,该过程450还包括用于(如果必要的话)生成和存储交点信息的步骤。交点信息是可用于标识未针对其生成新光线请求并且表示已经标识出光线请求的光线相交的元素的其它节点的信息。仅当确定(特定串行模式光线请求的)串行模式光线与多于第一预定数目的包围体积相交时,才需要生成和存储交点信息。
117.下文将描述过程450的特定示例。
118.对于串行模式光线(请求):如果在步骤422中标识了多于第一预定数目n1(例如,1个)与包围体积(由光线请求的节点标识)的交点,则子过程450执行针对光线生成第二预定数目n2(例如,1)的新光线请求的步骤451,以及生成和存储交点信息的步骤452。所述第二预定数目小于或等于所述第一预定数目,使得针对串行模式光线生成不超过所述第一预定数目的新光线请求。
119.第二预定数目n2的新光线请求中的每个标识分层结构的串行模式光线和另一节点(例如,列表)。另一个节点表示确定其与光线相交的包围体积(即,几何信息)。每个新光线请求表示不同的包围体积。
120.交点信息标识与(原始)光线请求相关联的节点,即与原始光线请求相关联的节点,所述节点标识的节点又标识与光线相交的超过第一预定数目的包围体积。交点信息还标识适合用于标识已为其生成新光线请求的其它节点(从原始光线请求的节点分支出来)的信息。
121.因此,在一些情况下,并非每个标识的涉及串行模式光线的交点都导致产生新光线请求。相反,仅生成最大数目的新光线请求,其中可用于标识尚未针对哪些包围体积(由节点表示)生成光线请求的数据被存储以供将来使用。
122.这有效地限制了可以基于对串行模式光线的单光线请求而生成的新光线请求的数目。这可以避免或降低光线请求处理器中存储器或处理器溢出的可能性。
123.对于串行模式光线(请求):如果标识与包围体积(由与光线请求相关联的节点表示)的交点超过0个且不超过第一预定数目n1(即在1与n1之间,包括端值),则过程450针对每个所标识的交点执行生成新光线请求的步骤453。每个新光线请求标识串行模式光线请求的光线和表示(串行模式光线请求的)光线与其相交的包围体积的节点。因此,串行模式光线(请求)可以以与并行模式光线请求类似的方式处理。
124.对于串行模式光线(请求):如果未标识出交点,则过程450执行确定或检查光线是否与任何存储的交点信息相关联的步骤454。如果光线与存储的交点信息相关联,则在步骤455中处理它,以生成最多第三预定数目n3(例如1)个新光线请求。第三预定数目n3可以等于第一预定数目。
125.步骤455还可以包括基于生成的新光线请求更新存储的交点信息。
126.在一些示例中,步骤453进一步包括(如果标识出小于第一预定数目n1的与包围体积的交点)确定或检查光线是否与任何存储的交点信息相关联。如果光线与存储的交点信息相关联,则对其进行处理以生成额外的新光线请求(例如,使得由步骤453生成的光线请求的总数目高达第四预定数目n4,其可与第一预定数目和/或第三预定数目相同)。
127.在一些示例中,每个光线与最大数目的活动光线请求相关联,例如,最多第五预定
数目的活动光线请求n5。在这些示例中,处理针对特定光线的所有光线请求的交点结果,使得针对过程400的下一次迭代生成不超过第五预定数目n5的光线请求。这个过程可以包括例如修改第一到第四预定值中的一个或多个的值。
128.因此,对于串行模式光线(请求),过程450并非针对与包围体积(由分层结构的另一节点表示的元素)的每个标识的交点生成光线请求,而是针对过程的每次迭代生成最多最大数目的新光线请求。储存关于所有其它交点的信息,直到光线不与任何测试的包围体积相交(或任选地,与少于预定数目的交点相交)。在这种情况下,存储的信息用于生成下一组一个或多个光线请求。
129.当未标识到光线的任何光线请求的交点且存储的交点信息未标识或不再标识标识任何未测试元素的任何信息时,光线能够退出递归过程。因此,不再需要与串行模式光线一起使用计数器。
130.可以在过程400的后续迭代的步骤410中获得新产生的串行模式光线请求的至少一个(并在步骤420中处理)。所获得和处理的串行模式光线请求的精确数目可以取决于例如用于存储的交点信息等的可用存储空间。在其它示例中,在步骤410中获得所有新产生的串行模式光线请求。
131.如先前解释的,用于处理串行模式光线的所提出的方法防止或降低了用于光线请求处理器的存储器缓冲器溢出的可能性。
132.特定光线的交点信息可以存储在lifo或类似数据存储模块中。具体而言,此数据存储模块可以被设计成使得在较不近期标识的交点之前处理针对光线的最新标识的交点的信息。
133.对于每个光线而言,交点信息可以包括至少一个数据块,每个数据块包括:关于标识多于第一预定数目的光线初始相交的元素的节点的信息;以及关于已经针对这些元素中的哪些生成了光线请求的信息。因此,交点信息可以由一组或多组每个数据块形成,每组代表不同的光线。
134.如果针对给定串行模式光线存储了多于一个数据块,则优选地,(当处理交点信息以生成下一(多个)光线请求时)使用最近存储的数据块来生成下一(多个)光线请求。
135.为了容易处理,每个数据块可以彼此链接,例如,每个数据块可以指向同一光线的另一数据块。这可以使用链表(如下所述)来执行。
136.交点信息可以存储在公共存储器中,即,未逐个光线预先分配的存储器,使得用于所有光线的交点信息都可以存储在相同存储器中。公共存储器优选地是片上存储器。
137.图5示出了根据本发明的实施例的更详细的相交测试系统500。相交测试系统500被配置成用于执行光线的串行模式和并行模式处理两者。
138.如前所述,相交测试系统包括光线请求处理器310、相交测试处理器320和光线储存库330。这里,光线请求处理器310是相干性采集器。
139.光线储存库330可以包括光线信息储存库(ris)532。光线信息储存库532可以存储关于正被处理的所有光线(并行模式和串行模式)的信息。所存储的信息可以包括针对每个光线的光线id(为光线提供唯一标识符)、模式指示符(指示光线正在操作的模式)和计数器(对于并行模式光线而言,前面已经描述了其操作)。
140.相交测试系统500还可以包括串行模式光线控制器(smrc)535。这可以形成为单独
的处理模块,或者在一些示例中,被并入到光线储存库330中(例如,作为光线储存库的附加功能)。
141.串行模式光线控制器535被配置成存储关于待由光线请求处理器处理的串行模式光线请求的信息。具体而言,串行模式光线控制器可以接收关于串行模式光线和(场景的)元素之间的交点的信息,并且确定如何生成针对串行模式光线的进一步光线请求。
142.串行模式光线控制器535可以被配置成处置由光线请求处理器310(即,在图4中所描述的过程400的步骤410中)获得的串行模式光线请求。
143.串行模式光线控制器535可以包括两个存储模块(这两个模块都优选是片上存储模块)。串行模式光线控制器535可以包括串行id(sid)储存库(sids)536(其另外可以标记为“串行模式光线储存库”)和共享交点信息储存库(siis)537。
144.图6示出了用于存储由串行模式光线控制器535的存储模块存储的数据的数据结构600的一个示例,用于改进对上下文的理解。
145.sid储存库536可以包括固定数目的条目611-61n,每个条目与不同串行模式光线相关联。sid储存库中的每个条目(“sid条目”)可以包括唯一的串行标识符(串行id或sid)61a。在一些示例中,这仅仅是sid条目的唯一存储器地址。
146.光线信息储存库532可以适于存储针对工作于串行模式中的光线指示与光线相关联的串行id的数据(即,标识sid储存库中的哪个条目与光线相关联)。此数据可以存储在先前分配用作计数器的相同存储器空间中(如果光线在并行模式中操作)。这样发现计数器在串行模式方法中未被使用,并且提议改变存储器空间的用途,以减少数据存储的浪费。
147.sid储存库536中的每个条目还可以包含下一节点(或任选地,多个节点)的信息61b,所述节点标识要针对其对串行模式光线进行相交测试的元素,即,可用于生成针对所述光线的下一(多个)光线请求的信息。这在图6中示出为“下一节点信息”。
148.共享的交点信息储存库537存储针对存储在串行id储存库中的所有串行模式光线的交点信息。共享的交点信息的存储器空间优选地不按串行光线预先分配,即sid储存库中的每个条目没有专用空间量。换句话说,共享交点信息储存库是用于交点信息的共享存储器资源池。在一些示例中,形成相同串行模式光线的交点信息的不同数据块可以,例如,使用链表指向彼此,以将存储器的不同(未分配)部分与相同串行模式光线相关联。
149.光线的交点信息可以存储在共享交点信息储存库537中,作为一个或多个“siis条目”或“数据块”621-62n(例如,每一者在共享交点信息储存库中是不同的条目或存储器地址)。每个数据块621-62n包括关于标识光线初始相交的超过第一预定数目的包围体积的节点(即,具有多于第一预定数目的由串行模式光线相交的包围体积的节点)的信息62a。每个数据块还包括关于对于这些包围体积中的哪些已经生成对应光线请求(即,哪些相交的包围体积已经被处理)的信息62b。这可以呈“偏移”值的形式,指示与节点相关联的哪些元素已经被处理,例如指示已经向(与该节点相关联的)元素列表下方多远生成了光线请求。
150.每个数据块还可以经由指针62c指向与串行光线相关联的另一数据块。这可以有效地形成串行光线的链表。
151.sid储存库536中的每个条目(“sid条目”)可以进一步包括(如果相关,例如,如果串行模式光线的交点信息存储在共享交点信息储存库537中)指向共享交点信息储存库中的条目的指针61c。具体而言,指针可以指向串行模式光线的最新数据块。
152.串行id储存库536可以存储最多达最大预定数目的串行模式光线条目。如果超过此数目的光线希望进入串行模式,则可以例如在串行模式缓冲器560中暂时缓存它们,直到空间可用为止。稍后将描述此方法的更深入的实施例。
153.返回参考图5,当光线请求处理器310获得光线请求时,smrc提供串行模式光线请求。对于每个光线请求,smrc使用下一节点信息标识具有sid和节点(或列表)的串行模式光线。
154.当向rrp提供串行模式光线请求时,可以保留siid中的条目(数据块)(在预期光线请求与多于n1个包围体积相交时)。
155.如果由smrc提供的光线请求导致超过n1个(与由光线请求节点标识的包围体积的)交点被标识,则更新下一节点信息(针对与串行模式光线相关联的siis条目)以标识由这些包围体积中的n2个表示的节点。生成新数据块并将其存储在共享交点信息储存库537中,例如在保留的siis条目处,所述数据块使用指针62c(如果存在的话)指向该串行模式光线的先前最近存储的数据块(即,排除在此过程中存储的新数据块的最新存储数据块)。串行模式光线的sid条目的指针也被更新,以指向最近存储的共享交点信息(即指向新存储的siis条目)。
156.如果由smrc提供的光线请求导致1和n1个之间(与由光线请求节点标识的包围体积的)交点被标识,则更新下一节点信息(针对与串行模式光线相关联的条目)以标识表示(针对该光线)每个相交包围体积的节点。如果保留了siis条目,则可以移除针对光线请求的此保留。
157.在一些示例中,如果标识出少于n1个交点,则处理该光线的交点信息(如果存在的话)以标识一个或多个用于测试的节点。
158.如先前解释的,交点信息可以标识一个或多个节点,每个节点标识相关光线相交的多于n1个包围体积。交点信息还标识已针对那些包围体积中的哪一个已经生成了光线请求。
159.然而,仅该信息可能不足以确定由光线相交的包围体积中哪些没有为其生成的光线请求。这是因为可能不知道由节点标识的包围体积中的哪些与光线相交。换句话说,该节点可能已经标识了光线不与其相交的包围体积,但哪些包围体积导致或未导致相交的结果未存储为交点信息62n的一部分。
160.为了克服这一点,针对串行模式光线生成的下一光线请求可以标识标识超过n1个相关光线相交的包围体积的节点。然后,可以与标识已针对那些包围体积中的哪些生成了光线请求的信息一起处理此相交测试的结果(其标识相交的包围体积),以确定针对所述光线的后续光线请求(避免已经测试的包围体积)。
161.因此,可以重新测试已经检查过的节点的元素。虽然这可能增加为处理单个光线而执行的相交测试的数目,但所提出的方法避免了存储具体标识表示每个相交框的节点(相反,标识标识相交的包围体积的“父节点”)的数据的需要。
162.优选地,随着共享交点信息储存库537中的可用或未使用的存储器空间的量减小,由串行模式光线控制器535提交给光线请求处理器310的光线请求的数目也减小。换句话说,参考图4,在步骤410中获得的光线请求的数目可以响应于交点信息增大占用的存储器量而减小。这有效地降低了共享交点信息储存库537将溢出的可能性。
163.这可以使用逐渐制动方法来完成。在这种方法中,使用的存储容量的量可以存在多个阈值,并且每次突破阈值时,(从串行模式光线控制器535)向光线请求处理器提交更少的光线请求。因此,可以存在第一和/或第二预定阈值/百分比,当被突破或超过时,该第一和/或第二预定阈值/百分比导致在(图4的)步骤410中获得更少的光线请求。
164.受控制动避免了性能急剧下降,并且可以降低串行模式光线一次仅被处理一个光线的可能性(例如,降低共享交点信息储存库将永久已满的可能性)。
165.优选地,允许继续进行的光线请求是基于串行模式光线的年龄的。具体而言,串行模式光线(在串行模式光线控制器535中)的年龄越大,其在光线请求中提交到光线请求处理器的可能性越大。
166.因此,串行模式光线控制器535还可以存储(对于每个串行模式光线)指示相对于其它分配的sid而言自串行模式光线首次被分配sid以来的时间的时间信息。例如,sid储存库536中的每个条目可以指向sid储存库中的另一个更老条目,从而指示sid储存库536中的条目的年龄。
167.为了提高性能,在一些实施例中,可以为串行模式光线生成和获得光线请求,其中已知由串行模式光线请求的节点标识的元素(例如,从与光线请求相关联的节点分支出的元素)的任何所标识的交点都不会导致产生新的光线请求。例如,当由节点标识的元素仅包括图元时,不会生成新的光线请求。换句话说,对于已知不生成新光线请求的节点,可以绕过用于限制生成的光线请求的数目的机制。因此,由制动方法施加的限制可以仅适用于由光线请求的节点标识的元素为包围体积(非叶节点)的光线请求。
168.用于执行这种制动的一个实施方式可以是通过使用两个可编程阈值和最终固定水平阈值。每个可编程阈值指定当未使用的siis条目的数目下降到低于相应阈值时可以进行的最老的串行模式光线(或串行模式光线请求)的数目。最终阈值指定只有最老的串行模式光线可以进行,即已经将光线请求传递到rrp并由rrp处理。
169.最终阈值基于硬件支持的最大深度常数(即,分层加速结构的最大深度)。可以设置最终阈值,使得当只有此数目的链表堆栈条目可用/自由时,允许将sid储存库中仅最早的串行模式光线的光线请求传递到rrp。
170.如果仅使用一个阈值,则用于制动的仅硬件方法将起作用,其中,阈值基于分层加速结构的最大深度。然而,在这种情况下,siis可以填充许多部分完整的串行模式光线的数据,这意味着形成了“瓶颈”,其中每次仅一个串行模式光线继续进行。
171.本公开认识到,利用适当的制动(例如,逐渐减少进行中的串行模式光线的数目),完全可以避免最终阈值,并且因此在整个相交测试程序中活动的串行模式光线的平均数目可以增加。
172.在一个示例性情境中:可以假设每个串行模式光线平均需要16个siis条目。在有用于2048个siis条目的存储容量并且有最多256个串行模式光线存储sids的情况下,实施例可以实施两个可编程制动阈值,对于所述阈值:当1024个siis条目是自由/可用的时,仅128个串行模式光线可以继续进行;当512个siis条目可用时,仅允许32个串行模式光线可以继续进行。还可以存在硬件限制(“硬限制”),当有64个链表条目可用时,该硬件限制仅允许1个串行模式光线(优选最老的串行模式光线)继续进行。
173.siis不具备用于保存针对所有256个串行模式光线的16个条目的存储容量,因为
这需要4096个siis条目。但现在:前1024个siis条目将用于保存每个串行模式光线的4个siis条目;接下来的512个siis条目将用于保存用于最老128个串行模式光线的4个条目;接下来的448个siis条目将用于保存用于最老32个串行模式光线的14个条目;最后64个siis条目将用于保存用于最老串行模式的64个条目。
174.以此方式,向最老的32个串行模式光线提供不少于22个条目,意味着(平均)处理速率不少于一次32个串行模式光线。
175.因此,逐渐制动方法避免了siis资源的持续占用,并且使得一致的处理速率(一次不少于预定数目的串行模式光线)能够继续进行。
176.所提议的数目和阈值仅为示范性的,并且技术人员将容易地能够调整所提议的阈值以适应特定实施方式。在一些示例中,当(交点)信息的可用存储器的第一预定百分比,例如50%至80%被占据时,达到第一阈值。在一些示例中,当(交点)信息的可用存储器的第二预定百分比,例如70%至90%被占据时,达到第二阈值。
177.所提出的制动方法还可以用于减少随着用于光线的其它形式的信息(“与一个或多个光线有关的信息”)的可用存储器/存储装置量减小,例如达到预定阈值而获得的光线请求数目。例如,在用于存储光线请求的可用存储器的量减小,例如超过不同阈值时,可以采用用于减少所获得的光线请求的数目的提议制动方法。
178.例如,当涉及光线的信息的可用存储器的第一预定百分比,例如50%至80%被占据时,可以达到第一阈值。在一些示例中,当涉及光线的信息的可用存储器的第二预定百分比,例如70%至90%被占据时,达到第二阈值。
179.如果执行,则在仅在已定义光线和分层加速结构之后执行的迭代相交测试过程期间执行所提出的制动方法(减少响应于可用存储器而获得的光线请求的数目)。换句话说,可以在标识预定义光线与预定义分层结构之间的交点的过程(例如,图4的过程400)期间利用所提出的制动方法。以此方式,存储器的使用不直接取决于待测试的光线的数目或分层结构的格式。相反,在光线相交过程的每次迭代中获得的光线请求的数目得到控制。
180.换句话说,由系统执行的迭代相交测试过程(或光线相交过程)只能在光线和/或分层加速结构已由系统定义和/或获得之后执行。以此方式,获得的光线请求的数目与光线的数目和/或分层结构的格式无关。此方法在考虑存储器使用的同时,在执行光线相交过程(例如,允许分层加速结构的无限制数目的光线和无限制格式)中提供了改进的灵活性。
181.回到图5,相交测试系统500还可以包括串行模式缓冲器560。如图所示,这可以是单独的元件,或者可以集成到光线储存库330中。串行模式缓冲器560可以接收关于已经由光线请求处理器丢弃(例如,如果光线请求处理器的存储器缓冲器溢出)的光线的信息,即,存储希望进入串行模式(即,使用串行模式被处理)的光线。当串行模式光线条目可用时(例如,当前一串行模式光线完成时),串行模式缓冲器560接着可将存储的光线传递到串行模式光线控制器535。
182.可以使用轮询方法将存储的光线从串行模式缓冲器560传递到串行模式光线控制器535。这确保随着时间推移,希望进入串行模式的所有光线将被传递到串行模式光线控制器535。替代方法可以是使用先进先出(fifo)缓冲器。
183.上述公开内容提出了用于处理光线与包围体积之间的交点的新方法,即如何基于光线与包围体积之间的交点生成一个或多个新光线请求。光线与其它类型的元素(例如,图
元或实例)之间的交点可以以常规方式处理。举例来说,光线与图元之间相交可以触发着色器程序,并且与实例相交可以通过底级分层结构触发对光线的处理。
184.在特定示例中,所有预定值n1、n2、n3和n4(和n5,如适用的话)彼此相等,并且在另外的示例中,全部等于一。
185.先前已描述了可以如何最初以并行模式处理所有光线,并且如果光线请求处理器溢出或耗尽存储器,则当前正在处理中的光线可以被丢弃或标记。在串行模式中重新处理任何丢弃/标记的光线,例如使用先前描述的串行模式方法。
186.在一些示例中,已标记的光线可以继续以并行模式处理(例如,但是丢弃在光线请求处理器溢出时生成的一定数量的光线请求)。允许光线继续可能是有价值的,因为如果发现与图元的交点,这可能导致光线的范围减小(在某些光线处理系统中,这可能导致光线退出相交测试过程)。
187.先前已描述了用于sid储存库536和共享交点信息储存库537中的数据条目的通用格式。下文将参考表1和表2描述用于数据条目的合适格式的更精确示例。表1示出了sid储存库536中的单个数据条目的示例性参数(例如字段)。表2示出了共享交点信息储存库537中的单个数据条目的示例性参数(例如字段)。
188.在以下描述中,假设预定值n1、n2、n3和n4全部等于1。然而,技术人员将能够针对不同的预定值修改所述方法。
189.在初始化新的串行模式光线时,针对该串行模式光线的sid条目,设置以下参数的值:state(设置为指示sid正在使用的值);node address(标识具有要针对其测试串行模式光线的元素的第一节点,即根节点);type(标识与node address相关联的节点的类型);offset(初始化为0);rid(标识串行模式光线的光线id,存储在光线信息储存库中)。还可以更新priority(例如,以指向最近存储的针对另一光线的sid条目,以标识光线的顺序)。
190.当串行模式光线经历相交测试时,smrc将光线请求传递给光线请求处理器,(从node address)标识串行模式光线和具有要针对其测试串行模式光线的元素的节点。
191.如果相交测试标识串行模式光线不与任何包围体积相交(或没有包围体积处于或超过offset标识的偏移),并且参数pointer valid指示siid确实存储了与sid条目相关联的条目,则更新sid条目的以下参数的值:node address(转而读取siis中pointer指向的条目的node address);offset(更新为siis中pointer指向的条目的offset的值);type(更新为siis中sid条目的pointer指向的条目的type的值);pointer(更新为stack pointer的值)和pointer valid(更新为stack pointer valid的值)。然后,可以删除相关的siis条目(即,在更新前pointer所指向的siis条目)或标记为进行删除/盖写。
192.如果相交测试标识串行模式光线与1个包围体积相交(处于或超过offset标识的偏移),则更新sid条目的以下参数:node address(标识表示相交包围体积的节点)、type(标识由所标识节点标识的元素的类型)和offset(重新初始化至0)。
[0193][0194]
表1
[0195]
如果相交测试标识到串行模式光线与多于1个包围体积相交(处于或超过offset标识的偏移),则为该串行模式光线创建新的siis条目。新的siis条目设置有以下参数组:node address(标识具有超过1个确定串行模式光线相交的包围体积的节点),type(标识该节点的元素类型),stack pointer(标识最近存储的该串行模式光线的其它siis条目,如果存在的话)和stack pointer valid(标识stack pointer是否指向另一个siis条目)。如下更新串行模式光线的sid条目:node address(标识表示超出offset的第一个所标识包围体积的节点)、type(标识由node address新标识的节点元素的类型)、offset(针对新节点初始化为0)、pointer(指向新存储的siid条目)和pointer valid(指示指向有效的siis条目)。新存储的siis条目的offset参数也被更新。
[0196][0197]
表2
[0198]
根据本公开的相交测试系统可以被提供为光线跟踪系统的一部分。光线跟踪系统可以包括一个或多个相交测试系统,并且可以实现一个或多个着色器程序。光线跟踪系统可以作为图形处理系统的一部分来提供。
[0199]
图7示出了其中可以实现这种图形处理系统的计算机系统。计算机系统包括cpu 702、gpu 704、存储器706和其它装置714,诸如显示器716、扬声器718和相机719。处理块710(对应于相交测试系统300、500)在gpu 704上实现。在其它示例中,处理块710可以实现于cpu 702上。计算机系统的部件可通过通信总线720彼此通信。储存库712(与存储器112相对应)被实现为存储器706的一部分。
[0200]
图3和图5的相交测试系统被示出为包括多个功能块。这仅是示意性的,并不旨在限定此类实体的不同逻辑元件之间的严格划分。每个功能块可以任何合适的方式提供。应当理解,本文中描述的由相交测试系统形成的中间值不需要由相交测试系统在任何时间点物理地生成,并且可以仅仅表示方便地描述由相交测试系统在其输入与输出之间执行的处理的逻辑值。
[0201]
本文中描述的相交测试系统(以及结合了它们的光线跟踪系统和/或图形处理系统)可以包含在集成电路上的硬件中。本文中描述的相交测试系统可以被配置成执行本文中描述的任一种方法。一般来讲,上文所述的功能、方法、技术或部件中的任一者可在软件、固件、硬件(例如,固定逻辑电路系统)或其任何组合中实现。本文可以使用术语“模块”、“功能”、“部件”、“元件”、“单元”、“块”和“逻辑”来概括地表示软件、固件、硬件或其任何组合。在软件实现方式的情况下,模块、功能、部件、元件、单元、块或逻辑表示程序代码,所述程序码在处理器上执行时执行指定任务。本文中所描述的算法和方法可以由执行码的一个或多个处理器执行,所述码使处理器执行算法/方法。计算机可读存储介质的示例包括随机存取存储器(ram)、只读存储器(rom)、光盘、闪存存储器、硬盘存储器以及可以使用磁性、光学和其它技术来存储指令或其它数据并且可以由机器存取的其它存储器装置。
[0202]
如本文中所使用的术语计算机程序代码和计算机可读指令是指供处理器执行的任何种类的可执行代码,包含以机器语言、解释语言或脚本语言表达的代码。可执行代码包
含二进制代码、机器代码、字节代码、定义集成电路的代码(例如硬件描述语言或网表),以及用例如c、java或opencl等编程语言码表达的代码。可执行代码可以是例如任何种类的软件、固件、脚本、模块或库,当在虚拟机或其它软件环境中被适当地执行、处理、解释、编译、运行时,这些软件、固件、脚本、模块或库使支持可执行代码的计算机系统的处理器执行由该代码指定的任务。
[0203]
处理器、计算机或计算机系统可以是任何种类的装置、机器或专用电路,或其集合或一部分,它具有处理能力使得可以执行指令。处理器可以是任何种类的通用或专用处理器,例如cpu、gpu、神经网络加速器(nna)、片上系统、状态机、媒体处理器、专用集成电路(asic)、可编程逻辑阵列、现场可编程门阵列(fpga)等。计算机或计算机系统可以包括一个或多个处理器。
[0204]
本发明还意图涵盖限定如本文中所描述的硬件的配置的软件,诸如硬件描述语言(hdl)软件,用于设计集成电路或用于配置可编程芯片以执行所需功能。也就是说,可以提供一种计算机可读存储介质,其上编码有集成电路定义数据集形式的计算机可读程序代码,当被在集成电路制造系统中处理(即运行)时,这种集成电路定义数据集将该系统配置为制造被配置为执行如本文所述的任何方法的相交测试系统(或光线跟踪系统或图形处理系统),或者制造包括如本文所述的任何设备的相交测试系统(或光线跟踪系统或图形处理系统)。集成电路定义数据集可以是例如集成电路描述。
[0205]
因此,可以提供一种在集成电路制造系统中制造如本文所述的系统(或光线跟踪系统或图形处理系统)的方法。此外,可以提供一种集成电路定义数据集,当在集成电路制造系统中被处理时,该集成电路定义数据集使得制造系统(或光线跟踪系统或图形处理系统)的方法被执行。
[0206]
集成电路定义数据集可以是计算机代码的形式,例如作为网表,用于配置可编程芯片的代码,作为定义适合于在集成电路中以任何级别制造的硬件描述语言,包括作为寄存器传输级(rtl)代码,作为高级电路表示法(诸如verilog或vhdl),以及作为低级电路表示法(诸如oasis(rtm)和gdsii)。在逻辑上定义适合于在集成电路中制造的硬件的更高级表示法(诸如rtl)可以在计算机系统上处理,该计算机系统被配置用于在软件环境的上下文中生成集成电路的制造定义,该软件环境包括电路元件的定义和用于组合这些元件以便生成由该表示法定义的集成电路的制造定义的规则。如通常软件在计算机系统处执行以便定义机器的情况一样,可能需要一个或多个中间用户步骤(例如,提供命令、变量等),以便将计算机系统配置为生成集成电路的制造定义,以执行定义集成电路以便生成所述集成电路的制造定义的代码。
[0207]
现在将参考图8描述在集成电路制造系统处处理集成电路定义数据集以便将该系统配置为制造相交测试系统(或光线跟踪系统或图形处理系统)的示例。
[0208]
图8示出了集成电路(ic)制造系统802的示例,其被配置为制造如本文任一示例中所描述的相交测试系统(或光线跟踪系统或图形处理系统)。特别地,ic制造系统802包括布局处理系统804和集成电路生成系统806。ic制造系统802被配置为接收ic定义数据集(例如,定义如本文的任何示例中描述的相交测试系统),处理ic定义数据集,并根据ic定义数据集来生成ic(例如,其包含如本文任何示例中所述的相交测试系统)。ic定义数据集的处理配置ic制造系统802以制造包含如本文任一示例中所描述的相交测试系统(或光线跟踪
系统或图形处理系统)的集成电路。
[0209]
布局处理系统804被配置为接收和处理ic定义数据集以确定电路布局。根据ic定义数据集确定电路布局的方法在本领域中是已知的,并且例如可以涉及合成rtl代码以确定待生成的电路的门级表示,例如就逻辑部件(例如,nand、nor、and、or、mux和flip-flop部件)而言。通过确定逻辑部件的位置信息,可以根据电路的门级表示来确定电路布局。这可以自动完成或者在用户参与下完成,以便优化电路布局。当布局处理系统804确定了电路布局时,它可以将电路布局定义输出到ic生成系统806。电路布局定义可以是例如电路布局描述。
[0210]
ic生成系统806根据如本领域已知的电路布局定义生成ic。例如,ic生成系统806可以实现生成ic的半导体器件制造工艺,其可以包括光刻和化学处理步骤的多步骤序列,在此期间,在由半导体材料制成的晶片上逐渐形成电子电路。电路布局定义可呈掩模的形式,其可以在光刻工艺中用于根据电路定义来生成ic。替代性地,提供至ic生成系统806的电路布局定义可以是计算机可读代码的形式,ic生成系统806可以使用该代码形成用于生成ic的适当掩模。
[0211]
由ic制造系统802执行的不同处理可以全部在一个位置实现,例如,由一方。替代性地,ic制造系统802可以是分布式系统,使得过程中的一些可以在不同位置执行,且可以由不同各方执行。例如,以下阶段中的一些可以在不同位置和/或由不同方来执行:(i)合成表示ic定义数据集的rtl码,以形成要生成的电路的门级表示;(ii)基于门级表示来生成电路布局;(iii)根据电路布局来形成掩模;以及(iv)使用掩模来制造集成电路。
[0212]
在其它示例中,通过在集成电路制造系统处对集成电路定义数据集的处理,可以将系统配置为制造相交测试系统(或光线跟踪系统或图形处理系统),而无需处理ic定义数据集以确定电路布局。例如,集成电路定义数据集可以定义可重新配置的处理器诸如fpga的配置,并且对该数据集的处理可以将ic制造系统配置成(例如,通过将配置数据加载到fpga)生成具有该定义的配置的可重新配置的处理器。
[0213]
在一些实施例中,当在集成电路制造系统中被处理时,集成电路制造定义数据集可以使集成电路制造系统生成如本文中描述的装置。例如,由集成电路制造定义数据集以上文参考图8描述的方式对集成电路制造系统进行配置,可以制造出如本文所述的装置。
[0214]
在一些示例中,集成电路定义数据集可以包括在数据集处定义的硬件上运行的软件,或者与在数据集处定义的硬件组合运行的软件。在图8所示的实例中,ic生成系统可以进一步由集成电路定义数据集配置成在制造集成电路时根据在集成电路定义数据集中定义的程序代码将固件加载到所述集成电路上,或者以其它方式向集成电路提供与集成电路一起使用的程序代码。
[0215]
与已知的实现方式相比,在本技术中阐述的概念在装置、设备、模块和/或系统中(以及在本文中实现的方法中)的实现方式可以引起性能改进。性能改进可以包括计算性能提高、延迟减少、处理量增大和/或功耗降低中的一个或多个。在制造此类装置、设备、模块和系统(例如,在集成电路中)期间,可以在性能改进与物理实施方式之间进行权衡,从而改进制造方法。例如,可以在性能改进与布局面积之间进行权衡,从而匹配已知实施方式的性能,但使用更少的硅。例如,这可以通过以串行化方式重复使用功能块或在装置、设备、模块和/或系统的元件之间共享功能块来完成。相反,在本技术中阐述的引起装置、设备、模块和
系统的物理实施方式的改进(诸如硅面积减小)的概念可以针对性能提高进行权衡。例如,这可以通过在预定义面积预算内制造模块的多个实例来完成。
[0216]
申请人据此独立地公开了本文中所描述的每个单独的特征以及两个或更多个此类特征的任意组合,到达的程度使得此类特征或组合能够根据本领域的技术人员的普通常识基于本说明书整体来实行,而不管此类特征或特征的组合是否解决本文中所公开的任何问题。鉴于前文描述,本领域的技术人员将清楚,可以在本发明的范围内进行各种修改。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1