CN115115758B - 在光线跟踪系统中确定相交的方法、相交测试装置和介质 - Google Patents

在光线跟踪系统中确定相交的方法、相交测试装置和介质 Download PDF

Info

Publication number
CN115115758B
CN115115758B CN202210262491.1A CN202210262491A CN115115758B CN 115115758 B CN115115758 B CN 115115758B CN 202210262491 A CN202210262491 A CN 202210262491A CN 115115758 B CN115115758 B CN 115115758B
Authority
CN
China
Prior art keywords
ray
plane
intersects
backward
dimension
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.)
Active
Application number
CN202210262491.1A
Other languages
English (en)
Other versions
CN115115758A (zh
Inventor
G·克拉克
S·芬尼
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Imagination Technologies Ltd
Original Assignee
Imagination Technologies Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Imagination Technologies Ltd filed Critical Imagination Technologies Ltd
Publication of CN115115758A publication Critical patent/CN115115758A/zh
Application granted granted Critical
Publication of CN115115758B publication Critical patent/CN115115758B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T15/003D [Three Dimensional] image rendering
    • G06T15/06Ray-tracing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T15/003D [Three Dimensional] image rendering
    • G06T15/005General purpose rendering architectures
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T7/00Image analysis
    • G06T7/60Analysis of geometric attributes
    • G06T7/62Analysis of geometric attributes of area, perimeter, diameter or volume
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T2210/00Indexing scheme for image generation or computer graphics
    • G06T2210/12Bounding box
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T2210/00Indexing scheme for image generation or computer graphics
    • G06T2210/21Collision detection, intersection

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Graphics (AREA)
  • Geometry (AREA)
  • Computer Vision & Pattern Recognition (AREA)
  • Analysing Materials By The Use Of Radiation (AREA)

Abstract

本发明涉及在光线跟踪系统中确定相交的方法、相交测试装置和介质。提供了用于在光线跟踪系统中确定光线是否与3D轴对齐框相交的方法和相交测试模块,轴对齐框表示由每个维度的前向平面和后向平面定义的体积。标识框的在沿着光线的最远位置与光线相交的前向平面。确定是否光线与已标识前向平面相交的位置沿着光线不远于光线与维度子集中的后向平面相交的位置,并且此确定用于确定光线是否与轴对齐框相交。维度子集包括前向平面未被标识的两个维度,但不包括前向平面已被标识的维度。在不执行测试以确定是否光线与已标识前向平面相交的位置沿着光线不远于光线与前向平面已被标识的维度中的后向平面相交的位置的情况下,确定光线是否与框相交。

Description

在光线跟踪系统中确定相交的方法、相交测试装置和介质
技术领域
本公开涉及在光线跟踪系统中执行相交测试的技术。
背景技术
光线跟踪是一种计算渲染技术,其用于通过通常从相机的视角在场景中跟踪光路(‘光线’)来生成场景(例如,3D场景)的图像。每条光线被建模为源自相机,并通过像素进入场景。当光线横越场景时,其可能与场景内的物体相交。可对光线和其相交的物体之间的相交建模以创建逼真的视觉效果。例如,响应于确定光线与物体相交,可以针对相交执行着色器程序(即,计算机代码的一部分)。程序员可以编写着色器程序以定义系统如何对相交(所述相交例如可能导致向场景中发射一个或多个二次光线)作出反应,例如,以表示光线从相交物体的反射或光线通过物体的折射(例如,如果物体是透明或半透明的)。作为另一示例,着色器程序可以使一条或多条光线发射到场景中,以用于确定物体是否处于交点处的阴影中。执行着色器程序(和处理相关的二次光线)的结果可以是计算光线穿过的像素的颜色值。
使用光线跟踪渲染场景的图像可以涉及执行许多相交测试,例如执行数十亿个相交测试以渲染场景的图像。为了减少需要执行的相交测试的数量,光线跟踪系统可以生成加速结构,其中加速结构的每个节点表示场景内的区域。加速结构通常是分层的(例如,具有树结构),使得其包含多个级别的节点,其中靠近加速结构的顶部的节点表示场景中相对大的区域(例如,根节点可以表示整个场景),靠近加速结构的底部的节点表示场景中相对小的区域。“树节点”是指具有指向分层加速结构中的其它节点的指针的节点,即,树节点在分层加速结构中具有子节点。“叶节点”是指具有指向一个或多个图元的一个或多个指针的节点,即,叶节点在分层加速结构中不具有子节点。换句话说,加速结构的叶节点表示场景中界定一个或多个图元的区域。加速结构在不同示例中可具有不同结构,例如栅格结构、八叉树结构、空间分割结构(例如k-d树)或边界体积层次体系。节点可以表示场景中的合适形状或区域(其在本文中可以被称为“框”)。在一些示例中,节点表示场景中的轴对齐边界框(AABB)。
可以使用加速结构,通过首先测试光线与加速结构的根节点的相交(例如,以递归方式)对光线执行相交测试。如果发现光线与父节点(例如,根节点)相交,则测试可以进行到所述父节点的子节点。相比之下,如果发现光线不与父节点相交,则可以避免对所述父节点的子节点的相交测试,从而节省计算工作量。如果发现光线与叶节点相交,则可针对由叶节点表示的区域内的物体对所述光线进行测试,从而确定光线与哪个(些)物体相交。如果发现光线有多于一个交点,则可以标识与光线原点最接近的交点(即,光线在场景中遇到的第一次相交),并且可以确定光线在此标识的最接近交点处相交。有可能存在光线的多个最接近命中,并且在这种情况下,可以使用一些平局决胜(tie-break)逻辑来选择多个最接近命中中的一个以用作标识的最接近交点。对于一些类型的光线,可能不需要标识最接近的交点。例如,在处理阴影光线时,存在至少一个交点的指示是足够的,而无需确定哪一个交点最接近,并且一些API可以允许加速结构针对阴影光线的遍历响应于发现任何交点而终止,从而减少需要执行的相交测试的数量。使用加速结构(而非直接利用场景中的物体测试光线)减少了需要执行的相交测试的数量,并简化了相交测试。相交测试更加简单,因为加速结构的节点表示基本形状(例如,轴对齐边界框或球),针对这些基本形状的相交测试比针对更复杂的物体形状的相交测试更简单,例如,按照并未预先确定相对于坐标系轴的对齐的三角形图元定义基本形状。
光线(r)可被定义为r=O+Dt,其中O是表示光线原点的向量,D是表示光线方向向量,并且t表示沿着光线距原点的距离。根据一种方法,可以通过针对x、y和z维度中的每一个发现区间t来针对轴对齐框测试光线,在所述区间内,光线在表示框的垂直于所述维度的侧面的两个平面之间。这针对t的值给出了三个区间(一个用于x维度,一个用于y维度,并且一个用于z维度)。如果这三个区间的交点(本身为区间)为空,则光线不与轴对齐框相交;而如果这三个区间的交点不为空,则光线可能与轴对齐框相交。这种相交测试方法涉及执行六个测试以发现三个区间t,然后执行比较以确定那些区间的交点是否为空。
根据另一方法,可以从光线的视角针对形成框的2D轮廓的框的边缘测试光线。如果光线在每一个轮廓边缘的内部通过,则确定光线与框相交,而如果光线在框的一个或多个轮廓边缘的外部通过,则确定光线不与框相交。AABB通常具有6个轮廓边缘(取决于从光线的视角看的AABB的取向),因此这种方法通常需要执行六个测试。
上述测试将确定与光线对齐的无限长的线是否将与框相交。然而,光线的长度通常不是无限的,并且光线可以具有一个或多个有效区间。例如,光线可以具有距光线原点的某一最小距离和某一最大距离,其可以按照t的最小值(被称为最小剔除(culling)距离,tmin)和t的最大值(被称为最大剔除距离,tmax)来定义。因此,可以执行最小距离测试以检查最小剔除距离不大于到光线与框的交点的最大相交距离;并且可以执行最大距离测试以检查最大剔除距离不小于到光线与框的交点的最小相交距离。在使用相交区间来确定光线是否与框相交的上述第一示例中,不执行单独的最小距离和最大距离测试,而是可以初始化起始区间以表示介于tmin与tmax之间的t值范围,使得只有在对于介于tmin与tmax之间的t值发生相交时,确定区间之间是否存在任何交点的结果才确定存在交点。范围tmin和tmax的每一个端点都可以包含在区间中或从区间中排除。
由于光线针对与加速结构的节点对应的形状(例如轴对齐框)的相交测试已执行多次,因此在专用硬件模块中例如使用固定功能电路系统来实施用于执行这些相交测试的功能而不使用在通用处理单元上执行的软件模块来实施这些相交测试可以是有益的。软件实施方案通常更加灵活,因为软件在被设计和/或创建之后比硬件实施方案更容易改变。然而,硬件实施方案通常在延迟和功耗方面提供更有效的实施方案,因此如果所需功能是事先已知的,则硬件实施方案可能优于软件实施方案。当设计被配置成用于执行相交测试的相交测试模块的硬件实施方案时,通常存在以下竞争目标:(i)有更小的尺寸(即,更小的硅面积),(ii)有更低的延迟,以及(iii)有更低的功耗。
发明内容
提供本发明内容是为了以简化的形式介绍下文在具体实施方式中进一步描述的一系列概念。本发明内容不旨在标识所要求保护的主题的关键特征或必要特征,也不旨在用于限制所要求保护的主题的范围。
提供了用于在光线跟踪系统中确定光线是否与3D轴对齐框相交的方法和相交测试模块,所述轴对齐框表示由每个维度的前向平面和后向平面定义的体积。标识所述框的在沿着所述光线的最远位置与所述光线相交的所述前向平面。确定是否所述光线与已标识前向平面相交的位置沿着所述光线不远于所述光线与维度子集中的所述后向平面相交的位置,并且此确定用于确定所述光线是否与所述轴对齐框相交。所述维度子集包括所述前向平面未被标识的两个维度,但不包括所述前向平面已被标识的维度。在不执行测试以确定是否所述光线与所述已标识前向平面相交的位置沿着所述光线不远于所述光线与所述前向平面已被标识的所述维度中的所述后向平面相交的位置的情况下,确定所述光线是否与所述框相交。
具体地说,提供了一种在光线跟踪系统中确定光线是否与三维轴对齐框相交的方法,其中所述框表示由所述三维轴对齐框的每个维度的前向平面和后向平面定义的体积,所述方法包括:
标识所述框的所述前向平面中的哪一个在沿着所述光线的最远位置与所述光线相交;
确定是否所述光线与已标识前向平面相交的位置沿着所述光线不远于所述光线与维度子集中的所述后向平面相交的位置,其中所述维度子集包括所述前向平面未被标识的两个维度,但其中所述维度子集不包括所述前向平面已被标识的维度;以及
使用是否所述光线与所述已标识前向平面相交的位置沿着所述光线不远于所述光线与所述维度子集中的所述后向平面相交的位置的所述确定来确定所述光线是否与所述轴对齐框相交,
其中所述方法在不执行测试以确定是否所述光线与所述已标识前向平面相交的位置沿着所述光线不远于所述光线与所述前向平面已被标识的所述维度中的所述后向平面相交的位置的情况下,确定所述光线是否与所述框相交。
可以在不计算到所述框的所述平面中的任一个的相交距离的情况下执行标识所述框的所述前向平面中的哪一个在沿着所述光线的最远位置与所述光线相交以及确定是否所述光线与所述已标识前向平面相交的位置沿着所述光线不远于所述光线与维度子集中的所述后向平面相交的位置的所述步骤。
所述标识所述框的所述前向平面中的哪一个在沿着所述光线的最远位置与所述光线相交可包括:
执行第一前向测试以确定所述光线在沿着所述光线的最远位置与所述框的第一前向平面和第二前向平面中的哪一个相交;以及
执行第二前向测试以确定所述光线在沿着所述光线的最远位置与所述框的已确定前向平面和第三前向平面中的哪一个相交,从而标识所述框的所述前向平面中的哪一个在沿着所述光线的最远位置与所述光线相交。
所述标识所述框的所述前向平面中的哪一个在沿着所述光线的最远位置与所述光线相交可包括:
执行第一前向测试以确定所述光线在沿着所述光线的最远位置与所述框的第一前向平面和第二前向平面中的哪一个相交;
执行第二前向测试以确定所述光线在沿着所述光线的最远位置与所述框的所述第一前向平面和第三前向平面中的哪一个相交;
执行第三前向测试以确定所述光线在沿着所述光线的最远位置与所述框的所述第二前向平面和所述第三前向平面中的哪一个相交;以及
使用所述第一前向测试、所述第二前向测试和所述第三前向测试的结果来标识所述框的所述前向平面中的哪一个在沿着所述光线的最远位置与所述光线相交。
所述第一前向测试、所述第二前向测试和所述第三前向测试可以并行执行。
所述确定是否所述光线与所述已标识前向平面相交的位置沿着所述光线不远于所述光线与所述维度子集中的所述后向平面相交的位置可包括:
执行第一混合向测试以确定所述光线在沿着所述光线的最远位置与所述框的所述已标识前向平面和第一后向平面中的哪一个相交,其中所述框的所述第一后向平面是所述维度子集中的第一维度的后向平面;
执行第二混合向测试以确定所述光线在沿着所述光线的最远位置与所述框的所述已标识前向平面和第二后向平面中的哪一个相交,其中所述框的所述第二后向平面是所述维度子集中的第二维度的后向平面;以及
使用所述第一混合向测试和所述第二混合向测试的所述结果来确定是否所述光线与所述已标识前向平面相交的位置沿着所述光线不远于所述光线与所述维度子集中的所述后向平面相交的位置。
所述第一混合向测试和所述第二混合向测试可以并行执行。
所述确定是否所述光线与所述已标识前向平面相交的位置沿着所述光线不远于所述光线与所述维度子集中的所述后向平面相交的位置可包括:
执行后向测试以确定所述光线在沿着所述光线的最近位置与所述框的第一后向平面和第二后向平面中的哪一个相交,其中所述框的所述第一后向平面是所述维度子集中的第一维度的后向平面,并且所述框的所述第二后向平面是所述维度子集中的第二维度的后向平面;
执行混合向测试以确定所述光线在沿着所述光线的最远位置与所述框的所述已标识前向平面和已确定后向平面中的哪一个相交;以及
使用所述混合向测试的所述结果来确定是否所述光线与所述已标识前向平面相交的位置沿着所述光线不远于所述光线与所述维度子集中的所述后向平面相交的位置。
用于确定所述光线在沿着所述光线的最远位置与所述框的第一平面和第二平面中的哪一个相交的前向测试、后向测试或混合向测试可包括将Pm,iDj与Pn,jDi进行比较,其中Pm,i是第i维度中的所述第一平面的恒定分量值,其中Pn,j是第j维度中的所述第二平面的恒定分量值,其中Di和Dj分别是所述光线在所述第ⅰ维度和所述第j维度中的方向向量的分量,其中如果Pm,iDj>Pn,jDi,则可以确定所述光线与所述第一平面相交的位置沿着所述光线远于所述光线与所述第二平面相交的位置,并且如果Pm,iDj<Pn,jDi,则可以确定所述光线与所述第二平面相交的位置沿着所述光线远于所述光线与所述第一平面相交的位置,
其中所述第一平面是:(i)维度i的所述前向平面并且对于所述第i维度具有分量值P0,i,或(ii)维度i的所述后向平面并且对于所述第i维度具有分量值P1,i,并且
其中所述第二平面是:(i)维度j的所述前向平面并且对于所述第j维度具有分量值P0,j,或(ii)维度j的所述后向平面并且对于所述第j维度具有分量值P1,j
所述方法还可以包括:
存储在所述标识所述框的所述前向平面中的哪一个在沿着所述光线的最远位置与所述光线相交时确定的一个或多个中间结果;以及
读取所存储的一个或多个中间结果以用于所述确定是否所述光线与所述已标识前向平面相交的位置沿着所述光线不远于所述光线与所述维度子集中的所述后向平面相交的位置。
所述中间结果可包括值P0,iDj和P0,iDk,其中所述已标识前向平面对于所述第i维度具有分量值P0,i,并且其中Dj和Dk分别是所述光线在所述第j维度和所述第k维度中的方向向量的所述分量,其中所述维度子集包括所述第j维度和所述第k维度但不包括所述第i维度。
所述方法还可包括确定是否满足最大距离条件,其中如果所述光线距光线原点的最大有效距离大于或等于从所述光线原点到所述光线与所述框内的点的任何交点的最小距离,则可以满足所述最大距离条件,
其中所述确定所述光线是否与所述轴对齐框相交还可包括使用是否满足所述最大距离条件的所述确定。
所述确定是否满足最大距离条件可包括确定是否P0,i≤Ditmax,其中所述已标识前向平面对于所述第i维度具有分量值P0,i,其中Di是所述光线在所述第i维度中的方向向量的所述分量,并且其中tmax是定义所述光线距所述光线原点的所述最大有效距离的参数。
所述方法还可包括确定是否满足最小距离条件,其中如果所述光线距所述光线原点的最小有效距离小于或等于从所述光线原点到所述光线与所述框内的点的任何交点的最大距离,则可以满足所述最小距离条件,
其中所述确定所述光线是否与所述轴对齐框相交还可包括使用是否满足所述最小距离条件的所述确定。
所述确定是否满足最小距离条件可包括:确定是否P1,i≥Ditmin,P1,j≥Djtmin并且P1,k≥Dktmin,其中维度i的所述后向平面具有分量值P1,i,维度j的所述后向平面具有分量值P1,j,维度k的所述后向平面具有分量值P1,k,其中Di、Dj和Dk分别是所述光线在所述第i维度、所述第j维度和所述第k维度中的方向向量的所述分量,并且其中tmin是定义所述光线距所述光线原点的所述最小有效距离的参数。
所述确定是否满足最大距离条件和所述确定是否满足最小距离条件可以与所述确定是否所述光线与所述已标识前向平面相交的位置沿着所述光线不远于所述光线与维度子集中的所述后向平面相交的位置并行执行。
提供了一种在光线跟踪系统中确定光线是否与三维轴对齐框相交的方法,其中所述框表示由所述三维轴对齐框的每个维度的前向平面和后向平面定义的体积,所述方法包括:
标识所述框的所述后向平面中的哪一个在沿着所述光线的最近位置与所述光线相交;
确定是否所述光线与维度子集中的所述前向平面相交的位置沿着所述光线不远于所述光线与已标识后向平面相交的位置,其中所述维度子集包括所述后向平面未被标识的两个维度,但其中所述维度子集不包括所述后向平面已被标识的维度;以及
使用是否所述光线与所述维度子集中的所述前向平面相交的位置沿着所述光线不远于所述光线与所述已标识后向平面相交的位置的所述确定来确定所述光线是否与所述轴对齐框相交,
其中所述方法在不执行测试以确定是否所述光线与所述后向平面已被标识的所述维度中的所述前向平面相交的位置沿着所述光线不远于所述光线与所述已标识后向平面相交的位置的情况下,确定所述光线是否与所述框相交。
所述标识所述框的所述后向平面中的哪一个在沿着所述光线的最近位置与所述光线相交可包括:
执行第一后向测试以确定所述光线在沿着所述光线的最近位置与所述框的第一后向平面和第二后向平面中的哪一个相交;以及
执行第二后向测试以确定所述光线在沿着所述光线的最近位置与所述框的已确定后向平面和第三后向平面中的哪一个相交,从而标识所述框的所述后向平面中的哪一个在沿着所述光线的最近位置与所述光线相交。
所述标识所述框的所述后向平面中的哪一个在沿着所述光线的最近位置与所述光线相交可包括:
执行第一后向测试以确定所述光线在沿着所述光线的最近位置与所述框的第一后向平面和第二后向平面中的哪一个相交;
执行第二后向测试以确定所述光线在沿着所述光线的最近位置与所述框的所述第一后向平面和第三后向平面中的哪一个相交;
执行第三后向测试以确定所述光线在沿着所述光线的最近位置与所述框的所述第二后向平面和所述第三后向平面中的哪一个相交;以及
使用所述第一后向测试、所述第二后向测试和所述第三后向测试的结果来标识所述框的所述后向平面中的哪一个在沿着所述光线的最近位置与所述光线相交。
所述确定是否所述光线与所述维度子集中的所述前向平面相交的位置沿着所述光线不远于所述光线与所述已标识后向平面相交的位置可包括:
执行第一混合向测试以确定所述光线在沿着所述光线的最远位置与所述框的所述已标识后向平面和第一前向平面中的哪一个相交,其中所述框的所述第一前向平面是所述维度子集中的第一维度的前向平面;
执行第二混合向测试以确定所述光线在沿着所述光线的最远位置与所述框的所述已标识后向平面和第二前向平面中的哪一个相交,其中所述框的所述第二前向平面是所述维度子集中的第二维度的前向平面;以及
使用所述第一混合向测试和所述第二混合向测试的所述结果来确定是否所述光线与所述维度子集中的所述前向平面相交的位置沿着所述光线不远于所述光线与所述已标识后向平面相交的位置。
所述确定是否所述光线与所述维度子集中的所述前向平面相交的位置沿着所述光线不远于所述光线与所述已标识后向平面相交的位置可包括:
执行前向测试以确定所述光线在沿着所述光线的最远位置与所述框的第一前向平面和第二前向平面中的哪一个相交,其中所述框的所述第一前向平面是所述维度子集中的第一维度的前向平面,并且所述框的所述第二前向平面是所述维度子集中的第二维度的前向平面;
执行混合向测试以确定所述光线在沿着所述光线的最远位置与所述框的所述已标识后向平面和已确定前向平面中的哪一个相交;以及
使用所述混合向测试的所述结果来确定是否所述光线与所述维度子集中的所述前向平面相交的位置沿着所述光线不远于所述光线与所述已标识后向平面相交的位置。
所述方法还可包括选择性地反转所述光线和所述轴对齐框的分量的轴,使得Di≥0,Dj≥0并且Dk≥0,随后标识所述框的所述前向平面中的哪一个在沿着所述光线的最远位置与所述光线相交,其中Di、Dj和Dk分别是所述光线在所述第i维度、所述第j维度和所述第k维度中的方向向量的所述分量。
所述方法还可包括从定义所述框的所述前向平面和所述后向平面的所述位置的相应分量减去所述光线的原点的相应分量。
可以通过朝向-∞舍入针对前向平面确定的值并朝向+∞舍入针对后向平面确定的值来保守地执行所述光线是否与所述轴对齐框相交的所述确定,使得在完全准确的确定原本将确定所述光线与所述轴对齐框相交的情况下,通过在确定过程中舍入而引入的误差不会确定所述光线不与所述轴对齐框相交。
所述方法还可包括输出所述光线是否与所述轴对齐框相交的所述确定的结果的指示,其中输出的指示可在所述光线跟踪系统中用于渲染3D场景的图像。
轴对齐框可以是界定要渲染的几何形状的轴对齐边界框,并且轴对齐框可对应于要用于在光线跟踪系统中执行相交测试的分层加速结构的节点。
所述节点可以是用于在示例空间中表示几何形状的底层加速结构(BLAS)的一部分,并且所述方法可包括将所述光线变换到所述示例空间中。
提供了一种在光线跟踪系统中使用的相交测试模块,其被配置成确定光线是否与三维轴对齐框相交,其中所述框表示由所述三维轴对齐框的每个维度的前向平面和后向平面定义的体积,所述相交测试模块被配置成进行以下操作:
标识所述框的所述前向平面中的哪一个在沿着所述光线的最远位置与所述光线相交;
确定是否所述光线与已标识前向平面相交的位置沿着所述光线不远于所述光线与维度子集中的所述后向平面相交的位置,其中所述维度子集包括所述前向平面未被标识的两个维度,但其中所述维度子集不包括所述前向平面已被标识的维度;以及
使用是否所述光线与所述已标识前向平面相交的位置沿着所述光线不远于所述光线与所述维度子集中的所述后向平面相交的位置的所述确定来确定所述光线是否与所述轴对齐框相交,
其中所述相交测试模块被配置成在不执行测试以确定是否所述光线与所述已标识前向平面相交的位置沿着所述光线不远于所述光线与所述前向平面已被标识的所述维度中的所述后向平面相交的位置的情况下,确定所述光线是否与所述框相交。
提供了一种在光线跟踪系统中使用的相交测试模块,其被配置成确定光线是否与三维轴对齐框相交,其中所述框表示由所述三维轴对齐框的每个维度的前向平面和后向平面定义的体积,所述相交测试模块被配置成进行以下操作:
标识所述框的所述后向平面中的哪一个在沿着所述光线的最近位置与所述光线相交;
确定是否所述光线与维度子集中的所述前向平面相交的位置沿着所述光线不远于所述光线与已标识后向平面相交的位置,其中所述维度子集包括所述后向平面未被标识的两个维度,但其中所述维度子集不包括所述后向平面已被标识的维度;以及
使用是否所述光线与维度子集中的所述前向平面相交的位置沿着所述光线不远于所述光线与所述已标识后向平面相交的位置的所述确定来确定所述光线是否与所述轴对齐框相交,
其中所述相交测试模块被配置成在不执行测试以确定是否所述光线与所述后向平面已被标识的所述维度中的所述前向平面相交的位置沿着所述光线不远于所述光线与所述已标识后向平面相交的位置的情况下,确定所述光线是否与所述框相交。
提供了一种相交测试模块,其被配置成执行本文所描述的任一种方法。
所述相交测试模块可以在集成电路上以硬件体现。可以提供一种在集成电路制造系统处制造相交测试模块的方法。可以提供一种集成电路定义数据集,当在集成电路制造系统中被处理时,所述集成电路定义数据集将系统配置成制造相交测试模块。可以提供一种非瞬态计算机可读存储介质,其上存储有相交测试模块的计算机可读描述,当在集成电路制造系统中被处理时,所述计算机可读描述使集成电路制造系统制造体现相交测试模块的集成电路。
可以提供一种集成电路制造系统,其包括:非瞬态计算机可读存储介质,其上存储有相交测试模块的计算机可读描述;布局处理系统,其被配置成处理计算机可读描述以便生成体现相交测试模块的集成电路的电路布局描述;以及集成电路生成系统,其被配置成根据电路布局描述来制造相交测试模块。
可以提供用于执行本文所述的任一种方法的计算机程序代码。可以提供非瞬态计算机可读存储介质,所述非瞬态计算机可读存储介质上存储有计算机可读指令,所述计算机可读指令在计算机系统处执行时使计算机系统执行本文所述的任一种方法。
如对本领域的技术人员显而易见的,上述特征可以适当地组合,并且可以与本文所述的示例的任何方面组合。
附图说明
现在将参考附图详细描述示例,在附图中:
图1示出了根据本文所描述的示例的光线跟踪系统;
图2a从第一视角示出了两条光线以及框;
图2b从第二视角示出了光线和框,其中第二视角在光线原点处;
图3是根据本文所描述的示例的执行相交测试以确定光线是否与3D轴对齐框相交的第一方法的流程图;
图4a到图4j表示在执行相交测试以确定光线是否与3D轴对齐框相交的第一方法期间执行的测试;
图5a示出了光线的起点超出框的光线和框;
图5b示出了光线的末端在框前的光线和框;
图5c示出了光线的起点在框前并且光线的末端超出框的光线和框;
图6是根据本文所描述的示例的执行相交测试以确定光线是否与3D轴对齐框相交的第二方法的流程图;
图7a到图7j表示在执行相交测试以确定光线是否与3D轴对齐框相交的第二方法期间执行的测试;
图8示出了在其中实施光线跟踪系统的计算机系统;并且
图9示出了用于生成体现光线跟踪系统的集成电路的集成电路制造系统。
附图示出了各种示例。技术人员将理解,附图中所示的元素边界(例如,框、框的组,或其它形状)表示边界的一个示例。在一些示例中,情况可能是一个元素可以被设计为多个元素,或者多个元素可以被设计为一个元素。在适当的情况下,贯穿各附图使用共同的附图标记来指示类似的特征。
具体实施方式
通过示例的方式给出以下描述,以使本领域的技术人员能够制造和使用本发明。本发明不限于本文描述的实施例,并且对所公开的实施例的各种修改对于本领域的技术人员将是显而易见的。
现在仅通过示例的方式来描述实施例。
即使使用加速结构,在光线跟踪系统中执行相交测试所涉及的工作量仍然很大。例如,光线跟踪可用于渲染3D场景的图像,其中图像可具有大约一百万像素。可以针对每个样本位置跟踪一次光线。在一些示例中,每个像素位置可存在一个样本位置,而在一些其它示例中,每个像素位置可存在多个样本位置(例如,以允许在渲染最终像素值时执行例如超级采样抗锯齿(SSAA)的过程)。当光线与场景中的物体相交时,可以执行着色器,其可以使另一光线(即,“二次光线”)发射到场景中。每个一次光线可引起数个二次光线的发射,这些二次光线全部通过场景跟踪以确定其交点。因此,通过场景跟踪数千万或数亿的光线以渲染图像并不少见。随着图形渲染技术的发展,要渲染的场景变得越来越复杂,因此场景中存在数千个物体并不少见,每个物体可以由许多图元表示。此外,正在渲染的图像可以表示要实时渲染的帧序列的帧,例如,用于实时向用户显示。例如,用户可能正在玩游戏,其中渲染的图像表示在用户玩游戏时所述用户的3D场景视图。为了使一系列帧看起来像是连续的视频数据流,可以每秒渲染数个帧,例如每秒24、30或60帧,作为一些示例。因此,可以理解的是,在光线跟踪系统中执行相交测试以实时渲染要输出的场景所涉及的工作很多。
克服此问题并执行光线跟踪以实时渲染要输出的场景的一种方式是使一个或多个超级计算机执行所有处理。这可被视为一种“强力”方法。然而,除了具有高性能(执行光线跟踪以实时渲染要输出的场景)的目标,还存在缩减光线跟踪系统的尺寸(例如硅面积)和功耗的竞争目标。例如,可存在在例如平板计算机或智能手机等移动装置上实施光线跟踪系统的目标,其可接受的尺寸和功耗可远低于超级计算机。因此,当设计光线跟踪系统时,在性能、功耗和面积之间可存在折衷。取决于如何实施此折衷,本文所描述的示例可以允许提高性能而不显著增加功耗和面积(与上文在背景部分中所描述的现有技术相比)。替代地,在折衷的不同实施方案中,本文所描述的示例可以允许缩减光线跟踪系统的功耗和/或尺寸而不显著降低光线跟踪系统的性能(与上文在背景部分中所描述的现有技术相比)。可以设计不同的实施方案以针对性能、功耗和硅面积之间的折衷中的不同点。
如上文所描述,测试光线与对应于加速结构的节点的轴对齐边界框(AABB)的相交是光线跟踪系统中极其频繁的操作。具体地说,光线与边界体积的相交测试(即,确定光线是否与轴对齐框相交)通常考虑被执行以使用光线跟踪来渲染场景图像的大多数相交测试。因此,可对执行相交测试的方式进行的任何优化对于在减少光线跟踪系统的延迟、功耗和物理尺寸方面优化光线跟踪系统可能非常有用。
在背景部分中给出的两个示例中,执行六个测试(加上最小和最大距离测试)以确定光线是否与轴对齐框相交。然而,根据本文所描述的示例,需要执行以确定光线是否与轴对齐框相交的测试的数量减少。具体地说,在本文所描述的主要示例中,测试的数量减少到四或五(加上最小和最大距离测试)。此外,在如下参考图4c、图4f、图4g和图4j所描述的一些情况下,这些测试中的一个可能是不必要的,在这种情况下,测试的数量可以进一步减少到三或四(加上最小和最大距离测试)。这可以通过利用以下事实来实现:不同于定义物体的平面/面之间可能不具有相关性的一般物体,AABB的平面明显布置成平行对,使得对于每个维度,AABB都具有前向平面和平行的后向平面。对于AABB的一对平行平面,前向(FF)平面是光线将首先与之相交的平面,并且后向(BF)平面是光线将其次与之相交的平面。如果光线与框相交,则所述光线将通过前向平面进入框,并且将通过后向平面离开框。可以通过利用轴对齐框的平面的组织来减少需要执行以确定光线是否与轴对齐框相交的测试的数量。减少需要执行以便确定光线是否与轴对齐框相交的测试的数量可以减少光线跟踪系统中的相交测试模块的延迟、尺寸和/或功耗。
图1示出了包括光线跟踪单元102和存储器104的光线跟踪系统100。光线跟踪单元102包括处理模块106、相交测试模块108和处理逻辑110。相交测试模块108包括一个或多个框相交测试单元112、一个或多个三角形相交测试单元114和光线调整单元116。在操作中,光线跟踪单元102接收定义3D场景内的物体的几何数据。光线跟踪单元102还接收定义要测试相交的光线的光线数据。光线可以是一次光线或二次光线。处理模块106被配置成基于几何数据生成加速结构,并且将加速结构发送至存储器104以存储于其中。在加速结构已被存储在存储器104中之后,相交测试模块108可以从存储器104检索加速结构的节点(包括定义对应于节点的轴对齐框的数据)以针对所检索的节点执行光线相交测试。为了避免一次读取整个加速结构,相交测试模块108基于先前相交测试的结果在每个阶段从存储器104检索来自一层加速结构的框的子集。框相交测试单元112执行相交测试以确定光线是否与对应于加速结构的节点的边界框中的每一个相交(其中错过可以剔除大片的分层加速结构)。如果叶节点相交,则三角形相交测试单元114执行一个或多个三角形相交测试以确定光线与哪个(些)物体(如果存在)相交。相交测试的结果指示光线与场景中的哪一个物体相交,并且结果还可以指示在所述物体上所述光线与所述物体相交的位置,并且还可以指示沿着光线发生相交的距离。将相交测试的结果提供到处理逻辑110。处理逻辑110被配置成处理相交测试的结果以确定表示3D场景的图像的渲染值。由处理逻辑110确定的渲染值可以传回到存储器104以存储在其中,以表示3D场景的图像。
图2a从第一视角示出了两条光线202和214以及框204。如上文所描述,光线202和214,即r(t),可以表示为r(t)=O+Dt,其中O是表示光线原点的向量,并且D是光线的方向向量,其中O=(Ox,Oy,Oz)并且D=(Dx,Dy,Dz)。图2a和图2b示出了坐标系的x、y和z基向量。在此示例中,光线202和214两者具有相同的原点,并且坐标系的原点在光线原点处。这可以通过减去光线原点以平移光线原点和框的位置来实现。框204是相对于坐标系的x、y和z基向量的轴对齐框。坐标系可以是正在渲染的场景的世界空间坐标系,或者坐标系可以是正在渲染的场景内的一组几何形状的示例的示例空间坐标系。框204的拐角206处于位置(xmin,ymin,zmin),并且框的相对拐角208处于位置(xmax,ymax,zmax)。框204表示由三维轴对齐框的每个维度的前向平面和后向平面定义的体积。具体地说,对于x维度,存在:(i)前向平面(包含拐角点206、216、218和222),其具有平行于x轴并指向负x值的法线,其中x维度的前向平面上的任一点具有x分量值xmin;以及(ii)后向平面(包含拐角点208、220、224和226),其具有平行于x轴并指向正x值的法线,其中x维度的后向平面上的任一点具有x分量值xmax。对于y维度,存在:(i)前向平面(包含拐角点206、222、224和226),其具有平行于y轴并指向负y值的法线,其中y维度的前向平面上的任一点具有y分量值ymin;以及(ii)后向平面(包含拐角点208、216、218和220),其具有平行于y轴并指向正y值的法线,其中y维度的后向平面上的任一点具有y分量值ymax。对于z维度,存在:(i)前向平面(包含拐角点206、218、220和224),其具有平行于z轴并指向负z值的法线,其中z维度的前向平面上的任一点具有z分量值zmin;以及(ii)后向平面(包含拐角点208、216、222和226),其具有平行于z轴并指向正z值的法线,其中z维度的后向平面上的任一点具有z分量值zmax。在图2a所示的示例中,光线202和214以及框204都处于坐标系的正卦限中,即,光线202和214的方向向量对于其所有分量值都具有正值,并且xmin、ymin、zmin、xmax、ymax和zmax都为正。
图2b从第二视角示出了光线202和214以及框204,其中第二视角在光线原点处。由于图2b的视角是光线202和214的原点,所以光线仅表现为点。图2b示出了x、y和z轴。在图2a和图2b中,框204的拐角被一致地标记为206、208、216、218、220、222、224和226,以帮助理解如何在两个图中查看框204。
光线202与框204相交。具体地说,光线202在位置210和212处与框的平面相交。在图2b中,交点210和212处于与光线202相同的投影位置。光线202在z维度的框204的前向平面上的位置210处进入框204,所述z维度具有恒定的z分量值zmin。光线202在y维度的框204的后向平面上的位置212处离开框204,所述y维度具有恒定的y分量值ymax。光线214不与框204相交。
图3是执行相交测试以确定光线202是否与3D轴对齐框204相交的方法的流程图。尽管以下描述涉及测试光线202是否与框204相交,但可以应用相同的方法来测试光线214是否与框204相交。
在步骤S302中,在相交测试模块108处获得定义光线202和框204的数据。具体地说,获得定义光线原点和光线方向的分量的数据。定义光线原点的数据可以是光线原点位置的三个分量Ox、Oy和Oz。定义光线方向的数据可包括光线方向的三个分量Dx、Dy和Dz。替代地,定义光线方向的一些不同值可能已经预先计算并存储在存储装置中,使得在步骤S302中,可以读取预先计算值。例如,可以读取三个值以定义光线方向数据,并且这三个值可以是和/>在其它示例中,可以读取不同的预先计算值以定义光线方向,例如,可以读取值/>和Dz,或可以读取值/>和sgn(Dz)。应注意,对于值f,如果f为正,则sgn(f)=+1,并且如果f为负,则sgn(f)=-1。在其它示例中,可以预先计算和读取其它值以便定义光线方向。定义框的数据可以是定义表示框的平面的位置的数据,例如,对于三个维度中的每一个中的前向平面和后向平面中的每一个恒定的分量值。
在步骤S304中,相交测试模块108从定义框的前向平面和后向平面的位置的相应分量减去光线原点的相应分量。步骤S304可以被描述为在光线202和框204上执行平移,使得坐标系的原点在光线202的原点处。从参考图3所描述的方法中的这一点开始,光线的原点是坐标系的原点,即在位置(0,0,0)处。
在步骤S306中,相交测试模块108(例如,光线调整单元116)选择性地反转光线和框的分量的轴,使得Dx≥0,Dy≥0并且Dz≥0。在参考图3所描述的方法中,选择性地反转轴中的零个、一个或多个,使得光线方向进入具有正的Dx、Dy和Dz的卦限中。轴的“反转”可被称为“反射”、“反向”或“求反”,并且可涉及改变维度中沿着所讨论的轴的所有分量值的正负号。定义光线的数据包括光线原点和光线方向,并且定义框的数据包括表示每个维度中的平面的位置的值。应注意,反转奇数个轴会使几何形状的取向反转。在一些示例中,步骤S306还可包含相交测试模块108(例如,通过光线调整单元116)选择性地排列(即,重新布置)轴。轴的排列包括三个轴的旋转、两个轴的转置或同一性(即,不改变轴)。例如,可以排列轴,使得光线方向的主要分量是Dz(即,确保|Dz|≥|Dx|并且|Dz|≥|Dy|)。然而,在参考图3所描述的示例中,排列不是必要的。在步骤S306结束时,相交测试模块108已确定值xmin、ymin、zmin、xmax、ymax和zmax。值xmin、ymin、zmin、xmax、ymax和zmax表示每个维度中的轴对齐框的前向平面和后向平面相对于光线原点的位移。
图2a和图2b示出了在已在步骤S304和S306中平移和选择性地反转光线和框的轴以使得坐标系的原点在光线原点处并且使得Dx≥0,Dy≥0并且Dz≥0之后的光线202和框204。
不同于定义物体的平面/面之间可能不具有相关性的一般物体,定义轴对齐边界框(AABB)的面的平面布置成平行对,使得对于每个维度,AABB都具有前向平面和平行的后向平面。如上文所描述,选择性地反转轴,使得光线方向向量指向空间坐标系的卦限中,所述卦限对于x、y和z具有正值,即,Dx≥0,Dy≥0并且Dz>0。因此,相比于轴的后向平面,轴的前向平面沿着所述轴具有更低的恒定分量值。对于AABB的一对平行平面,前向(FF)平面是光线将首先与之相交的平面(当沿着光线方向从-∞看时),而后向(BF)平面是光线将其次与之相交的平面(当沿着光线方向从-∞看时)。如果光线与框204相交(其中所有xmin、ymin、zmin、xmax、ymax和zmax为正),则所述光线将通过前向平面进入框,并且将通过后向平面离开框。这概括为,如果框放置在光线原点后方(使得对于负t可以发生相交),则前向平面在较低(负值最大)t值处与光线相交,而后向平面在较高(负值最小)t值处与光线相交。还应注意,如果光线指向平行于任何一对平面(即,如果Dx、Dy和Dz中的至少一个为零),则所述光线最多将与这对平面中的一个平面相交,而如果光线不平行于一对平面,则(无限)体积存在唯一的进入点和离开点,分别由这对平面中的前向平面和后向平面界定。
在步骤S308中,相交测试模块108(具体地说,一个或多个框相交测试单元112)标识框的前向平面中的哪一个在沿着光线的最远位置与光线相交。如上文所描述,对于每个维度,框204具有前向平面和后向平面。光线将在与维度的后向平面相交之前与所述维度的前向平面相交(除非光线平行于轴,如下文更详细地描述)。由于在步骤S306中选择性地反转了轴以使得光线被引导到由x、y和z轴定义的空间坐标系的正卦限中,因此维度的前向平面将具有所述维度的最小分量值(例如,xmin、ymin或zmin),并且维度的后向平面将具有所述维度的最大分量值(例如,xmax、ymax或zmax)。如果光线原点位于框的外部,并且如果光线进入和离开框,则光线通过前向平面进入框,并且光线通过后向平面离开框。具体地说,如果光线进入和离开框,则光线通过在沿着光线的最远位置与光线相交的(框的三个前向平面中的)前向平面进入框,并且光线通过在沿着光线的最近位置与光线相交的(三个后向平面中的)后向平面离开框。在平局的情况下,光线在拐角上(如果所有面平局)或在边缘上(如果两个面平局)进入(或离开)多个前向(或后向)平面上的框。此处将短语“在沿着光线的最远位置”理解为意指“在具有最大t值的点处”(在光线方程r(t)=O+Dt中),并且此处将短语“在沿着光线的最近位置”理解为意指“在具有最小t值的点处”(在光线方程r(t)=O+Dt中)。因此,在本文所描述的示例中,短语“在沿着……的最远位置”和“在沿着……的最近位置”是指光线方向向量,而不是意指“离光线原点最远”或“离光线原点最近”。
下文详细描述了用于在步骤S308中标识框的前向平面中的哪一个在沿着光线的最远位置与光线相交的两个示例方法。在下文所描述的示例中,我们提到了i、j和k维度,其可以任何次序或布置对应于坐标系的x、y和z维度。
用于在步骤S308中标识框的前向平面中的哪一个在沿着光线的最远位置与光线 相交的第一方法
在本文所描述的用于执行步骤S308的第一方法中,步骤S308包括:(i)执行第一前向测试以确定光线在沿着光线的最远位置与框的第一前向平面和第二前向平面中的哪一个相交;以及(ii)执行第二前向测试以确定光线在沿着光线的最远位置与框的已确定前向平面和第三前向平面中的哪一个相交,从而标识框的前向平面中的哪一个在沿着光线的最远位置与光线相交。在这种方法中,按顺序执行两个测试。第二个测试使用第一个测试的结果。
如上文所描述,光线202上的点由下式给出:O+Dt,其中O是光线原点,D是光线方向,并且t表示沿着光线距原点的距离。由于步骤S304,重新映射的光线原点的分量全部为零。光线方向向量的分量是Di、Dj和Dk,其中,如上文所描述,i、j和k以任何次序对应于x、y和z维度。如果t1<t2,则光线将在与位置Dt2相交之前与位置Dt1相交。当参数t的值使得Dit=Fi(其中Fi是第i维度的分量值,所述分量值在维度i的前向平面上是恒定的)时,光线将与维度i的前向平面相交;并且当参数t的值使得Djt=Fj(其中Fj是第j维度的分量值,所述分量值在维度j的前向平面上是恒定的),光线将与维度j的前向平面相交。取决于第i维度和第j维度分别对应于x、y或z维度的方式,Fi和Fj值将各自为xmin、ymin和zmin中的一个。因此,如果则光线将在与维度j的前向平面相交之前与维度i的前向平面相交。然而,执行除法操作的代价通常比执行乘法操作高(在延迟、硅面积和/或功耗方面),因此所述方法可以执行比较以将值FiDj与FjDi进行比较,而不是执行比较以将值/>与/>进行比较。这样,操作是交叉相乘的,从而无需在比较中执行除法操作。如果FiDj<FjDi,则确定光线与前向平面j相交的位置沿着光线远于所述光线与前向平面i相交的位置,并且如果FiDj>FjDi,则确定光线与前向平面i相交的位置沿着光线远于所述光线与前向平面j相交的位置。此比较涉及执行两个乘法操作以及比较这两个乘法操作的结果。注意,如果FiDj=FjDi,则光线实际上与平面会合的边缘相交。在这种情况下,将任一平面选择为“更远”同样是有效的,并且所述选择不影响测试过程的有效性,因此可以选择前向平面中的任一个。相对于除法或减法操作,乘法和比较操作在硬件中实施的成本较低,例如,乘法和比较操作可以在硅面积较小的硬件(例如,固定功能电路系统)中实施。产生浮点结果的除法和减法操作以硬件实施的代价相对较高(例如,在硅面积方面)。因此,实施乘法和比较操作以确定是否FiDj>FjDi的硬件实施成本(例如,在硅面积方面)低于实施除法和比较操作以确定是否/>或实施乘法和减法操作以确定是否FiDj-FjDi>0。应注意,已经调整坐标系,使得Di和Dj值≥0(并且稍后将涵盖D=0的特殊情况),使得不需要改变比较运算符“<”和/或“>”以适应Di和Dj的负值的可能性。
图4a和图4b示出了用于确定是否FiDj>FjDi的第一前向测试。具体地说,图4a和图4b示出了从光线原点的视角(类似于图2b)查看的具有三个前向平面和三个后向平面的轴对齐框402。边缘404定义第i维度和第j维度的前向平面相交的线(其示出为虚线)。在用于确定是否FiDj>FjDi的第一前向测试之后,得知光线在由边缘404定义的线的哪一侧通过。因此,此比较可被视为边缘404上的边缘测试。此比较还可被视为(维度i和j的)两个前向平面中的哪一个在沿着光线的最远位置与光线相交的测试。由边缘404定义的线的一侧的虚线区域表示由于确定是否FiDj>FjDi而得知光线不与之相交的区域。换句话说,确定是否FiDj>FjDi可以确定光线通过非虚线区域中的某个地方,到达由边缘404定义的线的另一侧。图4a示出了光线通过由边缘404定义的线的右侧的情况,即FiDj>FjDi,使得维度i的前向平面与光线相交的位置沿着光线远于维度j的前向平面与光线相交的位置。相比之下,图4b示出了光线通过由边缘404定义的线的左侧的情况,即FiDj<FjDi,使得维度j的前向平面与光线相交的位置沿着光线远于维度i的前向平面与光线相交的位置。如上文所提及,如果FiDj=FjDi,则可以选择维度i和j的前向平面中的任一个。例如,如果光线与由边缘404定义的线相交,则所述光线可以被视为在图4a和图4b所示的两个非虚线区域中。
在第二前向测试中,针对其余的前向平面测试在第一前向测试中已确定在沿着光线的最远位置与光线相交的前向平面,以确定框的前向平面中的哪一个在沿着光线的最远位置与光线相交。例如,如果已确定维度i的前向平面与光线相交的位置沿着光线远于维度j的前向平面与光线相交的位置(即,在图4a所示的情况下),则第二前向测试包括确定是否FiDk>FkDi,如图4c和图4d所示。边缘406定义第i维度和第k维度的前向平面相交的线(其示出为虚线)。在用于确定是否FiDk>FkDi的第二前向测试之后,得知光线在由边缘406定义的线的哪一侧通过。因此,此比较可被视为边缘406上的边缘测试。此比较还可被视为(维度i和k的)两个前向平面中的哪一个在沿着光线的最远位置与光线相交的测试。由边缘406定义的线的一侧的虚线区域表示由于确定是否FiDk>FkDi而得知光线不与之相交的区域。换句话说,确定是否FiDk>FkDi可以确定光线通过非虚线区域中的某个地方,到达由边缘406定义的线的另一侧。图4c示出了光线在由边缘406定义的线下方通过的情况,即FiDk<fkDi,使得维度k的前向平面与光线相交的位置沿着光线远于维度i的前向平面与光线相交的位置。因此,在图4c所示的情况下,步骤S308标识维度k的前向平面。相比之下,图4d示出了光线在由边缘406定义的线上方通过的情况,即FiDk>FkDi,使得维度i的前向平面与光线相交的位置沿着光线远于维度k的前向平面与光线相交的位置。因此,在图4d所示的情况下,步骤S308标识维度i的前向平面。如上文所提及,如果FiDk=FkDi,则可以选择维度i和k的前向平面中的任一个。
如果已确定维度j的前向平面与光线相交的位置沿着光线远于维度i的前向平面与光线相交的位置(即,在图4b所示的情况下),则第二前向测试包括确定是否FjDk>FkDj,如图4e和图4f所示。边缘408定义第j维度和第k维度的前向平面相交的线(其示出为虚线)。在用于确定是否FjDk>FkDj的第二前向测试之后,得知光线在由边缘408定义的线的哪一侧通过。因此,此比较可被视为边缘408上的边缘测试。此比较还可被视为(维度j和k的)两个前向平面中的哪一个在沿着光线的最远位置与光线相交的测试。由边缘408定义的线的一侧的虚线区域表示由于确定是否FjDk>FkDj而得知光线不与之相交的区域。换句话说,确定是否FjDk>FkDj可以确定光线通过非虚线区域中的某个地方,到达由边缘408定义的线的另一侧。图4e示出了光线在由边缘408定义的线上方通过的情况,即FjDk>FkDj,使得维度j的前向平面与光线相交的位置沿着光线远于维度k的前向平面与光线相交的位置。因此,在图4e所示的情况中,步骤S308标识维度j的前向平面。相比之下,图4f示出了光线在由边缘408定义的线下方通过的情况,即FjDk<FkDj,使得维度k的前向平面与光线相交的位置沿着光线远于维度j的前向平面与光线相交的位置。因此,在图4f所示的情况中,步骤S308标识维度k的前向平面。如上文所提及,如果FjDk=FkDj,则可以选择维度j和k的前向平面中的任一个。
用于在步骤S308中标识框的前向平面中的哪一个在沿着光线的最远位置与光线 相交的第二方法
在本文所描述的用于执行步骤S308的第二方法中,步骤S308包括:(i)执行第一前向测试以确定光线在沿着光线的最远位置与框的第一前向平面和第二前向平面中的哪一个相交;(ii)执行第二前向测试以确定光线在沿着光线的最远位置与框的第一前向平面和第三前向平面中的哪一个相交;以及(iii)执行第三前向测试以确定光线在沿着光线的最远位置与框的第二前向平面和第三前向平面中的哪一个相交。使用第一前向测试、第二前向测试和第三前向测试的结果来标识框的前向平面中的哪一个在沿着光线的最远位置与光线相交。在此第二方法中,第一前向测试、第二前向测试和第三前向测试彼此独立地执行(即,它们不需要彼此的结果),并且因此,这三个测试可以并行执行。
此第二方法可以被视为执行三个前向测试以测试光线在由三个边缘404、406和408定义的线中的每一个的哪一侧通过。例如,第一前向测试可确定是否FiDj>FjDi。如果FiDj>FjDi,则维度i的前向平面与光线相交的位置沿着光线远于维度j的前向平面与光线相交的位置(例如,光线在由边缘404定义的线的右侧通过);而如果FiDj<FjDi,则维度j的前向平面与光线相交的位置沿着光线远于维度i的前向平面与光线相交的位置(例如,光线在由边缘404定义的线的左侧通过)。第二前向测试可确定是否FiDk>FkDi。如果FiDk>FkDi,则维度i的前向平面与光线相交的位置沿着光线远于维度k的前向平面与光线相交的位置(例如,光线在由边缘406定义的线上方通过);而如果FiDk<FkDi,则维度k的前向平面与光线相交的位置沿着光线远于维度i的前向平面与光线相交的位置(例如,光线在由边缘406定义的线下方通过)。第三前向测试可确定是否FjDk>FkDj。如果FjDk>FkDj,则维度j的前向平面与光线相交的位置沿着光线远于维度k的前向平面与光线相交的位置(例如,光线在由边缘408定义的线上方通过);而如果FjDk<FkDj,则维度k的前向平面与光线相交的位置沿着光线远于维度j的前向平面与光线相交的位置(例如,光线在由边缘408定义的线下方通过)。如上文所描述,可以使用第一前向测试、第二前向测试和第三前向测试的结果来标识框的前向平面中的哪一个在沿着光线的最远位置与光线相交。
在上文所描述的用于执行步骤S308的第一方法中,顺序地执行两个前向测试;而在上文所描述的用于执行步骤S308的第二方法中,执行三个前向测试,并且这三个测试可以并行执行。在一些实施方案中,减少需要执行的测试数量可被视为有益的,因此可以使用用于执行步骤S308的第一方法,因为这涉及执行两个前向测试而不是三个。然而,在一些其它实施方案中,缩短处理管线(例如,减少延迟)可被视为有益的,因此可以使用用于执行步骤S308的第二方法,因为可以一起并行执行步骤S308中的所有前向测试,而不是顺序地执行测试。
在步骤S308结束时,相交测试模块108已经标识了光线在沿着光线的最远位置与框的前向平面中的哪一个相交(例如,如图4c到图4f所示)。
在步骤S310中,相交测试模块108(具体地说,一个或多个框相交测试单元112)确定是否光线202与已标识前向平面相交的位置沿着光线不远于光线与维度子集中的后向平面相交的位置。在此上下文中所使用的术语“子集”是指适当的子集。换句话说,维度子集不包含所有维度。具体地说,维度子集包括前向平面未被标识的两个维度,但维度子集不包括前向平面已被标识的维度。这是因为本发明人已意识到,对于每个维度,光线将在与所述维度的轴对齐框的后向平面相交之前与所述维度的轴对齐框的前向平面相交。这在一定程度上是因为特定维度的轴对齐框的前向平面和后向平面是平行的。因此,在不执行任何测试的情况下,相交测试模块108可以得知光线202在与前向平面已被标识的维度中的后向平面相交之前与已标识前向平面相交。这种实现允许减少需要执行以确定光线是否与轴对齐框相交的测试数量。下文详细描述了用于在步骤S310中确定光线是否在与维度子集中的后向平面相交之前与已标识前向平面相交的两个示例方法。
用于在步骤S310中确定是否光线与已标识前向平面相交的位置沿着光线不远于 光线与维度子集中的后向平面相交的位置的第一方法
在本文所描述的用于执行步骤S310的第一方法中,步骤S310包括:(i)执行第一混合向测试以确定光线在沿着光线的最远位置与框的已标识前向平面和第一后向平面中的哪一个相交,其中框的第一后向平面是维度子集中的第一维度的后向平面;(ii)执行第二混合向测试以确定光线在沿着光线的最远位置与框的已标识前向平面和第二后向平面中的哪一个相交,其中框的第二后向平面是维度子集中的第二维度的后向平面;以及(iii)使用第一混合向测试和第二混合向测试的结果来确定是否光线与已标识前向平面相交的位置沿着光线不远于光线与维度子集中的后向平面相交的位置。在这种方法中,第一混合向测试和第二混合向测试不取决于彼此的结果,因此它们可以并行执行。应注意,术语“前向测试”在本文中用于指代用于比较两个前向平面与光线相交的距离的测试;术语“后向测试”在本文中用于指代用于比较两个后向平面与光线相交的距离的测试;并且术语“混合向测试”在本文中用于指代用于比较前向平面和后向平面与光线相交的距离的测试。
图4g到图4j示出了在步骤S310中在不同情况下执行的测试。例如,图4g和图4j分别是图4c和图4f所示的情况的结果,其中在步骤S308中标识了维度k的前向平面。在这两种情况下,第一混合向测试和第二混合向测试确定光线在由两个边缘410和412定义的线的哪一侧通过。例如,第一混合向测试可确定是否FkDi>BiDk,其中Fk是第k维度的分量值,所述分量值在维度k的所述前向平面上是恒定的,并且Bi是第i维度的分量值,所述分量值在维度i的后向平面上是恒定的。此测试对应于测试光线在由边缘410定义的线的哪一侧通过。如果FkDi>BiDk,则维度k的前向平面与光线相交的位置沿着光线远于维度i的后向平面与光线相交的位置(例如,光线在由边缘410定义的线下方通过),使得光线将错过框;而如果FkDi≤BiDk,则维度k的前向平面与光线相交的位置沿着光线不远于维度i的后向平面与光线相交的位置(例如,光线在由边缘410定义的线上方通过),使得光线可能与框相交。第二混合向测试可确定是否FkDj>BjDk,其中Bj是第j维度的分量值,所述分量值在维度j的后向平面上是恒定的。此测试对应于测试光线在由边缘412定义的线的哪一侧通过。如果FkDj>BjDk,则维度k的前向平面与光线相交的位置沿着光线远于维度j的后向平面与光线相交的位置(例如,光线在由边缘412定义的线下方通过),使得光线将错过框;而如果FkDj≤BjDk,则维度k的前向平面与光线相交的位置沿着光线不远于维度j的后向平面与光线相交的位置(例如,光线在由边缘412定义的线上方通过),使得光线可能与框相交。应注意,在步骤S308中,可能已计算FkDj和FkDi中的一个或两个的值。可以在步骤S310中重新计算这些值,或者可以在步骤S308期间(例如,在寄存器中)保存这些值,使得它们可以在步骤S310中重新使用,而不需要重新计算它们。
为了使光线与框相交,光线与已标识前向平面相交的点与光线原点的距离不得超过光线与框的后向平面相交的点与光线原点的距离。在本文所描述的示例中,不需要执行测试以确定光线是否在与前向平面已被标识的维度的后向平面相交之前与已标识前向平面相交。在一些示例中(例如,如前述段落所描述),第一混合向测试和第二混合向测试两者都必须通过,才能确定光线相对于框的命中,即,执行两个测试以确定在光线与已标识前向平面相交之前,光线不与维度子集中的两个维度的相应后向平面相交。然而,在一些其它示例中,在一些情况下,不需要执行混合向测试中的一个。例如,在图4j所示的情况下,在步骤S310中只需要一个混合向测试(即,测试光线通过由边缘410定义的线的哪一侧)。如果框相交测试单元112可以确定框的几何形状使得仅需要执行一个测试(例如,在图4j所示的情况下而不是在图4g所示的情况下),则在步骤S310中仅需要执行一个测试。
作为另一示例,图4h是图4d所示的情况的结果,其中在步骤S308中标识了维度i的前向平面。在这种情况下,第一混合向测试和第二混合向测试确定光线在由两个边缘414和416定义的线的哪一侧通过。例如,第一混合向测试可确定是否FiDj>BjDi,其中Fi是第i维度的分量值,所述分量值在维度i的所述前向平面上是恒定的,并且Bj是第j维度的分量值,所述分量值在维度j的后向平面上是恒定的。此测试对应于测试光线在由边缘416定义的线的哪一侧通过。如果FiDj>BjDi,则维度i的前向平面与光线相交的位置沿着光线远于维度j的后向平面与光线相交的位置(例如,光线在由边缘416定义的线的右侧通过),使得光线将错过框;而如果FiDj≤BjDi,则维度i的前向平面与光线相交的位置沿着光线不远于维度j的后向平面与光线相交的位置(例如,光线在由边缘416定义的线的左侧通过),使得光线可能与框相交。第二混合向测试可确定是否FiDk>BkDi,其中Bk是第k维度的分量值,所述分量值在维度k的后向平面上是恒定的。此测试对应于测试光线在由边缘414定义的线的哪一侧通过。如果FiDk>BkDi,则维度i的前向平面与光线相交的位置沿着光线远于维度k的后向平面与光线相交的位置(例如,光线在由边缘414定义的线上方通过),使得光线将错过框;而如果FiDk≤BkDi,则维度i的前向平面与光线相交的位置沿着光线不远于维度k的后向平面与光线相交的位置(例如,光线在由边缘414定义的线下方通过),使得光线可能与框相交。应注意,在步骤S308中,可能已计算FiDj和FiDk中的一个或两个的值。可以在步骤S310中重新计算这些值,或者可以在步骤S308期间(例如,在寄存器中)保存这些值,使得它们可以在步骤S310中重新使用,而不需要重新计算它们。
作为另一示例,图4i是图4e所示的情况的结果,其中在步骤S308中标识了维度j的前向平面。在这种情况下,第一混合向测试和第二混合向测试确定光线在由两个边缘418和420定义的线的哪一侧通过。例如,第一混合向测试可确定是否FjDk>BkDj,其中Fj是第j维度的分量值,所述分量值在维度j的所述前向平面上是恒定的。此测试对应于测试光线在由边缘418定义的线的哪一侧通过。如果FjDk>BkDj,则维度j的前向平面与光线相交的位置沿着光线远于维度k的后向平面与光线相交的位置(例如,光线在由边缘418定义的线上方通过),使得光线将错过框;而如果FjDk≤BkDj,则维度j的前向平面与光线相交的位置沿着光线不远于维度k的后向平面与光线相交的位置(例如,光线在由边缘418定义的线下方通过),使得光线可能与框相交。第二混合向测试可确定是否FjDi>BiDj。此测试对应于测试光线在由边缘420定义的线的哪一侧通过。如果FjDi>BiDj,则维度j的前向平面与光线相交的位置沿着光线远于维度i的后向平面与光线相交的位置(例如,光线在由边缘420定义的线的左侧通过),使得光线将错过框;而如果FjDi≤BiDj,则维度j的前向平面与光线相交的位置沿着光线不远于维度i的后向平面与光线相交的位置(例如,光线在由边缘420定义的线的右侧通过),使得光线可能与框相交。应注意,在步骤S308中,可能已计算FjDk和FjDi中的一个或两个的值。可以在步骤S310中重新计算这些值,或者可以在步骤S308期间(例如,在寄存器中)保存这些值,使得它们可以在步骤S310中重新使用,而不需要重新计算它们。
用于在步骤S310中确定是否光线与已标识前向平面相交的位置沿着光线不远于 光线与维度子集中的后向平面相交的位置的第二方法
在本文所描述的用于执行步骤S310的第二方法中,步骤S310包括:(i)执行后向测试以确定光线在沿着光线的最近位置与框的第一后向平面和第二后向平面中的哪一个相交,其中框的第一后向平面和第二后向平面是维度子集中的第一维度和第二维度的后向平面;(ii)执行混合向测试以确定光线在沿着光线的最远位置与框的已标识前向平面和已确定后向平面中的哪一个相交;以及(iii)使用混合向测试的结果来确定是否光线与已标识前向平面相交的位置沿着光线不远于光线与维度子集中的后向平面相交的位置。
换句话说,在这种方法中,确定光线的最近的后向平面,然后相交测试模块108确定最远的前向平面(即,已标识前向平面)是否沿着光线远于最近的后向平面。如果是,则光线错过框。
例如,在图4c和图4f中,在步骤S308中标识了维度k的前向平面。在这两种情况下,后向测试确定维度i和j的后向平面中的哪一个在沿着光线的最近位置与光线相交。后向测试可确定是否BiDj>BjDi。如果BiDj>BjDi,则维度j的后向平面与光线相交的位置沿着光线不远于维度i的后向平面与光线相交的位置;而如果BiDj<BjDi,则维度i的后向平面与光线相交的位置沿着光线不远于维度j的后向平面与光线相交的位置。如果BiDj=BjDi,则可以选择维度i或j的后向平面中的任一个。混合向测试可确定是否FkDnear>BnearDk,其中后向平面被确定为处于沿着光线的最近位置的维度(在这种情况下是i或j)表示为“近”。如果FkDnear>BnearDk,则维度k的前向平面与光线相交的位置沿着光线远于已确定后向平面与光线相交的位置,使得光线将错过框;而如果FkDnear≤BnearDk,则维度k的前向平面与光线相交的位置沿着光线不远于已确定后向平面与光线相交的位置。这意味着光线可能与框相交,这取决于下文所描述的最小和最大距离条件。
在图4d所示的示例中,在步骤S308中标识了维度i的前向平面。在这种情况下,后向测试确定维度j和k的后向平面中的哪一个在沿着光线的最近位置与光线相交。后向测试可确定是否BjDk>BkDj。如果BjDk>BkDj,则维度k的后向平面与光线相交的位置沿着光线不远于维度j的后向平面与光线相交的位置;而如果BjDk<BkDj,则维度j的后向平面与光线相交的位置沿着光线不远于维度k的后向平面与光线相交的位置。如果BjDk=BkDj,则可以选择维度j或k的后向平面中的任一个。混合向测试可确定是否FiDnear>BnearDi,其中后向平面被确定为处于沿着光线的最近位置的维度(在这种情况下是j或k)表示为“近”。如果FiDnear>BnearDi,则维度i的前向平面与光线相交的位置沿着光线远于已确定后向平面与光线相交的位置,使得光线将错过框;而如果FiDnear≤BnearDi,则维度i的前向平面与光线相交的位置沿着光线不远于已确定后向平面与光线相交的位置。这意味着光线可能与框相交,这取决于下文所描述的最小和最大距离条件。
在图4e所示的示例中,在步骤S308中标识了维度j的前向平面。在这种情况下,后向测试确定维度i和k的后向平面中的哪一个在沿着光线的最近位置与光线相交。后向测试可确定是否BiDk>BkDi。如果BiDk>BkDi,则维度k的后向平面与光线相交的位置沿着光线不远于维度i的后向平面与光线相交的位置;而如果BiDk<BkDi,则维度i的后向平面与光线相交的位置沿着光线不远于维度k的后向平面与光线相交的位置。如果BiDk=BkDi,则可以选择维度i或k的后向平面中的任一个。混合向测试可确定是否FjDnear>BnearDj,其中后向平面被确定为处于沿着光线的最近位置的维度(在这种情况下是i或k)表示为“近”。如果FjDnear>BnearDj,则维度j的前向平面与光线相交的位置沿着光线远于已确定后向平面与光线相交的位置,使得光线将错过框;而如果FjDnear≤BnearDj,则维度j的前向平面与光线相交的位置沿着光线不远于已确定后向平面与光线相交的位置。这意味着光线可能与框相交,这取决于下文所描述的最小和最大距离条件。
步骤S308和S310不涉及计算到框的任何平面的相交距离。代替地,步骤S308和S310涉及执行测试(例如,前向测试、后向测试和混合向测试),以针对一对平面确定所述平面中的哪一个与光线相交的位置沿着光线更远。这在本文所描述的示例中通过比较交叉相乘的值来实现,这一操作不涉及计算到框的平面的相交距离。不需要针对由框相交测试单元112执行的框相交测试计算相交距离。到框的平面的相交距离是从光线原点到所述平面上光线与平面相交的点的距离。
一般来说,上文参考步骤S308和S310所描述的被执行以确定光线在沿着光线的最远位置与框的第一平面和第二平面中的哪一个相交的前向测试、后向测试和混合向测试包括将形式Pm,iDj和Pn,jDi的值进行比较,其中Pm,i是第i维度中的第一平面的分量值,其中Pn,j是第j维度中的第二平面的分量值,并且其中Di和Dj分别是光线在第i维度和第j维度中的方向向量的分量。在此符号中,m和n的值指示平面是前向平面还是后向平面,其中对于前向平面,m或n的值可以是0,并且对于后向平面,m或n的值可以是1。例如,P0,i=Fi,P1,i=Bi,P0,j=Fj并且P1,j=Bj。如果Pm,iDj>Pn,jDi,则确定光线与第一平面(Pm,i)相交的位置沿着光线远于所述光线与第二平面(Pn,j)相交的位置,并且如果Pm,iDj<Pn,jDi,则确定光线与第二平面(Pn,j)相交的位置沿着光线远于所述光线与第一平面(Pm,i)相交的位置。这种形式的比较可以通过执行两个乘法操作以及比较操作来执行。这些操作易于在相交测试模块的框相交测试单元112中(例如,以硬件)实施。
如上文所描述,在一些示例中,可存储在步骤S308中确定的一个或多个中间结果,然后在步骤S310中,可读取所存储的一个或多个中间结果以用于确定光线是否在与维度子集中的后向平面相交之前与已标识前向平面相交。如果在步骤S308中标识了第i维度中的前向平面,则中间结果可包括值FiDj和FiDk;如果在步骤S308中标识了第j维度中的前向平面,则中间结果可包括值FjDi和FjDk;并且如果在步骤S308中标识了第k维度中的前向平面,则中间结果可包括值FkDj和FkDi
返回到图3,在步骤S310结束时,相交测试模块已确定如果光线无限长,则光线是否将与轴对齐框相交。此确定用于确定光线是否与轴对齐框相交。同样应注意,所述方法在不执行测试以确定光线是否在与前向平面已被标识的维度中的后向平面相交之前与已标识前向平面相交的情况下,确定光线是否与框相交。以此方式,本文所描述的方法通过使一些测试以先前结果为条件来避免执行一些测试。此外,同样应注意,对于框的任何平面,不直接计算相交距离。
在上文所描述的示例中,步骤S310包含至多两个测试(并且在一些情况下,例如在图4j所示的情况下,有可能在步骤S310中仅执行一个测试)。步骤S308包含两个或三个测试,这取决于采用的方法。因此,如果对步骤S308使用第一方法(其中步骤S308涉及执行两个测试),则测试总数最多为四,并且在一些情况下,例如在图4j所示的情况下,可能仅为三。此外,如果对步骤S308使用第二方法(其中步骤S308涉及执行三个测试),则测试总数最多为五,并且在一些情况下,例如在图4j所示的情况下,可能仅为四。如果在步骤S310中已确定光线与已标识前向平面相交的位置沿着光线远于光线与维度子集中的后向平面相交的位置,则得知光线错过框,并且所述方法从步骤S310进行到步骤S316,在后一步骤中确定光线错过框(即,所述光线不与框相交)。如果在步骤S310中确定光线与已标识前向平面相交的位置沿着光线不远于光线与维度子集中的后向平面相交的位置,则所述方法进行到步骤S312。
在步骤S312中,相交测试模块108(具体地说,框相交测试单元112)确定是否满足最小距离条件和最大距离条件。如果光线距光线原点的最小有效距离小于或等于从光线原点到光线与框内的点的任何交点的最大距离,则满足最小距离条件。换句话说,如果在沿着光线的方向向量行进时光线的起点(由值tmin定义)未超出框,则满足最小距离条件。图5a示出了相交测试模块108确定光线502是否与框504相交的示例。在步骤S310中,将确定光线502在与框504的后向平面相交之前与框504的已标识前向平面相交,使得光线502可以与框504相交。具体地说,光线502在点506处与框504的前向平面相交,并且在点508处与框504的后向平面相交。在一些示例中,tmin=0,使得光线距光线原点的最小距离为零,但在图5a所示的示例中,tmin≠0。应注意,由于在步骤S306中选择性地反转了光线和框的x、y和z分量,因此光线的方向向量将处于正卦限中,即Dx≥0,Dy≥0并且Dz≥0。在图5a所示的示例中,光线距光线原点510的最小有效距离大于从光线原点到光线在点508处与框内的点的任何交点的最大距离。因此,在此示例中,在步骤S312中,将确定不满足最小距离条件。例如,确定是否满足最小距离条件可包括确定是否Bi≥Ditmin,Bj≥Djtmin并且Bk≥Dktmin。如上文所描述,tmin是定义光线距光线原点的最小有效距离的参数。如果Bi≥Ditmin、Bj≥Djtmin和Bk≥Dktmin这三个都为真,则满足最小距离条件;而如果Bi<Ditmin、Bj<Djtmin和Bk<Dktmin中的任一个为真,则不满足最小距离条件。
在一些示例中,tmin不能为负,并且还应注意,由于在步骤S306中选择性地反转了x、y和z分量,因此Di≥0,Dj≥0,并且Dk≥0。因此,在这些示例中,如果框的后向平面中的任一个具有负恒定值,即如果Bi<0,Bj<0或Bk<0(即,如果xmax、ymax或zmax中的任一个为负),则框在光线后方,并且因此,相交测试模块108可以确定光线错过框。此确定可以在步骤S306之后的任何时间执行,并且如果此确定因为框在光线后方而确定光线错过框(这可被称为“手势框(pantomime box)”),则所述方法可以在不执行本文参考步骤S308、S310和S312所描述的一些或全部测试的情况下直接跳转到步骤S316。
在上文使用的更通用符号中,Bi、Bj和Bk可以分别表示为P1,i、P1,j和P1,k。如在对最大距离条件的以下描述之后将变得显而易见的,应注意,在图5a所示的示例中满足最大距离条件,因为光线在点512处距光线原点的最大有效距离大于从光线原点到光线在点506处与框的交点的最小距离。
如果光线距光线原点的最大有效距离大于或等于从光线原点到光线方向向量与框内的点的任何交点的最小距离,则满足最大距离条件。换句话说,如果在沿着光线的方向向量行进时光线的末端(由值tmax定义)不在框前,则满足最大距离条件。图5b示出了相交测试模块108确定光线522是否与框524相交的示例。在步骤S310中,将确定光线522在与框524的后向平面相交之前与框524的已标识前向平面相交,使得光线522可以与框524相交。具体地说,光线522在点526处与框524的前向平面相交,并且在点528处与框524的后向平面相交。在图5b所示的示例中,光线距光线原点532的最大有效距离小于从光线原点到光线522在点526处与框524的前向平面的任何交点的最小距离。因此,在此示例中,在步骤S312中,将确定不满足最大距离条件。应注意,在图5b所示的示例中满足最小距离条件,因为光线在点530处距光线原点的最小有效距离小于从光线原点到光线在点528处与框内的点的任何交点的最大距离。在步骤S308中,已标识框的在沿着光线的最远位置与光线相交的前向平面,并且此标识可用于简化确定是否满足最大距离的过程。例如,如果在步骤S308中标识维度i的前向平面,其中i可以是x、y或z维度中的任一个,则用于确定是否满足最大距离条件的测试包括确定是否Fi≤Ditmax。可以忽略其它两个维度,因为对于最大距离条件,光线与已标识前向平面相交的点才是重要的。如上文所描述,tmax是定义光线距光线原点的最大有效距离的参数。如果Fi≤Ditmax,则满足最大距离条件;而如果Fi>Ditmax,则不满足最大距离条件。在上文使用的更通用符号中,Fi可以表示为P0,i
图5c示出了相交测试模块108确定光线542是否与框544相交的示例。在步骤S310中,将确定光线542在与框544的后向平面相交之前与框544的已标识前向平面相交,使得光线542可以与框544相交。具体地说,光线542在点546处与框544的前向平面相交,并且在点548处与框544的后向平面相交。在图5c所示的示例中,满足最小距离条件,因为光线在点550处距光线原点的最小有效距离小于从光线原点到光线在点548处与框的体积的任何交点的最大距离。并且,在图5c所示的示例中,满足最大距离条件,因为光线在点552处距光线原点的最大有效距离大于从光线原点到光线在点546处与框的体积的任何交点的最小距离。
在步骤S312中执行的用于确定是否满足最大距离条件和用于确定是否满足最小距离条件的测试可以与在步骤S310中执行的用于确定光线是否在与维度子集中的后向平面相交之前与已标识前向平面相交的测试并行执行。这是因为在步骤S312中执行的测试不取决于在步骤S310中执行的测试的结果。并行执行测试在框相交测试单元112以硬件(例如,在固定功能电路系统中)实施的实施方案中可能特别有益。在(例如,框相交测试单元112在软件中,例如在处理单元上执行的计算机代码的模块中实施的)其它示例中,可以在步骤S310和S312中按顺序执行测试,其中仅当第一测试未确定光线相对于框错过时,才执行第二测试,并且仅当第一测试和第二测试未确定光线相对于框错过时,才执行第三测试,以此类推。这种顺序方法允许在不必执行所有测试的情况下确定错过(如果顺序中较早的测试已经确定了光线相对于框错过)。
使用步骤S312中关于是否满足最小距离条件和最大距离条件的确定来确定光线是否与轴对齐框相交。如果不满足最小距离条件和最大距离条件中的一个或两个(例如,在图5a和图5b所示的示例中),则所述方法从步骤S312进行到步骤S316,在后一步骤中,相交测试模块108(具体地说,框相交测试单元112)确定光线不与框相交。然而,如果满足最小距离条件和最大距离条件两者(例如,在图5c所示的示例中),则所述方法从步骤S312进行到步骤S314,在后一步骤中,相交测试模块108(具体地说,框相交测试单元112)确定光线与框相交。应注意,为了实现步骤S314,即,为了使相交测试模块确定光线与轴对齐框相交,将确定光线与框的已标识前向平面相交的位置沿着光线不远于光线与框的后向平面相交的位置(在步骤S310中),并且将确定满足最大距离和最小距离条件(在步骤S312中)。
在步骤S314和/或S316之后,方法进行到步骤S318,在所述步骤中,相交测试模块108输出确定光线是否与框相交的结果的指示。此指示可以是二进制指示(例如,一位标志),以指示光线相对于框的‘命中’或‘错过’。在其它示例中,指示可以具有不同的形式。在步骤S320中,(例如,处理逻辑110)在光线跟踪系统100中使用输出的指示来渲染3D场景的图像。例如,框可以界定要在场景中渲染的几何形状。如果框对应于要用于在光线跟踪系统中执行相交测试的分层加速结构的节点,则可以使用光线是否与框相交的指示来确定是否测试光线与对应于节点中对应于相交框的任何子节点的框相交。例如,如果光线与对应于父节点的框相交,则测试光线与对应于所述父节点的子节点的框的相交,而如果光线不与对应于父节点的框相交,则不测试光线与对应于所述父节点的子节点的框的相交。如果光线与对应于分层加速结构的叶节点的框相交,则可以测试光线与叶节点所参考的任何几何形状(例如,三角形或其它图元)的相交。
在图3所示的示例中,在步骤S302中读取定义光线和框的数据,然后在步骤S304中从定义框的位置的数据中减去光线原点的分量,然后在步骤S306中选择性地反转光线和框的x、y和z分量,使得Dx≥0,Dy≥0并且Dz≥0。然而,这三个步骤(步骤S302到S306)的排序在不同示例中可能不同。例如,可以在相交测试模块108获得数据之前选择性地反转光线和框数据的x、y和z分量。在读入数据之前这样选择性地反转数据的x、y和z分量以使得在读入数据之前得知Dx≥0,Dy≥0并且Dz≥0可能是有用的。这允许对数据执行一定的预先计算,并且预先计算的数据可以在被读入相交测试模块108中之前存储在存储装置(例如,光线跟踪单元102上的存储器)中。这意味着此预先计算中涉及的处理可以对光线执行一次,并且如果光线涉及多个相交测试,则多次使用。此外,在一些示例中,在相交测试模块108获得数据之前,可以在预处理阶段从定义框的平面的位置的分量减去光线原点的分量。
上文描述了在光线跟踪系统中使用的方法,其不会将任何误差引入其计算中。然而,一些计算,例如使用浮点格式的数字执行的计算,可能会引入舍入误差。这在一定程度上是因为可以表示浮点数的精度因不同量值的数字而不同。顺序浮点数之间的‘步长’通常与浮点值的量值大致成比例(有一些例外,例如在零附近)。在一些示例中,相交测试模块108的框相交测试单元112被配置成在测试AABB时保守地操作。具体地说,可以进行在步骤S308、S310和S312中执行的测试以保守地操作。这意味着所述方法有时可能会给出‘错误肯定’结果(即,所述方法有时可能会指示光线与框相交,即使所述光线不相交),但所述方法不会给出‘错误否定’结果(即,所述方法不会在光线实际上与框相交时指示光线不与框相交)。错误肯定结果不会将渲染误差引入光线跟踪过程中,因为如果确定光线与框相交,则将针对由框(例如,对应于子节点的另一框,或某一几何形状)界定的另一物体测试所述光线的相交,因此最终将发现所述光线不与所述另一物体相交。错误肯定结果可能因执行的测试数量增加而降低相交测试过程的效率,但这是可接受的,前提是作为错误肯定结果(不是正确肯定结果)的肯定结果的比例较低,例如小于1%。因此,在光线框相交测试过程中,少量的错误肯定结果是可接受的。然而,‘错误否定’结果可能会将渲染误差引入光线跟踪过程中,因为如果确定光线错过框,则即使光线实际上可能与由框界定的另一物体相交,也不会测试所述光线与所述另一物体的相交。渲染误差通常是不可接受的,因此在光线框相交测试过程中,错误否定结果是不可接受的。
因此,在一些示例中,通过朝向-∞舍入针对前向平面确定的值并朝向+∞舍入针对后向平面确定的值来保守地执行光线是否与轴对齐框相交的确定,使得在完全准确的确定原本将确定光线与轴对齐框相交的情况下,通过在确定过程中舍入而引入的误差不会引起光线不与轴对齐框相交的确定。例如,涉及步骤S308、S310和/或S312中的前向平面的乘法(例如,FiDj或FjDk,作为两个示例)朝向较小值被舍入。类似地,在步骤S304中执行的减法应针对前向平面的位置向下舍入。然而,涉及步骤S308、S310和/或S312中的后向平面的乘法(例如,BiDj或BjDk,作为两个示例)朝向较大值被舍入。类似地,在步骤S304中执行的减法应针对后向平面的位置向上舍入。
在一些示例中,顶层加速结构(TLAS)可用于表示世界空间坐标系中的场景。TLAS的节点对应于表示场景中的区域的框(例如,与世界空间坐标系的轴对齐的AABB)。可以定义(例如,表示物体的)一组几何形状,并且可以将所述一组几何形状的一个或多个示例插入场景内的相应位置中。在示例空间坐标系中定义所述一组几何形状,并且利用对应于表示示例空间中的区域的框(例如,与示例空间坐标系的轴对齐的AABB)的节点创建底层加速结构(BLAS)。TLAS的一个或多个节点可以参考BLAS的节点。光线首先横穿TLAS的节点,其中如果发现光线与参考BLAS的节点的节点相交,则可以测试光线与对应于BLAS的节点的框的相交。相交测试模块108(例如,光线调整单元116)可以将光线变换到示例空间坐标系中,以便测试与对应于BLAS的节点的框的相交。本文所描述的框可以对应于TLAS的节点(即,框可以是世界空间中的轴对齐框),或者本文所描述的框可以对应于BLAS的节点(即,框可以是示例空间中的轴对齐框)。
如果光线方向向量的分量之一为零(即,如果Dx=0,Dy=0或Dz=0),则光线平行于在所述维度中的框的前向平面和后向平面。当平面平行于光线时,有两种情况要考虑:光线完全位于由平面定义的半空间外部(其自动指示错过)或光线完全位于由平面定义的半空间内部。因为框测试是保守的,所以光线处于“平面中”的情况被视为“在内部”。
在Di=0的情况下,其中i是x、y或z中的任一个,如果Fi≤0,则光线完全位于第i维度的框的前向平面内部;而如果Fi>0,则光线完全位于第i维度的框的前向平面外部。此外,如果Bi≥0,则光线完全位于第i维度的框的后向平面内部;而如果Bi<0,则光线完全位于第i维度的框的后向平面外部。如果确定光线完全位于前向平面和后向平面中的一个或两个外部,则相交测试模块108确定光线不与框相交。可以在步骤S308之前执行此测试,并且如果此测试确定光线平行于框的平面且完全位于所述平面外部,则所述方法可以例如在不执行步骤S308、S310或S312的一个或多个测试的情况下直接进行到步骤S316。然而,如果光线平行于第i维度中的框的平面但完全位于第i维度的前向平面和后向平面两者内部,则光线仍可以与框相交。在步骤S308期间,如果利用另一前向平面测试前向平行平面以查看哪一个平面在沿着光线的最远位置与光线相交,则选择另一前向平面。如果在步骤S308中进行比较的两个前向平面是平行的,则可以选择任一平面。除非光线方向无效,否则所有三个前向平面不可能都平行。在步骤S310期间,可忽略后向平行平面,即,认为光线在与后向平行平面相交之前与前向平面相交。
在上文所描述的示例中,(在步骤S308中)标识前向平面,然后(在步骤S310中)确定是否已标识前向平面与光线相交的位置沿着光线不远于光线与维度子集的同光线相交的后向平面相交的位置。在替代实施例中,相同的原理可以应用于标识后向平面然后确定已标识后向平面是否在维度子集的前向平面与光线相交之前与光线相交的方法。参考图6所示的流程图和图7a到图7j中所示的图示来描述这些替代实施例的示例。
图6是执行相交测试以确定光线202是否与3D轴对齐框204相交的方法的流程图。尽管以下描述涉及测试光线202是否与框204相交,但可以应用相同的方法来测试光线214是否与框204相交。
步骤S602、S604和S606与上文参考图3的流程图所描述的步骤S302、S304和S306相同。因此,在步骤S602中,在相交测试模块108处获得定义光线202和框204的数据。具体地说,获得定义光线原点和光线方向的分量的数据。定义框的数据可以是定义表示框的平面的位置的数据,例如,对于三个维度中的每一个中的前向平面和后向平面中的每一个恒定的分量值。在步骤S604中,相交测试模块108从定义框的前向平面和后向平面的位置的相应分量减去光线原点的相应分量。在步骤S606中,相交测试模块108(例如,光线调整单元116)选择性地反转光线和框的分量的轴,使得Dx≥0,Dy≥0并且Dz≥0。在步骤S606结束时,相交测试模块108已确定值xmin、ymin、zmin、xmax、ymax和zmax
在步骤S608中,相交测试模块108(具体地说,一个或多个框相交测试单元112)标识框的后向平面中的哪一个在沿着光线的最近位置与光线相交。下文详细描述了用于在步骤S608中标识框的后向平面中的哪一个在沿着光线的最近位置与光线相交的两个示例方法。
用于在步骤S608中标识框的后向平面中的哪一个在沿着光线的最近位置与光线 相交的第一方法
在本文所描述的用于执行步骤S608的第一方法中,步骤S608包括:(i)执行第一后向测试以确定光线在沿着光线的最近位置与框的第一后向平面和第二后向平面中的哪一个相交;以及(ii)执行第二后向测试以确定光线在沿着光线的最近位置与框的已确定后向平面和第三后向平面中的哪一个相交,从而标识框的后向平面中的哪一个在沿着光线的最近位置与光线相交。在这种方法中,按顺序执行两个测试。第二个测试使用第一个测试的结果。
图7a和图7b示出了用于确定是否BiDj>BjDi的第一后向测试。具体地说,图7a和图7b示出了从光线原点的视角(类似于图2b和图4a到图4j)查看的具有三个前向平面和三个后向平面的轴对齐框702。边缘704定义第i维度和第j维度的后向平面相交的线(其示出为虚线)。在用于确定是否BiDj>BjDi的第一后向测试之后,得知光线在由边缘704定义的线的哪一侧通过。因此,此比较可被视为边缘704上的边缘测试。此比较还可被视为(维度i和j的)两个后向平面中的哪一个在沿着光线的最近位置与光线相交的测试。由边缘704定义的线的一侧的虚线区域表示由于确定是否BiDj>BjDi而得知光线不相交的区域。换句话说,确定是否BiDj>BjDi可以确定光线通过非虚线区域中的某个地方,到达由边缘704定义的线的另一侧。图7a示出了光线通过由边缘704定义的线的右侧的情况,即BiDj>BjDi,使得维度j的后向平面与光线相交的位置沿着光线不远于维度i的后向平面与光线相交的位置。相比之下,图7b示出了光线通过由边缘704定义的线的左侧的情况,即BiDj<BjDi,使得维度i的后向平面与光线相交的位置沿着光线不远于维度j的后向平面与光线相交的位置。如果BiDj=BjDi,则可以选择维度i和j的后向平面中的任一个。例如,如果光线与由边缘704定义的线相交,则所述光线可以被视为在图7a和图7b所示的两个非虚线区域中。
在第二后向测试中,针对其余的后向平面测试在第一后向测试中已确定在沿着光线的最近位置与光线相交的后向平面,以确定框的后向平面中的哪一个在沿着光线的最近位置与光线相交。例如,如果已确定维度j的后向平面与光线相交的位置沿着光线不远于维度i的后向平面与光线相交的位置(即,在图7a所示的情况下),则第二后向测试包括确定是否BjDk>BkDj,如图7c和图7d所示。边缘706定义第j维度和第k维度的后向平面相交的线(其示出为虚线)。在用于确定是否BjDk>BkDj的第二后向测试之后,得知光线在由边缘706定义的线的哪一侧通过。因此,此比较可被视为边缘706上的边缘测试。此比较还可被视为(维度j和k的)两个后向平面中的哪一个在沿着光线的最近位置与光线相交的测试。图7c示出了光线在由边缘706定义的线下方通过的情况,即BjDk<BkDj,使得维度j的后向平面与光线相交的位置沿着光线不远于维度k的后向平面与光线相交的位置。因此,在图7c所示的情况下,步骤S608标识维度j的后向平面。相比之下,图7d示出了光线在由边缘706定义的线上方通过的情况,即BjDk>BkDj,使得维度k的后向平面与光线相交的位置沿着光线不远于维度j的后向平面与光线相交的位置。因此,在图7d所示的情况下,步骤S608标识维度k的后向平面。如果BjDk=BkDj,则可以选择维度j和k的后向平面中的任一个。
如果已确定维度i的后向平面与光线相交的位置沿着光线不远于维度j的后向平面与光线相交的位置(即,在图7b所示的情况下),则第二后向测试包括确定是否BiDk>BkDi,如图7e和图7f所示。边缘708定义第i维度和第k维度的后向平面相交的线(其示出为虚线)。在用于确定是否BiDk>BkDi的第二后向测试之后,得知光线在由边缘708定义的线的哪一侧通过。因此,此比较可被视为边缘708上的边缘测试。此比较还可被视为(维度i和k的)两个后向平面中的哪一个在沿着光线的最近位置与光线相交的测试。图7e示出了光线在由边缘708定义的线上方通过的情况,即BiDk>BkDi,使得维度k的后向平面与光线相交的位置沿着光线不远于维度i的后向平面与光线相交的位置。因此,在图7e所示的情况下,步骤S608标识维度k的后向平面。相比之下,图7f示出了光线在由边缘708定义的线下方通过的情况,即BiDk<BkDi,使得维度i的后向平面与光线相交的位置沿着光线不远于维度k的后向平面与光线相交的位置。因此,在图7f所示的情况下,步骤S608标识维度i的后向平面。如果BiDk=BkDi,则可以选择维度i和k的后向平面中的任一个。
用于在步骤S608中标识框的后向平面中的哪一个在沿着光线的最近位置与光线 相交的第二方法
在本文所描述的用于执行步骤S608的第二方法中,步骤S608包括:(i)执行第一后向测试以确定光线在沿着光线的最近位置与框的第一后向平面和第二后向平面中的哪一个相交;(ii)执行第二后向测试以确定光线在沿着光线的最近位置与框的第一后向平面和第三后向平面中的哪一个相交;以及(iii)执行第三后向测试以确定光线在沿着光线的最近位置与框的第二后向平面和第三后向平面中的哪一个相交。使用第一后向测试、第二后向测试和第三后向测试的结果来标识框的后向平面中的哪一个在沿着光线的最近位置与光线相交。在此第二方法中,第一后向测试、第二后向测试和第三后向测试彼此独立地执行(即,它们不需要彼此的结果),并且因此,这三个测试可以并行执行。
此第二方法可以被视为执行三个后向测试以测试光线在由三个边缘704、706和708定义的线中的每一个的哪一侧通过。例如,第一后向测试可确定是否BiDj>BjDi。如果BiDj>BjDi,则维度j的后向平面与光线相交的位置沿着光线不远于维度i的后向平面与光线相交的位置(例如,光线在由边缘704定义的线的右侧通过);而如果BiDj<BjDi,则维度i的后向平面与光线相交的位置沿着光线不远于维度j的后向平面与光线相交的位置(例如,光线在由边缘704定义的线的左侧通过)。第二后向测试可确定是否BiDk>BkDi。如果BiDk>BkDi,则维度k的后向平面与光线相交的位置沿着光线不远于维度i的后向平面与光线相交的位置(例如,光线在由边缘708定义的线上方通过);而如果BiDk<BkDi,则维度i的后向平面与光线相交的位置沿着光线不远于维度k的后向平面与光线相交的位置(例如,光线在由边缘708定义的线下方通过)。第三后向测试可确定是否BjDk>BkDj。如果BjDk>BkDj,则维度k的后向平面与光线相交的位置沿着光线不远于维度j的后向平面与光线相交的位置(例如,光线在由边缘706定义的线上方通过);而如果BjDk<BkDj,则维度j的后向平面与光线相交的位置沿着光线不远于维度k的后向平面与光线相交的位置(例如,光线在由边缘706定义的线下方通过)。如上文所描述,可以使用第一后向测试、第二后向测试和第三后向测试的结果来标识框的后向平面中的哪一个在沿着光线的最近位置与光线相交。
在上文所描述的用于执行步骤S608的第一方法中,顺序地执行两个后向测试;而在上文所描述的用于执行步骤S608的第二方法中,执行三个后向测试,并且这三个测试可以并行执行。在一些实施方案中,减少需要执行的测试数量可被视为有益的,因此可以使用用于执行步骤S608的第一方法,因为这涉及执行两个后向测试而不是三个。然而,在一些其它实施方案中,缩短处理管线(例如,减少延迟)可被视为有益的,因此可以使用用于执行步骤S608的第二方法,因为可以一起并行执行步骤S608中的所有后向测试,而不是顺序地执行测试。
在步骤S608结束时,相交测试模块108已经标识了光线在沿着光线的最近位置与框的后向平面中的哪一个相交(例如,如图7c到图7f所示)。
在步骤S610中,相交测试模块108(具体地说,一个或多个框相交测试单元112)确定是否光线与维度子集中的前向平面相交的位置沿着光线不远于光线与已标识后向平面相交的位置。维度子集包括后向平面未被标识的两个维度,但维度子集不包括后向平面已被标识的维度。这是因为如上文所描述,本发明人已意识到,对于每个维度,光线将在与所述维度的轴对齐框的后向平面相交之前与所述维度的轴对齐框的前向平面相交。这在一定程度上是因为特定维度的轴对齐框的前向平面和后向平面是平行的。因此,在不执行任何测试的情况下,相交测试模块108可以得知光线202与已标识后向平面相交的位置沿着光线远于所述光线与后向平面已被标识的维度中的前向平面相交的位置。这种实现允许减少需要执行以确定光线是否与轴对齐框相交的测试数量。下文详细描述了用于在步骤S610中确定光线是否在与已标识后向平面相交之前与维度子集中的前向平面相交的两个示例方法。
用于在步骤S610中确定是否光线与维度子集中的前向平面相交的位置沿着光线 不远于光线与已标识后向平面相交的位置的第一方法
在本文所描述的用于执行步骤S610的第一方法中,步骤S610包括:(i)执行第一混合向测试以确定光线在沿着光线的最远位置与框的已标识后向平面和第一前向平面中的哪一个相交,其中框的第一前向平面是维度子集中的第一维度的前向平面;(ii)执行第二混合向测试以确定光线在沿着光线的最远位置与框的已标识后向平面和第二前向平面中的哪一个相交,其中框的第二前向平面是维度子集中的第二维度的前向平面;以及(iii)使用第一混合向测试和第二混合向测试的结果来确定是否光线与维度子集中的前向平面相交的位置沿着光线不远于光线与已标识后向平面相交的位置。在这种方法中,第一混合向测试和第二混合向测试不取决于彼此的结果,因此它们可以并行执行。
图7g到图7j示出了在步骤S610中在不同情况下执行的测试。例如,图7g是图7c所示的情况的结果,其中在步骤S608中标识了维度j的后向平面。在这种情况下,第一混合向测试和第二混合向测试确定光线在由两个边缘710和712定义的线的哪一侧通过。例如,第一混合向测试可确定是否FkDj>BjDk。此测试对应于测试光线在由边缘710定义的线的哪一侧通过。如果FkDj>BjDk,则维度k的前向平面与光线相交的位置沿着光线远于维度j的后向平面与光线相交的位置(例如,光线在由边缘710定义的线下方通过),使得光线将错过框;而如果FkDj≤BjDk,则维度k的前向平面与光线相交的位置沿着光线不远于维度j的后向平面与光线相交的位置(例如,光线在由边缘710定义的线上方通过),使得光线可能与框相交。第二混合向测试可确定是否FiDj>BjDi。此测试对应于测试光线在由边缘712定义的线的哪一侧通过。如果FiDj>BjDi,则维度i的前向平面与光线相交的位置沿着光线远于维度j的后向平面与光线相交的位置(例如,光线在由边缘712定义的线的右侧通过),使得光线将错过框;而如果FiDj≤BjDi,则维度i的前向平面与光线相交的位置沿着光线不远于维度j的后向平面与光线相交的位置(例如,光线在由边缘712定义的线的左侧通过),使得光线可能与框相交。应注意,在步骤S608中,可能已计算BjDk和BjDi中的一个或两个的值。可以在步骤S610中重新计算这些值,或者可以在步骤S608期间(例如,在寄存器中)保存这些值,使得它们可以在步骤S610中重新使用,而不需要重新计算它们。
作为另一示例,图7h和图7i分别是图7d和图7e所示的情况的结果,其中在步骤S608中标识了维度k的后向平面。在这两种情况下,第一混合向测试和第二混合向测试确定光线在由两个边缘714和716定义的线的哪一侧通过。例如,第一混合向测试可确定是否FiDk>BkDi。此测试对应于测试光线在由边缘714定义的线的哪一侧通过。如果FiDk>BkDi,则维度i的前向平面与光线相交的位置沿着光线远于维度k的后向平面与光线相交的位置(例如,光线在由边缘714定义的线上方通过),使得光线将错过框;而如果FiDk≤BkDi,则维度i的前向平面与光线相交的位置沿着光线不远于维度k的后向平面与光线相交的位置(例如,光线在由边缘714定义的线下方通过),使得光线可能与框相交。第二混合向测试可确定是否FjDk>BkDj。此测试对应于测试光线在由边缘716定义的线的哪一侧通过。如果FjDk>BkDj,则维度j的前向平面与光线相交的位置沿着光线远于维度k的后向平面与光线相交的位置(例如,光线在由边缘716定义的线上方通过),使得光线将错过框;而如果FjDk≤BkDj,则维度j的前向平面与光线相交的位置沿着光线不远于维度k的后向平面与光线相交的位置(例如,光线在由边缘716定义的线下方通过),使得光线可能与框相交。应注意,在步骤S608中,可能已计算BkDi和BkDj中的一个或两个的值。可以在步骤S610中重新计算这些值,或者可以在步骤S608期间(例如,在寄存器中)保存这些值,使得它们可以在步骤S610中重新使用,而不需要重新计算它们。
为了使光线与框相交,光线与维度子集的两个前向平面相交的点与光线原点的距离不得超过光线与框的已标识后向平面相交的点与光线原点的距离。在本文所描述的示例中,不需要执行测试以确定光线是否在与后向平面已被标识的维度的前向平面相交之前与已标识后向平面相交。在一些示例中(例如,如前述段落所描述),第一混合向测试和第二混合向测试两者都必须通过,才能确定光线相对于框的命中,即,执行两个测试以确定在光线与维度子集中的两个维度的相应前向平面相交之前,光线不与已标识后向平面相交。然而,在一些其它示例中,在一些情况下,不需要执行混合向测试中的一个。例如,在图7h所示的情况下,在步骤S610中只需要一个混合向测试(即,测试光线通过由边缘714定义的线的哪一侧)。如果框相交测试单元112可以确定框的几何形状使得仅需要执行一个测试(例如,在图7h所示的情况下而不是在图7i所示的情况下),则在步骤S610中仅需要执行一个测试。
作为另一示例,图7j是图7f所示的情况的结果,其中在步骤S608中标识了维度i的后向平面。在这种情况下,第一混合向测试和第二混合向测试确定光线在由两个边缘718和720定义的线的哪一侧通过。例如,第一混合向测试可确定是否FjDi>BiDj。此测试对应于测试光线在由边缘718定义的线的哪一侧通过。如果FjDi>BiDj,则维度j的前向平面与光线相交的位置沿着光线远于维度i的后向平面与光线相交的位置(例如,光线在由边缘718定义的线的左侧通过),使得光线将错过框;而如果FjDi≤BiDj,则维度j的前向平面与光线相交的位置沿着光线不远于维度i的后向平面与光线相交的位置(例如,光线在由边缘718定义的线的右侧通过),使得光线可能与框相交。第二混合向测试可确定是否FkDi>BiDk。此测试对应于测试光线在由边缘720定义的线的哪一侧通过。如果FkDi>BiDk,则维度k的前向平面与光线相交的位置沿着光线远于维度i的后向平面与光线相交的位置(例如,光线在由边缘720定义的线下方通过),使得光线将错过框;而如果FkDi≤BiDk,则维度k的前向平面与光线相交的位置沿着光线不远于维度i的后向平面与光线相交的位置(例如,光线在由边缘720定义的线上方通过),使得光线可能与框相交。应注意,在步骤S608中,可能已计算BiDj和BiDk中的一个或两个的值。可以在步骤S610中重新计算这些值,或者可以在步骤S608期间(例如,在寄存器中)保存这些值,使得它们可以在步骤S610中重新使用,而不需要重新计算它们。
用于在步骤S610中确定是否光线与维度子集中的前向平面相交的位置沿着光线 不远于光线与已标识后向平面相交的位置的第二方法
在本文所描述的用于执行步骤S610的第二方法中,步骤S610包括:(i)执行前向测试以确定光线在沿着光线的最远位置与框的第一前向平面和第二前向平面中的哪一个相交,其中框的第一前向平面是维度子集中的第一维度的前向平面,并且框的第二前向平面是维度子集中的第二维度的前向平面;(ii)执行混合向测试以确定光线在沿着光线的最远位置与框的已标识后向平面和已确定前向平面中的哪一个相交;以及(iii)使用混合向测试的结果来确定是否光线与维度子集中的前向平面相交的位置沿着光线不远于光线与已标识后向平面相交的位置。
换句话说,在这种方法中,确定光线的最远的前向平面,然后相交测试模块108确定最远的前向平面是否沿着光线远于最近的后向平面(即,已标识后向平面)。如果是,则光线错过框。
例如,在图7c中,在步骤S608中标识了维度j的后向平面。在这种情况下,前向测试确定维度i和k的前向平面中的哪一个在沿着光线的最远位置与光线相交。前向测试可确定是否FiDk>FkDi。如果FiDk>FkDi,则维度i的前向平面与光线相交的位置沿着光线远于维度k的前向平面与光线相交的位置;而如果FiDk<FkDi,则维度k的前向平面与光线相交的位置沿着光线远于维度i的前向平面与光线相交的位置。如果FiDk=FkDi,则可以选择维度i或k的前向平面中的任一个。混合向测试可确定是否BjDfar>FfarDj,其中前向平面被确定为在沿着光线的最远位置的维度(在这种情况下是i或k)表示为“远”。如果BjDfar<FfarDj,则已确定前向平面与光线相交的位置沿着光线远于维度j的后向平面与光线相交的位置,使得光线将错过框;而如果BjDfar≥FfarDj,则已确定前向平面与光线相交的位置沿着光线不远于维度j的后向平面与光线相交的位置。这意味着光线可能与框相交,这取决于最小和最大距离条件。
在图7d和图7e所示的示例中,在步骤S608中标识了维度k的后向平面。在这两种情况下,前向测试确定维度i和j的前向平面中的哪一个在沿着光线的最远位置与光线相交。前向测试可确定是否FiDj>FjDi。如果FiDj>FjDi,则维度i的前向平面与光线相交的位置沿着光线远于维度j的前向平面与光线相交的位置;而如果FiDj<FjDi,则维度j的前向平面与光线相交的位置沿着光线远于维度i的前向平面与光线相交的位置。如果FiDj=FjDi,则可以选择维度i或j的前向平面中的任一个。混合向测试可确定是否BkDfar>FfarDk,其中前向平面被确定为在沿着光线的最远位置的维度(在这种情况下是i或j)表示为“远”。如果BkDfar<FfarDk,则已确定前向平面与光线相交的位置沿着光线远于维度k的后向平面与光线相交的位置,使得光线将错过框;而如果BkDfar≥FfarDk,则已确定前向平面与光线相交的位置沿着光线不远于维度k的后向平面与光线相交的位置。这意味着光线可能与框相交,这取决于最小和最大距离条件。
在图7f所示的示例中,在步骤S608中标识了维度i的后向平面。在这种情况下,前向测试确定维度j和k的前向平面中的哪一个在沿着光线的最远位置与光线相交。前向测试可确定是否FjDk>FkDj。如果FjDk>FkDj,则维度j的前向平面与光线相交的位置沿着光线远于维度k的前向平面与光线相交的位置;而如果FjDk<FkDj,则维度k的前向平面与光线相交的位置沿着光线远于维度j的前向平面与光线相交的位置。如果FjDk=FkDj,则可以选择维度j或k的前向平面中的任一个。混合向测试可确定是否BiDfar>FfarDi,其中前向平面被确定为在沿着光线的最远位置的维度(在这种情况下是j或k)表示为“远”。如果BiDfar<FfarDi,则已确定前向平面与光线相交的位置沿着光线远于维度i的后向平面与光线相交的位置,使得光线将错过框;而如果BiDfar≥FfarDi,则已确定前向平面与光线相交的位置沿着光线不远于维度i的后向平面与光线相交的位置。这意味着光线可能与框相交,这取决于最小和最大距离条件。
步骤S608和S610不涉及计算到框的任何平面的相交距离。代替地,步骤S608和S610涉及执行测试(例如,前向测试、后向测试和混合向测试),以针对一对平面确定所述平面中的哪一个与光线相交的位置沿着光线更远。这在本文所描述的示例中通过比较交叉相乘的值来实现,这一操作不涉及计算到框的平面的相交距离。不需要针对由框相交测试单元112执行的框相交测试计算相交距离。
如上文所描述,在一些示例中,可存储在步骤S608中确定的一个或多个中间结果,然后在步骤S610中,可读取所存储的一个或多个中间结果以用于在步骤S610中确定光线是否在其与已标识后向平面相交之前与维度子集中的前向平面相交。
返回到图6,在步骤S610结束时,相交测试模块已确定如果光线无限长,则光线是否将与轴对齐框相交。此确定用于确定光线是否与轴对齐框相交。应注意,所述方法在不执行测试以确定光线是否在与已标识后向平面相交之前与后向平面已被标识的维度中的前向平面相交的情况下,确定光线是否与框相交。以此方式,本文所描述的方法通过使一些测试以先前结果为条件来避免执行一些测试。此外,同样应注意,对于框的任何平面,不直接计算相交距离。
在上文所描述的示例中,步骤S610包含至多两个测试(并且在一些情况下,例如在图7h所示的情况下,有可能在步骤S610中仅执行一个测试)。步骤S608包含两个或三个测试,这取决于采用的方法。因此,如果对步骤S608使用第一方法(其中步骤S608涉及执行两个测试),则测试总数最多为四,并且在一些情况下,例如在图7h所示的情况下,可能仅为三。此外,如果对步骤S608使用第二方法(其中步骤S608涉及执行三个测试),则测试总数最多为五,并且在一些情况下,例如在图7h所示的情况下,可能仅为四。
如果在步骤S610中确定光线与维度子集中的前向平面相交的位置沿着光线远于光线与已标识后向平面相交的位置,则得知光线错过框,并且所述方法从步骤S610进行到步骤S616,在后一步骤中确定光线错过框(即,所述光线不与框相交)。如果在步骤S610中确定光线与维度子集中的前向平面相交的位置沿着光线不远于光线与已标识后向平面相交的位置,则所述方法进行到步骤S612。
图6所示的步骤S612到S620对应于上文参考图3所描述的步骤S312到S320。具体地说,在步骤S612中,相交测试模块108(具体地说,框相交测试单元112)确定是否满足最小距离条件和最大距离条件。如果光线距光线原点的最小有效距离小于或等于从光线原点到光线与框内的点的任何交点的最大距离,则满足最小距离条件。换句话说,如果在沿着光线的方向向量行进时光线的起点(由值tmin定义)未超出框,则满足最小距离条件。在步骤S608中,已标识框的在沿着光线的最近位置与光线相交的后向平面,并且此标识可用于简化确定是否满足最小距离的过程。例如,如果在步骤S608中标识维度i的后向平面,其中i可以是x、y或z维度中的任一个,则用于确定是否满足最小距离条件的测试包括确定是否Bi≥Ditmin。可以忽略其它两个维度,因为对于最小距离条件,光线与已标识后向平面相交的点才是重要的。如上文所描述,tmin是定义光线距光线原点的最小有效距离的参数。如果Bi≥Ditmin,则满足最小距离条件;而如果Bi<Ditmin,则不满足最小距离条件。在上文使用的更通用符号中,Bi可以表示为P1,i。如上文所提及,在一些示例中,如果框的后向平面中的任一个具有负恒定值,即如果Bi<0,Bj<0或Bk<0(即,如果xmax、ymax或zmax中的任一个为负),则框在光线后方,并且因此,在这些示例中,相交测试模块108可以确定光线错过框。此确定可以在步骤S606之后的任何时间执行,并且如果此确定因为框在光线后方而确定光线错过框(这可被称为“手势框”),则所述方法可以在不执行本文参考步骤S608、S610和S612所描述的一些或全部测试的情况下直接跳转到步骤S616。
如果光线距光线原点的最大有效距离大于或等于从光线原点到光线方向向量与框内的点的任何交点的最小距离,则满足最大距离条件。换句话说,如果在沿着光线的方向向量行进时光线的末端(由值tmax定义)不在框前,则满足最大距离条件。例如,确定是否满足最大距离条件可包括确定是否Fi≤Ditmax,Fj≤Djtmax并且Fk≤Dktmax。如上文所描述,tmax是定义光线距光线原点的最大有效距离的参数。如果Fi≤Ditmax、Fj≤Djtmax和Fk≤Dktmax这三个都为真,则满足最大距离条件;而如果Fi>Ditmax、Fj>djtmax和Fk>Dktmax中的任一个为真,则不满足最大距离条件。在上文使用的更通用符号中,Fi、Fj和Fk可以分别表示为P0,i、P0,j和P0,k
在步骤S612中执行的用于确定是否满足最大距离条件和用于确定是否满足最小距离条件的测试可以与在步骤S610中执行的用于确定光线是否在与已标识后向平面相交之前与维度子集中的前向平面相交的测试并行执行。这是因为在步骤S612中执行的测试不取决于在步骤S610中执行的测试的结果。在框相交测试单元112以硬件(例如,在固定功能电路系统)中实施的实施方案中,并行地执行测试可能特别有益,可以独立地,例如并行地执行三个比较。在(例如,框相交测试单元112在软件中,例如在处理单元上执行的计算机代码的模块中实施的)其它示例中,可以在步骤S610和S612中按顺序执行测试,其中仅当第一测试未确定光线相对于框错过时,才执行第二测试,并且仅当第一测试未确定光线相对于框错过时,才执行第三测试,以此类推。这种顺序方法允许在不必执行所有测试的情况下确定错过(如果顺序中较早的测试已经确定了光线相对于框错过)。
使用步骤S612中对是否满足最小距离条件和最大距离条件的确定来确定光线是否与轴对齐框相交。如果不满足最小距离条件和最大距离条件中的一个或两个,则所述方法从步骤S612进行到步骤S616,在后一步骤中,相交测试模块108(具体地说,框相交测试单元112)确定光线不与框相交。然而,如果满足最小距离条件和最大距离条件两者,则所述方法从步骤S612进行到步骤S614,其中相交测试模块108(具体地说,框相交测试单元112)确定光线与框相交。应注意,为了实现步骤S614,即,为了使相交测试模块确定光线与轴对齐框相交,将确定光线与前向平面相交的位置沿着光线不远于光线与已标识后向平面相交的位置(在步骤S610中),并且将确定满足最大距离和最小距离条件(在步骤S612中)。
在步骤S614和/或S616之后,方法进行到步骤S618,在所述步骤中,相交测试模块108输出确定光线是否与框相交的结果的指示。此指示可以是二进制指示(例如,一位标志),以指示光线相对于框的‘命中’或‘错过’。在其它示例中,指示可以具有不同的形式。在步骤S620中,(例如,处理逻辑110)例如以与如上文参考步骤S320所描述的方式相同的方式在光线跟踪系统100中使用输出的指示来渲染3D场景的图像。
图8示出了可以在其中实施本文所描述的光线跟踪系统的计算机系统。计算机系统包括CPU 802、GPU 804、存储器806和其它装置814,例如显示器816、扬声器818和相机822。光线跟踪单元810(对应于光线跟踪单元102)在GPU 804以及神经网络加速器(NNA)811上实施。在其它示例中,光线跟踪单元810可以在CPU 802上或在NNA 811内实施,或作为计算机系统中的单独处理单元实施。计算机系统的部件可通过通信总线820彼此通信。存储装置812(对应于存储器104)被实施为存储器806的一部分。
图1的光线跟踪系统示出为包括数个功能块。这仅是示意性的,并不旨在限定此类实体的不同逻辑元件之间的严格划分。每个功能块可以任何合适的方式提供。应理解,本文中描述为由光线跟踪系统形成的中间值不需要由光线跟踪系统在任何时间点物理地生成,并且可以只表示方便描述由光线跟踪系统在其输入与输出之间执行的处理的逻辑值。
光线跟踪单元,并且具体地说本文所描述的相交测试模块,可以在集成电路上以硬件体现。本文所描述的相交测试模块可以被配置成执行本文所描述的任一种方法。一般来讲,上文所述的功能、方法、技术或部件中的任一者可在软件、固件、硬件(例如,固定逻辑电路系统)或其任何组合中实现。本文可以使用术语“模块”、“功能”、“部件”、“元件”、“单元”、“块”和“逻辑”来概括地表示软件、固件、硬件或其任何组合。在软件实施方案的情况下,模块、功能、部件、元件、单元、块或逻辑表示程序代码,所述程序码在处理器上执行时执行指定任务。本文中所描述的算法和方法可以由执行码的一个或多个处理器执行,所述码使处理器执行算法/方法。计算机可读存储介质的示例包含随机存取存储器(RAM)、只读存储器(ROM)、光盘、闪存存储器、硬盘存储器以及可以使用磁性、光学和其它技术来存储指令或其它数据并且可以由机器存取的其它存储器装置。
如本文中所使用的术语计算机程序代码和计算机可读指令是指供处理器执行的任何种类的可执行代码,包含以机器语言、解释语言或脚本语言表达的代码。可执行代码包含二进制代码、机器代码、字节代码、定义集成电路的代码(例如硬件描述语言或网表),以及用例如C、Java或OpenCL等编程语言码表达的代码。可执行代码可以是例如任何种类的软件、固件、脚本、模块或库,当在虚拟机或其它软件环境中被适当地执行、处理、解释、编译、运行时,这些软件、固件、脚本、模块或库使支持可执行代码的计算机系统的处理器执行由所述代码指定的任务。
处理器、计算机或计算机系统可以是任何种类的装置、机器或专用电路,或其集合或一部分,它具有处理能力使得可以执行指令。处理器可以是或包括任何种类的通用或专用处理器,诸如CPU、GPU、NNA、片上系统、状态机、媒体处理器、专用集成电路(ASIC)、可编程逻辑阵列、现场可编程门阵列(FPGA)等。计算机或计算机系统可以包括一个或多个处理器。
本发明还意图涵盖限定如本文中所描述的硬件的配置的软件,诸如硬件描述语言(HDL)软件,用于设计集成电路或用于配置可编程芯片以执行所需功能。也就是说,可以提供一种计算机可读存储介质,其上编码有集成电路定义数据集形式的计算机可读程序代码,所述集成电路定义数据集当在集成电路制造系统中处理(即,运行)时,将所述系统配置成制造被配置成执行本文所描述的任一种方法的相交测试模块,或者制造包括本文所描述的任何设备的相交测试模块。集成电路定义数据集可以是例如集成电路描述。
因此,可以提供一种在集成电路制造系统处制造如本文所描述的相交测试模块的方法。此外,可以提供一种集成电路定义数据集,当在集成电路制造系统中被处理时,所述集成电路定义数据集使制造相交测试模块的方法得以执行。
集成电路定义数据集可以是计算机代码的形式,例如作为网表,用于配置可编程芯片的代码,作为定义适合于在集成电路中以任何级别制造的硬件描述语言,包含作为寄存器传输级(RTL)代码,作为高级电路表示法(诸如Verilog或VHDL),以及作为低级电路表示法(诸如OASIS(RTM)和GDSII)。在逻辑上定义适合于在集成电路中制造的硬件的更高级表示法(诸如RTL)可以在计算机系统上处理,所述计算机系统被配置用于在软件环境的上下文中生成集成电路的制造定义,所述软件环境包括电路元件的定义和用于组合这些元件以便生成由所述表示法定义的集成电路的制造定义的规则。如通常软件在计算机系统处执行以便定义机器的情况一样,可能需要一个或多个中间用户步骤(例如,提供命令、变量等),以便将计算机系统配置为生成集成电路的制造定义,以执行定义集成电路以便生成所述集成电路的制造定义的代码。
现在将关于图9描述在集成电路制造系统处处理集成电路定义数据集以便将系统配置成制造相交测试模块的示例。
图9示出了集成电路(IC)制造系统902的示例,其被配置成制造如本文的任何示例中描述的相交测试模块。具体地说,IC制造系统902包括布局处理系统904和集成电路生成系统906。IC制造系统902被配置成接收IC定义数据集(例如,定义如本文的任何示例中描述的相交测试模块),处理IC定义数据集,并根据IC定义数据集生成IC(例如,其体现如本文的任何示例中描述的相交测试模块)。IC定义数据集的处理将IC制造系统902配置成制造体现如本文的任何示例中描述的相交测试模块的集成电路。
布局处理系统904配置成接收并处理IC定义数据集以确定电路布局。根据IC定义数据集确定电路布局的方法在本领域中是已知的,并且例如可以涉及合成RTL代码以确定要生成的电路的门级表示,例如就逻辑部件(例如NAND、NOR、AND、OR、MUX和FLIP-FLOP部件)而言。通过确定逻辑部件的位置信息,可以根据电路的门级表示来确定电路布局。这可以自动完成或者在用户参与下完成,以便优化电路布局。当布局处理系统904已经确定电路布局时,其可将电路布局定义输出到IC生成系统906。电路布局定义可以是例如电路布局描述。
如本领域中已知,IC生成系统906根据电路布局定义来生成IC。举例来说,IC生成系统906可实施生成IC的半导体装置制造工艺,其可涉及光刻和化学处理步骤的多步骤序列,在此期间,在由半导体材料制成的晶片上逐渐形成电子电路。电路布局定义可呈掩模的形式,其可以在光刻工艺中用于根据电路定义来生成IC。替代地,提供给IC生成系统906的电路布局定义可呈计算机可读代码的形式,IC生成系统906可使用所述计算机可读代码来形成用于生成IC的合适掩码。
由IC制造系统902执行的不同过程可全部在一个位置例如由一方来实施。替代地,IC制造系统902可以是分布式系统,使得一些过程可在不同位置执行,并且可由不同方来执行。例如,以下阶段中的一些可以在不同位置和/或由不同方来执行:(i)合成表示IC定义数据集的RTL代码,以形成要生成的电路的门级表示;(ii)基于门级表示来生成电路布局;(iii)根据电路布局来形成掩模;以及(iv)使用掩模来制造集成电路。
在其它示例中,在集成电路制造系统处对集成电路定义数据集进行处理可以将系统配置成制造相交测试模块,而不用对IC定义数据集进行处理以便确定电路布局。例如,集成电路定义数据集可以定义可重新配置的处理器诸如FPGA的配置,并且对所述数据集的处理可以将IC制造系统配置成(例如,通过将配置数据加载到FPGA)生成具有所述定义的配置的可重新配置的处理器。
在一些实施例中,当在集成电路制造系统中被处理时,集成电路制造定义数据集可以使集成电路制造系统生成如本文中描述的装置。例如,由集成电路制造定义数据集以上文参考图9描述的方式对集成电路制造系统进行配置,可以制造如本文所述的装置。
在一些示例中,集成电路定义数据集可以包含在数据集处定义的硬件上运行的软件,或者与在数据集处定义的硬件组合运行的软件。在图9所示的示例中,IC生成系统可以由集成电路定义数据集进一步配置为在制造集成电路时根据在集成电路定义数据集处限定的程序代码将固件加载到所述集成电路上,或者以其它方式向集成电路提供与集成电路一起使用的程序代码。
与已知的实施方案相比,在本申请中阐述的概念在装置、设备、模块和/或系统中(以及在本文中实现的方法中)的实施方案可以提高性能。性能改进可以包含计算性能提高、延迟减少、处理量增大和/或功耗降低中的一个或多个。在制造此类装置、设备、模块和系统(例如,在集成电路中)期间,可以在性能改进与物理实施方案之间进行权衡,从而改进制造方法。例如,可以在性能改进与布局面积之间进行权衡,从而匹配已知实施方案的性能,但使用更少的硅。例如,这可以通过以串行方式重复使用功能块或在装置、设备、模块和/或系统的元件之间共享功能块来完成。相反,在本申请中阐述的引起装置、设备、模块和系统的物理实施方案的改进(诸如硅面积减小)的概念可以针对性能提高进行折中。例如,这可以通过在预定义面积预算内制造模块的多个示例来完成。
申请人据此独立地公开了本文中所描述的每个单独的特征以及两个或更多个此类特征的任意组合,到达的程度使得此类特征或组合能够根据本领域的技术人员的普通常识基于本说明书整体来实行,而不管此类特征或特征的组合是否解决本文中所公开的任何问题。鉴于前文描述,本领域的技术人员将清楚,可以在本发明的范围内进行各种修改。

Claims (20)

1.一种在光线跟踪系统中确定光线是否与三维轴对齐框相交的方法,其中所述三维轴对齐框表示由所述三维轴对齐框的每个维度的前向平面和后向平面定义的体积,所述方法包括:
标识所述三维轴对齐框的所述前向平面中的哪一个在沿着所述光线的最远位置与所述光线相交;
确定是否所述光线与已标识前向平面相交的位置沿着所述光线不远于所述光线与维度子集中的所述后向平面相交的位置,其中所述维度子集包括所述前向平面未被标识的两个维度,但其中所述维度子集不包括所述前向平面已被标识的维度;以及
使用是否所述光线与所述已标识前向平面相交的位置沿着所述光线不远于所述光线与所述维度子集中的所述后向平面相交的位置的所述确定来确定所述光线是否与所述三维轴对齐框相交,
其中如果确定所述光线与所述已标识前向平面相交的位置沿着所述光线远于所述光线与所述维度子集中的所述后向平面相交的位置中的至少一个,则确定所述光线与所述三维轴对齐框不相交,并且
其中所述方法在不执行测试以确定是否所述光线与所述已标识前向平面相交的位置沿着所述光线不远于所述光线与所述前向平面已被标识的所述维度中的所述后向平面相交的位置的情况下,确定所述光线是否与所述三维轴对齐框相交。
2.根据权利要求1所述的方法,其中在不计算到所述三维轴对齐框的所述前向平面和所述后向平面中的任一个的相交距离的情况下执行标识所述三维轴对齐框的所述前向平面中的哪一个在沿着所述光线的最远位置与所述光线相交以及确定是否所述光线与所述已标识前向平面相交的位置沿着所述光线不远于所述光线与维度子集中的所述后向平面相交的位置的步骤。
3.根据权利要求1或2所述的方法,其中所述标识所述三维轴对齐框的所述前向平面中的哪一个在沿着所述光线的最远位置与所述光线相交包括:
执行第一前向测试以确定所述光线在沿着所述光线的最远位置与所述三维轴对齐框的第一前向平面和第二前向平面中的哪一个相交;以及
执行第二前向测试以确定所述光线在沿着所述光线的最远位置与所述三维轴对齐框的已确定前向平面和第三前向平面中的哪一个相交,从而标识所述三维轴对齐框的所述前向平面中的哪一个在沿着所述光线的最远位置与所述光线相交。
4.根据权利要求1或2所述的方法,其中所述标识所述三维轴对齐框的所述前向平面中的哪一个在沿着所述光线的最远位置与所述光线相交包括:
执行第一前向测试以确定所述光线在沿着所述光线的最远位置与所述三维轴对齐框的第一前向平面和第二前向平面中的哪一个相交;
执行第二前向测试以确定所述光线在沿着所述光线的最远位置与所述三维轴对齐框的所述第一前向平面和第三前向平面中的哪一个相交;
执行第三前向测试以确定所述光线在沿着所述光线的最远位置与所述三维轴对齐框的所述第二前向平面和所述第三前向平面中的哪一个相交;以及
使用所述第一前向测试、所述第二前向测试和所述第三前向测试中的每一个的结果来标识所述三维轴对齐框的所述前向平面中的哪一个在沿着所述光线的最远位置与所述光线相交。
5.根据权利要求1或2所述的方法,其中所述确定是否所述光线与所述已标识前向平面相交的位置沿着所述光线不远于所述光线与所述维度子集中的所述后向平面相交的位置包括:
执行第一混合向测试以确定所述光线在沿着所述光线的最远位置与所述三维轴对齐框的所述已标识前向平面和第一后向平面中的哪一个相交,其中所述三维轴对齐框的所述第一后向平面是所述维度子集中的第一维度的后向平面;
执行第二混合向测试以确定所述光线在沿着所述光线的最远位置与所述三维轴对齐框的所述已标识前向平面和第二后向平面中的哪一个相交,其中所述三维轴对齐框的所述第二后向平面是所述维度子集中的第二维度的后向平面;以及
使用所述第一混合向测试和所述第二混合向测试中的每一个的结果来确定是否所述光线与所述已标识前向平面相交的位置沿着所述光线不远于所述光线与所述维度子集中的所述后向平面相交的位置。
6.根据权利要求1或2所述的方法,其中所述确定是否所述光线与所述已标识前向平面相交的位置沿着所述光线不远于所述光线与所述维度子集中的所述后向平面相交的位置包括:
执行后向测试以确定所述光线在沿着所述光线的最近位置与所述三维轴对齐框的第一后向平面和第二后向平面中的哪一个相交,其中所述三维轴对齐框的所述第一后向平面是所述维度子集中的第一维度的后向平面,并且所述三维轴对齐框的所述第二后向平面是所述维度子集中的第二维度的后向平面;
执行混合向测试以确定所述光线在沿着所述光线的最远位置与所述三维轴对齐框的所述已标识前向平面和已确定后向平面中的哪一个相交;以及
使用所述混合向测试的结果来确定是否所述光线与所述已标识前向平面相交的位置沿着所述光线不远于所述光线与所述维度子集中的所述后向平面相交的位置。
7.根据权利要求1或2所述的方法,其中用于确定所述光线在沿着所述光线的最远位置与所述三维轴对齐框的第一平面和第二平面中的哪一个相交的前向测试、后向测试或混合向测试包括将Pm,iDj与Pn,jDi进行比较,其中Pm,i是第i维度中的所述第一平面的恒定分量值,其中Pn,j是第j维度中的所述第二平面的恒定分量值,其中Di和Dj分别是所述光线在所述第i维度和所述第j维度中的方向向量的分量,其中如果Pm,iDj>Pn,jDi,则确定所述光线与所述第一平面相交的位置沿着所述光线远于所述光线与所述第二平面相交的位置,并且如果Pm, iDj<Pn,jDi,则确定所述光线与所述第二平面相交的位置沿着所述光线远于所述光线与所述第一平面相交的位置,
其中所述第一平面是:(i)维度i的所述前向平面并且对于所述第i维度具有分量值P0,i,或(ii)维度i的所述后向平面并且对于所述第i维度具有分量值P1,i,并且
其中所述第二平面是:(i)维度j的所述前向平面并且对于所述第j维度具有分量值P0,j,或(ii)维度j的所述后向平面并且对于所述第j维度具有分量值P1,j
8.根据权利要求1或2所述的方法,还包括:
存储在所述标识所述三维轴对齐框的所述前向平面中的哪一个在沿着所述光线的最远位置与所述光线相交时确定的一个或多个中间结果;以及
读取所存储的一个或多个中间结果以用于所述确定是否所述光线与所述已标识前向平面相交的位置沿着所述光线不远于所述光线与所述维度子集中的所述后向平面相交的位置。
9.根据权利要求1或2所述的方法,还包括确定是否满足最大距离条件,其中如果所述光线距光线原点的最大有效距离大于或等于从所述光线原点到所述光线与所述三维轴对齐框内的点的任何交点的最小距离,则满足所述最大距离条件,
其中所述确定所述光线是否与所述三维轴对齐框相交还包括使用是否满足所述最大距离条件的所述确定。
10.根据权利要求1或2所述的方法,还包括确定是否满足最小距离条件,其中如果所述光线距所述光线原点的最小有效距离小于或等于从所述光线原点到所述光线与所述三维轴对齐框内的点的任何交点的最大距离,则满足所述最小距离条件,
其中所述确定所述光线是否与所述三维轴对齐框相交还包括使用是否满足所述最小距离条件的所述确定。
11.根据权利要求10所述的方法,还包括确定是否满足最大距离条件,其中如果所述光线距光线原点的最大有效距离大于或等于从所述光线原点到所述光线与所述三维轴对齐框内的点的任何交点的最小距离,则满足所述最大距离条件,其中所述确定所述光线是否与所述三维轴对齐框相交还包括使用是否满足所述最大距离条件的所述确定,并且
其中所述确定是否满足最大距离条件和所述确定是否满足最小距离条件与所述确定是否所述光线与所述已标识前向平面相交的位置沿着所述光线不远于所述光线与维度子集中的所述后向平面相交的位置并行执行。
12.一种在光线跟踪系统中确定光线是否与三维轴对齐框相交的方法,其中所述三维轴对齐框表示由所述三维轴对齐框的每个维度的前向平面和后向平面定义的体积,所述方法包括:
标识所述三维轴对齐框的所述后向平面中的哪一个在沿着所述光线的最近位置与所述光线相交;
确定是否所述光线与维度子集中的所述前向平面相交的位置沿着所述光线不远于所述光线与已标识后向平面相交的位置,其中所述维度子集包括所述后向平面未被标识的两个维度,但其中所述维度子集不包括所述后向平面已被标识的维度;以及
使用是否所述光线与所述维度子集中的所述前向平面相交的位置沿着所述光线不远于所述光线与所述已标识后向平面相交的位置的所述确定来确定所述光线是否与所述三维轴对齐框相交,
其中如果确定所述光线与所述维度子集中的所述前向平面中的至少一个相交的位置沿着所述光线远于所述光线与所述已标识后向平面相交的位置,则确定所述光线与所述三维轴对齐框不相交,并且
其中所述方法在不执行测试以确定是否所述光线与所述后向平面已被标识的所述维度中的所述前向平面相交的位置沿着所述光线不远于所述光线与所述已标识后向平面相交的位置的情况下,确定所述光线是否与所述三维轴对齐框相交。
13.根据权利要求12所述的方法,其中所述标识所述三维轴对齐框的所述后向平面中的哪一个在沿着所述光线的最近位置与所述光线相交包括:
执行第一后向测试以确定所述光线在沿着所述光线的最近位置与所述三维轴对齐框的第一后向平面和第二后向平面中的哪一个相交;以及
执行第二后向测试以确定所述光线在沿着所述光线的最近位置与所述三维轴对齐框的已确定后向平面和第三后向平面中的哪一个相交,从而标识所述三维轴对齐框的所述后向平面中的哪一个在沿着所述光线的最近位置与所述光线相交。
14.根据权利要求12所述的方法,其中所述标识所述三维轴对齐框的所述后向平面中的哪一个在沿着所述光线的最近位置与所述光线相交包括:
执行第一后向测试以确定所述光线在沿着所述光线的最近位置与所述三维轴对齐框的第一后向平面和第二后向平面中的哪一个相交;
执行第二后向测试以确定所述光线在沿着所述光线的最近位置与所述三维轴对齐框的所述第一后向平面和第三后向平面中的哪一个相交;
执行第三后向测试以确定所述光线在沿着所述光线的最近位置与所述三维轴对齐框的所述第二后向平面和所述第三后向平面中的哪一个相交;以及
使用所述第一后向测试、所述第二后向测试和所述第三后向测试中每一个的结果来标识所述三维轴对齐框的所述后向平面中的哪一个在沿着所述光线的最近位置与所述光线相交。
15.根据权利要求12至14中任一项所述的方法,其中所述确定是否所述光线与所述维度子集中的所述前向平面相交的位置沿着所述光线不远于所述光线与所述已标识后向平面相交的位置包括:
执行第一混合向测试以确定所述光线在沿着所述光线的最远位置与所述三维轴对齐框的所述已标识后向平面和第一前向平面中的哪一个相交,其中所述三维轴对齐框的所述第一前向平面是所述维度子集中的第一维度的前向平面;
执行第二混合向测试以确定所述光线在沿着所述光线的最远位置与所述三维轴对齐框的所述已标识后向平面和第二前向平面中的哪一个相交,其中所述三维轴对齐框的所述第二前向平面是所述维度子集中的第二维度的前向平面;以及
使用所述第一混合向测试和所述第二混合向测试中每一个的结果来确定是否所述光线与所述维度子集中的所述前向平面相交的位置沿着所述光线不远于所述光线与所述已标识后向平面相交的位置。
16.根据权利要求12至14中任一项所述的方法,其中所述确定是否所述光线与所述维度子集中的所述前向平面相交的位置沿着所述光线不远于所述光线与所述已标识后向平面相交的位置包括:
执行前向测试以确定所述光线在沿着所述光线的最远位置与所述三维轴对齐框的第一前向平面和第二前向平面中的哪一个相交,其中所述三维轴对齐框的所述第一前向平面是所述维度子集中的第一维度的前向平面,并且所述三维轴对齐框的所述第二前向平面是所述维度子集中的第二维度的前向平面;
执行混合向测试以确定所述光线在沿着所述光线的最远位置与所述三维轴对齐框的所述已标识后向平面和已确定前向平面中的哪一个相交;以及
使用所述混合向测试的结果来确定是否所述光线与所述维度子集中的所述前向平面相交的位置沿着所述光线不远于所述光线与所述已标识后向平面相交的位置。
17.根据权利要求12至14中任一项所述的方法,还包括选择性地反转所述光线和所述三维轴对齐框的分量的轴,使得Di≥0,Dj≥0并且Dk≥0,随后标识所述三维轴对齐框的所述前向平面中的哪一个在沿着所述光线的最远位置与所述光线相交,其中Di、Dj和Dk分别是所述光线针对维度i、维度j和维度k的方向向量的分量。
18.一种在光线跟踪系统中使用的相交测试装置,其被配置成确定光线是否与三维轴对齐框相交,其中所述三维轴对齐框表示由所述三维轴对齐框的每个维度的前向平面和后向平面定义的体积,所述相交测试装置包括:
用于标识所述三维轴对齐框的所述前向平面中的哪一个在沿着所述光线的最远位置与所述光线相交的装置;
用于确定是否所述光线与已标识前向平面相交的位置沿着所述光线不远于所述光线与维度子集中的所述后向平面相交的位置的装置,其中所述维度子集包括所述前向平面未被标识的两个维度,但其中所述维度子集不包括所述前向平面已被标识的维度;以及
用于使用是否所述光线与所述已标识前向平面相交的位置沿着所述光线不远于所述光线与所述维度子集中的所述后向平面相交的位置的所述确定来确定所述光线是否与所述三维轴对齐框相交的装置,
用于如果确定所述光线与所述已标识前向平面相交的位置沿着所述光线远于所述光线与所述维度子集中的所述后向平面相交的位置中的至少一个,则确定所述光线与所述三维轴对齐框不相交的装置,并且
其中,所述相交测试装置还包括:用于在不执行测试以确定是否所述光线与所述已标识前向平面相交的位置沿着所述光线不远于所述光线与所述前向平面已被标识的所述维度中的所述后向平面相交的位置的情况下,确定所述光线是否与所述三维轴对齐框相交的装置。
19.一种在光线跟踪系统中使用的相交测试装置,其被配置成确定光线是否与三维轴对齐框相交,其中所述三维轴对齐框表示由所述三维轴对齐框的每个维度的前向平面和后向平面定义的体积,所述相交测试装置包括:
用于标识所述三维轴对齐框的所述后向平面中的哪一个在沿着所述光线的最近位置与所述光线相交的装置;
用于确定是否所述光线与维度子集中的所述前向平面相交的位置沿着所述光线不远于所述光线与已标识后向平面相交的位置的装置,其中所述维度子集包括所述后向平面未被标识的两个维度,但其中所述维度子集不包括所述后向平面已被标识的维度;以及
用于使用是否所述光线与维度子集中的所述前向平面相交的位置沿着所述光线不远于所述光线与所述已标识后向平面相交的位置的所述确定来确定所述光线是否与所述轴对齐框相交的装置,
用于如果确定所述光线与所述维度子集中的所述前向平面中的至少一个相交的位置沿着所述光线远于所述光线与所述已标识后向平面相交的位置,则确定所述光线与所述三维轴对齐框不相交的装置,并且
其中,所述相交测试装置还包括:用于在不执行测试以确定是否所述光线与所述后向平面已被标识的所述维度中的所述前向平面相交的位置沿着所述光线不远于所述光线与所述已标识后向平面相交的位置的情况下,确定所述光线是否与所述三维轴对齐框相交的装置。
20.一种非瞬态计算机可读存储介质,在所述非瞬态计算机可读存储介质上存储有计算机可读代码,所述计算机可读代码被配置成在所述计算机可读代码运行时使根据权利要求1至17中任一项所述的方法得以执行。
CN202210262491.1A 2021-03-23 2022-03-17 在光线跟踪系统中确定相交的方法、相交测试装置和介质 Active CN115115758B (zh)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
GB2104055.5A GB2599182B (en) 2021-03-23 2021-03-23 Intersection testing in a ray tracing system
GB2104055.5 2021-03-23

Publications (2)

Publication Number Publication Date
CN115115758A CN115115758A (zh) 2022-09-27
CN115115758B true CN115115758B (zh) 2023-10-31

Family

ID=75690011

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202210262491.1A Active CN115115758B (zh) 2021-03-23 2022-03-17 在光线跟踪系统中确定相交的方法、相交测试装置和介质

Country Status (4)

Country Link
US (2) US11741659B2 (zh)
EP (1) EP4113449A1 (zh)
CN (1) CN115115758B (zh)
GB (1) GB2599182B (zh)

Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102037497A (zh) * 2008-03-21 2011-04-27 柯斯提克绘图有限公司 用于光线追踪渲染的并行相交测试及着色的架构
CN102947865A (zh) * 2010-04-29 2013-02-27 柯斯提克绘图公司 用于光线跟踪中的图元相交的系统和方法
US8564589B1 (en) * 2010-05-17 2013-10-22 Nvidia Corporation System and method for accelerated ray-box intersection testing
CN107111890A (zh) * 2014-10-17 2017-08-29 高通股份有限公司 使用基于点积的固定功能逻辑的光线‑盒相交测试
CN108090947A (zh) * 2018-01-03 2018-05-29 沈阳品尚科技有限公司 一种面向3d场景的光线追踪优化方法
CN109087384A (zh) * 2017-06-14 2018-12-25 想象技术有限公司 光线跟踪系统中经压缩的光线方向数据
CN110930497A (zh) * 2020-02-11 2020-03-27 南京芯瞳半导体技术有限公司 一种全局光照相交加速方法、装置及计算机存储介质

Family Cites Families (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7495664B2 (en) * 2000-06-19 2009-02-24 Mental Images Gmbh Instant ray tracing
US7499053B2 (en) * 2000-06-19 2009-03-03 Mental Images Gmbh Real-time precision ray tracing
US7414624B2 (en) * 2005-10-28 2008-08-19 Intel Corporation Apparatus and method for a frustum culling algorithm suitable for hardware implementation
KR102242566B1 (ko) * 2014-06-30 2021-04-20 삼성전자주식회사 레이 트레이싱 처리 장치 및 방법
US10242485B2 (en) * 2014-09-04 2019-03-26 Nvidia Corporation Beam tracing
US9552664B2 (en) * 2014-09-04 2017-01-24 Nvidia Corporation Relative encoding for a block-based bounding volume hierarchy
US10499046B2 (en) * 2017-04-13 2019-12-03 Facebook, Inc. Generating depth maps for panoramic camera systems
US10970914B1 (en) * 2019-11-15 2021-04-06 Imagination Technologies Limited Multiple precision level intersection testing in a ray tracing system
US11790593B2 (en) * 2020-03-13 2023-10-17 Advanced Micro Devices, Inc. Ray-tracing multi-sample anti-aliasing

Patent Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102037497A (zh) * 2008-03-21 2011-04-27 柯斯提克绘图有限公司 用于光线追踪渲染的并行相交测试及着色的架构
CN102947865A (zh) * 2010-04-29 2013-02-27 柯斯提克绘图公司 用于光线跟踪中的图元相交的系统和方法
US8564589B1 (en) * 2010-05-17 2013-10-22 Nvidia Corporation System and method for accelerated ray-box intersection testing
CN107111890A (zh) * 2014-10-17 2017-08-29 高通股份有限公司 使用基于点积的固定功能逻辑的光线‑盒相交测试
CN109087384A (zh) * 2017-06-14 2018-12-25 想象技术有限公司 光线跟踪系统中经压缩的光线方向数据
CN108090947A (zh) * 2018-01-03 2018-05-29 沈阳品尚科技有限公司 一种面向3d场景的光线追踪优化方法
CN110930497A (zh) * 2020-02-11 2020-03-27 南京芯瞳半导体技术有限公司 一种全局光照相交加速方法、装置及计算机存储介质

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
JEFFREY MAHOVSKY等.Fast Ray-Axis Aligned Bounding Box Overlap Tests with Plucker Coordinates.Journal of Graphics Tools.2004,第9卷(第1期),第35-46页. *

Also Published As

Publication number Publication date
GB2599182A9 (en) 2022-08-17
US20230410409A1 (en) 2023-12-21
GB2599182B (en) 2022-10-26
US11741659B2 (en) 2023-08-29
GB2599182A (en) 2022-03-30
US20220335678A1 (en) 2022-10-20
CN115115758A (zh) 2022-09-27
EP4113449A1 (en) 2023-01-04
GB202104055D0 (en) 2021-05-05

Similar Documents

Publication Publication Date Title
CN110827389A (zh) 严密的光线三角形相交
CN112907717B (zh) 光线跟踪系统中的多精度水平相交测试
CN115115764B (zh) 光线跟踪系统中的相交测试的方法、装置及介质
CN114119841A (zh) 光线跟踪系统中的相交测试
US20230401781A1 (en) Intersection testing in a ray tracing system using axis-aligned box coordinate components
CN115115765B (zh) 光线跟踪系统中的相交测试
US20190318533A1 (en) Realism of scenes involving water surfaces during rendering
US20200193684A1 (en) Efficient data path for ray triangle intersection
CN115115758B (zh) 在光线跟踪系统中确定相交的方法、相交测试装置和介质
US12067668B2 (en) Graphics processing
US20220350606A1 (en) Performing comparison operations using vector floating point values
CN113936087A (zh) 光线跟踪系统中的相交测试
CN115115761B (zh) 确定光线是否与三维轴对齐框相交的方法、装置和介质
US20230031189A1 (en) Transformation of data in a ray tracing system
US20220350566A1 (en) Performing comparison operations using extended exponent range floating point values
GB2607456A (en) Intersection testing in a ray tracing system

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
GR01 Patent grant
GR01 Patent grant