CN116664748A - 光线跟踪系统中的相交测试 - Google Patents

光线跟踪系统中的相交测试 Download PDF

Info

Publication number
CN116664748A
CN116664748A CN202310160964.1A CN202310160964A CN116664748A CN 116664748 A CN116664748 A CN 116664748A CN 202310160964 A CN202310160964 A CN 202310160964A CN 116664748 A CN116664748 A CN 116664748A
Authority
CN
China
Prior art keywords
primitive
intersection
ray
distance
primitives
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
Application number
CN202310160964.1A
Other languages
English (en)
Inventor
P·史密斯-莱西
S·芬尼
G·克拉克
R·金
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 CN116664748A publication Critical patent/CN116664748A/zh
Pending legal-status Critical Current

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
    • G06T1/00General purpose image data processing
    • G06T1/20Processor architectures; Processor configuration, e.g. pipelining
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T15/003D [Three Dimensional] image rendering
    • G06T15/10Geometric effects
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T17/00Three dimensional [3D] modelling, e.g. data description of 3D objects
    • G06T17/20Finite element generation, e.g. wire-frame surface description, tesselation
    • G06T17/205Re-meshing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T7/00Image analysis
    • G06T7/10Segmentation; Edge detection
    • G06T7/136Segmentation; Edge detection involving thresholding
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T7/00Image analysis
    • G06T7/50Depth or shape recovery

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)
  • Software Systems (AREA)
  • Analysing Materials By The Use Of Radiation (AREA)
  • Image Analysis (AREA)
  • Navigation (AREA)

Abstract

本发明涉及光线跟踪系统中的相交测试。提供了一种用于在光线跟踪系统中执行相交测试的方法和相交测试模块。如果光线与第一图元相交的相交距离和该光线与第二图元相交的相交距离之间的差满足相对于阈值的比较条件,并且如果该第一图元和该第二图元的取向不同,则选择该光线与该第一图元和该第二图元中具有特定取向的一者的相交。

Description

光线跟踪系统中的相交测试
相关申请的交叉引用
本申请要求2022年2月25日提交的英国专利申请GB2202657.9、GB2202658.7和GB2202659.5的优先权,这些英国专利申请以全文引用的方式并入本文中。
技术领域
本公开涉及在光线跟踪系统中执行相交测试的技术。
背景技术
光线跟踪是一种计算渲染技术,其用于通过通常从相机的视角在场景中跟踪光路(‘光线’)来生成场景(例如,3D场景)的图像。每条光线被建模为源自相机,并通过像素进入场景。当光线横越场景时,其可能与场景内的物体相交。可对光线和其相交的物体之间的相交建模以创建逼真的视觉效果。例如,响应于确定光线与物体相交,可以针对相交执行着色器程序(即,计算机代码的一部分)。程序员可以编写着色器程序以定义系统如何对相交(所述相交例如可能导致向场景中发射一个或多个二次光线)作出反应,例如,以表示光线从相交物体的反射或光线通过物体的折射(例如,如果物体是透明或半透明的)。作为另一个示例,着色器程序可以使一条或多条光线发射到场景中,以用于确定物体是否处于交点处的阴影中。执行着色器程序(和处理相关的二次光线)的结果可以是计算光线穿过的像素的颜色值。
使用光线跟踪渲染场景的图像可以涉及执行许多相交测试,例如执行数十亿个相交测试以渲染场景的图像。为了减少需要执行的相交测试的数量,光线跟踪系统可以生成加速结构,其中加速结构的每个节点表示场景内的区域。加速结构通常是分层的(例如,具有树结构),使得其包含多个级别的节点,其中靠近加速结构的顶部的节点表示场景中相对大的区域(例如,根节点可以表示整个场景),靠近加速结构的底部的节点表示场景中相对小的区域。加速结构的叶节点表示场景中包围一个或多个图元的区域,并且具有指向所包围的图元的指针。
可以使用加速结构,通过首先测试光线与加速结构的根节点的相交(例如,以递归方式)对光线执行相交测试。如果发现光线与父节点(例如,根节点)相交,则测试可以进行到所述父节点的子节点。相比之下,如果发现光线不与父节点相交,则可以避免对该父节点的子节点的相交测试,从而节省计算工作量。如果发现光线与叶节点相交,则可针对由叶节点表示的区域内的物体对光线进行测试,从而确定光线与哪个(些)物体相交。可以使用“图元”来表示对象。图元表示系统中的几何单位,并且例如可以是凸多边形。图元通常是三角形,但也可以是其他形状,例如正方形、矩形、五边形、六边形等。此外,一些图元可能不是凸多边形,或者甚至不是多边形。例如,图元可以是盘形或某种其他表面或体积。
光线(r)可被定义为r=O+Dt,其中O是表示光线原点的向量,D是表示光线方向的向量,并且t表示相对于D的量值沿光线与原点的距离。图元可被表示为由平面顶点的有序集合定义的凸多边形(例如三角形),由此连续的顶点对定义了图元的边,并且总顶点顺序给出了图元的缠绕顺序。图元相对于光线的取向(即顺时针或逆时针)取决于图元的缠绕顺序以及光线的原点和方向。可在光线跟踪系统中设置标志(例如由用户)以指示是顺时针取向还是逆时针取向对应于面向前的图元。可使用图元的缠绕顺序,将预定取向作为面向前(顺时针或逆时针),以将图元的一侧标记为正面,并且将另一侧标记为背面。取决于给定光线所观察的是哪一侧,至少从该光线的视角来看,确定该图元是面向前还是面向后,是顺时针还是逆时针。
为了确定光线是否与平面图元相交,可以确定光线与含有图元的平面的交点,并且随后可以确定该交点是否在图元内部。以此方式,给定光线/图元对,图元相交阶段可以确定光线是否与图元相交,并且将其作为“命中”结果输出。当光线与图元相交发生(即设置了命中)时,图元相交阶段还可以计算额外属性,诸如取向(顺时针/逆时针或者面向前/面向后)、相交距离以及/或者指示交点在图元上的位置的重心坐标。具体地说,距离计算可以生成浮点值,该浮点值指示从光线原点行进到交点所需的光线长度的倍数(例如使用值t来指示)(如果相交发生在原点后面,则此倍数可能是负的)。
光线可能与场景中的多于一个图元相交。因此,在图元相交阶段之后,如果在光线与图元之间发现相交,则相交选择阶段确定应选择光线的新交点还是旧交点。通常,选择两次相交中更近的相交(即选择光线在场景中遇到的第一次相交)。术语“更近”在本文可意指更接近光线原点,或者其可意指更接近负无穷,这取决于具体实现(这两个概念通常是等价的,因为对于光线的最小距离大于或等于零来说,这是惯例,但不是必要的)。所选相交随后被用于光线的进一步处理,而未选相交被舍弃。此过程也被称为隐藏表面确定、显示表面确定、隐藏表面移除(HSR)、遮挡剔除(OC)或可见表面确定(VSD)。当前最近的交点是每条光线的属性,并且因此可被存储为光线数据。
两次相交中“更近的相交”可以纯粹基于从图元相交阶段输出的相交距离值来选择。然而,在一些情形下,这是不可能的,或者这样做不会提供良好的结果。例如,如果光线与两个不同图元的相交距离相等,则不可能仅基于相交距离来区分它们。在此情形下,可以使用某种形式的平局打破规则,但已知的平局打破规则在减少感知渲染伪像方面并不总是选择“最佳”相交。
应注意,光线与两个不同图元的相交距离相等并不罕见,因为物体通常使用多个图元来表示,例如使用图元网格来表示,从而产生定义图元中的两个或更多个图元的共享顶点。此外,图元可具有共享边,即两个端点都是共享顶点的边。如果光线与共享边或共享顶点上的点相交,则与共享该边或顶点的两个图元的相交距离应相等。如果相交测试确保与共享边上的点或共享顶点相交的光线与图元中的至少一个图元相交,则相交测试被描述为“严密(watertight)”。如果相交测试确保与封闭扇形的共享边上的点或共享顶点相交的光线与图元中的一个(且仅一个)图元相交,则相交测试被描述为“非冗余严密”,应注意,在此情况下,仅其边界的(严格)子集可被视为图元的部分。(封闭)扇形可被编码为顶点列表(的子集),其具有或不具有重复顶点(指示扇形的中心顶点),并且具有例如由顶点顺序(例如顶点元组列表,或者在计算机图形系统中紧凑地表示的三角形扇形或三角形带)给出的隐式图元拓扑,或者具有例如由顶点索引元组列表(的子集)给出的显式图元拓扑。
如果发现与共享边上的点相交的光线与零图元相交,则其可以表现为好像图元网格中具有孔,使得可以通过所渲染图像中的网格看到图元网格后面的颜色(这可能在非严密相交测试而不是严密相交测试的情况下发生)。例如,如果图元网格后面的颜色与图元网格的颜色显著不同,则这些种类的渲染误差可能非常明显。此外,如果发现与共享边(其可包括定义该边的顶点)上的点相交的光线与多于一个图元相交(其可被称为“双重相交”),则在该共享边上的位置处渲染的颜色可取决于测试图元相交的顺序,使得渲染可能变得不确定。这些种类的渲染误差对于渲染图像的感知质量可能是不利的。具有非冗余严密相交测试的另外的原因包括:(i)为了避免冗余工作,以及(ii)为了避免在透明对象中由重复的相交导致的任何双重/多重命中处的阴影不连续性。通常独立于对与第二图元相交的光线的测试来执行对与第一图元相交的光线的测试,并且应注意,确保严密性,并且具体地说,确保针对相交测试的非冗余严密性并不简单。
单独使用相交距离来执行相交选择的另一个问题是,在所计算的相交距离中可能存在一些误差。例如,确定相交距离的距离计算通常对浮点数进行操作,这些浮点数可能具有显著不同的标度。当在计算中使用浮点数时,通常会对值进行一定舍入,这可能会在结果中引入误差。当在同一操作中使用具有非常不同量值的值时,舍入误差特别显著。相交距离计算中的这些误差可能在确定哪次相交最近时引起误差。在确定哪次相交最近时的误差可被称为“深度冲突(Z fighting)”,并且可能引起渲染伪像,其中应在像素位置处被另一表面隐藏的表面在该像素位置处是可见的。当两个重叠表面彼此靠近时,往往会发生深度冲突。
发明内容
提供本发明内容是为了以简化形式介绍下文在具体实施方式中进一步描述的一系列概念。本发明内容不旨在标识所要求保护的主题的关键特征或必要特征,也不旨在用以限制所要求保护的主题的范围。
提供了一种在光线跟踪系统中执行相交测试的计算机实现的方法,所述方法包括:
如果光线与第一图元相交的相交距离和所述光线与第二图元相交的相交距离之间的差满足相对于阈值的比较条件,并且如果所述第一图元和所述第二图元的取向不同,则选择所述光线与所述第一图元和所述第二图元中具有特定取向的一者的相交。
如果所述光线与所述第一图元相交的所述相交距离和所述光线与所述第二图元相交的所述相交距离之间的所述差小于所述阈值,则可相对于所述阈值满足所述比较条件。
如果所述光线与所述第一图元相交的所述相交距离和所述光线与所述第二图元相交的所述相交距离之间的所述差小于或等于所述阈值,则可相对于所述阈值满足所述比较条件。
所述方法可包括:确定所述光线与所述第一图元相交的所述相交距离和所述光线与所述第二图元相交的所述相交距离之间的所述差满足相对于所述阈值的所述比较条件;以及确定所述第一图元和所述第二图元的所述取向不同,其中所述选择所述光线与所述第一图元和所述第二图元中具有特定取向的一者的所述相交可响应于确定以下情况而执行:(i)光线与第一图元相交的所述相交距离和所述光线与第二图元相交的所述相交距离之间的所述差满足相对于所述阈值的所述比较条件,以及(ii)所述第一图元和所述第二图元的所述取向不同。
所述选择所述光线与所述第一图元和所述第二图元中具有特定取向的所述一者的所述相交可包括基于所述第一图元和所述第二图元中具有所述特定取向的所述一者来选择所述光线与所述第一图元和所述第二图元中的所述一者的所述相交。
所述确定光线与第一图元相交的所述相交距离和所述光线与第二图元相交的所述相交距离之间的所述差满足相对于所述阈值的所述比较条件可包括:确定所述光线与所述第一图元相交的所述相交距离;确定所述光线与所述第二图元相交的所述相交距离;以及比较所确定的相交距离。
所述阈值可为零。所述确定所述光线与所述第一图元相交的所述相交距离和所述光线与所述第二图元相交的所述相交距离之间的所述差满足相对于所述阈值的所述比较条件可包括:确定所述光线与所述第一图元和所述第二图元相交的所述相交距离相等。
所述方法还可包括:如果所述光线与所述第一图元相交的所述相交距离和所述光线与所述第二图元相交的所述相交距离之间的所述差不满足相对于所述阈值的所述比较条件,则选择所述光线与所述第一图元和所述第二图元中具有较小相交距离的一者的所述相交。
提供了一种在光线跟踪系统中执行相交测试的计算机实现的方法,所述方法包括:
确定光线与第一图元相交的相交距离等于所述光线与第二图元相交的相交距离;
确定所述第一图元和所述第二图元的取向不同;以及
基于所述第一图元和所述第二图元中具有特定取向的一者来选择所述光线与所述第一图元和所述第二图元中的所述一者的相交。
具有所述特定取向的图元可以是面向前的图元,并且具有与所述特定取向不同的取向的图元可以是面向后的图元。
所述方法还可包括确定所述光线与所述第一图元和所述第二图元相交。
所述方法还可包括:如果所述光线与所述第一图元相交的所述相交距离等于所述光线与所述第二图元相交的所述相交距离,并且如果所述第一图元和所述第二图元的所述取向相同,则基于与所述第一图元和所述第二图元相关联的唯一图元ID来选择所述光线与所述第一图元和所述第二图元中的一者的所述相交。
所述方法还可包括:如果所述光线与所述第一图元相交的所述相交距离等于所述光线与所述第二图元相交的所述相交距离,并且如果所述第一图元和所述第二图元的所述取向相同,则使用确定性后退平局打破规则来选择所述光线与所述第一图元和所述第二图元中的一者的所述相交,而不是选择所述光线与所述第一图元和所述第二图元中具有所述特定取向的所述一者的所述相交。
如果所述第一图元和所述第二图元的所述取向不同,则所述选择所述光线与所述第一图元和第二图元中的所述一者的所述相交可包括不应用所述确定性后退平局打破规则。
所述方法还可包括在所述光线跟踪系统中使用所选相交来渲染图像。
提供了一种用于光线跟踪系统中的相交测试模块,所述相交测试模块包括:
相交选择逻辑,其被配置成:如果光线与第一图元相交的相交距离和所述光线与第二图元相交的相交距离之间的差满足相对于阈值的比较条件,并且如果所述第一图元和所述第二图元的取向不同,则选择所述光线与所述第一图元和所述第二图元中具有特定取向的一者的相交。
如果所述光线与所述第一图元相交的所述相交距离和所述光线与所述第二图元相交的所述相交距离之间的所述差小于所述阈值,则可相对于所述阈值满足所述比较条件。
如果所述光线与所述第一图元相交的所述相交距离和所述光线与所述第二图元相交的所述相交距离之间的所述差小于或等于所述阈值,则可相对于所述阈值满足所述比较条件。
所述相交测试模块还可包括相交确定逻辑,所述相交确定逻辑被配置成:确定所述光线与所述第一图元相交,并且确定所述光线与所述第一图元相交的所述相交距离;以及确定所述光线与所述第二图元相交,并且确定所述光线与所述第二图元相交的所述相交距离。
所述相交选择逻辑可被配置成:确定所述光线与所述第一图元相交的所述相交距离和所述光线与所述第二图元相交的所述相交距离之间的所述差满足相对于所述阈值的所述比较条件,确定所述第一图元和所述第二图元的取向不同;以及基于所述第一图元和所述第二图元中具有所述特定取向的一者来选择所述光线与所述第一图元和所述第二图元中的所述一者的所述相交。
提供了一种用于光线跟踪系统中的相交测试模块,所述相交测试模块包括:
相交选择逻辑,其被配置成:
确定光线与第一图元相交的相交距离等于所述光线与第二图元相交的相交距离;
确定所述第一图元和所述第二图元的取向不同;以及
基于所述第一图元和所述第二图元中具有特定取向的一者来选择所述光线与所述第一图元和所述第二图元中的所述一者的相交。
可以提供一种相交测试模块,其被配置成执行本文中所描述的方法中的任一种方法。
可以提供一种在光线跟踪系统中执行相交测试的计算机实现的方法,所述方法包括:
确定第一偏移相交距离,所述第一偏移相交距离等于光线与第一图元相交的相交距离以及取决于所述第一图元的取向的第一偏移之和;
确定第二偏移相交距离,所述第二偏移相交距离等于所述光线与第二图元相交的相交距离以及取决于所述第二图元的取向的第二偏移之和;
比较所确定的第一偏移相交距离与所确定的第二偏移相交距离,以选择所述光线与所述第一图元和所述第二图元中的一者的相交。
可以提供一种用于光线跟踪系统中的相交测试模块,所述相交测试模块包括:
相交选择逻辑,其被配置成:
确定第一偏移相交距离,所述第一偏移相交距离等于光线与第一图元相交的相交距离以及取决于所述第一图元的取向的第一偏移之和;
确定第二偏移相交距离,所述第二偏移相交距离等于所述光线与第二图元相交的相交距离以及取决于所述第二图元的取向的第二偏移之和;
比较所确定的第一偏移相交距离与所确定的第二偏移相交距离,以选择所述光线与所述第一图元和所述第二图元中的一者的相交。
可以提供一种在光线跟踪系统中执行相交测试的计算机实现的方法,所述方法包括:
确定光线与第一图元相交的相交距离和所述光线与第二图元相交的相交距离之间的差满足相对于阈值的比较条件;
确定所述第一图元和所述第二图元的取向不同;以及
基于所述第一图元和所述第二图元中具有特定取向的一者来选择所述光线与所述第一图元和所述第二图元中的所述一者的相交。
可以提供一种用于光线跟踪系统中的相交测试模块,所述相交测试模块包括:
相交选择逻辑,其被配置成:
确定光线与第一图元相交的相交距离和所述光线与第二图元相交的相交距离之间的差满足相对于阈值的比较条件;
确定所述第一图元和所述第二图元的取向不同;以及
基于所述第一图元和所述第二图元中具有特定取向的一者来选择所述光线与所述第一图元和所述第二图元中的所述一者的相交。
所述相交测试模块可以在集成电路上以硬件体现。可以提供一种在集成电路制造系统处制造相交测试模块的方法。可以提供一种集成电路定义数据集,当在集成电路制造系统中被处理时,所述集成电路定义数据集将系统配置成制造相交测试模块。可以提供一种非瞬态计算机可读存储介质,其上存储有相交测试模块的计算机可读描述,当在集成电路制造系统中被处理时,所述计算机可读描述使集成电路制造系统制造体现相交测试模块的集成电路。
可以提供一种集成电路制造系统,其包括:非瞬态计算机可读存储介质,其上存储有相交测试模块的计算机可读描述;布局处理系统,其被配置成处理计算机可读描述以便生成体现相交测试模块的集成电路的电路布局描述;以及集成电路生成系统,其被配置成根据电路布局描述来制造相交测试模块。
可以提供用于执行本文中所描述的方法中的任一种方法的计算机程序代码。可提供非暂时性计算机可读存储介质,其上存储有计算机可读指令,当在计算机系统处执行时,所述计算机可读指令促使所述计算机系统执行本文中所描述的方法中的任一种方法。
如对本领域的技术人员将显而易见,上述特征可以适当地组合,并且可与本文中所描述的示例的各方面中的任一方面进行组合。
附图说明
现在将参考附图详细描述示例,在附图中:
图1示出了根据本文中所描述的示例的光线跟踪系统;
图2示出了待渲染的场景中的一条光线和两个图元;
图3a示出了形成圆形带的图元网格,其中指示了在“缠绕/取向独立性”方案中哪些边被视为哪些图元的部分;
图3b示出了形成圆形带的图元网格,其中指示了在“缠绕/取向依赖性”方案中哪些边被视为哪些图元的部分;
图4a示出了根据本文中描述的示例的用于光线跟踪系统中的相交测试模块;
图4b是示出光线跟踪系统中光线的相交测试过程的高级流程图;
图5是执行相交测试的第一种方法的流程图;
图6a示出了形成圆形带的图元网格,其中指示了在优先考虑顺时针取向的“缠绕/取向独立性”方案中哪些边被视为哪些图元的部分;
图6b示出了形成圆形带的图元网格,其中指示了在优先考虑逆时针取向的“缠绕/取向独立性”方案中哪些边被视为哪些图元的部分;
图6c示出了形成圆形带的图元网格,其中指示了在优先考虑顺时针取向的“缠绕/取向依赖性”方案中哪些边被视为哪些图元的部分;
图6d示出了形成圆形带的图元网格,其中指示了在优先考虑逆时针取向的“缠绕/取向依赖性”方案中哪些边被视为哪些图元的部分;
图7a示出了形成圆形带的图元网格,其中指示了在“缠绕/取向独立性”方案中哪些边被视为哪些图元的部分,该方案示出了有可能发生深度冲突的区域;
图7b示出了形成圆形带的图元网格,其中指示了在“缠绕/取向依赖性”方案中哪些边被视为哪些图元的部分,该方案示出了有可能发生深度冲突的区域;
图8是执行相交测试的第二种方法的流程图;
图9a示出了形成圆形带的图元网格,其中指示了在“缠绕/取向独立性”方案中哪些边被视为哪些图元的部分,其中具有顺时针取向的图元相对于具有逆时针取向的图元已向前偏移;
图9b示出了形成圆形带的图元网格,其中指示了在“缠绕/取向依赖性”方案中哪些边被视为哪些图元的部分,其中具有顺时针取向的图元相对于具有逆时针取向的图元已向前偏移;
图10是执行相交测试的第三种方法的流程图;
图11示出了其中实现了包括相交测试模块的光线跟踪系统的计算机系统;并且
图12示出了用于生成体现相交测试模块的集成电路的集成电路制造系统。
附图示出了各种示例。技术人员将了解,附图中所示出的元件边界(例如框、框的组,或其他形状)表示边界的一个示例。在一些示例中,情况可能是一个元件可以被设计为多个元件,或者多个元件可以被设计为一个元件。在适当的情况下,贯穿各附图使用共同的附图标记来指示类似的特征。
具体实施方式
借助于示例呈现以下描述,以使得本领域的技术人员能够制造和使用本发明。本发明不限于本文中所描述的实施例,并且对所公开实施例的各种修改对于本领域的技术人员将显而易见。
现在将仅借助于示例来描述实施方案。
图1示出了包括光线跟踪单元102和存储器104的光线跟踪系统100。光线跟踪单元102包括处理模块106、相交测试模块108和处理逻辑110。相交测试模块108包括一个或多个框相交测试单元112以及一个或多个图元相交测试单元114。在操作中,光线跟踪单元102接收定义3D场景内的物体的几何数据。光线跟踪单元102还接收定义要测试相交的光线的光线数据。光线可以是一次光线或二次光线。处理模块106被配置为基于几何数据生成加速结构,并且将加速结构发送至存储器104以存储于其中。在加速结构已被存储在存储器104中之后,相交测试模块108可以从存储器104检索加速结构的节点(例如,包括定义对应于节点的轴对齐框的数据)以针对所检索的节点执行光线相交测试。为了避免一次读取整个加速结构,相交测试模块108基于先前相交测试的结果在每个阶段从存储器104检索来自一层加速结构的框的子集。框相交测试单元112执行相交测试以确定光线是否与对应于加速结构的节点的边界框中的每个边界框相交(其中未命中可剔除大片的分层加速结构)。如果确定叶节点相交,则图元相交测试单元114执行一个或多个图元相交测试以确定光线与哪个(些)物体(如果存在)相交。在此示例中,图元是三角形,但应注意,在其他示例中,图元可以是其他形状,例如其他凸平面多边形(诸如正方形、矩形、五边形、六边形等)、非凸多边形或非多边形平面形状(例如盘形),或者甚至非平面形状(例如与盘形同形的形状)。此外,图元可被假定为非退化的(即2D),因为与退化图元(即1D或0D图元)的相交可被视为未命中。相交测试的结果指示光线与场景中的哪个物体相交,并且这些结果还可以指示其他相交数据,诸如物体上光线与物体相交的位置(例如重心坐标),还可以指示沿发生相交的光线的距离,例如欧几里德(Euclidean)距离或者光线长度的(带符号)倍数,并且还可以指示从光线的视角看到的物体的感知取向(例如顺时针/逆时针或者面向前/面向后)。在一些情况下,相交确定可以基于沿发生相交的光线的距离是否在光线的最小裁剪距离与最大裁剪距离之间(其可被称为tmin和tmax)。将相交测试的结果提供给处理逻辑110。处理逻辑110被配置成处理相交测试的结果以确定表示3D场景的图像的渲染值。由处理逻辑110确定的渲染值可以传回到存储器104以存储在其中,以表示3D场景的图像。
在本文中描述的示例中,光线跟踪系统使用加速结构以便减少需要针对图元执行光线的相交测试的数量。然而,应注意,一些其他示例可能并不使用加速结构,并且可以简单地针对图元测试光线,而无需首先尝试减少需要使用加速结构执行的相交测试的数量。
图2示出了待渲染的场景中的光线202以及两个图元204和206。这两个图元为三角形,并且共享边,使得它们形成四边形。在不同的具体实现中,在图元相交测试单元114的单个实例中测试的图元的数量可以不同。例如,图元相交测试单元114可以是“单测试器”(即被配置成一次测试光线与单个图元的相交)、“双测试器”(即被配置成一次测试光线与一对图元的相交)等。不管图元相交测试单元114被配置成在单个实例中测试光线所针对的图元的数量如何,相交确定逻辑402都应以同一方式处理图元。类似地,图元相交测试单元114被配置成在单个实例中测试光线所针对的图元的数量不影响相交选择逻辑404如何处理图元。在图2中,从光线的角度来看,两个图元的取向被指示为顺时针。图元204由顶点的有序集合(v0,v1,v2)定义,并且图元206由顶点的有序集合(v1,v3,v2)定义。顶点v1与v2之间的边由图元204和206共享。由于v1和v2在图元204和206中以相反的顺序被定义,因此边在一个图元中具有与另一图元相反的方向,因而这两个图元被称为以一致的缠绕进行指定。如上文所描述,光线202r(t)可被表示为r(t)=O+Dt,其中O是表示光线的原点201的向量,并且D是光线的方向向量。在图2中所示出的示例中,光线202在交点208处与图元204相交,但光线202不与图元206相交。
图元相交测试单元114使用非冗余严密技术来依次针对场景中的多个图元测试光线,以便确定光线是否与多个图元中的每个图元相交。在不同的示例中可以使用不同的技术,并且我们在本文描述一个这样的示例。尤其应注意,下文描述的由相交选择逻辑404执行以解决双重相交的方法可以与其他非冗余严密相交测试方案和/或冗余严密相交测试方案一起使用。具体地说,下文描述的由相交选择逻辑404执行以解决双重相交的方法对于与冗余严密相交测试方案一起使用可能是同样有用的(不亚于一起使用),因为在那些相交测试方案中将有更多的双重相交。此外,无论严密性如何,下文描述的方法都仍可为任何相交测试方案提供一定的益处(尤其是在深度冲突方面)。
在本文中描述的示例非冗余严密技术中,图元测试单元114通过针对图元的每个边确定指示光线通过边的哪一侧的参数w来测试光线与图元的相交。例如,w可以是带符号的参数,当平行于光线的方向向量(D)投影到具有在图2中被表示为P和Q的轴的2D空间中时,使用定义图元的边的两个顶点(vi和vj)的位置的函数f(vi,vj)(其在本文中被称为“2D叉积”)来确定该参数。轴P和Q都垂直于光线202的光线方向向量D。P轴与Q轴彼此不平行。P轴与Q轴可以或可以不彼此垂直。这对轴的原点与光线原点201对应。定义边的两个投影顶点vi和vj的位置的2D叉积f(vi,vj)被定义为f(vi,vj)=piqj-qipj,其中pi和qi是投影顶点vi沿这对轴的相应轴的分量,并且其中pi和qj是投影顶点vj沿这对轴的相应轴的分量。在其他示例中,可以使用定义边的两个投影顶点的位置的其他函数来确定参数w。例如,该函数可以返回piqj与qipj的比较结果,这将避免执行减法运算,但将不会提供用于确定重心坐标的量值。
图元的边的符号w指示从边的角度(从vi指向vj)来看,光线是通过该边的左侧还是右侧。在边的“左”侧上通过对应于相对于原点从第一端点到第二端点的逆时针旋转。在边的“右”侧上通过对应于相对于原点从第一端点到第二端点的顺时针旋转。对于上文作为f=(vi,vj)=piqj-qipj给出的“2D叉积”的形式,并且第一轴(P)向右指向,而第二轴(Q)向上指向(如果我们沿光线202看),左/逆时针对应于f的正结果,并且右/顺时针对应于f的负结果。假设左手系统(按照图2),并且在投影空间中将第一轴P和第二轴Q分别向右和向上对齐意味着第三轴(光线方向D)指向页面中,从而给出了校正的感知取向。在右手系统中,第三轴(光线方向D)指向页面外,从而给出了错误的感知取向。
在此示例中,相交测试模块108的图元相交测试单元114基于针对图元的边确定的w参数来确定光线是否与图元相交。例如,如果针对图元的边确定的w参数都具有相同的符号,则确定光线与图元相交;而如果并非针对图元的边确定的w参数都具有相同符号的情况,则确定光线不与图元相交。以此方式,为图元的边确定的参数用于确定光线是否通过图元的边的内部,其中如果确定光线通过图元的边中的所有边的内部,则确定光线与图元相交,并且其中如果确定光线通过图元的边中的一个或多个边的外部,则确定光线不与图元相交。例如,针对图2中的图元204的边中的所有边确定的w参数将是负的,这指示从边的角度来看(从vi指向vj),光线通过边中的所有边的右侧。由此,将确定光线与图元204相交。然而,对于图元206,针对从顶点v1到顶点v3以及从顶点v3到顶点v2的边确定的w参数将是负的,这指示从边的角度来看(从vi指向vj),光线通过那两个边的右侧,但针对从顶点v2到顶点v1的边确定的w参数将是正的,这指示从边的角度来看(从v2指向v1),光线通过该边的左侧。由于针对图元206的边确定的w参数的符号并不都相同,因而确定光线不与图元206相交。
如果光线与共享边(或共享顶点)上的位置相交,则该共享边(或包括共享顶点的那些边)的2D叉积为零,即f(vi,vj)=piqj-qipj=0。例如,光线202可以与图元204和206之间的共享边上的位置相交,即与由顶点v1和v2定义的边上的位置相交。如上文所描述,在此情形下,相交测试优选地为非冗余严密的。如上文所描述,如果确保与多个图元的共享边上的点或封闭扇形的共享顶点相交的光线被确定为与共享该边或顶点的图元中的至少一个图元相交,则具有图元的光线的相交测试是“严密的”。此外,如果确保与多个图元的共享边上的点或封闭扇形的共享顶点相交的光线被确定为与共享该边或顶点的图元中的单个图元相交(即光线被确定为与共享该边或顶点的图元中的一个图元且仅一个图元相交),则光线与图元的相交测试为“非冗余严密的”。如上文所描述,光线独立地针对每个图元进行相交测试。
有不同类型的方案来实现非冗余严密相交测试。例如,一些方案是“缠绕/取向独立的”,这意味着如果光线与图元的边相交(例如,如果边的2D叉积为零),则光线是否与图元相交的确定不取决于图元的取向。在这些方案中,当考虑2D空间中的图元时(例如,如在由上文所提及以及图2中所示出的P和Q轴定义的2D空间中,沿光线方向向量所观察到的),可以基于边主要是图元的顶部边、底部边、左侧边还是右侧边来进行确定,以这种方式,对于两个图元之间的共享边,将得到相反的相交确定结果。例如,在遵循左上规则的方案中,从上方包围图元,或者从左侧包围图元但精确垂直的所有边都被视为图元的边界的部分,而从下方包围图元,或者从右侧包围图元但精确垂直的所有边都不被视为图元的边界的部分。
图3a示出了形成圆形带(即环形)的图元302至320的网格,通过适当的阴影指示哪些边被视为“缠绕/取向独立性”方案中的每个图元的部分。图3a是对于发射远离其原点的初级光线的相机,从略高于相机原点的视点看到的(未投影)图元的视图。从相机的原点来看,仅图元302至310可以是可见的,而图元312至320可能被它们前方的图元遮挡。从视点来看,图元网格的轮廓边界由前图元与后图元之间的边界给出,即图元302与320之间的共享边以及图元310和312之间的共享边。前图元的顺时针取向与后图元的逆时针取向具有一致的缠绕,并且前图元(例如图元306)的逆时针取向与后图元(图3a中未示出)的顺时针取向将具有一致的缠绕。这可以通过想象旋转图元带并且考虑每个图元的取向在其从前图元(即在轮廓的前方)过渡到后图元(即在轮廓的后方)时如何改变并且反之亦然来了解。每个图元的缠绕顺序可以从其在图3a中的感知取向推断出,并且可以看出,除了图元306之外,图元中的所有图元具有一致的缠绕顺序(即在共享该边的两个图元中,每个边具有相反的缠绕方向)。仅为了视觉清晰,图元被交替地颜色编码为中灰色或黑色:图元的颜色在图3a中通过图元内部的缠绕符号的颜色看到。共享边具有黑色或中灰色的实线,以指示共享该边的黑色图元或灰色图元中的哪一者将被与共享边精确相交的光线命中。浅灰色的虚线边指示图3a中所示出的图元不会被与边精确相交的光线命中。共享边具有黑色和中灰色两者的虚线,以指示共享该边的黑色图元和中灰色图元都将被与共享边精确相交的光线命中。
即使图元的缠绕顺序不一致,缠绕/取向独立性方案也会确保图元网格内部的非冗余严密性。然而,这可能导致在图元网格的轮廓边上缺少“非冗余严密性”,例如双重/零命中,而不管共享轮廓边的两个图元的缠绕顺序如何。例如,在图3a中,在图元网格的内部(即不在轮廓边界上)内没有渲染伪像。具体地说,即使图元306相对于其他图元具有不一致的缠绕顺序,在该图元的边上也没有渲染伪像。然而,在左轮廓共享边(即图元302和320共享的边)上,图元302和320两者都将被确定为被与共享边精确相交的光线命中,如虚线的黑色阴影和中灰色阴影所指示。在右轮廓共享边(即图元310和312共享的边)上,图元310和312都不会被确定为被与共享边精确相交的光线命中,如虚线的浅灰色阴影所指示。
图3a示出了实现如上文所描述的左上规则的方案的结果。假设规则被一致地用于所有相交,则可以使用不同的规则(例如左下、右上、右下、左上、右上、左下和右下规则),并且这将仍然维持图元网格内部内的非冗余严密相交确定,但仍将导致在图元网格的轮廓边上缺少非冗余严密性。
图3b示出了与图3a中所示出的图元网格相同的图元网格,该图元网格形成了圆形带(即环形),该圆形带通过适当的阴影来指示在“缠绕/取向依赖性”方案中哪些边被视为每个图元的部分。为了将“缠绕/取向独立性”方案修改为“缠绕/取向依赖性”方案(并且反之亦然),如果光线与图元的边相交(例如,如果边的2D叉积为零),则可以使用相同的方法来进行相交测试,但通过图元取向的指示对图元相交确定添加了后处理XOR运算。以此方式,当光线与图元的边相交时,取决于图元的取向(从光线的视点来看),对图元的相交确定被选择性地反转。例如,通过比较图3b与图3a,我们可以看出,在共享边上,对于具有顺时针取向的图元,图3b中的相交确定与图3a中相同,但对于具有逆时针取向的图元,图3b中的相交确定与图3a中的相交确定相反。
应注意,图元302与320之间的共享轮廓边以及图元310与312之间的共享轮廓边仅在图3b中所示出的缠绕/取向依赖性方案中返回单次命中。然而,由于图元306相对于其他图元的不一致的缠绕顺序,对于图元304与306之间的不一致的共享边,两个图元都将被确定为被与共享边精确相交的光线命中。类似地,对于图元306与308之间的不一致的共享边,两个图元都将被确定为被与共享边精确相交的光线命中。在图3b中未示出的其他示例中,由于不一致的缠绕,零命中可能发生在图元网格的内部的共享边上(即不在轮廓边界上)。对于“缠绕/取向依赖性”的方案,两次/零命中可以分别在这类共享边上的位置处引起渲染冗余/伪像。
图3a和图3b中所示出的这类渲染冗余/伪像的出现难以普遍消除,但它们可以被重新定位,使得它们仅出现在图元网格的轮廓边处(如图3a中),或者使得它们仅出现在具有不一致缠绕的图元之间的共享边上(如图3b中)。在渲染图像中几何形状的轮廓边处的视觉伪像对于渲染图像的观察者来说比在对象中间的视觉伪像更不明显,例如在零命中的情况下,对象中间的视觉伪像可以给出其中具有孔的对象的外观,使得可以通过对象看到背景颜色或遮挡的几何形状。尽管改善了视觉伪像,但是仍然发生形式为双重命中的呈现冗余。因此,总的来说,在一些情形下,通过使用缠绕/取向独立性方案(如图3a中)将可能的渲染伪像移动到轮廓边可被视为优选的。
如果预期(或甚至保证)提交图元的一致缠绕顺序,例如可定向表面,例如环形,则“缠绕/取向依赖性”方案(如图3b中所示出)可能是优选的。然而,如果预期提交图元的不一致缠绕顺序(或者甚至无法避免,例如非可定向表面,例如莫比乌斯(Mobius)带),则“缠绕/取向独立性”方案(如图3a中所示出)可能是优选的。
图4a示出了相交测试模块108内的图元相交测试单元114。图元相交测试单元包括相交确定逻辑402和相交选择逻辑404,它们可以以硬件(例如固定功能电路)、软件、固件或其组合来实现。相交确定逻辑402被配置成接收光线的光线数据以及定义待针对与光线的相交进行测试的新图元的图元数据。光线数据可包括光线的原点和方向向量,以及与光线相关联的其他信息,诸如最大剔除距离和/或最小剔除距离。图元数据可包括图元顶点的位置数据(例如被投影到2D空间中,诸如具有上述P和Q轴的空间)。相交确定逻辑402被配置成根据如上文所描述的非冗余严密方案来执行相交测试,以确定光线是否与图元相交。相交确定逻辑402包括距离计算逻辑406,该距离计算逻辑被配置成计算所确定的相交的相交距离。相交的相交距离可被表示为在相交发生的光线(r(t)=O+Dt)的等式中的t(其在本文中可被称为tint)的值。当找到具有新图元的光线的命中(即相交)时,则相交的指示连同与相交相关的数据一起从相交确定逻辑402被提供给相交选择逻辑404。相交数据包括相交距离(例如对于相交发生的光线的等式中t的值的指示)以及其他数据,诸如可能指示相交发生的图元上的位置的重心坐标,以及相交图元的取向。如果已发现光线与前一图元相交,则相交选择逻辑404将新相交的相交数据与前一相交的相交数据进行比较,并且选择相交中的一个相交来保留(其中另一相交被舍弃)。可以将所选相交与针对该光线找到的后续相交进行比较。相交选择逻辑404将理想地选择保留所比较的两次相交中更近的相交,如两个图元的相交距离所指示。当已测试了光线与其将要测试的图元中的所有图元的相交时,则最近选择的相交是最终针对光线确定的相交,例如其表示该光线与场景中的图元的最近相交。此所选相交可用于渲染场景的图像(例如通过执行如上文参考图1中所示出的处理逻辑110所描述的关于相交的着色器程序)。
图4b是示出光线跟踪系统中光线的相交测试过程的高级流程图,其中测试光线与多个图元(被称为“候选图元”)的相交。在步骤S412中,相交测试模块108确定是否有任何剩余候选图元将被测试与光线的相交,例如使用仍将被测试与光线相交的剩余候选图元列表。如果有,则该方法转到步骤S414,而如果没有,则该方法转到步骤S426。
在步骤S414中,相交测试模块108获得候选图元,并且将该候选图元从光线的剩余候选图元列表中移除。
在步骤S416中,相交测试模块108确定光线是否与候选图元相交。如果光线确实与候选图元相交,则该方法转到步骤S418,而如果光线不与候选图元相交,则该方法转回到步骤S412,使得可以针对该光线的下一候选图元(如果有剩余)来测试该光线。
在步骤S418中,相交测试模块108确定光线与候选图元相交的相交距离。
在步骤S420中,相交测试模块108确定相交距离是否在最小剔除距离与最大剔除距离之间。如果相交距离在最小剔除距离与最大剔除距离之间(可能不包括最小距离和最大距离本身中的任一者、包括最小距离和最大距离本身中的任一者,或者包括最小距离和最大距离本身两者),则该方法进行到步骤S422,而如果相交距离不在最小剔除距离与最大剔除距离之间(可能不包括最小距离和最大距离本身中的任一者、包括最小距离和最大距离本身中的任一者,或者包括最小距离和最大距离本身两者),则该方法返回到步骤S412,使得可以针对该光线的下一候选图元(如果有剩余)来测试该光线。
在步骤S422中,相交测试模块108确定是否已存在针对光线确定的与另一图元的前一相交。如果已针对该光线确定了与另一图元的前一相交,则该方法转到步骤S424。如果没有为该光线确定与另一图元的前一相交,则存储当前相交的相交距离,并且该方法返回到步骤S412,使得可以针对该光线的下一候选图元(如果有剩余)来测试该光线。
在步骤S424中,相交测试模块108确定保留哪次相交,即光线的当前相交或先前确定的相交。通常,相交中更近的相交将被选择保留。下文将参考图5、图8和图10的流程图描述可如何执行对将保留哪次相交的确定的细节。在步骤S424之后,该方法返回到步骤S412,使得可以针对该光线的下一候选图元(如果有剩余)来测试该光线。
如上文所描述,如果在步骤S412中确定没有剩余候选图元将被测试与光线的相交,则该方法转到步骤S426。在步骤S426中,确定是否已针对光线找到了相交。如果已针对光线找到了相交,则该方法转到步骤S428,而如果没有针对光线找到相交,则该方法转到步骤S430。在步骤S428中,报告相交。在步骤S430中,报告未命中。
可以看出,在图4b中所示出的方法中,测试光线与多个候选图元的相交,并且对相交进行比较,使得为光线保留一次相交。以下描述提供了可如何比较光线与两个相应图元的两次相交,使得可以选择相交中的一个相交(例如在光线跟踪系统中用于渲染3D场景的图像)的示例。
对落在用户供应的距离范围之外的图元的预剔除可在相交确定逻辑402或相交选择逻辑404中进行,或者在其自身的中间阶段(图4a中未示出,但在图4b中被示出为步骤S420)中进行。距离范围可被给定为[tmin,tmax]、(tmin,tmax)、[tmin,tmax)或(tmin,tmax],其中应注意,当表示范围时,方括号指示端点包括在该范围内,而圆括号指示端点被排除在该范围之外。此剔除可被视为来自相交确定子阶段的“命中”确定输出的部分,即hit&=(tmin≤tint≤tmax),或hit&=(tmin<tint<tmax),或hit&=(tmin≤tint<tmax),或hit&=(tmin<tint≤tmax),并且因此除非值tmax被用于将前一相交图元的相交距离存储为相交选择的输入,否则该剔除独立于相交选择,在该情况下,标准小于或等于或者小于的比较可以由本文中描述的相交选择逻辑404的比较逻辑代替。类似地,如果tmin用于处理透明和/或半透明的几何形状,则其小于或等于或者小于的比较可以由本文中描述的相交选择逻辑404的比较逻辑代替。
然而,有可能发现光线以相同的相交距离与两个(或更多个)图元相交,例如当光线与两个(或更多个)图元的共享边或共享顶点相交时。由相交确定逻辑402执行的非冗余严密相交测试减少了在相同的相交距离处发现多次相交的情形。然而,即使当相交确定逻辑使用上文描述的非冗余严密相交测试方案时,仍然存在一些情形,其中在图元的共享边上可以发现双重相交,并且其中两个相交距离相等。因为相交确定逻辑402仅局部考虑图元,所以其不能消除可能发生双重相交的所有情形,例如,如果其被实现为“单个测试器”,则一次考虑单个图元,或者如果其被实现为“双测试器”,则一次考虑一对图元,等等。例如,在图3a中所示出的缠绕/取向独立性示例中,当光线与图元带的左轮廓边(即图元302和320共享的边)相交时,将发现双重相交,而在图3b中所示出的缠绕/取向依赖性示例中,当光线与图元304和306共享的边相交时,以及当光线与图元306和308共享的边相交时,将发现双重相交。
启用背面剔除可用于解决双重相交中的一些双重相交(例如在图3a中所示出的示例的左轮廓边上),但用户可能出于许多原因中的一个原因而选择不启用背面剔除,例如由于遍历速度的潜在增益(因为相交的背面几何形状可能由于较早的框丢失而导致更多剔除),并且/或者提供对表面内光线的支持以模拟诸如折射和次表面散射的效果。因此,拥有一种无需启用背面剔除就可以解决双重相交的方法将是有益的。
在图3a和图3b中所示出的示例中,当共享该边的两个图元具有不同取向时,在共享边上会出现双重相交的问题案例。取向是视图依赖性特性,即其依赖于图元和光线。在图3a中所示出的缠绕/取向独立性示例中,图元302和320的缠绕是一致的,但从光线的视点来看,因为图元302是面向前的,而图元320是面向后的,所以这两个图元的取向是不同的。因此,如图3a中所示出,图元302和320具有不同取向,特别是图元302具有顺时针取向,并且图元320具有逆时针取向。在图3b中所示出的缠绕/取向依赖性示例中,图元306的缠绕与网格中其他图元的缠绕不一致,因此从光线的视点来看,图元306的取向不同于图元304和308的取向。具体地说,图元304和308具有顺时针取向,并且图元306具有逆时针取向。
在本文中描述的示例中,如果相交确定逻辑404发现双重相交(例如使用上文描述的冗余严密相交测试方案中的一种冗余严密相交测试方案),则相交选择逻辑406可基于已相交的图元的取向来选择相交中的一次相交。例如,具有面向前的图元的相交可优先于具有面向后的图元的相交。用户可以提供标志来指示面向前的图元是具有顺时针取向还是逆时针取向。
图5示出了在光线跟踪系统100中执行相交测试的第一种方法的流程图。由相交测试模块108,例如由图元相交测试单元114对光线执行图5中所示出的方法。
在步骤S502中,相交确定逻辑402确定光线是否与第一图元相交。例如,步骤S502可以涉及实现非冗余严密相交测试方案,诸如,如上文所描述的缠绕/取向独立性方案或缠绕/取向依赖性方案。如果在步骤S502中确定光线确实与第一图元相交,则该方法从步骤S502转到步骤S504,而如果在步骤S502中确定光线不与第一图元相交,则该方法从步骤S502转到步骤S510。
在步骤S504中,相交确定逻辑402(例如距离计算逻辑406)确定光线与第一图元相交的相交距离(tint,1)。相交确定逻辑还可以确定关于光线与第一图元的相交的其他相交数据,诸如指示第一图元上发生相交的位置的重心坐标,以及第一图元的取向。在步骤S504中针对光线与第一图元的相交确定的相交距离(tint,1)和其他相交数据从相交确定逻辑402传递到相交选择逻辑404。
在步骤S506中,相交确定逻辑402确定光线是否与第二图元相交。例如,步骤S506可以涉及实现非冗余严密相交测试方案,诸如,如上文所描述的缠绕/取向独立性方案或缠绕/取向依赖性方案。如果在步骤S506中确定光线确实与第二图元相交,则该方法从步骤S506转到步骤S508,而如果在步骤S506中确定光线不与第二图元相交,则该方法从步骤S506转到步骤S510。可以在步骤S504之后立即执行步骤S506,或者可以在步骤S504与S506之间执行一些其他处理。
在步骤S508中,相交确定逻辑402(例如距离计算逻辑406)确定光线与第二图元相交的相交距离(tint,2)。相交确定逻辑还可以确定关于光线与第二图元的相交的其他相交数据,诸如指示第二图元上发生相交的位置的重心坐标,以及第二图元的取向。在步骤S508中针对光线与第二图元的相交确定的相交距离(tint,2)和其他相交数据从相交确定逻辑402传递到相交选择逻辑404。在步骤S508之后,该方法进行到步骤S512。
在当相交确定逻辑402确定光线不与图元相交时执行的步骤S510中,相交测试模块随后继续其他处理,例如通过测试光线与另一图元的相交(例如通过针对下一图元循环回到步骤S502或步骤S506),或者通过测试不同光线与图元的相交。
在当相交确定逻辑402确定光线与第一图元和第二图元相交时执行的步骤S512中,相交选择逻辑404确定光线与第一图元相交的相交距离(tint,1)是否等于光线与第二图元相交的相交距离(tint,2)。如果在步骤S512中确定tint,1=tint,2,则该方法从步骤S512转到步骤S514。如果在步骤S512中确定tint,1≠tint,2,则该方法从步骤S512转到步骤S520。
在步骤S514中,相交选择逻辑404确定第一图元和第二图元的取向是否相同。如果在步骤S514中确定第一图元和第二图元的取向不同,则该方法从步骤S514转到步骤S516。如果在步骤S514中确定第一图元和第二图元的取向相同,则该方法从步骤S514转到步骤S518。
因此,如果确定tint,1=tint,2以及第一图元和第二图元的取向不同,则该方法将执行步骤S516。在步骤S516中,相交选择逻辑404基于第一图元和第二图元中具有特定取向的一者来选择光线与第一图元和第二图元中的所述一者的相交。例如,“特定取向”可以是对应于面向前的图元的取向(顺时针或逆时针)。在其他示例中,特定取向有可能是对应于面向后的图元的取向。如上文所提及,用户可以设置指示(例如标志)来指示面向前对应于顺时针还是逆时针(并且相应地,面向后对应于逆时针还是顺时针)。在一些系统中,可以预先确定面向前/面向后的图元与顺时针/逆时针取向之间的对应关系,而无需用户设置指示(例如标志)。
“特定取向”通常对应于由针对图元测试的光线观察到的图元的取向。在第一种意义上,“面向前的取向”标志可被设置为由针对图元测试的光线观察到的图元的取向。从第一种意义上来说,“特定取向”通常等于“面向前的取向”。在第二种意义上,“面向前的取向”可被设置为由源自表面外部的光线观察到的图元的取向(当这被很好地定义时),而不管针对图元测试的实际光线如何。从第二种意义上来说,对于源自表面外部的光线,“特定取向”通常被设置为“面向前的取向”,而对于源自表面内部的光线,“特定取向”通常被设置为“面向后的取向”。
从相交选择逻辑404输出所选相交数据(即所选相交的相交数据)。在步骤S516之后,该方法转到步骤S522。
如果确定tint,1=tint,2并且第一图元和第二图元的取向相同,则该方法将执行步骤S518。在步骤S518中,相交选择逻辑404使用确定性后退平局打破规则选择光线与第一图元和第二图元中的一者的相交。例如,相交选择逻辑404可基于与第一图元和第二图元相关联的唯一图元ID来选择光线与第一图元和第二图元中的一者的相交。由相交测试模块108处理的图元中的每个图元可具有唯一图元ID,或者可替代地,图元ID可以从图元被提交给系统的顺序中导出(由于加速结构的原因,该顺序可能并不与针对光线测试图元的顺序相同)。以此方式,图元ID被用作第二平局打破规则,该第二平局打破规则被用作在不能通过非冗余严密相交测试或通过基于相交图元的取向选择相交来区分相交的情形下的后退。此第二平局打破规则是确定的,因此组合的平局打破规则(即基于取向的平局打破与基于图元ID的平局打破的后退)也是确定的,即其不依赖于图元的处理顺序。此确定性意味着获得稳定的结果(即相同的结果),而不管针对光线测试图元相交的顺序如何。在其他示例中,可以在步骤S518中使用不同的后退平局打破技术。图元上任何完全严格的顺序都将满足要求。如果平局打破规则对图元的完全严格排序进行编码,则图元选择是确定的。从相交选择逻辑404输出所选相交数据(即所选相交的相交数据)。在步骤S518之后,该方法转到步骤S522。
如果确定tint,1≠tint,2,则该方法将执行步骤S520。在步骤S520中,相交选择逻辑404选择光线与第一图元和第二图元中具有较小相交距离的一者的相交。因此,如果tint,1<tint,2,则在步骤S520中,相交选择逻辑404选择与第一图元的相交,而如果tint,2<tint,1,则在步骤S520中,相交选择逻辑404选择与第二图元的相交。从相交选择逻辑404输出所选相交数据(即所选相交的相交数据)。在步骤S520之后,该方法转到步骤S522。
在步骤S522中,在光线跟踪系统中使用所选相交来渲染3D场景的图像。例如,步骤S522可包括确定是否有更多图元将被测试与光线的相交,并且如果有,则该方法可以循环回到步骤S506,随后可以针对下一图元执行该步骤(其中涉及光线的所选相交的图元被视为“第一图元”,并且下一图元被视为“第二图元”)。以此方式,相交测试模块108可以将光线的所选相交的数据与光线的后续相交进行比较,以确定哪次相交是光线的最近相交。当光线的最近相交已被确定并且步骤S522确定不再有图元将被测试与光线的相交时,则光线的最近相交的数据可被传递到处理逻辑110,该处理逻辑可以执行着色器程序以确定如何处理该相交。在光线跟踪系统中处理光线中的所有光线的最终输出可以是渲染图像,该渲染图像可以以任何合适的方式被使用,例如其可被显示在显示器上,存储在存储器中,或者传输到另一设备,仅给出一些示例。
上文参考图5描述的基于相交所涉及的图元的取向来区分相交的平局打破方法(特别是步骤S514和S516)可用于解决双重相交,该双重相交不能在所有情况下使用上文描述的非冗余严密相交测试方案被同时解决。例如,如上文所描述,图3a示出了使用缠绕/取向独立性技术的非冗余严密相交测试方案的结果,并且可以看出,在左轮廓边上存在双重相交。图6a示出了形成与图3a中所示出的圆形带(即环形)相同的图元网格,其中图元602至620与图3a中所示出的相应图元302至320相同,通过适当的阴影指示了哪些边被视为每个图元的部分。图6a示出了当顺时针取向优先时(即当“特定取向”是顺时针时),在此情形下(其中使用了“缠绕/取向独立性”方案)基于图元的取向使用平局打破方法的结果。可以看出,左轮廓边现在被示出为图元602的相交,而不是图元620的相交,因此已进行非任意的图元选择,从而解决了此左轮廓边上的双重相交。具体地说,在此示例中,相交选择逻辑404选择与此共享边上的图元602的相交(并且不选择与此共享边上的图元620的相交),因为从光线的视点来看,图元602具有顺时针取向(其在此情况下是“特定取向”),而从光线的视点来看,图元620具有逆时针取向(在此情况下不是“特定取向”)。在图6a中所示出的示例中,解决了所有双重相交。
图6b示出了形成与图3a中所示出的圆形带(即环形)相同的图元网格,其中图元602至620与图3a中所示出的相应图元302至320相同,通过适当的阴影指示了哪些边被视为每个图元的部分。图6b示出了当逆时针取向优先时(即当“特定取向”是逆时针时),在此情形下(其中使用了“缠绕/取向独立性”方案)基于图元的取向使用平局打破方法的结果。可以看出,左轮廓边现在被示出为图元620的相交,而不是图元602的相交,因此已进行非任意的图元选择,从而解决了此左轮廓边上的双重相交。具体地说,在此示例中,相交选择逻辑404选择与此共享边上的图元620的相交(并且不选择与此共享边上的图元602的相交),因为从光线的视点来看,图元620具有逆时针取向(其在此情况下是“特定取向”),而从光线的视点来看,图元602具有顺时针取向(在此情况下不是“特定取向”)。在图6b中所示出的示例中,解决了所有双重相交。图6a和图6b中所示出的示例中的两个示例都解决了左轮廓边上的双重相交,但对于图6a中所示出的示例可能存在偏好,因为这已经对与网格的大多数面向前的图元相对应的取向进行了优先考虑,从而指示应如何对环带进行定向。
作为另一示例,如上文所描述,图3b示出了使用缠绕/取向依赖性技术的非冗余严密相交测试方案的结果,并且可以看出,在图元304和306共享的边上以及在图元306和308共享的边上存在双重相交。图6c示出了形成与图3b中所示出的圆形带(即环形)相同的图元网格,其中图元602至620与图3b中所示出的相应图元302至320相同,通过适当的阴影指示了哪些边被视为每个图元的部分。图6c示出了当顺时针取向优先时(即当“特定取向”是顺时针时),在此情形下(其中使用了“缠绕/取向依赖性”方案)基于图元的取向使用平局打破方法的结果。可以看出,图元604和606共享的边现在被示出为图元604的相交,而不是图元606的相交,因此已进行非任意的图元选择,从而解决了此共享边上的双重相交。具体地说,在此示例中,相交选择逻辑404选择与此共享边上的图元604的相交(并且不选择与此共享边上的图元606的相交),因为从光线的视点来看,图元604具有顺时针取向(其在此情况下是“特定取向”),而从光线的视点来看,图元606具有逆时针取向(在此情况下不是“特定取向”)。类似地,可以看出,图元606和608共享的边现在被示出为图元608的相交,而不是图元606的相交,因此已进行非任意的图元选择,从而解决了此共享边上的双重相交。具体地说,在此示例中,相交选择逻辑404选择与此共享边上的图元608的相交(并且不选择与此共享边上的图元606的相交),因为从光线的视点来看,图元608具有顺时针取向(其在此情况下是“特定取向”),而从光线的视点来看,图元606具有逆时针取向(在此情况下不是“特定取向”)。在图6c中所示出的示例中,解决了所有双重相交。
图6d示出了形成与图3b中所示出的圆形带(即环形)相同的图元网格,其中图元602至620与图3b中所示出的相应图元302至320相同,通过适当的阴影指示了哪些边被视为每个图元的部分。图6d示出了当逆时针取向优先时(即当“特定取向”是逆时针时),在此情形下(其中使用了“缠绕/取向依赖性”方案)基于图元的取向使用平局打破方法的结果。可以看出,图元604和606共享的边现在被示出为图元606的相交,而不是图元604的相交,因此已进行非任意的图元选择,从而解决了此共享边上的双重相交。具体地说,在此示例中,相交选择逻辑404选择与此共享边上的图元606的相交(并且不选择与此共享边上的图元604的相交),因为从光线的视点来看,图元606具有逆时针取向(其在此情况下是“特定取向”),而从光线的视点来看,图元604具有顺时针取向(在此情况下不是“特定取向”)。类似地,可以看出,图元606和608共享的边现在被示出为图元606的相交,而不是图元608的相交,因此已进行非任意的图元选择,从而解决了此共享边上的双重相交。具体地说,在此示例中,相交选择逻辑404选择与此共享边上的图元606的相交(并且不选择与此共享边上的图元608的相交),因为从光线的视点来看,图元606具有逆时针取向(其在此情况下是“特定取向”),而从光线的视点来看,图元608具有顺时针取向(在此情况下不是“特定取向”)。在图6d中所示出的示例中,解决了所有双重相交。图6c和图6d中所示出的示例中的两个示例都解决了图元604和606共享的边上以及图元606和608共享的边上的双重相交,但对于图6c中所示出的示例可能存在偏好,因为这已经对与网格的大多数面向前的图元相对应的取向进行了优先考虑,从而指示应如何对环带进行定向。
在上文参考图5中所示出的方法描述的示例中,基于取向的平局打破规则仅在两次相交的相交距离相等时有效(如在步骤S512中所确定)。由于距离计算中的误差(例如由于浮点值的舍入),即使当所确定的相交距离不完全相等时,也可能出现问题。例如,由于图元相交确定中缺少数值精度以及其在距离计算中的后续误差,两个理论上相等的距离可能由图元相交子阶段输出为不同的。此外,由于相同的原因,两个理论上几乎相等的距离可以使它们的相对大小颠倒(或变得相等)。因此,即使距离计算中的误差较小,应在另一图元后面的图元可能实际上也被显示在另一图元的前面。此问题被称为“深度冲突”,并且其产生渲染伪像,其中应被另一个图元遮挡的图元显露出来(例如以部分或片段的方式)。如上文所提及,启用背面剔除可以避免由深度冲突引起的一些问题,特别是在轮廓边周围(这是问题经常可能发生的地方),但使用者可能由于先前概述的原因而并未启用背面剔除,因此需要另一种用于解决深度冲突的方法。
例如,当共享该边的两个图元的另外的顶点(其中“另外的顶点”是并非共享边的部分的顶点)具有带有非常不同量值的坐标时,对于在共享边上或附近(例如在轮廓边界上或附近)相交的光线,可能发生深度冲突。坐标值可以以浮点格式来表示。与具有坐标为所有低指数值的另一顶点的图元相比,具有坐标为高指数值的另一顶点的图元在计算相交距离时可能引起更大的误差,因为误差通常与算术运算的最大输入相关。
为了给出可如何计算光线与图元之间的相交的相交距离的示例,应再次注意,光线r(t)可被表示为r(t)=O+Dt,其中O是表示光线的原点的向量,并且D是光线的方向向量。如上文所描述,交点的重心坐标(u,v,w)可由相交确定逻辑402确定。交点rint可通过由重心坐标(即rint=uv0+vv1+wv2)对相交图元的三个顶点(v0,v1,v2)进行插值来计算。给定光线原点O,由r′int给出的rint相对于光线原点O的位置是r′int=rint-O。O与rint之间的欧几里德距离是相交距离,并且由t=|rint-O|=|r′int|给出。如果相交距离应被给出为光线长度的(有符号的)倍数(其通常是优选形式),则最终重新缩放的距离tint给出,其直到符号都是正确的。这只是如何计算相交的相交距离的一个示例,并且在其他示例中可以使用其他方法。
图7a和图7b示出了在上文描述的示例中有可能遭遇深度冲突的区域。具体地说,图7a示出了形成与图3a中所示出的圆形带(即环形)相同的图元网格,其中图元702至720与图3a中在缠绕/取向独立性示例中所示出的相应图元302至320相同,通过适当的阴影指示了哪些边被视为每个图元的部分。类似地,图7b示出了形成与图3b中所示出的圆形带(即环形)相同的图元网格,其中图元702至720与图3b中在缠绕/取向依赖性示例中所示出的相应图元302至320相同,通过适当的阴影指示了哪些边被视为每个图元的部分。可能遭遇深度冲突的区域用阴影指示,并且在图7a和图7b中被表示为722和724。这些区域的位置仅取决于由几何形状定义的空间集合,并且不取决于它们的取向,因此对于缠绕/取向独立性方案和缠绕/取向依赖性方案两者是一样的,分别如图7a和图7b中所示出。
如上文所提及,接近轮廓边界(或在轮廓边界上)或图元之间的共享边的相交有可能是发生深度冲突的候选项,这些图元彼此成高锐角或非常靠近轮廓边界(或在轮廓边界上)(例如轮廓边或轮廓顶点)。应注意,图7a和图7b中的区域722和724包括其相应的共享边。
图8示出了在光线跟踪系统100中执行相交测试的第二种方法的流程图。由相交测试模块108,例如由图元相交测试单元114对光线执行图8中所示出的方法。
步骤S802至S810与图5中所示出并且在上文所描述的步骤S502至S510相同。具体地说,在步骤S802中,相交确定逻辑402确定光线是否与第一图元相交,例如使用非冗余严密相交测试方案,诸如,如上文所描述的缠绕/取向独立性方案或缠绕/取向依赖性方案。如果在步骤S802中确定光线确实与第一图元相交,则该方法从步骤S802转到步骤S804,而如果在步骤S802中确定光线不与第一图元相交,则该方法从步骤S802转到步骤S810。
在步骤S804中,相交确定逻辑402(例如距离计算逻辑406)确定光线与第一图元相交的相交距离(tint,1)。相交确定逻辑还可以确定关于光线与第一图元的相交的其他相交数据,诸如指示第一图元上发生相交的位置的重心坐标,以及第一图元的取向。在步骤S804中针对光线与第一图元的相交确定的相交距离(tint,1)和其他相交数据从相交确定逻辑402传递到相交选择逻辑404。
在步骤S806中,相交确定逻辑402确定光线是否与第二图元相交,例如使用非冗余严密相交测试方案,诸如,如上文所描述的缠绕/取向独立性方案或缠绕/取向依赖性方案。如果在步骤S806中确定光线确实与第二图元相交,则该方法从步骤S806转到步骤S808,而如果在步骤S806中确定光线不与第二图元相交,则该方法从步骤S806转到步骤S810。可以在步骤S804之后立即执行步骤S806,或者可以在步骤S804与S806之间执行一些其他处理。
在步骤S808中,相交确定逻辑402(例如距离计算逻辑406)确定光线与第二图元相交的相交距离(tint,2)。相交确定逻辑还可以确定关于光线与第二图元的相交的其他相交数据,诸如指示第二图元上发生相交的位置的重心坐标,以及第二图元的取向。在步骤S808中针对光线与第二图元的相交确定的相交距离(tint,2)和其他相交数据从相交确定逻辑402传递到相交选择逻辑404。在步骤S808之后,该方法进行到步骤S812。
在当相交确定逻辑402确定光线不与图元相交时执行的步骤S810中,相交测试模块随后继续其他处理,例如通过测试光线与另一图元的相交(例如通过针对下一图元循环回到步骤S802或步骤S806),或者通过测试不同光线与图元的相交。
在步骤S812中,相交选择逻辑404确定第一偏移相交距离(toff,1),该第一偏移相交距离等于光线与第一图元相交的相交距离(tint,1)以及取决于第一图元的取向的第一偏移(δ1)之和。例如,第一偏移δ1可为非零,在该情况下,步骤S812可涉及执行加法(或减法)运算以将tint,1和δ1加在一起。第一偏移δ1可以是正的或负的。第一偏移δ1可以是与tint,1的相对偏移,即第一偏移可以与浮点值tint,1的指数成比例。例如,第一偏移δ1可具有与其将被求和的相交距离tint,1的指数成比例的指数。在一些示例中,第一偏移δ1可为零,在该情况下toff,1=tint,1,并且步骤S812将不会涉及执行加法(或减法)运算。应注意,“减去正/负第一偏移”等同于“加上负/正第二偏移”,其中第二偏移是第一偏移的负值。
在步骤S814中,相交选择逻辑404确定第二偏移相交距离(toff,2),该第二偏移相交距离等于光线与第二图元相交的相交距离(tint,2)以及取决于第二图元的取向的第二偏移(δ2)之和。例如,第二偏移δ2可为非零,在该情况下,步骤S814可涉及执行加法(或减法)运算以将tint,2和δ2加在一起。第二偏移δ2可以是正的或负的。第二偏移δ2可以是与tint,2的相对偏移,即第一偏移可以与浮点值tint,2的指数成比例。例如,第二偏移δ2可具有与其将被求和的相交距离tint,2的指数成比例的指数。在一些示例中,第二偏移δ2可为零,在该情况下toff,2=tint,2,并且步骤S814将不会涉及执行加法(或减法)运算。应注意,如果第一偏移(δ1)为非零,则使用与第一偏移(δ1)具有相同符号(以及可选地相同尾数)的偏移来确定与第一图元具有相同取向的任何图元的偏移相交距离。此外,如果第二偏移(δ2)为非零,则使用与第二偏移(δ2)具有相同符号(以及可选地相同尾数)的偏移来确定与第二图元具有相同取向的任何图元的偏移相交距离。如果第一图元的取向不同于第二图元的取向,则第一偏移(δ1)不同于第二偏移(δ2),例如一个偏移可为零,而一个偏移可为非零。
如果不使用相对偏移,而是使用绝对偏移,则可能出现以下情况:(i)如果第一偏移(δ1)为非零,则使用与第一偏移(δ1)具有相同符号、尾数和指数的偏移来确定与第一图元具有相同取向的任何图元的偏移相交距离,以及(ii)如果第二偏移(δ2)为非零,则使用与第二偏移具有相同符号、尾数和指数的偏移(δ2)来确定与第二图元具有相同取向的任何图元的偏移相交距离。
相交选择逻辑404随后比较所确定的第一偏移相交距离与所确定的第二偏移相交距离(toff,1和toff,2),以选择光线与第一图元和第二图元中的一者的相交。以此方式,相交选择逻辑404识别所确定的第一偏移相交距离和所确定的第二偏移相交距离中的哪一者更小,并且选择对应于所识别的偏移相交距离的相交。
具体地说,在步骤S816中,相交选择逻辑404确定第二偏移相交距离(toff,2)是否小于第一偏移相交距离(toff,1)。如果toff,2<toff,1,则该方法从步骤S816转到步骤S818,而如果toff,2≥toff,1,则该方法从步骤S816转到步骤S820。
在步骤S818(如果toff,2<toff,1,则执行该步骤)中,相交选择逻辑404选择光线与第二图元的相交。从相交选择逻辑404输出所选相交数据(即所选相交的相交数据)。在步骤S818之后,该方法转到步骤S826。
在步骤S820(如果toff,2≥toff,1,则执行该步骤)中,相交选择逻辑404确定第一偏移相交距离(toff,1)是否等于第二偏移相交距离(toff,2)。如果toff,1≠toff,2,则该方法从步骤S820转到步骤S822,而如果toff,1=toff,2,则该方法从步骤S820转到步骤S824。
在步骤S822(如果toff,2>toff,1,则执行该步骤)中,相交选择逻辑404选择光线与第一图元的相交。从相交选择逻辑404输出所选相交数据(即所选相交的相交数据)。在步骤S822之后,该方法转到步骤S826。
在步骤S824(如果toff,2=toff,1,则执行该步骤)中,相交选择逻辑404使用确定性后退平局打破规则选择光线与第一图元和第二图元中的一者的相交。例如,相交选择逻辑404可基于与第一图元和第二图元相关联的唯一图元ID来选择光线与第一图元和第二图元中的一者的相交。如上文所描述,由相交测试模块108处理的图元中的每个图元可具有唯一图元ID,或者可替代地,图元ID可以从图元被提交给系统的顺序中导出(由于加速结构的原因,该顺序可能并不与针对光线测试图元的顺序相同)。以此方式,图元ID被用作第二平局打破规则,该第二平局打破规则被用作在不能通过非冗余严密相交测试或通过将取向依赖性偏移应用于相交距离来区分相交的情形下的后退。此第二平局打破规则也是确定的,即其不依赖于图元的处理顺序。在其他示例中,可以在步骤S824中使用不同的后退平局打破技术。如上文关于步骤S518所描述,图元上的任何完全严格顺序都将满足要求。如果平局打破规则对图元的完全严格排序进行编码,则图元选择是确定的。从相交选择逻辑404输出所选相交数据(即所选相交的相交数据)。在步骤S824之后,该方法转到步骤S826。
在步骤S826中,在光线跟踪系统中使用所选相交来渲染3D场景的图像。例如,步骤S826可包括确定是否有更多图元将被测试与光线的相交,并且如果有,则该方法可以循环回到步骤S806,随后可以针对下一图元执行该步骤(其中涉及光线的所选相交的图元被视为“第一图元”,并且下一图元被视为“第二图元”)。以此方式,相交测试模块108可以将光线的所选相交的数据与光线的后续相交进行比较,以确定哪次相交是光线的最近相交。当光线的最近相交已被确定并且步骤S826确定不再有图元将被测试与光线的相交时,则光线的最近相交的数据可被传递到处理逻辑110,该处理逻辑可以执行着色器程序以确定如何处理该相交。在光线跟踪系统中处理光线中的所有光线的最终输出可以是渲染图像,该渲染图像可以以任何合适的方式被使用,例如其可被显示在显示器上,存储在存储器中,或者传输到另一设备,仅给出一些示例。
在使用绝对偏移的示例中,可将相同偏移应用于具有相同取向的图元的所有相交距离。在使用相对偏移的示例中,可将具有相同符号和尾数但不同指数(例如等于其将被应用的相交距离的指数)的偏移应用于具有相同取向的图元的所有相交距离。将不同的偏移应用于具有不同取向的图元的相交距离。如果第一图元具有特定取向,则第一偏移(δ1)小于第一图元不具有特定取向的情况。类似地,如果第二图元具有特定取向,则第二偏移(δ2)小于第二图元不具有特定取向的情况。偏移量δ1与δ2之间的差(当第一图元和第二图元具有不同的取向时)表示阈值,该阈值可被表示为ε,其中ε=|δ12|。应注意,如果我们使用相对偏移,则阈值ε的大小将取决于第一相交距离和第二相交距离两者的指数值,因此ε不一定是常数项。如果两个相交距离之间的差小于阈值,并且如果相交中涉及的图元的取向不同,则所选相交将是涉及具有特定取向的图元(例如对应于面向前的图元)的相交。如果两个相交距离之间的差小于阈值且非零,并且如果相交中涉及的两个图元的取向相同,则所选相交将是涉及具有最小相交距离的图元的相交。如果两个相交距离之间的差为零,并且如果相交中涉及的两个图元的取向相同,则所选相交将是涉及通过后退平局打破技术选择的图元的相交。如果两个相交距离之间的差等于阈值,并且如果相交中涉及的两个图元的取向不同,则所选相交将是涉及具有最小相交距离的图元的相交,或者是通过后退平局打破技术选择的图元,这取决于具有更近或更远相交距离的图元是否具有特定取向。如果两个相交距离之间的差等于阈值,并且如果相交中涉及的两个图元的取向相同,则所选相交将是涉及具有最小相交距离的图元的相交。如果两个相交距离之间的差大于阈值,则所选相交将是涉及具有最小相交距离的图元的相交。
在图8中所示出的示例中,确定第一偏移相交距离(toff,1)包括确定光线与第一图元相交的相交距离(tint,1),并且确定第二偏移相交距离(toff,2)包括确定光线与第二图元相交的相交距离(tint,2)。此外,以下中的一者或两者:(i)确定第一偏移相交距离(toff,1)包括使光线与第一图元相交的所确定的相交距离(tint,1)偏移达第一偏移(δ1),以及(ii)确定第二偏移相交距离(toff,2)包括使光线与第二图元相交的所确定的相交距离(tint,2)偏移达第二偏移(δ2)。应注意,如果第一偏移(δ1)为零,则使光线与第一图元相交的所确定的相交距离(tint,1)偏移达第一偏移(δ1)等同于不执行偏移步骤。类似地,如果第二偏移(δ2)为零,则使光线与第二图元相交的所确定的相交距离(tint,2)偏移达第二偏移(δ2)等同于不执行偏移步骤。在一些示例中,一个取向的图元的偏移被设置为零,使得可以避免一些加法运算。具体地说,在第一图元和第二图元具有不同取向的一些示例中,(i)第一偏移(δ1)为零,并且第二偏移(δ2)为非零,或者(ii)第二偏移(δ2)为零,并且第一偏移(δ1)为非零。在第一图元和第二图元具有不同取向的其他示例中,(iii)具有特定取向的图元的偏移为零,并且没有特定取向的图元的偏移严格为正,或者(iv)没有特定取向的图元的偏移为零,并且具有特定取向的图元的偏移严格为负。
可了解,在图8中所示出的方法中,基于从相交确定逻辑402输出的相交图元的取向,相交选择逻辑404将(较小)绝对或(较小)相对偏移(例如较少数量的最小精度单位(ULP))添加到相交距离计算的结果中。偏移可被加到一个取向上,或者可从另一取向上被减去,这两种方法在相交距离的相对顺序方面具有相同效果(即图元选择)。应注意,减去正偏移等同于加上负偏移。在(较小)相对偏移的情况下,偏移可被加到浮点值的尾数上,该尾数表示与该浮点值的指数无关的相交距离。以此方式,偏移的量值取决于相交距离的指数。
通过使用偏移来执行沿光线方向的移位,可将两个相邻但不相接的图元推得足够远,以阻止深度冲突。在解决任何深度冲突之前,偏移的最小大小(例如ULP的最小数量)可取决于由相交确定逻辑402中的距离计算逻辑406执行的距离计算的准确度(例如由于舍入)。由于隐藏表面移除的确定在无意的情况下被颠倒,如果相对偏移的大小(即δ1与δ2之间的差)较大,则可能会出现错误的结果。由此,相对偏移的大小(即δ1与δ2之间的差)可被设置为保守地小,使得很少出现错误结果,但仍然解决了一定的深度冲突。可替代地,相对偏移的大小(即δ1与δ2之间的差)可被设置为保守地大,使得其以一些错误的结果(例如在近自相交处)为代价解决所有的深度冲突。具体地说,由于评估足以解决所有深度冲突的最小相对偏移(被表示为最优偏移)可能是不可行的,因而可采用保守的大值,从而接受可能引出过量的错误结果(例如在近自相交处)。
图9a示出了形成与图3a中所示出的圆形带(即环形)相同的图元网格,其中图元902至920与图3a中所示出的相应图元302至320相同,其中使用缠绕/取向独立性方案来进行相交测试,通过适当的阴影指示了哪些边被视为每个图元的部分。图9a示出了对相交距离应用偏移的(夸大的)结果,其中具有顺时针取向的图元的偏移小于具有逆时针取向的图元的偏移。以此方式,顺时针取向被优先考虑,并且其具有将逆时针取向的图元(相对于顺时针取向的图元)移位得更远离光线原点的效果。尽管相交确定逻辑402发现左轮廓边(即图元902和920共享的边)为双重相交,但相交选择逻辑404可通过比较共享边上的两个图元的偏移相交距离来选择在左轮廓边上与图元902的相交(并且不选择与图元920的相交)。在图9a中可以看出,在这两个图元共享的边上,图元902的偏移相交距离小于图元920的偏移相交距离。
图9b示出了形成与图3b中所示出的圆形带(即环形)相同的图元网格,其中图元902至920与图3b中所示出的相应图元302至320相同,其中使用缠绕/取向依赖性方案来进行相交测试,通过适当的阴影指示了哪些边被视为每个图元的部分。图9b示出了对相交距离应用偏移的(夸大的)结果,其中具有顺时针取向的图元的偏移小于具有逆时针取向的图元的偏移。以此方式,顺时针取向被优先考虑,并且其具有将逆时针取向的图元(相对于顺时针取向的图元)移位得更远离光线原点的效果。应注意,右轮廓边被示出为在包含边(由图元912的中间灰实线表示)前面偏移的排除边(由图元910的浅灰虚线表示)。在图9b中,这两条线在重叠处可视地组合,但应理解,由于图元910的遮挡边被排除,因而光线穿过它到达后面的图元912的包含边。尽管相交确定逻辑402发现图元904和906共享的边以及图元906和908共享的边为双重相交,但相交选择逻辑404可通过比较共享边上的图元的偏移相交距离来选择在这些相应边上与图元904和908的相交(并且不选择与图元906的相交)。从图9b中可以看出,图元904的偏移相交距离小于图元906在这两个图元共享的边上的偏移相交距离,并且图元908的偏移相交距离小于图元906在这两个图元共享的边上的偏移相交距离。
在图9a和图9b中,观察者的角度略高于光线原点。这意味着由于偏移造成的沿光线方向的移位在图中是可见的,但从光线的视角来看,在网格的相邻图元之间看到的间隙是不可见的,即仍然保证了严密性。此外,图9a和图9b仅示出了优先考虑顺时针取向的情况(即顺时针图元的偏移小于逆时针图元的偏移)。这是因为优先考虑逆时针取向对于图中所示出的示例网格将是不正确的行为,如由环带的大多数面向前的图元的取向所给出,这指示了表面应如何被定向。例如,通过将所有顺时针图元远离光线原点移位或者将所有逆时针图元朝向光线原点移位来考虑逆时针图元的优先级,将会增加深度冲突问题。在此情况下,特定取向是不正确的,并且可通过颠倒特定取向(即顺时针变成逆时针,或者逆时针变成顺时针)来解决伪像。对于表面,对于源自表面外部的光线(例如相机光线、反射光线、阴影光线、环境光遮挡光线等),建议将特定取向设置为具有外部原点(假设这被良好定义)的任何光线所观察到的取向,并且对于源自表面内部的光线(例如折射光线、次表面散射光线等),建议将特定取向设置为具有内部原点(假设这被良好定义)的任何光线所观察到的取向。
相交距离移位达这些偏移仅用于由相交选择逻辑404执行的相交选择的目的。当从图元相交测试单元114输出相交距离(例如作为所选相交数据的部分)时,则输出未移位的相交距离,以用于光线跟踪系统的其他部分,例如由处理逻辑110执行的着色器程序。
将给定取向(例如顺时针)的所有图元朝向光线原点移位,或者将相反取向(例如逆时针)的所有图元远离光线原点移位,并且假设特定取向的选择是正确的,将不会引入无意的隐藏表面移除,除非存在两个取向的图元作为最近相交(并且背面剔除关闭),例如将具有逆时针取向的贴图应用于具有顺时针取向的表面(如相同光线所观察到的),这是可以通过确保场景中的表面具有匹配的缠绕顺序来避免的情形。
作为对相交距离应用偏移的替代方案,相交选择逻辑404可改为确定两个相交距离之间的差是否小于或等于阈值(或者在一些示例中,小于阈值),并且如果是,则优先考虑具有特定取向(例如对应于面向前的图元的取向)的相交。具体地说,图10示出了在光线跟踪系统100中执行相交测试的第三种方法的流程图。由相交测试模块108,例如由图元相交测试单元114对光线执行图10中所示出的方法。
步骤S1002至S1010与图5中所示出的步骤S502至S510以及如上文所描述的步骤S802至S810相同。具体地说,在步骤S1002中,相交确定逻辑402确定光线是否与第一图元相交,例如使用非冗余严密相交测试方案,诸如上文所描述的缠绕/取向独立性方案或缠绕/取向依赖性方案。如果在步骤S1002中确定光线确实与第一图元相交,则该方法从步骤S1002转到步骤S1004,而如果在步骤S1002中确定光线不与第一图元相交,则该方法从步骤S1002转到步骤S1010。
在步骤S1004中,相交确定逻辑402(例如距离计算逻辑406)确定光线与第一图元相交的相交距离(tint,1)。相交确定逻辑还可以确定关于光线与第一图元的相交的其他相交数据,诸如指示第一图元上发生相交的位置的重心坐标,以及第一图元的取向。在步骤S1004中针对光线与第一图元的相交确定的相交距离(tint,1)和其他相交数据从相交确定逻辑402传递到相交选择逻辑404。
在步骤S1006中,相交确定逻辑402确定光线是否与第二图元相交,例如使用非冗余严密相交测试方案,诸如上文所描述的缠绕/取向独立性方案或缠绕/取向依赖性方案。如果在步骤S1006中确定光线确实与第二图元相交,则该方法从步骤S1006转到步骤S1008,而如果在步骤S1006中确定光线不与第二图元相交,则该方法从步骤S1006转到步骤S1010。可以在步骤S1004之后立即执行步骤S1006,或者可以在步骤S1004与S1006之间执行一些其他处理。
在步骤S1008中,相交确定逻辑402(例如距离计算逻辑406)确定光线与第二图元相交的相交距离(tint,2)。相交确定逻辑还可以确定关于光线与第二图元的相交的其他相交数据,诸如指示第二图元上发生相交的位置的重心坐标,以及第二图元的取向。在步骤S1008中针对光线与第二图元的相交确定的相交距离(tint,2)和其他相交数据从相交确定逻辑402传递到相交选择逻辑404。在步骤S1008之后,该方法进行到步骤S1012。
在当相交确定逻辑402确定光线不与图元相交时执行的步骤S1010中,相交测试模块随后继续其他处理,例如通过测试光线与另一图元的相交(例如通过针对下一图元循环回到步骤S1002或步骤S1006),或者通过测试不同光线与图元的相交。
在步骤S1012中,相交选择逻辑404确定光线与第一图元相交的相交距离(tint,1)和光线与第二图元相交的相交距离(tint,2)之间的差是否小于或等于阈值ε。换句话说,相交选择逻辑404确定是否|tint,1-tint,2|≤ε。如果|tint,1-tint,2|≤ε,则该方法从步骤S1012转到步骤S1014,而如果|tint,1-tint,2|>ε,则该方法从步骤S1012转到步骤S1022。在此第一种情况(使用‘小于或等于’比较)下,阈值ε大于或等于零。在一些示例中,步骤S1012可涉及相交选择逻辑404确定光线与第一图元相交的相交距离(tint,1)和光线与第二图元相交的相交距离(tint,2)之间的差是否小于阈值ε。换句话说,相交选择逻辑404可确定是否|tint,1-tint,2|<ε。如果|tint,1-tint,2|<ε,则该方法从步骤S1012转到步骤S1014,而如果|tint,1-tint,2|≥ε,则该方法从步骤S1012转到步骤S1022。在此第二种情况(使用‘小于’比较)下,阈值ε大于零。从概念上说,步骤S1012的这两种方法(即使用‘小于或等于’比较,以及使用‘小于’比较)非常类似,并且对于固定尾数浮点格式,‘小于’比较可通过使用阈值ε'而被实现为‘小于或等于’比较,该阈值相对于上文所提及的阈值ε减小了一个ulp(即一个最小精度单位),即ε′=ε-ulp。类似地,对于固定尾数浮点格式,‘小于或等于’比较可通过使用阈值ε″而被实现为‘小于’比较,该阈值相对于上文所提及的阈值ε增大一个ulp(即一个最小精度单位),即ε″=ε+ulp。
在步骤S1014中,相交选择逻辑404确定第一图元和第二图元的取向是否相同。如果在步骤S1014中确定第一图元和第二图元的取向不同,则该方法从步骤S1014转到步骤S1016。如果在步骤S1014中确定第一图元和第二图元的取向相同,则该方法从步骤S1014转到步骤S1018。
因此,如果确定|tint,1-tint,2|≤ε(或者可替代地,|tint,1-tint,2|<ε)以及第一图元和第二图元的取向不同,则该方法将执行步骤S1016。在步骤S1016中,相交选择逻辑404基于第一图元和第二图元中具有特定取向的一者来选择光线与第一图元和第二图元中的所述一者的相交。例如,“特定取向”可以是对应于面向前的图元的取向(顺时针或逆时针)。在其他示例中,特定取向有可能是对应于面向后的图元的取向。如上文所提及,用户可以设置指示(例如标志)来指示面向前对应于顺时针还是逆时针(并且相应地,面向后对应于逆时针还是顺时针)。在一些系统中,可以预先确定面向前/面向后的图元与顺时针/逆时针取向之间的对应关系,而无需用户设置指示(例如标志)。“特定取向”通常对应于由针对图元测试的光线观察到的图元的取向。在第一种意义上,“面向前的取向”标志可被设置为由针对图元测试的光线观察到的图元的取向。从第一种意义上来说,“特定取向”通常等于“面向前的取向”。在第二种意义上,“面向前的取向”可被设置为由源自表面外部的光线观察到的图元的取向(当这被很好地定义时),而不管针对图元测试的实际光线如何。从第二种意义上来说,对于源自表面外部的光线,“特定取向”通常被设置为“面向前的取向”,而对于源自表面内部的光线,“特定取向”通常被设置为“面向后的取向”。从相交选择逻辑404输出所选相交数据(即所选相交的相交数据)。在步骤S1016之后,该方法转到步骤S1024。
如果确定|tint,1-tint,2|≤ε(或者可替代地,|tint,1-tint,2|<ε)并且第一图元和第二图元的取向相同,则该方法将执行步骤S1018。在步骤S1018中,相交选择逻辑404确定光线与第一图元相交的相交距离(tint,1)是否等于光线与第二图元相交的相交距离(tint,2)。如果在步骤S1018中确定tint,1=tint,2,则该方法从步骤S1018转到步骤S1020。如果在步骤S1018中确定tint,1≠tint,2,则该方法从步骤S1018转到步骤S1022。
如果tint,1=tint,2并且第一图元和第二图元的取向相同,则该方法将执行步骤S1020。在步骤S1020中,相交选择逻辑404使用确定性后退平局打破规则选择光线与第一图元和第二图元中的一者的相交。例如,相交选择逻辑404可基于与第一图元和第二图元相关联的唯一图元ID来选择光线与第一图元和第二图元中的一者的相交。由相交测试模块108处理的图元中的每个图元可具有唯一图元ID,或者可替代地,图元ID可以从图元被提交给系统的顺序中导出(由于加速结构的原因,该顺序可能并不与针对光线测试图元的顺序相同)。以此方式,图元ID被用作第二平局打破规则,该第二平局打破规则被用作在不能通过非冗余严密相交测试或通过基于相交图元的取向选择相交来区分相交的情形下的后退。此第二平局打破规则也是确定的,即其不依赖于图元的处理顺序。在其他示例中,可以在步骤S1020中使用不同的后退平局打破技术。如上文关于步骤S518和S824所描述,图元上的任何完全严格顺序都将满足要求。如果平局打破规则对图元的完全严格排序进行编码,则图元选择是确定的。从相交选择逻辑404输出所选相交数据(即所选相交的相交数据)。在步骤S1020之后,该方法转到步骤S1024。
如果确定|tint,1-tint,2|>ε(或者可替代地,|tint,1-tint,2|≥ε),或者如果确定第一图元和第二图元的取向相同并且tint,1≠tint,2,则该方法将执行步骤S1022。在步骤S1022中,相交选择逻辑404选择光线与第一图元和第二图元中具有较小相交距离的一者的相交。因此,如果tint,1<tint,2,则在步骤S1022中,相交选择逻辑404选择与第一图元的相交,而如果tint,2<tint,1,则在步骤S1022中,相交选择逻辑404选择与第二图元的相交。从相交选择逻辑404输出所选相交数据(即所选相交的相交数据)。在步骤S1022之后,该方法转到步骤S1024。
在步骤S1024中,在光线跟踪系统中使用所选相交来渲染3D场景的图像。例如,步骤S1024可包括确定是否有更多图元将被测试与光线的相交,并且如果有,则该方法可以循环回到步骤S1006,随后可以针对下一图元执行该步骤(其中涉及光线的所选相交的图元被视为“第一图元”,并且下一图元被视为“第二图元”)。以此方式,相交测试模块108可以将光线的所选相交的数据与光线的后续相交进行比较,以确定哪次相交是光线的最近相交。当光线的最近相交已被确定并且步骤S1024确定不再有图元将被测试与光线的相交时,则光线的最近相交的数据可被传递到处理逻辑110,该处理逻辑可以执行着色器程序以确定如何处理该相交。在光线跟踪系统中处理光线中的所有光线的最终输出可以是渲染图像,该渲染图像可以以任何合适的方式被使用,例如其可被显示在显示器上,存储在存储器中,或者传输到另一设备,仅给出一些示例。
在上文详细描述的示例中的所有三个示例中(分别参考图5、图8和图10中的流程图),如果光线与第一图元相交的相交距离和所述光线与第二图元相交的相交距离之间的差满足相对于阈值的比较条件,并且如果所述第一图元和所述第二图元的所述取向不同,则选择所述光线与所述第一图元和所述第二图元中具有特定取向的一者的相交。也就是说,如果第一图元和第二图元的图元取向不同,则选择光线与第一图元和第二图元中具有特定图元取向的一者的相交。换句话说,如果第一图元作为整体的取向不同于第二图元作为整体的取向,则选择光线与第一图元和第二图元中具有作为整体的特定取向的一者的相交。如上文所提及,图元的取向是取决于图元和光线两者的视图依赖性特性。因此,对于第一图元和第二图元的不同的图元取向,当相同光线与每个图元相交时,每个图元由沿该方向行进的相同光线相交,两个图元中的一个图元具有顺时针取向,并且两个图元中的另一图元具有逆时针取向。例如,第一图元可具有顺时针取向,并且第二图元可具有逆时针取向。第一图元的缠绕可以与第二图元的缠绕不一致。第一图元可以是面向前的图元,并且第二图元可以是面向后的图元。比较条件可以是‘小于’条件,使得如果光线与第一图元相交的相交距离和光线与第二图元相交的相交距离之间的差小于阈值,并且如果第一图元和第二图元的取向不同,则选择光线与第一图元和第二图元中具有特定取向的一者的相交。比较条件可以是‘小于或等于’条件,使得如果光线与第一图元相交的相交距离和光线与第二图元相交的相交距离之间的差小于或等于阈值,并且如果第一图元和第二图元的取向不同,则选择光线与第一图元和第二图元中具有特定取向的一者的相交。将此概念用于所有三个示例中,以解决双重相交,并且减少深度冲突的影响。在第一示例中(参考图5所描述),阈值为零,并且阈值比较被实现为“小于或等于”比较,而在第二和第三示例中(参考图8和图10描述),阈值为非零(例如严格为正)。在第二示例中(参考图8所描述),阈值比较被实现为关于ε的“小于”比较,其中在该示例中,ε=|δ12|。在第三示例中(参考图10所描述),阈值比较被实现为“小于或等于”或者“小于”比较,这取决于如上文所描述那样使用的方法的第一或第二版本。“特定取向”可以是与面向前的图元的取向对应的取向。换句话说,在一些示例中,具有所述特定取向的图元是面向前的图元,并且具有与所述特定取向不同的取向的图元是面向后的图元。此外,在上文详细描述的示例中的所有三个示例中(分别参考图5、图8和图10中的流程图),如果光线与第一图元相交的相交距离和光线与第二图元相交的相交距离之间的差大于阈值,则选择光线与第一图元和第二图元中具有较小相交距离的一者的相交。此外,在上文详细描述的示例中的所有三个示例中(分别参考图5、图8和图10中的流程图),如果光线与第一图元相交的相交距离等于光线与第二图元相交的相交距离,并且如果第一图元和第二图元的取向相同,则使用后退平局打破规则,例如基于与第一图元和第二图元相关联的唯一图元ID来选择光线与第一图元和第二图元中的一者的相交。也就是说,如果第一图元和第二图元的图元取向相同,则第一图元和第二图元的图元取向不用于选择光线与第一图元和第二图元中的一者的相交。使用后退平局打破规则,而不是针对第一图元和第二图元中具有特定图元取向的一者选择相交。这意味着,对于上文描述的三个示例中的每个示例,该方法包括确定第一图元和第二图元是否具有相同的图元取向,以及(i)如果第一图元和第二图元的图元取向不同,则选择光线与第一图元和第二图元中具有特定图元取向的一者的相交,以及(ii)如果第一图元和第二图元的图元取向相同,则不选择光线与第一图元和第二图元中具有特定图元取向的一者的相交,而改为执行后退平局打破规则。换句话说,如果第一图元和第二图元的图元取向相同,则该方法涉及使用确定性后退平局打破规则来选择光线与第一图元和第二图元中的一者的相交,而不是选择光线与第一图元和第二图元中具有特定图元取向的一者的相交。类似地,如果第一图元和第二图元的图元取向不同,则该方法涉及在不应用确定性后退平局打破规则的情况下选择光线与第一图元和第二图元中的一者的相交,而改为选择光线与第一图元和第二图元中具有特定图元取向的一者的相交。
如果光线与第一图元相交的相交距离和光线与第二图元相交的相交距离之间的差等于阈值,则选择(i)光线与第一图元和第二图元中具有特定取向的一者的相交,(ii)光线与第一图元和第二图元中相对于平局打破规则(例如基于唯一图元ID)选择的一者的相交,或者(iii)具有较小相交距离的相交。在第一示例中(上文参考图5所描述,其中阈值为零),如果光线与第一图元和第二图元相交的相交距离相等(即差值等于零),则除非两个取向相同,否则选择具有特定取向的图元,在该情况下应用平局打破规则。在第二示例中(上文参考图8所描述,其中阈值ε=|δ12|),如果光线与第一图元相交的相交距离和光线与第二图元相交的相交距离之间的差等于阈值,并且如果取向不相同并且具有更大相交距离的图元具有特定取向,则应用平局打破规则,否则选择具有较小相交距离的图元。在第三示例的第一版本(如上参考图10所描述,当使用“小于或等于”比较时)中,如果光线与第一图元相交的相交距离和光线与第二图元相交的相交距离之间的差等于阈值,则除非两个取向相同,否则选择具有特定取向的图元,在该情况下选择更小的相交距离。在第三示例的第二版本(如上参考图10所描述,当使用“小于”比较时)中,如果光线与第一图元相交的相交距离和光线与第二图元相交的相交距离之间的差等于阈值,则选择具有较小相交距离的图元。
第一方法(图5中所示出)和第三方法(图10中所示出)涉及:(a)确定光线与第一图元相交的相交距离和光线与第二图元相交的相交距离之间的差满足相对于阈值的比较条件(例如在步骤S512或S1012中),(b)确定第一图元和第二图元的取向不同(例如在步骤S514或S1014中),以及(c)响应于确定以下情况而选择光线与第一图元和第二图元中具有特定取向的一者的相交(在步骤S516或S1016中):(i)光线与第一图元相交的相交距离和光线与第二图元相交的相交距离之间的差满足相对于阈值的比较条件,以及(ii)第一图元和第二图元的取向不同。在第一种方法(图5中所示出)中,阈值为零,而在第三种方法(图10中所示出)中,阈值可为非零(例如严格为正)。
图11示出了可以在其中实现本文中所描述的光线跟踪系统的计算机系统。计算机系统包括CPU 1102、GPU 1104、存储器1106和其他装置1114,诸如显示器1116、扬声器1118和相机1122。光线跟踪单元1110(对应于光线跟踪单元102)在GPU 1104以及神经网络加速器(NNA)1111上实现。在其他示例中,光线跟踪单元1110可以在CPU 1102上或在NNA 1111内实现,或者作为计算机系统中的单独处理单元实施。计算机系统的部件可经由通信总线1120彼此进行通信。存储装置1112(对应于存储器104)被实现为存储器1106的部分。
图1的光线跟踪系统被示出为包括数个功能块。这仅是示意性的,并且不旨在限定这类实体的不同逻辑元件之间的严格划分。每个功能块可以任何合适的方式提供。应理解,本文中描述为由光线跟踪系统形成的中间值不需要由光线跟踪系统在任何时间点物理地生成,并且可以只表示方便描述由光线跟踪系统在其输入与输出之间执行的处理的逻辑值。
光线跟踪单元,并且具体地说本文中所描述的相交测试模块可体现在集成电路上的硬件中。本文中所描述的相交测试模块可被配置成执行本文中所描述的方法中的任一种方法。一般来说,上文所描述的功能、方法、技术或部件中的任一者可在软件、固件、硬件(例如固定逻辑电路系统)或其任何组合中实现。本文中可以使用术语“模块”、“功能性”、“部件”、“元件”、“单元”、“块”和“逻辑”来概括地表示软件、固件、硬件或它们的任何组合。在软件实施方式的情况下,模块、功能性、部件、元件、单元、块或逻辑表示程序代码,当在处理器上被执行时,所述程序代码执行指定任务。本文中所描述的算法和方法可由执行代码的一个或多个处理器执行,所述代码促使处理器执行算法/方法。计算机可读存储介质的示例包括随机访问存储器(RAM)、只读存储器(ROM)、光盘、闪存存储器、硬盘存储器,以及可使用磁性、光学和其他技术来存储指令或其他数据并且可由机器访问的其他存储器设备。
如本文中所使用的术语计算机程序代码和计算机可读指令是指用于处理器的任何种类的可执行代码,包括以机器语言、解译语言或脚本语言表达的代码。可执行代码包括二进制代码、机器代码、字节代码、定义集成电路的代码(诸如硬件描述语言或网表),以及用诸如C、Java或OpenCL等编程语言代码表达的代码。可执行代码可以是例如任何种类的软件、固件、脚本、模块或库,当在虚拟机或其他软件环境中被适当地执行、处理、解译、编译、运行时,这些软件、固件、脚本、模块或库使得支持可执行代码的计算机系统的处理器执行由所述代码指定的任务。
处理器、计算机或计算机系统可以是任何种类的设备、机器或专用电路,或其集合或一部分,它具有处理能力使得可以执行指令。处理器可以是或包括任何种类的通用或专用处理器,诸如CPU、GPU、NNA、片上系统、状态机、媒体处理器、专用集成电路(ASIC)、可编程逻辑阵列、现场可编程门阵列(FPGA)等。计算机或计算机系统可包括一个或多个处理器。
本发明还意图涵盖限定如本文中所描述的硬件的配置的软件,诸如硬件描述语言(HDL)软件,用于设计集成电路或用于配置可编程芯片以执行所需功能。也就是说,可以提供一种计算机可读存储介质,其上编码有呈集成电路定义数据集形式的计算机可读程序代码,当在集成电路制造系统中被处理(即运行)时,该计算机可读程序代码将该系统配置成制造被配置成执行本文中所描述的方法中的任一种方法的相交测试模块,或者制造包括本文中所描述的任何装置的相交测试模块。集成电路定义数据集可以是例如集成电路描述。
因此,可以提供一种在集成电路制造系统处制造如本文中所描述的相交测试模块的方法。此外,可以提供一种集成电路定义数据集,当在集成电路制造系统中被处理时,所述集成电路定义数据集使制造相交测试模块的方法得以执行。
集成电路定义数据集可以是计算机代码的形式,例如作为网表,用于配置可编程芯片的代码,作为定义适合于在集成电路中以任何级别制造的硬件描述语言,包含作为寄存器传输级(RTL)代码,作为高级电路表示法(诸如Verilog或VHDL),以及作为低级电路表示法(诸如OASIS(RTM)和GDSII)。在逻辑上定义适合于在集成电路中制造的硬件的更高级表示法(诸如RTL)可在计算机系统处进行处理,所述计算机系统被配置成用于在软件环境的上下文中产生集成电路的制造定义,所述软件环境包括电路元件的定义以及用于组合这些元件以便产生由所述表示法如此定义的集成电路的制造定义的规则。如通常软件在计算机系统处执行以便定义机器的情况一样,可能需要一个或多个中间用户步骤(例如,提供命令、变量等),以便将计算机系统配置为生成集成电路的制造定义,以执行定义集成电路以便生成所述集成电路的制造定义的代码。
现在将关于图12描述在集成电路制造系统处处理集成电路定义数据集以便将系统配置成制造相交测试模块的示例。
图12示出了集成电路(IC)制造系统1202的示例,其被配置为制造如本文的任何示例中描述的相交测试模块。具体地说,IC制造系统1202包括布局处理系统1204和集成电路生成系统1206。IC制造系统1202被配置为接收IC定义数据集(例如,定义如本文的任何示例中描述的相交测试模块),处理IC定义数据集,并根据IC定义数据集生成IC(例如,其体现如本文的任何示例中描述的相交测试模块)。IC定义数据集的处理将IC制造系统1202配置成制造体现如本文的任何示例中描述的相交测试模块的集成电路。
布局处理系统1204被配置成接收和处理IC定义数据集以确定电路布局。根据IC定义数据集确定电路布局的方法在本领域中是已知的,并且例如可以涉及合成RTL代码以确定待生成的电路的门级表示,例如就逻辑部件(例如NAND、NOR、AND、OR、MUX和FLIP-FLOP部件)而言。通过确定逻辑部件的位置信息,可以根据电路的门级表示来确定电路布局。这可以自动完成或者在用户参与下完成,以便优化电路布局。当布局处理系统1204已确定电路布局时,所述布局处理系统可以将电路布局定义输出到IC生成系统1206。电路布局定义可以是例如电路布局描述。
如本领域中已知,IC生成系统1206根据电路布局定义生成IC。例如,IC生成系统1206可实施生成IC的半导体装置制造工艺,所述工艺可涉及光刻和化学处理步骤的多步骤序列,在此期间,在由半导体材料制成的晶片上逐渐形成电子电路。电路布局定义可以呈掩模的形式,所述掩模可以在用于根据电路定义生成IC的光刻工艺中使用。替代地,提供给IC生成系统1206的电路布局定义可呈计算机可读代码的形式,IC生成系统1206可使用所述计算机可读代码来形成用于生成IC的合适掩模。
由IC制造系统1202执行的不同过程可全部在一个位置实施,例如由一方实施。替代地,IC制造系统1202可以是分布式系统,使得一些过程可以在不同位置执行,并且可以由不同方来执行。例如,以下阶段中的一些可以在不同位置以及/或者由不同方来执行:(i)合成表示IC定义数据集的RTL代码,以形成待生成的电路的门级表示;(ii)基于门级表示来生成电路布局;(iii)根据电路布局来形成掩模;以及(iv)使用掩模来制造集成电路。
在其他示例中,在集成电路制造系统处对集成电路定义数据集进行处理可以将系统配置成制造相交测试模块,而不用对IC定义数据集进行处理以便确定电路布局。例如,集成电路定义数据集可以定义可重新配置的处理器诸如FPGA的配置,并且对所述数据集的处理可以将IC制造系统配置成(例如,通过将配置数据加载到FPGA)生成具有所述定义的配置的可重新配置的处理器。
在一些实施方案中,当在集成电路制造系统中被处理时,集成电路制造定义数据集可以使集成电路制造系统生成如本文中描述的装置。例如,通过集成电路制造定义数据集以上文参考图12描述的方式对集成电路制造系统进行配置,可以制造出如本文描述的装置。
在一些示例中,集成电路定义数据集可以包含在数据集处定义的硬件上运行的软件,或者与在数据集处定义的硬件组合运行的软件。在图12中所示出的示例中,IC产生系统可以由集成电路定义数据集进一步配置成在制造集成电路时根据在集成电路定义数据集处限定的程序代码将固件加载到该集成电路上,或者以其他方式向集成电路提供与集成电路一起使用的程序代码。
与已知的具体实现相比,在本申请中阐述的概念在设备、装置、模块和/或系统中(以及在本文中实现的方法中)的具体实现可以提高性能。性能改进可包括计算性能提高、等待时间减少、吞吐量增大和/或功耗减小中的一者或多者。在制造这类设备、装置、模块和系统(例如在集成电路中)期间,可在性能提高与物理具体实现之间进行权衡,从而改进制造方法。例如,可在性能改进与布局面积之间进行权衡,从而匹配已知实施方式的性能,但使用更少的硅。例如,这可以通过以串行方式重复使用功能块或在设备、装置、模块和/或系统的元件之间共享功能块来完成。相反,本申请中所阐述的带来设备、装置、模块和系统的物理具体实现的改进(诸如硅面积减小)的概念可与性能提高进行权衡。这可以例如通过在预定义面积预算内制造模块的多个实例来完成。
申请人据此独立地公开了本文中所描述的每个单独的特征以及两个或更多个此类特征的任意组合,到达的程度使得此类特征或组合能够根据本领域的技术人员的普通常识基于本说明书整体来实行,而不管此类特征或特征的组合是否解决本文中所公开的任何问题。鉴于前文描述,本领域的技术人员将清楚,可以在本发明的范围内进行各种修改。

Claims (25)

1.一种在光线跟踪系统中执行相交测试的计算机实现的方法,所述方法包括:
如果光线与第一图元相交的相交距离和所述光线与第二图元相交的相交距离之间的差满足相对于阈值的比较条件,并且如果所述第一图元和所述第二图元的取向不同,则选择所述光线与所述第一图元和所述第二图元中具有特定取向的一者的相交。
2.如权利要求1所述的方法,其中如果所述光线与所述第一图元相交的所述相交距离和所述光线与所述第二图元相交的所述相交距离之间的所述差小于所述阈值,则相对于所述阈值满足所述比较条件。
3.如权利要求1所述的方法,其中如果所述光线与所述第一图元相交的所述相交距离和所述光线与所述第二图元相交的所述相交距离之间的所述差小于或等于所述阈值,则相对于所述阈值满足所述比较条件。
4.如任一前述权利要求所述的方法,其包括:
确定所述光线与所述第一图元相交的所述相交距离和所述光线与所述第二图元相交的所述相交距离之间的所述差满足相对于所述阈值的所述比较条件;以及
确定所述第一图元和所述第二图元的所述取向不同,
其中所述选择所述光线与所述第一图元和所述第二图元中具有特定取向的一者的所述相交响应于确定以下情况而执行:(i)光线与第一图元相交的所述相交距离和所述光线与第二图元相交的所述相交距离之间的所述差满足相对于所述阈值的所述比较条件,以及(ii)所述第一图元和所述第二图元的所述取向不同。
5.如权利要求4所述的方法,其中所述选择所述光线与所述第一图元和所述第二图元中具有特定取向的所述一者的所述相交包括基于所述第一图元和所述第二图元中具有所述特定取向的所述一者来选择所述光线与所述第一图元和所述第二图元中的所述一者的所述相交。
6.如权利要求4或5所述的方法,其中所述确定光线与第一图元相交的所述相交距离和所述光线与第二图元相交的所述相交距离之间的所述差满足相对于所述阈值的所述比较条件包括:
确定所述光线与所述第一图元相交的所述相交距离;
确定所述光线与所述第二图元相交的所述相交距离;以及
比较所确定的相交距离。
7.如权利要求4至6中任一项所述的方法,其中所述阈值为零。
8.如权利要求7所述的方法,其中所述确定所述光线与所述第一图元相交的所述相交距离和所述光线与所述第二图元相交的所述相交距离之间的所述差满足相对于所述阈值的所述比较条件包括:确定所述光线与所述第一图元和所述第二图元相交的所述相交距离相等。
9.如任一前述权利要求所述的方法,其还包括:
如果所述光线与所述第一图元相交的所述相交距离和所述光线与所述第二图元相交的所述相交距离之间的所述差不满足相对于所述阈值的所述比较条件,则选择所述光线与所述第一图元和所述第二图元中具有较小相交距离的一者的所述相交。
10.一种在光线跟踪系统中执行相交测试的计算机实现的方法,所述方法包括:
确定光线与第一图元相交的相交距离等于所述光线与第二图元相交的相交距离;
确定所述第一图元和所述第二图元的取向不同;以及
基于所述第一图元和所述第二图元中具有特定取向的一者来选择所述光线与所述第一图元和所述第二图元中的所述一者的相交。
11.如任一前述权利要求所述的方法,其中具有所述特定取向的图元是面向前的图元,并且其中具有与所述特定取向不同的取向的图元是面向后的图元。
12.如任一前述权利要求所述的方法,其还包括确定所述光线与所述第一图元和所述第二图元相交。
13.如权利要求1至12中任一项所述的方法,其还包括:
如果所述光线与所述第一图元相交的所述相交距离等于所述光线与所述第二图元相交的所述相交距离,并且如果所述第一图元和所述第二图元的所述取向相同,则使用确定性后退平局打破规则来选择所述光线与所述第一图元和所述第二图元中的一者的所述相交,而不是选择所述光线与所述第一图元和所述第二图元中具有所述特定取向的所述一者的所述相交。
14.如权利要求13所述的方法,其中,如果所述第一图元和所述第二图元的所述取向不同,则选择所述光线与所述第一图元和第二图元中的所述一者的所述相交包括不应用所述确定性后退平局打破规则。
15.如任一前述权利要求所述的方法,其还包括在所述光线跟踪系统中使用所选相交来渲染图像。
16.一种用于光线跟踪系统中的相交测试模块,所述相交测试模块包括:
相交选择逻辑,其被配置成:如果光线与第一图元相交的相交距离和所述光线与第二图元相交的相交距离之间的差满足相对于阈值的比较条件,并且如果所述第一图元和所述第二图元的取向不同,则选择所述光线与所述第一图元和所述第二图元中具有特定取向的一者的相交。
17.如权利要求16所述的相交测试模块,其中如果所述光线与所述第一图元相交的所述相交距离和所述光线与所述第二图元相交的所述相交距离之间的所述差小于所述阈值,则相对于所述阈值满足所述比较条件。
18.如权利要求16所述的相交测试模块,其中如果所述光线与所述第一图元相交的所述相交距离和所述光线与所述第二图元相交的所述相交距离之间的所述差小于或等于所述阈值,则相对于所述阈值满足所述比较条件。
19.如权利要求16至18中任一项所述的相交测试模块,其还包括相交确定逻辑,所述相交确定逻辑被配置成:
确定所述光线与所述第一图元相交,并且确定所述光线与所述第一图元相交的所述相交距离;以及
确定所述光线与所述第二图元相交,并且确定所述光线与所述第二图元相交的所述相交距离。
20.如权利要求16至19中任一项所述的相交测试模块,其中所述相交选择逻辑被配置成:
确定所述光线与所述第一图元相交的所述相交距离和所述光线与所述第二图元相交的所述相交距离之间的所述差满足相对于所述阈值的所述比较条件;
确定所述第一图元和所述第二图元的取向不同;以及
基于所述第一图元和所述第二图元中具有所述特定取向的一者来选择所述光线与所述第一图元和所述第二图元中的所述一者的所述相交。
21.一种用于光线跟踪系统中的相交测试模块,所述相交测试模块包括:
相交选择逻辑,其被配置成:
确定光线与第一图元相交的相交距离等于所述光线与第二图元相交的相交距离;
确定所述第一图元和所述第二图元的取向不同;以及
基于所述第一图元和所述第二图元中具有特定取向的一者来选择所述光线与所述第一图元和所述第二图元中的所述一者的相交。
22.一种相交测试模块,其被配置成执行权利要求1至15中任一项所述的方法。
23.一种方法,所述方法使用集成电路制造系统制造如权利要求16至22中任一项所述的相交测试模块。
24.一种计算机可读存储介质,其上存储有计算机可读代码,所述计算机可读代码被配置成当运行所述代码时,使得如权利要求1至15中任一项所述的方法得以执行。
25.一种计算机可读存储介质,其上存储有集成电路定义数据集,当在集成电路制造系统中被处理时,所述集成电路定义数据集将所述集成电路制造系统配置成制造如权利要求16至22中任一项所述的相交测试模块。
CN202310160964.1A 2022-02-25 2023-02-23 光线跟踪系统中的相交测试 Pending CN116664748A (zh)

Applications Claiming Priority (4)

Application Number Priority Date Filing Date Title
GB2202657.9 2022-02-25
GB2202659.5 2022-02-25
GB2202658.7 2022-02-25
GB2202659.5A GB2616053B (en) 2022-02-25 2022-02-25 Intersection testing in a ray tracing system

Publications (1)

Publication Number Publication Date
CN116664748A true CN116664748A (zh) 2023-08-29

Family

ID=81075730

Family Applications (3)

Application Number Title Priority Date Filing Date
CN202310176941.XA Pending CN116664749A (zh) 2022-02-25 2023-02-23 光线跟踪系统中的相交测试
CN202310160964.1A Pending CN116664748A (zh) 2022-02-25 2023-02-23 光线跟踪系统中的相交测试
CN202310160870.4A Pending CN116664747A (zh) 2022-02-25 2023-02-23 光线跟踪系统中的相交测试

Family Applications Before (1)

Application Number Title Priority Date Filing Date
CN202310176941.XA Pending CN116664749A (zh) 2022-02-25 2023-02-23 光线跟踪系统中的相交测试

Family Applications After (1)

Application Number Title Priority Date Filing Date
CN202310160870.4A Pending CN116664747A (zh) 2022-02-25 2023-02-23 光线跟踪系统中的相交测试

Country Status (2)

Country Link
CN (3) CN116664749A (zh)
GB (1) GB2616053B (zh)

Family Cites Families (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8059122B1 (en) * 2008-03-25 2011-11-15 The United States Of America As Represented By The Secretary Of The Air Force Cartesian mesh generation technique
CN102947865B (zh) * 2010-04-29 2016-10-05 想象技术有限公司 用于光线跟踪中的图元相交的系统和方法
US10692271B1 (en) * 2018-12-13 2020-06-23 Advanced Micro Devices, Inc. Robust ray-triangle intersection

Also Published As

Publication number Publication date
GB2616053A9 (en) 2023-09-27
GB2616053B (en) 2024-02-21
CN116664747A (zh) 2023-08-29
GB2616053A (en) 2023-08-30
GB202202659D0 (en) 2022-04-13
CN116664749A (zh) 2023-08-29

Similar Documents

Publication Publication Date Title
US10970914B1 (en) Multiple precision level intersection testing in a ray tracing system
US11810239B2 (en) Methods and graphics processing units for determining differential data for rays of a ray bundle
GB2537972A (en) Systems and methods for soft shadowing in 3-D rendering
CN109979000B (zh) 多视图图元块
CN115115757A (zh) 光线跟踪系统中的相交测试
US20220350606A1 (en) Performing comparison operations using vector floating point values
CN116664748A (zh) 光线跟踪系统中的相交测试
CN115115760A (zh) 光线跟踪系统中的相交测试
EP4235587A1 (en) Intersection testing in a ray tracing system
GB2616051A (en) Intersection testing in a ray tracing system
GB2616052A (en) Intersection testing in a ray tracing system
CN115115759B (zh) 光线跟踪系统中的相交测试的方法、相交测试模块和介质
US20220350566A1 (en) Performing comparison operations using extended exponent range floating point values

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication