用于构建射线跟踪加速结构的方法和系统与流程

文档序号:28736259发布日期:2022-02-07 19:02阅读:90来源:国知局
用于构建射线跟踪加速结构的方法和系统与流程

1.本发明涉及射线跟踪领域。


背景技术:

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


技术实现要素:

9.提供本发明内容是为了以简化的形式介绍下文在具体实施方式中进一步描述的一系列概念。本发明内容不旨在标识所要求保护的主题的关键特征或必要特征,也不旨在用于限制所要求保护的主题的范围。
10.根据第一方面,提供了一种为模型创建边界体积层次结构bvh的计算机实现的方法,所述模型相对于所述模型的局部坐标系被定义。所述方法可以包括以下步骤中的一个或多个步骤:在所述模型内定义多个bvh节点;为所述bvh建立多个局部变换矩阵;以及对于所述多个bvh节点中的每一个,确定第一边界体积,并且并将所述节点与所述多个局部变换矩阵中的在所述第一边界体积与局部坐标系中的第二边界体积之间映射的一个局部变换矩阵相关联。
11.可选地,多个局部变换矩阵是在定义bvh之前预先确定的模型的固定矩阵集合,或者是至少部分基于对多个bvh节点的分析而确定的模型的固定矩阵集合。
12.可选地,多个局部变换矩阵各自表示不同的、可选地仿射的映射。
13.可选地,确定第一边界体积包括从候选边界体积集合中选择边界体积。每个候选边界体积可以与多个局部变换矩阵中的一个不同的局部变换矩阵相关联。选择还可包括比较候选边界体积集合并根据预定义的启发法选择最佳边界体积,并且可选地,所述预定义的启发法将利用下列各项之一来选择候选边界体积:最小体积、最小表面积或在特定方向上的最小横截面积。
14.可选地,将所述节点与所述多个局部变换矩阵中的一个局部变换矩阵相关联包括存储bvh节点的相应局部变换矩阵的指示,并且可选地,其中存储指示包括存储标识特定局部变换矩阵的索引。
15.可选地,第一边界体积是定向边界体积,并且第二边界体积是轴对准边界体积。第一边界体积可以是定向边界体积框,并且第二边界体积可以是轴对准边界体积框,或者第一边界体积可以是定向椭圆体,并且第二边界体积可以是球体或轴对准椭圆体。
16.可选地,所述方法还包括在射线跟踪系统中使用bvh进行相交测试。可选地,射线跟踪系统支持模型实例化。
17.可选地,所述方法还包括将每个节点的aabb与bvh和多个局部变换矩阵中的一个局部变换矩阵在第一边界体积与第二边界体积之间映射的指示一起存储。
18.可选地,局部变换矩阵的数量少于节点的数量。
19.根据第二方面,提供了一种为相对于全局坐标系而定义的场景构建射线跟踪加速
结构的计算机实现的方法,所述场景包括模型,所述模型相对于所述模型的局部坐标系被定义,并且其中通过应用模型变换矩阵以将所述模型定位在所述全局坐标系中而在所述场景中将所述模型实例化。所述方法可以包括以下步骤中的一个或多个步骤:访问用于所述模型的边界体积层次结构bvh的多个局部变换矩阵,所述bvh根据第二方面的上述变型中的任一个而被创建,以及对于所述模型的实例,通过将每个单独的局部变换矩阵与模型变换矩阵进行组合来使bvh的多个局部变换矩阵更新成实例变换矩阵集合,使得所述模型的实例的多个节点各自变成与实例变换矩阵中的一个实例变换矩阵相关联。
20.可选地,bvh的节点各自通过引用局部变换矩阵中的一个局部变换矩阵的索引而与多个局部变换矩阵中的一个局部变换矩阵相关联,并且其中当所述多个局部变换矩阵被更新成实例变换矩阵集合时,所述索引被保留。
21.可选地,模型在场景中被多次实例化,每次都是通过应用不同的模型变换矩阵以将模型的相应实例定位在全局坐标系中。可以针对每个实例执行对局部变换矩阵中的每个局部变换矩阵的更新,以产生不同的实例变换矩阵集合。
22.根据第三方面,提供了一种通过加速结构来跟踪相对于全局坐标系而定义的场景的射线的计算机实现的方法,所述场景包括模型,所述模型相对于所述模型的局部坐标系被定义,并且其中通过应用模型变换矩阵以将所述模型定位在所述全局坐标系中而在所述场景中将所述模型实例化。所述方法可以包括以下中的一项或多项:确定对于表示所述模型的实例的加速结构的节点需要射线相交测试;以及评估所述射线是否与所述模型的实例的边界体积层次结构bvh的节点相交,所述节点具有在所述模型坐标系中定义的第一边界体积,其中所述评估包括:从为所述bvh定义的多个实例变换矩阵中标识与所述节点相关联的实例变换矩阵,以及使用所标识的实例变换矩阵来变换所述射线,以执行测试来查明所述射线是否与分支节点相交,其中所标识的变换矩阵表示所述模型变换矩阵的逆矩阵和所述节点的第一边界体积与所述局部坐标系中的第二边界体积之间的映射的组合。
23.可选地,加速结构根据第二方面的上述变型中的任一个构建。
24.根据第四方面,提供了一种被配置成为模型创建边界体积层次结构bvh的射线跟踪系统,所述模型相对于所述模型的局部坐标系被定义。所述系统可以包括被配置成进行以下中的一项或多项的模块:定义模型内的多个bvh节点,建立bvh的多个局部变换矩阵;对于所述多个bvh节点中的每一个,确定第一边界体积,并且将所述节点与所述多个局部变换矩阵中的在所述第一边界体积与所述局部坐标系中的第二边界体积之间映射的一个局部变换矩阵相关联;以及将bvh存储在存储器中,包括所述第二边界体积以及所述节点与所述多个局部变换矩阵中的一个局部变换矩阵之间的关联。
25.可选地,所述模块被配置成执行根据第一方面的上述变型中的任一个的方法。
26.根据第五方面,一种被配置成为相对于全局坐标系而定义的场景构建射线跟踪加速结构的射线跟踪系统,所述场景包括模型,所述模型相对于所述模型的局部坐标系被定义,并且其中通过应用模型变换矩阵以将所述模型定位在所述全局坐标系中而在所述场景中将所述模型实例化。所述系统可以包括被配置成执行以下中的一项或多项的模块:从存储器访问用于所述模型的边界体积层次结构bvh的多个局部变换矩阵,所述bvh由根据第四方面的上述变型中的任一个的射线跟踪系统创建;对于所述模型的实例,通过将每个单独的局部变换矩阵与模型变换矩阵进行组合来使bvh的多个局部变换矩阵更新成实例变换矩
阵集合,使得所述模型的实例的多个节点各自变成与所述实例变换矩阵中的一个实例变换矩阵相关联;以及将所述实例变换矩阵集合存储在存储器中。
27.可选地,所述模块被配置成执行根据第二方面的上述变型中的任一个的方法。
28.根据第六方面,提供了一种被配置成通过加速结构来跟踪相对于全局坐标系而定义的场景的射线的射线跟踪系统,所述场景包括模型,所述模型相对于所述模型的局部坐标系被定义,并且其中通过应用模型变换矩阵以将所述模型定位在所述全局坐标系中而在所述场景中将所述模型实例化。所述系统可以包括相交测试逻辑,所述相交测试逻辑被配置成进行以下中的一项或多项:确定对于表示所述模型的实例的加速结构的节点需要射线相交测试;从针对边界体积层次结构bvh定义的多个实例变换矩阵中标识与具有在模型坐标系中定义的第一边界体积的所述模型的实例的节点相关联的实例变换矩阵,其中所标识的变换矩阵表示所述模型变换矩阵的逆矩阵和所述节点的第一边界体积与所述局部坐标系中的第二边界体积之间的映射的组合;
29.使用所标识的实例变换矩阵来变换所述射线;以及评估所述射线是否与所述节点相交。
30.可选地,所述系统被配置成执行根据第三方面的上述变型中的任一个的方法。
31.可选地,加速结构根据第二方面的上述变型中的任一个构建。
32.可选地,所述系统被配置成通过加速结构来跟踪场景的射线,其中所述加速结构包括根据第二方面的上述变化中的任一个而构建的bvh的节点,所述节点各自通过引用局部变换矩阵中的一个局部变换矩阵的索引而与多个局部变换矩阵中的一个局部变换矩阵相关联,并且其中当所述多个局部变换矩阵被更新成实例变换矩阵集合时,所述索引被保留。
33.可选地,所述系统被配置成通过加速结构来跟踪场景的射线,其中所述模型在所述场景中被多次实例化,每次都是通过应用不同的模型变换矩阵以将模型的相应实例定位在全局坐标系中。可以针对每个实例执行对局部变换矩阵中的每个局部变换矩阵的更新,以产生不同的实例变换矩阵集合。
34.根据另一方面,提供了一种计算机可读代码,所述计算机可读代码被配置成当所述代码运行时,使得执行第二方面的上述变型中的任何一个的方法。
35.根据另一方面,提供了一种为相对于全局坐标系而定义的场景构建射线跟踪加速结构的计算机实现的方法,所述加速结构包括顶层加速结构tlas,其具有引用底层加速结构blas的一个或多个实例的叶节点。所述方法可以包括以下中的一项或多项:定义一个或多个tlas节点;对于每个tlas节点,确定第一边界体积,并且将所述节点与变换矩阵相关联,所述变换矩阵在所述第一边界体积与所述全局坐标系中的第二边界体积之间映射。
36.根据另一方面,提供了一种通过加速结构来跟踪相对于全局坐标系而定义的场景的射线的计算机实现的方法,所述加速结构包括顶层加速结构tlas,其具有引用底层加速结构blas的一个或多个实例的叶节点。所述方法可以包括以下中的一项或多项:评估射线是否与tlas的节点相交,所述节点具有在全局坐标系中定义的第一边界体积,其中所述评估包括:标识与所述节点相关联的变换矩阵,所述变换矩阵表示所述节点的所述第一边界体积与所述全局坐标系中的第二边界体积之间的映射;使用所标识的变换矩阵来变换所述射线,以测试所述射线是否与所述节点相交。
37.根据另一方面,提供了一种被配置成为相对于全局坐标系而定义的场景构建射线跟踪加速结构的射线跟踪系统,所述加速结构包括顶层加速结构tlas,其具有引用底层加速结构blas的一个或多个实例的叶节点。所述系统可以包括被配置成进行以下中的一项或多项的模块:定义一个或多个tlas节点;对于每个tlas节点,确定第一边界体积,并且将所述节点与变换矩阵相关联,所述变换矩阵在所述第一边界体积与所述全局坐标系中的第二边界体积之间映射;以及将tlas存储在存储器中,包括第二边界体积以及节点和变换矩阵之间的关联。
38.根据另一方面,提供了一种被配置成通过加速结构来跟踪相对于全局坐标系而定义的场景的射线的射线跟踪系统,所述加速结构包括顶层加速结构tlas,其具有引用底层加速结构blas的一个或多个实例的叶节点。所述系统可以包括相交测试逻辑,所述相交测试逻辑被配置成进行以下中的一项或多项:标识与所述tlas的节点相关联的变换矩阵,所述节点具有在全局坐标系中定义的第一边界体积,所述变换矩阵表示所述节点的所述第一边界体积与所述全局坐标系中的第二边界体积之间的映射;使用所标识的变换矩阵来变换射线;以及评估所述射线是否与所述节点相交。
39.根据另一方面,提供了一种为相对于全局坐标系而定义的场景构建射线跟踪加速结构的方法,所述场景包括模型,所述模型相对于所述模型的局部坐标系被定义,并且其中通过应用模型变换矩阵以将所述模型定位在所述全局坐标系中而在所述场景中将所述模型实例化,所述方法包括以下中的一项或多项:访问用于所述模型的边界体积层次结构bvh的多个局部变换矩阵,所述bvh包括多个分支节点和多个局部变换矩阵,每个分支节点与obb和所述多个变换矩阵中的一个变换矩阵相关联;以及对于所述模型的实例,通过将每个单独的局部变换矩阵与模型变换矩阵进行组合来使bvh的局部变换矩阵更新成实例变换矩阵集合,使得所述模型的实例的分支节点各自变成与实例变换矩阵中的一个实例变换矩阵相关联。
40.射线跟踪图形处理系统可以用集成电路上的硬件来体现。可以提供一种在集成电路制造系统处制造射线跟踪图形处理系统的方法。可以提供一种集成电路定义数据集,该集成电路定义数据集在集成电路制造系统中被处理时配置所述系统以制造射线跟踪图形处理系统。可以提供一种非暂时性计算机可读存储介质,该非暂时性计算机可读存储介质上存储有射线跟踪图形处理系统的计算机可读描述,该计算机可读描述在集成电路制造系统中处理时,使集成电路制造系统制造体现射线跟踪图形处理系统的集成电路。
41.可以提供一种集成电路制造系统,该集成电路制造系统包括:非暂时性计算机可读存储介质,该非暂时性计算机可读存储介质上存储有射线跟踪图形处理系统的计算机可读描述;布局处理系统,该布局处理系统被配置成处理计算机可读描述,以便生成体现射线跟踪图形处理系统的集成电路的电路布局描述;以及集成电路生成系统,该集成电路生成系统被配置成根据电路布局描述来制造射线跟踪图形处理系统。
42.可以提供一种用于执行本文中描述的任一方法的计算机程序代码。可以提供非暂态计算机可读存储介质,在其上存储有计算机可读指令,所述计算机可读指令在计算机系统处执行时使计算机系统执行本文中描述的任何方法。
43.如对本领域的技术人员显而易见的,上述特征可以适当地组合,并且可以与本文所述的示例的任何方面组合。
附图说明
44.现在将参考附图详细描述示例,在附图中:
45.图1示出了在要被射线跟踪的场景中被多次实例化的模型;
46.图2示出了用于图1中呈现的场景的加速结构;
47.图3示出了轴对准边界体积框(aabb)和定向边界体积框(obb)如何能够被用于界定模型的部分;
48.图4示出了可以执行射线相交测试的不同方式;
49.图5示出了具有相关联的边界体积层次结构、加速结构和局部变换矩阵的选项板的模型;
50.图6示出了使用图5的模型的多个实例构建的场景,其具有相关联的加速结构;
51.图7示出了用于构建边界体积层次结构的方法;
52.图8示出了用于构建包含模型实例的加速结构的方法;
53.图9示出了在边界体积层次结构中跟踪射线的方法;
54.图10示出了用于构建顶层加速结构的方法;
55.图11示出了在顶层加速结构中跟踪射线的方法;
56.图12示出其中实现图形处理系统的计算机系统;并且
57.图13示出用于生成体现图形处理系统的集成电路制造系统。
58.附图示出各种示例。技术人员将理解,附图中所示的元件边界(例如,框、框的组,或其它形状)表示边界的一个示例。在一些示例中,情况可能是一个元素可以被设计为多个元素,或者多个元素可以被设计为一个元素。在适当的情况下,贯穿各附图使用共同附图标记来指示相似特征。
具体实施方式
59.通过示例的方式给出以下描述,以使本领域的技术人员能够制造和使用本发明。本发明不限于本文中描述的实施例,并且对所公开的实施例的各种修改对于所属领域的技术人员而言将是显而易见的。现在仅通过示例的方式来描述实施例。
60.如上所述,现代射线跟踪系统采用分层方法来构建加速结构以帮助执行相交测试。通过顶层加速结构(tlas)和一个或多个底层加速结构(blas)的组合在世界空间(即,为整个场景定义的全局坐标系)中表示场景。tlas和blas都可以具有它们本身的边界体积层次结构(bvh)形式的加速结构。这样,顶层加速结构可以以分层方式细分为子体积或节点,tlas中最低层次级别中的节点每个都引用底层加速结构(blas)。为了便于引用,底层节点也可以称为叶节点(其中更高层的节点被称为分支节点)。底层加速结构是表示例如单独对象或对象集合的模型。blas的叶节点是用于构建模型的几何或程序图元。单个blas可由不同(或甚至相同)tlas节点引用或“实例化”多次。
61.图1示出了图示实例的使用的场景100。场景100具有由轴102指示的世界空间或全局坐标系。在世界空间坐标系内,模型104的若干实例已被定位成对总体场景100有贡献。模型104被定义在由轴106指示的其本身的模型坐标系(或“局部”坐标系)内。可以看出,模型空间的轴106不同于世界空间的轴102。通过参考模型(例如,通过指针)结合变换,模型104的每个实例被定位在场景100中。变换可以被定义为确定模型实例在世界空间中的位置
(即,模型相对于全局坐标系的三维轴102出现的位置)的矩阵,以及诸如初始模型104的旋转、反射或拉伸的其他仿射运算。例如,在场景100中,不仅通过世界空间内的特定平移,而且通过基本模型104的反射来变换场景的右侧的模型104的实例。为了完整起见,注意,场景中的模型的实例周围的框仅用于引导眼睛,并且由于场景的视角而看起来重叠。重叠的框不是要指示重叠的实例。
62.图2示出了图1的场景如何可以根据用于射线跟踪的加速结构200来分解。图2中加速结构200的最低级别被示出为参考模型104的实例(实例104a-d)以及第二模型的实例(实例214a和214b)。当在200处示出的加速结构通过参考模型的实例而结束时,它实际上是顶层加速结构(并且tlas中的那些实例所参考的模型将由底层加速结构来描述,具有其本身的边界体积层次结构,这未示出)。
63.加速结构200的顶层是节点202,其也可以被称为根节点。节点202有效地表示整个场景。然而,场景以比单独模型的实例更大的粒度被进一步细分为更小的部分或体积。这样,在加速结构中的下一级别,存在表示总体场景100内的子体积的另外的分支节点204和206。这些分支节点然后可进一步细分以通向另外的子分支节点(例如,节点204链接到节点208和210)。或者,节点可以引用模型实例(例如,如节点206、208和210所示),即,它们可以引用tlas的叶节点。尽管未示出,但是给定分支节点也可以指子分支节点和子叶节点。为了完整起见,注意到,为了简单起见,图2将加速结构图示为二叉树,但是加速结构不必被定义为二叉树,并且例如,备选加速结构可以是n叉树的形式。
64.加速结构200可用于帮助确定射线是否与场景100中的任何对象相交。作为示例,进入场景的射线将在节点202处开始,并且被调度用于针对作为节点202的子节点的节点204和206进行测试。在这种情况下,对节点测试意味着确定射线是否与节点的边界体积相交。
65.例如,如果并非所有的场景100都被节点204和206的边界体积封装(例如,因为场景100的一部分包含未分配给任一节点的空白空间),并且没有发现任何节点相交,则将发现射线未命中场景中的对象,并且将不需要进一步遍历加速结构(尽管注意到这并不意味着所有射线跟踪操作都必须终止-例如,可以调用“未命中着色器”来确定如何表示未命中)。
66.相比之下,如果发现一个(或多个,如果节点具有重叠的边界体积)节点相交,则相交节点的子节点将被调度为对照射线进行测试。重复进行,进入blas实例中,并且(在那些实例的bvh内)降至构成模型的各个图元的级别。
67.这样,可以理解,确定射线相交的最终图元可能需要针对加速结构中较高的许多节点来测试射线,将发现许多节点未被命中。然而,这比直接针对每个图元测试每条射线更有效,将理解,确定层次结构中的高级别处的节点的未命中避免了测试任何子节点(以及子节点的子节点等)以及因此测试由那些节点封装的任何图元的需要。
68.射线是否与节点相交取决于与所述节点相关联的边界体积。不同的边界体积形状是可能的,但是现代系统倾向于依赖于框形边界体积,因为它们对于针对射线的测试在空间上相对高效并且在计算上相对简单。通过比较,球形边界体积可能需要比框更少的值来定义,并且可能在计算上更简单地测试与射线的相交,但是它们对于边界对象可能是非常低效的。即使例如圆形物体(例如车轮)在从垂直于车轮轴线的方向观察时被球体(即,在球
体内存在许多空体积)相对较差地界定,即使当平行于车轮轴线观察时球体似乎紧紧地界定车轮。低效界定是不期望的,因为当执行相交测试时,它导致假肯定(在本文档的上下文中,这意味着当射线将不会命中边界体积内的底层图元或子边界体积时,确定对边界体积的命中)。即,即使射线实际上不与由边界体积表示的对象相交,也将正确地确定射线与边界体积相交。在某种程度上,这是不可避免的,要完全避免的话,边界体积必须与对象的表面同义,在该点上,重新达到针对每个单独图元有效地测试射线。因此,存在要达到的平衡,并且边界框通常被优选为实现该平衡。
69.边界框可进一步被分成两种类型。如名称所暗示的,轴对准边界框(aabb)由平行于该框所定义的坐标系的轴的面/边来定义。定向边界框(obb)不必如此对准,即,它们可以与坐标系的轴成一定角度(但如果是最佳定向,则obb可以是aabb)。这意味着obb可以比aabb更紧密地界定对象(例如形成更小体积的框),因为关于如何围绕对象布置框有更多的自由度。如上所述,这种更紧密的边界可以导致更少的假肯定命中,这提高了遍历加速结构的效率。
70.图3示出aabb和obb如何具有不同的益处。图3中的a)和b)是模型房屋的正视图和侧视图。该模型在图3中的a)和b)中被示为被细分成包括aabb 302、304和306。aabb 302紧密地界定模型中的房屋的主体,使得它成为模型的该部分的期望的边界体积(注意,为了便于理解,边界框被示为与房屋的墙壁间隔开,但是在框302的情况下,它可以被绘制在房屋墙壁旁边的正上方)。也就是说,当基本几何形状与局部轴良好对准时,aabb工作得特别良好。然而,模型的倾斜屋顶截面更成问题。即使将屋顶分成前部和后部两个部分,两个aabb 304和306仍然包括相当大的空的空间(如图3中的b)中最佳看到的)—大部分aabb 304和306是空的空间,这又意味着被发现与那些aabb相交的许多射线可能不与屋顶的底层几何形状相交。在这种情况下,屋顶的表面可以更好地由两个obb表示,在图3中的c)的进一步侧视图中示为308和310。因此,仅基于框界定基础几何形状的程度,可以看出,当基础几何形状没有很好地对准局部轴时,obb可能是有益的。
71.然而,aabb在它们可以用更少的值存储的意义上也是有利的(因为不需要存储每个框的轴)。aabb可以通过每个框6个值来存储,而如果要明确地与obb一起存储轴,则obb需要12个值。当考虑获取边界框数据以用于执行针对许多射线和/或复杂层次结构的射线跟踪的影响时,这是重要的。与obb相比,对aabb执行相交测试在计算上也更简单(例如,因为面部的坐标更可能包括零或一,特别是如果使用单位aabb)。aabb的另一个优点是,子aabb集合的父aabb的计算相对简单(即,通过确定沿着子aabb面对的轴的最大/最小距离)。
72.作为上述考虑的结果,传统的射线跟踪系统通常使用aabb来构建加速结构。然而,现在已经认识到,在现代射线跟踪系统中引入实例开启了组合obb和aabb的一些益处的可能性。
73.如上所述,实例允许在世界空间中多次利用相同的模型。即使特定场景不使用同一模型的多个版本,该场景仍将通过采用在其本身的局部坐标系中构建的模型并将其变换成它在世界空间中的位置来构建。即,射线跟踪架构必须对模型执行变换以将其放置到世界空间中,而不管该模型是否被多次使用。
74.考虑具有由aabb构成的边界体积层次结构(bvh)的模型,通过参考底层模型和模型到世界空间的变换矩阵(例如,齐次坐标表示中的4
×
3矩阵)在场景内实例化该模型。模
型到世界空间的变换矩阵(这里也称为模型变换矩阵)被定义为将该模型及其相关的bvh放置在世界空间中。由于模型将在世界空间中任意布置,因此将理解,在变换之后,模型坐标系中的模型bvh的aabb实际上变成世界空间坐标系中的obb。还将理解,使用给定矩阵将模型变换到世界空间以对照世界空间中定义的射线进行测试在数学上等效于(在确定是否发生相交方面)通过该给定矩阵的逆矩阵来变换该相同射线,从而针对模型坐标系中定义的该相同模型对射线进行测试。结果,当执行与射线的相交测试时,因此通过使用将模型放置在世界空间中的变换矩阵的逆矩阵,将射线实际变换到模型的坐标系中是有益的。也就是说,以这种方式执行测试是有益的,以便可以实现针对aabb测试的计算优势。这也避免了将整个bvh转换到世界空间的需要,允许相同的bvh被重新用于模型的每个实例。
75.结果,不管是将射线变换到模型空间还是将模型变换到世界空间,基于实例的射线跟踪系统必须在每次期望对照实例模型进行测试时检索矩阵并执行变换。此外,如上所述,每个模型必须被视为实例化的,即使它仅被使用一次。因此,已经认识到,可以利用总是这样执行的变换来提供进一步的益处。特别地,假定系统需要用于执行这些变换的机制,则可以包括进一步的变换(其可以与正在执行的现有变换数学地组合)以允许obb的有效使用。通过确定用于要被实例化的模型内的节点的obb,并且通过认识到无论如何都需要变换以将射线带入模型的坐标系中,可以将进一步的变换组合成一个矩阵运算以应用于射线,从而说明模型系统中的obb和aabb之间的变换。结果,即使最初确定了obb的基本几何形状,也可以有效地针对aabb测试变换后的射线。
76.这在图4的2d示例中进一步示出。图4示出了不同坐标系中的相同射线相交系统的各方面,其中不同坐标系中的相同元素由具有不同字母后缀的相同附图标记表示(“w”表示图4中的a)的世界空间,“m”表示图4中的b)的模型空间,并且“t”表示图4中的c)的变换空间)。图4中的a)示出了位于世界空间中的对象402w。还示出了在模型空间中为对象定义的aabb 404w。因为aabb在模型空间中定义,并且通过应用变换将模型放置在世界空间中,所以aabb 404w与世界空间轴成一定角度。还示出了用于对象的obb 406w。在世界空间中,示出了射线408w,并且期望确定该射线是否将与对象402w相交。如上所述,由于框与轴相比旋转(即,框404实际上是世界空间中的obb,而是模型空间中的aabb),所以对照世界空间中的框404w测试射线将不如在模型空间中测试相同的框404m那样计算高效。图4中的b)示出了与图4中的a)相同的系统,但是在物体坐标系中。还示出了表示将对象402m从局部/模型空间变换到世界空间的变换矩阵m
obj_to_world
的箭头,其在图4中的a)和b)中的对象之间延伸。这样,可以看到,图4中的b)中的射线408m已经通过最初将物体放置在世界空间中的变换的逆变换而被变换(并且图4中的b)中的物体现在未被变换)。可以看出,在图4中的a)和b)之间的变换期间,射线408和对象402的相对取向被保持(因此射线是否与对象相交的问题的答案是不变的)。然而,在该坐标系中,测试的计算难度降低,因为框404m现在是用于测试的相关(即,模型)坐标系中的aabb。图4中的c)考虑了将obb 406t与坐标系对准的进一步变换,有效地将其变换为aabb。还示出了表示执行该变换的变换矩阵m
obb_to_aabb
的箭头,其在图4中的b)和c)中的obb之间延伸。同样,可以看出,将该变换应用于obb 406和射线408两者不改变射线和对象的相对取向,并且因此不改变射线是否将与对象相交的结果。如图4中的b)所示,因为框406t的轴与测试坐标系的轴对准,并且因此有效地是aabb,所以测试在计算上也相对简单。然而,通过比较图4中的b)和c)可以立即看出,对照图4中的c)中的框406t测试
射线408t,而不是使用图4中的b)中的框404m执行相应的测试,将导致框406t的“未命中”而不是框404m的“命中”(这然后将需要进一步测试较低级别的边界体积积,以最终确定下面的对象402未被命中)。因此,图4中的c)的测试提供aabb(就计算简易性而言)和obb(就紧紧界定对象并因此更早地检测到未命中而言)的益处。这可以在实践中例如通过根据在模型空间中的obb和aabb之间映射的变换矩阵来定义节点的模型空间中的obb,并且存储该aabb和相关联的变换矩阵来实现。然后,在对照通过变换矩阵映射到obb的aabb测试射线之前,可以使用变换矩阵来变换射线(连同最初将对象放置在世界空间中的变换的逆变换)。
77.换句话说,图4中的c)的测试有效地利用了以下观察结果:(1)对于确定相交重要的是射线和边界体积的相对取向,而不是该射线/边界体积系统相对于坐标系的取向,以及(2)射线/边界体积系统相对于坐标系的取向对于计算该相交的效率是重要的。此外,这些观察的实际利用标识出基于实例的射线跟踪系统已经将变换应用于每个实例模型,因此执行obb到aabb变换可以以有效的方式与现有变换操作组合(如下面更详细讨论的,并且在图4中示出的,其中在图4中的a)和c)之间指示了表示要对用于相交测试的射线执行的总变换的箭头,等效于(m
obj_to_world
)-1
*m
obb_to_aabb
)。为了完整起见,注意到在实际实现中,对于基于实例的射线跟踪系统中的世界和对象空间之间的任何映射,需要考虑由变换引入的浮点舍入误差,以及这些误差可能对相交测试的结果的影响。然而,这超出了本讨论的范围。
78.然而,为模型的bvh中的每个节点标识最佳obb本身可能计算量很大。
79.因此,已经确定,当分析模型以创建bvh时,仅使用可经由预定变换(例如,表示旋转或诸如仿射变换的其他变换)的固定集合或选项板之一映射到aabb的obb是有利的。在这种情况下,该集合在有限数量的意义上是“固定的”,即,比模型中的节点数量少(通常远少于)节点数量(或仅少于分支节点数量)。这是基于这样的理解,即,例如,obb与aabb偏移1
°
(在给定方向上)仅有小的增量测试益处,而对于任意几何形状,最大的益处可以预期通过选择obb与aabb偏移45
°
来实现。即,在1
°
的示例中,将与aabb相交的大多数射线将仍然与obb相交;相反,在45
°
的示例中,可以预期将与aabb相交的大量射线将不与obb相交。这样,通过使用obb的相对小的对准集,可以实现相交测试(即,较早标识未命中)中的显著优点。系统可以在存储器中为模型存储一次局部变换集合,并且可以为节点(具有其将被映射到的对应的aabb,除非系统假设单个单元aabb并且变换考虑了缩放和转换,但是在模型中存在许多节点的情况下这可能是不期望的)存储obb,其中具有用于特定节点的局部变换集合的相关的一个的指示(例如简单索引)。
80.与模型bvh一起存储的矩阵的选项板可以被称为“局部变换矩阵”的选项板或集合,因为它们表示模型的局部坐标系内的变换,即局部坐标系中obb和aabb之间的映射。选项板可以为bvh中的所有节点或表示所有节点的子集的多个节点(例如,仅为bvh中的分支节点,或仅为模型的特定元素,例如嵌套实例,如以下更详细地讨论的)定义。
81.这种方法在图5和图7中示出。图5示出了具有相关联的边界体积层次结构的人500的基本2d模型,而图7是方法步骤的流程图。图7的方法700开始于步骤702,接收在构建要被射线跟踪的场景中要使用的模型。由射线跟踪系统来定义模型的bvh,尽管例如创建模型的开发者可以提供关于什么可能是适当的提示。在任何情况下,在步骤704,射线跟踪系统标识节点(例如,模型的区域)以形成bvh结构。转到图5,bvh在模型500上以虚线框510和518示出,以及树形图530(其是部分加速结构-即使树形图530中的最下面的节点仍然是分支节
点,因为该图没有示出边界框内的最终图元的节点,所以树形图530不是完整的blas,但是对于理解本发明的目的是有用的)。在图5的示例中,已经建立了变换矩阵540的选项板,其对应于图7的步骤708。下面更详细地讨论如何建立选项板。该树形图还指示标识存储在选项板540中的矩阵中的特定矩阵的索引,也如下所述。
82.为了创建模型500的边界体积层次结构,它被分成六个组成部分:头部501、躯干502、左臂503、右臂504、左腿505和右腿506。还可能希望将两条腿一起进一步分组到另一节点中,并且类似地将头部和躯干分组到另一节点中。在标识了相关节点之后,然后根据图7的步骤710确定每个节点的obb。每个obb通过选项板540中的局部变换矩阵中的一个局部变换矩阵与模型坐标系中的aabb相关。结果,每个组成部分具有其本身的相关联的边界体积obb:头部obb 511、躯干obb 512、左臂obb 513、右臂obb 514、左腿obb 515和右腿obb 516。还存在模型510的总边界体积。用于腿的obb进一步被一起分组到另一“父”腿obb 518中,并且类似地,为头部和躯干定义父上身obb 517。树形图520将该结构定义为一系列节点。根节点520对应于总体模型边界框510。该节点链接到四个子分支节点:上身节点527、左臂节点523、右臂节点524、腿节点528。左臂节点523和右臂节点524不具有与它们相关联的另外的子分支节点。然而,上身节点527与两个另外的子(分支)节点相关联,头部节点511和躯干节点512,而腿部节点528与子的左腿节点525和右腿节点526相关联。
83.注意,图5的示例提供了每个节点的单个边界体积,但这不必是这种情况。例如,可关于右腿508和右臂504两者定义单个加速结构节点。边界体积518和514两者都可以与该概念节点相关联。这样的布置可以是有益的,因为它仅需要一次射线变换(即,对于节点)来执行两次射线相交测试(一次测试针对每个边界体积)。与具有用于单独边界体积的单独节点相比,这节省了变换的成本。然而,将显而易见的是,根据本方法,与节点相关联的每个边界体积将因此引用相同的变换矩阵,这在定义节点时将需要进一步考虑。例如,腿505和506可以由一个节点内的不同边界框来表示,而不是如图5中所阐述的那样作为单独的节点来表示。或者,将右腿508和右臂504关联到同一节点中可能是适当的,因为它们两者都将最佳地参考同一局部变换矩阵。然而,可能不期望将这些元素与同一节点相关联,因为它们被判断为相距太远(并且因此所述节点将包括许多空卷)。相反,可能期望头部501和躯干502共享节点,因为它们彼此靠近,但是这将是不可能的,因为它们不都共享相同的最佳局部变换矩阵。因此,节点可以与或可以不与多于一个的边界体积相关联。
84.可以看到,obb 510-518包括与模型坐标系的轴对准的一些框(因此有效地是aabb)以及在其他角度的一些框。例如,头部obb 511相对于轴线旋转45
°
,右臂obb 514和腿部obb 515、516和518逆时针(ccw)旋转55
°
,左臂obb 513顺时针(cw)旋转55
°
。还可以看到,这些obb不一定是可以定义的最完美的obb(例如,可以为右腿506定义更紧密的obb)。然而,对于每个分支节点,已经基于在选项板540中建立的局部变换矩阵的有限集合中的最佳一个来定义obb。选项板540包含在模型坐标系中在obb和aabb之间映射的变换集合(注意,在该示例中映射被指示为从obb到aabb,也如图4所示,但是将理解,映射可以在另一方向上定义,其中在稍后的计算中适当地考虑逆反)。第一变换(具有索引0)是恒等变换,其将用于aabb,并且其还将用于图元相交测试。
85.从该示例逐步离开以更一般地考虑变换,变换集合可被任意地预定义,例如表示预期产生测试益处的变换的选择,诸如围绕各轴的45
°
旋转的组合。或者,它们可以在分析
模型之后定义。例如,可以分析模型(如图7中虚线表示的可选步骤704所示)以确定每个节点的最佳obb,并且理想obb的分布可以用于定义模型的代表性变换集合。作为另外一种选择,可以通过使用现有变换(例如,从一个等价物开始到aabb)来构建变换的选项板,除非可以确定新的变换将允许为节点形成比通过使用任何现有变换更适合超过阈值量的obb。作为示例,这样的阈值可以被设置为例如与利用选项板中的最佳现有变换可实现的体积减小量相比的体积减小量(例如绝对、分数或百分比),或者表面面积减小量,或者给定方向(例如obb的主轴或预期的主观察方向)上的截面面积减小量。作为又一实例,可定义变换的候选选项板(例如,20个变换,表示等效于不同二十面体的旋转),其可基于模型的分析削减为最终选项板(例如,4次或8次变换)。最佳方法将取决于情况。例如,可以确定,通过对小的模型或未多次实例化的模型执行广泛分析没有获得太多益处,因此,无论如何,小的模型很可能被相对少的射线贯穿。相反,如果已知模型在场景中将被多次实例化,则可能值得执行更详细的分析以选择变换的选项板,因为射线可能相对经常地针对bvh的实例被测试,并且因此通过变换选择的优化,在针对作为整体的场景的相交测试的完成速度方面,可获得更大的增益。在其他情况下,可能不希望花费时间来执行广泛分析(不管模型大小或使用频率如何),并且因此可始终使用固定变换的预定选项板。
86.从前面的讨论中将显而易见的是,步骤704、706、708、710的顺序可以根据实现而变化。例如,如果要执行模型的分析以标识最佳obb,则可以在局部变换的选项板之前或同时确定obb。实际上,如果分析与定义节点的分析结合,则分析甚至可以在bvh节点的定义之前。因此,将了解,本发明不限于这些步骤的特定次序。
87.选项板中的变换的数量是有限的,但是可以根据需要而变化,与使用更大的数量(例如,bvh与模型的更紧密拟合)相比,通过使用相对少的变换(例如,bvh创建的简单性/速度)产生不同的益处,并且在不同的环境中可能期望不同的益处。然而,在示例实现中,选项板可以包括4个变换矩阵(例如,包括对应于aabb的一个变换矩阵-即单位矩阵-和分别围绕三个坐标轴中的每一个的三个单个45
°
旋转)或8个变换矩阵(例如,基于来自先前示例的四个变换矩阵来构建,并且添加两个45
°
旋转的三个组合(一个围绕两个不同轴中的每一个)和三个45
°
旋转的另一组合(一个围绕三个轴中的每一个))。其他实现可以采用少于4个、或在4和8之间、或多于8个的变换矩阵。
88.在一些实现中,变换矩阵可以是3d系统的3
×
3矩阵(尽管可以使用其他维度变换,例如,如果要执行透视失真)。然而,对于常规的3
×
3矩阵变换,根据实现,存在避免为每个矩阵存储9个值(例如9个浮点值)的范围。例如,通过依赖于相关联的aabb来进行缩放,可以仅存储8个值。或者,由于obb和aabb之间的映射主要是旋转,因此,不是将每个变换作为模型的加速度结构的一部分存储为3
×
3矩阵(例如,9个浮点值),而是可以将变换存储为四元数(例如,4个浮点值)。这在减少为加速结构存储的数据方面可以提供一些优点,但是如果四元数需要被转换回3
×
3矩阵以与模型变换矩阵组合,则可能引起计算损失。这是否值得判断将取决于应用。
89.返回图5的示例,确定用于模型500的每个节点的obb的过程可包括从候选obb集合中选择obb,对于该集合,每个候选obb通过选项板540中的变换之一映射到局部坐标系中的不同aabb。可以根据预定的启发法从候选obb中选择每个节点的最佳obb。例如,选定的obb可以是在特定方向上具有最小体积、或最小表面积、或最小横截面积的候选obb。
90.在任何情况下,通过选项板540中所示的所建立的局部变换集合,bvh 510可使用各自通过预定变换之一映射到aabb的obb来定义。在确定了给定节点的obb之后,局部变换矩阵中的相关一个的指示以及可以使用所指示的局部变换矩阵映射到obb的aabb可以与所述节点相关联。适当变换矩阵的指示可以与每个节点相关联,例如作为链接到选项板530的索引。这在树形图530中示出,对于该树形图,表示节点的每个框指示选项板530中的相关索引。然后,根据图7的步骤712,模型及其bvh,与选项板中的aabb和与变换的关联一起,可以与索引的选项板530一起存储在存储器中。
91.当模型在场景中被定位或“实例化”时(例如,作为tlas内的blas),为该定位定义模型变换矩阵,以将模型带入场景的总体世界空间坐标系中。通常,这将是单个矩阵变换,尽管它也可以作为矩阵变换的组合来完成。如上所述,可以通过该模型变换矩阵的逆矩阵来变换射线,以将射线带入模型坐标系中。为了节省矩阵运算,一旦模型被实例化,单独的局部变换矩阵就可以乘以模型变换矩阵(或者,如果多个模型变换矩阵被使用,则局部变换矩阵可以与那些模型变换矩阵中的仅一个组合),并且作为与模型的该特定实例相关联的“实例变换矩阵”的集合或选项板被存储在存储器中。以此方式,可针对模型的不同实例创建实例变换矩阵的不同选项板(因为其将与不同模型变换矩阵相关联)。
92.当这些经更新选项板存储在存储器中时,与初始局部变换选项板相比的选项板的索引可保持不变。即,如果使用局部变换矩阵的选项板来产生实例变换矩阵选项板,则两个选项板中具有相同索引的矩阵将通过模型变换矩阵而相关。换句话说,保持了选项板中矩阵的排序。结果,与基础模型bvh中的节点相关联的索引将仍然正确地索引实例变换矩阵的选项板中的正确矩阵。即,因为bvh节点简单地指示选项板中的矩阵中的是要使用的适当的矩阵(例如,通过索引),则在实例化之后,在实例变换矩阵选项板中,该指示将继续指向正确的矩阵。换句话说,除了变换矩阵的选项板之外,不需要修改定义bvh的任何其他数据来说明实例。这保持了仅需要创建一次基本模型bvh以用于多个实例的益处。相比之下,例如,如果为每个节点明确地存储局部变换矩阵,则对于每个新实例,需要为每个节点更新局部变换矩阵,这将是效率低得多的。
93.这样,很明显,所述系统的优点是一旦模型变换矩阵已知,就可以计算每组实例变换矩阵一次,而不是在每次相交测试中使用模型bvh中的节点时重复两个变换(模型变换和局部变换)的组合。换言之,在测试射线的点处,可以在单个操作中通过针对特定节点的适当实例变换矩阵而不是通过应用适当的个体局部变换矩阵以及模型变换矩阵的一系列操作来变换射线。这样,与支持实例(其中无论如何都需要矩阵变换来执行相交测试)的传统射线跟踪系统相比,射线相交测试本身引起很少的(如果有的话)附加计算成本。
94.图6示出了上述实例的示例,图8示出了构建加速结构800的相应方法。在图6中,示例2d场景610包括模型500的多个实例。实例可以被分组到总体加速结构中,如场景610中的框和对应的树形图所示。树节点620对应于整个场景610,节点621、622、623、624、625和626分别对应于框611、612、613、614、615和616。可以理解,节点622-626对应于模型边界框510及其相关联的边界体积层次结构,换言之,树形图是tlas,其底层对应于blas的实例,是模型500的加速结构。
95.此外,框612-616中的每一个是图5的模型框510的实例,其已经通过模型变换矩阵而被定位在场景坐标空间中。如图6底部的流程图所示,对于每个实例k,当在场景中创建实
例时,模型变换矩阵的逆矩阵与模型500的局部变换矩阵的选项板组合以产生特定实例的实例变换矩阵的选项板。即,为了在场景610被接收(图8的步骤802)后为场景610构建加速结构,对于模型500的每个实例,访问用于该模型的bvh的局部变换矩阵的选项板(步骤804),并且对于该实例更新bvh的多个局部变换矩阵(步骤806)以成为实例变换矩阵集合。通过将每个单独的局部变换矩阵与模型变换矩阵组合(注意,该组合可以涉及将这些矩阵中的一个或多个的逆与其他矩阵组合,这取决于如何定义变换),使得模型的实例的分支节点各自变得与实例变换矩阵之一相关联,来执行该更新。如上所述,如果节点已经通过索引引用了相关变换矩阵,则可以在不修改bvh的其他数据的情况下实现与实例变换矩阵的这种关联,因为所述索引然后可以被用来代替引用实例变换矩阵的选项板。如从上文还将理解的,将为模型500的每个实例建立不同的实例变换矩阵集合,因为每个实例使用不同的模型变换矩阵。这在图8中由围绕步骤804和806的循环表示,指示对于每个模型的每个实例重复那些步骤,直到完成加速结构。
96.当涉及跟踪场景610的射线时,实例变换矩阵可以用于在执行与模型的相关实例的相交测试时变换射线。图9示出了这样做的方法900。当确定射线与表示模型500的实例的加速结构620的节点(例如,节点622、623、625或626中的一个)相交(步骤902)时,则有必要评估射线是否与用于模型的该实例的bvh的任何分支节点相交。在第一种情况下,这将针对根节点的每个子节点来完成。仅考虑一个这样的分支节点,其具有在模型坐标系中定义的obb,并且按照aabb和对映射在aabb和obb之间的变换矩阵的参考来存储。射线跟踪系统然后从为该模型实例定义的实例变换矩阵的选项板标识(步骤904)与分支节点相关联的实例变换矩阵。这可以例如使用存储在加速结构530中的节点的存储器中的索引来实现。然后,可以使用所标识的实例变换矩阵来变换射线(步骤906)。换言之,射线可以在一个步骤中通过矩阵来变换,该矩阵表示用于放置模型500的特定实例的模型变换矩阵的逆矩阵与用于分支节点的obb和模型坐标系中的aabb之间的映射的组合。在执行了该变换之后,可以执行相交测试(步骤908)。例如,可以使用固定功能相交测试逻辑来完成跟踪射线的这些步骤。
97.以上示例考虑在实例化各个模型的上下文中的射线跟踪。然而,也可以具有所谓的“嵌套实例化”,其中一个模型包括另一个模型的一个或多个实例。例如,场景可以包括相同植物模型的多个实例,但是植物模型本身可以具有相同花卉模型的多个实例,其进而可以包括相同花瓣的多个实例。然而,这种传统的嵌套可能导致需要大量变换来构建场景的问题。即,返回参考相同的示例,花瓣模型的每个实例将需要变换以将其定位在花模型内,花模型的每个实例将需要变换以将其定位在植物模型内,并且植物模型的每个实例将需要变换以将其定位在场景处。嵌套实例的组合有效地导致对最低级别元素应用独特的变换-换句话说,如果存在m株植物,每株植物具有n朵花和p个花瓣,则存在mxnxp变换矩阵,其将各自需要例如单独的3
×
4变换矩阵。
98.结果,嵌套实例化可能导致存在许多需要存储的变换。这样,出现了这样的点,其中优选地使场景扁平化以减少嵌套实例的数量(例如,减少到仅一个实例化级别),但是这又带来了在定义每个模型并因此定义整个场景所需的数据的大小方面的不利。也就是说,如果简化植物模型以去除花和花瓣的嵌套模型,则必须将那些模型的每个实例的等效数据添加到植物模型本身。这减少了所需的变换的数量,但是增加了设备模型的大小。
99.一种使嵌套实例扁平化的替代方案是存储变换的层次结构。但是,这又在涉及测
试射线相交时产生问题,因为现在必须通过一系列矩阵来变换每条射线,并且这样的矩阵运算是昂贵的(如上所述,其中支持现代射线跟踪系统的实例所需的单个矩阵运算被利用来提供附加优点而无需在测试射线的点处添加另外的矩阵运算)。
100.相反,可以观察到,在可能需要嵌套实例化的许多常见情形中,存在嵌套模型所需的相对少量的不同定向。例如,当创建包括同一建筑物的许多实例的场景时,该建筑物可能位于网格状道路系统上,并且因此该建筑物可能仅位于四个旋转位置中的一个旋转位置中。类似地,建筑物本身可以具有四个侧面,每个侧面具有相同窗户的多个实例,但是窗户将仅需要在与四个侧面中的每一个相对应的四个取向中的一个上被实例化。在这种情况下,将显而易见的是,实例甚至可以共享相同的尺度(例如,窗口在它们出现的任何地方都是相同的大小,并且建筑物在整个场景内都是相同的大小),使得仅平移将对于相同取向的实例而不同。
101.这样,通过应用如上所述的相同原理,可以变得更易于管理以支持多个嵌套级别而不招致实现传统嵌套的全部成本。也就是说,对于例如包括m个建筑物的场景的两级嵌套,其中每个建筑物具有n个窗口,不需要创建m
×
n个单独的变换矩阵。相反,建筑物模型可以存储(在这种情况下)4个局部变换矩阵(例如3
×
3矩阵)的选项板以考虑旋转和缩放,并且仅存储每个窗口实例的附加平移(例如仅另外3个浮点值)。然后,每个窗口实例(其将由建筑物的bvh中的节点表示)可被存储在建筑物bvh中,具有来自变换矩阵的选项板的相关变换矩阵的指示。该指示可以是索引,其存储起来比用于每个嵌套实例的完整变换矩阵更便宜(甚至也考虑存储转换值)。
102.前面的描述集中在obb的使用以及obb和aabb之间的变换映射,因为aabb在相交测试期间在计算上花费更少。然而,将理解,所描述的方法和系统同样适用于其他几何形状,其中第一边界体积可被映射到对于执行相交测试计算成本较低的第二边界体积。在一般意义上,通过所描述的方法可以使任何定向边界体积(obv)与轴对准边界体积(aabv)相关。例如,节点的定向椭圆边界体积可与到轴对准椭圆边界体积或(不太灵活,但计算上更便宜)球形边界体积的变换相关联。
103.尽管前面的描述集中于利用在tlas中实例化模型时已经执行的变换,但是应当理解,当在支持blas实例化的系统中考虑tlas自身的节点时,可以获得类似的益处。
104.tlas节点通常具有在世界空间中定义的边界体积,因此很可能已经被定义为aabb或世界空间中的其他aabv。这样,如果aabv和射线都在世界空间中定义,则当测试射线与tlas aabv的相交时,不需要坐标系之间的严格变换。然而,硬件射线跟踪系统在其处理流水线方面可能无法区分tlas相交测试和blas相交测试。在这种情况下,当进行测试时,可以有效地将恒等变换应用于射线或tlas aabv,从而进行与blas相交测试相同的步骤。即使不是这种情况,系统也将必须被配置成执行用于blas测试的变换(以处理实例),并且使得配置可以被扩展以覆盖tlas测试。结果,对于支持实例的射线跟踪系统,可以以与对于blas相同的方式将obv支持结合到tlas中。
105.也就是说,一个或多个变换矩阵可以与tlas相关联。与模型bvh相比,优选地,每个tlas节点存储一个变换,而不是使用节点所引用的tlas的变换选项板,因为tlas节点的数目与blas中的数目相比相对较小。然而,在一些情况下,可能仍需要具有变换选项板。图10示出了用于创建tlas的方法1000。在步骤1002,接收场景,并且在步骤1004,定义tlas节点。
如上所述,可以任选地为tlas定义变换的选项板,因此这在图10中被指示为步骤1006的虚线框。在任何情况下,对于每个定义的tlas节点,可以确定obv,并且所述节点可以与在obv和aabv之间映射的变换矩阵相关联(步骤1008)。每个节点的相关矩阵可以通过指示(例如,如果使用tlas的选项板,则通过索引)连同具有tlas的aabv一起存储(步骤1010)在存储器中。如图10所示,这可以对每个tlas节点重复。
106.类似地,当开始跟踪射线通过tlas时,可以评估射线是否与tlas的节点相交,如图11和方法1100所示。当确定针对tlas测试射线时(步骤1102),可以在步骤1104标识与节点相关联的变换矩阵(例如,通过为节点存储的索引),该变换矩阵表示在全局坐标系中用于节点的obv和aabv之间的映射。然后,在步骤1106,可以使用所标识的矩阵来变换射线,然后,在步骤1108,可以在相交测试中使用所变换的射线。
107.图12示出了计算机系统,其中可以实现本文所述的射线跟踪图形处理系统。计算机系统包括cpu 1202、gpu 1204、存储器1206和其他装置1214,例如显示器1216、扬声器1218及相机1222。处理块或模块1210在gpu 1204上实现,用于执行本文描述的方法。在其他示例中,处理块或模块1210可以在cpu 1202上实现。计算机系统的部件可以通过通信总线1220彼此进行通信。存储装置1212被实现为存储器1206的一部分。
108.虽然图12示出射线跟踪图形处理系统的一个实现,但是将理解,可以为人工智能加速器系统绘制类似的框图,例如,通过用神经网络加速器(nna)1211替换cpu 1202或gpu 1204,或者通过添加nna作为附加单元。在这种情况下,处理块1210可以在nna中实现。
109.图7至图11的射线跟踪方法被示为包括多个功能步骤。这仅是示意性的,并不旨在限定这些步骤的不同逻辑元件之间的严格划分。每个步骤可以以任何适当的方式在硬件系统中提供。应当理解,在此描述为在创建边界体积层次结构和加速结构期间形成的中间值可以不由射线跟踪图形系统在任何点物理地生成,并且可以仅表示方便地描述由射线跟踪图形系统在其输入和输出之间执行的处理的逻辑值。
110.本文中所描述的射线跟踪图形处理系统可以在集成电路上体现为硬件。本文所述射线跟踪图形处理系统可以被配置成执行本文所述任何方法。一般来讲,上文所述的功能、方法、技术或部件中的任一者可在软件、固件、硬件(例如,固定逻辑电路系统)或其任何组合中实现。本文可以使用术语“模块”、“功能”、“部件”、“元件”、“单元”、“块”和“逻辑”来概括地表示软件、固件、硬件或其任何组合。在软件实现方式的情况下,模块、功能、部件、元件、单元、块或逻辑表示程序代码,所述程序码在处理器上执行时执行指定任务。本文中所描述的算法和方法可以由执行码的一个或多个处理器执行,所述码使处理器执行算法/方法。计算机可读存储介质的示例包括随机存取存储器(ram)、只读存储器(rom)、光盘、闪存存储器、硬盘存储器以及可以使用磁性、光学和其他技术来存储指令或其它数据并且可以由机器存取的其它存储器装置。
111.如本文中所使用的术语计算机程序代码和计算机可读指令是指供处理器执行的任何种类的可执行代码,包含以机器语言、解释语言或脚本语言表达的代码。可执行代码包含二进制代码、机器代码、字节代码、定义集成电路的代码(例如硬件描述语言或网表),以及用例如c、java或opencl等编程语言码表达的代码。可执行代码可以是例如任何种类的软件、固件、脚本、模块或库,当在虚拟机或其它软件环境中被适当地执行、处理、解释、编译、运行时,这些软件、固件、脚本、模块或库使支持可执行代码的计算机系统的处理器执行由
所述代码指定的任务。
112.处理器、计算机或计算机系统可以是任何种类的装置、机器或专用电路,或其集合或一部分,它具有处理能力使得可以执行指令。处理器可以是或包括任何种类的通用或专用处理器,诸如cpu、gpu、nna、片上系统、状态机、媒体处理器、专用集成电路(asic)、可编程逻辑阵列、现场可编程门阵列(fpga)等。计算机或计算机系统可以包括一个或多个处理器。
113.本发明还意图涵盖限定如本文中所描述的硬件的配置的软件,例如硬件描述语言(hdl)软件,用于设计集成电路或用于配置可编程芯片以执行所要功能。也就是说,可以提供一种其上编码有集成电路定义数据集形式的计算机可读程序代码的计算机可读存储介质,当在集成电路制造系统中处理(即,运行)时,该计算机可读程序代码将所述系统配置成制造被配置成执行本文所述任何方法的射线跟踪图形处理系统,或者制造包括本文所述任何装置的射线跟踪图形处理系统。集成电路定义数据集可以是例如集成电路描述。
114.因此,可以提供一种在集成电路制造系统中制造如本文所述的射线跟踪图形处理系统的方法。此外,可以提供一种集成电路定义数据集,当在集成电路制造系统中处理时,该集成电路定义数据集使制造射线跟踪图形处理系统的方法得以执行。
115.集成电路定义数据集可以是计算机代码的形式,例如作为网表,用于配置可编程芯片的代码,作为定义适合于在集成电路中以任何级别制造的硬件描述语言,包括作为寄存器传输级(rtl)代码,作为高级电路表示法(诸如verilog或vhdl),以及作为低级电路表示法(诸如oasis(rtm)和gdsii)。在逻辑上定义适合于在集成电路中制造的硬件的更高级表示法(诸如rtl)可以在计算机系统上处理,该计算机系统被配置用于在软件环境的上下文中生成集成电路的制造定义,该软件环境包括电路元件的定义和用于组合这些元件以生成由该表示法定义的集成电路的制造定义的规则。如通常软件在计算机系统处执行以便定义机器的情况一样,可能需要一个或多个中间用户步骤(例如,提供命令、变量等),以便将计算机系统配置成生成集成电路的制造定义,以执行定义集成电路以便生成所述集成电路的制造定义的代码。
116.现在将参考图13描述在集成电路制造系统处处理集成电路定义数据集以便将所述系统配置为制造射线跟踪图形处理系统的示例。
117.图13示出了集成电路(ic)制造系统1302的示例,该集成电路制造系统被配置成制造如本文任何示例中描述的射线跟踪图形处理系统。具体地,ic制造系统1302包括布局处理系统1304和集成电路生成系统1306。ic制造系统1302被配置成接收ic定义数据集(例如,定义如本文任何示例中描述的射线跟踪图形处理系统)、处理ic定义数据集以及根据ic定义数据集来生成ic(例如,其体现如本文任何示例中所述的射线跟踪图形处理系统)。通过对ic定义数据集的处理,将ic制造系统1302配置为制造体现如本文任何示例中描述的射线跟踪图形处理系统的集成电路。
118.布局处理系统1304被配置为接收和处理ic定义数据集以确定电路布局。根据ic定义数据集确定电路布局的方法在本领域中是已知的,并且例如可以涉及合成rtl代码以确定要生成的电路的门级表示,例如就逻辑部件(例如nand、nor、and、or、mux和flip-flop部件)而言。通过确定逻辑部件的位置信息,可以根据电路的门级表示来确定电路布局。这可以自动完成或者在用户参与下完成,以便优化电路布局。当布局处理系统1304已经确定电路布局时,其可将电路布局定义输出到ic生成系统1306。电路布局定义可以是例如电路布
局描述。
119.如本领域已知的,ic生成系统1306根据电路布局定义来生成ic。例如,ic生成系统1306可实现生成ic的半导体装置制造工艺,其可涉及光刻和化学处理步骤的多步骤序列,在此期间,在由半导体材料制成的晶片上逐渐形成电子电路。电路布局定义可呈掩模的形式,其可以在光刻工艺中用于根据电路定义来生成ic。替代地,提供给ic生成系统1306的电路布局定义可呈计算机可读代码的形式,ic生成系统1306可使用所述计算机可读代码来形成用于生成ic的合适掩模。
120.由ic制造系统1302执行的不同过程可全部在一个位置例如由一方来实施。替代地,ic制造系统1302可以是分布式系统,使得一些过程可在不同位置执行,并且可由不同方来执行。例如,以下级中的一些可以在不同位置和/或由不同方来执行:(i)合成表示ic定义数据集的rtl代码,以形成要生成的电路的门级表示;(ii)基于门级表示来生成电路布局;(iii)根据电路布局来形成掩模;以及(iv)使用掩模来制造集成电路。
121.在其他示例中,在集成电路制造系统中对集成电路定义数据集的处理可以将所述系统配置成在不处理ic定义数据集以确定电路布局的情况下制造射线跟踪图形处理系统。例如,集成电路定义数据集可以定义例如fpga的可重新配置的处理器的配置,并且对所述数据集进行的处理可以将ic制造系统配置成(例如,通过将配置数据加载到fpga)生成具有所述定义的配置的可重新配置的处理器。
122.在一些实施方案中,当在集成电路制造系统中处理时,集成电路制造定义数据集可以使集成电路制造系统生成如本文中描述的装置。例如,由集成电路制造定义数据集以上文关于图13所描述的方式对集成电路制造系统进行的配置可以制造如本文中所描述的装置。
123.在一些示例中,集成电路定义数据集可包括在数据集处定义的硬件上运行的软件,或者与在数据集处定义的硬件组合运行的软件。在图13所示的示例中,ic生成系统可以由集成电路定义数据集进一步配置成在制造集成电路时根据在集成电路定义数据集处限定的程序代码将固件加载到所述集成电路上,或者以其他方式向集成电路提供与集成电路一起使用的程序代码。
124.与已知的实现方式相比,在本技术中阐述的概念在装置、设备、模块和/或系统中(以及在本文中实现的方法中)的实现方式可以引起性能改进。性能改进可以包括计算性能提高、等待时间缩短、处理量增大和/或功耗降低中的一个或多个。在制造此类装置、设备、模块和系统(例如在集成电路中)期间,可以在性能改进与物理实施方案之间进行权衡,从而改进制造方法。例如,可以在性能改进与布局面积之间进行权衡,从而匹配已知实现方式的性能,但使用更少的硅。例如,这可以通过以串行方式重复使用功能块或在装置、设备、模块和/或系统的元件之间共享功能块来完成。相反,在本技术中阐述的引起装置、设备、模块和系统的物理实现方式的改进(诸如硅面积减小)的概念可以针对性能提高进行权衡。例如,这可以通过在预定义面积预算内制造模块的多个实例来完成。
125.申请人据此独立地公开了本文中所描述的每个单独的特征以及两个或更多个此类特征的任意组合,到达的程度使得此类特征或组合能够根据本领域的技术人员的普通常识基于本说明书整体来实行,而不管此类特征或特征的组合是否解决本文中所公开的任何问题。鉴于前文描述,本领域的技术人员将清楚,可以在本发明的范围内进行各种修改。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1