CN115512027A - 光线跟踪系统中的相交测试 - Google Patents
光线跟踪系统中的相交测试 Download PDFInfo
- Publication number
- CN115512027A CN115512027A CN202210661592.6A CN202210661592A CN115512027A CN 115512027 A CN115512027 A CN 115512027A CN 202210661592 A CN202210661592 A CN 202210661592A CN 115512027 A CN115512027 A CN 115512027A
- Authority
- CN
- China
- Prior art keywords
- intersection
- ray
- primitive
- shader
- identified
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
- 238000012360 testing method Methods 0.000 title claims abstract description 285
- 238000000034 method Methods 0.000 claims abstract description 118
- 230000001133 acceleration Effects 0.000 claims abstract description 115
- 238000012545 processing Methods 0.000 claims abstract description 65
- 230000008569 process Effects 0.000 claims abstract description 18
- 238000004519 manufacturing process Methods 0.000 claims description 54
- 238000010200 validation analysis Methods 0.000 claims description 39
- 230000004044 response Effects 0.000 claims description 27
- 238000010586 diagram Methods 0.000 description 30
- 230000007704 transition Effects 0.000 description 8
- 230000006870 function Effects 0.000 description 7
- 230000008901 benefit Effects 0.000 description 6
- 230000006872 improvement Effects 0.000 description 6
- 238000009877 rendering Methods 0.000 description 6
- 238000000547 structure data Methods 0.000 description 6
- 238000013459 approach Methods 0.000 description 5
- 230000001427 coherent effect Effects 0.000 description 4
- 230000003287 optical effect Effects 0.000 description 4
- XUIMIQQOPSSXEZ-UHFFFAOYSA-N Silicon Chemical compound [Si] XUIMIQQOPSSXEZ-UHFFFAOYSA-N 0.000 description 3
- 229910052710 silicon Inorganic materials 0.000 description 3
- 239000010703 silicon Substances 0.000 description 3
- 238000004422 calculation algorithm Methods 0.000 description 2
- 230000008859 change Effects 0.000 description 2
- 238000004590 computer program Methods 0.000 description 2
- 230000003247 decreasing effect Effects 0.000 description 2
- 239000000284 extract Substances 0.000 description 2
- 238000002156 mixing Methods 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 230000002194 synthesizing effect Effects 0.000 description 2
- 238000010998 test method Methods 0.000 description 2
- 238000013528 artificial neural network Methods 0.000 description 1
- 230000006399 behavior Effects 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 238000012993 chemical processing Methods 0.000 description 1
- 239000003086 colorant Substances 0.000 description 1
- 238000004891 communication Methods 0.000 description 1
- 239000002131 composite material Substances 0.000 description 1
- 238000013075 data extraction Methods 0.000 description 1
- 230000001419 dependent effect Effects 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 230000008030 elimination Effects 0.000 description 1
- 238000003379 elimination reaction Methods 0.000 description 1
- 238000011156 evaluation Methods 0.000 description 1
- 238000002955 isolation Methods 0.000 description 1
- 230000000873 masking effect Effects 0.000 description 1
- 239000000463 material Substances 0.000 description 1
- 238000000206 photolithography Methods 0.000 description 1
- 230000009467 reduction Effects 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
- 238000005389 semiconductor device fabrication Methods 0.000 description 1
- 239000007787 solid Substances 0.000 description 1
- 238000000638 solvent extraction Methods 0.000 description 1
- 238000012956 testing procedure Methods 0.000 description 1
- 238000012546 transfer Methods 0.000 description 1
- 230000000007 visual effect Effects 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T15/00—3D [Three Dimensional] image rendering
- G06T15/04—Texture mapping
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T15/00—3D [Three Dimensional] image rendering
- G06T15/06—Ray-tracing
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T15/00—3D [Three Dimensional] image rendering
- G06T15/005—General purpose rendering architectures
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T15/00—3D [Three Dimensional] image rendering
- G06T15/08—Volume rendering
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T2210/00—Indexing scheme for image generation or computer graphics
- G06T2210/12—Bounding box
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T2210/00—Indexing scheme for image generation or computer graphics
- G06T2210/21—Collision detection, intersection
Landscapes
- Engineering & Computer Science (AREA)
- Computer Graphics (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- Image Generation (AREA)
Abstract
光线跟踪系统中的相交测试。提供一种用于处理光线跟踪系统中的光线的光线跟踪单元和方法。通过执行一个或多个相交测试迭代来对所述光线执行相交测试。每个相交测试迭代包括:(i)遍历加速结构以识别所述光线与图元的最接近相交,所述最接近相交尚未在针对所述光线的任何先前相交测试迭代中被识别为所述最接近相交;以及(ii)如果基于所述图元的特性,将针对所识别相交执行遍历着色器:则针对所识别相交执行所述遍历着色器;并且如果所述遍历着色器的所述执行确定所述光线在所识别相交处不与所述图元相交,则促使执行另一相交测试迭代。当针对所述光线的所述相交测试完成时,执行输出着色器以处理针对所述光线的所述相交测试的结果。
Description
技术领域
本公开涉及处理光线跟踪系统中的一条或多条光线的数据(例如包括执行相交测试)。
背景技术
光线跟踪是一种计算渲染技术,其用于通过跟踪例如来自相机的视角的光(‘光线’)穿过场景的路径来产生场景(例如3D场景)的图像。每条初级光线被建模为源自相机,并且通过像素进入场景中。当光线遍历场景时,其可能与场景内的物体相交。可对光线与其所相交的物体之间的相交进行建模以创建逼真的视觉效果。例如,可通过执行相交测试来处理光线,以便确定光线与物体相交(例如场景中的图元),并且响应于确定光线与物体相交,可针对相交执行着色器程序(即计算机代码的一部分)。程序员可以编写着色器程序以定义系统如何对相交(其例如可促使向场景中发射一条或多条次级光线)作出反应,例如以表示光线从相交物体反射或光线通过物体折射(例如,如果物体是透明或半透明的)。作为另一示例,出于确定物体是否处于相交点处的阴影中的目的,着色器程序可促使一条或多条光线发射到场景中。执行着色器程序(以及处理任何相关次级光线)的结果可以是计算初级光线通过的像素的颜色值。着色器程序可简称为“着色器”。上文提及的被执行以定义系统如何对所确认(或“确证”)相交作出反应的着色器程序在本文中可称为“输出着色器”,因为所述着色器程序被调用在针对光线执行的相交测试的输出上。例如,输出着色器可以是最接近的命中着色器或未命中着色器。最接近的命中着色器可用以确定输出颜色值,并且可在相交测试程序已发现最接近的相交图元之后执行。未命中着色器用以确定系统在发现光线不与场景中的任何图元相交的情况下如何作出反应。
使用光线跟踪渲染场景的图像可涉及执行许多相交测试,例如用于渲染场景的图像的数十亿个相交测试。为了减少需要执行的相交测试的数量,光线跟踪系统可产生加速结构,其中加速结构的每个节点表示场景内的区。加速结构通常是分层的(例如具有树结构)以使得其包括多个节点级别,其中靠近加速结构的顶部的节点表示场景中相对较大的区(例如根节点可表示整个场景),并且靠近加速结构的底部的节点表示场景中相对较小的区。加速结构在不同示例中可具有不同结构,例如栅格结构、八叉树结构、空间分割结构(例如k-d树)或边界体积分层。节点可表示场景中的合适形状或区(其在本文中可称为“框”)。在一些示例中,节点表示场景中的轴对准边界框(AABB)。可使用加速结构,通过首先测试光线与加速结构的根节点的相交(例如以递归方式)来对光线执行相交测试。如果发现光线与父节点(例如根节点)相交,则测试可进行到所述父节点的子节点。相比之下,如果发现光线不与父节点相交,则可避免对所述父节点的子节点的相交测试,从而节省计算工作量。如果发现光线与叶节点相交,则可针对由叶节点表示的区域内的物体对光线进行测试,从而确定光线与哪个(些)物体相交。使用加速结构(而非直接利用场景中的物体测试光线)减少了需要执行的相交测试的数量,并且简化了相交测试。相交测试更加简单,因为加速结构的节点表示基本形状(例如轴对准边界框或球),针对所述基本形状的相交测试比针对更复杂的物体形状(例如按照并未预先确定相对于坐标系轴的对准的三角形图元定义)的相交测试更简单。
定义应如何执行光线跟踪的一些光线跟踪标准(例如Vulkan(RTM)和DirectXRaytracing(“DXR”)(RTM))已引入了可被称为“遍历着色器”的新型着色器。遍历着色器是可被执行以便确定光线是否与物体相交的着色器程序。遍历着色器在寻找相交时的作用是针对遍历加速结构的光线的相交测试程序的部分,而不是在相交测试程序之后由输出着色器进行的输出颜色的着色。
遍历着色器的一个示例是“任何命中着色器”。针对光线与图元之间的相交执行任何命中着色器,并且执行任何命中着色器的目的是决定相交应被接受还是被舍弃。例如,任何命中着色器都可用以确定图元在相交点处是不透明的还是透明的(或半透明的)。例如,纹理可存储可应用于图元的阿尔法(alpha)值,并且任何命中着色器的执行可基于纹理来确定相交点处的阿尔法值。此程序可称为“阿尔法掩蔽”,即使用纹理来指定三角形的哪些部分是透明的。如果图元在相交点处是透明的,则舍弃相交,而如果图元在相交点处是不透明的(或半透明的),则接受相交。被标记为不透明的图元不运行任何命中着色器。如果图元在相交点处是半透明的,则可从相交点发射另一光线以与结果进行混合。
遍历着色器的另一示例是“相交着色器”。当发现光线与程序图元相交时,执行相交着色器。出于遍历加速结构的目的,将程序图元表示为体积(例如轴对准边界框(AABB))。如果发现光线与表示程序图元的体积相交,则针对光线执行相交着色器。隐式几何形状限定在程序图元的体积内(并且由所述体积界定),并且相交着色器的执行确定光线是否与隐式几何形状相交。作为简单示例,限定在程序图元的体积(例如AABB)内的隐式几何形状可以是球体。相交着色器可通过存储球体方程的参数来表示球体,并且相交着色器的执行可直接针对光线来评估所述球体方程,以决定光线与隐式几何形状之间是否存在相交。在其他示例中,隐式几何形状的形状可以是除球体之外的某物。
定义应如何执行光线跟踪的光线跟踪标准(例如Vulkan(RTM)和DirectXRaytracing(“DXR”)(RTM))需要确定的着色器执行次序,包括针对任何命中着色器和相交着色器。这是为了确保输出是确定的。例如,一些着色器彼此之间具有依赖性,因此如果着色器次序不确定,则有可能从相同输入获得不同输出。例如,一些类型的混合是次序依赖性的,并且如果改变着色器的执行次序,则使两个着色器尝试混合可能最终产生不同结果。此外,确定性使编程和调试系统更容易。
在一些光线跟踪系统中,加速结构的遍历涉及测试光线在场景中更远的区之前与表示更近的区的节点的相交。在这些系统中,可在于相交测试程序期间需要遍历着色器时执行遍历着色器,并且这将提供着色器执行的确定次序,包括针对上文提及的光线跟踪标准所要求的任何命中着色器和相交着色器。例如,相交测试程序可能涉及以下步骤:
1.找到在场景中具有图元的光线的下一次相交
2.如果找到的相交需要任何命中着色器:
a.则针对相交运行任何命中着色器
b.如果任何命中着色器拒绝相交,则转到步骤1
3.如果找到的相交需要相交着色器:
a.则针对相交运行相交着色器
b.如果未发现相交,则转到步骤1。
4.针对找到的相交更新光线结果
5.转到步骤1
在此情形下,当已针对光线完成相交测试程序时,则已发现针对光线的最接近的相交,并且可针所述相交执行输出着色器。
如上文所提及,使用光线跟踪来渲染场景可涉及大量处理,例如着色器的相交测试和执行。具体地说,能够实时地渲染一系列帧(例如以每秒25帧、30帧或60帧的帧率,仅为了给出一些示例)将是有用的,例如当用户通过虚拟3D场景导航时,用于渲染计算机游戏的图像。此外,能够在小型装置上,例如在游戏控制台或移动装置上执行这种渲染而并不需要超级计算机将是有用的。由此,提高光线跟踪系统的效率(例如在处理延迟、功耗和/或硅面积方面),同时仍符合光线跟踪标准的要求将是有益的,所述要求例如对着色器执行的确定次序的要求,包括针对任何命中着色器和相交着色器。
发明内容
提供本发明内容是为了以简化形式介绍下文在具体实施方式中进一步描述的一系列概念。本发明内容不旨在标识所要求保护的主题的关键特征或必要特征,也不旨在用以限制所要求保护的主题的范围。
提供一种处理光线跟踪系统中的光线的方法,其包括:
通过执行一个或多个相交测试迭代来执行针对所述光线的相交测试,其中每个相交测试迭代包括:
遍历加速结构以识别所述光线与图元的最接近相交,所述最接近相交尚未在针对所述光线的任何先前相交测试迭代中被识别为所述最接近相交;以及
响应于基于所述图元的特性来确定将针对所识别相交执行遍历着色器:
针对所识别相交执行所述遍历着色器;以及
响应于所述遍历着色器的所述执行确定所述光线在所识别相交处不与所述图元相交,促使执行另一相交测试迭代;以及
当针对所述光线的所述相交测试完成时,执行输出着色器以处理针对所述光线的所述相交测试的结果,
其中在所述一个或多个相交测试迭代中的至少一个中,针对所述光线的所识别相交执行遍历着色器。
所述遍历着色器可以是任何命中着色器。针对所识别相交的任何命中着色器的所述执行可确定:接受所识别相交,以使得所述光线在所识别相交处与所述图元相交;或舍弃所识别相交,以使得所述光线在所识别相交处不与所述图元相交。在一些示例中,如果所述图元并非不透明的,则将针对所识别相交执行任何命中着色器。
所述遍历着色器可以是相交着色器。在一些实例中,如果所述图元是出于遍历所述加速结构的目的而被表示为体积的程序图元,则将针对所识别相交执行相交着色器。表示所述程序图元的体积可以是轴对准边界框。
所述光线与所述程序图元的所识别相交可在为沿所述光线的最小距离的位置处,在所述位置处,所述光线有效,并且所述光线与表示所述程序图元的所述体积相交。
针对所识别相交的所述相交着色器的所述执行可确定:
所述光线在表示所述程序图元的所述体积内的另一位置处与所述图元相交,所述另一位置不同于所识别相交的所述位置,以使得所述光线在所识别相交处不与所述图元相交;或
所述光线不与所述程序图元的所述体积内的所述图元相交,以使得所述光线在所识别相交处不与所述图元相交。
在场景中测试光线与图元的相交的次序可以是非确定的。
所述相交测试可对多条光线执行,并且所述遍历加速结构可包括:
将光线一起分组到待测试与所述加速结构的相同节点的相交的光线包中;以及
处理所述光线包,从而针对与所述加速结构的所述相同节点的相交测试所述包的所述光线(例如并行,例如使用SIMD处理单元)。
所述遍历加速结构可在固定功能电路系统中执行。
可基于所述包的丰满度来调度针对所述加速结构的节点的相交测试的光线包。
所述加速结构可具有分层树结构,并且在所述加速结构的所述遍历期间,光线可同时存在于所述分层树结构的多个分支中。
所述方法可包括:
响应于在当前相交测试迭代期间确定将执行另一相交测试迭代:
存储与在所述当前相交测试迭代期间识别的所识别相交有关的数据;以及
使用所存储数据来避免在所述另一相交测试迭代中再次识别相同相交。
在所述相交测试期间,可针对所述光线存储三个数据集。三个数据集可包括:
(i)候选集,其在当前相交测试迭代中在所述加速结构的所述遍历期间保持跟踪目前针对所述光线已识别的所述最接近相交;
(ii)非确证集,其指示在所述当前相交测试迭代中在所述加速结构的所述遍历期间相交可被接受作为所识别相交的最小相交距离;以及
(iii)确证集,其指示能够通过针对所述光线的所述相交测试找到相交的最大相交距离。
在针对所述光线的初始相交测试迭代的开始处:
所述光线的最小剔除距离可存储在所述光线的所述非确证集中;并且
所述光线的最大剔除距离可存储在所述光线的所述候选集和所述确证集中。
响应于确定在所述当前相交测试迭代之后将执行另一相交测试迭代,所述方法可包括:在执行所述另一相交测试迭代之前:
将来自在所述当前相交测试迭代结束处的所述候选集的数据复制到所述非确证集中;以及随后
将来自在所述当前相交测试迭代结束处的所述确证集的数据复制到所述候选集中。
所述方法可包括在所述当前相交测试迭代中在所述加速结构的所述遍历期间,响应于找到所述光线与图元的相交:
如果找到的相交比由所述候选集中的所述数据指示的当前最接近相交更近,则更新所述候选集;以及
如果:(i)所述找到的相交比由所述确证集中的所述数据指示的所述最大相交距离更接近,(ii)所述图元是不透明的,以及(iii)所述图元不是程序图元,则更新所述确证集。
所述三个数据集中的每个数据集可包括:
沿所述光线的距离的指示;以及
在所述数据集同所述光线与特定图元的相交有关的情况下:
所述特定图元的类型的指示;
所述特定图元的不透明性的指示;和
与所述特定图元相关联的一个或多个指标。
所述一个或多个指标包括与所述特定图元相关联的实例索引、几何形状索引以及图元索引。
所述方法可包括在所述加速结构的所述遍历期间,响应于在同所述光线与另一图元的先前相交的相交距离相等的相交距离处找到所述光线与所述特定图元的相交,其中所述先前相交由所述三个数据集中的一个数据集中的所述数据指示:
将所述特定图元的唯一图元标识符与所述另一图元的唯一图元标识符进行比较;并且
基于所述唯一图元标识符的所述比较的结果来确定是否将所述找到的相交视为比所述先前相交更接近。
图元的唯一图元标识符可基于所述一个或多个指标。
所述方法还可包括:
使用与所述特定图元相关联的所述实例索引、所述几何形状索引以及所述图元索引的串联来确定所述特定图元的所述唯一标识符;以及
使用与所述另一图元相关联的实例索引、几何形状索引以及图元索引的串联来确定所述另一图元的所述唯一标识符。
在所述加速结构的所述遍历期间,响应于(i)找到与程序图元的相交,以及(ii)在沿所述光线的所述最小相交距离处的位置在所述程序图元内,在所述位置处,在所述当前相交测试迭代中在所述加速结构的所述遍历期间,相交可被接受作为所识别相交:
在所述加速结构的所述遍历期间,所述找到的相交可被确定为在沿所述光线的所述最小相交距离处。
所述输出着色器可以是最接近的命中着色器或未命中着色器。
可通过执行针对所述光线的所述相交测试来针对最接近的所接受相交执行最接近的命中着色器。
执行所述输出着色器的结果可用于渲染3D场景的图像。
提供一种光线跟踪单元,其包括:
相交测试模块;和
处理逻辑;
其中所述光线跟踪单元被配置成:
通过执行一个或多个相交测试迭代来执行针对光线的相交测试,其中每个相交测试迭代包括:
使用所述相交测试模块遍历加速结构以识别所述光线与图元的所述最接近相交,所述最接近相交尚未在针对所述光线的任何先前相交测试迭代中被识别为最接近相交;以及
响应于基于所述图元的特性来确定将针对所识别相交执行遍历着色器:
在所述处理逻辑上针对所识别相交执行所述遍历着色器;以及
响应于所述遍历着色器的所述执行确定所述光线在所识别相交处不与所述图元相交,促使执行另一相交测试迭代;以及
当针对所述光线的所述相交测试完成时,在所述处理逻辑上执行输出着色器以处理针对所述光线的所述相交测试的结果。
所述光线跟踪单元还可包括处理模块,所述处理模块被配置成:
接收限定场景中的几何形状的几何数据;并且
基于所接收几何数据来产生所述加速结构。
所述相交测试模块可在所述光线跟踪单元中的固定功能电路系统中实施。
提供一种使用集成电路制造系统制造本文中所描述的光线跟踪单元的方法,所述方法包括:
使用布局处理系统处理所述光线跟踪单元的计算机可读描述,以便产生体现所述光线跟踪单元的集成电路的电路布局描述;以及
使用集成电路产生系统根据所述电路布局描述来制造所述光线跟踪单元。
提供一种光线跟踪单元,其被配置成执行本文中所描述的方法中的任一种方法。
所述光线跟踪单元可在集成电路上的硬件中实施。可提供一种在集成电路制造系统中制造光线跟踪单元的方法。可提供一种集成电路定义数据集,所述集成电路定义数据集在于集成电路制造系统中被处理时,将所述系统配置成制造光线跟踪单元。可提供一种其上存储有相交测试模块的计算机可读描述的非暂态计算机可读存储介质,所述计算机可读描述在于集成电路制造系统中被处理时,促使所述集成电路制造系统制造实施光线跟踪单元的集成电路。
可提供一种集成电路制造系统,其包括:非暂态计算机可读存储介质,其上存储有所述光线跟踪单元的计算机可读描述;布局处理系统,其被配置成处理所述计算机可读描述,以便产生实施所述光线跟踪单元的集成电路的电路布局描述;和集成电路产生系统,其被配置成根据所述电路布局描述来制造所述光线跟踪单元。
可提供用于执行本文中所描述的方法中的任一种方法的计算机程序代码。可提供其上存储有计算机可读指令的非暂态计算机可读存储介质,所述计算机可读指令在于计算机系统处被执行时,促使所述计算机系统执行本文中所描述的方法中的任一种方法。
如对本领域的技术人员显而易见的,上述特征可以适当地组合,并且可以与本文中所描述的示例的任何方面进行组合。
附图说明
现在将参考附图详细描述示例,在附图中:
图1展示根据本文中所描述的示例的光线跟踪系统;
图2展示根据本文中所描述的示例的处理光线跟踪系统中的数据的方法的流程图;
图3展示沿光线的有效相交范围,并且指示非确证相交距离、候选相交距离和确证相交距离;
图4展示执行针对光线相对于图元的相交测试的方法的流程图;
图5展示在其中光线与图元集(其子集是不透明的)相交的第一示例中,非确证相交距离、候选相交距离和确证相交距离如何在一系列相交测试迭代内变化;
图6示出与程序图元相交的光线,其展示在程序图元内的确证命中的位置;
图7示出在其中非确证相交距离处的光线上的位置在程序图元内的情况下与程序图元相交的光线;
图8a和图8b展示在其中光线与部分重叠的程序图元集相交的第二示例中,非确证相交距离、候选相交距离和确证相交距离如何在一系列相交测试迭代内变化;
图9展示在其中实施光线跟踪系统的计算机系统;并且
图10展示用于产生体现光线跟踪系统的集成电路的集成电路制造系统。
附图示出了各种示例。技术人员将了解,附图中所示出的元件边界(例如框、框的组或其他形状)表示边界的一个示例。在一些示例中,情况可能是一个元件可以被设计为多个元件,或者多个元件可以被设计为一个元件。在适当的情况下,贯穿各附图使用共同的附图标记来指示类似的特征。
具体实施方式
借助于示例呈现以下描述,以使得本领域的技术人员能够制造和使用本发明。本发明不限于本文中所描述的实施方案,并且对所公开实施方案的各种修改对于本领域的技术人员将是显而易见的。
现在将仅借助于示例来描述实施方案。
如下文更详细地描述,为了提高光线跟踪系统的效率,将光线一起分组到待测试与相同几何形状块的相交的光线“包”(其可称为“集合”)中。几何形状块可以是由加速结构的节点表示的体积,或几何形状块可以是图元。随后,可例如在相似时间(或相同时间)处一起测试光线包的光线与几何形状的相交。可并行或串行地测试光线包的光线与几何形状块的相交,以使得测试在相同(或类似)时间处执行。一起测试光线包而不是单独测试光线提供了存储器访问益处,例如,这意味着当从存储器提取几何形状数据并且进行片上存储时,针对所述几何形状数据测试更大数量的光线(平均),同时仍对其进行片上存储,以使得总共需要更少的几何形状数据提取。例如,给定框或图元的几何形状数据可从存储器提取一次,并且进行本地存储,并且随后可针对所述相同几何形状数据测试多条光线的相交。相比之下,如果光线未分组到如本文中所描述的包中,则针对相同几何形状数据的光线的相交测试将有可能已单独执行许多循环,并且可能已涉及从存储器单独读取几何形状数据。减少将数据从存储器读取到光线跟踪单元上的次数将减小光线跟踪系统所需的带宽,并且将显著改善光线跟踪系统的性能(例如在处理延迟和功耗方面)。另外,针对相同几何形状数据对光线进行分组以用于相交测试还有助于增加执行相交测试的处理单元的利用量(即减少处理单元空闲的时间),这也是高效光线跟踪系统的目的。
将光线一起分组到待一起针对相同几何形状块进行测试的包中的过程可称为“一致性收集”。也就是说,一致性收集涉及将光线一起分组到包中,所述包将从存储器中访问相同分层数据。尽管此一致性收集提高相交测试程序的效率(例如通过减少需要从存储器提取相同数据块的次数),但其引起加速结构的非确定遍历。换句话说,针对几何形状项目(例如加速结构的节点)测试光线的次序不是确定的。也就是说,以如本文中所描述的方式使用一致性收集的光线跟踪系统(其中如果光线被测试,并且被确定为命中加速结构的多个节点,则用于针对相交节点的子对象进行测试的光线同时一起被收集到包中)在光线遍历加速结构以找到与图元的相交的次序中本质上是非确定的。加速结构可以是分层的,并且可被描述为“树”。在加速结构的遍历期间,光线可同时存在于树的许多分支中,并且光线向不同分支下前进的次序取决于许多因素,包括来自存储器的时间数据返回,这在光线跟踪单元的控制范围之外,因此可被视为基本上随机的。这导致非确定次序,其中在加速结构的遍历期间测试光线与图元的相交。如上文所提及,定义应如何执行光线跟踪的光线跟踪标准(例如Vulkan(RTM)和DirectX Raytracing(“DXR”)(RTM))需要确定的着色器执行次序,包括针对遍历着色器。如果加速结构的遍历是非确定的,则符合光线跟踪标准的此要求,尤其是针对作为相交测试程序的部分的遍历着色器来说并非不重要。本文中所描述的示例允许维持一致性收集的效率,同时还符合光线跟踪标准中具有确定着色器执行次序的要求。
在上文的背景章节中所描述的系统中,执行遍历着色器的次序取决于找到相交的次序,因此非确定遍历将产生非确定着色器执行次序。因此,在本文中所描述的示例中采用不同方法。
具体地说,通过延迟遍历着色器的执行直到遍历已发现最接近相交,将着色器执行次序与遍历解联。如果遍历着色器拒绝所述相交,则通过再次遍历加速结构来找到下一次最接近相交。此过程减少着色器执行的次数,并且减少在光线遍历硬件与着色硬件之间的往返,以更多的光线遍历工作为代价。
在本文中所描述的示例中,所述方法涉及执行一个或多个相交测试迭代(其可称为“分层搜索迭代”),所述一个或多个相交测试迭代涉及找到与图元的最接近相交(不执行任何遍历着色器),所述最接近相交尚未在任何先前相交测试迭代中被识别为最接近相交。在相交测试迭代之后,可执行遍历着色器以确定所识别最接近相交是否是有效相交。如果遍历着色器不确定光线在所识别相交处与图元相交,则可执行另一相交测试迭代以识别光线与图元的下一次最接近相交。
以此方式,执行着色器(包括遍历着色器)的次序是确定的。具体地说,在更远的相交之前,将针对更接近的相交执行遍历着色器。然而,在加速结构的遍历期间,测试光线与加速结构的不同节点的相交的次序是不确定的。由此,可维持一致性收集的益处,同时还符合具有执行着色器的确定次序的要求。这种方法的代价是,在不同相交测试迭代中,涉及针对光线遍历加速结构的一些处理可能在不同相交测试迭代中被重复,但在大多数情况下,通过能够使用一致性收集提供的益处(例如在减少需要从存储器中提取数据的次数方面的益处)远超过重复加速结构的遍历中的一些处理的缺点。应注意,从存储器访问数据是成本高昂的操作(在延迟和功耗方面)。还应注意,本文中所描述的示例的光线跟踪单元具有相交测试模块,所述相交测试模块在硬件中(例如使用固定功能电路系统)实施以非常有效地并行执行针对几何形状的光线相交测试(例如针对光线包),因此与从存储器访问数据相比,执行相交测试所涉及的程序并不是成本高昂的(在延迟和功耗方面)。
图1展示包括光线跟踪单元102和存储器104的光线跟踪系统100。存储器104可以是存储器层次,所述存储器层次可包括一个或多个高速缓存存储器级别。光线跟踪单元102包括相交测试模块106、处理逻辑108、任务调度单元110、处理逻辑接口112、光线调度器114、光线存储装置116和处理模块118。相交测试模块106包括一个或多个相交测试单元(图中未展示),例如包括一个或多个框相交测试单元,其被配置成针对轴对准框执行光线的相交测试;一个或多个三角形相交测试单元,其被配置成针对三角形图元执行光线的相交测试;和/或一个或多个程序相交测试单元,其被配置成针对表示程序图元的体积执行光线的相交测试。如上文所提及,相交测试模块106可在硬件中(例如在固定功能电路中)实施,以使得其可有效地执行相交测试。一般来说,本文中所描述的光线跟踪单元的功能中的任一种功能可在软件、硬件、固件或它们的某一组合中执行。软件具体实施一般提供更多灵活性,因为软件在其被设计和/或创建之后比硬件具体实施更容易更改。然而,硬件具体实施一般在延迟和功耗方面提供更有效的具体实施,因此如果所需功能是预先已知的(其为针对相交测试操作的情况),则硬件具体实施可优于软件具体实施。
产生加速结构(例如分层加速结构)以表示待渲染的场景中的几何形状,并且将加速结构存储在存储器104中。例如,处理模块118可接收(例如由应用程序提交的)几何数据,所述几何数据定义待渲染的场景中的几何形状。场景可以是3D场景。处理模块118可基于所接收几何数据来产生分层加速结构。用于产生加速结构的技术是本领域中已知的,并且这些技术的细节超出了本公开的范围。然而,为了给出一个示例的非常简短的解释,处理模块118可产生加速结构的表示场景中的边界图元的体积(例如AABB)的叶节点,并且随后处理模块118可以自下而上方式产生加速结构的在叶节点上方的节点,从而创建分层加速结构。在其他示例中,可采用自上而下方法来构建加速结构。如本文中详细描述,分层加速结构用于相交测试中。分层加速结构可存储在存储器104中。在上文所描述的示例中,加速结构由处理模块118产生,但在其他示例中,加速结构可由在光线跟踪单元102外部的模块产生(例如预计算),并且可存储在存储器104中以供光线跟踪单元102使用。
参考图2中所展示的流程图来描述光线跟踪系统100的操作。图2中所展示的流程图的步骤描述光线的处理,但应理解,可在所述方法中同时处理多于一条光线。在步骤S202中,获得待测试相交的光线的数据。例如,可由处理逻辑108所执行的着色器(例如“光线产生着色器”、最接近的命中着色器或未命中着色器)形成新的光线。新的光线从处理逻辑108传递到处理逻辑接口112以开始遍历光线。
在步骤S204中,将新的光线的数据写入到光线存储装置116中。具体地说,在光线的相交测试期间存储针对光线的三个数据集。三个数据集包括:(i)候选集,其在当前相交测试迭代中在加速结构的遍历期间保持跟踪目前已针对光线识别的最接近相交;(ii)非确证集,其指示在当前相交测试迭代中在加速结构的遍历期间相交可被接受作为所识别相交的最小相交距离;(iii)确证集,其指示能够通过针对光线的所述相交测试找到相交的最大相交距离。
在本文中所描述的示例中,对光线跟踪系统100中的光线的处理包括通过执行一个或多个相交测试迭代来执行光线的相交测试。在图2中所展示的示例中,每个相交测试迭代包括步骤S206至S212。
在步骤S206中,相交测试模块106遍历加速结构以识别光线与图元的最接近相交,所述最接近相交尚未在针对光线的任何先前相交测试迭代中被识别为最接近相交。在步骤S206中,加速结构的遍历不包括任何着色器(例如遍历着色器)的执行。换句话说,步骤S206在着色器评估之前找到光线的最接近相交图元。
在执行步骤S206之前,光线可经由任务调度单元110传递到光线调度器114,所述光线调度器被配置成执行一致性收集。如上文所描述,由光线调度器114执行的一致性收集涉及将光线一起分组到待测试与相同几何形状块(例如加速结构的相同节点或相同图元)的相交的包(或“集合”)中。在一些点处,光线组(即光线包)从光线调度器114传递到相交测试模块106,以使得可针对光线包中的光线执行相交测试。例如,可基于数据包的满度来调度针对加速结构的节点进行相交测试的光线包。例如,可存在可包括在包中的最大光线数量(例如其可等于相交测试模块106可并行处理的光线数量),并且当光线调度器114确定光线包含有最大数量的光线时,则所述光线包从光线调度器114传递到相交测试模块106。作为另一示例,如果包应被发送到相交测试模块106(例如因为其由于光线包已被发送到相交测试模块而已比阈值时间量更长,或者因为相交测试模块106指示其已变为或将变为空闲),则光线调度器114可发送含有最大数量的光线(即使不包括最大光线数量)的光线包。此外,可存在光线调度器114可在任一时间处保持的最大包数量,并且如果光线调度器114确定其当前正保持最大包数量,则可将包(例如含有最大数量的光线的包)从光线调度器114传递到相交测试模块106。
作为步骤S206的部分,相交测试模块106从存储器104提取(即读取)加速结构数据。具体地说,相交测试模块106可提取加速结构的节点的数据,将针对所述数据测试光线包的光线的相交。如果将针对图元测试光线的相交,则相交测试模块106还可从存储器104提取图元数据。此外,作为步骤S206的部分,相交测试模块106从光线存储装置116提取包的光线的光线数据。应注意,在我们描述任务调度单元110和光线调度器114处理“光线”的情况下,应理解,其可处理光线的光线标识符(“光线ID”)。因此,替代将与光线跟踪单元102周围的光线相关联的所有数据携带到任务调度单元110和光线调度器114,将光线的大部分数据存储在光线存储装置116中,并且在调度光线以供处理时所涉及的正是光线ID。当相交测试模块106或处理逻辑108处理光线时,则光线的光线ID用以从光线存储装置提取与光线相关联的更多光线数据。与光线相关联的光线数据可例如包括光线起点、光线方向向量、最小触发距离、最大剔除距离,以及与涉及光线的一个或多个相交有关的数据,例如图元上的相交点的相交距离和重心坐标。与光线相关联的数据还可包括上文所提及以及下文详细描述的三个数据集:非确证集、候选集和确证集。
当相交测试模块106具有光线数据和几何形状数据(例如加速结构或图元数据)时,则相交测试模块执行相交测试以确定光线是否与几何形状相交。用于执行这些相交测试的方法是本领域中已知的,并且这些方法的细节超出了本公开的范围。在图1中示出并且在本文中详细描述的示例中,步骤S206涉及对多条光线并行执行相交测试。例如,相交测试模块106可包括一个或多个单指令多数据(SIMD)处理单元,所述一个或多个单指令多数据处理单元被配置成针对相同几何形状块并行执行针对多条光线的相交测试。在本文中所描述的示例中,相交测试模块106在硬件中实施,例如以使得使用相交测试模块106的固定功能电路系统执行加速结构的遍历。
如果相交测试模块106确定光线与加速结构的节点相交,则将关于相交节点的子节点的信息传回到光线调度器114。光线调度器114将针对相交节点的那些子节点调度针对光线的相交测试。如果光线与叶节点相交,则测试光线与图元(例如三角形图元或程序图元,仅给出两个示例)的相交。如果发现光线与图元相交,则可将此相交的相交距离与一个或多个先前识别的相交进行比较,以便确定是否接受最新找到的光线相交。下文更详细地描述此程序。
针对光线执行步骤S206的结果是,相交测试模块106已:(i)识别出光线与尚未在针对光线的任何先前相交测试迭代中被标识为最接近相交的图元的最接近相交,或(ii)确定不存在针对光线的这类相交。将针对光线(图1中所指示的“完毕光线”)的步骤S206的结果的指示从相交测试模块106传递至任务调度单元110。应注意,步骤S206不涉及执行任何着色器,例如遍历着色器。实际上,相交测试模块106可能并不能够执行着色器程序。在图1中所展示的示例中,着色器程序可由处理逻辑108执行,而不是由相交测试模块106执行。
如上文所描述,在场景中针对与图元的相交测试光线的次序是非确定的。具体地说,在加速结构具有分层树结构的情况下,在于步骤S206中的加速结构的遍历期间,光线可同时存在于分层树结构的多个分支中。在测试光线与场景中的图元的相交的次序中的此非确定性至少部分是归因于光线调度器114所执行的一致性收集。然而,由于在步骤S206中不执行着色器(具体地说,在步骤S206中不执行遍历着色器),因而步骤S206不会引起在执行着色器的次序中的非确定性。可以理解的是,此一致性收集在减少从存储器104提取加速数据的次数方面具有巨大益处,因为每次提取加速数据时,所述一致性都可用于针对光线包而不仅仅是单条光线进行相交测试。还应注意,加速结构通常具有过多加速结构数据以使其全部被片上存储(即在光线跟踪单元102上),因此,当已使用特定加速结构数据块执行相交测试时,所述加速结构数据可能并未永久储存在光线跟踪单元上,因此,如果后续相交测试再次需要所述特定加速结构数据块,则可能需要再次从存储器104提取所述加速结构数据。
任务调度单元110响应于在步骤S206中执行的相交测试的结果而确定将执行哪个着色器。任务调度单元110可将着色器任务发送到处理逻辑108以促使处理逻辑108执行着色器。在步骤S208中,任务调度单元110确定是否将针对所识别相交执行遍历着色器。此确定是基于确定光线在所识别相交处所相交的图元的特性。
例如,第一类型的遍历着色器是任何命中着色器。图元的特性可以是图元是否不透明。在步骤S208中,可确定如果图元并非不透明的,则针对所识别相交执行任何命中着色器。
作为另一示例,第二类型的遍历着色器是相交着色器。图元的特性可以是图元是否是程序图元。在步骤S208中,可确定如果图元是程序图元,则针对所识别相交执行相交着色器。如上文所描述,出于遍历加速结构的目的,将程序图元表示为体积(例如具有简单形状,诸如轴对准边界框)。如果发现光线与表示程序图元的体积相交,则执行相交着色器以便确定光线是否真正与图元相交,并且如果确实如此,则确定相交的细节(例如相交距离和重心坐标)。
程序图元可以是不透明的或并非不透明的。将针对与非不透明程序图元的相交执行的遍历着色器可具有任何命中着色器和相交着色器两者的功能。
如果在步骤S208中确定将针对所识别相交执行遍历着色器,则方法转到步骤S210。
如果在步骤S208中确定将并不针对所识别相交执行遍历着色器,则接受所识别相交,并且完成针对光线的相交测试。所述方法随后转到步骤S216,其中针对所接受的所识别相交执行输出着色器(例如最接近的命中着色器)。
在步骤S210中,处理逻辑108针对所识别相交执行遍历着色器(例如任何命中着色器或相交着色器)。在本文中所描述的示例中,在至少一个相交测试迭代中针对光线的所识别相交执行遍历着色器。
在步骤S212中,执行遍历着色器的结果用以确定光线是否在所识别相交处与图元相交。如果遍历着色器的执行确定光线在所识别相交处并不与图元相交,则方法从步骤S212转到步骤S214。在步骤S214中,更新非确证集、候选集和确证集中的数据以用于下一相交测试迭代。具体地说,如果将在当前相交测试迭代之后执行另一相交测试迭代,则所述方法包括(在步骤S214中)在执行所述另一相交测试迭代之前:(i)将数据从当前相交测试迭代结束时的候选集复制到非确证集中;以及随后将数据从当前相交测试迭代结束时的确证集复制到候选集中。所述方法从步骤S214转回到步骤S206,从而促使针对光线执行另一相交测试迭代。
如果遍历着色器的执行确定光线在所识别相交处与图元相交,则方法从步骤S212转到步骤S216。如上文所描述,在步骤S216中,针对所接受的所识别相交执行输出着色器(例如最接近的命中着色器)。应注意,当针对光线的相交测试完成时,针对光线执行步骤S216。换句话说,当针对光线的相交测试完成时,执行输出着色器以处理针对光线的相交测试的结果。所述输出着色器可以是最接近的命中着色器或未命中着色器。通过执行针对光线的相交测试,针对最近所接受的相交执行最接近的命中着色器。以此方式,最接近的命中着色器可用以确定输出颜色值,并且可在相交测试程序已找到最接近的相交图元之后执行。未命中着色器用以确定系统在发现光线不与场景中的任何图元相交的情况下如何作出反应。
执行输出着色器的结果可用于渲染3D场景的图像。例如,输出着色器的结果可以是表示场景的图像的像素的颜色的像素值。
如果遍历着色器是任何命中着色器,则在步骤S210中,针对所识别相交的任何命中着色器的执行确定:(i)接受所识别相交,以使得在步骤S212中确定光线在所识别相交处与图元相交;或(ii)舍弃所识别相交,以使得在步骤S212中确定光线在所识别相交处不与图元相交。
从上述描述中可以理解,如果在当前相交测试迭代(“第一次迭代”)期间确定(在步骤S212中)将执行另一相交测试迭代(“第二次迭代”),则在步骤S214中,存储在第一次迭代期间所识别的与所识别相交有关的数据以用于第二次迭代中。此存储数据用以避免在第二次迭代中再次识别相同相交。换句话说,当产生另一相交测试迭代时,针对光线存储指示目前已确定的最接近的相交的状态数据(例如在光线存储装置116中),以使得在下一相交测试迭代时,所述相交可被折扣,以使得不会反复找到相同相交。这避免了所述方法可能陷入无限循环的情形。
如上文所描述,在光线的相交测试期间,针对光线存储三个数据集。三个数据集包括:
(i)候选集,其在当前相交测试迭代中在所述加速结构的所述遍历期间保持跟踪目前针对所述光线已识别的所述最接近相交。当找到比当前候选者更接近的有效相交时,更新候选集。候选集可在由不透明和非不透明几何形状两者遍历期间进行更新。候选集也可在步骤S214中进行更新。
(ii)非确证集,其指示在所述当前相交测试迭代中在所述加速结构的所述遍历期间相交可被接受作为所识别相交的最小相交距离。例如,非确证集可存储来自先前相交测试迭代的所识别相交的指示,所述相交不被遍历着色器接受。非确证集用以按次序步进穿过图元-一个迭代寻找最接近图元,如果被拒绝,则下一迭代寻找下一最接近图元,依此类推。这有助于确保着色器次序执行是确定的,即使在光线遍历期间测试光线的相交的次序不是确定的。非确证集类似于搜索范围上的下限,即具有比非确证集中所指示的相交距离更小的相交距离的相交将予以舍弃。非确证集不在加速结构的遍历期间(例如在步骤S206期间)更新,而是在步骤S214中当另一迭代开始时更新,并且被设置成来自先前迭代中的候选集的值。
(iii)确证集,其指示能够通过针对光线的相交测试找到相交的最大相交距离。例如,确证集可存储最接近的所接受命中的指示。所接受命中是:(i)光线与将不执行遍历着色器的图元(例如不透明三角形)的相交,或(ii)遍历着色器的执行已接受所述相交的相交。确证集类似于搜索范围上的上限,即具有比确证集中所指示的相交距离更大的相交距离的相交将被舍弃。通过寻找与将不执行遍历着色器的图元的更接近相交,可在加速结构的遍历期间(例如在步骤S206期间)更新确证集。
相交测试迭代将识别由非确证集指示的相交距离与由确证集(如果存在)指示的相交距离之间的最接近相交,并且将此所识别的最接近相交存储在候选集中。
图3示出光线302r,其可被定义为r=O+TD,其中O是表示光线起点的向量,D是表示光线方向的向量,并且T表示从起点沿光线的距离。图3示出:沿光线302在距光线起点的由非确证数据集指示的距离处的位置(非确证T)304;沿光线302在距光线起点的由候选数据集指示的距离处的位置(候选T)306;以及沿光线302在距光线起点的由确证数据集指示的距离处的位置(确证T)308。在相交测试迭代期间,在特定时间点处展示位置304、306和308。在此特定时间点处,在由非确证集指示的位置304与由确证集指示的位置308之间存在光线上的有效相交范围。如果在此有效相交范围内的此特定时间点处找到光线的相交,则其可以是可接受相交;而如果在此有效相交范围之外的此特定时间点处找到光线的相交,则其不是光线的可接受相交,并且可予以舍弃。位置304、306和308可随着执行相交测试而随时间变化(例如在相交测试迭代中在加速结构的遍历期间,候选集和确证集的位置306和308可变化,并且非确证集、候选集和确证集的所有三个位置304、306和308可在步骤S214中从一个相交测试迭代到下一相交测试迭代变化)。因此,光线302的有效相交范围可在相交测试期间变化。
光线的光线数据包括最小剔除距离和最大剔除距离。最小剔除距离可表示为值Tmin,其中光线(其定义为O+TD)对于小于Tmin的值T无效。最大剔除距离可表示为值Tmax,其中光线(其定义为O+TD)对于大于Tmax的值T无效。值Tmin和Tmax可在产生光线(例如由处理逻辑108所执行的着色器)时进行定义。在针对光线的初始相交测试迭代开始时(即在第一次迭代开始时):(i)光线的最小剔除距离Tmin存储在光线的非确证集中,并且(ii)光线的最大剔除距离Tmax存储在候选集中以及光线的确证集中。
三个数据集(即非确证集、候选集和确证集)中的每个数据集包括:
·指示沿光线的距离的距离指示。这可以表示为值T。如果数据集与相交相关联,则值T表示相交的相交距离。
·数据集的一种类型。所述类型可指示四件事情中的一件事情:
o“无”—这意指数据集同光线与图元的相交无关,即尚未针对所述集找到图元。在“无”类型的情况下,所述集中的距离T仍然有效,并且将取决于如上文所描述的集而设置成Tmin或Tmax。
o“三角形”—这意指数据集确实同光线与图元的相交有关,并且所述图元属于三角形几何形状类型。
o“程序”—这意指数据集确实同光线与图元的相交有关,并且所述图元属于程序几何形状类型。
o“程序部分”—这意指数据集确实同光线与图元的相交有关,并且所述图元是程序图元,其中光线的有效范围开始于框内。此类型用以处理下文更详细描述的边缘情况。
·指示相关联图元是否不透明的不透明性指示。当数据集同光线与图元的相交有关时,不透明性指示指示图元的不透明性。仅当类型不等于“无”时,不透明性指示才有效。
·指标集。当数据集同光线与图元的相交有关时,这些指标(例如三个指标)可用作相交图元的唯一标识符。仅当类型不等于“无”时,指标集才有效。这些指标可包括:
o实例索引。几何形状的一个或多个实例可放置在待渲染的场景内。实例索引指示与相交图元作为其部分的几何形状的实例相关联的ID。作为示例,Vulkan规范陈述,场景中可存在几何形状的最多224-1个实例,因此实例索引可具有24位,以使得场景内的几何形状的每个实例可具有唯一实例索引。
o几何形状索引。几何形状的实例可包括几何形状的一个或多个项目。几何形状索引指示与相交图元作为其部分的几何形状的项目相关联的ID。作为示例,Vulkan规范陈述,实例内可存在几何形状的最多224-1个项目,因此几何形状索引可具有24位,以使得实例内的几何形状的每个项目可具有唯一几何形状索引。
o图元索引。几何形状的项目可包括一个或多个图元。图元索引指示与相交图元相关联的ID。作为示例,Vulkan规范陈述,几何形状的项目内可存在最多229-1个图元,因此图元索引可具有29位,以使得几何形状的项目内的每个图元可具有唯一图元索引。
总结上述内容,数据集中的每个数据集(非确证集、候选集和确证集)包括:沿光线的距离的指示,并且如果数据集同光线与特定图元的相交有关,则数据集包括:(i)特定图元的类型的指示,(ii)特定图元的不透明性的指示,以及(iii)与特定图元相关联的一个或多个指标,其中一个或多个指标包括与特定图元相关联的实例索引、几何形状索引以及图元索引。数据集可包括其他数据,诸如相交点的重心坐标以及相交是与图元的正面侧还是背面侧的指示。
在相交测试迭代中,在加速结构的遍历期间,响应于找到光线与图元的相交:(a)如果找到的相交比由候选集中的数据指示的当前最接近相交更接近,则候选集被更新成与找到的相交相关联,并且(b)在以下情况下将确证集更新成与找到的相交相关联:(i)找到的相交比由确证集中的数据指示的最大相交距离更接近,(ii)图元是不透明的,以及(iii)图元不是程序图元。应注意,候选集可通过不透明和非不透明几何形状两者来更新。
图4是针对图元执行针对光线的相交测试的方法的流程图,所述图示出光线跟踪单元如何确定是否响应于针对光线找到与图元的相交而更新候选集中的光线数据。可执行类似方法以确定是否响应于找到光线与具有“三角形”类型的不透明图元的相交而更新确证集中的光线数据。图4中所展示的方法可以是步骤S206的部分。图4中所展示的方法可由相交测试模块106实施。
所述方法在S402处开始。在步骤S404中,相交测试模块106执行相交测试以确定光线是否与图元相交。如果光线确实与图元相交,则步骤S404的相交测试涉及确定沿相交发生的光线的相交距离(例如由T值Tint指示)。如上文所描述,用于执行此相交测试的方法是本领域中已知的,并且可在相交测试模块106中的固定功能电路系统中实施。在步骤S406中,确定步骤S404中的相交测试是否确定光线与图元相交。如果确定光线不与图元相交,则方法从步骤S406转到S424,此时图4中所展示的方法结束。然而,如果确定光线与图元相交,则方法从步骤S406转到步骤S408。
在步骤S408中,从光线存储装置读取存储在候选集(此处称为TCD)中的T值。在步骤S410中,比较Tint和TCD的值,从而执行距离检查。在步骤S412中,确定相交是否已通过距离检查。具体地说,如果光线与图元的相交处于沿光线比候选集中指示的位置更远的位置(即如果Tint>TCD),则步骤S404中找到的相交将不会更新候选集(即距离检查未通过),因此方法转到S424,以使得图4的方法结束。然而,如果光线与图元的相交不处于沿光线比候选集中指示的位置更远的位置(即如果Tint≤TCD),则步骤S404中找到的相交可更新候选集(即距离检查通过),因此方法转到步骤S414。
在步骤S414中,确定是否需要平局打破。具体地说,如果光线与图元的相交处于沿光线与候选集中指示的位置相同的距离的位置(即如果Tint=TCD),则平局出现。如果不执行平局打破,即如果光线与图元的相交处于沿光线比候选集中指示的位置更不远的位置(即如果Tint<TCD),则方法从步骤S414转到步骤S416。在步骤S416中,更新候选集以存储与步骤S404中找到的相交有关的数据。在步骤S416之后,方法转到S424以使得图4的方法结束。
如果将执行平局打破,即如果光线与图元的相交处于沿光线与候选集中指示的位置相同的距离(即如果Tint=TCD),则方法从步骤S414转到步骤S418。本文中所描述的方法确保着色器执行次序是确定的,即使当对于光线的多个相交(例如对于光线与多个图元的相交)的相交距离相等时。具体地说,相等相交距离使用相应图元的唯一图元标识符来解析,以使得可使用唯一图元标识符对图元进行排序。例如,图元的唯一图元标识符可以是由三个值组成的复合值:图元的图元索引、几何形状索引和实例索引。这些值一起而不是单独提供唯一标识符。因此,在步骤S418中,针对所讨论的两个图元(即在当前相交迭代中已发现与光线相交的图元,以及与候选集相关联的图元)读取三个指标(图元索引、几何形状索引和实例索引)。
在步骤S420中,执行平局打破程序,从而比较所讨论的两个图元的指标。三个ID可被视为较长整数,其为三个字段的串联,例如instance_Index|geometry_Index|primitive_Index。三个字段的串联对于场景中的图元是唯一的,并且因此,三个字段的串联的结果可用作图元的唯一图元标识符。在其他示例中,三个字段可以不同次序串联,或可以某一其他方式(例如使用除串联之外的操作)进行组合以确定唯一图元标识符。唯一图元标识符可如同任何其他整数一样进行比较以解析哪个图元更接近。作为示例,对于沿光线具有相等相交距离的两个图元,较小图元标识符可被视为表示“更近者”图元。在另一示例中,对于沿光线具有相等相交距离的两个图元,较大图元标识符可被视为表示“更近者”图元。不管使用哪个示例,只要一致地使用,由于图元标识符是唯一的,因而无论相交的次序如何,都一致地找到相同图元作为两个图元的“更近者”。这维持了着色器执行的确定次序。这是着色器执行的次序的确定性,而不是上文所提及的光线跟踪标准所要求的特定次序本身。
总结平局打破程序,如果在加速结构的遍历期间,响应于在等于光线与另一图元的先前相交的相交距离(其中先前相交由候选集中的数据指示)的相交距离处找到光线与特定图元的相交:(i)将特定图元的唯一图元标识符与另一图元的唯一图元标识符进行比较,(ii)基于唯一图元标识符的比较的结果来确定是否将找到的相交视为比先前相交更接近。如上文所提及,图元的唯一图元标识符是基于一个或多个指标。具体地说,可使用与特定图元相关联的实例索引、几何形状索引以及图元索引的串联来确定特定图元的唯一标识符,并且可使用与另一图元相关联的实例索引、几何形状索引以及图元索引的串联来确定另一图元的唯一标识符。
步骤S418涉及从光线存储装置116读取值(例如候选集的实例索引、几何形状索引和图元索引的值),以便执行对图元标识符的比较。读取这些值可能是高带宽操作。因此,在此方法中,这些值被读取并且用以仅在确定(在步骤S414中)需要平局打破时(即当新找到的相交的相交距离等于存储在候选集中的相交距离时)形成唯一图元标识符。
在步骤S422中,确定平局打破程序是否已通过。如果平局打破程序通过(例如,如果在当前相交测试迭代中已找到的相交图元的唯一图元标识符小于(或在替代示例中大于)根据从候选集中读取的指标形成的唯一图元标识符),则方法从步骤S422转到步骤S416。如上文所描述,在步骤S416中,更新候选集以存储与在步骤S404中找到的相交有关的数据。在步骤S416之后,方法转到S424以使得图4的方法结束。然而,如果平局打破程序未通过(例如,如果在当前相交测试迭代中已找到的相交图元的唯一图元标识符大于(或在替代示例中小于)根据从候选集中读取的指标形成的唯一图元标识符),则方法从步骤S422转到S424,以使得图4的方法在不更新候选集中的数据的情况下结束。
步骤S408到S422可由图元更新模块执行,所述图元更新模块可以是(或可以不是)相交测试模块106的部分。图元更新模块执行步骤S408至S422以确定是否应保存相交。上文参考图4描述的方法用于当光线在相交距离(Tint)处与在范围TNCM<Tint<TCD内的图元相交时,在步骤S206中在加速结构的遍历期间更新候选集。类似方法可用以当光线在相交距离(Tint)处与在范围TNCM<Tint<TCM内的不透明三角形相交时,在步骤S206中在加速结构的遍历期间更新确证集。
图5展示示出在三个相交测试迭代序列内,非确证相交距离、候选相交距离和确证相交距离在七个不同时间点处如何变化的示例。在此示例中,光线与五个图元(标记为A、B、C、D和E)集相交。这些图元中的全部五个都是三角形图元(即不是程序图元)。五个图元的子集是不透明的,而其他图元并非不透明的。具体地说,图元A、D和E是不透明三角形(在图5中以实竖直线展示),而图元B和C是非不透明三角形(在图5中以虚竖直线展示)。如上文所描述,可响应于找到具有非不透明三角形的光线的相交,而不是响应于找到具有不透明三角形的光线的相交而执行任何命中着色器。在图5中所展示的示例中,光线由水平箭头表示。从光线起点看,光线以所述次序与图元A、B、C、D和E相交。
图5的顶部图解(图解1)展示当最初加载时的光线,所述光线具有由产生光线的着色器(例如光线产生着色器或最接近的命中着色器或未命中着色器)提供的起点、方向、最小剔除距离(Tmin)和最大剔除距离(Tmax)的值。应注意,由最小剔除距离(Tmin)指示的距光线起点的距离在图元A与B之间的位置处。由最大剔除距离(Tmax)指示的距光线起点的距离在图元D与E之间的位置处。
图5的图解2展示如何基于第一相交测试迭代的值Tmin和Tmax来初始化候选集、非确证集和确证集(在步骤S204中)。具体地说,将值Tmin加载到非确证集(作为TNCM)中,并且将值Tmax加载到候选集(作为TCD)以及确证集(作为TCM)中。在此初始点处(即在已执行第一相交测试迭代之前),所有三个数据集最初将具有“无”类型,其指示尚不存在相关联图元,并且所述数据集仅在此点处具有命中距离(T)。确证和候选数据集被加载成彼此最初相同。随后执行相交测试迭代(例如在步骤S206至S212中)以找到光线与图元中的一个图元的最接近相交。
在此示例中,第一相交测试迭代发现(在步骤S206中)最接近图元是图元B。虽然图元A比图元B更接近,但图元A具有小于非确证集(TNCM)中的距离的相交距离,因此不予考虑。图5的图解3展示在第一相交测试迭代结束时三个集中的距离(TNCM、TCD和TCM)。具体地说,在相交测试迭代期间,值TNCM不更新,因此其保持等于Tmin;值TCD是图元B的相交距离(TB),因为图元B是发现与光线相交的最接近图元;并且值TCM是图元D的相交距离(TD),因为图元D是发现与光线相交的最接近的不透明三角形。图元B是非不透明的,因此针对光线与图元B的相交执行遍历着色器(具体地说是任何命中着色器)(在步骤S210中)。如果任何命中着色器接受此相交,则方法转到步骤S216,并且随后将针对光线与图元B的相交执行输出着色器(具体地说是最接近的命中着色器),并且这将是对此光线的处理的结束。然而,在图5中所展示的示例中,针对图元B的光线的任何命中着色器不接受相交,因此将执行另一相交测试迭代。
在步骤S214中,将候选数据集(其同与图元B的相交有关)复制到非确证数据集,并且将确证数据集(其同与图元D的相交有关)复制到候选数据集。因此,如图5的图解4中所展示,将值TNCM更新成图元B的相交距离(TB),因为这是图解3中的候选集中的值;将值TCD更新成图元D的相交距离(TD),因为这是图解3中的确证集中的值;并且值TCM保持与图解3相同,因此所述值仍然是图元D的相交距离(TD)。随后执行第二相交测试迭代(例如在步骤S206至S212中)。
在此示例中,第二相交测试迭代发现(在步骤S206中)最接近图元(尚未在先前相交测试迭代中被识别)是图元C。图元A比图元C更接近,但图元A具有小于非确证集中的距离(TNCM)的相交距离,因此不予考虑。此外,由于非确证集同与图元B的相交有关,因而当在第二相交测试迭代中考虑与图元B的相交时,平局打破程序将确保在第二相交测试迭代中不会再次找到图元B。图5的图解5展示在第二相交测试迭代结束时三个集中的距离(TNCM、TCD和TCM)。具体地说,值TNCM不在相交测试迭代期间更新,因此其保持等于TB;值TCD是图元C的相交距离(TC),因为图元C是发现与光线相交(其尚未在先前相交测试迭代中被识别)的最接近图元;并且值TCM仍然是图元D的相交距离(TD),因为图元D是发现与光线相交的最接近的不透明三角形。图元C是非不透明的,因此针对光线与图元C的相交执行遍历着色器(具体地说是任何命中着色器)(在步骤S210中)。如果任何命中着色器接受此相交,则方法转到步骤S216,并且随后将针对光线与图元C的相交执行输出着色器(具体地说是最接近的命中着色器),并且这将是对此光线的处理的结束。然而,在图5中所展示的示例中,针对图元C的光线的任何命中着色器不接受相交,因此将执行另一相交测试迭代。
在步骤S214中,将候选数据集(其同与图元C的相交有关)复制到非确证数据集,并且将确证数据集(其同与图元D的相交有关)复制到候选数据集。因此,如图5的图解6中所展示,将值TNCM更新成图元C的相交距离(TC),因为这是图解5中的候选集中的值;将值TCD更新成图元D的相交距离(TD),因为这是图解5中的确证集中的值;并且值TCM保持与图解5相同,因此所述值仍然是图元D的相交距离(TD)。随后执行第三相交测试迭代(例如在步骤S206至S212中)。
在此示例中,第三相交测试迭代发现(在步骤S206中)最接近图元(尚未在先前相交测试迭代中被识别)是图元D。图元A和B比图元D更接近,但图元A和B具有小于非确证集中的距离(TNCM)的相交距离,因此不予考虑。此外,由于非确证集同与图元C的相交有关,因而当在第三相交测试迭代中考虑与图元C的相交时,平局打破程序将确保在第三相交测试迭代中不会再次找到图元C。图5的图解7展示在第三相交测试迭代结束时三个集中的距离(TNCM、TCD和TCM)。具体地说,值TNCM不在相交测试迭代期间更新,因此其保持等于TC;值TCD是图元D的相交距离(TD),因为图元D是发现与光线相交(其尚未在先前相交测试迭代中被识别)的最接近图元;并且值TCM仍然是图元D的相交距离(TD),因为图元D是发现与光线相交的最接近的不透明三角形。图元D是不透明的,因此不执行遍历着色器。所述方法转到步骤S216,随后将针对光线与图元D的相交执行输出着色器(具体地说是最接近命中着色器),并且这是针对此光线的处理的结束。
需要谨慎处理程序图元。图6示出与程序图元604相交的光线602。如上文所描述,出于由相交测试模块106执行的相交测试的目的,将程序图元表示为体积(例如轴对准边界框(AABB))。当确定光线与程序图元相交时,相交测试模块则会将相交距离设置成最接近位置(即光线上具有最小T值的位置),在所述位置处,光线与表示程序图元的体积相交。例如,相交测试模块106将识别光线602与程序图元604之间在位置606处的相交。换句话说,光线与程序图元的所识别相交在为沿光线的最小距离的位置处,在所述位置处,光线有效,并且光线与表示程序图元的体积相交。将针对相交执行遍历着色器(具体地说是相交着色器),以确定光线602与程序图元604之间的确证相交位置(608)。相交着色器可确定在程序图元内的任何点处的确证相交位置608。在一些示例中,相交着色器可确定光线不与程序图元相交,以使得未识别到确证相交位置。
当光线与程序图元相交并且相交着色器识别到确证相交时,执行另一相交测试迭代,因为在AABB的前部(在位置606处)与确证相交位置(在位置608处)之间的位置处有可能存在光线与不同图元的相交。因此,执行另一相交测试迭代以检查是否是这种情况。
针对所识别相交(例如在位置606处)的相交着色器的执行可确定光线在表示与所识别相交的位置(例如606)不同的程序图元604的体积内的另一位置(例如608)处与图元相交。在此情况下,可考虑相交着色器以确定光线602在所识别相交处(在位置606处)不与图元604相交。此外,针对所识别相交(例如在位置606处)的相交着色器的执行可确定光线不与程序图元604的体积内的图元相交,以使得光线在所识别相交处不与图元相交。在这两种情况下,遍历着色器(即相交着色器)已确定光线在所识别相交处不与图元相交,以使得将执行另一相交测试迭代。在一些示例中,在执行相交着色器之后执行另一相交测试迭代,而不管相交着色器的结果如何。在其他示例中,可执行检查以查看相交着色器的执行是否已准确识别在所识别相交(606)的位置处(例如在程序图元604的AABB的前边缘上的右侧)的相交。如果此检查确定相交着色器已在所识别相交的位置(606)处准确识别相交,则可能不执行另一相交测试迭代,而如果检查确定相交着色器尚未在所识别相交的位置(606)处准确识别相交,则执行另一相交测试迭代。
图7示出与程序图元704相交的光线702。光线702首先在程序图元的正面上的位置706处与程序图元704相交。在图7中所展示的示例中,非确证数据集存储对应于在程序图元704内的光线702上的位置708的相交距离(TNCM)。对非确证数据集执行的简单距离检查可拒绝具有比TNCM更小的T值的相交,因此即使光线有可能与程序图元704有效相交,也存在程序图元(诸如704)可能被拒绝的风险(因为程序图元704的AABB内的一些位置具有大于TNCM的T值)。如下文所描述,我们可以使用特殊情况来避免使用“程序部分”图元类型时的此问题。然而,如果这些程序图元未被拒绝,则在图7中所展示的情形下,如果不加谨慎,则值TNCM有可能减小。为了避免相交测试迭代卡在无限循环中的可能性,值TNCM不应在光线处理内的任何点处减小。具体地说,相交测试模块106将报告光线702与程序图元704之间在框前方的位置706处的相交的相交距离,因此有可能命中T值小于TNCM的程序图元。如果TNCM在框内部,则这仍可能是有效相交。
在图7中所展示的图解中,如果在第一相交测试迭代中识别到程序图元704,并且如果在第一相交测试迭代结束时用候选集中的数据更新TNCM,则这将减小值TNCM。为了避免这种情况,使用“程序部分”图元类型。如上文所描述,三个数据集(候选集、非确证集和确证集)具有“类型”指示,并且这可以被设置成“程序部分”。
在此情形下,可在距离检查之前引入某一锁定(例如在步骤S408与S410之间)。在Tint处,在程序图元的正面处(例如在位置706处)识别到与程序图元的当前相交。针对非确证集读取值TNCM和类型指示(Type_NCM)。如果[(Tint<TNCM)与(Type_NCM为“无”或Type_NCM为“程序部分”)],则发生两件事情:(i)值Tint被设置成等于值TNCM,以及(ii)当前相交的图元的类型被设置成“程序部分”。如果在加速结构的遍历期间,(i)找到与程序图元的相交,并且(ii)在沿光线的所述最小相交距离处的位置在程序图元内,在所述位置处,在当前相交测试迭代中在加速结构的遍历期间,相交可被接受作为所识别相交;则确定在加速结构的遍历期间,找到的相交在沿光线的所述最小相交距离处。
此操作的效果是,对于图7中所展示的情形,在第一相交测试迭代时,相交距离被锁定到TNCM(在位置708处),而不是在位置706处被找到。如果这产生具有相同相交距离(TNCM)的多个相交,则所述相交将使用上文所描述的平局打破程序以确定方式进行分选,其中基于与相交相关联的图元的唯一图元标识符来对相交进行分选。在于第一相交测试迭代之后的迭代时,也锁定相交距离以维持相同分选次序,其中先前相交具有类型“程序部分”。
图8a和图8b展示示例以示出在四次相交测试迭代序列内,非确证相交距离、候选相交距离和确证相交距离如何在十个不同时间点处变化。在此示例中,光线与三个部分重叠程序图元集(其在图8a和图8b中以框表示,标记为A、B和C)相交。如上文所描述,可响应于找到光线与程序图元的相交而执行相交着色器。程序图元是否不透明将不会改变控制流;其将仅影响所执行的相交着色器的行为。在图8a和图8b中所展示的示例中,光线由水平箭头表示。
图8a的顶部图解(图解1)展示当最初加载时的光线,所述光线具有由产生光线的着色器(例如光线产生着色器或最接近的命中着色器或未命中着色器)提供的起点、方向、最小剔除距离(Tmin)和最大剔除距离(Tmax)的值。应注意,由最小剔除距离(Tmin)指示的距光线起点的距离在程序图元A的体积内的位置处,但不在程序图元B和C的体积内。由最大剔除距离指示的距光线起点的距离(Tmax)在程序图元C的体积内的位置处,但不在程序图元A和B的体积内。
图8a的图解2展示如何基于第一相交测试迭代的值Tmin和Tmax来初始化候选集、非确证集和确证集(在步骤S204中)。具体地说,将值Tmin加载到非确证集(作为TNCM)中,并且将值Tmax加载到候选集(作为TCD)以及确证集(作为TCM)中。在此初始点处(即在已执行第一相交测试迭代之前),所有三个数据集最初将具有“无”类型,其指示尚不存在相关联图元,并且所述数据集仅在此点处具有命中距离(T)。确证和候选数据集被加载成彼此最初相同。随后执行相交测试迭代(例如在步骤S206至S212中)以找到光线与图元中的一个图元的最接近相交。
在此示例中,第一相交测试迭代发现(在步骤S206中)最接近图元是程序图元A。值TNCM表示在表示程序图元A的体积内的位置,因此光线与图元A相交的相交距离被设置成等于TNCM。图8a的图解3展示在第一相交测试迭代的步骤S206中在加速结构的遍历结束时的三个集中的距离(TNCM、TCD和TCM)。具体地说,在加速结构的此遍历期间,值TNCM不更新,因此所述值保持等于Tmin;值TCD已被锁定成等于TNCM(即等于Tmin);并且尚未发现光线与任何不透明三角形相交,因此在加速结构的此遍历期间,值TCM不更新,因此所述值保持等于Tmax。图元A是程序图元,因此执行遍历着色器(例如,如果程序图元A不透明,则执行相交着色器;或如果程序图元A并非不透明,则执行具有相交着色器与任何命中着色器的组合功能的着色器)。
在图8a中所展示的示例中,针对光线与程序图元A的相交执行相交着色器确证了在全部三个程序图元A、B和C内的位置处的相交。多个相交(或没有相交)有可能可由相交着色器确证,但最后一个确证相交(如果存在)将保持在相交着色器的执行结束时与确证集相关联。图8a的图解4展示在第一相交测试迭代结束时(即在针对图元A执行相交着色器之后)三个集中的距离(TNCM、TCD和TCM)。具体地说,值TNCM和TCD不通过执行相交着色器来更新,因此所述值保持与在图8a的图解3中相同;但值TCM通过执行相交着色器来更新。
在步骤S214中,将候选数据集复制到非确证数据集,并且将确证数据集复制到候选数据集。因此,如图8a的图解5中所展示,值TNCM仍然等于Tmin,并且值TCD被更新成与通过针对图元A执行相交着色器所找到的确证相交距离相同。随后执行第二相交测试迭代(例如在步骤S206至S212中)。
在此示例中,第二相交测试迭代发现(在步骤S206中)最接近图元(其尚未在先前相交测试迭代中被识别)是程序图元B。图元A比图元B更接近,但由于非确证集同与图元A的相交有关,因而当在第二相交测试迭代中考虑与图元A的相交时,平局打破程序将确保在第二相交测试迭代中不会再次找到图元A。图8b的图解6展示在第二相交测试迭代的步骤S206中的加速结构的遍历结束时三个集中的距离(TNCM、TCD和TCM)。具体地说,值TNCM在加速结构的此遍历期间不更新,因此所述值保持等于Tmin;值TCD已被设置成在光线与表示程序图元B的体积相交的第一位置处(即在图元B的正面上);并且未发现光线与任何不透明三角形相交,因此在加速结构的此遍历期间,值TCM不更新,因此所述值保持其在图解5中的位置。图元B是程序图元,因此执行遍历着色器(例如,如果程序图元B不透明,则执行相交着色器;或如果程序图元B并非不透明,则执行具有相交着色器与任何命中着色器的组合功能的着色器)。
在图8b中所展示的示例中,针对光线与程序图元B的相交的相交着色器的执行确证了在比先前确证的相交点更接近于光线起点的位置处的相交。多个相交(或没有相交)有可能可由相交着色器确证,但最后一个确证相交(如果存在)将保持在相交着色器的执行结束时与确证集相关联。图8b的图解7展示在第二相交测试迭代结束时(即在针对图元B执行相交着色器之后)三个集中的距离(TNCM、TCD和TCM)。具体地说,值TNCM和TCD不通过执行相交着色器来更新,因此所述值保持与在图8b的图解6中相同;但值TCM通过执行相交着色器来更新。
在步骤S214中,将候选数据集复制到非确证数据集,并且将确证数据集复制到候选数据集。因此,如图8b的图解8中所展示,值TNCM被设置成在图元B的正面处,并且值TCD被更新成与通过针对图元B执行相交着色器所找到的确证相交距离相同。随后执行第三相交测试迭代(例如在步骤S206至S212中)。
在此示例中,第三相交测试迭代发现(在步骤S206中)最接近图元(其尚未在先前相交测试迭代中被识别)是程序图元C。图元A比图元C更接近,但与图元A的相交距离小于TNCM,因此在第三相交测试迭代中在加速结构的遍历中忽略图元A。图元B比图元C更接近,但由于非确证集同与图元B的相交有关,因而当在第三相交测试迭代中考虑与图元B的相交时,平局打破程序将确保在第三相交测试迭代中不会再次找到图元B。图8b的图解9展示在第三相交测试迭代的步骤S206中的加速结构的遍历结束时三个集中的距离(TNCM、TCD和TCM)。具体地说,值TNCM在加速结构的此遍历期间不更新,因此所述值保持被设置成在图元B的正面处;值TCD已被设置成在光线与表示程序图元C的体积相交的第一位置处(即在图元C的正面上);并且未发现光线与任何不透明三角形相交,因此在加速结构的此遍历期间,值TCM不更新,因此所述值保持其在图解8中的位置。图元C是程序图元,因此执行遍历着色器(例如,如果程序图元C不透明,则执行相交着色器;或如果程序图元C并非不透明,则执行具有相交着色器与任何命中着色器的组合功能的着色器)。
在图8b中所展示的示例中,针对光线与程序图元C的相交的相交着色器的执行不确证相交。由此,针对光线与程序图元C的相交的相交着色器的执行不改变来自图8b的图解9中所展示的距离(TNCM、TCD和TCM)中的任何距离的值。
在步骤S214中,将候选数据集复制到非确证数据集,并且将确证数据集复制到候选数据集。因此,如图8b的图解10中所展示,值TNCM被设置成在图元C的正面处,并且值TCD被更新成与确证相交距离TCM(其通过针对图元B执行相交着色器来找到)相同。
TNCM与TCM之间仍然有可能发生另一相交,因此执行第四相交测试迭代(例如在步骤S206至S212中)。然而,在此示例中,第四相交测试迭代未找到TNCM与TCM之间的任何相交。响应于确定尚未在第四迭代期间识别到相交,针对最后一个确证相交(在图元B上)执行最接近命中着色器。
可了解,上文所描述的示例允许加速结构的非确定遍历,这可以带来益处,例如在提高处理效率以及减少从存储器中提取数据的次数(这可以减少光线跟踪系统的延迟和功耗)方面。在实现这一点的同时,仍然确保执行着色器(包括遍历着色器)的次序是确定的。
图9展示可在其中实施本文中所描述的光线跟踪系统的计算机系统。计算机系统包括CPU 902、GPU 904、存储器906和其他装置914,诸如显示器916、扬声器918和相机922。光线跟踪单元910(对应于光线跟踪单元102)在GPU 904以及神经网络加速器(NNA)911上实施。在其他示例中,光线跟踪单元910可以在CPU 902上或在NNA 911内实施,或作为计算机系统中的单独处理单元实施。计算机系统的部件可经由通信总线920彼此进行通信。存储装置912(对应于存储器104)被实施为存储器906的部分。
图1的光线跟踪系统展示为包括数个功能块。这仅仅是示意性的,并且并不旨在限定此类实体的不同逻辑元件之间的严格划分。每个功能块可以任何合适的方式提供。应理解,本文中描述为由光线跟踪系统形成的中间值不需要由光线跟踪系统在任何时间点处以物理方式产生,并且可只表示方便描述由光线跟踪系统在其输入与输出之间执行的处理的逻辑值。
光线跟踪单元,并且确切地说,本文中所描述的相交测试模块可在集成电路上以硬件体现。本文中所描述的光线跟踪单元可被配置成执行本文中所描述的方法中的任一种方法。一般来讲,上文所描述的功能、方法、技术或部件中的任一者可在软件、固件、硬件(例如固定逻辑电路系统)或其任何组合中实施。本文中可以使用术语“模块”、“功能”、“部件”、“元件”、“单元”、“块”和“逻辑”来大体地表示软件、固件、硬件或它们的任何组合。在软件具体实施的情况下,模块、功能、部件、元件、单元、块或逻辑表示程序代码,所述程序码当在处理器上执行时执行指定任务。本文中描述的算法和方法可以由执行代码的一个或多个处理器执行,所述代码促使处理器执行算法/方法。计算机可读存储介质的示例包括随机存取存储器(RAM)、只读存储器(ROM)、光盘、闪存存储器、硬盘存储器以及可以使用磁性、光学和其他技术来存储指令或其他数据并且可以由机器存取的其他存储器装置。
如本文中所使用的术语计算机程序代码和计算机可读指令是指用于处理器的任何种类的可执行代码,包括以机器语言、解译语言或脚本语言表达的代码。可执行代码包含二进制代码、机器代码、字节代码、定义集成电路的代码(诸如硬件描述语言或网表),以及以例如C、Java或OpenCL的编程语言码表达的代码。可执行代码可以是例如任何种类的软件、固件、脚本、模块或库,当在虚拟机或其他软件环境中被适当地执行、处理、解译、编译、执行时,所述软件、固件、脚本、模块或库促使支持可执行代码的计算机系统的处理器执行由代码指定的任务。
处理器、计算机或计算机系统可以是任何种类的装置、机器或专用电路,或其具有处理能力以使得其可执行指令的集合或部分。处理器可以是或包括任何种类的通用或专用处理器,诸如CPU、GPU、NNA、片上系统、状态机、媒体处理器、专用集成电路(ASIC)、可编程逻辑阵列、现场可编程门阵列(FPGA)等。计算机或计算机系统可包括一个或多个处理器。
本发明还意图涵盖限定如本文中所描述的硬件的配置的软件,诸如HDL(硬件描述语言)软件,如用于设计集成电路或用于配置可编程芯片以实施所要功能。也就是说,可以提供一种其上编码有呈集成电路定义数据集形式的计算机可读程序代码的计算机可读存储介质,当在集成电路制造系统中处理(即运行)时,所述计算机可读程序代码将系统配置成制造被配置成执行本文中所描述的方法中的任一种方法的光线跟踪单元,或制造包括本文中所描述的任何设备的光线跟踪单元。集成电路定义数据集可以是例如集成电路描述。
因此,可以提供一种在集成电路制造系统处制造如本文中所描述的光线跟踪单元的方法。此外,可提供一种集成电路定义数据集,当在集成电路制造系统中处理时,所述集成电路定义数据集促使制造光线跟踪系统的方法得以执行。
集成电路定义数据集可以呈计算机代码的形式,例如作为网表,用于配置可编程芯片的代码,作为定义适合于在集成电路中以任何级别制造的硬件描述语言,包括作为寄存器传输级(RTL)代码,作为高级电路表示法(诸如Verilog或VHDL),以及作为低级电路表示法(诸如OASIS(RTM)和GDSII)。在逻辑上定义适合于在集成电路中制造的硬件的更高级表示法(诸如RTL)可以在计算机系统处进行处理,所述计算机系统被配置成用于在软件环境的上下文中产生集成电路的制造定义,包括电路元件的定义以及用于组合这些元件以便产生由所述表示法如此定义的集成电路的制造定义的规则。如通常使用软件在计算机系统处执行以便定义机器的情况一样,可能需要一个或多个中间用户步骤(例如提供命令、变量等),以便将计算机系统配置成用于产生集成电路的制造定义,以执行定义集成电路以便产生集成电路的制造定义的代码。
现在将针对图10来描述在集成电路制造系统处处理集成电路定义数据集以便将系统配置成制造光线跟踪单元的示例。
图10展示集成电路(IC)制造系统1002的示例,所述集成电路制造系统被配置成制造如本文中的示例中的任一示例中所描述的光线跟踪单元。具体地说,IC制造系统1002包括布局处理系统1004和集成电路产生系统1006。IC制造系统1002被配置成接收IC定义数据集(例如定义如本文中的示例中的任一示例中所描述的光线跟踪单元),处理IC定义数据集,并且根据IC定义数据集(例如其体现如本文中的示例中的任一示例中所描述的光线跟踪单元)来产生IC。对IC定义数据集的处理将IC制造系统1002配置成制造体现如本文中的示例中的任一示例中所描述的光线跟踪单元的集成电路。
布局处理系统1004被配置为接收和处理IC定义数据集以确定电路布局。根据IC定义数据集确定电路布局的方法在本领域中是已知的,并且例如可以涉及合成RTL代码以确定待生成的电路的门级表示,例如就逻辑部件(例如,NAND、NOR、AND、OR、MUX和FLIP-FLOP部件)而言。通过确定逻辑部件的位置信息,可以根据电路的门级表示来确定电路布局。这可以自动完成或者在用户参与下完成,以便优化电路布局。当布局处理系统1004已经确定电路布局时,其可将电路布局定义输出到IC生成系统1006。电路布局定义可以是例如电路布局描述。
如本领域中已知的,IC生成系统1006根据电路布局定义来生成IC。例如,IC生成系统1006可实施生成IC的半导体装置制造工艺,该半导体装置制造工艺可涉及光刻和化学处理步骤的多步骤序列,在此期间,在由半导体材料制成的晶片上逐渐形成电子电路。电路布局定义可呈掩模的形式,掩模可在光刻工艺中用于根据电路定义来生成IC。替代地,提供给IC生成系统1006的电路布局定义可呈计算机可读代码的形式,IC生成系统1006可使用该计算机可读代码来形成用于生成IC的合适的掩模。
由IC制造系统1002执行的不同过程可全部在一个位置例如由一方来实施。替代地,IC制造系统1002可以是分布式系统,使得一些过程可以在不同位置执行,并且可以由不同方来执行。例如,以下阶段中的一些可以在不同位置以及/或者由不同方来执行:(i)合成表示IC定义数据集的RTL代码,以形成待生成的电路的门级表示;(ii)基于门级表示来生成电路布局;(iii)根据电路布局来形成掩模;以及(iv)使用掩模来制造集成电路。
在其他示例中,在集成电路制造系统处对集成电路定义数据集的处理可将系统配置成在不处理IC定义数据集以便确定电路布局的情况下制造光线跟踪单元。举例来说,集成电路定义数据集可定义例如FPGA的可重新配置处理器的配置,并且对所述数据集的处理可将IC制造系统配置成(例如通过将配置数据加载到FPGA)产生具有所述定义配置的可重新配置处理器。
在一些实施方案中,当在集成电路制造系统中处理时,集成电路制造定义数据集可促使集成电路制造系统产生如本文中所描述的装置。例如,通过集成电路制造定义数据集,以上文针对图10描述的方式对集成电路制造系统的配置可促使如本文中所描述的装置得以制造。
在一些示例中,集成电路定义数据集可包括在于数据集处定义的硬件上运行的软件,或与在数据集处定义的硬件组合运行的软件。在图10中所展示的示例中,IC产生系统还可由集成电路定义数据集配置成在制造集成电路时,根据在集成电路定义数据集处定义的程序代码将固件加载到所述集成电路上,或另外向程序代码提供集成电路以供与集成电路一起使用。
当与已知具体实施相比时,在本申请中阐述的概念在装置、设备、模块和/或系统中(以及在本文中实施的方法中)的具体实施可产生性能改善。性能改善可包括计算性能提高、延迟减少、处理量增加和/或功耗减少中的一者或多者。在制造这类装置、设备、模块和系统(例如在集成电路中)期间,可在性能改善与物理具体实施之间进行权衡,从而改进制造方法。例如,可在性能改善与布局面积之间进行权衡,从而匹配已知具体实施的性能,但使用更少的硅。例如,这可以通过以串行方式重复使用功能块或在装置、设备、模块和/或系统的元件之间共享功能块来完成。相反,在本申请中阐述的产生装置、设备、模块和系统的物理具体实施的改善(诸如硅面积减小)的概念可针对性能改善进行权衡。例如,这可以通过在预定义面积预算内制造模块的多个实例来完成。
申请人据此独立地公开了本文中所描述的每个单独的特征以及两个或更多个这类特征的任何组合,其程度使得这类特征或组合能够依据本领域的技术人员的普通常识基于本说明书整体来实施,而不管这类特征或特征的组合是否解决本文中所公开的任何问题。鉴于前文描述,本领域的技术人员将清楚,可以在本发明的范围内进行各种修改。
Claims (22)
1.一种在光线跟踪系统中处理光线的方法,其包括:
通过执行一个或多个相交测试迭代来执行针对所述光线的相交测试,其中每个相交测试迭代包括:
遍历加速结构以识别所述光线与图元的最接近相交,所述最接近相交尚未在针对所述光线的任何先前相交测试迭代中被识别为所述最接近相交;以及
响应于基于所述图元的特性来确定将针对所识别相交执行遍历着色器:
针对所识别相交执行所述遍历着色器;以及
响应于所述遍历着色器的所述执行确定所述光线在所识别相交处不与所述图元相交,促使执行另一相交测试迭代;以及
当针对所述光线的所述相交测试完成时,执行输出着色器以处理针对所述光线的所述相交测试的结果,
其中在所述一个或多个相交测试迭代中的至少一个中,针对所述光线的所识别相交执行遍历着色器。
2.如权利要求1所述的方法,其中所述遍历着色器是任何命中着色器,并且其中所述任何命中着色器相对于所识别相交的所述执行确定:
(i)接受所识别相交,以使得所述光线在所识别相交处与所述图元相交;或
(ii)舍弃所识别相交,以使得所述光线在所识别相交处不与所述图元相交。
3.如权利要求1或2所述的方法,其中所述遍历着色器是任何命中着色器,并且其中如果所述图元并非不透明的,则将针对所识别相交执行任何命中着色器。
4.如权利要求1所述的方法,其中所述遍历着色器是相交着色器,并且其中如果所述图元是出于遍历所述加速结构的目的而被表示为体积的程序图元,则将针对所识别相交执行相交着色器。
5.如权利要求4所述的方法,其中表示所述程序图元的所述体积是轴对准边界框。
6.如权利要求4或5所述的方法,其中所述光线与所述程序图元的所识别相交在为沿所述光线的最小距离的位置处,在所述位置处,所述光线有效,并且所述光线与表示所述程序图元的所述体积相交。
7.如权利要求4至6中任一项所述的方法,其中针对所识别相交的所述相交着色器的所述执行确定:
(i)所述光线在表示所述程序图元的所述体积内的另一位置处与所述图元相交,所述另一位置不同于所识别相交的所述位置,以使得所述光线在所识别相交处不与所述图元相交;或
(ii)所述光线不与所述程序图元的所述体积内的所述图元相交,以使得所述光线在所识别相交处不与所述图元相交。
8.如任一前述权利要求所述的方法,其中所述相交测试对多条光线执行,并且其中所述穿越加速结构包括:
将光线一起分组到待测试与所述加速结构的相同节点的相交的光线包中;以及
处理所述光线包,从而针对与所述加速结构的所述相同节点的相交测试所述包的所述光线。
9.如权利要求8所述的方法,其中所述加速结构具有分层树结构,并且其中在所述加速结构的所述遍历期间,光线同时存在于所述分层树结构的多个分支中。
10.如任一前述权利要求所述的方法,其中所述方法包括:
响应于在当前相交测试迭代期间确定将执行另一相交测试迭代:
存储与在所述当前相交测试迭代期间识别的所识别相交有关的数据;以及
使用所存储数据来避免在所述另一相交测试迭代中再次识别相同相交。
11.如任一前述权利要求所述的方法,其中在所述相交测试期间针对所述光线存储三个数据集,所述三个数据集包括:
(i)候选集,其在当前相交测试迭代中在所述加速结构的所述遍历期间保持跟踪目前针对所述光线已识别的所述最接近相交;
(ii)非确证集,其指示在所述当前相交测试迭代中在所述加速结构的所述遍历期间相交可被接受作为所识别相交的最小相交距离;以及
(iii)确证集,其指示能够通过针对所述光线的所述相交测试找到相交的最大相交距离。
12.如权利要求11所述的方法,其中在针对所述光线的初始相交测试迭代的开始处:
所述光线的最小剔除距离存储在所述光线的所述非确证集中;并且
所述光线的最大剔除距离存储在所述光线的所述候选集和所述确证集中。
13.如权利要求11或12所述的方法,其中响应于确定在所述当前相交测试迭代之后将执行另一相交测试迭代,所述方法包括:在执行所述另一相交测试迭代之前:
将来自在所述当前相交测试迭代结束处的所述候选集的数据复制到所述非确证集中;以及随后
将来自在所述当前相交测试迭代结束处的所述确证集的数据复制到所述候选集中。
14.如权利要求11至13中任一项所述的方法,其中所述三个数据集中的每个数据集包括:
沿所述光线的距离的指示;以及
在所述数据集同所述光线与特定图元的相交有关的情况下:
所述特定图元的类型的指示;
所述特定图元的不透明性的指示;和
与所述特定图元相关联的一个或多个指标。
15.如权利要求14所述的方法,其中所述方法包括在所述加速结构的所述遍历期间,响应于在同所述光线与另一图元的先前相交的相交距离相等的相交距离处找到所述光线与所述特定图元的相交,其中所述先前相交由所述三个数据集中的一个数据集中的所述数据指示:
将所述特定图元的唯一图元标识符与所述另一图元的唯一图元标识符进行比较;并且
基于所述唯一图元标识符的所述比较的结果来确定是否将所述找到的相交视为比所述先前相交更接近。
16.如权利要求15所述的方法,其中所述一个或多个指标包括与所述特定图元相关联的实例索引、几何形状索引以及图元索引,所述方法还包括:
使用与所述特定图元相关联的所述实例索引、所述几何形状索引以及所述图元索引的串联来确定所述特定图元的所述唯一标识符;以及
使用与所述另一图元相关联的实例索引、几何形状索引以及图元索引的串联来确定所述另一图元的所述唯一标识符。
17.如权利要求11至16中任一项所述的方法,其中在所述加速结构的所述遍历期间,响应于(i)找到与程序图元的相交,以及(ii)在沿所述光线的所述最小相交距离处的位置在所述程序图元内,在所述位置处,在所述当前相交测试迭代中在所述加速结构的所述遍历期间,相交可被接受作为所识别相交:
在所述加速结构的所述遍历期间,所述找到的相交被确定为在沿所述光线的所述最小相交距离处。
18.如任一前述权利要求所述的方法,其中执行所述输出着色器的结果用于渲染3D场景的图像。
19.一种光线跟踪单元,其包括:
相交测试模块;和
处理逻辑;
其中所述光线跟踪单元被配置成:
通过执行一个或多个相交测试迭代来执行针对光线的相交测试,其中每个相交测试迭代包括:
使用所述相交测试模块遍历加速结构以识别所述光线与图元的所述最接近相交,所述最接近相交尚未在针对所述光线的任何先前相交测试迭代中被识别为最接近相交;以及
响应于基于所述图元的特性来确定将针对所识别相交执行遍历着色器:
在所述处理逻辑上针对所识别相交执行所述遍历着色器;以及
响应于所述遍历着色器的所述执行确定所述光线在所识别相交处不与所述图元相交,促使执行另一相交测试迭代;以及
当针对所述光线的所述相交测试完成时,在所述处理逻辑上执行输出着色器以处理针对所述光线的所述相交测试的结果。
20.一种使用集成电路制造系统制造如权利要求19所述的光线跟踪单元的方法,所述方法包括:
使用布局处理系统处理所述光线跟踪单元的计算机可读描述,以便产生体现所述光线跟踪单元的集成电路的电路布局描述;以及
使用集成电路产生系统根据所述电路布局描述来制造所述光线跟踪单元。
21.一种其上存储有计算机可读代码的计算机可读存储介质,所述计算机可读代码被配置成当运行所述代码时,促使执行如权利要求1至18中任一项所述的方法。
22.一种其上存储有集成电路定义数据集的计算机可读存储介质,所述集成电路定义数据集在于集成电路制造系统中被处理时,将所述集成电路制造系统配置成制造如权利要求19所述的光线跟踪单元。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
GB2108998.2 | 2021-06-23 | ||
GB2108998.2A GB2602523B (en) | 2021-06-23 | 2021-06-23 | Intersection testing in a ray tracing system |
Publications (1)
Publication Number | Publication Date |
---|---|
CN115512027A true CN115512027A (zh) | 2022-12-23 |
Family
ID=77050529
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210661592.6A Pending CN115512027A (zh) | 2021-06-23 | 2022-06-10 | 光线跟踪系统中的相交测试 |
Country Status (4)
Country | Link |
---|---|
US (1) | US20230023323A1 (zh) |
EP (1) | EP4109409A1 (zh) |
CN (1) | CN115512027A (zh) |
GB (1) | GB2602523B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11908065B2 (en) * | 2022-03-21 | 2024-02-20 | Advanced Micro Devices, Inc. | Stack-based ray traversal with dynamic multiple-node iterations |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7952583B2 (en) * | 2000-06-19 | 2011-05-31 | Mental Images Gmbh | Quasi-monte carlo light transport simulation by efficient ray tracing |
US10740952B2 (en) * | 2018-08-10 | 2020-08-11 | Nvidia Corporation | Method for handling of out-of-order opaque and alpha ray/primitive intersections |
US11450057B2 (en) * | 2020-06-15 | 2022-09-20 | Nvidia Corporation | Hardware acceleration for ray tracing primitives that share vertices |
US11238640B2 (en) * | 2020-06-26 | 2022-02-01 | Advanced Micro Devices, Inc. | Early culling for ray tracing |
-
2021
- 2021-06-23 GB GB2108998.2A patent/GB2602523B/en active Active
-
2022
- 2022-06-10 CN CN202210661592.6A patent/CN115512027A/zh active Pending
- 2022-06-21 EP EP22180117.8A patent/EP4109409A1/en active Pending
- 2022-06-23 US US17/847,557 patent/US20230023323A1/en active Pending
Also Published As
Publication number | Publication date |
---|---|
GB202108998D0 (en) | 2021-08-04 |
GB2602523A (en) | 2022-07-06 |
GB2602523B (en) | 2023-03-01 |
EP4109409A1 (en) | 2022-12-28 |
US20230023323A1 (en) | 2023-01-26 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11587282B2 (en) | Hybrid hierarchy of bounding and grid structures for ray tracing | |
US20220245111A1 (en) | Hierarchy Merging in Computer Graphics | |
US11715255B2 (en) | Intersection testing in a ray tracing system using ray bundle vectors | |
US11810240B2 (en) | Methods and systems for constructing ray tracing acceleration structures | |
US20230334770A1 (en) | Formation of bounding volume hierarchies | |
CN115512027A (zh) | 光线跟踪系统中的相交测试 | |
GB2593946A (en) | Methods and systems for constructing ray tracing acceleration structures | |
US11887244B2 (en) | Intersection testing for ray tracing | |
US11682160B2 (en) | Intersection testing in a ray tracing system using multiple ray bundle intersection tests | |
CN116894900A (zh) | 包围体层次的形成 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |