专利名称:用于光线跟踪中的图元相交的系统和方法
用于光线跟踪中的图元相交的系统和方法
相关串请的交叉应用
本申请要求2010年4月29日递交的、标题为“SYSTEMS AND METHODS FOR PRIMITIVE INTERSECTION IN RAY TRACING” 的美国临时专利申请号 61/329,265 的优先权并且为了一切目的通过参考的方式将该申请整体并入本文。技术领域
下文概括而言涉及例如在渲染3D场景的2D表示时可以使用的光线跟踪系统,并且更具体而言涉及用于测试光线与表面的相交的方法(“相交测试”)的改进。
背景技术:
利用光线跟踪来从3D场景描述渲染照片级的2D图像是在计算机图形领域公知的。光线跟踪通常涉及获得由几何形状构成的场景描述,其描述场景中的结构的表面,并且可以被称为图元。常见的图元形状是三角形。
从观察点(“照相机”)将虚拟光线跟踪成场景;发出每个光线以传播经过2D表示的相应像素,该光线可能对该2D表示具有影响。测试光线与场景图元的相交,以便确定每个光线的最靠近的相交图元(如果有的话)。
在确定给定光线的相交之后,与该图元相关联的着色器确定接下来发生什么。例如如果该图元是镜子的一部分,则发出反射光线以确定光是否从光源击中相交点,或者在更复杂的情况中,表面下反射,以及散射可以被建模,这可能导致相交测试出不同光线的发出。作为另一个实例,如果对象的表面粗糙而不平滑,则该对象的着色器可以发出光线来建模该表面上的漫反射。这样,找到光线与图元之间的相交是在确定是否以及什么类型的光能量可以借助给定光线到达像素时的步骤。
当发现图元与光线相交,并且要执行用于该相交的着色器时,基于在该图元上发现相交的位置来定义光线的相交点。该相交点可以作为当对该相交着色时着色器可以投射的子光线的原点。用于检测光线与表面之间的有效相交的算法仍然希望得到改进。
图I描述了在定义要渲染的场景中的对象或表面时可以使用的多个三角形图元的基于顶点的表不的实例;
图2描述了这样一种情况,在该情况中,在光线与特定表面(例如由图元定义的表面)的相交测试期间,取决于正在进行相交测试的表面与光线的相对方向,光线和边缘的相对位置可以夹在该表面的不同侧上;
图3描述了一种过程,通过该过程基于使用几何图元的边缘的相交测试过程来测试该几何图元与光线的相交;
图4和图5描述了一种情况,其中由多个图元共用相同的边缘,并且用于定义该边缘的顶点的重新排序使得沿一致的方向或者根据场景范围内的规矩来测试该边缘;
图6描述了一种通过使用顶点对中的顶点的相对位置来确定一致方向的方法;
图7描述了用于确定定义了边缘的顶点的相对优先级(precedence)或方向的总体过程;
图8描述了可以生成的数据结构并且该数据结构包括可用于一致地定向在相交测试期间使用的边缘的信息;
图9描述了可以在其中实施本文所述的方案的系统;以及
图10描述了在本文所公开的方案的实施中可以使用的示例性系统构造。
具体实施方式
下文主要涉及使用光线跟踪作为渲染3D场景的2D表示的机制。通常由设计内容如视频游戏、运动图像、动画广告、工业模型、架构特征(如建筑物)等等的艺术家创建(指定)要渲染的3D场景。艺术家可以是人或使用创作工具的人或者甚至可以自身主要是由软件驱动的。为了产生表不3D场景的内容,艺术家面临大量挑战。一方面,艺术家描述场景和在其中的对象的边界(表面)。这种物理边界的描述可以很详细。例如使用计算机辅助设计(CAD)设计的汽车的有用的模型需要汽车的组件的精确的规格以及它们彼此的空间关系。
艺术家还描述场景对象的表面应该看起来如何和如何工作。例如,汽车的准确的模型应该将窗户玻璃表示得与前灯玻璃不同、与涂漆面不同。例如在视频游戏中,艺术家将皮肤表面建模得与头发表面不同,诸如此类。
因此,在渲染领域中采用的一种构想是提供物理场景模型,并且将表面信息与该场景模型的不同部分相关联。例如,场景模型可以包含对象,该对象包括人、车辆和建筑物。 场景的物理模型将这些对象的表面描述为例如线框模型,其可以包括大量彼此互相连接的图元形状以描述表面的边界。该物理模型通常缺少关于物体的表面的视觉外观的信息。然后,将信息和编程与特定表面和/或描述它们的外观的特定表面的部分相关联。该信息可以包括表面的纹理,而与该表面相关联的编程通常意在对光打在该表面上时该表面具有什么效果进行建模。例如,编程使得能够对玻璃、闪亮表面、起伏表面等等进行建模。因此将该编程和信息与描述那些表面的物理模型的部分捆绑或相关联。例如,可以将编程与特定图元相关联或捆绑。对于特定图元或场景对象的这种编程和其他描述或它们的一部分可以一般性地称为用于该图元或对象的“着色器”。
为了清楚起见,下文的描述主要使用由简单平面形状(如三角形)的网格表示被渲染的场景对象的实例。但是,可以利用其他方法,如参数方法,如贝塞尔补丁来描述可以执行相交测试的对象。
在由该方法(例如图元的网格)定义表面(如对象的表面)的场景中,可以测试光线的相交。
可以通过使用多种相交测试中的任意一种,如重心坐标测试或 Mdller-Trumbore算法来确定光线与图元(例如三角形)之间的相交。通常以浮点进行这种测试。所有浮点计算具有有限的精度并且仅可以表示特定数字。因此,不考虑浮点测试中使用的精度,结果的表示中的不准确是不可避免的。在场景中可以相交的图元和其他对象还“存在”于3空间位置处。
因此,光线、这些场景表面以及它们之间的相交点存在于该场景中不能由给定精度的数字精确地表示的点处。不管使用单还是双精度浮点(或者甚至一些更精确的数字内插)都是这种情况,因为计算机仅有将数字表示到有限的精度的能力。至少出于数字表示的精度越高则表示该数字所需要的数据越多的实际原因来说也是这样。当处理复杂场景时,需要额外的信息字节来表示场景中的每个顶点可能导致对于该场景数据需要数十或数百兆字节的额外存储。
在光线相交测试的情况中,所导致的一种不准确是光线与图元之间的击打点可能不准确。当发现光线与表面相交时,可以使用该表面与该光线之间的相交点作为投射其他光线的原点。但是,可能并不总是检测到的光线与表面之间的每个相交都是感兴趣的相交
在场景空间中可以使用特定精度的浮点tuplet例如单精度或双精度来表示相交点。如本领域的普通技术人员已知的,可以生成相交点的重心坐标和相交距离。可以根据在边缘测试期间计算的“体积”来找到重心坐标。这些坐标被称为U、v和W。坐标的和还可以提供“d”的值,也可以通过考虑光线方向与三角形法线的点积来计算“d”。可以对输出的重心坐标进行归一化以使得un+vn+wn = I (例如un = u/d, vn = v/d,wn_w/d)。通常仅需要输出两个重心坐标u和V,因为第三个坐标是冗余的。
由于浮点数字表示和浮点计算的属性,光线与三角形图元(并且更普遍地两个或更多个相邻图元可能共用一个边缘的任意图元)的相交测试的结果可能取决于给定测试中所涉及的光线和对象的相对方向。一种特定的情形是在多个图元共用一个边缘处——例如两个三角形共用一个边缘处。有时候,在相交测试期间可能在该边缘处“发现”实际上并不存在的裂缝。下文的公开内容的一些方面涉及降低该光线相交测试期间这种类型的伪像。
总言之,相交点(子光线的原点)抽象地表不确定已与光线相交的表面上的一个点,并且理想地将作为由于着色而导致的新光线的确切原点。但是,仅可以将该点表达到有限的精度,因为计算机以有限的精度表示真实数字。当实现这些模型时,该不精确可能导致不准确和视觉伪像。因此,所存储的用于描述该点的数据可能并且确实经常具有误差,该误差使得相交点偏离所相交的场景(图元)的表面。
图I描述了可以针对与光线20的相交而测试的几何图形的示意性实例。所描绘的几何图形可以由在大量顶点之间确定的边缘组成。所描绘的顶点包括顶点I到7。当然在所描绘的7个顶点之间可以画出各种各样的边缘,并且可以强制哪个顶点将由边缘连接的规矩。可以例如部分地基于顶点的列表次序(例如列表次序可以是存储多个顶点的次序) 来确定该规矩。因此如图所示,连接顶点I和顶点2 ;依次连接顶点2和3 ;并且可以由一个边缘将顶点3连接到顶点I来形成闭合形状从而定义三角形10。为了降低存储空间要求, 可以使用三角形条带,三角形条带使得能够使用附加顶点与以前的顶点一起定义附加图元 (例如三角形)。在这里,接下来增加顶点4并且产生了三角形11。
描述了盘绕次序(WO) 22和盘绕次序(WO) 23 ;盘绕次序通常随着条带中的每个附加图元而改变。在定义图元的法线时可以使用盘绕次序。通常,图元典型地被认为具有可以由“右手法则”定义的法线,手指按照所考虑的图元的盘绕次序并且大拇指指向法线方向。
图I描述了该附加图元(基于顶点5和6增加三角形12和13)。图I还描述了6可以由其他机制如三角形条带或其他方法定义附加图元。具体而言,增加顶点7,并且顶点 7与顶点I和3结合形成三角形15,三角形15被描述为具有盘绕次序24。因此,在三角形 10与三角形15之间共用边缘25。如果边缘25被用于按照盘绕次序22所定义的来测试三角形10并且按照盘绕次序24所定义的来测试三角形15,则在三角形10与三角形15之间将沿不同方向测试边缘25。
更普遍地,可以用各种各样的方式定义要进行相交测试的场景几何图形。在边缘存在于两个几何图形元素之间的情况中,本文所述的方案的实现使得能够沿相同的方向测试边缘。边缘可以是两个顶点之间的直线或者包括任意数量的控制点的任意曲线。为了说明清楚起见,将边缘分别描绘和描述为由两个顶点定义的线段。但是,该说明不是限制性的。
图2描述了边缘25与光线20。鉴于浮点中固有的有限精度,光线20与边缘25的两个示例性的可能的交叉点30和31 (即在3D空间中随着光线20靠近边缘25,至少部分地取决于浮点算术,可以确定光线20在边缘25的任意一侧通过边缘25)。具体的相交测试方法可以具有该基于边缘的测试的不同的实现。但是在原型的实例中,该测试确定在由被测试的图元的顶点定义的平面内该光线在边缘25的哪一侧。该光线交叉点30和31都不能表示“实际的”点。但是通过沿相同的相对方向或朝向对边缘25进行测试,每当在图元测试中使用时,任意不准确变得更加一致。使得潜在的不准确更加一致就使得异常更不可能。
该公开内容公开了可用于使得沿一致的方向测试该边缘的各种各样的方法。一个实例是建立用于在两个顶点之间进行区分的全场景的规矩,以便识别给定边缘(其可以是线段或复杂曲线)的“开始”和“结束”。全场景的规矩的一个实例是建立这样一种规矩,在该规矩中将基于一个边缘两端的两个顶点的相对位置来给定该边缘的方向。该相对位置使用的一个实例是(I)基于哪个顶点沿在X坐标中具有更大(更小)的值来排序端接顶点; 如果在X中相等,则⑵在Y中排序;如果在Y中相等,则⑶在Z中排序。作为被测试的坐标平面的排序,XYZ坐标平面是示例性的。该实现是为了建立用于对场景进行测试要遵守的规矩(该规矩可以随着场景而改变,只要在相同的规矩下测试相同的边缘,但是为了清楚起见,假设一旦建立了该规矩就将遵守该规矩。)
参考图3来描述可以在其中实施该方法的环境。图3描述了顶点数据的源50以及图元定义数据的源52。根据该数据源,对将要被用作为到相交测试的输入的边缘的定义定义为54 (例如如针对图I所述的)。在测试该边缘之前,基于定义要测试的边缘的末端的顶点之间建立的优先级来定向(56)边缘。此后,测试(58)该边缘。在一些情况中,该边缘测试的结果可能指示无法与被测试的图元(例如图元15的测试边缘25)相交。如果这样, 那么可以测试(64)下一个图元,可以从源52获得该下一个图元的图元定义数据。但是,如果不能确定没有相交,则仍然不能确定肯定的相交(例如因为有更多边缘待测试),并且因此,可以进行测试以确定是否有更多边缘待测试(62)。如果不是,那么测试(64)下一个图元。如果仍有更多的边缘,则可以使得定义(54)下一个边缘。不同的实现可以并行测试边缘。更不同的实现可以用相同的边缘测试多个光线。
图4和5描述了可以如何定向边缘的更加精细的视图,其中可以将图5中所描绘的方法与图4中所描绘的方法对比。图4描述了顶点流70向边缘选择器/定义器75提供输入,边缘选择器/定义器75接收控制输入71。边缘选择器75的输出是顶点对的流,每个顶点对定义将要由边缘测试器109测试的边缘。识别用于定义三角形10的边缘和三角形 15的边缘的顶点。注意到(由顶点I和3定义的)边缘25根据顶点的不同方向被测试了两次。图5的方法在边缘选择器/定义器75的输出提供顶点优先级检查器/重排功能体 112( “重排功能体112”)。因此,检查器/重排功能体112的输出显示切换到顶点3和顶点I中的一个,从而每次测试边缘25时沿相同的方向进行测试。
作为边缘选择器75的复用器的描述仅仅是说明性的,并且可以提供用于重排顶点以维持一致的边缘方向的各种各样的方法。并且,可以在功能固定的硬件或运行在硬件上的软件中实现复用功能。针对该复用的控制信息可以来自例如一个或多个维度中的最小 /最大排序,来自与一组顶点中的一个顶点相关联的比特或者通过选择优先级或排序来建立一组顶点的优先级并且随后当对该组顶点定义的图元进行相交测试时实施该优先级。
在相对于三角形并发测试多个光线或者相对于光线并发测试多个三角形的架构中可以实现相交测试。在这里,并发包括对于一个图元相交测试所计算的一些值可以重新用于另一个图元相交测试。该测试方法可能具有效率优势,因为可以一次性完成或者共享计算的一部分。关于如何复用三角形测试可能存在各种各样的置换,并且本领域的普通技术人员可以基于本文的公开内容将上述方案应用于这些置换。
图6描述了重排功能体112的一个示例性实现。在图6中,重排功能体112加载 (150)表示一个边缘的两个顶点的第一坐标值。在该实例的其余部分中,为了清楚起见,使用一个使用笛卡尔坐标系的实例,但是该实例不是暗示对于坐标系的任意限制。利用笛卡尔实例,加 载X坐标值(更一般性而言,可以按照任意次序测试任意坐标的值)。如果第一顶点的X坐标大于第二顶点(151),则首先提交(152)第一顶点(例如其被认为是该边缘的开始),并且如果第二顶点的X坐标更大(154),则提交(155)第二顶点作为该边缘的开始。因此,可以根据需要按照次序交换顶点。否则(如果X值相同),则加载(156)下一个轴(例如Y轴)的值,并且重复比较151和155。类似地,如果在比较(154)处不提交(155) 第二顶点,则加载Z轴值。当然,图6描述了一种实现。另一种实现可以同时测试所有轴的值并且使用投票;另一种实现可以基于例如顶点的值得到哈希值。本领域的普通技术人员将能够基于这些实例想到更进一步的实现。
更一般性而言,图7描述了一种方法,在该方法中输入(181)作为至少两个图元的定义的分量的顶点(例如这些图元共用一个边缘)。如下所说明的可以通过API进行该输入,并且可以由该API功能批处理多个图元。识别(182)具有优先级的(分别对于多个顶点对具有优先级的)顶点(或多个顶点)。如果成批(预处理)而不是在运行时间相交检测期间执行该识别,则可以将诸如优先级比特的信息与用于定义边缘的顶点对的顶点相关联。在一些实现中可以仅对于自然的或正常的顶点优先级要被逆转的那些边缘存储该优先级比特。当使用边缘进行相交测试时,根据需要基于全场景的规矩或基于优先级信息重排 (184)顶点。
图8描述了可用于定义形状的数据结构191的实例。数据结构191可以包括顶点定义数据192-194和边缘定义数据195。可以根据相交测试器将如何使用数据来设计数据结构191。例如,相交测试器可以默认进行操作以解释数据结构191,从而在所定义的每个顶点之间存在边缘。作为进一步的实例,相交测试器可以按照基于该数据结构中的顶点的排序的次序默认测试边缘。在该实例中,边缘定义数据195可以包括每个边缘的比特字段,用于指示是否应该按照与默认方向相反的方向测试该边缘。当然,可以提供各种各样的数据结构和用于定义图元或者根据一组顶点确定边缘的其他机制,并且其根据实现而变化。
如上文所说明的,优先级确定主要用于定义相交测试期间顶点的次序,即使从例如几何图形单元提交或者被存储在存储器中的顶点的次序可能未改变或未受影响。在其他实例中,该优先级信息可以被存储或用于在提交之后重排顶点并且如此存储。该实例可能需要更多的存储器使用,因为图元的正常方向(盘绕次序)也可能需要由存储器中存储的数据定义。实例可以包括假设默认盘绕次序和优先级,并且当它们对于特定边缘不一致时, 指示与该边缘或顶点对相关联的比特的不一致。
图9描述了可以通过API 197提供的、用于定义场景的数据(例如顶点和边缘数据)的源192。API 197可以执行如本文所述的顶点优先级确定(优先级确定器194)。优先级确定器的输出可以提供随后可以被相交测试器199使用的输入。典型地将间接提供该输入,因为优先级确定器194将通常对成批的场景数据进行操作,如上文所说明的。可选择地,相交测试器199可以具有预处理器198以执行该优先级确定。在一些方案中,确定器 194可以添加与边缘(例如与作为该边缘的定义的一部分的顶点)相关联的比特。可以由预处理器198使用该添加的比特来确定边缘方向或定义该边缘的一个顶点相对于另一个顶点的优先级,以便在相交测试期间使用。可选择地,作为实例,预处理器198可以实现如针对图4-6所述的顶点场景空间排序方法。·
图10描述了可以在其中实现所公开的方案的一个示例性系统200。系统200包括计算资源201,计算资源201包括多个内核202a-202n,其中每个内核用于识别计算资源 201的多个逻辑上和/或物理上独立的子单元,其中每个子单元可以用于执行可能使用来自计算机可读介质的代码硬编码和/或配置的操作。例如每个内核202a-202n可操作来并发执行多个计算线程。计算资源201可操作来与高速缓冲存储器215通信,高速缓冲存储器215表示一个或多个快速访问存储器组件并且可以被分配给内核202a-202n中的相应内核、被共享或者分配和共享的组合。内核202a-202n中的每一个可以具有它们自己的高速缓冲存储器,该高速缓冲存储器可以是私有的或与一个或多个其他内核共享的。还可以向内核202a-202n提供图形或流计算内核(203)。
I/O接口 225提供到非易失性存储器235的通路,非易失性存储器235的实例包括一个或多个硬盘驱动器、闪存驱动器、DVD或高清存储介质。接口 225还提供一个或多个网络接口 240,其可以包括例如以太网和802. 11无线网络能力、蓝牙等等。接口 225还提供到用户接口 245的通路,用户接口 245可以包括鼠标、键盘、麦克风、触摸屏输入等等。系统 200还包括RAM 230,其与计算资源201通信并且可用于存储比存储器235中所存储的代码和数据更频繁地被使用的代码和数据。系统200还包括统一地由210标识的一个或多个显示控制器和显示器。在一些情况中,内核202a-202n或流计算203中的一个或多个可以物理上位于具有其他显示控制逻辑的图形卡上,并且相反地,显示控制器210在功能上可以与计算资源201共处。
在一些情况中,可能优选将当前正被相交测试的光线存储在高速缓冲存储器215 中,而当需要时从RAM 230拿取用于测试的图元。可以将着色器与纹理数据一起存储在RAM 230中。每个内核202a-202n可以被指定为执行相交测试或着色,或者在一些情况中可以执行相交和着色操作的组合。
可以利用渲染应用例如视频游戏、计算机辅助设计或动画包装等等,将API 197 存储在存储器235中并且加载到RAM 230 (或RAM 230与高速缓冲存储器215的组合)中。 API 197还可以访问适用于特定系统实现的代码和/或硬件,以实现上述调用。
如本文所公开的,通过将用于建立由顶点数据定义的顶点之间的优先级的一个或多个比特包括在给定的数据结构或顶点流中,可以实现沿一致的方向测试边缘的示例性方法。另一个示例性方法是基于三维空间的任意一个或多个维度中的最小/最大值,给予(给定顶点对的)一个顶点相对优先级(例如将优先级赋予沿给定方向或者沿给定轴具有最低 (最高)值的顶点)。
总而言之,可以利用多种计算资源实现本文所述的功能、特征和其他逻辑中的任意一个。计算资源可以是线程、内核、处理器、固定功能处理元件等等。也可以将不是本说明书主要关注的其他功能提供或实现为可以位于一个计算资源中或者分布在多个计算资源之间的过程、线程或任务(例如分布在多个物理计算资源之间的多个线程)。
类似地,用于相交测试的计算资源还可以主控其他过程如用于对所检测到的相交进行着色的着色过程。作为进一步的实例,如果内核可以支持多个线程,则一个线程可以专用于着色而另一个线程可以专用于相交处理。
可以将用于任意方法的代码存储在计算机可读介质中,如固态驱动器、硬盘驱动器、CD-ROM和其他光存储装置,并且暂时存储在易失性存储器如DRAM中。计算机可执行指令包括例如使得或以其他方式配置通用计算机、专用计算机或专用处理设备以执行特定功能或功能组的指令或数据。计算机可执行指令可以是例如二进制数、中间格式指令如汇编语言、或源代码。可以将本文所述的API的一些方面实现为过程、功能或对该过程和功能的调用。这些描述不暗示对于可以用于实现或提供本文所述的通过这些过程或功能可获得的功能的编程方法的限制,只要软件、硬件或它们的混合向程序员提供通过它们的接口访问该功能的能力。对于特定编码概念提供了各种名称。这些名称不是暗示在实现中需要将执行这些功能的代码命名为什么,并且不是暗示对于如何实现这些概念的限制。
仅通过说明而非限制性的方式提供上文所述的各种实例。例如仅给出了光线跟踪行为的有限实例,并且可以理解实际实现涉及更多光线并且通常并发处理它们。可以从该观点改编并且理解本文的公开内容。另外,所示系统的独立的方框或所示的独立的功能元件不是暗示需要这些功能物理独立,因为元件之间的通信可以借助消息收发、功能调用、共享存储空间等等来发生而无需任何这种物理独立。更一般性而言,本领域的普通技术人员将能够将于编程语法有关的公开内容应用到各种其他光线跟踪/光线着色实现,并且从该系统、方法和用于说明它们的实例的其他公开内容中不存在对于它的应用的暗示的限制。
权利要求
1.一种系统,包括相交测试单元,用于测试光线与被光线跟踪的3D场景的图元的相交,其中所述图元由顶点数据定义,所述顶点数据能够在多个图元的定义之间共用;以及所述相交测试单元的输入预处理器,可操作来接收要被提交给所述相交测试单元的顶点,并且确定提交所述顶点的次序,通过执行如下规则来确定所述次序当对两个或更多个图元中的任一图元进行相交测试时总是沿相同的方向测试在那些图元之间共用的边缘,而不管所述输入预处理器接收定义所述边缘的所述顶点的次序。
2.根据权利要求I所述的系统,其中所述规则包括基于所述顶点在场景空间中的相对位置定向所述边缘。
3.根据权利要求2所述的系统,其中所述输入预处理器可操作来通过使用所述场景空间的一个或多个坐标轴的相应的值来排序所述顶点,确定所述顶点在场景空间中的相对位置。
4.根据权利要求2所述的系统,其中所述规则包括基于在所述场景空间的所选择的轴中哪个顶点具有最小值或最大值,来定向所述边缘。
5.根据权利要求2所述的系统,其中所述规则包括基于确定所述顶点在空间的任意一个或多个场景维度中的最小值/最大值,来定向所述边缘。
6.根据权利要求4所述的系统,其中根据所确定的次序按顺序选择3D场景空间的每个轴,并且确定针对所述轴排序的直到最小值或最大值为止的顶点。
7.根据权利要求I所述的系统,其中所述输入预处理器可操作来在建立阶段接收所述顶点,确定定义所述边缘的顶点的相对次序,并且将标志与所述边缘相关联,其中所述相交测试单元可操作来解释所述标志,并且如果所述标志指示重排所述顶点则响应地重排所述顶点。
8.根据权利要求I所述的系统,其中所述相交测试单元可操作来执行三重半平面测试和无符号体积测试中的一种。
9.一种用于在光线跟踪中使用的计算机实现的方法,包括在光线相交测试组件中测试光线与由多个曲线定义的表面的相交,其中所述曲线至少部分地由向所述光线相交测试组件提交的顶点对定义;在预处理组件中,输入要向所述光线相交测试组件提交的顶点对,所述顶点对的输入发生多次;确定所述顶点对中的顶点的恒定相对次序,其中每当向所述光线相交测试组件提交所述顶点对时保存所述恒定相对次序;并且按照所确定的恒定相对次序向所述光线相交测试组件提交所述顶点对。
10.根据权利要求9所述的方法,其中所述表面是由多个线段定义的第一图元,并且所述多个线段中的至少一个线段与第二图元共用。
11.根据权利要求10所述的方法,其中所述第一图元和所述第二图元来自不同的三角形条带。
12.—种计算机实现的方法,包括从有形计算机可读介质输入定义由将要被光线相交测试的至少两个图元共用的边缘的线段的定义数据;在计算元件中确定所述线段的方向;使用所述线段的方向、所述线段的定义数据以及所述光线的定义,测试所述至少两个图元的光线相交;并且输出对于所检测到的涉及所述光线的相交的指示。
13.一种制品,包括有形计算机可读介质的一个或多个元件,可以集中地存储计算机可执行指令,包括以下指令用于实现光线相交测试过程的指令,其中所述光线相交测试过程使用定义有限表面的边缘来测试所述有限表面与光线的相交,其中至少部分地由定义每个边缘的末端的顶点对来定义所述边缘,用于实现场景几何图形输入过程的指令,所述场景几何图形输入过程可操作来接受定义所述边缘的顶点,并且识别定义要沿与默认方向相反的方向测试的边缘的末端的顶点对,并且生成指示将要沿所述相反的方向测试由所述顶点对定义的所述边缘的指示,以在所述光线相交测试过程中使用。
14.根据权利要求13所述的制品,其中向所述场景几何图形输入过程提供与作为要被相交测试的场景几何图形的源的程序进行接口的应用编程接口,并且所述应用编程接口被编程为生成与将要沿所述相反的方向测试的所述边缘相关联的比特,并且所述光线相交测试过程可操作来响应于检测到与所述边缘相关联的所述比特,重排所述边缘的顶点。
15.根据权利要求13所述的制品,其中所述场景几何图形输入过程可操作来接收顶点对的流,每个顶点对定义相应的边缘,并且基于每对顶点在3D场景中的相对位置数据重排违反了对于正在被渲染的3D场景建立的规矩的顶点对,从而使得沿一致的方向测试每个边缘,而不管定义所述边缘的顶点被流式输入到所述场景几何图形输入过程中的次序。
16.根据权利要求13所述的制品,其中所述光线相交测试过程被编程为一次测试多个光线与单个图元的相交。
17.根据权利要求13所述的制品,其中所述光线相交测试过程被编程为一次测试多个光线与单个边缘。
18.根据权利要求13所述的制品,其中所述光线相交测试过程包括利用单个光线一次测试多个图元。
全文摘要
各个方面包括用于实现与在相交测试期间增加结果的一致性相关的方法的系统、方法和介质。在一个实例中,顶点定义构成场景的图元的边缘(例如三角形定义3D场景中的对象的表面的网格)。边缘可能在两个图元之间共用。相交测试算法可以使用涉及边缘的测试来确定光线是否与由那些边缘定义的图元相交。在一个方法中,对于该相交测试,在定义特定边缘的顶点之间实现优先级。该优先级使得相交测试器总是沿相同方向测试给定边缘,而不管(至少部分地)由该边缘定义的哪个物体正在被相交测试。
文档编号G06T15/06GK102947865SQ201180021409
公开日2013年2月27日 申请日期2011年4月28日 优先权日2010年4月29日
发明者S·普尔塞尔, C·P·A·塔恩, J·R·雷德格拉韦, C·奥茨达斯 申请人:柯斯提克绘图公司