光线跟踪系统中的相交测试技术方案

技术编号:35056506 阅读:18 留言:0更新日期:2022-09-28 11:03
本申请涉及光线跟踪系统中的相交测试。用于在光线跟踪系统中执行光线相对于多个凸多边形的相交测试的方法和相交测试模块。每个凸多边形由有序顶点集合定义,至少一个顶点是用于定义两个或更多个凸多边形的共享顶点。凸多边形的顶点被投影到与光线方向正交的一对轴上,一对轴的原点对应于光线原点。顶点排序方案定义投影顶点的排序,排序独立于有序顶点集合中的顶点的排序。对于每个凸多边形,对于凸多边形的每条边,确定指示光线在边的哪一侧通过的参数,如果确定光线与边上的点相交,则基于定义边的投影顶点的排序是否与定义凸多边形的有序顶点集合中的顶点的排序匹配来确定参数。基于确定的参数来确定光线是否与凸多边形相交。形相交。形相交。

【技术实现步骤摘要】
光线跟踪系统中的相交测试


[0001]本公开涉及在光线跟踪系统中执行相交测试的技术。

技术介绍

[0002]光线跟踪是一种计算渲染技术,其用于通过通常从相机的视角在场景中跟踪光路(

光线

)来生成场景(例如,3D场景)的图像。每条光线被建模为源自相机,并通过像素进入场景。当光线横越场景时,其可能与场景内的对象相交。可对光线和其相交的对象之间的相交建模以创建逼真的视觉效果。例如,响应于确定光线与对象相交,可以针对相交执行着色器程序(即,计算机代码的一部分)。程序员可以编写着色器程序以定义系统如何对相交(所述相交例如可能导致向场景中发射一个或多个二次光线)作出反应,例如,以表示光线从相交对象的反射或光线通过对象的折射(例如,如果对象是透明或半透明的)。作为另一示例,着色器程序可以使一条或多条光线发射到场景中,以用于确定对象是否处于交点处的阴影中。执行着色器程序(和处理相关的二次光线)的结果可以是计算光线穿过的像素的颜色值。
[0003]使用光线跟踪渲染场景的图像可以涉及执行许多相交测试,例如执行数十亿个相交测试以渲染场景的图像。为了减少需要执行的相交测试的数量,光线跟踪系统可以生成加速结构,其中加速结构的每个节点表示场景内的区域。加速结构通常是分层的(例如,具有树结构),使得其包含多个级别的节点,其中靠近加速结构的顶部的节点表示场景中相对大的区域(例如,根节点可以表示整个场景),靠近加速结构的底部的节点表示场景中相对小的区域。“树节点”是指具有指向分层加速结构中的其他节点的指针的节点,即,树节点在分层加速结构中具有子节点。“叶节点”是指具有指向一个或多个图元的一个或多个指针的节点,即,叶节点在分层加速结构中不具有子节点。换句话说,加速结构的叶节点表示场景中定义一个或多个图元的区域。加速结构在不同示例中可具有不同结构,例如栅格结构、八叉树结构、空间分割结构(例如k

d树)或边界体积层次体系。节点可以表示场景中的合适形状或区域(其在本文中可以被称为“框”)。在一些示例中,节点表示场景中的轴对齐边界框(AABB)。
[0004]可以使用加速结构,通过首先测试光线与加速结构的根节点的相交(例如,以递归方式)对光线执行相交测试。如果发现光线与父节点(例如,根节点)相交,则测试可以进行到所述父节点的子节点。相比之下,如果发现光线不与父节点相交,则可以避免对所述父节点的子节点的相交测试,从而节省计算工作量。如果发现光线与叶节点相交,则可针对由叶节点表示的区域内的对象对光线进行测试,从而确定光线与哪个(些)对象相交。对象可以被表示为凸多边形。凸多边形通常是三角形,但它们也可以是其他形状,例如正方形、矩形、五边形、六边形等。如果发现光线有多于一个交点,则可以标识与光线原点最接近的交点(即,光线在场景中遇到的第一次相交),并且可以确定光线在此标识的最接近交点处相交。有可能存在光线的多个最接近命中,并且在这种情况下,可以使用一些平局决胜(tie

break)逻辑来选择多个最接近命中中的一个以用作标识的最接近交点。对于一些类型的光
线,可能不需要标识最接近的交点。例如,在处理阴影光线时,存在至少一个交点的指示是足够的,而无需确定哪一个交点最接近,并且一些API可以允许加速结构针对阴影光线的遍历响应于发现任何交点而终止,从而减少需要执行的相交测试的数量。
[0005]光线(r)可以被定义为r=O+Dt,其中O是表示光线原点的向量,D是表示光线方向的向量,并且t表示沿着光线离原点的距离。图元可以被表示为凸多边形或进一步严格而言为凸多边形。多边形(例如三角形)由有序的平面顶点集合定义,由此连续顶点对定义多边形边,并且在给定固定取向(即顺时针或逆时针)的情况下,总顶点顺序(其缠绕顺序)用于指示多边形的正面。凸多边形是没有大于180
°
的内角的多边形。严格的凸多边形是没有大于或等于180
°
的内角的多边形。定义光线的原点和方向向量以及定义凸多边形的顶点的位置可以用空间坐标系中的分量来表示。空间坐标系可以表示正在渲染的场景的世界空间,或者它可以表示放置在正在渲染的场景内的对象实例的实例空间。
[0006]为了确定光线是否与凸多边形相交,可以确定光线与包含凸多边形的平面的交点,然后可以确定该交点是否在多边形的内侧。一种通用方法是经由平行于光线方向的投影将顶点(即,世界或实例空间中的坐标)映射到平面上。如果不包含光线,则可以自由地指定平面,使得正交投影和倾斜投影都是可允许的。这将问题简化为2D问题,并且存在许多确定2D点是否在2D凸多边形内的方式。例如,在凸多边形是三角形的情况下,可以将交点变换成三角形的UV坐标,这使得相交测试变得简单。如果确定光线与多边形的边界上的点(即边或顶点)相交,则可能出现问题。特别地,通常用多个多边形,例如用多边形网格来表示对象,从而产生定义两个或更多个凸多边形的共享顶点。此外,多边形可以具有共享的边,即,两个端点都是共享顶点的边。共享顶点的一个重要类型是在封闭扇形中心处的顶点:封闭扇形被定义为由共享边连接的共享顶点的两个或更多个多边形,使得这些共享边是共享顶点作为其端点之一的唯一边。如果光线与封闭扇形的共享边上的点或共享顶点相交,则在大多数情况下,希望发现光线与多边形中的一个或多个多边形相交。如果相交测试确保与封闭扇形的共享边上的点或共享顶点相交的光线与其中至少一个多边形相交,则相交测试被描述为“严密(watertight)”。如果相交测试确保与封闭扇形的共享边上的点或共享顶点相交的光线与多边形中的一个(并且仅一个)相交,则相交测试被描述为“非冗余严密”,注意,在这种情况下,仅其边界的子集可以被认为是多边形的一部分。如果发现与共享边上的点相交的光线与零多边形相交,则其可以表现为好像多边形网格中具有孔,使得可以通过所渲染的图像中的网格看到多边形网格后面的颜色(这可以在非严密相交测试而不是针对严密相交测试的情况下发生)。例如,如果多边形网格后面的颜色与多边形网格的颜色明显不同,则这些种类的渲染误差可能非常明显。此外,如果发现与共享边上的点相交的光线与多于一个多边形相交,则在该共享边上的位置处渲染的颜色可能取决于针对相交测试多边形的顺序,使得渲染可能变得不确定。这些种类的渲染误差对于渲染图像的感知质量可能是不利的。具有非冗余严密相交测试的另外的原因包括:(i)为了避免冗余工作,以及(ii)为了避免在透明对象中由重复的相交导致的任何双重/多重命中处的阴影不连续性。通常独立于对与第二多边形相交的光线的测试来执行对与第一多边形相交的光线的测试,并且注意到,确保严密性,并且具体地,确保用于相交测试的非冗余严密性并不简单。
[0007]由于在光线跟踪系统中多次执行光线对凸多边形(例如三角形)的相交测试,因此在专用硬件模块中例如使用固定功能电路系统来实施用于执行这些相交测试的功能而不
使用在通用处理单元上执行的软件模块来实施这些相交测试可以是有益的。软件实施方案通常更加灵活,因为软件在被设计和/或创建之后比本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种在光线跟踪系统中执行光线相对于多个凸多边形的相交测试的方法,其中所述凸多边形中的每个凸多边形由有序顶点集合定义,并且其中所述顶点中的至少一个顶点是用于定义所述凸多边形中的两个或更多个凸多边形的共享顶点,所述方法包括:将所述凸多边形的顶点投影到与光线方向正交的一对轴上,其中所述一对轴的原点对应于光线原点,并且其中顶点排序方案定义投影顶点的排序,所述排序独立于定义所述凸多边形的所述有序顶点集合中的顶点的排序;和对于所述凸多边形中的每个凸多边形:对于所述凸多边形的由所述投影顶点中的两个投影顶点定义的每条边,确定指示所述光线在所述边的哪一侧通过的参数,其中如果确定所述光线与所述边上的点相交,则基于由所述顶点排序方案定义的定义所述边的所述投影顶点的排序是否与定义所述凸多边形的所述有序顶点集合中的所述顶点的所述排序相匹配来确定所述参数;和基于针对所述凸多边形的所述边所确定的参数来确定所述光线是否与所述凸多边形相交;其中对于所述凸多边形中的两个或更多个凸多边形中的每个凸多边形,所述光线被确定为与所述凸多边形的边上的点相交。2.根据权利要求1所述的方法,其中所述确定指示所述光线在所述边的哪一侧通过的参数包括使用定义所述边的所述两个投影顶点的位置的函数来确定有符号参数;并且其中所述确定所述光线是否与所述凸多边形相交是基于针对所述凸多边形的所述边确定的所述有符号参数的所述符号。3.根据权利要求2所述的方法,其中所述确定所述光线是否与所述凸多边形相交包括:如果针对凸多边形的所述边确定的有符号参数都具有相同的符号,则确定所述光线与所述凸多边形相交;并且如果不是以下情况,则确定所述光线不与所述凸多边形相交:针对所述凸多边形的所述边确定的所述有符号参数都具有相同的符号。4.根据权利要求2所述的方法,其中所述确定所述光线是否与所述凸多边形相交包括:确定所述凸多边形的具有零量值的任何边的有符号参数具有特定符号;和确定所述凸多边形的具有非零量值的边的有符号参数具有彼此一致的符号。5.根据权利要求2至4中任一项所述的方法,其中所述函数是定义边的两个投影顶点v
i
和v
j
的位置的2D叉积f(v
i
,v
j
),其被定义为f(v
i
,v
j
)=p
i
q
j

q
i
p
j
,其中p
i
和q
i
是所述投影顶点v
i
沿着所述一对轴的相应轴的分量,并且其中p
j
和q
j
是所述投影顶点v
j
沿着所述一对轴的相应轴的分量。6.根据权利要求5所述的方法,其中如果定义边的所述两个投影顶点的所述位置的所述2D叉积具有零的量值,则确定所述光线与所述边上的点相交。7.根据权利要求5或6所述的方法,其中以由定义所述凸多边形的所述有序顶点集合中的所述顶点的排序所定义的顺序,将定义边的所述两个投影顶点v
i
和v
j
提供给所述2D叉积f(v
i
,v
j
),并且其中边的所述有符号参数的符号被确定为:如果确定所述光线未与所述边上的点相交,则所述符号与f(v
i
,v
j
)的符号相同,并且如果所述光线被确定为与所述边上的点相交,则所述符号为的符号,其中根
据所述顶点排序方案,如果所述投影顶点v
i
在所述投影顶点v
j
之前,则v
i
<v
j
=1,并且其中根据所述顶点排序方案,如果所述投影顶点v
j
在所述投影顶点v
i
之前,则v
i
<v
j
=0。8.根据权利要求5或6所述的方法,其中定义边的所述两个投影顶点v
i
和v
j
以由所述顶点排序方案定义的顺序提供给所述2D叉积,使得所述2D叉积被确定为f(max(v
i
,v
j
),min(v
i
,v
j
)),其中边的所述有符号参数的符号被确定为与的符号相同,其中根据所述顶点排序方案,如果所述投影顶点v
i
在所述投影顶点v
j
之前,则v
i
<v
j
=1,max(v
i
,v
j
)=v
j
并且min(v
i
,v
j
)=v
i
,并且其中根据所述顶点排序方案,如果所述投影顶点v
j
在所述投影顶点v
i
之前,则v
i
<v
j
=0,max(v
i
,v
j
)=v
i
并且9.根据任一项前述权利要求所述的方法,其中如果确定所述光线与凸多边形的边上的点相交,则所述方法还...

【专利技术属性】
技术研发人员:P
申请(专利权)人:想象技术有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1