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

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

Info

Publication number
CN115115759A
CN115115759A CN202210262694.0A CN202210262694A CN115115759A CN 115115759 A CN115115759 A CN 115115759A CN 202210262694 A CN202210262694 A CN 202210262694A CN 115115759 A CN115115759 A CN 115115759A
Authority
CN
China
Prior art keywords
ray
coordinate system
polygon
intersection
edge
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.)
Granted
Application number
CN202210262694.0A
Other languages
English (en)
Other versions
CN115115759B (zh
Inventor
P·史密斯-莱西
R·金
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
Priority to CN202311665902.2A priority Critical patent/CN117689794A/zh
Publication of CN115115759A publication Critical patent/CN115115759A/zh
Application granted granted Critical
Publication of CN115115759B publication Critical patent/CN115115759B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

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
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F17/00Digital computing or data processing equipment or methods, specially adapted for specific functions
    • G06F17/10Complex mathematical operations
    • G06F17/16Matrix or vector computation, e.g. matrix-matrix or matrix-vector multiplication, matrix factorization
    • 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
    • G06T15/003D [Three Dimensional] image rendering
    • G06T15/50Lighting effects
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T7/00Image analysis
    • G06T7/60Analysis of geometric attributes
    • G06T7/64Analysis of geometric attributes of convexity or concavity
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T7/00Image analysis
    • G06T7/70Determining position or orientation of objects or cameras
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2101/00Indexing scheme relating to the type of digital function generated
    • G06F2101/02Linear multivariable functions, i.e. sum of products
    • 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)
  • Mathematical Physics (AREA)
  • Data Mining & Analysis (AREA)
  • Computational Mathematics (AREA)
  • Pure & Applied Mathematics (AREA)
  • Mathematical Analysis (AREA)
  • Mathematical Optimization (AREA)
  • Computer Vision & Pattern Recognition (AREA)
  • Computing Systems (AREA)
  • Algebra (AREA)
  • Databases & Information Systems (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Geometry (AREA)
  • Image Generation (AREA)
  • Image Analysis (AREA)

Abstract

本发明涉及光线跟踪系统中的相交测试。提供了一种用于在光线跟踪系统中执行光线与凸多边形的相交测试的方法和相交测试模块。使用空间坐标系在3D空间中定义光线和凸多边形。光线由光线原点和光线方向定义。使用光线坐标系来执行相交测试,其中光线坐标系在光线原点处具有原点,并且其中光线坐标系具有三个基向量。所述基向量中的第一基向量与光线方向对齐。所述基向量中的第二基向量和第三基向量:(i)都与所述第一基向量正交,(ii)彼此不平行,并且(iii)当在所述空间坐标系中表达时具有零作为一个分量;输出执行所述相交测试的结果以供光线跟踪系统使用。

Description

光线跟踪系统中的相交测试
技术领域
本公开涉及在光线跟踪系统中执行相交测试的技术。
背景技术
光线跟踪是一种计算渲染技术,其用于通过通常从相机的视角在场景中跟踪光路(‘光线’)来生成场景(例如,3D场景)的图像。每条光线被建模为源自相机,并通过像素进入场景。当光线横越场景时,其可能与场景内的对象相交。可对光线和其相交的对象之间的相交建模以创建逼真的视觉效果。例如,响应于确定光线与对象相交,可以针对相交执行着色器程序(即,计算机代码的一部分)。程序员可以编写着色器程序以定义系统如何对相交(所述相交例如可能导致向场景中发射一个或多个二次光线)作出反应,例如,以表示光线从相交对象的反射或光线通过对象的折射(例如,如果对象是透明或半透明的)。作为另一示例,着色器程序可以使一条或多条光线发射到场景中,以用于确定对象是否处于交点处的阴影中。执行着色器程序(和处理相关的二次光线)的结果可以是计算光线穿过的像素的颜色值。
使用光线跟踪渲染场景的图像可以涉及执行许多相交测试,例如执行数十亿个相交测试以渲染场景的图像。为了减少需要执行的相交测试的数量,光线跟踪系统可以生成加速结构,其中加速结构的每个节点表示场景内的区域。加速结构通常是分层的(例如,具有树结构),使得其包含多个级别的节点,其中靠近加速结构的顶部的节点表示场景中相对大的区域(例如,根节点可以表示整个场景),靠近加速结构的底部的节点表示场景中相对小的区域。“树节点”是指具有指向分层加速结构中的其他节点的指针的节点,即,树节点在分层加速结构中具有子节点。“叶节点”是指具有指向一个或多个图元的一个或多个指针的节点,即,叶节点在分层加速结构中不具有子节点。换句话说,加速结构的叶节点表示场景中定义一个或多个图元的区域。加速结构在不同示例中可具有不同结构,例如栅格结构、八叉树结构、空间分割结构(例如k-d树)或边界体积层次体系。节点可以表示场景中的合适形状或区域(其在本文中可以被称为“框”)。在一些示例中,节点表示场景中的轴对齐边界框(AABB)。
可以使用加速结构,通过首先测试光线与加速结构的根节点的相交(例如,以递归方式)对光线执行相交测试。如果发现光线与父节点(例如,根节点)相交,则测试可以进行到所述父节点的子节点。相比之下,如果发现光线不与父节点相交,则可以避免对所述父节点的子节点的相交测试,从而节省计算工作量。如果发现光线与叶节点相交,则可针对由叶节点表示的区域内的对象对光线进行测试,从而确定光线与哪个(些)对象相交。对象可以被表示为凸多边形。凸多边形通常是三角形,但它们也可以是其他形状,例如正方形、矩形、五边形、六边形等。如果发现光线有多于一个交点,则可以标识与光线原点最接近的交点(即,光线在场景中遇到的第一次相交),并且可以确定光线在此标识的最接近交点处相交。有可能存在光线的多个最接近命中,并且在这种情况下,可以使用一些平局决胜(tie-break)逻辑来选择多个最接近命中中的一个以用作标识的最接近交点。对于一些类型的光线,可能不需要标识最接近的交点。例如,在处理阴影光线时,存在至少一个交点的指示是足够的,而无需确定哪一个交点最接近,并且一些API可以允许加速结构针对阴影光线的遍历响应于发现任何交点而终止,从而减少需要执行的相交测试的数量。
光线(r)可以被定义为r=O+Dt,其中O是表示光线原点的向量,D是表示光线方向的向量,并且t表示沿着光线离原点的距离。图元可以被表示为凸多边形或进一步严格而言为凸多边形。多边形(例如三角形)由有序的平面顶点集合定义,由此连续顶点对定义多边形边,并且在给定固定取向(即顺时针或逆时针)的情况下,总顶点顺序(其缠绕顺序)用于指示多边形的正面。凸多边形是没有大于180°的内角的多边形。严格的凸多边形是没有大于或等于180°的内角的多边形。定义光线的原点和方向向量以及定义凸多边形的顶点的位置可以用空间坐标系中的分量来表示。空间坐标系可以表示正在渲染的场景的世界空间,或者它可以表示放置在正在渲染的场景内的对象实例的实例空间。
为了确定光线是否与凸多边形相交,可以确定光线与包含凸多边形的平面的交点,然后可以确定该交点是否在多边形的内侧。一种通用方法是经由平行于光线方向的投影将顶点(即,世界或实例空间中的坐标)映射到平面上。如果不包含光线,则可以自由地指定平面,使得正交投影和倾斜投影都是可允许的。这将问题简化为2D问题,并且存在许多确定2D点是否在2D凸多边形内的方式。例如,在凸多边形是三角形的情况下,可以将交点变换成三角形的UV坐标,这使得相交测试变得简单。如果确定光线与多边形的边界上的点(即边或顶点)相交,则可能出现问题。特别地,通常用多个多边形,例如用多边形网格来表示对象,从而产生定义两个或更多个凸多边形的共享顶点。此外,多边形可以具有共享的边,即,两个端点都是共享顶点的边。共享顶点的一个重要类型是在封闭扇形中心处的顶点:封闭扇形被定义为由共享边连接的共享顶点的两个或更多个多边形,使得这些共享边是共享顶点作为其端点之一的唯一边。如果光线与封闭扇形的共享边上的点或共享顶点相交,则在大多数情况下,希望发现光线与多边形中的一个或多个多边形相交。如果相交测试确保与封闭扇形的共享边上的点或共享顶点相交的光线与其中至少一个多边形相交,则相交测试被描述为“严密(watertight)”。如果相交测试确保与封闭扇形的共享边上的点或共享顶点相交的光线与多边形中的一个(并且仅一个)相交,则相交测试被描述为“非冗余严密”,注意,在这种情况下,仅其边界的子集可以被认为是多边形的一部分。如果发现与共享边上的点相交的光线与零多边形相交,则其可以表现为好像多边形网格中具有孔,使得可以通过所渲染的图像中的网格看到多边形网格后面的颜色(这可以在非严密相交测试而不是针对严密相交测试的情况下发生)。例如,如果多边形网格后面的颜色与多边形网格的颜色明显不同,则这些种类的渲染误差可能非常明显。此外,如果发现与共享边上的点相交的光线与多于一个多边形相交,则在该共享边上的位置处渲染的颜色可能取决于针对相交测试多边形的顺序,使得渲染可能变得不确定。这些种类的渲染误差对于渲染图像的感知质量可能是不利的。具有非冗余严密相交测试的另外的原因包括:(i)为了避免冗余工作,以及(ii)为了避免在透明对象中由重复的相交导致的任何双重/多重命中处的阴影不连续性。通常独立于对与第二多边形相交的光线的测试来执行对与第一多边形相交的光线的测试,并且注意到,确保严密性,并且具体地,确保用于相交测试的非冗余严密性并不简单。
由于在光线跟踪系统中多次执行光线对凸多边形(例如三角形)的相交测试,因此在专用硬件模块中例如使用固定功能电路系统来实施用于执行这些相交测试的功能而不使用在通用处理单元上执行的软件模块来实施这些相交测试可以是有益的。软件实施方案通常更加灵活,因为软件在被设计和/或创建之后比硬件实施方案更容易改变。然而,硬件实施方案通常在延迟和功耗方面提供更有效的实施方案,因此如果所需功能是事先已知的,则硬件实施方案可能优于软件实施方案。当设计被配置为用于执行相交测试的相交测试模块的硬件实施方案时,通常存在以下竞争目标:(i)有更小的尺寸(即,更小的硅面积),(ii)有更低的延迟,以及(iii)有更低的功耗。
发明内容
提供本发明内容是为了以简化的形式介绍下文在具体实施方式中进一步描述的一系列概念。本发明内容不旨在标识所要求保护的主题的关键特征或必要特征,也不旨在用于限制所要求保护的主题的范围。
提供一种在光线跟踪系统中执行光线与凸多边形的相交测试的方法,其中使用空间坐标系在3D空间中定义光线和凸多边形,并且其中利用光线原点和光线方向定义光线,所述方法包括:
使用光线坐标系来执行相交测试,其中光线坐标系在光线原点处具有原点,并且其中光线坐标系具有三个基向量,
其中基向量中的第一基向量与光线方向对齐,和
其中所述基向量中的第二基向量和第三基向量:(i)都与所述第一基向量正交,(ii)彼此不平行,并且(iii)当在所述空间坐标系中表达时具有零作为一个分量;和
输出执行所述相交测试的结果以供所述光线跟踪系统使用。
所述方法还可以包括通过从定义凸多边形的顶点的位置减去光线原点来平移定义凸多边形的顶点,以用于执行相交测试。
当在空间坐标系中表达时,光线坐标系的基向量中的第二基向量和第三基向量可以具有±1的值作为一个分量。
当用空间坐标系的分量表示时,第一基向量S可以是S=A(Dx,Dy,Dz),其中当用空间坐标系的分量表示时,第二基向量P可以是P=B(Dz,0,-Dx);并且其中当用空间坐标系的分量表示时,第三基向量Q可以是Q=C(0,Dz,-Dy);其中Dx,Dy和Dz是空间坐标系中光线方向的分量,并且A,B和C是标量值。B可以是在其分母中具有Dx的简化分数,并且C可以是在其分母中具有Dy的简化分数。
当用空间坐标系的分量表示时,第一基向量S可以是S=A(Dx,Dy,Dz),其中当用空间坐标系的分量表示时,第二基向量P可以是
Figure BDA0003551170210000041
并且其中当用空间坐标系的分量表示时,第三基向量Q可以是
Figure BDA0003551170210000042
其中Dx,Dy和Dz是空间坐标系中光线方向的分量,并且A是标量值。
当用空间坐标系的分量表示时,第一基向量S可以是S=A(Dx,Dy,Dz),其中当用空间坐标系的分量表示时,第二基向量P可以是
Figure BDA0003551170210000043
并且其中当用空间坐标系的分量表示时,第三基向量Q可以是
Figure BDA0003551170210000044
其中Dx,Dy和Dz是空间坐标系中光线方向的分量,并且A是标量值。
当用空间坐标系的分量表示时,第一基向量S可以是S=A(Dx,Dy,Dz),其中当用空间坐标系的分量表示时,第二基向量P可以是
Figure BDA0003551170210000045
并且其中当用空间坐标系的分量表示时,第三基向量Q可以是
Figure BDA0003551170210000046
其中Dx,Dy和Dz是空间坐标系中光线方向的分量,并且A是标量值。
当用空间坐标系的分量表示时,第一基向量S可以是S=A(Dx,Dy,Dz),其中当用空间坐标系的分量表示时,第二基向量P可以是
Figure BDA0003551170210000047
并且其中当用空间坐标系的分量表示时,第三基向量Q可以是
Figure BDA0003551170210000051
其中Dx,Dy和Dz是空间坐标系中光线方向的分量,并且A是标量值。
在一些示例中,
Figure BDA0003551170210000052
所述方法还可以包括将光线和凸多边形从空间坐标系变换到光线坐标系中,其中可以在光线坐标系中执行相交测试。
相交测试可以使用固定功能电路系统来执行。固定功能电路系统可以包括一个或多个乘与加部件,用于使用光线坐标系的第二基向量和第三基向量来执行乘法和加法。
所述方法还可以包括在执行光线与凸多边形的相交测试之前,选择性地置换光线的分量和定义凸多边形的顶点,使得|Dz|≥|Dx|和|Dz|≥|Dy|。
所述方法还可以包括在执行光线与凸多边形的相交测试之前,选择性地反转光线的分量和定义凸多边形的顶点,使得Dx≥0,Dy≥0和Dz≥0。
所述方法还可以包括存储从空间坐标系到光线坐标系的映射是否影响感知的多边形取向的映射指示,其中映射指示可以用于执行光线与凸多边形的相交测试。
下列各项中的至少一项的值:(i)
Figure BDA0003551170210000053
Figure BDA0003551170210000054
(ii)
Figure BDA0003551170210000055
Figure BDA0003551170210000056
(iii)
Figure BDA0003551170210000057
Figure BDA0003551170210000058
和(iv)
Figure BDA0003551170210000059
或Dz,可以针对光线预先计算并且存储在存储装置中,其中所述方法可以包括从存储装置读取所存储的值以用于执行相交测试。
可以在光线跟踪系统中使用输出的结果来渲染3D场景的图像。
凸多边形可以是三角形。
提供一种在光线跟踪系统中执行光线与凸多边形的相交测试的方法,其中使用空间坐标系在n维空间中定义光线和凸多边形,其中n≥3,并且其中利用光线原点和光线方向定义光线,所述方法包括:
使用光线坐标系来执行相交测试,其中光线坐标系在光线原点处具有原点,并且其中光线坐标系具有n个基向量,
其中基向量中的第一基向量与光线方向对齐,
其中(n-1)个基向量与第一基向量正交,
其中(n-1)个基向量中没有成对的基向量平行,并且
其中当在空间坐标系中表达时,(n-1)个基向量对于(n-2)个分量具有零。并且
输出执行所述相交测试的结果以供所述光线跟踪系统使用。
提供一种在光线跟踪系统中使用的被配置为执行光线与凸多边形的相交测试的相交测试模块,其中使用空间坐标系在3D空间中定义光线和凸多边形,并且其中利用光线原点和光线方向定义光线,所述相交测试模块被配置为:
使用光线坐标系来执行相交测试,其中光线坐标系在光线原点处具有原点,并且其中光线坐标系具有三个基向量,
其中基向量中的第一基向量与光线方向对齐,和
其中所述基向量中的第二基向量和第三基向量:(i)都与所述第一基向量正交,(ii)彼此不平行,并且(iii)当在所述空间坐标系中表达时具有零作为一个分量;和
输出执行所述相交测试的结果以供光线跟踪系统使用。
当用空间坐标系的分量表示时,第一基向量S可以是S=A(Dx,Dy,Dz),其中当用空间坐标系的分量表示时,第二基向量P可以是P=B(Dz,0,-Dx);并且其中当用空间坐标系的分量表示时,第三基向量Q可以是Q=C(0,Dz,-Dy);其中Dx,Dy和Dz是空间坐标系中的光线方向的分量,A是标量值,并且:(i)
Figure BDA0003551170210000061
Figure BDA0003551170210000062
或(ii)
Figure BDA0003551170210000063
Figure BDA0003551170210000064
相交测试模块可以包括固定功能电路系统,其被配置为使用光线坐标系执行相交测试。固定功能电路系统可以包括一个或多个乘与加部件,用于使用光线坐标系的第二基向量和第三基向量来执行乘法和加法。
相交测试模块可以进一步包括存储装置,其被配置为存储下列各项中的至少一项的值:对于所述光线的(i)
Figure BDA0003551170210000065
Figure BDA0003551170210000066
(ii)
Figure BDA0003551170210000067
Figure BDA0003551170210000068
(iii)
Figure BDA0003551170210000069
Figure BDA00035511702100000610
和(iii)
Figure BDA00035511702100000611
或Dz,其中所述相交测试模块可被配置为从所述存储装置读取所述所存储的值以用于执行相交测试。
可提供一种在光线跟踪系统中使用的被配置为执行光线与凸多边形的相交测试的相交测试模块,其中使用空间坐标系在n维空间中定义光线和凸多边形,其中n≥3,并且其中利用光线原点和光线方向定义光线,所述相交测试模块被配置为:
使用光线坐标系来执行相交测试,其中光线坐标系在光线原点处具有原点,并且其中光线坐标系具有n个基向量,
其中基向量中的第一基向量与光线方向对齐,
其中(n-1)个基向量与第一基向量正交,
其中(n-1)个基向量中没有成对的基向量平行,并且
其中当在空间坐标系中表达时,(n-1)个基向量对于(n-2)个分量具有零。并且
输出执行所述相交测试的结果以供光线跟踪系统使用。
可以提供一种相交测试模块,其被配置为执行本文所描述的任一种方法。
可以提供一种计算机可读代码,其被配置为在所述代码运行时使本文所描述的任一种方法得以执行。
可以提供一种在光线跟踪系统中执行光线相对于多个凸多边形的相交测试的方法,其中凸多边形中的每个凸多边形由有序顶点集合定义,并且其中顶点中的至少一个顶点是用于定义凸多边形中的两个或更多个凸多边形的共享顶点,所述方法包括:
将凸多边形的顶点投影到与光线方向正交的一对轴上,其中所述一对轴的原点对应于光线原点,并且其中顶点排序方案定义投影顶点的排序,所述排序独立于定义凸多边形的有序顶点集合中的顶点的排序;和
对于凸多边形中的每个凸多边形:
对于凸多边形的由投影顶点中的两个投影顶点定义的每条边,确定指示光线在边的哪一侧通过的参数,其中如果确定光线与边上的点相交,则基于由顶点排序方案定义的定义边的投影顶点的排序是否与定义凸多边形的有序顶点集合中的顶点的排序相匹配来确定所述参数;和
基于针对凸多边形的边所确定的参数来确定光线是否与凸多边形相交;
其中对于凸多边形中的两个或更多个凸多边形,光线被确定为与凸多边形的边上的点相交。
可提供一种用于在光线跟踪系统中使用的相交测试模块,其被配置为执行光线相对于多个凸多边形的相交测试,其中凸多边形中的每个凸多边形由有序顶点集合定义,并且其中顶点中的至少一个顶点是用于定义凸多边形中的两个或更多个凸多边形的共享顶点,所述相交测试模块被配置为:
将凸多边形的顶点投影到与光线方向正交的一对轴上,其中所述一对轴的原点对应于光线原点,并且其中顶点排序方案定义投影顶点的排序,所述排序独立于定义凸多边形的有序顶点集合中的顶点的排序;和
对于凸多边形中的每个凸多边形:
对于凸多边形的由投影顶点中的两个投影顶点定义的每条边,确定指示光线在边的哪一侧通过的参数,其中所述相交测试模块被配置为如果确定光线与边上的点相交,则基于由顶点排序方案定义的定义所述边的投影顶点的排序是否与定义凸多边形的有序顶点集合中的顶点的排序相匹配来确定所述参数;和
基于针对凸多边形的边所确定的参数来确定光线是否与凸多边形相交。
可以提供一种在光线跟踪系统中执行光线相对于多个凸多边形的相交测试的方法,其中凸多边形中的每个凸多边形由有序顶点集合定义,并且其中顶点中的至少一个顶点是用于定义凸多边形中的两个或更多个凸多边形的共享顶点,所述方法包括:
将凸多边形的顶点投影到与光线方向正交的一对轴上,其中所述一对轴的原点与光线原点相对应;和
对于凸多边形中的每个凸多边形:
对于凸多边形的由投影顶点中的两个投影顶点定义的每条边,确定有符号参数,其中所述有符号参数的符号指示光线在边的哪一侧通过,其中定义边的投影顶点中的第一个投影顶点vi的位置由沿着一对轴中的相应轴的坐标pi和qi定义,并且其中定义边的投影顶点中的第二个投影顶点vj的位置由沿着一对轴中的相应轴的坐标pj和qj定义,其中如果确定光线与边上的点相交,则使用模块来确定所述有符号参数的符号,所述模块被配置为:
将pi、qi、pj和qj坐标中的每一个分类为负、零或正的指示作为输入,以及
对于pi、qi、pj和qj坐标的分类的有效组合,输出有符号参数的符号的指示;和
基于针对凸多边形的边所确定的有符号参数的符号来确定光线是否与凸多边形相交;
其中对于凸多边形中的两个或更多个凸多边形,光线被确定为与凸多边形的边上的点相交。
可提供一种用于在光线跟踪系统中使用的相交测试模块,其被配置为执行光线相对于多个凸多边形的相交测试,其中凸多边形中的每个凸多边形由有序顶点集合定义,并且其中顶点中的至少一个顶点是用于定义凸多边形中的两个或更多个凸多边形的共享顶点,所述相交测试模块被配置为:
将凸多边形的顶点投影到与光线方向正交的一对轴上,其中所述一对轴的原点与光线原点相对应;和
对于凸多边形中的每个凸多边形:
对于凸多边形的由投影顶点中的两个投影顶点定义的每条边,确定有符号参数,其中所述有符号参数的符号指示光线在边的哪一侧通过,其中定义边的投影顶点中的第一个投影顶点vi的位置由沿着一对轴中的相应轴的坐标pi和qi定义,并且其中定义边的投影顶点中的第二个投影顶点vj的位置由沿着一对轴中的相应轴的坐标pj和qj定义,其中所述相交测试模块被配置为如果确定光线与边上的点相交,则使用模块来确定所述有符号参数的符号,其中所述模块被配置为:
将pi、qi、pj和qj坐标中的每一个分类为负、零或正的指示作为输入,以及
对于pi、qi、pj和qj坐标的分类的有效组合,输出有符号参数的符号的指示;和
基于针对凸多边形的边所确定的有符号参数的符号来确定光线是否与凸多边形相交。
所述相交测试模块可以在集成电路上以硬件体现。可以提供一种在集成电路制造系统处制造相交测试模块的方法。可以提供一种集成电路定义数据集,当在集成电路制造系统中被处理时,所述集成电路定义数据集将系统配置成制造相交测试模块。可以提供一种非瞬态计算机可读存储介质,其上存储有相交测试模块的计算机可读描述,当在集成电路制造系统中被处理时,所述计算机可读描述使集成电路制造系统制造体现相交测试模块的集成电路。
可以提供一种集成电路制造系统,包括:非暂时性计算机可读存储介质,其上存储有相交测试模块的计算机可读描述;布局处理系统,其被配置为处理计算机可读描述以便生成体现相交测试模块的集成电路的电路布局描述;以及集成电路生成系统,其被配置为根据电路布局描述来制造相交测试模块。
可提供用于执行本文所述的任一方法的计算机程序代码。可以提供非暂态计算机可读存储介质,所述非暂态计算机可读存储介质上存储有计算机可读指令,所述计算机可读指令当在计算机系统处被执行时使计算机系统执行本文所述的任一方法。
如对本领域的技术人员显而易见的,上述特征可以适当地组合,并且可以与本文所述的示例的任何方面组合。
附图说明
现在将参考附图详细描述示例,在附图中:
图1示出了根据本文所描述的示例的光线跟踪系统;
图2示出了光线和两个多边形、空间坐标系的基向量以及光线坐标系的基向量;
图3是根据本文所述的示例的执行光线相对于多个凸多边形的相交测试的方法的流程图;
图4是确定用于指示光线在多边形的边的哪一侧通过的参数的第一示例方法的流程图;
图5是确定用于指示光线在多边形的边的哪一侧通过的参数的第二示例方法的流程图;
图6示出了与多边形相交的光线;
图7a示出了与两个多边形之间共享的边上的点相交的光线,其中指示了两个多边形的缠绕顺序;
图7b示出了与图7a中相同的情形,其中光线与两个多边形之间共享的边上的点相交,并且图7b指示了根据顶点排序方案的两个多边形的边的方向;
图8a示出了与形成封闭扇形的五个多边形之间共享的顶点相交的光线,其中指示了五个多边形的缠绕顺序;
图8b示出了与图8a中相同的情形,其中光线与形成封闭扇形的五个多边形之间共享的顶点相交,并且图8b指示了根据顶点排序方案的五个多边形的边的方向;
图9是确定用于指示光线在多边形的边的哪一侧通过的参数的第三示例方法的流程图;
图10示出了可以应用于顶点位置的扰动ε;
图11a至图11l示出了2D叉积可以精确地为零的不同情形;
图12a到图12j示出了另外的情形,其中当使用不是远离零舍入模式的舍入模式来确定2D叉积时,由于下溢,2D叉积可以被确定为零;
图13a示出了在“缠绕/取向依赖性”方案中的一对多边形的旋转和反射;
图13b示出了在“缠绕/取向独立性”方案中一对多边形的旋转和反射;
图13c示出了形成圆形带的多边形的网格,其中指示了在“缠绕/取向依赖性”方案中哪些边被认为是哪些多边形的一部分;
图13d示出了形成圆形带的多边形的网格,其中指示了在“与缠绕/取向独立性”方案中哪些边被认为是哪些多边形的一部分;
图14示出了在其中实施光线跟踪系统的计算机系统;并且
图15示出了用于生成体现光线跟踪系统的集成电路的集成电路制造系统。
附图示出了各种示例。技术人员将理解,附图中所示的元素边界(例如,框、框的组,或其他形状)表示边界的一个示例。在一些示例中,情况可能是一个元素可以被设计为多个元素,或者多个元素可以被设计为一个元素。在适当的情况下,贯穿各附图使用共同的附图标记来指示类似的特征。
具体实施方式
通过示例的方式给出以下描述,以使本领域的技术人员能够制造和使用本发明。本发明不限于本文描述的实施方案,并且对所公开的实施方案的各种修改对于本领域的技术人员将是显而易见的。
现在仅通过示例的方式来描述实施方案。
即使使用加速结构,在光线跟踪系统中执行相交测试所涉及的工作量仍然很大。例如,光线跟踪可用于渲染3D场景的图像,其中图像可具有大约一百万像素。像素颜色值源自与图像平面中的点相关联的样本的一些分布(通常,像素与样本位置之间存在一对一的对应关系,但图像的区域可能具有较高或较低的样本密度,或者可能另外独立于像素的布置)。在光线跟踪的上下文中,样本本身与由每个样本位置的邻域参数化的一次光线(在统计意义上)的分布相关联。在最简单示例中,针对每个样本跟踪单个一次光线,并且使用所述一次光线来确定所述样本的结果。在其他示例中,可以根据分布(例如,随机采样)和源自单独的一次光线的一些累积或组合的结果生成多条光线。当确定光线与场景中的对象相交时,可以执行着色器,其可以使另一光线(即,“二次光线”)发射到场景中。每个一次光线可引起数个二次光线的发射,这些二次光线全部通过场景跟踪以确定其交点。因此,通过场景跟踪数千万或数亿的光线以渲染图像并不少见。随着图形渲染技术的发展,要渲染的场景变得越来越复杂,因此场景中存在数千个对象并不少见,每个对象可以由许多图元表示(例如多边形,如三角形)。此外,正在渲染的图像可以表示要实时渲染,例如以实时显示给用户的一系列帧中的帧。例如,用户可能正在玩游戏,其中渲染的图像表示在用户玩游戏时所述用户的3D场景视图。为了使一系列帧看起来像是连续的视频数据流,可以每秒渲染数个帧,例如每秒24、30或60帧,作为一些示例。因此,可以理解的是,在光线跟踪系统中执行相交测试以实时渲染要输出的场景所涉及的工作很多。
克服此问题并执行光线跟踪以实时渲染要输出的场景的一种方式是使一个或多个超级计算机执行所有处理。这可被视为一种“强力”方法。然而,除了具有高性能(执行光线跟踪以实时渲染要输出的场景)的目标,还存在缩减光线跟踪系统的尺寸(例如硅面积)和功耗的竞争目标。例如,可存在在例如平板计算机或智能手机等移动装置上实施光线跟踪系统的目标,其可接受的尺寸和功耗可远低于超级计算机。因此,当设计光线跟踪系统时,在性能、功耗和面积之间可存在折衷。取决于如何实施此折衷,本文所描述的示例可以允许提高性能而不显著增加功耗和面积(与上文在背景部分中所描述的现有技术相比)。替代地,在折衷的不同实施方案中,本文所描述的示例可以允许缩减光线跟踪系统的功耗和/或尺寸而不显著降低光线跟踪系统的性能(与上文在背景部分中所描述的现有技术相比)。可以设计不同的实施方案以针对性能、功耗和硅面积之间的折衷中的不同点。
如上所述,由于对象通常被表示为凸多边形的集合(非凸多边形可以按照凸多边形的并集来描述),因此测试光线与凸多边形(例如,三角形)的相交是光线跟踪系统中的极其频繁的操作。因此,可对执行相交测试的方式进行的任何优化对于在减少光线跟踪系统的延迟、功耗和尺寸方面优化光线跟踪系统可能非常有用。
此外,由于这样的对象通常描述连接的表面,由此相邻多边形具有一个或多个共享顶点或边,所以重要的是,当光线交点扫过对象内部时,间隙不会虚假地出现,从而产生明显的结构缺陷(其可以被称为渲染图像中的“渲染伪像”)。这些可能由于每个多边形的相交测试中的舍入误差或近似而显现,由此共有顶点和/或边的隐式扰动可能致使相邻多边形在根据它们各自的相交结果来表达时断开。防止任何这种断开发生的实施方式可以被称为“严密的”。
虽然通过在一定程度上增大每个凸多边形的边界以提供一定的误差容限可以减轻间隙的出现,但是还期望实现表现出某种形式的非冗余严密行为,即,使报告的在单个光线和单个对象之间发生的相交的数量最小化。因此,对于实施方式来说,优选的是在不修改多边形边界的情况下,在各个多边形相交测试中,尤其是在具有共有顶点和/或边的那些测试中,提供一致的结果。然而,在一般情况下,实施完全精确的测试通常是不可行的,因此我们不得不确保无论引入什么误差都与确保非冗余严密性的目的相容。如果我们将本身限制到其中如果边由一对共有顶点(使得不存在“T形连接”)定义则仅认为边是共有的情况,则可以通过将每个相交测试分解为多边形顶点在平面(不包含光线)上的投影,然后在该平面中进行精确相交测试来实现这一点。这一系列操作将所有误差合并成每个顶点的贡献,确保结果在连接的三角形上是一致的,因为共有顶点在变换之后保持共有(从而保留局部拓扑)并且随后的相交测试是准确的。
在以上操作的上下文中,当且仅当针对平面中的任何(确切的)共有顶点或边交点集合报告单个正的交点结果时,实现方式才可以被称为“非冗余严密”。换句话说,如果确保与多个多边形的共享边上的点或封闭扇形的共享顶点相交的光线被确定为与共享边或顶点的多边形中的至少一个相交,则具有凸多边形的光线的相交测试是“严密的”。此外,如果确保与多个凸多边形的共享边上的点或封闭扇形的共享顶点相交的光线被确定为与共享边或顶点的多边形中的单个多边形相交(即,光线被确定为与共享边或顶点的多边形中的一个且仅一个相交),则光线与凸多边形的相交测试是“非冗余严密”。
这里描述的示例通过规定共有边和顶点属于具有一致取向的多边形来进一步定义该严密性属性,该一致取向是相对于彼此(区分向外和向内的多边形,即根据它们的缠绕顺序)或者相对于光线的透视图(区分前向和背向的多边形)的一致取向。实际上,存在若干(非互斥)场景(或其任何组合),其中“严密”和/或“非冗余严密”的性质可以适用或可以不适用:(i)不是封闭扇形的共享顶点(例如,网格的边界顶点);(ii)非流形几何形状,即,由三个或更多个多边形共享的边;(iii)具有以不一致缠绕顺序指定的多边形的封闭扇形的共享边或共享顶点(即,以相同顺序给出任何共享边的端点);(iv)具有多边形的封闭扇形的共享边或共享顶点,其用一致的缠绕顺序(即,任何共享边的端点以相反的顺序给出)指定,从光线的视点(例如,轮廓边或顶点)具有多于一个的取向(即,顺时针和逆时针);(v)非简单几何形状,即不在共用边或共用顶点处的多边形之间的相交(例如内部相交、T型连接);以及(vi)冗余几何形状,即,由退化多边形共享的封闭扇形的共享边或共享顶点的相交。在情况(vi)中,期望保持“严密”或“非冗余严密”的特性,但是仅当省略退化多边形时。
在本文描述的示例中,凸多边形的顶点被投影到与光线方向正交的一对轴上,其中所述一对轴的原点与光线原点相对应。这样,用于测试光线是否与3D场景中的凸多边形相交的相交测试过程被简化为2D问题,如上所述,该问题使得我们能够确保严密相交。一对轴彼此不平行。光线位于一对轴的原点。光线的方向向量沿着一对轴中的两个轴具有零的量值。因此,只有当多边形覆盖一对轴的原点时,才确定光线与多边形相交,其中光线可以在其边界处与多边形相交或不相交。本文描述了用于当光线与多边形的边上的点相交时确保相交测试的严密性的不同示例。
在本文描述的示例中,一对轴表示光线坐标系的两个基向量。本文描述的特定光线坐标系对于在光线跟踪系统中执行相交测试中使用是特别有益的,尽管在其他示例中,一对轴可以不是本文描述的特定光线坐标系的一部分。
例如,在本文描述的光线坐标系中,当在空间坐标系中表达时,基向量中的一些分量为零。此外,光线可以被重新缩放,使得光线方向向量的最大分量具有单位量值。由于比例值是1.0或0.0,因此在本文所描述的示例中选择光线坐标系和重新缩放光线可使三分之二的测试在数学上更便宜。这可以通过执行对于光线恒定的少量预先计算来实现,因此可以降低执行此预先计算的成本,这是因为对光线执行了一次预先计算,然后就可以在涉及光线的许多相交测试中使用所述预先计算。例如,在光线方向向量D具有分量Dx、Dy和Dz的情况下,可以预先计算并且存储光线的
Figure BDA0003551170210000131
Figure BDA0003551170210000132
的值(或者
Figure BDA0003551170210000133
Figure BDA0003551170210000134
的值)。如下面更详细描述的,轴可以交换(例如,置换)以确保Dz是光线方向向量的主分量,即|Dz|≥|Dx|和|Dz|≥|Dy|。由于任何有效光线方向向量具有非零的量值,这意味着|Dz|>0。作为另一个示例,可以预先计算并且可以存储光线的
Figure BDA0003551170210000135
Figure BDA0003551170210000136
的值(或者
Figure BDA0003551170210000137
Figure BDA0003551170210000138
的值),其中Dx和Dy为非零,或者如果Dx或Dy为零,则通过使用例如IEEE浮点格式中定义的有符号无穷大的概念来进行。在一些实例中,可以将零值替换为足够小以在本文所描述的操作中表现得像零一样的非零值,和/或可以将无穷的值替换为足够大以在本文所描述的操作中表现得像无穷一样的有限值,并且这些示例使得不必将一些零和无穷视为特殊情况,并且还避免了可能由于乘以或除以零或无穷而产生的至少一些不明确结果。注意,
Figure BDA0003551170210000139
Figure BDA00035511702100001310
的值(或
Figure BDA00035511702100001311
Figure BDA00035511702100001314
的值)具有大于或等于1的模数。作为另一示例,可以预先计算并且存储光线的
Figure BDA00035511702100001313
的值。在已经预先计算这些值之后,可使用这些值对光线执行相交测试。预先计算值可用于可并行执行的多个相交测试。在一些示例中,存储预先计算值,使得它们可以被读取,而不是被计算以用于对光线执行相交测试。此外,重新缩放光线以使得光线方向向量的最大分量具有单位量值和/或光线坐标系的选择以使得基向量的一个或多个分量为零使得光线的处理更容易实现。通过减少需要执行的测试的数量以便确定光线是否与凸多边形相交和/或简化光线的处理以确定光线是否与凸多边形相交,可以减少光线跟踪系统中的相交测试模块的延迟、尺寸和/或功耗。
图1示出了包括光线跟踪单元102和存储器104的光线跟踪系统100。光线跟踪单元102包括处理模块106、相交测试模块108和处理逻辑110。相交测试模块108包括一个或多个框相交测试单元112、一个或多个多边形相交测试单元114、光线重新缩放单元116和示例变换单元118。应注意,可存在多于一个光线重新缩放单元和/或多于一个示例变换单元。在操作中,光线跟踪单元102接收定义3D场景内的对象的几何数据。光线跟踪单元102还接收定义要测试相交的光线的光线数据。光线可以是一次光线或二次光线。处理模块106被配置为基于几何数据生成加速结构,并且将加速结构发送至存储器104以存储于其中。在加速结构已被存储在存储器104中之后,相交测试模块108可以从存储器104检索加速结构的节点(例如,包括定义对应于节点的轴对齐框的数据)以针对所检索的节点执行光线相交测试。为了避免一次读取整个加速结构,相交测试模块108基于先前相交测试的结果在每个阶段从存储器104检索来自一层加速结构的框的子集。框相交测试单元112执行相交测试以确定光线是否与对应于加速结构的节点的边界框中的每一个相交(其中未命中可以剔除大片的分层加速结构)。如果确定叶节点相交,则多边形相交测试单元114执行一个或多个多边形相交测试以确定光线与哪个(些)对象(如果存在)相交。在该示例中,凸多边形是三角形,但是注意到在其他示例中,凸多边形可以是其他形状,诸如正方形、矩形、五边形、六边形等,只要它们是平面的。相交测试的结果指示光线与场景中的哪一个对象相交,并且结果还可以指示在所述对象上光线与所述对象相交的位置,(例如,重心坐标),并且还可以指示沿着光线发生相交的距离,并且还可以指示对象从光线视角看的感知取向(例如,顺时针/逆时针或前向/背向)。在一些情况下,相交确定可以基于沿着光线发生相交的距离是否介于光线的最小裁剪距离与最大裁剪距离(tmin与tmax)之间。在一些情况下,相交确定可以基于对象的感知取向(例如,用于背面剔除)。将相交测试的结果提供到处理逻辑110。处理逻辑110被配置为处理相交测试的结果以确定表示3D场景的图像的渲染值。由处理逻辑110确定的渲染值可以传回到存储器104以存储在其中以表示3D场景的图像。
在本文描述的示例中,光线跟踪系统使用加速结构以便减少需要针对光线执行凸多边形的相交测试的数量。然而,注意,一些其他示例可能不使用加速结构,并且可以简单地针对凸多边形测试光线,而不首先尝试减少需要使用加速结构执行的相交测试的数量。
通常,当执行光线与凸多边形的相交测试时,根据定义了凸多边形的空间坐标系中的分量来定义光线。然而,在本文所描述的示例中,关于光线本身导出光线坐标系,并且凸多边形可映射到光线坐标系上。术语“空间坐标系”在这里用于指其中定义凸多边形的坐标系。“空间坐标系”可以是世界空间坐标系或实例空间坐标系。在本文所述的大多数实例中,空间坐标系是三维坐标系,凸多边形是完全包含在由n≥3个线段定义的平面内的三维空间的区域,使得所有内角小于或等于180°。严格凸多边形是所有内角严格小于180°的凸多边形。
术语“光线坐标系”在本文中用以指特定针对光线并且在光线原点处具有原点的坐标系。应注意,在本文详细描述的示例中,光线坐标系的原点是光线的原点,但在其他示例中,通过适当调整光线的最小和最大裁剪距离(tmin和tmax),沿着光线的任何点都可以用作光线坐标系的原点。光线坐标系具有三个基向量。基向量中的第一基向量与光线方向对齐。基向量中的第二基向量和第三基向量都与第一基向量正交,并且彼此不平行。在本文所描述的示例中,光线坐标系的第二基向量和第三基向量通常彼此不正交,但在一些示例中,它们可能彼此正交。此外,在本文所描述的示例中,当在空间坐标系中表达时,光线坐标系的第二基向量和第三基向量具有0作为一个分量。在一些示例中,当在空间坐标系中表达时,光线坐标系的基向量中的第二基向量和第三基向量对于一个分量具有值±1(即,量值1)。
在这里描述的示例中,相交测试模块108使用光线坐标系来执行相交测试以确定光线是否与凸多边形相交,其中使用空间坐标系在3D空间中定义光线和凸多边形。从相交测试模块108输出执行光线的相交测试的结果以供光线跟踪系统使用,例如用于确定处理逻辑110针对光线执行哪一个着色器程序。
通过从定义凸多边形的顶点的位置减去光线原点,平移定义凸多边形的顶点,以用于使用光线坐标系执行相交测试。从定义凸多边形的顶点的位置减去光线原点意味着然后相对于光线的原点定义多边形的位置。通过首先利用光线原点使顶点移位,下游计算中的所有相对误差都以光线原点为中心。假设对于框测试仪也是如此,这使得保证保守(即,没有误差否定)更容易。
图2示出了光线202和两个凸多边形204和206。这两个多边形是三角形,并且它们共享边,从而形成四边形。在图2中,从光线的角度来看,两个多边形的方向被表示为顺时针。多边形204由有序顶点集合(v0,v1,v2)定义,并且多边形206由有序顶点集合(v1,v3,v2)定义。顶点v1和v2之间的边由多边形204和206共享。由于v1和v2在多边形204和206中以相反的顺序定义,因此边在一个多边形中具有与另一个多边形相反的方向,所以这两个多边形被认为是规定为具有一致的缠绕。如上所述,光线202,r(t),可以表示为r(t)=O+Dt,其中O是表示光线的原点的向量,并且D是光线的方向向量,其中O=(Ox,Oy,Oz)和D=(Dx,Dy,Dz)。空间坐标系的x、y和z基向量在图2中示出。如上文所描述,空间坐标系可以是正在渲染的场景的世界空间坐标系,或者空间坐标系可以是正在渲染的场景内的一组示例几何形状的实例空间坐标系。在相交测试中使用的光线坐标系的原点是光线的原点。通过从顶点的位置减去光线原点来转换定义多边形204和206的顶点的位置。在图2所示的示例中,光线202在交点208处与多边形204相交。
此外,在本文描述的一些示例中,在执行相交测试之前,选择性地置换光线以及定义凸多边形的顶点的x、y和z分量,使得|Dz|≥|Dx|和|Dz|≥|Dy|(注意,在这些示例中,对于有效光线方向,我们还必须使|Dz|>0)。执行轴的选择性置换,使得Dz将是光线方向的主分量。
图2示出了在已经执行了光线和多边形的轴的平移和选择性置换之后,光线202以及多边形204和206相对于基向量的关系,使得光线的原点在坐标系的原点,并且使得|Dz|≥|Dx|和|Dz|≥|Dy|。这确保了Dz非零,因为有效光线无法使Dx=Dy=Dz=0。
光线坐标系的基向量在图2中表示为P、Q和S。光线坐标系的第一基向量S被设置成沿着光线的方向,S=A(Dx,Dy,Dz),其中A是标量值。在一些示例中,
Figure BDA0003551170210000161
使得
Figure BDA0003551170210000162
作为一个示例(下面可以称为“第一示例”),第二基向量和第三基向量P和Q可以被定义为
Figure BDA0003551170210000163
Figure BDA0003551170210000164
更一般地,如图2中的示例所示,P=B(Dz,0,-Dx)和Q=C(0,Dz,-Dy),其中B和C是任何非零标量值。为了给出一些其它示例,B可以是±1、
Figure BDA0003551170210000165
±sgn(Dz)或±sgn(Dx)或这些非零标量值的任何乘积,例如,
Figure BDA0003551170210000166
和C可以是±1、
Figure BDA0003551170210000167
Figure BDA0003551170210000168
±sgn(Dz)、或±sgn(Dy),或这些非零标量值的任何乘积,例如
Figure BDA0003551170210000169
注意,对于非零值α,如果α为正,则sgn(α)=+1,并且如果α为负,则sgn(α)=-1。如果α=0,则sgn(α)可以是+1或-1,这取决于α的浮点表示的符号位。注意,标准浮点表示允许+0和-0两者被分开表示,并且无符号0通常被标识为+0。换句话说,如果所采用的进制区分-0与+0之间(如IEEE浮点系统的情况),则作为示例,sgn(+0)=+1并且sgn(-0)=-1,否则sgn(0)=1。A的共有值集合可以是B和C的共有值集合的并集。注意,S正交于P和Q,这可以从P.S=Q.S=0看出。然而,根据Dx和Dy的值,P和Q不必彼此正交。例如,除非Dx或Dy为零,否则P和Q将不彼此正交。如上所述,P和Q彼此不平行,例如P和Q彼此平行至少足够远,以便不会由于舍入的损失而引起问题,否则系统可能退化成1D场景。注意,Dz不能为零,因为轴的选择性置换使得Dz是光线方向的主分量,并且因为有效光线方向向量必须具有非零的量值以便定义线。因此,在光线基向量P和Q的可能分量中,
Figure BDA00035511702100001610
Figure BDA00035511702100001611
的值总是明确定义的,并且具有从零到包括端值在内的一范围内的量值,而
Figure BDA00035511702100001612
Figure BDA00035511702100001613
的值具有从一到正无穷(包括端值在内)范围内的量值。
对标量值A、B和C的选择可能会影响系统的偏手性(handedness)。在图2中,世界(或实例)空间轴形成左手系统。如果我们将光线空间轴排序为(X’,Y’,Z’)=(P,Q,S),则它们形成具有相同偏手性的系统(当且仅当主轴为正时才会如此)。为负的(来自标量值A、B和C的)每个标量值使系统的偏手性翻转,例如从左手翻转到右手。如果偶数个标量值A、B和C为负,则它们将被抵消,并且我们恢复到左手系统。
从空间坐标系到光线坐标系的映射的符号可以影响感知的图元取向(给定固定的图元缠绕)。例如,映射的负号可以反转图元取向,并且映射的正号可以保持图元取向。作为示例,映射的符号可以被给出为:
sgn(Dz)XOR sgn(A)XOR sgn(B)XOR sgn(C)XOR sgn(σ) (1)
其中sgn(σ)指示置换是否反转映射符号。
当将系统旋向性反转两次导致原始旋向性时,将各个项异或在一起。例如,如果A=1/|Dz|,B=sgn(Dz)/Dx,C=sgn(Dz)/Dy,则表达式(1)变为sgn(Dx)XOR sgn(Dy)XOR sgn(Dz)XOR sgn(σ)。
sgn(Dz)的值来自基变化矩阵(即,作为行或列的三个光线坐标轴,其中A=B=C=1,并且主分量已经被置换到最后的行或列)的行列式的符号,其给出了变换的单位立方体的有符号的体积,等于
Figure BDA0003551170210000171
作为主要分量,Dz的量值为至少
Figure BDA0003551170210000172
因此行列式的量值为至少
Figure BDA0003551170210000173
在通过基向量量值的乘积对该结果进行归一化之后,这给出了矩阵距离奇异多远的度量,即光线坐标系距离退化多远,以及因此正交轴距离平行多远。对于D来说,有益的是,具有这样的量值,使得这些表达式不会下溢或上溢,以避免当将顶点变换到光线坐标系中时潜在的精度问题。
在更高的n维构造中,该行列式归纳为Dz (n-2)||D||2,这两者都证明了构造对所有n>1都起作用,并且当n为奇数时Dz仅影响符号。
sgn(A)、sgn(B)和sgn(C)的值来自于基于上述光线坐标系的重新缩放。置换符号西格玛σ的值来自于对光线分量进行重新排序(即,通过西格玛σ“置换”)以将主要分量置于特定位置(例如,最终/z坐标)的方式。这样,我们留下次要坐标进入哪些位置的两个选择。这些选择中的一个对应于旋转所有坐标,另一个对应于转置坐标中的两个。例如,为了简化复用,当Y是主要分量时置换涉及转置,否则置换涉及旋转。例如,如果X是光线方向向量的主分量,则轴的置换是旋转(x,y,z)->(y,z,x);如果Y是光线方向向量的主分量,则轴的置换是转置(x,y,z)->(x,z,y);并且如果Z是光线方向向量的主分量,则轴的置换是恒等式(x,y,z)->(x,y,z)。该示例提供了简单的复用,因为对于前两个分量仅有两个输入。转置坐标中的两者导致行列式的符号改变,因为其等效于交换基变化矩阵中的两行。
在另一个示例中(图中未示出,下面称为“第二示例”),第二基向量和第三基向量P和Q被定义为
Figure BDA0003551170210000174
Figure BDA0003551170210000175
在此示例中(图2中未示出),
Figure BDA0003551170210000176
通常,这两个示例可以被描述为第二基向量P,其被定义为
Figure BDA0003551170210000177
即P=
Figure BDA0003551170210000178
Figure BDA0003551170210000179
以及第三基向量Q,其被定义为
Figure BDA00035511702100001710
Figure BDA00035511702100001711
Figure BDA00035511702100001712
在另一个示例中(附图中未示出,下面称为“第三示例”),
Figure BDA0003551170210000181
Figure BDA0003551170210000182
例如,第二基向量P可被定义为
Figure BDA0003551170210000183
Figure BDA0003551170210000184
Figure BDA0003551170210000185
并且第三基向量Q可被定义为
Figure BDA0003551170210000186
Figure BDA0003551170210000187
Figure BDA0003551170210000188
注意,sgn(Di)Di=|Di|,
Figure BDA0003551170210000189
Figure BDA00035511702100001810
在另一个示例中(图中未示出,下面称为“第四示例”),B=±1和C=±1。例如,第二基向量P可被定义为
Figure BDA00035511702100001811
即P=(+Dz,0,-Dx)或P=(-Dz,0,+Dx),并且第三基向量Q可被定义为
Figure BDA00035511702100001812
即Q=(0,+Dz,-Dy)或Q=(0,-Dz,+Dy)。
在另一个示例中(附图中未示出,下面称为“第五示例”),
Figure BDA00035511702100001813
Figure BDA00035511702100001814
例如,第二基向量P可被定义为
Figure BDA00035511702100001815
Figure BDA00035511702100001816
Figure BDA00035511702100001817
并且第三基向量Q可被定义为
Figure BDA00035511702100001818
Figure BDA00035511702100001819
Figure BDA00035511702100001820
Figure BDA00035511702100001821
在其他实例(图中未示出,并且下文将其称为“第六实例”)中,
Figure BDA00035511702100001822
Figure BDA00035511702100001823
因此,第二基向量P可被定义为
Figure BDA00035511702100001824
Figure BDA00035511702100001825
Figure BDA00035511702100001842
并且第三基向量Q可被定义为
Figure BDA00035511702100001827
Figure BDA00035511702100001828
Figure BDA00035511702100001829
由于Dz是光线方向向量的主要分量,因此Dx或Dy可以是零。因此,在这些示例中,当处理
Figure BDA00035511702100001830
Figure BDA00035511702100001831
的值时需要小心。在一种方法中,Dx或Dy的值可能被扰动某一小量,使得它们从不恰好为零。例如,可以将零值替换为足够小以在本文所描述的操作中表现得像零一样的非零值。
在其他实例(图中未展示,并且下文将其称为“第七实例”)中,
Figure BDA00035511702100001832
Figure BDA00035511702100001833
因此,第二基向量P可被定义为
Figure BDA00035511702100001834
Figure BDA00035511702100001835
Figure BDA00035511702100001836
并且第三基向量Q可被定义为
Figure BDA00035511702100001837
Figure BDA00035511702100001838
Figure BDA00035511702100001839
由于Dz是光线方向向量的主要分量,因此Dx或Dy可以是零。因此,在这些示例中,当处理
Figure BDA00035511702100001840
Figure BDA00035511702100001841
的值时需要小心。如上所述,在一种方法中,Dx或Dy的值可能被扰动某一小量,使得它们从不恰好为零。例如,可以将零值替换为足够小以在本文所描述的操作中表现得像零一样的非零值。
在上述第二示例、第三示例、第四示例和第五示例中给出的示例基向量都具有一致的旋向性,而在上述第六示例和第七示例中给出的基向量的旋向性可以具有一致的或相反的旋向性,这取决于Dx和Dy的符号。
在另一个示例中(图中未示出),B=±sgn(Dz)和C=±sgn(Dz)。例如,第二基向量P可被定义为
Figure BDA0003551170210000191
即P=(+|Dz|,0,-sgn(Dz)Dx)或P=(-|Dz|,0,+sgn(Dz)Dx),并且第三基向量Q可被定义为
Figure BDA0003551170210000192
即Q=(0,+|Dz|,-sgn(Dz)Dy)或Q=(0,-|Dz|,+sgn(Dz)Dy)。
在另一个示例中(图中未示出),B=±sgn(Dx)和C=±sgn(Dy)。例如,第二基向量P可被定义为
Figure BDA0003551170210000193
即P=(+sgn(Dx)Dz,0,-|Dx|)或P=(-sgn(Dx)Dz,0,+|Dx|),并且第三基向量Q可被定义为
Figure BDA0003551170210000194
即Q=(0,+sgn(Dy)Dz,-|Dy|)或Q=(0,-sgn(Dy)Dz,+|Dy|)。
在所有这些实例中:(i)S正交于P和Q,(ii)P和Q彼此不平行,和(iii)当在空间坐标系中表达时,P和Q具有零作为一个分量。此外,在这些示例中的一些中,当在空间坐标系中表达时,P和Q具有±1的值作为一个分量。条件(i)和(ii)一起意味着P、Q和S始终是线性独立的。这意味着所述向量也是跨越的,并因此形成了基。对于有效(即非零)光线方向,行列式永远不为零也证明了所述向量形成了非退化基。
将把某种误差引入到投射的量中(例如通过浮点评估),并且基向量的选择与这将如何影响相交计算的总误差有关。给定如上定义的一般基础,投影顶点的分量(p,q,s)由以下矩阵乘法
Figure BDA0003551170210000195
给出,
其中(vx,vy,vz)是世界或实例空间中的顶点分量,在已经减去光线原点之后,并且可能在已经对轴进行置换和镜像使得Dz≥Dx、Dz≥Dy和Dz≥0之后。根据它们的投影对应物表示这些顶点分量的逆映射由
Figure BDA0003551170210000196
给出,
其中
Figure BDA0003551170210000197
是光线的平方长度。上述表达式是有用的,因为它示出了计算的投影分量中的误差如何映射到原始顶点位置的误差,从而在可以在由一个光线投影与另一个光线投影(假设共享的光线原点)所暗示的扰动顶点位置之间进行直接比较的意义上,以光线无关的方式给出误差行为的印象(回想可以针对给定图元测试大量不同的光线)。
例如,假设我们计算p和q为具有相对误差εp和εq(对于精确浮点实现而言是实际的)的p′和q′,使得
Figure BDA0003551170210000201
注意,由于在该示例中没有明确地计算s,因此如上所述,可以以零有效误差来对其进行描述。现在,使用用于逆映射的较早表达式,我们可以用(v′x,v′y,v′z)(隐式的偏移顶点)来表达该误差,其中
Figure BDA0003551170210000202
如果我们用我们的原始投影表达式代替(p,q,s),这简化为
Figure BDA0003551170210000203
要观察的第一件重要事情(在这个示例中,其中投影坐标是利用相对误差计算的)是隐式的顶点误差不依赖于对A,B或C的值的选择(假设零值被正确处理,如在别处所述)。这允许我们根据它们的相对价值来决定这些量,而不必考虑它们对误差分析的影响。
接下来,我们可以通过将总的平方相对误差ε2写为
Figure BDA0003551170210000204
其中
Figure BDA0003551170210000205
是不在光线原点的顶点相对于光线原点的顶点的平方长度。现在我们可以看到为什么Dz是主轴是重要的;上述等式包括Dx/Dz和Dy/Dz项,对于有限的εx和εy,这两项可能变得无界,计算的投影分量上的误差,因为Dz趋向于零。
例如,以其中vz≠0,εp≠0,εq=0,Dx=Dy并且Dz/Dx→0的情况为例。我们使
Figure BDA0003551170210000206
Figure BDA0003551170210000211
其中在第一行中我们使用了替换εy=0,在第二行中我们使用了Dx=Dy,在第三行中我们使用了Dz/Dx→0,事实上vz≠0。因此我们看到关于顶点分量vx(和vy)的信息在投影中被洗出为Dz/Dx→0,如参考针对(p,q,s)的矩阵表达式应当直观地清楚的那样。当然,如果Dz是长轴,则Dz/Dx(和Dz/Dy)的量值在下面被限制为一,使得上述反常不会出现(并且容易根据投影分量上的误差界限来构建总误差的上限)。
“互逆基”是在基向量P=B(Dz,0,-Dx)和Q=C(0,Dz,-Dy)中,B是
Figure BDA0003551170210000212
的函数并且C是
Figure BDA0003551170210000213
的函数的基。换句话说,B是在其分母中具有Dx的简化分数,并且C是在其分母中具有Dy的简化分数。例如,互逆基可以使
Figure BDA0003551170210000214
并且
Figure BDA0003551170210000215
使得
Figure BDA0003551170210000216
Figure BDA0003551170210000217
作为另一示例,互逆基可以使
Figure BDA0003551170210000218
并且
Figure BDA0003551170210000219
使得
Figure BDA00035511702100002110
Figure BDA00035511702100002111
Figure BDA00035511702100002112
使用互逆基的一个优点是,可以以某种精度(通常不如可比较的浮点运算精确)来评估每个倒数,然后可以将那些评估值看作好像它们是精确的,本质上为了提高所有交点测试仪的精度(提高全面的一致性)而扰动光线方向的方向。使用互逆基的另一个优点是,如果需要,它在如何计算相交距离方面提供了更多的灵活性。特别地,如果例如通过重心插值确定交点(相对于光线基坐标系)(px,py,pz),则可以可选地将相交参数t计算为
Figure BDA00035511702100002113
Figure BDA00035511702100002114
例如,如果选择与给定凸多边形的分量具有最小范围的轴对应的分量,则这可以提供优良的误差特性。这与非互逆基形成对比,因为在不增加每条光线的存储的情况下执行涉及倒数
Figure BDA00035511702100002115
Figure BDA00035511702100002116
的计算的成本效率较低。预先计算这些附加项还有可能牺牲光线定义中一定的一致性,因为所计算的互逆通常无法被视为精确的。由于互逆基投影操作还涉及形式
Figure BDA00035511702100002117
Figure BDA00035511702100002118
Figure BDA00035511702100002119
的顶点分量的乘积,所以这些中间乘积可以被保留,以便交点参数t直接从重心内插获得,而不需要任何进一步的缩放(在该文献的后面更详细地描述)。
下面的表1示出了不同光线格式的八个示例(表示为A至H)以及可以在不同示例中使用的基向量(直到符号)。短语“直到符号”在这里意味着P和Q可以按任何单位值缩放,即限于该集合{-1.+1}。表1还示出了对于不同光线格式的每条光线将执行的乘法和乘法运算的数量、对于投影到具有其对应基础的2D光线空间中的每个顶点将执行的乘法运算的数量、以及对于相交距离计算的每个图元将执行的乘法和乘法运算。
Figure BDA00035511702100002120
Figure BDA0003551170210000221
表1:示例光线格式和基向量
可以基于来自光线格式编码、基投影和距离计算的所有浮点运算(FLOP)的总成本将光线格式和基向量的不同选项相互比较。当将光线预处理成给定格式(例如,表1中示为A到H的选项之一)从多边形相交测试中解耦并且每光线执行一次,并且假定针对多个顶点测试单个光线,则将FLOP成本从基础投影卸载到光线格式编码上以最小化前者往往是有益的。当针对多个图元测试单个光线时,则将FLOP成本从距离计算卸载到光线格式编码上以使前者最小化也是有益的。
选项B、D、F和H通常分别是对A、C、E和G的所有改进,因为它们将倒数从(每图元)距离计算转移到(每光线)光线格式编码。
选项B(和选项A)是默认光线格式/基础,其是执行相交测试的最直观方式,但在需要执行的浮点运算的数目方面不是最有效的。选项F(和选项E)相对于选项B(和选项A)将基投影中每顶点执行的乘法运算的数目减少两个。
选项C、D、G和H使用互逆基。选项D(和选项C)相对于选项B(和选项A)将基投影中每顶点执行的乘法运算的数目减少一,并且将距离计算中每图元执行的乘法运算的数目减少一。
选项H(和选项G)相对于选项B(和选项A)将基投影中每顶点执行的乘法运算的数目减少两个。
使用具有如以上示例中所描述的基向量的光线坐标系可以简化相交测试中涉及的一些处理。具体地说,如果基向量具有0作为分量值,则涉及所述基向量的乘法和/或加法运算(例如,如用于执行点积或叉积)不会包含为0的分量的乘法和/或加法运算,从而减少需要执行的操作的数量和/或复杂性。类似地,如果基向量具有±1作为分量值,则涉及基向量的乘法和/或加法运算(例如,如用于执行点积或叉积)不会包含为±1的分量的乘法运算,从而减少需要执行的操作的数量和/或复杂性。减少所执行的操作的数量往往会降低相交测试模块108的延迟和功耗,并且另外,降低所执行的操作的复杂性往往会提高准确性。此外,当在固定功能电路系统中实施相交测试模块108时,随后减少所执行的操作的数量和/或复杂度往往会减小相交测试模块108的尺寸(即,硅面积)。例如,固定功能电路系统可包括一个或多个乘与加部件(例如,融合的单舍入乘加单元),以使用光线坐标系的第二基向量和第三基向量来执行乘法和加法。在单舍入浮点实现方式中(即,将舍入应用于精确的最终结果以确保输出可表示值),这比乘法舍入的乘积和(乘积与和两者)更准确并且通常面积更小。其面积甚至可以与准确性较低的乘法舍入实施方案相当,这对于更复杂的操作是不太可能发生的。浮点加法和乘法运算(不同于与其近似的实数)没有关联性。减少操作减少了可能的排序,因此在结果一致性方面可能有其他益处。
在本文所描述的主要示例中,光线的光线数据具有n=3个系数。然而,在其他示例中,光线数据可具有多于三个系数。所描述的光线坐标系的构造可以应用于任何维度n≥2。例如,可以定义光线坐标系的n个基向量,其中光线坐标系的基向量中的第一基向量与光线方向对齐,并且存在与第一基向量正交的(n-1)个其他基向量。如果n>2,则(n-1)个其他基向量中没有成对的向量是平行的。此外,当在空间坐标系中表达时,(n-1)个其他基向量对于(n-2)个分量具有零。光线坐标系的n个基向量形成n维空间的基础(基向量是线性独立的,并因此是跨越的)。例如,在四维空间中,光线方向向量可以是D=(Dw,Dx,Dy,Dz),并且光线坐标系的四个基向量可以是:S=A(Dw,Dx,Dy,Dz),P=B(Dz,0,0,-Dw)和Q=C(0,Dz,0,-Dx),R=D(0,0,Dz,-Dy),其中在该实例中,轴的选择性置换确保Dz是光线方向向量的主分量,即|Dz|≥|Dw|,|Dz|≥|Dx|和|Dz|≥|Dy|。在该示例中,A、B、C和D是非零标量,并且它们可以被选择为使得系数之一一元化,例如,如上文关于三维示例所描述的。在此示例中,所述四个维度可对应于三个空间维度和一个时间维度。在4D情况下,该行列式的符号的表达式(类似于上面对于3D情况给出的表达式(1))可以给出为:
sgn(A)XOR sgn(B)XOR sgn(C)XOR sgn(D)XOR sgn(σ) (2)
作为示例,如果光线方向向量的主分量是W或Y轴,则置换σ可以反转映射符号,但是如果光线方向向量的主分量是X或Z轴,则置换σ不可以反转映射符号。特别地,在该示例中,改变分量的次序以使得主分量处于最终位置可以包括W的主轴的四个循环和Y的主轴的转置,在两种情况下都翻转符号。Dz的符号不是表达式(2)的因数,因为n是偶数(即n=4)。
返回3D情况,在一些示例中,光线和凸多边形从空间坐标系变换到光线坐标系中,其中在光线坐标系中执行相交测试。可以通过确定光线是否与由其在光线坐标系中定义的顶点定义的凸多边形相交来执行光线坐标系中的测试。然而,在一些其他示例中,光线和凸多边形不需要完全变换到光线坐标系中。在这些其他示例中,多边形可以被投影到与光线坐标系的第二基向量和第三基向量相对应的一对轴上,但是可能不确定多边形的沿着光线方向(即,在光线坐标系的第一基向量的方向上)的分量。应注意,在光线坐标系中定义光线很简单,因为光线的原点处于光线坐标系的原点处,并且光线的方向平行于S轴,使得光线沿着光线坐标系的P和Q轴的分量值为零。
在上述示例中,选择性地置换轴以确保Dz是光线方向向量的主分量。此外,可以选择性地使轴反转(或“反射”)以确保光线方向向量的所有分量都是非负的,即Dz>0、Dx≥0和Dy≥0。轴的选择性反转使得光线方向向量指向空间坐标系的八分区,其对于x、y和z具有正值。由于Dz是光线方向向量的主分量,这意味着
Figure BDA0003551170210000241
Figure BDA0003551170210000242
在0到1的范围内,并且意味着
Figure BDA0003551170210000243
Figure BDA0003551170210000244
在从1到正无穷大的区间内。在轴Dz≥Dx≥0和Dz≥Dy≥0的选择性置换和选择性反转之后。
返回到基的改变的符号,迫使Dx、Dy和Dz的符号为非负意味着它们在行列式sgn(A)、sgn(B)或sgn(C)中的任何出现都被强制为1,简化了符号后修改。然而,由于必须反转/反射向量坐标以匹配光线坐标的反转/反射,因此必须通过sgn(Dx)、sgn(Dy)和sgn(Dz)来后修改符号。因此,对于上面示例中给出的A、B和C的特定选择,这导致相同的符号修改表达。
可以存储基变化映射的符号的映射指示,其中映射指示从空间坐标系到光线坐标系的映射是否影响感知的多边形取向。在光线与多边形的相交测试期间可以使用映射指示,以确保输出正确的取向(由原始空间坐标系中的光线感知)。
图3是执行光线相对于多个凸多边形(例如,三角形)的相交测试的方法的流程图,所述相交测试由相交测试模块108的多边形相交测试单元114执行。在(一个或多个)多边形相交测试单元114执行的光线关于多边形的相交测试之前,可以由(一个或多个)框相交测试单元测试光线与表示加速结构的节点的框的相交,其中如果确定光线与参考多边形的加速结构的叶节点相交,则调度光线与多边形相交。
在步骤S302中,在相交测试模块108处获得定义光线202的数据和定义凸多边形204和206的顶点的数据。具体地说,获得定义空间坐标系中的光线原点和光线方向的分量的数据。定义光线原点的数据可以是空间坐标系中的光线原点位置的三个分量Ox、Oy和Oz。在图3所示的示例中,定义光线方向的数据包括空间坐标系中光线方向的三个分量Dx、Dy和Dz。或者,如上所述,定义光线方向的一些不同的值可能已经被预先计算并且存储在存储器中,使得在步骤S302中可以读取预先计算的值。例如,可以读取三个值以定义光线方向数据,并且这三个值可以是
Figure BDA0003551170210000251
Figure BDA0003551170210000252
在其他示例中,可以读取不同的预先计算值以定义光线方向,例如可以读取
Figure BDA0003551170210000253
和Dz的值。作为另一个示例,可以读取
Figure BDA0003551170210000254
Figure BDA0003551170210000255
的值。作为另一个示例,可以读取
Figure BDA0003551170210000256
Figure BDA0003551170210000257
的值。在其他示例中,可以预先计算和读取可以用于定义光线方向的其他值。这三个值的作用是不同的,并且它们不总是需要的。三角测试仪的第一个和关键目的是相交确定。这使用前两个值,例如
Figure BDA0003551170210000258
Figure BDA0003551170210000259
以及
Figure BDA00035511702100002510
或类似项,根据B和C的选择可能具有一些符号。这些用于产生P和Q,图元顶点相对于所述P和Q投影。相交的重心坐标可以从相交确定中导出,而无需附加的输入。三角形测试仪的第二个目的是取向确定(例如,用于背面剔除)。按照行列式形式,这另外使用第三值
Figure BDA00035511702100002511
的符号以确保正确的结果。三角测试仪的第三个最终目的是计算相交距离。这还使用了第三值的量值,即
Figure BDA00035511702100002512
或|Dz|,以正确地重新缩放距离值。如果不需要第三目的(例如,当光线具有无限范围或者tmin和tmax已相应地被预缩放时),则可以不需要
Figure BDA00035511702100002513
或|Dz|作为输入。如果不需要第二目的(例如,当命中图元的任一侧之间没有区别时),则可以不需要sgn(Dz)。或者,相交距离计算可以使用
Figure BDA00035511702100002514
Figure BDA00035511702100002515
中的任何一个结合交点的相应分量来确定相交距离。
在参照图3描述的示例中,在步骤S302中读取定义凸多边形204和206的顶点的位置的x、y和z分量的数据。
在步骤S304中,相交测试模块108(例如,光线重新缩放单元116)选择性地置换和/或反转定义光线以及定义凸多边形的顶点的数据的x、y和z分量,使得Dz≥Dx≥0和Dz≥Dy≥0相等。轴的置换可被认为是重新布置轴。具体地说,轴的置换包括三个轴的旋转、两个轴的转置或同一性(即,不改变轴)。应注意,涉及两个轴的转置的置换将改变坐标系的偏手性,而不涉及两个轴的转置的置换不会改变坐标系的偏手性。执行轴的置换,使得光线方向的主分量是Dz(即,确保|Dz|≥|Dx|和|Dz|≥|Dy|)。例如,如果光线方向向量的原始z分量具有比光线方向向量的原始x和y分量更大的量值,则不使用置换(其可被认为是使用恒等运算的置换);如果光线方向向量的原始x分量具有比光线方向向量的原始y和z分量更大的量值,则置换可以包括三个轴的旋转,使得x分量变为z分量,z分量变为y分量,并且y分量变为x分量;并且如果光线方向向量的原始y分量具有比光线方向向量的原始x和z分量更大的量值,则置换包括y和z轴的转置,使得y分量变为z分量,并且z分量变为y分量(并且x分量保持为x分量)。可以仅在步骤S304中执行选择性置换(即不执行选择性反转),但是在参照图3描述的方法中,执行零轴、一个或多个轴的选择性反转,使得光线方向进入具有正x、y和z的八分圆。轴的“反转”可被称为“反射”、“反向”或“求反”,并且可涉及改变维度中沿着所讨论的轴的所有分量值的正负号。定义光线的数据包括光线原点和光线方向,并且定义凸多边形的数据包括三个或更多个顶点位置。应注意,反转奇数个轴会使多边形的感知取向反转。
在步骤S306中,相交测试模块108将凸多边形的顶点投影到与光线方向正交的一对轴上,其中所述一对轴的原点与光线原点相对应。凸多边形的顶点到与光线方向正交的一对轴上的这种投影可以包括将凸多边形的顶点变换到上述光线坐标系中。如上所述,光线坐标系具有在光线原点的原点,因此步骤S306可以包括从定义了定义多边形的顶点的位置的数据的各个分量中减去光线原点的各个分量(Ox、Oy和Oz),从而确定定义相对于光线原点的多边形的顶点的位置的分量。如上所述,光线坐标系具有三个基向量,其中第一基向量与光线方向对齐;并且其中基向量中的第二基向量和第三基向量分别与正交于光线方向的一对轴对齐,其中第二基向量和第三基向量:(i)彼此不平行,以及(ii)当在空间坐标系中表达时,具有0作为一个分量。如上所述,在一些示例中,当在空间坐标系中表示时,第二基向量和第三基向量可以具有±1作为一个分量。
投影可以采用点积的形式。3D顶点v=(vx,vy,vz)与3D基向量P=(Px,Py,Pz)和Q=(Qx,Qy,Qz)一起向2D光线空间坐标(p,q)的投影如下:
v→p=P·v=Pxvx+Pyvy+Pzvz
v→q=Q·v=Qxvx+Qyvy+Qzvz
利用这里描述的基的示例Py=0和Qx=0,使得:
p=Pxvx+Pzvz
q=Qyvy+Qzvz
这可以通过单独的乘法和加法来实现,或者可替换地作为(单舍入的)融合DP2(2D点积)来实现,在后一种情况下,这将确保所计算的分量具有与先前讨论的属性的有限相对误差。
此外,对于本文所述的基的一些实例,Px或Pz可分别等于±1,并且Qy或Qz可等于±1,使得:
p=±vx+Pzvz
q=±vy+Qzvz
或者:
p=Pxvx±vz
q=Qyvy±vz
这些中的任何一个都可以通过单独的乘法和加法来实现,或者可替换地作为(单舍入)FMA(融合乘加)来实现,在后一种情况下,FMA将确保所计算的分量具有与先前讨论的特性的有限相对误差。
如上所述,存储映射指示以指示从空间坐标系到光线坐标系的映射(即步骤S304和S306)是否已经改变了多边形的感知方向。如果多边形的感知方向已经改变,则在相交过程中,例如在步骤S318中,将其考虑在内,以便确保在步骤S304和S306中从空间坐标系到光线坐标系的映射不会阻止相交测试模块正确地确定光线是否与多边形相交。
图6示出了当图2所示的两个多边形204和206被投影到与基向量P和Q(即,光线坐标系的第二基向量和第三基向量)对齐的一对轴上时的两个多边形。在该投影中,光线位于原点并被引导到页面中,即,光线方向向量沿P和Q轴的分量为零。因此,表示光线与多边形204的相交位置208在图6中处于原点。图6指示两个多边形204和206的取向在图2中都表现为顺时针,如由定义多边形的有序顶点集合中的顶点的缠绕顺序确定的。在图6中,光线坐标系基向量P和Q被示为彼此成直角,即使它们在空间坐标系中可能不是正交的。然而,清楚的是,这种可视化不影响凸多边形的相交确定(即,它是否覆盖原点)。
在步骤S308中,参数k被设置为零。参数k用来指示特定凸多边形。
在步骤S310中,参数e被设置为零。参数e用于表示凸多边形的特定边。注意,多边形的缠绕顺序(即,其顶点的顺序)指定了其每条边的方向,使得下面给出的每条边隐含地是有向边。在多边形是三角形的示例中,则参数e的最大值(emax)是2。换句话说,参数E可采用0、1或2的值来指示三角形的三个边。在多边形具有n条边的示例中,参数e的最大值(emax)是n-1。凸多边形的每条边由两个投影顶点定义为有序对,表示边的方向。例如,图6所示的多边形204具有由投影顶点v0和v1限定的第一边,即从v0指向v1,由投影顶点v1和v2限定的第二边,即从v1指向v2,以及由投影顶点v2和v0限定的第三边,即从v2指向v0。类似地,图6所示的多边形206具有由投影顶点v1和v3限定的第一边,即从v1指向v3,由投影顶点v3和v2限定的第二边,即从v3指向v2,以及由投影顶点v2和v1限定的第三边,即从v2指向v1。投影顶点v1和v2之间的边在多边形204和206之间共享,虽然在相反方向上指示多边形204和206以一致的缠绕顺序指定。在一些示例中,所述方法可以在每个唯一边上迭代仅一次,而不是单独地在每个凸多边形的N边上迭代,以利用一些边的共享。
在步骤S312中,相交测试模块108的多边形测试单元114确定参数w,其表示光线在第k个多边形的第e条边的哪一边通过。例如,w可以是有符号参数,其使用定义第k个多边形的第e条边的两个投影顶点的位置的函数(在此称为“2D叉积”)f(vi,vj)来确定。定义边的两个投影顶点vi和vj的位置的2D叉积f(vi,vj)被定义为f(vi,vj)=piqj-qipj,其中pi和qi是投影顶点vi沿着一对轴的相应轴的分量,并且其中pj和qj是投影顶点vj沿着一对轴的相应轴的分量。在其他示例中,可以使用定义边的两个投影顶点的位置的其他函数来确定参数w。例如,该函数可以返回piqj和qipj的比较结果,这将避免执行减法运算,但是将不提供用于确定重心坐标的量值。第k个多边形的第e条边的符号w表示从边的角度(从vi指向vj)来看,光线是在边的左边还是右边通过。在边的“左”侧上通过对应于相对于原点从第一端点到第二端点的逆时针旋转。在边的“右”侧上通过对应于相对于原点从第一端点到第二端点的顺时针旋转。对于上面作为f=(vi,vj)=piqj-qipj给出的“2D叉积”的形式,并且第一轴向右指向而第二轴向上指向,左/逆时针对应于f的正结果,而右/顺时针对应于f的负结果。在IEEE浮点规范中,负值具有符号位1,而正值具有符号位0。假设左手系统(按照图2),并且在投影空间中将第一轴P和第二轴Q分别向右和向上对齐,意味着第三轴S(光线方向)指向页面,给出校正的感知取向。在惯用右手系统中,第三轴S指向页面之外,给出误差的感知方向。总之,我们具有以下对应关系:对于左手系统:(i)
Figure BDA0003551170210000281
对于符号位f;以及(ii)
Figure BDA0003551170210000282
对于符号位f。对于右手系统:(i)
Figure BDA0003551170210000283
Figure BDA0003551170210000284
对于符号位f;以及(ii)
Figure BDA0003551170210000285
对于符号位f。在一些示例中,“逆时针”被编码为1,并且“顺时针”被编码为0。因此,在右手系统中,w的符号位给出正确的标志状态;其中如在左手系统中,w的符号位给出相反的标志状态,因此,取向结果被后反转。为了实现这一点,可以向用户提供一个上发条标志,以便在需要左手空间坐标系时进行设置,从而指示所有的边都应当被视为指向相反的方向。
在不同的实现中,以不同的方式使用2D叉积来确定参数w。下面分别参考图4和5详细描述两个示例。例如,定义边的两个投影顶点vi和vj可以以有向边给定的顺序提供给2D叉积f(vi,vj),该顺序是从定义凸多边形的有序顶点集合继承的(即,其缠绕顺序)。例如,多边形204和206的共享边的2D叉积对于多边形204的边将被给定为f(v1,v2)=p1q2-q1p2,并且对于多边形206的边将被给定为f(v2,v1)=p2q1-q2p1
函数f(vi,vj)=piqj-qipj,在此称为“2D叉积”,是类似于3D三乘积的2D:它计算由原点和(p0,q0)之间的第一边和原点和(p1,q1)之间的第二边定义的平行四边形的有符号面积。这等效于产生具有i=0,1的行(pi,qi)的矩阵的行列式。其也等效于将端点视为复数,取第一端点的复共轭,将其与第二端点相乘并查看虚部分量。考虑几何上的所有情况,找到两个端点和原点(即交点)之间的角度的正弦,通过两个端点离原点的距离来缩放。正弦是奇函数,因此我们具有有符号的函数,即,如果我们从第一端点逆时针旋转到第二端点,则我们得到正结果,并且如果我们从第一端点顺时针旋转到第二端点(具有标准轴),则我们得到负结果。
在步骤S312中使用第k个多边形的第e条边的2D叉积确定参数w之后,然后在步骤S314中,相交测试模块108的多边形测试单元114确定e=emax。换句话说,它确定是否已经为第k个多边形的所有边确定了w参数。如果不是,则所述方法转到步骤S316,其中参数e被递增,然后所述方法转回到步骤S312,使得可以为第k个多边形的下一个边确定参数w。如果在步骤S314中确定已经为第k个多边形的所有边确定了w参数(即,如果e=emax),则所述方法转到步骤S318。
在步骤S318中,相交测试模块108的多边形相交测试单元114基于为第k个多边形的边确定的w参数来确定光线是否与该多边形相交。例如,关于光线是否与第k个多边形相交的确定可以基于针对第k个多边形的边确定的w参数的符号。在一个示例中,如果针对第k个多边形的边确定的w参数都具有相同的符号,则确定光线与第k个多边形相交;而如果不是为第k个多边形的边确定的w参数都具有相同的符号,则确定光线不与凸多边形相交。这样,步骤S318包括使用针对凸多边形的边确定的参数来确定光线是否在凸多边形的边的内侧通过,其中如果确定光线在凸多边形的所有边的内侧通过,则确定光线与凸多边形相交,并且其中如果确定光线在凸多边形的一个或多个边的外侧通过,则确定光线不与凸多边形相交。
在一些示例中,一旦边测试指示光线在多边形的边的外侧通过,则可以确定光线不与多边形相交,而不必针对多边形的所有边的执行边测试。例如,在我们已经处理了至少2个边之后,如果对于多边形的边具有一个或多个确定的严格为正的w参数和一个或多个严格为负的w参数,则步骤S314可以被修改为还进行识别,并且在这种情况下,可以将多边形标记为“未命中”,而不为多边形的任何剩余边确定w参数。
此外,对于要确定的相交,以及w匹配的所有n符号,w的符号可能需要匹配某个预定值(例如,当背面剔除时),并且如果它们不匹配预定值,则可以丢弃多边形。例如,如果针对顺时针/逆时针图元或前向/背向图元启用剔除(例如,背面剔除),则一旦确定单个边测试结果,则可能丢弃所述图元。例如,如果逆时针图元正在被剔除,则具有在边左侧的交点的任何图元可以被丢弃,同样,如果顺时针图元正在被剔除,则具有在边右侧的交点的任何图元可以被丢弃。此外,在单批凸多边形内可以共享(可能具有相反的方向)许多边,并且在这种情形下,可以对每个唯一边测试一次,并且可以跨共享边的两个多边形复制(可能具有相反的符号)共享边的结果。
在一些示例中,具有零量值的一个或多个w参数的存在可以被视为特殊情况。例如,如果多边形的所有边的w参数具有非零量值,则可以确定光线仅在所有边具有它们的w参数的匹配符号(类似于如上所述)时才与第k个多边形相交,但是如果一个或多个w参数具有零量值,则仅在所有零量值w参数(对于非零投影长度的边)具有特定符号(例如,正号,或者在其他示例中为负号)并且具有非零w参数的所有剩余边具有相互一致的符号时才确定相交。在这些示例中,具有零量值的一个或多个w参数的符号不一定必须匹配具有非零量值的一个或多个w参数的符号以确定光线与多边形相交。这样,确定光线是否与凸多边形相交(在步骤S318中)包括:(i)确定凸多边形的具有零量值的任何边的所述有符号参数w具有特定符号(例如,在一些实例中为正,并且在其他实例中为负),以及(ii)确定凸多边形的具有非零量值的边的所述有符号参数w具有彼此一致的符号(虽然不一定与具有零量值的w参数的符号一致)。此外,在一些示例中,如果所有边生成具有零量值的w参数,则可以确定光线不与第k个多边形相交,这指示退化。换句话说,为了省略退化的多边形,如果凸多边形的所有边的2D叉积具有零的量值,则可以确定光线不与凸多边形相交。如果启用剔除,则可基于具有非零w参数的边的正负号而丢弃图元,如先前段落中所描述。此外,如上所述并且除了前一段,一旦具有非零w参数的任何一对边被确定为具有冲突符号,或者在一些示例中,一旦w参数被确定为具有零量值,则不必确定所有n w参数。在后一种情况下,如果w参数(对于非零投影长度的边)不具有必要的符号,则可以确定不发生相交。或者,对于非退化的严格凸多边形,如果恰好两个w参数(对于非零投影长度的边)都具有必要的符号(保证具有非零w参数的剩余边的符号一致性),则可确定确实发生相交,因为最多两个w参数(对于非零投影长度的边)的量值可为零(一个零w参数指示边相交,并且两个零w参数指示顶点相交)。在“符号相等性测试”中,零参数的一对相等符号(对于非零投影长度的边)同样确定相交,但此性质通常不可利用,因为具有零w参数的边在此相交测试中通常不被区分。后一种情况假定剔除还未被启用,因为这可能需要检查具有非零w参数的边之一的符号。
在一些示例中,边的有符号参数w等于边的2D叉积。在其他示例中,有符号参数w等于2D叉积乘以正常数(例如,1/2)。在其他示例中,有符号参数w等于2D叉积乘以负常数(例如,-1),但是在这种情况下,所有取向确定都是相反的。在图6所示的示例中,由顶点v0和v1定义的多边形204的第一边的2D叉积由f(v0,v1)=p0q1-q0p1给出,并且通过考虑图6可以理解,这是负的非零值。对于给定其缠绕(如图6中所示)而观察时具有顺时针取向的多边形,从(有向)边的角度,边的2D叉积的负非零值指示当光线在边的右侧通过时,光线可以在凸多边形的内侧通过,而从(有向)边的角度,边的2D叉积的正非零值指示当光线在边的左侧通过时,光线在凸多边形的外侧通过。相反,对于如所观察的具有逆时针取向的多边形(图6中未示出),从(有向)边的角度,边的2D叉积的负非零值指示当光线在边的右侧通过时,光线在凸多边形的外侧通过,而从(有向)边的角度,边的2D叉积的正非零值指示当光线在边的左侧通过时,光线可以在凸多边形的内侧通过。对于所观察的任一取向的多边形,边的2D叉积的零值指示光线与边,即与凸多边形的边界精确相交。f(v1,v2)=p1q2-q1p2给出了由顶点v1和v2定义的多边形204的第二边的2D叉积,并且通过考虑图6可以理解,这是负值,由此表示当光线在第二边的右边通过时,光线可以在凸多边形的内侧通过。f(v2,v0)=p2q0-q2p0给出了由顶点v2和v0定义的多边形204的第三边的2D叉积,并且通过考虑图6可以理解,这是负值,由此表示当光线在第三边的右边通过时,光线可以在凸多边形的内侧通过。检查了凸多边形204的所有三个边之后,基于2D叉积的w参数具有相同的符号(特别地,它们都是负的,指示如所观察到的顺时针取向),因此确定光线在多边形204的内侧通过并与其相交。可以看出,交点208在多边形204内。
f(v1,v3)=p1q3-q1p3给出了由顶点v1和v3定义的多边形206的第一边的2D叉积,并且通过考虑图6可以理解,这是负值。多边形206在给定其缠绕时具有顺时针取向,因此当光线在由顶点v1和v3定义的多边形206的第一边的右边通过时,光线可以在凸多边形的内侧上通过。f(v3,v2)=p3q2-q3p2给出了由顶点v3和v2定义的多边形206的第二边的2D叉积,并且通过考虑图6可以理解,这是负值,由此表示当光线在第二边的右边通过时,光线可以在凸多边形的内侧通过。f(v2,v1)=p2q1-q2p1给出了由顶点v2和v1定义的多边形206的第三边的2D叉积,并且通过考虑图6可以理解,这是正值,由此表示当光线在第三边的左边通过时,光线确实在凸多边形的外侧上通过。因此,对于多边形206的所有边,情况并不是基于2D叉积的w参数具有相同的符号。特别地,基于2D叉积的多边形206的第一和第二边的w参数是负的,而基于2D叉积的多边形206的第三边的w参数是正的。因此,确定光线不与多边形206相交,也不能建立一致的取向。可以看出,交点208在多边形206外侧。注意,对于有效的凸多边形,光线不可能在多边形的所有边的外侧通过(例如,对于如所观察的具有顺时针取向的多边形,光线不可能在多边形的所有边的左侧通过),因此如果对于多边形的所有边,基于2D叉积的w参数具有相同的符号,则这指示光线在所有边的内侧通过,使得光线被确定为与多边形相交(例如,如果对于具有顺时针取向的多边形的所有边的w参数具有相同的符号,则这指示光线在所有边的右侧通过)。还应当注意,对于有效的凸多边形和如所看到的逆时针取向,光线不可能在多边形的所有边的右边通过,因此如果基于2D叉积的w参数对于多边形的所有边具有相同的符号,则这指示光线在所有边的左边通过,使得光线被确定为与多边形相交。因此,可以推断出,对于未知取向的凸多边形,如果w参数对于多边形的所有边具有相同的符号,则其所观察到的取向由其边符号中的任何一个来指示。
在步骤S318之后,所述方法转到步骤S320,其中相交测试模块108的多边形测试单元114输出光线是否与第k个多边形相交的确定结果的指示。此指示可以是二进制指示(例如,一位标志),以指示光线相对于多边形的‘命中’或‘未命中’。在其他示例中,指示可以具有不同的形式。除了相交是否发生的指示之外,可以存在附加的输出属性,例如重心坐标、取向(顺时针/逆时针或前向/背向)和/或相交距离。
在步骤S322中,相交测试模块108的多边形测试单元114确定是否存在更多的多边形要测试。如果是,则所述方法转到步骤S324,其中参数k被递增,然后所述方法转回到步骤S310,使得可以对下一个多边形执行步骤S310到S320,以便确定光线是否与下一个多边形相交。当没有更多的多边形需要测试时,所述方法进行到步骤S326。步骤S326可以在步骤S322之前、之后或期间执行,即步骤S326可以在步骤S320之后执行,而不管是否存在更多的多边形要测试。
在步骤S326中,(例如,处理逻辑110)在光线跟踪系统100中使用输出的指示来渲染3D场景的图像。例如,除了光线与多边形相交的指示之外,在步骤S320中,相交测试模块108的多边形相交测试单元114还可以输出相交距离(即,光线原点与光线与多边形相交的点之间的距离)和光线与多边形相交的位置的指示(例如,在重心坐标中定义的),并且可以将该信息输出到处理逻辑110。在步骤S326中,处理所有相交测试仪输出属性以及其他外部属性,例如场景数据(例如,光源、立方体图)、实例数据、图元/多边形ID、顶点数据(例如,位置、法线、纹理坐标)、纹理地址、次级光线数据等,以确定颜色值和/或产生附加次级光线以供将来遍历。
如果在步骤S320中输出重心坐标,则可以使用确定光线相交的多边形的不同边的w参数的量值来确定重心坐标。例如,在多边形是具有顶点v0、v1和v2的三角形的情况下,对于光线在交点v处的相交,w值给出由顶点(v,v0,v1),(v,v1,v2)和(v,v2,v0)形成的子三角形的有符号面积的两倍,直到从光线空间投影开始的均匀的非零重新缩放。通过归一化这三个w权重(即,对它们求和并且除以总数)来找到重心坐标(其可以被称为“面坐标”),使得它们之和为1。特别地,归一化三个w权重因数以输出所有均匀的缩放。如上所述,所有非零权重对于一个交点具有相同的符号,因此它们的量值(而不是它们的有符号值)可以被归一化,这降低了浮点运算的复杂性,因为将已知为非负的三个值相加起来比将符号未知的三个值相加起来更简单。分别对应于边(v1,v2),(v2,v0)和(v0,v1)的合成重心坐标α,β和γ定义了光线与凸多边形ι=O+αv0+βv1+γv2的交点。最后,注意,由于重心按定义总计为一,因此仅需要输出三个值中的两个(尽管如上所述,必须计算所有三个权重以执行归一化)。
如果在步骤S320中输出了相交距离,则可以根据光线长度而不是实际的欧几里得距离来计算这些相交距离。例如,光线的长度可以除以
Figure BDA0003551170210000331
并且可以根据从光线原点的光线长度来确定相交距离。换句话说,计算τ值,其中ι=O+Dτ是光线与凸多边形的交点。该值可以根据相交等式Dτ=αv0+βv1+γv2使用重心坐标来确定。在一些示例中,根据等式
Figure BDA0003551170210000332
(通过将相交等式的两侧乘以投影矩阵获得),投影坐标s0、s1和s2(其中一般地s=A(Dxvx+Dyvy+Dzvz))可以用于确定τ。然后将重心内插坐标除以
Figure BDA0003551170210000333
以获得τ。例如,对于具有
Figure BDA0003551170210000334
的重新缩放的光线,并且对于其
Figure BDA0003551170210000335
Figure BDA0003551170210000336
的值已经被预先计算并且存储,可以计算方形的重新缩放的光线长度
Figure BDA0003551170210000337
然后可以确定τ为
Figure BDA0003551170210000338
这里我们看到,需要
Figure BDA0003551170210000339
来防止相交距离被Dz因数过度计算,并且促使以光线格式存储该数量。注意,如果我们不沿着光线的方向重新缩放光线(利用A=1),但是如果我们希望在剩余的投影操作中保留光线重新缩放的益处(例如,使得我们可以编码
Figure BDA00035511702100003310
以及Dx、Dy和Dz),则可以使用附加的存储),则不需要该附加的缩放因数。还应注意,在一个示例中,如果预先计算
Figure BDA00035511702100003311
Figure BDA00035511702100003312
则避免了重新缩放重心内插凸多边形坐标的需要,但这也将需要附加的存储。在其他示例中,相交等式的一个分量被用于确定τ,从而等效地确定Dxτ=αv0x+βv1x+γv2x、Dyτ=αv0y+βv1y+γv2y和Dzτ=αv0z+βv1z+γv2z。在
Figure BDA00035511702100003313
Figure BDA00035511702100003314
已经被预先计算并且存储的示例中,选择这三个选项中的最后一个通常是最有效的,使得可以通过将重心内插顶点z分量乘以预先计算的倒数来计算相交距离。如果采用互逆基(对于该互逆基,
Figure BDA00035511702100003315
以及
Figure BDA00035511702100003316
或其某些缩放比例可以被预先计算并且存储),则投影操作包括项
Figure BDA00035511702100003317
Figure BDA00035511702100003318
(其可以被认为是将坐标映射到“t”空间),或者可能,如在重新缩放的示例中,包括项
Figure BDA00035511702100003323
和vz(重新缩放的t空间)。由于我们可以写
Figure BDA00035511702100003320
Figure BDA00035511702100003321
所以可以确定相交距离,而不需要除比例值(投影计算中的特征)的重心内插之外的任何进一步计算,除非光线已经被重新缩放,在这种情况下,需要因数
Figure BDA00035511702100003322
如在一般的非倒数重新缩放的基的情况下。或者,如果例如生成经缩放的顶点分量(在t空间中)不方便,则重心内插结果可由
Figure BDA0003551170210000341
Figure BDA0003551170210000342
中的适当一个缩放(如果
Figure BDA0003551170210000343
Figure BDA0003551170210000344
已经被预先计算并且存储,则这可再次涉及由
Figure BDA0003551170210000345
进一步缩放)。无论哪种情况,缩放的和未缩放的互逆基数都提供了选择哪个轴应该用于内插的灵活性,如前所述,这允许选择对于给定凸多边形具有最有吸引力的误差特性的轴(例如,通过选择在整个凸多边形上具有最小范围的值的轴)。
在图3所示的示例中,在步骤S302中读取定义光线的数据和定义多边形的顶点的数据,然后在步骤S304中,选择性地置换和/或反转光线和定义多边形的顶点的x、y和z分量,使得Dz≥Dx≥0和Dz≥Dy≥0。然而,这两个步骤(步骤S302和S304)的部分的顺序在不同的示例中可以不同。例如,可以在获得数据之前选择性地置换和/或反转光线的x、y和z分量。在读入数据之前执行光线数据的x、y和z分量的这种选择性置换和/或反转是有用的,从而我们在读入数据之前知道Dz≥Dx≥0和Dz≥Dy≥0。这允许对光线数据执行一定的预先计算,并且预先计算的数据可以在被读入相交测试模块108中之前存储在存储装置(例如,光线跟踪单元102上的存储器)中。这意味着此预先计算中涉及的处理可以对光线执行一次,并且如果光线涉及多个相交测试,则多次使用。如上所述,由相交测试模块读取的预先计算的光线方向数据可以包括
Figure BDA0003551170210000346
和Dz
Figure BDA0003551170210000347
的值,
Figure BDA0003551170210000348
和Dz
Figure BDA0003551170210000349
的值,或
Figure BDA00035511702100003410
和Dz
Figure BDA00035511702100003411
的值,以便仅给出一些示例,而在其它示例中,可以预先计算和读取其它值,以便定义光线方向。与预先计算的光线数据一起,存储了指示置换的主轴的指示(例如,2位枚举)以及指示反转的光线方向分量的原始符号,使得当针对多边形顶点测试光线时可以将相同的预先计算应用于多边形顶点(并且如果适当的话,对取向确定进行后修改)。这里,(唯一的)开销是用于指示长轴的附加的2位,但是通过避免在每次针对光线测试多边形时找到光线方向的主分量,超过了这个(可忽略的)附加存储。
如上所述,如果光线与多边形的边上的点相交,则在相交测试过程中会出现问题。例如,如果光线与共享边上的点相交,或者如果光线与由多个多边形共享的封闭扇形的共享顶点相交,则为了使相交测试过程“严密”,多边形相交测试单元114在大多数情况下应当确定光线与多边形中的至少一个相交。为了使相交测试过程“非冗余严密”,多边形相交测试单元114在大多数情况下应当确定光线与多边形中的一个且仅一个相交。如上文详细描述的,“严密”和“非冗余严密”相交测试的含义的这些定义存在一些例外。如果相交测试过程不是严密的,则渲染误差可能被引入到渲染图像中,例如几何形状中的裂缝,这是不期望的。实现“严密”相交测试的一种方式是投影到光线相关平面(例如,由光线空间基向量P和Q给出)上,随后精确确定多边形(包括其边界)是否覆盖原点(例如,通过确定原点是否在每个边内侧或严格地在每个边上)。这不是“非冗余严密”相交测试,因为它导致所有多边形重叠,使得所有共享边被命中两次(或更多次),并且对于封闭扇形中的每个多边形,封闭扇形的所有共享顶点被命中一次。下面概述的示例被配置为去除该冗余。
在本文描述的一些示例中,平面顶点排序方案用于确保相交测试是“非冗余严密”。“平面顶点排序方案”在本文中可简称为“顶点排序方案”。平面顶点排序方案定义了2D投影顶点的通用排序,其独立于顶点的缠绕顺序(即,从定义凸多边形的有序顶点集合继承)。根据平面顶点排序方案的投影顶点的排序是完全严格的排序。这意味着,对于两个不同的投影顶点a和b,我们具有a<b或a>b。注意,不存在如对于该线那样的平面的“自然”总严格排序(即,与复数的算术运算一致)(即,与实数的算术运算一致)。根据平面顶点排序方案的投影顶点的排序定义了每个边的方向,而与从包括边的多边形的缠绕顺序继承的方向无关。缠绕顺序定义顶点的循环排序,即,在以下情况中并且仅在以下情况中的二元关系:vi<v(i+1(modn)),对于n=0,…,n-1。注意,这不是适当的排序,因为它不满足部分排序的所有公理,例如传递性,并且因此也不是像投影相关排序方案那样的总排序,而是在多边形的边上定义的并且用来确定它们的方向。另外,作为循环排序,其二元关系通过凸多边形的旋转来保持,并且通过凸多边形的反射来反转。在本文描述的示例中,并且在相交确定期间,当由平面顶点排序方案给出的边的方向与由多边形的缠绕次序给出的边的方向一致时,凸多边形的边可以被精确地认为是多边形的边界的一部分。
在示例平面顶点排序方案中,投影边的通用方向是从其具有最小p分量的顶点到其具有最大p分量的顶点,除非边的投影顶点具有相等的p分量,在这种情况下,投影边的方向是从其具有最小q分量的顶点到其具有最大q分量的顶点。为了在数学上更详细地说明这一点,2D边具有两个顶点(vi(具有分量pi和qi)和vj(具有分量pj和qj)),并且在平面顶点排序方案下,边从min(vi,vj)指向max(vi,vj),其中顶点被排序为使得如果pi<pj或如果(pi=pj且qi<qj),则vi<vj,否则vi>vj。换句话说,沿着一对轴(P和Q)的相应轴的具有分量pi和qi的第一投影顶点vi在沿着一对轴的相应轴的具有分量pi和qj的第二投影顶点vj之前,条件是pi<pj或条件是(pi=pj和qi<qj);而沿着一对轴的相应轴的具有分量pi和qi的第一投影顶点vi在沿着一对轴的相应轴的具有分量pi和qj的第二投影顶点vj之后,条件是pi>pj或条件是(pi=pj和qi>qj)。注意,任何非退化的投影凸多边形(即,具有非零投影面积)将具有至少三条带有非相等端点的边。因此,根据平面顶点排序方案,我们对于所有这样的边具有vi<vj或vj<vi,并且因此对于所有这样的边具有明确定义的方向。在非退化投影三角形多边形的具体示例中,根据平面顶点排序方案,我们将使所有三条边具有非相等的端点,并且因此所有三条边具有明确定义的方向。
当两个投影顶点具有相同的p和q分量时,则这意味着边是退化的(即,沿平行于光线方向的轴的相等分量),或者边是非退化的(即,沿平行于光线方向向量的轴具有不同的分量),并且光线沿凸多边形的边观看,即,其方向垂直于(平面)多边形的法线(达到投影的精度)。对于非退化的凸多边形(在非投影空间中,因此也在投影空间中),对于凸多边形的三个或更多个边,前一种情况一定不能发生。后一种情况意味着多边形相对于光线呈现为具有零投影面积的线,因此具有这种边的凸多边形总是退化的(在投影空间中)。这种退化(投影)的多边形可能被光线自由地遗漏。对于“严密”或“非冗余严密”相交测试仪的规则而言,不应用于这种退化的多边形是可接受的,只要当这些多边形被省略时它们确实适用。
平面顶点排序方案具有八个备选特征,从而给出八个备选的平局决胜行为对(对于顺时针和逆时针取向)。对于具有顺时针取向的凸多边形,本文所述的示例表现出“左上规则”,而对于具有逆时针取向的凸多边形,本文所述的示例表现出“右下规则”。其他实施例显示不同的平局决胜行为对。对于顺时针/逆时针取向的凸多边形,所展现的八个替代的平局决胜行为对是:
(i)vi<vj,条件是pi<pj或条件是(pi=pj且qi<qj)(如在此的主要示例中所述)→“左上/右下规则”
(ii)vi<vj,条件是pi<pj或条件是(pi=pj且qi>qj)→“右上/左下规则”
(iii)vi<vj,条件是pi>pj或条件是(pi=pj且qi<qj)→“左下/右上规则”
(iv)vi<vj,条件是pi>pj或条件是(pi=pj且qi>qj)→“右下/左上规则”
(v)vi<vj,条件是qi<qj或条件是(qi=qj且pi<pj)→“上左/下右规则”
(vi)vi<vj,条件是qi>qj或条件是(qi=qj且pi<pj)→“上右/下左规则”
(vii)vi<vj,条件是qi<qj或条件是(qi=qj且pi>pj)→“下左/上右规则”
(viii)vi<vj,条件是qi>qj或条件是(qi=qj且pi>pj)→“下右/上左规则”
上述术语指示在相交确定中哪些边被认为是凸多边形的边界的一部分。第一/第二平局决胜行为对应于当凸多边形在投影的2D空间中观察时具有明显的顺时针/逆时针取向时。由于边平局决胜行为取决于凸多边形的缠绕/取向,所以我们将其称为“缠绕/取向相关的”严密性方案。注意,对于具有相反取向的多边形,例如“左上规则”和“右下规则”,平局决胜行为颠倒。例如,术语“左上规则”表示从上方包围凸多边形或从左侧但精确垂直地包围凸多边形的所有边被认为是多边形边界的一部分,因此相交。由于投影是光线相关的,因此这些边平局决胜行为仅适用于单个光线,并且可以在光线之间改变,例如,当存在感知的取向和/或主轴的改变时。
在本文描述的示例中执行边测试的方式意味着“非冗余严密性”可以被认为等同于2D叉积的结果的反交换性,其中问题情况是(有符号的)零,对应于多边形边界交点。换句话说,当光线落在边或顶点(其中f=±0)上时,可能发生严密性问题。在这种情形下,我们想要返回仅仅一次命中。图7a和图7b示出了与在两个多边形702和704之间共享的边706上的点708相交的光线。图7a从光线的角度指示两个多边形的取向:多边形702和704都如所看到的那样顺时针出现,这是从它们的缠绕顺序继承的。图7a指示根据定义多边形702的有序顶点集合中的顶点的排序的多边形702的边的方向,用封闭的实心箭头指示。图7a指示根据定义多边形704的有序顶点集合中的顶点的排序的多边形704的边的方向,用空心箭头指示。图7b指示根据上述平面顶点排序方案的两个多边形的边的方向,其中一些与图7a中的缠绕顺序所给出的边的方向不同。在该示例中,共享边的多边形具有一致的边缠绕,即,两个凸多边形702和704共享具有端点{v1,v2}的边706,它们在一个多边形(例如,多边形702)中是有序的(v1,v2),但是在相邻的多边形(例如,多边形704)中是相反排序的(v2,v1),从定义多边形的有序顶点集合中的顶点的相应(一致)缠绕顺序继承而来。本文描述的示例以流形边为目标,即其中两个且仅两个多边形在共享边处相遇的情形,从而允许边的一致缠绕。注意,对于封闭流形网格(即,所有边被共享并且为流形),一致的边缠绕仅在可取向表面上是可实现的。对于共享轮廓边,并且假设一致的边缠绕,多边形的感知取向跨轮廓边(而不是多边形的缠绕)改变,使得多边形中的一个是前向的,并且多边形中的另一个是背向的。由两个多边形在其内部相交形成的隐式边,即不在多边形边界上的共享边或共享顶点处(即,自相交的“非简单”网格)被排除在“非冗余严密性”的应用之外,并且不需要返回仅用于实现“非冗余严密性”的单个命中。
在图7a和图7b所示的示例中,其中确定光线与多边形的边上的点相交,则基于由顶点排序方案(即,“平面顶点排序方案”)定义的定义边的投影顶点的排序是否与定义凸多边形的有序顶点集合中的顶点的排序(例如,从凸多边形的缠绕顺序继承)匹配来确定w参数。特别地,如果确定光线与多边形的边上的点相交,则基于从定义边的投影顶点的平面排序继承的边方向是否与从定义凸多边形的有序顶点集合中的顶点的缠绕顺序继承的边方向匹配,来确定多边形的边的w参数的符号,其中投影顶点的平面排序由平面顶点排序方案定义。如上所述,如果定义边的两个顶点的投影位置的2D叉积具有(±)零的量值,则确定光线与边上的点相交。如果光线与边(例如,由多边形702和704共享的边706)相交,则根据平面顶点排序方案来确定边的平面方向,并且该方向可以被称为“边的通用平面方向”(例如,如图7b中所见)。然后确定边是否具有从多边形的缠绕顺序继承的匹配缠绕方向。如果多边形具有一致的缠绕顺序(例如,如图7a所示,其中多边形702和704两者都具有如图所示的明显顺时针取向),则边将针对两个多边形中的每一个具有不同的缠绕方向:共享边的两个多边形中的一个将具有与边的通用平面方向匹配的缠绕方向,而另一个多边形将具有与边的通用平面方向不匹配的缠绕方向。多边形相交测试单元114确定光线与其边具有匹配的缠绕方向的多边形相交,并且确定光线不与其边不具有匹配的缠绕方向的多边形相交。
例如,如图7b所示,根据平面顶点排序方案由于p1<p2,顶点v1在顶点v2之前,因此根据顶点排序方案的边706的方向是从v1到v2。多边形702中的边的缠绕方向(如所看到的,其表现为顺时针取向)是从定义多边形702的有序顶点集合(v0,v1,v2)中的顶点v1和v2的缠绕排序继承而来,该缠绕方向根据平面顶点排序方案与投影顶点v1和v2的平面排序相匹配。因此,在图7a和图7b所示的示例中,确定光线与多边形702相交。相比之下,多边形704中的边的缠绕方向(如所看到的,其也表现为顺时针取向),从定义多边形704的有序顶点集合(v1,v3,v2)中的顶点v2和v1的缠绕顺序继承而来,根据平面顶点排序方案,不匹配投影顶点v1和v2的平面排序。因此,在图7a和图7b所示的示例中,确定光线不与多边形704相交。总之,当光线与共享边706相交时,确定与多边形702中的一个且仅一个相交,并且因此在该示例中确保“非冗余严密性”。
图4和5示出了用于执行确定w数以指示光线在第k个多边形的第e条边的哪一边通过的步骤S312的两个示例。在图4所示的第一示例(其可以被称为“边方向边上检查(edgedirection on-edge check)”方法)中,步骤S312包括步骤S402,其中相交测试模块108的多边形相交测试单元114为由投影顶点vi和vj定义的第e条边确定2D叉积f(vi,vj)=piqj-qipj,所述投影顶点在定义第k个多边形的有序顶点集合中以它们的顺序给出。
在步骤S404中,多边形相交测试单元114确定是否f(vi,vj)=±0。如果确定f(vi,vj)≠±0,则这表示光线不与第e条边上的点相交,然后在步骤S406中,参数w被设定为等于2D叉积,即w=f(vi,vj)。这样,如果确定光线未与边上的点相交,则确定第e条边的w参数的符号与f(vi,vj)的符号相同。然后,所述方法进行到步骤S314。
然而,如果在步骤S404中确定f(vi,vj)=±0,则这指示光线确实与第一条边上的点相交,并且然后在步骤S408中,根据平面顶点排序方案,基于定义边的投影顶点的平面排序来设置参数w。特别地,所述参数被确定为
Figure BDA0003551170210000381
换句话说,w参数的量值被设置为零,并且w参数的符号被确定为
Figure BDA0003551170210000382
的符号,其中如果根据平面顶点排序方案投影顶点vi在投影顶点vj之前,则vi<vj=1,并且其中如果根据平面顶点排序方案投影顶点vj在投影顶点vi之前,则vi<vj=0(注意,由于不需要应用严密性标准,所以可以为退化投影多边形分配任一符号,其中vi=vj)。
Figure BDA0003551170210000383
给出了w的另一种等效表达。w的替代但不等效表达由
Figure BDA0003551170210000391
Figure BDA0003551170210000392
给出,其表现出相反的行为。然后,所述方法进行到步骤S314。
为了使图4中所示的示例方法可靠,例如为了保证封闭扇形的共享边和共享顶点的至少“严密”行为,当f(vi,vj)≠±0时,2D叉积函数f的特定实现必须是符号精确的。特别地,2D叉积函数f是反交换的,因此sgn(f(vi,vj))=!sgn(f(vj,vi)),对于所有f(vi,vj)≠±0和任何符号精确的实现必须共享这个导出的特性。此外,该属性指示f的实现的符号对于共享边的一个多边形仅可计算一次,并且然后否定的结果可用于共享边的另一多边形(假设一致缠绕)。期望将f实现为对于f≠±0符号精确的是合理的,因为它等效于正确地确定对所有的piqj≠qipj是piqj<qipj(负)还是piqj>qipj(正)。此外,对于“边方向边上检查”方法,2D叉积f的实现的核必须匹配2D叉积f的核,即,由每个函数映射到±0的输入值(限制为可表示的浮点)的集合必须匹配。这可以通过使用具有完全扩展的中间值的f的实现以及对结果进行RAZ(远离零舍入)舍入的一个实例,或者通过使用扩展范围输出来实现。除了在零之外,w的量值对于图4所示的示例性方法在保证“严密性”或“非冗余严密性”方面不起作用。然而,如果f的实现共享f的完全反交换律,即f(vi,vj)=-f(vj,vi),对于所有f(vi,vj)≠±0,则对于共享边的一个多边形,f的实现的结果(符号和量值)仅可计算一次,然后求反的结果可用于共享边的另一个多边形(假设一致缠绕)。
注意,IEEE单精度浮点格式为正和负零(分别以零或一开始的所有零)分配编码。2D叉积函数f的实现可以生成-0来代替+0,但是这将是特定于实现的。在硬件中,中间值的精度可以被扩展(隐含地或明确地)以适应更大的值范围。显然,在给定四个32位浮点作为输入的情况下,piqj-qipj可以生成在8位指数和23位尾数范围之外的值。如果给定这一点,如果要以32位输出结果,则执行一些舍入。如果两个与非零结果w最接近的可表示值中的一个是0,则w可以总是舍入为+0(通常认为表示传统的无符号0)或者有时(或总是)舍入为-0。在其它实例中,w的符号可用于确定舍入:如果到非零w的两个最接近的代表值中的一者为0且w为正,则w通常可舍入为+0,并且其它时间可舍入为-0。如果到非零w的两个最接近的可表示值中的一个是0,并且w是负的,则w通常可以舍入为-0,而其它时间舍入为+0。如果在所有这些情况下,非零w的符号与它被舍入到的0的符号匹配,则这被称为“符号精确舍入”。或者,在非零w将舍入为+0的情况下,其可改为舍入为最小可表示的正浮点值(例如,当舍入远离零时),并且在非零w将舍入为-0的情况下,其可改为舍入为最大可表示的负浮点值(例如,当舍入远离零时)。如果w恰好为0,则通常期望将其编码为+0,但是有时(或总是)可以将其编码为-0。参考图4描述的方法,即“边方向边上检查”,不需要2D叉积函数f在恰好为零的结果的符号中一致,而是在步骤S408中覆盖该符号。
在图7a和图7b所示的示例中,根据平面顶点排序方案v1<v2。在多边形702中,边706由有序顶点v1和v2,即vi=v1和vj=v2定义,因此对于多边形702中的边706w被赋予负号。这是因为在这种情况下,
Figure BDA0003551170210000401
然而,在多边形704中,边706由有序顶点v2和v1,即vi=v2和vj=v1定义,因此对于多边形704中的边706w被赋予正号。这是因为在这种情况下,
Figure BDA0003551170210000402
Figure BDA0003551170210000403
在图5所示的第二示例(其可以被称为“全边排序(full edge sorting)”方法)中,步骤S312包括步骤S502,其中相交测试模块108的多边形相交测试单元114确定具有第e条边的排序的输入顶点f(max(vi,vj),min(vi,vj))的2D叉积的实现,其由定义第k个多边形的投影顶点vi和vj定义。定义边的两个投影顶点vi和vj以由平面顶点排序方案定义的顺序被提供给2D叉积函数f的实现。特别地,如果根据平面顶点排序方案投影顶点vi在投影顶点vj之前(即,如果vi<vj),则max(vi,vj)=vj并且min(vi,vj)=vi;而如果根据平面顶点排序方案投影顶点vi在投影顶点vj之后(即,如果vi>vj),则max(vi,vj)=vi并且min(vi,vj)=vj。通过平面排序方案对输入顶点进行排序,2D叉积f仅在四维域的一半上定义,这可能为利用该特性的任何实现提供面积节省。此外,通过对输入顶点进行排序,显然,该表达式的结果对于每个共享边仅能被计算一次,然后可以在共享边的所有多边形上重复。
在步骤S504中,w参数被确定为
Figure BDA0003551170210000404
更一般地,边的有符号参数w的符号被确定为与
Figure BDA0003551170210000405
的符号相同,因为w的量值在“严密性”或“非冗余严密性”的确定中不起作用。
Figure BDA0003551170210000406
给出了反转f的核上的符号但固定f的核的符号的w的替代表达式。
Figure BDA0003551170210000407
给出了反转f的核的上面或核外的符号的w的替代表达式。
Figure BDA0003551170210000408
给出了固定f的核上的符号而反转f的核外的符号的w的替代表达式。然后,所述方法进行到步骤S314。
如果交换顶点的顺序反转f的符号,则二进制函数f是反交换的。图5所示的“全边排序”方法解除了2D叉积函数f的实现是反交换的限制,同时仍然确保w参数是反交换的,因此,对于共享边的一个多边形,该表达式的结果可以仅被计算一次,然后,取反的结果可以用于共享边的另一个多边形(假设一致缠绕)。而且,f的实现仅需要在域vi>vj上是符号准确的,并且进一步地,不需要匹配f的核,从而提升了对“边检查边上方法(Edge check on-edge method)”的附加限制。尽管f的实现不需要匹配f的核,但是对于f映射到零的值,它必须在符号上一致,即,全部为正或者全部为负。
在图7a和图7b所示的实例中,根据平面顶点排序方案v1<v2,使得max(v1,v2)=v2和min(v1,v2)=v1。因此,f(max(v1,v2),min(v1,v2))=f(v2,v1).在多边形702中,边706由有序顶点v1和v2,即vi=v1和vj=v2定义,因此对于多边形702中的边706w=(-1)1·f(v2,v1)=-f(v2,v1)。然而,在多边形704中,边706由有序顶点v2和v1,即vi=v2和vj=v1定义,因此对于多边形702中的边706w=(-1)0·f(v2,v1)=+f(v2,v1)。因此可以看出,对于多边形702和704,边706的w参数的符号是不同的,使得将确定光线与多边形702和704中的一个(并且仅一个)相交,即与702相交,从而确保当光线与共享边706相交时的“非冗余严密性”。
当至少一个顶点是用于定义两个或更多个凸多边形的共享顶点时,例如在封闭扇形中,确保“非冗余的严密性”是特别的问题。本文描述的方法确保了在相交测试中的“非冗余严密性”,对于两个或更多个(例如,恰好两个)凸多边形,当确定光线与这些凸多边形之一的边上的点相交时:在图7a和图7b所示的示例中,光线与沿着由两个多边形共享的边的内部的某处的点相交。在图8a和图8b所示的示例中,光线与边末端上的点相交,在这种情况下,顶点由形成封闭扇形的多个(例如五个)多边形共享。特别地,图8a和图8b示出了与在五个多边形802、804、806、808和810之间共享的顶点v2,相交的光线。图8a指示五个多边形的缠绕顺序,如所观察的它们的顺时针取向所示。图8a指示根据定义多边形802的有序顶点集合中的顶点的排序的多边形802的边的方向,用封闭的实心箭头指示。图8a指示根据定义多边形804的有序顶点集合中的顶点的排序的多边形804的边的方向,用开放的箭头指示。图8a指示根据定义多边形806的有序顶点集合中的顶点的排序的多边形806的边的方向,用封闭的空心箭头指示。图8a指示根据定义多边形808的有序顶点集合中的顶点的排序的多边形808的边的方向,用封闭的实心箭头指示。图8a指示根据定义多边形810的有序顶点集合中的顶点的排序的多边形810的边的方向,用开放的箭头指示。图8b指示根据上文所提及的平面顶点排序方案的五个多边形的边的方向。当确定哪个凸多边形被与封闭扇形的共享顶点精确相交的光线命中时,相交测试模块108的多边形相交测试单元(一个或多个)114确定哪个多边形具有两个边,这两个边都以共享顶点作为端点,其平面方向(根据平面顶点排序方案)都与其缠绕方向(根据由定义多边形的有序顶点集合给出的缠绕顺序)匹配。将有一个(并且仅有一个)这样的多边形,只要这些多边形具有一致的缠绕,形成(简单的、流形)封闭的扇形,并且不是轮廓的一部分。实际上,由这种(非重叠)凸多边形的封闭扇形所共享的顶点由在共享顶点处相交的边的端点定义(在平面中)。因此,假设多边形具有一致的缠绕,则将存在封闭扇形的一个且仅一个多边形,该封闭扇形具有根据其缠绕顺序的三个有序顶点,包括作为中间顶点的共享顶点,其排序匹配平面排序方案的排序。根据呈现左上/右下平局决胜行为对的平面排序,直接在共享顶点下方(或者在精确垂直边的情况下在下方和右方)的多边形(例如810)以顺时针情况相交,并且直接在共享顶点上方(或者在精确垂直边的情况下在上方和左方)的多边形(例如804)以逆时针情况相交。在图8a和图8b中,多边形810具有用于其两个边的匹配方向,这两个边涉及共享顶点v2。对于多边形802、804、806和808中的任何一个都不是这种情况。因此,确定光线与多边形810相交,而不与多边形802、804、806或808中的任何一个相交。
例如,在以上参考图4描述的示例“边方向边上检查”方法中,对于多边形810,在步骤S408中,由投影顶点v0和v2定义的边的w参数将被确定为w=(-1)1·(+0),其具有负号;并且在步骤S408中,由投影顶点v2和v3定义的边的w参数将被确定为w=(-1)1·(+0),其具有负号。在步骤S406中,由投影顶点v3和v0定义的边的w参数将被确定为w=f(v3,v0)=p3q0-q3p0,其将是负值(如在图8a中通过考虑边v3和v0的缠绕方向,引起相对于原点的顺时针循环可以看出的)。根据顶点排序方案,由于我们已经识别了一对相交的边(零量值w),这对边都具有负号(即,使得平面顺序与缠绕顺序匹配),所以确定光线与多边形810相交,并且由于剩余的非零w参数是负的,所以多边形810具有如图所示的顺时针取向。在其他示例中,与顶点排序方案相反,可以替换地确定,由于多边形810的所有边的w参数都是负的,因此确定光线与多边形810相交,并且因此还确定它具有如所查看的顺时针取向。
注意,其他多边形802至808中没有一个将具有w参数,其被确定为使得一对相交的边都具有负号(和零量值),或者作为直接推论,所有边都具有相同的符号。例如,对于多边形802,在步骤S408中,由投影顶点v1和v2定义的边的w参数将被确定为w=(-1)1·(+0),其具有负号;而在步骤S408中,由投影顶点v2和v0定义的边的w参数将被确定为w=(-1)0·(+0),其具有正号,其既不是负的也不与由投影顶点v1和v2定义的边的w参数具有相同的符号。为了简洁,我们在此将不描述多边形804到808的所有计算,因为现在应当清楚,它们将不用每个相交边的两个负号或所有它们的边具有相同的符号来确定w参数。因此,将不会确定光线与多边形802、804、806或808中的任何一个相交。
注意,顶点排序方案和对所有边的符号一致性的替代检查产生了对于具有如图所示的顺时针取向的多边形的等效结果。也就是说,相交的顺时针多边形生成负w参数,因此正相交结果在相交的边以及所有剩余的边上都是负的。然而,逆时针多边形生成正w参数,使得在顶点排序方案的情况下,正相交结果在相交边上保持负号,但是在剩余边上保持正号,而符号相等性测试要求相交边和剩余边都具有正号。参照图8a和图8b,如果所有三角形以相反的缠绕顺序指定,使得它们具有如图所示的逆时针取向,则每个w参数的符号被反转。这意味着,在多边形804中,由投影顶点v1和v2定义的边的w参数在步骤S408中将被确定为w=(-1)1·(+0),其具有负号,并且由投影顶点v2和v4定义的边的w参数也将被确定为w=(-1)1·(+0)。在步骤S406中,由投影顶点v4和v1定义的边的w参数将被确定为w=p4q1-q4p1,其将是正值(因为缠绕是逆时针的)。如果使用顶点排序方案,则将确定多边形804是(唯一)相交的多边形(因为所有相交的边都具有负号),而如果使用符号相等,则将确定多边形804不被相交。当所有w参数符号被反转时,将替代地确定多边形810再次相交(因为反转不影响相等性),而与取向无关。因此,我们将符号相等性测试(没有进一步的定义)称为缠绕无关方案,而将顶点排序方案称为缠绕相关方案。
在以上参考图5描述的第二示例“全边排序”方法中,对于多边形802,在步骤S504中,由投影顶点v1和v2定义的边的w参数将被确定为
Figure BDA0003551170210000431
并且在步骤S504中,由投影顶点v2和v0定义的边的w参数将被确定为w=+f(v2,v0)=±a20,并且在步骤S504中,由投影顶点v0和v1定义的边的w参数被确定为w=-f(v1,v0)=-(+a10)=-a10。类似地,对于多边形804,在步骤S504中,由投影顶点v2和v1定义的边的w参数将被确定为w=+f(v2,v1)=±a21,并且在步骤S504中,由投影顶点v4和v2定义的边的w参数将被确定为w=+f(v4,v2)=±a42,并且在步骤S504中,由投影顶点v1和v4定义的边的w参数被确定为w=-f(v4,v1)=-(+a41)=-a41。对于多边形806,在步骤S504中,由投影顶点v2和v4定义的边的w参数将被确定为
Figure BDA0003551170210000432
并且在步骤S504中,由投影顶点v5和v2定义的边的w参数将被确定为w=+f(v5,v2)=±a52,并且在步骤S504中,由投影顶点v4和v5定义的边的w参数被确定为w=-f(v5,v4)=-(+a54)=-a54=-(+a54)=-a54。)。对于多边形808,在步骤S504中,由投影顶点v2和v5定义的边的w参数将被确定为
Figure BDA0003551170210000433
并且在步骤S504中,由投影顶点v3和v2定义的边的w参数将被确定为w=+f(v3,v2)=±a32,并且在步骤S504中,由投影顶点v5和v3定义的边的w参数被确定为w=+f(v5,v3)=+(-a53)=-a53。对于多边形810,在步骤S504中,由投影顶点v2和v3定义的边的w参数将被确定为
Figure BDA0003551170210000434
并且在步骤S504中,由投影顶点v0和v2定义的边的w参数将被确定为
Figure BDA0003551170210000435
并且在步骤S504中,由投影顶点v3和v0定义的边的w参数被确定为w=+f(v3,v0)=+(-a30)=-a30。在上述示例中a21,a20,a10,a42,a41,a52,a54,a32,a53和a30都是非负值,并且由于实现2D叉积的所有输入对都在f核中,所以符号指示符±和
Figure BDA0003551170210000436
是一致的,即它们在所有实例中分别返回符号+和-或者在所有实例中分别返回符号-和+。这样,多边形810是被确定为与针对相应符号+和-的光线相交的一个(并且仅一个)多边形,或者多边形804是被确定为与针对相应符号-和+的光线相交的一个(并且仅一个)多边形,在任一情况下产生w的三个负值(也指示如所观察的顺时针取向)。
参考图9所示的流程图描述了在步骤S312中确定第k个多边形的第e条边的w参数的另一示例方法(可以称为“端点符号/零边上检查”方法)。图9中所示的步骤S902、S904和S906与图4中所示的步骤S402、S404和S406相同。对于“端点符号/零边上检查”,提交给相交测试单元114的多边形被假定为严格凸多边形。
因此,在步骤S902中,相交测试模块108的多边形相交测试单元114确定由投影顶点vi和vj定义的第h边的2D叉积f(vi,vj)=piqj-qipj的实施方式,所述投影顶点根据定义第k个多边形的有序顶点集合中的顶点的缠绕顺序排序。在步骤S904中,多边形相交测试单元114确定是否f(vi,vj)=±0。如果确定f(vi,vj)≠±0,则这表示光线不应与第e条边上的点相交,然后在步骤S906中,参数w被设定为等于2D叉积,即w=f(vi,vj)。这样,如果确定光线不应与边上的点相交,则确定第e条边的w参数的符号与f(vi,vj)的符号相同。然后,所述方法进行到步骤S314。对于参考图9描述的方案,我们对“2D叉积”f的实现进行新的假设:(i)我们假设它是准确离开f的核的符号,例如,如果它共享“2D叉积”f的反交换律,以及(ii)我们假设我们具有以下两种类型的实现之一:任何实现:其中“2D叉积”的实现的核等于f的核的任何近似(例如,通过从零舍入或使用扩展范围输出),表示为“从零舍入”(RAZ)类型,或者任何实现:其中“2D叉积”的实现的核是f的核的严格超集的任何近似(例如,其中存在舍入下溢到零的某一实例),表示为“向零舍入”(RTZ)类型。特别地,假设如果f输出零,则任何近似于其的实现也将输出零,这不是困难的要求。
然而,如果在步骤S904中确定f(vi,vj)=±0,则这指示光线可能与第e条边上的点相交,并且然后在步骤S908到S912中使用包括查找表(LUT)和/或逻辑阵列的模块来确定参数w的符号。在本文描述的示例中,包括查找表和/或逻辑阵列的模块在相交测试模块108上被实现为固定功能硬件中的预先配置的逻辑块(例如,作为多边形测试单元114的一部分)。可以认为本文所述的查找表和/或逻辑阵列的功能一般适用于包括查找表和/或逻辑阵列的“模块”。查找表和/或逻辑阵列被配置为将pi,qi,pj和qj坐标中的每一个分类为负的、(±)零或正的(例如,为“三进制数位”)三分法的指示作为其输入,并且对于pi,qi,pj和qj坐标的分类的有效组合,输出有符号参数w的符号的指示(例如,为位)。查找表或逻辑阵列还可被配置为将f的符号指示和“下溢标志”的布尔状态作为两个其他输入位。
查找表和/或逻辑阵列用输入三进制数位pi,qi,pj和qj(可能还有输入位sgn(f)和下溢标志的布尔状态)对函数建模,以提供指示w的符号的输出位。存在281(或2324)个这样的函数。这可以以第一种方式通过查找表来实现,例如明确列出81(或324)比特值并使用输入作为查找索引/参考值。这将使用数据存储中的至少10(或40)字节的原始存储(例如,硬编码在软件中或寄存器在硬件中)。注意,查找表被减小到其量值的四分之一,而不添加另外两个输入。或者,这可以通过“逻辑阵列”以第二种方式实现,例如软件中的逻辑操作或硬件中的逻辑门的配置,执行期望的映射。该问题的对称性连同少量的“无关”输出一起允许减少逻辑门的数量。这两种实现(查找表和逻辑阵列实现)的某种混合也是可能的,例如,使用某种预处理或后处理逻辑来利用问题的对称性的减小尺寸的LUT。任一实现方式都可以提供优于另一实现方式的功率或面积增益,这取决于具体的体系结构,其中第一种方式(LUT实现方式)通常可以更适合于软件,而第二种方式(逻辑阵列实现方式)通常可以更适合于硬件。
在步骤S908中,多边形测试单元114将定义第e条边的顶点vi和vj的pi,qi,pj和qj坐标中的每一个分类为:(i)负,(ii)(±)零,或(iii)正。注意,为了被分类为负或正,坐标是非零的。换句话说,为了坐标的这种分类,(±)零被认为是非负的和非正的。在坐标是浮点格式的情况下,并且如果已排除或冲洗次正规数,则可检查坐标的指数(例如,全零)以确定坐标是否为零(不管符号位如何),并且如果坐标不为零,则可检查坐标的符号位以确定其为负还是正。这些是例如在固定功能硬件中执行的非常简单的测试。如果支持次正规数,则可检查有效数(例如,全零)以及指数,以确定坐标是否为零。
在步骤S910中,坐标分类的指示被输入到查找表或逻辑阵列。例如,分类的指示可以被认为用作索引或参考值,以从查找表中查找一段数据(即w的符号)或使用逻辑阵列确定w的符号。
在步骤S912中,(一个或多个)多边形测试单元114接收来自查找表或逻辑阵列的输出,该输出指示用于边的w参数的符号。然后,所述方法转到步骤S314,并如上所述继续。
使用查找表或逻辑阵列使得w参数的符号的确定非常快地实现,因此可以以非常低的等待时间和非常低的功耗来执行步骤S908到S912。少量的预先配置的逻辑可以用于实现查找表或逻辑阵列,因此少量的硅面积可以用于以硬件实现查找表或逻辑阵列,但是该面积将非常小,因为由查找表或逻辑阵列执行的操作在硬件中实现起来简单。
此外,查找表或逻辑阵列被配置为使得如果定义边的两个投影顶点的顺序被反转,则从查找表或逻辑阵列输出的有符号参数的符号的指示被反转。这确保了相交测试对于具有一致的缠绕顺序的多边形的非轮廓共享边是“非冗余严密”。在本文描述的示例中,该功能被硬编码到查找表或逻辑阵列中。
如上所述,如果定义边的两个投影顶点的位置的2D叉积f(vi,vj)=piqj-qipj的实现具有零的量值,则确定光线与边上的点相交。
对于“端点符号/零在边上检查”,当f(vi,vj)=piqj-qipj=±0时,并且为了确定“非冗余严密性”的平局决胜行为,所述方法考虑如果定义边的两个投影顶点的位置被ε=(εp,εq)扰动,2D叉积将是什么,如图10所示。这种扰动表明,定义边的第一投影顶点vi的位置将具有沿着光线坐标系的一对轴的相应轴(P和Q)的坐标(pip)和(qiq),并且定义边的第二投影顶点vj的位置将具有沿着光线坐标系的一对轴的相应轴(P和Q)的坐标(pjp)和(qjq)。被考虑的扰动将是微小的,但是它将足够大(即,被认为非零),并且在这样的陡峭角度下,不能共享可表示边,以移动通过原点的边的顶点,使得边将不再通过原点(使得光线将不再与边相交)。而且,所考虑的扰动将足够小(即,通过被认为小于任何可表示的向量)以不移动不穿过原点的边的顶点,使得边然后将穿过原点(使得光线将与边相交)。因此,考虑到这一点,光线不可能与边(包括其端点)精确相交。因此,对于两个共享边建立了平局决胜的行为,其中共享边的两个多边形中的一个(并且仅一个)的内部将覆盖原点,并且对于共享顶点,其中假设是封闭扇形,则共享顶点的多个多边形中的一个(并且仅一个)的内部将覆盖原点。对于上述要保持的假设,假设值εq将被认为大于零但小于任何正的实数值,并且假设值εp将被认为大于零但小于任何包括实数和εq的正的有理表达式。
“端点sgn零检查”方法具有给出八个备选边平局决胜行为的八个备选特征。这里描述的示例展示了“右上规则”。其他实施例显示不同的平局决胜行为对。所展示的八个备选的平局决胜行为对为:
(i)0<εp<<εq(如在此的主要示例中详细描述的)→“右上规则”
(ii)εp<0<|εp|<<εq→“左上规则”
(iii)εq<0<εp<<|εq|→“右下规则”
(iv)εq<<εp<0→“左下规则”
(v)0<εq<<εp→“上右规则”
(vi)εq<0<|εq|<<εp→“上左规则”
(vii)εp<0<εq<<|εp|→“下右规则”
(viii)εp<<εq<0→“下左规则”
上述术语指示在相交确定中哪些边被认为是凸多边形的边界的一部分,而不管在投影的2D空间中观察到的凸多边形的表观取向。由于边平局决胜行为不依赖于凸多边形的缠绕/取向,因此我们将其称为“缠绕/取向独立性”严密性方案。例如,术语“左上规则”表示从上方包围凸多边形或从左侧但精确垂直地包围凸多边形的所有边被认为是多边形边界的一部分,因此相交。由于投影是光线相关的,因此这些边平局决胜行为仅适用于单个光线,并且可以在光线之间改变,例如,当存在感知的取向和/或主轴的改变时。
利用这种扰动,2D叉积函数变为:
f(vi,vj)=(pip)(qjq)-(qiq)(pjp)=piqj-qipj+piεqpqj-qiεpqpj (1)
对于pi,qi,pj和qj的所有有效组合和分类,查找表被配置为组合输出有符号参数w的符号的指示。在一些示例中,例如,对于RAZ实现类型,查找表或逻辑阵列被配置为输出:(i)对于pi,qi,pj和qj坐标的分类的一些有效组合,有符号参数w的符号作为pi,qi,pj或qj的符号或与该符号相反,和(ii)对于pi,qi,pj和qj坐标的分类的一些有效组合,有符号参数w的符号作为任何值。在一些其它示例中,例如,对于RTZ实现类型,查找表或逻辑阵列被配置为进一步输出:(iii)对于pi,qi,pj和qj坐标的分类的一些有效组合,有符号参数w的符号作为pi,qi,pj或qj中两个的乘积的符号或与该符号相反,和(iv)对于pi,qi,pj和qj坐标的分类的一种或多种其他有效组合,有符号参数w的作为2D叉积f的实现的符号。另外,在一些其它实例中,例如,对于RTZ实施类型,“下溢旗标”用以确定(i)、(ii)、(iii)或(iv)中的哪一者被配置为作为输出。
例如,当确定用于确定w参数的2D叉积函数时,多边形相交测试单元114可以根据“远离零舍入”(RAZ)实现类型操作,确保2D叉积的实现的核匹配f的核。当使用RAZ实现类型时,查找表可以被配置为针对f可以被确定为零的pi,qi,pj和qj坐标的分类的所有有效组合,输出有符号参数w的符号的指示。特别地,当使用RAZ舍入模式时,则在步骤S904中确定f(vi,vj)=piqj-qipj=±0是否且仅当2D叉积的值真的为零时,而不是因为2D叉积的非零值已经通过实现近似为零。因此,在这种情况下,等式(1)变为:
f(vi,vj)=piεqpqj-qiεpqpj (2)
图11a到图111示出了光线与RAZ类型中的严格凸多边形的边相交的可能情形,并且还示出了查找表或逻辑阵列被配置为对于不同情形输出w参数的符号,如从等式(2)的形式导出的。
图11a至图111示出了P和Q轴的位置以及与P和Q轴的原点相交的(未扰动的)边。每条边由连接定义边的顶点vi至vj的线示出,其中箭头指向从vi至vj的方向,该线是从包括边的严格凸多边形的缠绕顺序继承而来的。实际顶点vi和vj在图11a至图11l中未标出。图11a至图11l还示出了如果边被ε=(εp,εq)扰动,原点1102相对于边的夸大位置,即原点被相反的扰动-ε=(-εp,-εq)移动,并且可以看出如果施加扰动,则边将不再与原点1102相交。
在图11a中,第一顶点vi的坐标都不为零,即pi≠0和qi≠0,而第二投影顶点vj位于原点,即pj=qj=0。图11a示出了四种类型的边,其落入pi和qi符号的四种可能组合的类别中。在该示例中,等式(2)变为f(vi,vj)=piεq-qiεp,所以由于0<εp<<εq,所以f的符号将是pi的符号。这样,在该示例中,w参数的符号被设置为等于pi的符号。图11i示出了与图11a所示的情形相反的双重情况,即相反的情况,其中w参数的符号被设置为与pj的符号相反。双重情况表明了当切换输入投影顶点的顺序时,例如在p和q的下标中用j交换i的每个实例,否定结果的符号时,平局决胜行为的反交换律。
在图11b中,第一顶点vi在Q轴上,但不在原点,即pi=0和qi≠0,第二投影顶点vj在原点,即pj=qj=0。图11b示出了落入该类别的两种类型的边,用于qi的两个可能符号。在该示例中,等式(2)变为f(vi,vj)=-qiεp,因此f的符号将与qi的符号相反。这样,在该示例中,w参数的符号被设置为与qi的符号相反。图11f示出了与图11b所示的情形相反的双重情况,即相反的情况,其中w参数的符号被设置为qj的符号。
在图11c中,顶点vi和vj都在Q轴上,而不是在原点,即pi=0,qi≠0,pj=0和qj≠0。由于对于严格凸多边形,仅当(未受扰动的)边通过原点时才能出现有效相交(即,对于图11k中所示的边,不能出现与严格凸多边形的相交),则边必须与P相交,因此在该示例中qi和qj必须具有相反的符号。图11c示出了对于qi和qj符号的两个有效组合,落入该类别的两种类型的边。在该示例中,等式(2)变为f(vi,vj)=εpqj-qiεp=εp(qj-qi)。由于qi和qj的符号相反,(qj-qi)的符号与qj的符号相同,与qi的符号相反。因此,f的符号将是与qi的符号相反的qj的符号。这样,在该示例中,w参数的符号被设置为qj的符号或qi的符号的相反符号。图11c所示的情形是其本身的双重情况,即其本身的相反情况,因为qj的符号等于qi的符号的相反符号
在图11d中,第一顶点vi在P轴上,但不在原点,即pi≠0和qi=0,第二投影顶点vj在原点,即pj=qj=0。图11d示出了落入该类别的两种类型的边,用于pi的两个可能符号。在该示例中,等式(2)变为f(vi,vj)=piεq,因此f的符号将是pi的符号。这样,在该示例中,w参数的符号被设置为pi的符号。图11h示出了与图11d所示的情形相反的双重情况,即相反情况,其中w参数的符号被设置为与pj的符号相反。
在图11e中,第一顶点vi的坐标都不为零,即pi≠0和qi≠0,并且第二顶点vj的坐标都不为零,即pj≠0和qj≠0。由于对于严格凸多边形,仅当(未受扰动的)边通过原点时才能出现有效相交(即,对于图11j中所示的边,不能出现与严格凸多边形的相交),则边必须与P相交,因此在该示例中qi和qj必须具有相反的符号,并且边必须与Q轴相交,因此在该示例中pi和pj也必须具有相反的符号。图11e示出了四种类型的边,其落入pi,qi,pj和qj符号的四种有效组合的类别中。在该示例中,等式(2)变为f(vi,vj)=piεqpqj-qiεpqpj,所以由于0<εp<<εq,所以f的符号将是(pi-pj)的符号。由于pi和pj的符号相反,(pi-pj)的符号与pi的符号相同,与pj的符号相反。因此,f的符号将是与pj的符号相反的pi的符号。这样,在该示例中,w参数的符号被设置为pi的符号或pj的符号的相反符号。图11e所示的情形是其本身的双重情况,即其本身的相反情况,因为pi的符号等于pj的符号的相反符号。
在图11f中,第一顶点vi在原点,即pi=qi=0,第二投影顶点vj在Q轴上但不在原点,即pj=0和qj≠0。图11f示出了落入该类别的两种类型的边,用于qj的两个可能符号。在该示例中,等式(2)变为f(vi,vj)=εpqj,因此f的符号将是qj的符号。这样,在该示例中,w参数的符号被设置为qj的符号。图11b示出了与图11f所示的情形相反的双重情况,即相反情况,其中w参数的符号被设置为与qi的符号相反。
在图11g中,顶点vi和vj都在P轴上,而不是在原点,即pi≠0,qi=0,pj≠0和qj=0。由于对于严格凸多边形,仅当(未受扰动的)边通过原点时才能出现有效相交(即,对于图11l中所示的边,不能出现与严格凸多边形的相交),则边必须与Q相交,因此在该示例中pi和pj必须具有相反的符号。图11g示出了对于pi和pj符号的两个有效组合,落入该类别的两种类型的边。在该示例中,等式(2)变为f(vi,vj)=piεqqpj=εq(pi-pj)。由于pi和pj的符号相反,(pi-pj)的符号与pi的符号相同,与pj的符号相反。因此,f的符号将是与pj的符号相反的pi的符号。这样,在该示例中,w参数的符号被设置为pi的符号或pj的符号的相反符号。图11g所示的情形是其本身的双重情况,即其本身的相反情况,因为pi的符号与pj的符号的相反符号。
在图11h中,第一顶点vi在原点,即pi=qi=0,第二投影顶点vj在P轴上但不在原点,即pj≠0和qj=0。图11h示出了落入该类别的两种类型的边,用于pj的两个可能符号。在该示例中,等式(2)变为f(vi,vj)=-εqpj,因此f的符号将与pj的符号相反。这样,在该示例中,w参数的符号被设置为与pj的符号相反。图11d示出了与图11h所示的情形相反的双重情况,即相反的情况,其中w参数的符号被设置为pi的符号。
在图11i中,第一投影顶点vi位于原点,即pi=qi=0,但第二顶点vj的坐标都不为零,即pj≠0和qj≠0。图11i示出了四种类型的边,其落入pj和qj符号的四种可能组合的类别中。在该示例中,等式(2)变为f(vi,vj)=εpqjqpj,因此由于0<εp<<εq,f的符号将与pj的符号相反。这样,在该示例中,w参数的符号被设置为与pj的符号相反。图11a示出了与图11i所示的情形相反的双重情况,即相反的情况,其中w参数的符号被设置为pi的符号。
图11j中所示的情形有潜在的问题,因为我们不能纯粹基于pi,qi,pj和qj的符号来确保参数w的反交换性,但是如这里所解释的,它实际上不是问题。概述了如何不能保证参数w的反交换性:与图11e所示的情形类似,第一顶点vi的坐标都不为零,即pi≠0和qi≠0,并且第二顶点vj的坐标都不为零,即pj≠0和qj≠0。然而,在图11j所示的情形下,尽管边(如果延伸)将穿过原点(使得piqj-qipj=0),但边实际上在其到达原点之前停止。通过观察两个顶点的p坐标(和/或q坐标)具有相同的符号来识别这种情况,即,如果pi和pj都是正的或都是负的(在图11j中由符号±p指示),并且如果qi和qj都是正的或都是负的(在图11j中由符号±q表示),则我们可能处于图11j中所示的情形。这种情况的潜在问题是,边缠绕可以被反转而不改变任何输入符号,例如通过将边旋转例如180度。因此,对于这种情况,缠绕不能纯粹是pi,qi,pj和qj坐标的输入符号的函数。然而,这实际上不是问题,因为对于这种情况,确定这些边的w的符号无关紧要。这是因为,在包括边的多边形是严格凸多边形的情况下,无论我们为边选择什么符号(例如,当它的边中的两个对于符号不等式相交准则中的它们的w参数返回相反的符号时),多边形是退化的或者光线不与严格凸多边形相交。这样,我们可以将w参数的符号设置为该示例中的任何符号,并且它将不会引起任何误差。然而,如下所述,这种情况与图12j所示的另一种情况是不可区分的(完全基于pi,qi,pj和qj的符号),当RTZ类型的实现被用于计算f时(并且在这种情况下将下溢结果舍入为零),可能发生这种情况。由于我们已经假设2D叉积的实现是f的核的符号精确的(例如,通过使用“符号精确舍入”),因此,在图12j所示的情形下,f的符号是正确的。这样,在备选情形11j和12j两者中,w参数的符号可以被设置为等于f的符号(当使用RTZ类型实现来计算f时,否则可以使用针对w的任何值)。查找表或逻辑阵列可以接收f的符号作为输入,并且将w参数的符号设置为等于f的符号。图11j所示的情形是其本身的双重情况,即其本身的相反情况。
图11k所示的情形也是潜在的问题,因为我们也不能纯粹基于pi,qi,pj和qj的符号来确保参数w的反交换性,但是如这里所解释的,它实际上不是问题。概述了如何不能保证参数w的反交换性;与图11c所示的情形类似,顶点vi和vj都在Q轴上,而不是在原点,即pi=0,qi≠0,pj=0和qj≠0。然而,在图11k所示的情形下,尽管边(如果延伸)将穿过原点(使得piqj-qipj=0),但边实际上在其到达原点之前停止。通过观察两个顶点的q坐标具有相同的符号来识别这种情况,即,如果qi和qj都是正的或都是负的,则我们处于图11k所示的情形。这种情况的潜在问题是,边缠绕可以被反转而不改变任何输入符号,例如通过将边旋转例如180度。因此,对于这种情况,缠绕不能纯粹是pi,qi,pj和qj坐标的输入符号的函数。然而,这实际上不是问题,因为对于这种情况,确定这些边的w的符号无关紧要。这是因为,在包括边的多边形是严格凸多边形的情况下,无论我们为边选择什么符号(例如,当它的边中的两个对于符号不等式相交准则中的它们的w参数返回相反的符号时),多边形是退化的或者光线不与严格凸多边形相交。这样,我们可以将w参数的符号设置为该示例中的任何符号,并且它将不会引起任何误差(由图11k中的X指示)。图11k所示的情形是其本身的双重情况,即其本身的相反情况。
图111所示的情形也是潜在的问题,因为我们也不能纯粹基于pi,qi,pj和qj的符号来确保参数w的反交换性,但是如这里所解释的,它实际上不是问题。概述了如何不能保证参数w的反交换性;与图11g所示的情形类似,顶点vi和vj都在P轴上,而不是在原点,即pi≠0,qi=0,pj≠0和qj=0。然而,在图111所示的情形下,尽管边(如果延伸)将穿过原点(使得piqj-qipj=0),但边实际上在其到达原点之前停止。通过观察两个顶点的p坐标具有相同的符号来识别这种情况,即,如果pi和pj都是正的或都是负的,则我们处于图11l所示的情形。这种情况的潜在问题是,边缠绕可以被反转而不改变任何输入符号,例如通过将边旋转例如180度。因此,对于这种情况,缠绕不能纯粹是pi,qi,pj和qj坐标的输入符号的函数。然而,这实际上不是问题,因为对于这种情况,确定这些边的w的符号无关紧要。这是因为,在包括边的多边形是严格凸多边形的情况下,无论我们为边选择什么符号(例如,当它的边中的两个对于符号不等式相交准则中的它们的w参数返回相反的符号时),多边形是退化的或者光线不与严格凸多边形相交。这样,我们可以将w参数的符号设置为该示例中的任何符号,并且它将不会引起任何误差(由图111中的X指示)。图11l所示的情形是其本身的双重情况,即其本身的相反情况。
图11a到图11l示出了对于(可延伸的)边可以与P和Q轴的原点精确相交的情况的查找表或逻辑阵列的输入的组合的所有情形。因此,当使用RAZ类型的实现方式时,图11a至图111示出了使用查找表或逻辑阵列的所有情形,并且指示了针对输入的不同组合的查找表或逻辑阵列的输出。
在一些其他示例中,多边形相交测试单元114可以根据不是用于确定w参数的RAZ类型的2D叉积的实现来操作。例如,2D叉积的实现可以使用舍入到最近、舍入到零、舍入到正无穷或舍入到负无穷的舍入模式。当使用非RAZ实现类型时,则f的值可以被确定为(±)零,即使f的确切值不为零。例如,非常接近零的f值可以舍入为(±)零。在涉及浮点数的计算中的这种精度损失被称为“下溢”。因此,当使用非RAZ但仍符号准确的实现类型(表示为RTZ)来计算2D叉积时,则查找表或逻辑阵列需要考虑其中边未与原点准确相交的情形(除了其中边与原点准确相交的情形之外)。实现这一点的一种方式是提供下溢已经发生的指示,并且在该情况下前进到步骤S906,就好像已经计算了非零值,或者等效地,在步骤S910中将下溢的指示和f的符号两者作为附加输入提供给查找表,使得该符号被用作输出。然而,存在利用现在描述的步骤S908和S910的替代方法。图12a到图12j示出了P和Q轴的位置以及不与P和Q轴的原点精确相交的边,但是由于其实现方式的核是其本身核的严格超集(例如,由于计算中的下溢),因此f可以被确定为零。如同图11a到图111,每个边在图12a到图12j中由连接定义边的顶点vi至vj的线示出,箭头指向从vi至vj的方向。实际顶点vi和vj在图12a至图12j中没有被标记。图12a至图12j还示出了原点1202的位置,其没有出现扰动,因为与这些下溢情况下的pi,qi,pj和qj的非零值相比,移位εp和εq是可忽略的。
在图12a中,第一投影顶点vi在Q轴上但不在原点,即pi=0和qi≠0,并且第二投影顶点vj在P轴上但不在原点,即pj≠0和qj=0。图12a示出了四种类型的边,其落入qi和pj符号的四种可能组合的类别中。在该示例中,2D叉积是f(vi,vj)=-qipj,因此f的符号将与qi和pj的符号的乘积相反。这样,在该示例中,w参数的符号被设置为与qi和pj的符号的乘积相反。图12b中示出了与图12a中所示的情形相反的双重情况,即相反的情况,对于该情况,w参数的符号被设置为等于pi和qj的符号的乘积。
当将符号表示为+或-表示+1或-1时,我们取符号的乘积来组合它们,并且我们取反以得到相反的结果。当将符号表示为0或1时,我们对符号进行异或,或者等效地对2求模的符号的和,以将它们组合,然后用NOT,等效地进行求补,从而得到相反的结果。图12a至图12i中的符号可以根据特定表示来指示这些相应操作中的任一个。
在图12b中,第一投影顶点vi在P轴上但不在原点,即pi≠0和qi=0,并且第二投影顶点vj在Q轴上但不在原点,即pj=0和qj≠0。图12b示出了四种类型的边,其落入pi和qj符号的四种可能组合的类别中。在该示例中,2D叉积是f(vi,vj)=piqj,因此f的符号将与pi和qj的符号的乘积相同。这样,在该示例中,w参数的符号被设置为与pi和qj的符号的乘积相同。图12a示出了与图12b所示的情形相反的双重情况,即相反的情况,对于该情况,w参数的符号被设置为与qi和pj的符号的乘积相反。
在图12c中,第一投影顶点vi在Q轴上但不在原点,即pi=0和qi≠0,并且第二顶点vj的坐标都不为零,即pj≠0和qj≠0。图12c示出了八种类型的边,其落入qi,pj和qj符号的八种可能组合的类别中。在该示例中,2D叉积是f(vi,vj)=-qipj,因此f的符号将与qi和pj的符号的乘积相反。这样,在该示例中,w参数的符号被设置为与qi和pj的符号的乘积相反。图12e中示出了与图12c中所示的情形相反的双重情况,即相反的情况,对于该情况,w参数的符号被设置为等于pi和qj的符号的乘积。
在图12d中,第一投影顶点vi在P轴上但不在原点,即pi≠0和qi=0,并且第二顶点vj的坐标都不为零,即pj≠0和qj≠0。图12d示出了八种类型的边,其落入pi,pj和qj符号的八种可能组合的类别中。在该示例中,2D叉积是f(vi,vj)=piqj,因此f的符号将与pi和qj的符号的乘积相同。这样,在该示例中,w参数的符号被设置为与pi和qj的符号的乘积相同。图12f示出了与图12d所示的情形相反的双重情况,即相反的情况,对于该情况,w参数的符号被设置为与qi和pj的符号的乘积相反。
在图12e中,第一顶点vi的坐标都不为零,即pi≠0和qi≠0,并且第二投影顶点vj在Q轴上但不在原点,即pj=0和qj≠0。图12e示出了八种类型的边,其落入pi,qi和qj符号的八种可能组合的类别中。在该示例中,2D叉积是f(vi,vj)=piqj,因此f的符号将与pi和qj的符号的乘积相同。这样,在该示例中,w参数的符号被设置为与pi和qj的符号的乘积相同。图12c示出了与图12e所示的情形相反的双重情况,即相反的情况,对于该情况,w参数的符号被设置为与qi和pj的符号的乘积相反。
在图12f中,第一顶点vi的坐标都不为零,即pi≠0和qi≠0,并且第二投影顶点vj在P轴上但不在原点,即pj≠0和qj=0。图12f示出了八种类型的边,其落入pi,qi和pj符号的八种可能组合的类别中。在该示例中,2D叉积是f(vi,vj)=-qipj,因此f的符号将与qi和pj的符号的乘积相反。这样,在该示例中,w参数的符号被设置为与qi和pj的符号的乘积相反。图12d中示出了与图12f中所示的情形相反的双重情况,即相反的情况,对于该情况,w参数的符号被设置为等于pi和qj的符号的乘积。
与图12g中所示的情形有潜在的问题,因为我们不能纯粹基于pi,qi,pj和qj的符号来确保参数w的反交换性,但是如这里所解释的,这个问题可以被克服。概述了如何不能保证参数w的反交换性;与图11e所示的情形类似,第一顶点vi的坐标都不为零,即pi≠0和qi≠0,并且第二顶点vj的坐标都不为零,即pj≠0和qj≠0。在这种情况下,pi和qi的符号(在图12g中由符号±p和±q指示)彼此匹配,但是与pj和qj的符号(在图12g中由符号
Figure BDA0003551170210000531
Figure BDA0003551170210000532
表示)相反。然而,在图12g所示的情形下,边没有精确地通过原点,而是仅当其实现的核是其本身核的严格超集(例如,由于计算中的下溢)时,f才被确定为等于(±)零。这种情况的潜在问题是,边缠绕可以被反转而不改变任何输入符号,例如通过使边通过原点。因此,对于这种情况,缠绕不能纯粹是pi,qi,pj和qj坐标的输入符号的函数。特别地,pi,qi,pj和qj的符号不能区分下溢情况(图12g中所示)和真正的f=0情况(图11e中所示),因此即使利用“符号精确舍入”,图12g中所示的情形也不能被正确处理,因为它将被图11e中的情况的符号确定所忽略。为了克服这个潜在的问题,2D叉积的实现可以标记下溢的情况,以检测这种备选情形12g。该下溢标志可以作为附加的输入位被传递到查找表或逻辑阵列,以在当该标志未被设置时的图11e中的情况的符号确定和当该标志被设置时的图12g中的情况的2D叉积的(符号准确)确定的符号之间进行选择。作为替代方法,当2D叉积识别出f=0时,利用浮点格式的未使用的编码;输入pi,qi,pj和qj坐标的符号如图11e和图12g所示;并且将发生下溢(表示图12g中的情况);然后,不是舍入到(±)零,而是2D叉积的不圆的结果可以被编码为特殊标记-ε或+ε。因此,在该替换方案中,并且假定避免了f=0边上情况,则2D叉积的符号(即-ε或+ε的符号)将被用作w参数的符号,与所有f≠0情况相同。图12g所示的情形是其本身的双重情况,即其本身的相反情况,与图11e中的情形相同。
图12h所示的情形与图图11e所示的情形相似,因为第一顶点vi的坐标都不为零,即pi≠0和qi≠0,并且第二顶点vj的坐标都不为零,即pj≠0和qj≠0。然而,它与图11e所示的情形不同,因为pi和pj的符号彼此相反,并且qi和qj的符号彼此匹配。在该示例中,2D叉积是f(vi,vj)=piqj-qipj,并且由于我们知道pi和pj的符号彼此相反,并且qi和qj的符号彼此匹配,所以f的符号将等于pi和qj的符号的乘积,其与qi和pj的符号的乘积相反。这样,在该示例中,w参数的符号被设置为等于pi和qj的符号的乘积,或者与qi和pj的符号的乘积相反。图12h所示的情形是其本身的双重情况,即其本身的相反情况,因为pi的符号与pj的符号相反,并且qi的符号与qj的符号匹配。
图12i所示的情形与图11e所示的情形相似,因为第一顶点vi的坐标都不为零,即pi≠0和qi≠0,并且第二顶点vj的坐标都不为零,即pj≠0和qj≠0。然而,它与图11e所示的情形不同,因为pi和pj的符号彼此匹配,并且qi和qj的符号彼此相反。在该示例中,2D叉积是f(vi,vj)=piqj-qipj,并且由于我们知道pi和pj的符号彼此匹配,并且qi和qj的符号彼此相反,所以f的符号将与qi和pj的符号的乘积相反,是pi和qj的符号的乘积。这样,在该示例中,w参数的符号被设置为与qi和pj的符号的乘积相反,或者与pi和qj的符号的乘积相反。图12i所示的情形是其本身的双重情况,即其本身的相反情况,因为qi的符号与qj的符号相反,并且pi的符号与pj的符号匹配。
与图12j中所示的情形有潜在的问题,因为我们不能纯粹基于pi,qi,pj和qj的符号来确保参数w的反交换性,但是如这里所解释的,这个问题可以被克服。概述了如何不能保证参数w的反交换性:与图11e所示的情形类似,第一顶点vi的坐标都不为零,即pi≠0和qi≠0,并且第二顶点vj的坐标都不为零,即pj≠0和qj≠0。在这种情况下,pi和pj的符号彼此匹配,并且(独立地)qi和qj的符号彼此匹配。然而,在图12g所示的情形下,边没有精确地地通过原点,而是2D叉积f的实现被确定为等于(±)零,仅因为其实现的核是其本身核的严格超集(例如,由于计算中的下溢)。与图11j所示的情形一样,这种情况的潜在问题是,边缠绕可以被反转而不改变任何输入符号,例如通过将边旋转例如180度。因此,对于这种情况,缠绕不能纯粹是pi,qi,pj和qj坐标的输入符号的函数。然而,我们可以通过检查2D叉积f=0的实现以及通过检查输入pi,qi,pj和qj坐标具有适当的符号来检测图12j和图11j中所示的情形。我们已经假设2D叉积函数的实现具有f的核的“符号精确舍入”,这意味着即使在下溢的情况下,例如图12j中所示的情形,2D叉积的实现的符号也与f的符号匹配。这样,w参数的符号可以被设置为等于f的符号。查找表或逻辑阵列可以接收f的符号作为输入,并且将w参数的符号设置为等于f的符号。由于图11j和图12j所示的情形对于查找表或逻辑阵列是不可区分的(即对于两种情况接收相同的输入三进制数位),所以在图11j所示的情形下(当使用RTZ类型实现来计算f时,否则可以使用针对w的任何值),w参数的符号也被设置为等于f的符号,这是良好的,因为如上所述,w的符号在图11j所示的情形下无关紧要,因为包括这种边的严格凸多边形不能出现相交。图12j所示的情形是其本身的双重情况,即其本身的相反情况。
对于四个输入坐标中的每一个,存在三分法(负,(±)零,正)。当凸多边形是三角形时,pi=qi=pi=qj=0的情况不需要被包括在查找表或逻辑阵列中,因为通常任何投影的边使得pi=pj和qi=qj表示退化的投影的边,即它表现为点,并且包括这样的边的三角形多边形可以被丢弃,因为它们必须是退化的,并且光线不需要被确定为与退化的多边形相交。因此,总共有34-1=80个示例(不包括退化点线),并且图11a至图12j示出了对于这些分类中的每一个,从查找表或逻辑阵列输出w的什么符号。
对于具有n个边的一般凸多边形,至少n-2个投影边必须是退化的,以使投影多边形退化,即具有零投影面积,因此能够自由剔除。如果存在少于n-2个退化投影边,则当测试所有边符号是否相等时,可以忽略退化边测试的符号(即,pi=pj和qi=qj的情况),因此pi=qi=pj=qj=0的情况也不需要被包括在用于一般凸多边形的逻辑阵列的查找表中。这种边可以简单地通过检查两个投影端点是否相等来检测。在几何上,具有这种退化边的高阶多边形折叠成低阶多边形(类似于非严格凸多边形)。通过确保严格凸多边形的两个顶点不相等,可以避免这种反常情况。当(平面)凸多边形的法线垂直于光线方向时,它也将具有零面积,因为它表现为线,并且因此也将是退化的投影多边形,即使它没有退化(即,点)投影边。
在一个示例中,可以使用两个比特作为坐标的输入以指示负、零或正。例如,第一位可以指示输入坐标为零或非零,第二位可以指示输入坐标为负或正。在该示例中,在第一位指示输入坐标为零的情况下,则第二位是什么无关紧要;而如果第一位指示输入坐标非零,则第二位用于指示输入坐标为负或正。在另一个示例中,对于四个输入坐标中的每一个,三进制数位的三个值(即0、1和2)可以被分配为以任何顺序编码三分法-、±0或+。然后,四个三进制数位(可能加上用于2D叉积的符号的附加位,可能加上用于下溢检测的另一附加位,两者都用于RTZ实现类型)可被合并到0和80之间(例如,表示如下表中所示的1和81之间的情况ID)(或0和161之间,或0和323之间)的值,使得该值可用7(或8,或9)位二进制编码。
查找表或逻辑阵列可以硬编码在相交测试模块108的多边形相交测试单元114中的固定功能电路系统中。下面的表2示出了查找表或逻辑阵列的实现的输入和输出的示例,具有一些解释性注释。输入坐标pi,qi,pj或qj的0值指示+或-零的值。同样,2D叉积f的实现的结果0指示±零的值。对于输出的任何输入,“无关”值由符号“X”表示:
Figure BDA0003551170210000561
Figure BDA0003551170210000571
Figure BDA0003551170210000581
Figure BDA0003551170210000591
Figure BDA0003551170210000601
表2:查找表或逻辑阵列的示例输入、输出和说明数据
可以看出,表2关于其中位值(即情况41)对称,由此,当从情况c进行到情况82-c时,下溢情况保持其输出符号(因为将边旋转180度应当固定内部相交点的循环),而f=0情况反转其符号(因为将边旋转180度应当反转边上相交点的循环)。表2在其对偶性方面也具有对称性:将第一组两个三进制数位与第二组两个三进制数位交换,在一个情况和它的双重情况之间切换,根据有符号面积计算的反码性质的需要,从而反转输出符号。通过使用一定量的预处理或后处理逻辑,这两个属性都可以被利用以减小实现表2的LUT的量值,或者减小实现表1的逻辑阵列的复杂度。
在上表中,“双重情况ID”列给出了其中定义边的顶点的顺序已经被交换的情况的情况ID。可以看出,双重情况为w参数的符号给出相反的输出。这确保了当光线与共享边相交时,确定与包括该共享边的多边形中的一个(并且仅一个)相交。在最后一列中,“f=0”指示此情形发生,因为2D叉积的确切值为零,即,未发生下溢(例如,如图11a到图111中所示)。在最后一列中,“下溢”表示由于在2D叉积的实现中的下溢而发生这种情况,即使f的精确值不为零(例如,如图12a到图12j所示)。当使用RAZ实现类型时,查找表或逻辑阵列不需要包括仅由于下溢而发生的行,并且不需要包括下溢标志或f的符号作为输入列。因此,如果已知舍入模式是RAZ实施类型,则可使查找表或逻辑阵列更小,借此减少将查找表或逻辑阵列硬编码到相交测试模块108中所需的硅的量。换句话说,在RAZ实现类型中,在以上表格中被指示为“下溢”的情况不是查找表或逻辑阵列的pi,qi,pj和qj坐标的分类的“有效”组合,即,当f=±0时,它们不能有效地发生,因为f及其实现具有匹配的核。然而,当使用RTZ实现类型时(并且步骤S904尚未被修改使得如果发生下溢则执行步骤S906),则查找表或逻辑阵列确实包括仅由于下溢而可能发生的行(以及所有其他行),并且这些情况确实表示查找表或逻辑阵列的pi,qi,pj和qj坐标的分类的“有效”组合,即,当f=±0时,它们可以有效地发生,因为f的实现的核是其本身核的严格超集。如上文实例中所述,如果确定2D叉积不完全等于零,但舍入为零,则在确定2D叉积期间设定下溢标志。如果w的量值为零并且下溢标志未被设置,则通过仅调用严密行为,可以避免RTZ示例的查找表中的条目。换言之,在一些示例中,如果以下情况,则可以确定光线与边上的点相交:(i)定义边的两个投影顶点的位置的2D叉积具有零的量值,以及(ii)在确定所述2D叉积期间未设置下溢标志。在这些示例中,如果确定定义边的两个投影顶点的位置的2D叉积具有零的量值,但是在确定2D叉积期间已经设置了下溢标志,则确定该光线未与边上的点相交,并且边的w的符号可以被设置为等于2D叉积的符号(其是+0或-0)。
对于查找表或逻辑阵列的一些行,输出值由指示“无关”结果的“X”表示。在这些示例中,w的符号无关紧要,因为具有这种边的严格凸多边形不能与光线相交,例如因为光线不在多边形的其他边之一的内侧通过。其中不需要pi=qi=pj=qj=0的情况:包括这种边的三角形多边形是退化的,因此可以被丢弃,或者可以识别更高阶的多边形的这种边,以便从相交确定中排除其符号。在任一情况下,它不需要被包括在查找表或逻辑阵列中。
在步骤S912中,在相交测试模块108的多边形相交测试单元114处接收来自查找表或逻辑阵列的指示w参数的符号的输出。然后,所述方法转到上述步骤S314,并且所述方法继续。
描述仅当通用平面方向匹配共享边的缠绕方向时才确定相交的方法确保了“非冗余严密性”,此时形成网格的多边形即使在轮廓边上也都具有一致的缠绕顺序,因此被表示为“缠绕/取向依赖性”的方案,如前所述。参考图4、5和9描述的方法,当在步骤S318中结合符号相等性测试使用时,即使当形成网的多边形不具有一致的缠绕顺序,但不在轮廓边(其中可能出现零或双命中)上时,也确保“非冗余严密性”,并且因此被表示为“缠绕/取向独立性”方案。在一些实现中,假设几何形状(即多边形)将以一致的缠绕顺序(例如可取向表面)被提交给光线跟踪系统100是安全的。然而,有可能多边形可以以不一致的缠绕顺序提交给光线跟踪系统100,例如,不可取向的表面。在任一情况下,如通过考虑图13a至图13d所展示的,使用任何方法不能普遍地(即,具有任意缠绕以及开和关轮廓边)确保“非冗余严密性”。然而,通过在“缠绕/取向依赖性”和“缠绕/取向独立性”方案之间交替,我们可以选择在哪里出现零和双命中,例如在多边形网格的轮廓边上或在其之外。
例如,在图13a和图13b中清楚地示出了“缠绕/取向依赖性”的方案和“缠绕/取向独立性”的方案之间的区别功能,对于两种方案类型,其示出了投影到PQ平面上的三个多边形对(颜色编码的黑/灰):图13a对应于“缠绕/取向依赖性”方案;图13b对应于“缠绕/取向独立性”方案。在图13a和图13b中,对于多边形的感知取向和有向边的循环,零点表示顺时针取向,一表示逆时针取向。在每个相应的多边形对中,当向右或恰好向上指向时,穿过原点的有向边被认为是顺时针的,并且当向左或恰好向下指向时,穿过原点的有向边被认为是逆时针的。这对于具有顺时针取向的多边形表现出“左上规则”的行为。
图13a和图13b中的第一(即左上)相应多边形对表示默认配置:对于顺时针取向的两个多边形,光线与一致的共享边相交(即,在共享边的两个多边形中,边具有相反的缠绕方向)。在这种情况下,一致的共享边被认为是右下多边形(灰色的)的一部分,因为所有三个边都与该多边形匹配。
图13a和图13b中的第二(即右上)相应多边形对表示旋转180度的配置,其中光线仍然与相同的一致共享边相交。当已经应用旋转时,两个多边形仍然具有顺时针取向,并且在任一模式中,一致的共享边仍然被认为是右下多边形(现在是黑色多边形)的一部分,因为所有三个边都布尔仍然匹配该多边形。
图13a和图13b中的第三(即,左下)相应多边形对表示沿着一致的共享边反射的配置(例如,当折叠边使得它落在轮廓后面时),其中光线仍然与该相同的一致的共享边相交。当施加反射时,两个多边形现在具有逆时针取向。在“与缠绕/取向独立性”的严密性方案中(图13b中所示),一致的边仍然被认为是右下多边形(现在是黑色多边形)的一部分,因为所有三个边都回倾斜仍然匹配该多边形(虽然具有相反的值),因此仍然表现出“左上规则”的行为。在“缠绕/取向依赖性”的严密性方案中(图13a中所示),现在认为一致的共享边是左上多边形(现在是灰色多边形)的一部分,因为所有的三条边现在都匹配该多边形,所以现在表现出双重行为,即“右下规则”。
两种类型的方案(图13a和图13b中所示)之间的行为差异仅在反射的情况下才会生效,因为多边形的取向已经改变。通过由多边形取向布尔值(如下所述)对边上边布尔值进行异或(对合)可以从另一个行为中获得一个行为。
图13c示出了形成圆形带(即,环形)的多边形1302至1320的网格,其通过适当的阴影进行指示,在“缠绕/取向依赖性”的方案中(例如,如上文参照其中仅在通用平面方向与共享边的缠绕方向匹配的情况下才确定相交的方法所描述的)将其边视为每个多边形的一部分。图13c是对于发射初级光线远离其原点的相机,从略高于相机原点的视点看的(未投影)多边形的视图。从相机的原点,仅表示为前多边形的图元1302至1310可以是可见的,而表示为后多边形的图元1312至1320可以被它们前面的图元遮挡。从所示视点看,多边形网格的轮廓边界由前多边形和后多边形之间的边界给出,即多边形1302和1320之间的共享边以及多边形1310和1312之间的共享边。前多边形的顺时针取向与后多边形的逆时针取向一致地缠绕,并且前多边形(例如,多边形1306)的逆时针取向与后多边形(图13c中未示出)的顺时针取向一致地缠绕。这可以通过想象旋转多边形带并且考虑每个多边形的取向在其从前多边形(即,在轮廓的前面)过渡到后多边形(即,在轮廓的后面)时如何改变并且反之亦然来理解。每个多边形的缠绕顺序可以从图13c中的其感知的取向推断,并且可以看出,除了多边形1306之外,所有多边形具有一致的缠绕顺序(即,在共享边的两个多边形中,每个边具有相反的缠绕方向)。多边形被交替地颜色编码为灰色或黑色,仅为了视觉清晰:多边形的颜色在图13c中通过多边形内部的缠绕符号的颜色看到。当仅发生单次命中时,共享边具有黑色或灰色的实线,以指示共享边的黑色多边形或灰色多边形中的将被与共享边精确相交的光线命中。注意,多边形1302和1320之间的共享轮廓边以及多边形1310和1312之间的共享轮廓边仅返回单个命中。当没有命中发生时,浅灰色的虚线边指示没有图13c中所示的多边形将被与边精确相交的光线命中。当发生双重命中时,共享边具有黑色和灰色的虚线,以指示共享边的黑色多边形和灰色多边形将被与共享边精确相交的光线命中。例如,由于多边形1306相对于其他多边形的不一致的缠绕顺序,对于多边形1304和1306之间的不一致的共享边,两个多边形将被确定为被与共享边精确相交的光线命中。类似地,对于多边形1306和1308之间的不一致的共享边,两个多边形将被确定为被与共享边精确相交的光线命中。在图13c中未示出的其他示例中,由于不一致的缠绕,零命中可能发生在多边形网格的内部的共享边上(即,不在轮廓边界上)。对于“缠绕/取向依赖性”的方案,两次/零命中可以分别在这种共享边上的位置处引起渲染冗余/伪像。
在前述示例中描述的这种渲染冗余/伪像的出现(其可能由于形成网格的多边形的不一致缠绕顺序而出现)不能被普遍地去除,但是它们可以被重新定位,使得它们仅出现在多边形网格的轮廓边处。在渲染图像中几何形状的轮廓边处的视觉伪像对于渲染图像的观察者来说比在对象中间的视觉伪像更不明显,例如在零命中的情况下,对象中间的视觉伪像可以给出其中具有孔的对象的外观,使得可以通过对象看到背景颜色或遮挡的几何形状。尽管改善了视觉伪像,但是仍然发生形式为双重命中的呈现冗余。因此,总的来说,优选的是将可能的绘制伪像移动到轮廓边。这可以在缠绕/取向独立性方案(例如参照图4、5和9描述的方法)中实现,该方案参照图13d描述。
图13d示出了与图13c中所示的多边形相同的多边形网格,其形成了具有通过适当的阴影表示的圆形带(即,环形),在“缠绕/取向独立性”方案中,其边被认为是每个多边形的一部分。为了将“缠绕/取向依赖性”的方案修改为“缠绕/取向独立性”的方案,相同的方法可以用于相交测试,但是当光线与多边形的边上的点相交时(即,当f=±0时),通过对w参数的符号加上凸多边形的另一边的w参数的符号的后处理异或运算。例如,如果确定光线与凸多边形的边上的点相交,则在步骤S314和S318之间,存在使用以下各项执行异或运算的附加步骤:(i)针对边的有符号参数w的符号,使得f=±0,和(ii)针对边的有符号参数w的符号,使得f≠±0,表示凸多边形的感知方位。注意,对于任何非退化凸多边形(即,具有非零投影面积),存在至少一个边使得f不等于零(否则凸多边形的投影面积将为零,为零之和)。有符号参数w的符号为0可用于指示凸多边形的顺时针取向,而有符号参数w的符号为1可用于指示凸多边形的逆时针取向(或反之亦然)。异或运算的结果可以用作w参数的符号位,其然后可以用于确定光线是否与凸多边形相交(例如,通过检查凸多边形的所有边的符号相等)。通过将双/零命中移动到多边形网格的轮廓边界,这确保了多边形网格内部的“非冗余严密性”,即使多边形的缠绕顺序不一致。然而,这可能导致在多边形网格的轮廓边上缺少“非冗余严密性”,例如,双重/零命中,而不管共享轮廓边的两个多边形的缠绕顺序如何。例如,在图13d中,在多边形网格的内部(即,不在轮廓边界上)不存在渲染赝像(例如,在多边形1306的边上不存在渲染赝像,即使其相对于其他多边形具有不一致的缠绕顺序)。然而,在左边轮廓共享边(即,多边形1302和1320共享的边)上,多边形1302和1320两者将被确定为被与共享边精确相交的光线命中,如虚线的黑色阴影和灰色阴影所示。在右侧轮廓共享边(即,多边形1310和1312共享的边)上,多边形1310和1312都不会被确定为被与共享边精确相交的光线命中,如虚线的浅灰色阴影所示。即使多边形1302、1310、1312和1320具有一致的缠绕次序,这两种行为也都会发生。然而,在一些应用中,实际上希望通过任何凸对象(例如,在折射中)出现一对相交,以便定义进入点和退出点。在这种情况下,缠绕无关方案保证了期望的行为,而缠绕相关方案则不保证。
作为对合的后处理异或运算可以用于将“缠绕/取向依赖性”的方案变换为“缠绕/取向独立性”的方案,并且可以用于将“缠绕/取向独立性”的方案变换为“缠绕/取向依赖性”的方案。因此,该技术可以用于将仅当通用平面方向与共享边的缠绕方向匹配时才出现相交的方法转换成“缠绕/取向独立性”方案,并且还用于将如上参考图4、5和9所述的方法转换成“缠绕/取向依赖性方案”。
在“与缠绕/取向独立性”方案的一些示例中(例如,如上参考图4、5和9所述的方法),当且仅当对于凸多边形的所有边w参数的符号相等时,才确定光线与凸多边形相交。例如,对于三角形多边形,当且仅当对于有符号参数w0,w1和w2(对应于三角形的三个边)sgn(w0)=sgn(w1)=sgn(w2)时,我们才会使其相交。在将方案修改为“缠绕相关”之后,如果w0是边上情况(即,f=±0)的有符号参数,并且w1是边外情况(即,f≠±0)的有符号参数,则通过后处理异或运算,相交确定变为
Figure BDA0003551170210000641
这只有在sgn(w0)=0时才满足。换句话说,对于要发生的相交,用于边上情况的有符号参数w0的符号必须为0,而不管任何其他边的有符号参数的符号。在这种情况下,可以将相交逻辑重新表示为(sgn(w0)=0)∧(sgn(w1)=sgn(w2))。否则,对于要发生的相交,有符号参数w0的符号必须是1,则“缠绕依赖性”的方案对于边情况表现出反转平局决胜行为。注意,这与先前描述的将边相交作为特殊情况来处理而不是简单符号相等性测试的相交准则一致。这里,我们描述了一种利用灵活的过拱形方案来协调这两种方法的方法。
通过在“缠绕/取向依赖性”的方案中用多边形的符号(表示其感知的取向)来增加在边符号,平局决胜行为在具有符号0的多边形与具有符号1的多边形之间反转。平局决胜行为的八种表征分成四对:“左上规则”和“右下规则”、“右上规则”和“左下规则”、“左上规则”和“右下规则”、“右上规则”和“左下规则”。这些平局决胜行为对中的每一个的一个成员对应于具有符号0的多边形,并且另一个成员对应于具有符号1的多边形。这在图13c中得到说明,其中“右下规则”适用于多边形1306,而“左上规则”适用于所有其他多边形。
总之,如果期望(或甚至保证)提供一致的多边形缠绕次序,例如可取向表面,例如环形,则“缠绕/取向相关”方案可能是优选的,而如果期望(或甚至不可能避免)提供不一致的多边形缠绕次序,例如不可取向表面,例如莫比乌斯带,则“缠绕/取向独立性”方案可能是优选的。
图14示出了可以在其中实施本文所描述的光线跟踪系统的计算机系统。计算机系统包括CPU 1402、GPU 1404、存储器1406和其他装置1414,诸如显示器1416、扬声器1418和相机1422。光线跟踪单元1410(对应于光线跟踪单元102)在GPU 1404以及神经网络加速器(NNA)1411上实施。在其他示例中,光线跟踪单元1410可以在CPU 1402上或在NNA 1411内实施,或作为计算机系统中的单独处理单元实施。计算机系统的部件可通过通信总线1420彼此通信。存储装置1412(对应于存储器104)被实施为存储器1406的一部分。
图1的光线跟踪系统示出为包括数个功能块。这仅是示意性的,并不旨在限定此类实体的不同逻辑元件之间的严格划分。每个功能块可以任何合适的方式提供。应理解,本文中描述为由光线跟踪系统形成的中间值不需要由光线跟踪系统在任何时间点物理地生成,并且可以只表示方便描述由光线跟踪系统在其输入与输出之间执行的处理的逻辑值。
光线跟踪单元,并且具体地说本文所描述的相交测试模块,可以在集成电路上以硬件体现。本文所描述的相交测试模块可以被配置成执行本文所描述的任一种方法。一般来讲,上文所述的功能、方法、技术或部件中的任一者可在软件、固件、硬件(例如,固定逻辑电路系统)或其任何组合中实现。本文可以使用术语“模块”、“功能”、“部件”、“元件”、“单元”、“块”和“逻辑”来概括地表示软件、固件、硬件或其任何组合。在软件实施方式的情况下,模块、功能、部件、元件、单元、块或逻辑表示程序代码,所述程序码当在处理器上执行时执行指定任务。本文中描述的算法和方法可以由执行码的一个或多个处理器执行,该码使处理器执行算法/方法。计算机可读存储介质的示例包含随机存取存储器(RAM)、只读存储器(ROM)、光盘、闪存存储器、硬盘存储器以及可以使用磁性、光学和其他技术来存储指令或其他数据并且可以由机器存取的其他存储器装置。
如本文中所使用的术语计算机程序代码和计算机可读指令是指供处理器执行的任何种类的可执行代码,包含以机器语言、解释语言或脚本语言表达的代码。可执行代码包含二进制代码、机器代码、字节代码、定义集成电路的代码(例如硬件描述语言或网表),以及用例如C、
Figure BDA0003551170210000661
或OpenCL等编程语言码表达的代码。可执行代码可以是例如任何种类的软件、固件、脚本、模块或库,当在虚拟机或其他软件环境中被适当地执行、处理、解释、编译、运行时,这些软件、固件、脚本、模块或库使支持可执行代码的计算机系统的处理器执行由该代码指定的任务。
处理器、计算机或计算机系统可以是任何种类的装置、机器或专用电路,或它们的集合或一部分,它具有处理能力使得可以执行指令。处理器可以是或包括任何种类的通用或专用处理器,诸如CPU、GPU、NNA、片上系统、状态机、媒体处理器、专用集成电路(ASIC)、可编程逻辑阵列、现场可编程门阵列(FPGA)等。计算机或计算机系统可以包括一个或多个处理器。
本发明还意图涵盖定义如本文中描述的硬件的配置的软件,诸如HDL(硬件描述语言)软件,用于设计集成电路或用于配置可编程芯片以执行所需功能。也就是说,可以提供一种计算机可读存储介质,其上编码有集成电路定义数据集形式的计算机可读程序代码,所述集成电路定义数据集当在集成电路制造系统中处理(即,运行)时,将所述系统配置成制造被配置为执行本文所描述的任一种方法的相交测试模块,或者制造包括本文所描述的任何设备的相交测试模块。集成电路定义数据集可以是例如集成电路描述。
因此,可以提供一种在集成电路制造系统处制造如本文所描述的相交测试模块的方法。此外,可以提供一种集成电路定义数据集,当在集成电路制造系统中被处理时,所述集成电路定义数据集使制造相交测试模块的方法得以执行。
集成电路定义数据集可以是计算机代码的形式,例如作为网表,用于配置可编程芯片的代码,作为定义适合于在集成电路中以任何级别制造的硬件描述语言,包括作为寄存器传输级(RTL)代码,作为高级电路表示法(诸如Verilog或VHDL),以及作为低级电路表示法(诸如OASIS(RTM)和GDSII)。在逻辑上定义适合于在集成电路中制造的硬件的更高级表示法(诸如RTL)可以在计算机系统上处理,所述计算机系统被配置用于在软件环境的上下文中生成集成电路的制造定义,所述软件环境包括电路元件的定义和用于组合这些元件以便生成由所述表示法定义的集成电路的制造定义的规则。如通常软件在计算机系统处执行以便定义机器的情况一样,可能需要一个或多个中间用户步骤(例如,提供命令、变量等),以便将计算机系统配置为生成集成电路的制造定义,以执行定义集成电路以便生成所述集成电路的制造定义的代码。
现在将关于图15描述在集成电路制造系统处处理集成电路定义数据集以便将系统配置成制造相交测试模块的示例。
图15示出了集成电路(IC)制造系统1502的示例,其被配置为制造如本文的任何示例中描述的相交测试模块。特别地,IC制造系统1502包括布局处理系统1504和集成电路生成系统1506。IC制造系统1502被配置为接收IC定义数据集(例如,定义如本文的任何示例中描述的相交测试模块),处理IC定义数据集,并根据IC定义数据集生成IC(例如,其体现如本文的任何示例中描述的相交测试模块)。IC定义数据集的处理将IC制造系统1502配置成制造体现如本文的任何示例中描述的相交测试模块的集成电路。
布局处理系统1504被配置为接收和处理IC定义数据集以确定电路布局。根据IC定义数据集确定电路布局的方法在本领域中是已知的,并且例如可以涉及合成RTL代码以确定待生成的电路的门级表示,例如就逻辑部件(例如,NAND、NOR、AND、OR、MUX和FLIP-FLOP部件)而言。通过确定逻辑部件的位置信息,可以根据电路的门级表示来确定电路布局。这可以自动完成或者在用户参与下完成,以便优化电路布局。当布局处理系统1504已经确定电路布局时,其可将电路布局定义输出到IC生成系统1506。电路布局定义可以是例如电路布局描述。
如本领域中已知的,IC生成系统1506根据电路布局定义来生成IC。例如,IC生成系统1506可实施生成IC的半导体装置制造工艺,该半导体装置制造工艺可涉及光刻和化学处理步骤的多步骤序列,在此期间,在由半导体材料制成的晶片上逐渐形成电子电路。电路布局定义可呈掩模的形式,掩模可在光刻工艺中用于根据电路定义来生成IC。替代地,提供给IC生成系统1506的电路布局定义可呈计算机可读代码的形式,IC生成系统1506可使用该计算机可读代码来形成用于生成IC的合适的掩模。
由IC制造系统1502执行的不同过程可全部在一个位置例如由一方来实施。替代地,IC制造系统1502可以是分布式系统,使得一些过程可以在不同位置执行,并且可以由不同方来执行。例如,以下阶段中的一些可以在不同位置以及/或者由不同方来执行:(i)合成表示IC定义数据集的RTL代码,以形成待生成的电路的门级表示;(ii)基于门级表示来生成电路布局;(iii)根据电路布局来形成掩模;以及(iv)使用掩模来制造集成电路。
在其他示例中,在集成电路制造系统处对集成电路定义数据集进行处理可以将系统配置成制造相交测试模块,而不用对IC定义数据集进行处理以便确定电路布局。例如,集成电路定义数据集可以定义可重新配置的处理器诸如FPGA的配置,并且对该数据集的处理可以将IC制造系统配置为(例如,通过将配置数据加载到FPGA)生成具有该定义的配置的可重新配置的处理器。
在一些实施例中,当在集成电路制造系统中处理时,集成电路制造定义数据集可以使集成电路制造系统生成如本文中描述的装置。例如,由集成电路制造定义数据集以上文参考图15所描述的方式对集成电路制造系统进行的配置可以制造如本文中描述的装置。
在一些示例中,集成电路定义数据集可以包括在数据集处定义的硬件上运行的软件,或者与在数据集处定义的硬件组合运行的软件。在图15所示的示例中,IC生成系统可以由集成电路定义数据集进一步配置为在制造集成电路时根据在集成电路定义数据集处定义的程序代码将固件加载到所述集成电路上,或者以其他方式向集成电路提供与集成电路一起使用的程序代码。
与已知的实施方式相比,在本申请中阐述的概念在装置、设备、模块和/或系统中(以及在本文中实施的方法中)的实施方式可以提高性能。性能改进可以包含计算性能提高、延迟减少、处理量增大和/或功耗降低中的一个或多个。在制造此类装置、设备、模块和系统(例如,在集成电路中)期间,可以在性能改进与物理实施方式之间进行权衡,从而改进制造方法。例如,可以在性能改进与布局面积之间进行权衡,从而匹配已知实施方式的性能,但使用更少的硅。例如,这可以通过以串行方式重复使用功能块或在装置、设备、模块和/或系统的元件之间共享功能块来完成。相反,在本申请中阐述的引起装置、设备、模块和系统的物理实施方式的改进(诸如硅面积减小)的概念可以针对性能提高进行折中。例如,这可以通过在预定义面积预算内制造模块的多个示例来完成。
申请人据此独立地公开了本文中所描述的每个单独的特征以及两个或更多个此类特征的任意组合,到达的程度使得此类特征或组合能够根据本领域的技术人员的普通常识基于本说明书整体来实行,而不管此类特征或特征的组合是否解决本文中所公开的任何问题。鉴于前文描述,本领域的技术人员将清楚,可以在本发明的范围内进行各种修改。

Claims (22)

1.一种在光线跟踪系统中执行光线与凸多边形的相交测试的方法,其中使用空间坐标系在3D空间中定义所述光线和所述凸多边形,并且其中利用光线原点和光线方向定义所述光线,所述方法包括:
使用光线坐标系来执行相交测试,其中所述光线坐标系在所述光线原点处具有原点,并且其中所述光线坐标系具有三个基向量,
其中所述基向量中的第一基向量与所述光线方向对齐,并且
其中所述基向量中的第二基向量和第三基向量:(i)都与所述第一基向量正交,(ii)彼此不平行,并且(iii)当在所述空间坐标系中表达时具有零作为一个分量;以及
输出执行所述相交测试的结果以供所述光线跟踪系统使用。
2.根据权利要求1所述的方法,还包括通过从定义所述凸多边形的顶点的位置减去所述光线原点来平移定义所述凸多边形的所述顶点,以用于执行所述相交测试。
3.根据权利要求1或2所述的方法,其中当在所述空间坐标系中表示时,所述光线坐标系的所述第二基向量和所述第三基向量具有±1的值作为一个分量。
4.根据任一项前述权利要求所述的方法,其中当用所述空间坐标系的分量表示时,所述第一基向量S为S=A(Dx,Dy,Dz),
其中当用所述空间坐标系的分量表示时,所述第二基向量P是P=B(Dz,0,-Dx);并且
其中当用所述空间坐标系的分量表示时,所述第三基向量Q是Q=C(0,Dz,-Dy);
其中Dx,Dy和Dz是所述空间坐标系中所述光线方向的分量,并且A,B和C是标量值。
5.根据权利要求4所述的方法,其中B是在其分母中具有Dx的简化分数,并且C是在其分母中具有Dy的简化分数。
6.根据权利要求3所述的方法,其中当用所述空间坐标系的分量表示时,所述第一基向量S是S=A(Dx,Dy,Dz),
其中当用所述空间坐标系的分量表示时,所述第二基向量P是
Figure FDA0003551170200000011
并且
其中当用所述空间坐标系的分量表示时,所述第三基向量Q是
Figure FDA0003551170200000012
其中Dx,Dy和Dz是所述空间坐标系中所述光线方向的分量,并且A是标量值。
7.根据权利要求3所述的方法,其中当用所述空间坐标系的分量表示时,所述第一基向量S是S=A(Dx,Dy,Dz),
其中当用所述空间坐标系的分量表示时,所述第二基向量P是
Figure FDA0003551170200000021
并且
其中当用所述空间坐标系的分量表示时,所述第三基向量Q是
Figure FDA0003551170200000022
其中Dx,Dy和Dz是所述空间坐标系中所述光线方向的分量,并且A是标量值。
8.根据权利要求1或2所述的方法,其中当用所述空间坐标系的分量表示时,所述第一基向量S是S=A(Dx,Dy,Dz),
其中当用所述空间坐标系的分量表示时,所述第二基向量P是
Figure FDA0003551170200000023
并且
其中当用所述空间坐标系的分量表示时,所述第三基向量Q是
Figure FDA0003551170200000024
其中Dx,Dy和Dz是所述空间坐标系中所述光线方向的分量,并且A是标量值。
9.根据权利要求1或2所述的方法,其中当用所述空间坐标系的分量表示时,所述第一基向量S是S=A(Dx,Dy,Dz),
其中当用所述空间坐标系的分量表示时,所述第二基向量P是
Figure FDA0003551170200000025
并且
其中当用所述空间坐标系的分量表示时,所述第三基向量Q是
Figure FDA0003551170200000026
其中Dx,Dy和Dz是所述空间坐标系中所述光线方向的分量,并且A是标量值。
10.根据权利要求4-9中任一项所述的方法,其中
Figure FDA0003551170200000027
11.根据任一项前述权利要求所述的方法,还包括将所述光线和所述凸多边形从所述空间坐标系变换到所述光线坐标系中,其中在所述光线坐标系中执行所述相交测试。
12.根据任一项前述权利要求所述的方法,其中使用固定功能电路系统来执行所述相交测试,并且可选地,其中所述固定功能电路系统包括用于使用所述光线坐标系的所述第二基向量和所述第三基向量来执行乘法和加法的一个或多个乘与加部件。
13.如前述权利要求中的任一项所述的方法,还包括在执行所述光线与所述凸多边形的相交测试之前,选择性地置换所述光线的所述分量和定义所述凸多边形的所述顶点,使得|Dz|≥|Dx|和|Dz|≥|Dy|。
14.根据任一项前述权利要求所述的方法,还包括在执行所述光线与所述凸多边形的相交测试之前,选择性地反转所述光线的所述分量和定义所述凸多边形的所述顶点,使得Dx≥0,Dy≥0和Dz≥0。
15.根据权利要求13或14所述的方法,还包括存储从所述空间坐标系到所述光线坐标系的映射是否影响感知的多边形取向的映射指示,其中所述映射指示用于执行所述光线与所述凸多边形的所述相交测试。
16.根据任一项前述权利要求所述的方法,其中下列各项中的至少一项的值:
Figure FDA0003551170200000031
Figure FDA0003551170200000032
Figure FDA0003551170200000033
Figure FDA0003551170200000034
Figure FDA0003551170200000035
或Dz,针对所述光线预先计算并且存储在存储装置中,其中所述方法包括从所述存储装置读取所存储的值以用于执行相交测试。
17.根据任一项前述权利要求所述的方法,其中在所述光线跟踪系统中使用输出的结果来渲染3D场景的图像。
18.一种在光线跟踪系统中执行光线与凸多边形的相交测试的方法,其中使用空间坐标系在n维空间中定义所述光线和所述凸多边形,其中n≥3,并且其中利用光线原点和光线方向定义所述光线,所述方法包括:
使用光线坐标系来执行相交测试,其中所述光线坐标系在所述光线原点处具有原点,并且其中所述光线坐标系具有n个基向量,
其中所述基向量中的第一基向量与所述光线方向对齐,
其中(n-1)个所述基向量与所述第一基向量正交,
其中所述(n-1)个基向量中没有成对的基向量平行,并且
其中当在所述空间坐标系中表达时,所述(n-1)个基向量对于(n-2)个分量具有零;以及
输出执行所述相交测试的结果以供所述光线跟踪系统使用。
19.一种在光线跟踪系统中使用的被配置为执行光线与凸多边形的相交测试的相交测试模块,其中使用空间坐标系在3D空间中定义所述光线和所述凸多边形,并且其中利用光线原点和光线方向定义所述光线,所述相交测试模块被配置为:
使用光线坐标系来执行相交测试,其中所述光线坐标系在所述光线原点处具有原点,并且其中所述光线坐标系具有三个基向量,
其中所述基向量中的第一基向量与所述光线方向对齐,并且
其中所述基向量中的第二基向量和第三基向量:(i)都与所述第一基向量正交,(ii)彼此不平行,并且(iii)当在所述空间坐标系中表达时具有零作为一个分量;以及
输出执行所述相交测试的结果以供所述光线跟踪系统使用。
20.一种在光线跟踪系统中使用的被配置为执行光线与凸多边形的相交测试的相交测试模块,其中使用空间坐标系在n维空间中定义所述光线和所述凸多边形,其中n≥3,并且其中利用光线原点和光线方向定义所述光线,所述相交测试模块被配置为:
使用光线坐标系来执行相交测试,其中所述光线坐标系在所述光线原点处具有原点,并且其中所述光线坐标系具有n个基向量,
其中所述基向量中的第一基向量与所述光线方向对齐,
其中(n-1)个所述基向量与所述第一基向量正交,
其中所述(n-1)个基向量中没有成对的基向量平行,并且
其中当在所述空间坐标系中表达时,所述(n-1)个基向量对于(n-2)个分量具有零;并且
输出执行所述相交测试的结果以供所述光线跟踪系统使用。
21.一种计算机可读代码,其被配置为在运行所述代码时使得根据权利要求1至18中任一项所述的方法被执行。
22.一种集成电路定义数据集,当在集成电路制造系统中处理时,所述集成电路定义数据集配置所述集成电路制造系统以制造如权利要求19或20所述的相交测试模块。
CN202210262694.0A 2021-03-23 2022-03-17 光线跟踪系统中的相交测试的方法、相交测试模块和介质 Active CN115115759B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202311665902.2A CN117689794A (zh) 2021-03-23 2022-03-17 光线跟踪系统中的相交测试的方法、相交测试模块和介质

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
GB2104063.9 2021-03-23
GB2104063.9A GB2599186B (en) 2021-03-23 2021-03-23 Intersection testing in a ray tracing system

Related Child Applications (1)

Application Number Title Priority Date Filing Date
CN202311665902.2A Division CN117689794A (zh) 2021-03-23 2022-03-17 光线跟踪系统中的相交测试的方法、相交测试模块和介质

Publications (2)

Publication Number Publication Date
CN115115759A true CN115115759A (zh) 2022-09-27
CN115115759B CN115115759B (zh) 2023-12-26

Family

ID=75690012

Family Applications (2)

Application Number Title Priority Date Filing Date
CN202311665902.2A Pending CN117689794A (zh) 2021-03-23 2022-03-17 光线跟踪系统中的相交测试的方法、相交测试模块和介质
CN202210262694.0A Active CN115115759B (zh) 2021-03-23 2022-03-17 光线跟踪系统中的相交测试的方法、相交测试模块和介质

Family Applications Before (1)

Application Number Title Priority Date Filing Date
CN202311665902.2A Pending CN117689794A (zh) 2021-03-23 2022-03-17 光线跟踪系统中的相交测试的方法、相交测试模块和介质

Country Status (4)

Country Link
US (1) US11682161B2 (zh)
EP (1) EP4064200A3 (zh)
CN (2) CN117689794A (zh)
GB (1) GB2599186B (zh)

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102074041A (zh) * 2010-12-21 2011-05-25 长春理工大学 一种由镜面反射产生的3d虚拟场景面焦散效果的绘制方法
CN102855655A (zh) * 2012-08-03 2013-01-02 吉林禹硕动漫游戏科技股份有限公司 Gpu并行光线追踪渲染方法
US20150363970A1 (en) * 2014-06-16 2015-12-17 Replica Labs, Inc. Model and Sizing Information from Smartphone Acquired Image Sequences
CN109087384A (zh) * 2017-06-14 2018-12-25 想象技术有限公司 光线跟踪系统中经压缩的光线方向数据
US20200051314A1 (en) * 2018-08-10 2020-02-13 Nvidia Corporation Watertight ray triangle intersection
WO2020123060A1 (en) * 2018-12-13 2020-06-18 Advanced Micro Devices, Inc. Water tight ray triangle intersection without resorting to double precision

Family Cites Families (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US3059122A (en) 1959-12-15 1962-10-16 Ibm Magnetic trigger
JPH05128274A (ja) 1991-11-07 1993-05-25 Fujitsu Ltd 図形表示装置
JP4078716B2 (ja) * 1998-06-29 2008-04-23 ソニー株式会社 画像処理装置および方法、並びに提供媒体
AU5688199A (en) * 1998-08-20 2000-03-14 Raycer, Inc. System, apparatus and method for spatially sorting image data in a three-dimensional graphics pipeline
US8421801B2 (en) * 2008-09-09 2013-04-16 Caustic Graphics, Inc. Ray tracing using ray-specific clipping
US9235921B2 (en) 2011-11-08 2016-01-12 Imagination Technologies Limited Profiling ray tracing renderers
US10692271B1 (en) 2018-12-13 2020-06-23 Advanced Micro Devices, Inc. Robust ray-triangle intersection
US11450057B2 (en) * 2020-06-15 2022-09-20 Nvidia Corporation Hardware acceleration for ray tracing primitives that share vertices
JP2022089269A (ja) * 2020-12-04 2022-06-16 株式会社日立製作所 キャリブレーション装置およびキャリブレーション方法
GB202101908D0 (en) * 2021-02-11 2021-03-31 Axial Medical Printing Ltd Axial3D pathology

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102074041A (zh) * 2010-12-21 2011-05-25 长春理工大学 一种由镜面反射产生的3d虚拟场景面焦散效果的绘制方法
CN102855655A (zh) * 2012-08-03 2013-01-02 吉林禹硕动漫游戏科技股份有限公司 Gpu并行光线追踪渲染方法
US20150363970A1 (en) * 2014-06-16 2015-12-17 Replica Labs, Inc. Model and Sizing Information from Smartphone Acquired Image Sequences
CN109087384A (zh) * 2017-06-14 2018-12-25 想象技术有限公司 光线跟踪系统中经压缩的光线方向数据
US20200051314A1 (en) * 2018-08-10 2020-02-13 Nvidia Corporation Watertight ray triangle intersection
WO2020123060A1 (en) * 2018-12-13 2020-06-18 Advanced Micro Devices, Inc. Water tight ray triangle intersection without resorting to double precision

Also Published As

Publication number Publication date
GB2599186A (en) 2022-03-30
US20220351458A1 (en) 2022-11-03
CN117689794A (zh) 2024-03-12
GB2599186A9 (en) 2022-06-15
EP4064200A3 (en) 2022-10-26
GB2599186B (en) 2022-10-12
EP4064200A2 (en) 2022-09-28
GB202104063D0 (en) 2021-05-05
US11682161B2 (en) 2023-06-20
CN115115759B (zh) 2023-12-26

Similar Documents

Publication Publication Date Title
CN115115757A (zh) 光线跟踪系统中的相交测试
CN115115765B (zh) 光线跟踪系统中的相交测试
CN115115760A (zh) 光线跟踪系统中的相交测试
US20230401781A1 (en) Intersection testing in a ray tracing system using axis-aligned box coordinate components
US20240005571A1 (en) Rasterising Aliased Lines
US10861205B2 (en) Conservative rasterization using gradients
US20220350606A1 (en) Performing comparison operations using vector floating point values
CN115115759B (zh) 光线跟踪系统中的相交测试的方法、相交测试模块和介质
US20220350566A1 (en) Performing comparison operations using extended exponent range floating point values
GB2607521A (en) Intersection testing in a ray tracing system
US20230334756A1 (en) Intersection testing in a ray tracing system using offset intersection distances
GB2618213A (en) Intersection testing in a ray tracing system
GB2620819A (en) Performing operations using floating point values
CN116664748A (zh) 光线跟踪系统中的相交测试

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant