通过追踪光线在三维场景中的路径,模拟与光源照射对象的交互以及确定光线相交,光追这种计算机图形技术可以生成逼真的图像,包括三维场景的阴影。
在名为“Ray tracing processor”的专利申请中,高通就介绍了一种光追处理器,并且提到了AR/VR用例。
这家公司提出的发明主要用于增强光追处理器的操作。例如,一个过程可以包括获取一个加速数据结构的一个或多个节点。一个或多个节点的每个节点包含相同的字节数。节点可以存储在与光追处理器相关联的缓存中。每个存储节点都与与光追处理器相关联的缓存对齐。
所述存储节点的第一存储节点可提供给所述光追处理器,并由所述光追处理器在第一时钟周期内进行处理。所述存储节点的第二存储节点则由光追处理器第二时钟周期内进行处理。
高通认为,光追是一项计算密集型技术。用于单个帧的光追计算资源会随着每帧追踪的光线数量增加而增加,所以有必要实现一种可扩展和有效的解决方案,从而提高实时光追的性能。
例如,每帧投射到场景中的光线数量可以通过更有效地追踪每条光线来增加,比方说减少每个光追操作的计算时间,允许在每帧相同的固定渲染时间内执行更多的光追操作等等。
光追加速技术的一个例子是利用基于树的加速结构来提高光线相交测试的效率。例如,场景可以转换为BVHs,这是由更紧密的bounding box组成的分层树结构。例如在图2A示出的结构200a中,包含多个三角形基元252a-252e的场景排列成一系列更加紧密的bounding box256a-256e。
bounding box可以轴向对齐,使得每个bounding box256a-256e的边缘平行于坐标轴。图2B说明了一个示例分层数据结构200b,其节点与图2A中所示的bounding box256a-256e和三角形基元252a-252e相关联。分层数据结构200b可以是BVH。
例如,BVH根节点262a可对应图2A所示的bounding box256a。类似地,中间BVH节点262b可以对应图2A的bounding box256b,中间BVH节点262c可对应图2A的bounding box256c,以此类推。
一个BVH根节点包含一个aabb,例如图2A中的bounding box256a。aabb包含了BVH叶节点中包含的所有单个场景或物体几何形状。BVH根节点中的每个基元都分配给左子节点或右子节点。子节点包含包含其分配的几何图形的aabb,并且所述几何图形同样分配给左或右子节点,递归地直到BVH叶节点包含少量基元,例如四个或更少。
针对场景中的每个基元测试每条光线的交叉点可能效率低下且计算成本高,而BVHs可用于加速光线相交测试技术。例如,可以使用深度优先的树遍历过程来测试每个光线与BVH bounding box的相交,而不是针对场景中的每个基元。如前所述,bounding box包含或环绕不同数量的场景几何或基元,并随着BVH树结构的深度而变得越来越紧密。
bounding box可以根据世界空间或对象空间来定义。世界空间可以认为是一个常量,而对象可以存在于它们自己的坐标空间中。这称为对象空间。图3A和3B描述相同几何形状的对象空间和世界空间轴对齐bounding box(aabb/axis-aligned bounding box)的图表。
图3A示出了几何场景对象310的对象空间aabb 320。场景对象可以包括在执行光追的3D场景中存在的3D或图形对象。图3B示出了转换为场景的世界空间300b的相同几何场景对象310。世界空间aabb 330包含对象空间aabb 320和场景对象310。
光追可以利用两级加速结构系统,如TLAS和BLAS,如图4A所示。TLAS基元是在对象空间中定义的BLASs的实例。TLAS可以构建为包含BLAS的叶节点的BVH。
例如,TLAS叶节点422、424、426和428都包含或以其他方式与两个BLASs 440和460中的一个相关联。转换矩阵可以在TLAS叶节点中编码,以执行从世界空间到对象空间和/或反之亦然的转换。
BLAS可以为场景中的每个对象构建,并称为场景对象。例如,图4A示出可为第一唯一场景对象构建的BLAS 440和可为第二唯一场景对象构建的BLAS 460。BLAS 440包括叶节点442、444、446、452、454、456和458,而BLAS 460包括叶节点462、464、466、472、474、476和478。
BLAS基元可以是用于构建场景对象的过程基元的三角形或aabb。底层BVH是在场景对象的这些三角形或aabb的集合上构建的,每个BLAS叶子节点包含少量的三角形或aabb。例如,在图4A中,BLAS叶节点452-458和472-478都可以包含一定数量的三角形、aabb或其他用于构建场景对象的基元。
在一个实施例中,可以使用对象到世界矩阵创建TLAS,将以对象空间坐标表示的输入转换为以世界空间坐标表示的输出表示。在其他实施例中,可以通过使用对象到世界矩阵来计算每个BLAS的世界空间aabb,并在一组BLAS上构建TLAS,然后在BLAS根节点的世界空间aabb上构建BVH。
图4B是示出包括或存储三角形和bounding box的加速数据结构400b。在加速数据结构400b可以是BVH。
在图4B的示例中,加速数据结构400b的分支因子为8。BVH根节点470包含8个子节点471-478的aabb。子节点471-478的aabb可以存储在加速数据结构400b的数据结构中。例如,BVH根节点470可以包括数据存储或内存位置的索引。
光追处理器RTU可以接收恒定大小的节点,节点与一个或多个缓存对齐,而缓存与光追处理器通信耦合。
光追处理器可以为多个不同的节点类型和/或作为输入提供给RTU的节点内容,并维持每个时钟一个光线节点交叉点的吞吐量。例如,RTU可以接收存储在BVH或其他加速数据结构中的节点。RTU接收到的节点可以是内部节点,或可以是叶子节点。节点可以包含一个或多个三角形或其他几何基元。
RTU可以在不接收输入节点类型或内容的高级信令的情况下保持每个时钟一个节点的吞吐量。在一个实施例中,RTU从内存中获取恒定大小的BVH节点,每个BVH节点在一次获取中获得。
在第一个时钟周期内,RTU可以为第一个BVH节点执行第一个光线节点相交计算。在第二个时钟周期中,RTU可以为第二个BVH节点执行第二个光线节点相交计算,其中第一个和第二个时钟周期是连续的。
恒定大小的BVH节点可以调整为一个缓存与RTU线对齐的相关的缓存。RTU可以包含基于BVH节点恒定大小的单宽度处理管道,并包含一个用于解压缩已获取的BVH节点的节点解压缩器。RTU可以在同一个时钟周期内执行BVH节点解压缩,而后续的光线相交计算是使用BVH节点的解压缩内容执行。
RTU可以以共享时钟速率运行。例如,如果RTU包含在图形处理单元或其他光追系统中,则RTU可以以与GPU或光追系统相同的时钟速率运行
在一个实施例中,当BVH节点是内部节点时,压缩BVH节点可以包含多达8个子节点的aabb。当BVH节点是叶节点时,压缩的BVH叶节点最多可以包含四个三角形或其他几何基元。
在一个时钟周期内,RTU可以为每个可能的节点类型执行光线节点相交计算。在一个实施例中,RTU包括一个算术逻辑单元ALU,它可以在单个时钟周期内使用每种可能的BVH节点类型。
ALU的并行处理能力可以大于或等于给定BVH节点中可以包含的基元的最大数量。例如,上面描述的常量大小压缩BVH节点可以包含最多8个aabb。RTU ALU可以调整大小,每个时钟最多执行8个光线- aabb相交或每个时钟最多执行4个光线-三角形相交。
在一个示例中,RTU ALU可以包括四个共享的RB-RT逻辑单元。每个共享的RB-RT逻辑单元可以在每个时钟执行两次光线- aabb相交,或者可以在每个时钟执行一次光线-三角形相交。这个2:1的比例分别与aabb和三角形预期的8:4最大输入大小相匹配。因此,使用四个共享的RB-RT逻辑单元,RTU可以完全摄取和处理任何可能解压缩的BVH节点内容。
上面描述的RB-RT逻辑单元可以包括一个共享的浮点逻辑子单元,从而执行浮点ALU操作。例如在输入BVH节点包含aabb的第一个时钟周期中,RB-RT的两个光线- aabb相交子单元可以使用共享的浮点逻辑子单元执行光线- aabb相交计算。
在输入BVH节点包含三角形的第二个时钟周期内,RB-RT的光线-三角形相交子单元可以使用共享浮点逻辑子单元来执行光线-三角形相交计算。共享ALU模块可以通过减少RTU ALU硬件逻辑的物理面积,从而提高性能和效率。
对于包含三角形的BVH节点,压缩过程可以包括压缩三角形几何形状的副本,并将其包含在最终压缩的BVH节点中。描述三角形的坐标可以是三角形顶点的坐标。通过将三角形几何形状直接存储在BVH数据结构中,RTU ALU可以以每个时钟一个节点的吞吐量访问和处理三角形几何形状,而不必等待一个或多个时钟周期来从外部数组或内存位置检索三角形几何形状。
图5是示例光追系统500。在图5所示的示例中,光追系统500包括存储器502、计算组件510、光追引擎520、加速数据结构引擎522、节点获取和缓存引擎524和图形处理引擎526。
在一个示例中,光追引擎520可以与RTU 518通信,以执行光线基元相交计算和/或光线bounding box相交计算。光追引擎520可以向RTU 518提供一个或多个输入和/或控制信号。RTU 518可以使用来自光追引擎520的输入和控制信号来执行光线bounding box光线相交计算,并可以将光线相交计算结果传回光追引擎520。
加速数据结构引擎522可以构造或生成一个或多个加速数据结构。加速数据结构引擎522生成的加速数据结构可由光追引擎520、节点获取和缓存引擎524、图形处理引擎526中的一个或多个使用。
在一个实施例中,加速数据结构引擎522可以构造或生成一个BVH。加速数据结构引擎522可以生成两级加速结构,例如包括TLAS和一个或多个BLASs的加速数据结构。
加速数据结构引擎522可以使用对象空间表示和世界空间表示对场景对象和场景几何的表示进行操作,并可以分别使用一个或多个对象到世界矩阵和/或世界到对象矩阵来将场景对象/几何图形从对象空间表示转换为世界空间表示,以及从世界空间表示转换为对象空间表示。
图6是光追单元RTU 610。如图所示,RTU 610至少包括一个算术逻辑单元ALU 620和一个节点获取单元640。缓存650可以在ALU 620和节点获取单元640之间通信耦合。
RTU 610可以使用节点获取单元640来获取存储在加速数据结构中的一个或多个节点的节点数据614。例如,RTU 610可以使用节点获取单元640来获取节点数据614。基于节点数据614,RTU 610可以执行一个或多个光追操作。
例如,RTU 610可以执行一个或多个光线相交计算,以确定给定的光线是否与节点数据614表示的加速数据结构节点的至少一部分相交。在一个示例中,RTU 610可以使用节点获取单元640获得的节点数据614在缓存650中写入或以其他方式存储一个或多个加速数据结构节点。
RTU 610可以对存储在缓存650中的节点执行一个或多个光线相交计算。例如,RTU 610可以使用ALU 620从缓存650中读取一个节点,并执行一个或多个光线相交计算。
如上所述,RTU 610可以在每个时钟执行一次光线节点相交计算。例如,在第一个时钟周期中,ALU 620可以从缓存650中读取一个加速数据结构节点,如果节点包含三角形,则计算光线-三角形交叉点。如果节点包含aabb,则计算光线- aabb相交。
在第一个时钟周期结束时,ALU 620随后可以提供光线-三角形相交计算结果或光线- aabb相交计算结果作为输出。
RTU 610可以使用节点获取单元640将加速数据结构节点与ALU 620执行的光线相交计算同时获取到缓存650中。RTU 610可以基于接收加速度数据结构的恒定大小节点,每个时钟执行一次光线节点相交计算。例如,加速度数据结构的恒定大小节点的每个节点可以包含相同数量的字节。
通过将固定大小的、与缓存线对齐的节点写入缓存650,RTU 610可以最大限度地减少或消除ALU 620的空闲或浪费的时钟周期。
例如,通过使用64字节的缓存线对齐节点大小,ALU 620可以避免执行光线节点相交计算所需的节点数据溢出到缓存650中的一条或多条额外的缓存线的情况。
在RTU 610和/或ALU 620每个时钟只能从缓存650中读取一条缓存线的情况下,如果节点数据与缓存线不一致,则ALU 620处于空闲状态,等待从缓存650中读取节点数据所需的额外时钟周期。ALU 620空闲的时钟周期可能遭到浪费或造成低效的时钟周期。
所以,通过将固定大小的、与缓存线对齐的节点写入缓存650,RTU 610可以最大限度地减少或消除ALU 620的空闲或浪费的时钟周期。
名为“Ray tracing processor”的高通专利申请在日前由美国专利商标局公布。