用于光线追踪渲染的并行相交测试及着色的架构的制作方法

文档序号:6593624阅读:449来源:国知局
专利名称:用于光线追踪渲染的并行相交测试及着色的架构的制作方法
技术领域
本发明总体上涉及对三维场景的二维表现(!^presentation)进行渲染 (rendering),更具体地说,涉及使用光线追踪来对场景的、照片般逼真(photo-realistic) 的二维表现进行加速渲染。
背景技术
利用光线追踪来渲染照片般逼真图像在计算机图形领域是公知的。已知的是,因 为光线追踪可以对与场景的元素相互作用的光的物理行为进行建模,所以,光线追踪用于 生成照片般逼真图像,包括逼真阴影和照明效果。然而,还已知的是,光线追踪在计算上强 度较高,而且目前,甚至最先进的图形工作站的状态也仍然需要耗费大量的时间,以利用光 线追踪来对复杂的场景进行渲染。光线追踪通常涉及以下处理获取由描述了场景中的结构表面的几何图元 (primitive)(如三角形)所组成的场景描述;并且,通过从摄像机开始追踪光线,并且通过 与场景对象的各种潜在相互作用、直到在光源终止或者没有与光源相交而退出场景为止, 来对光怎样与场景中的图元相互作用进行建模。例如,一个场景可以包括街道上的汽车,在该街道任一侧上存在有建筑物。这种场 景中的汽车可以用逼近连续表面的大量三角形(例如,一百万个三角形)来定义。定义了 观看该场景的摄像机位置。从摄像机投射的光线通常被称为原生光线(primary ray),而从 一个对象向另一对象投射(例如,使得能够反射)的光线通常被称作次生光线(secondary ray)。将具有选定分辨率(例如,针对SVGA显示器为1024X768)的图像平面设置在摄像 机与场景之间的选定位置处。简单的光线追踪算法涉及将来自摄像机的一条或更多条光线通过图像的各个像 素投射到场景中。接着,针对组成场景的各个图元来测试各条光线,以标识出该光线相交的 图元,接着,确定该图元针对该光线产生的效果(例如,反射和/或折射)。这种反射和/或 折射会导致光线沿其它方向前进,和/或划分成可以采取不同路径的多条次生光线。接着, 针对场景图元来测试全部这些次生光线,以确定这些次生光线所相交的图元,并且,该过程 递归进行,直到次生(和三生(tertiary)等)光线例如离开场景或碰撞(hitting)光源为 止。在确定了全部这些光线/图元相交时,创建映射它们的树。在光线终止之后,通过该树反向追踪光源的贡献,以确定其针对场景像素的效果。容易理解的是,对(例如)1024X768 条光线与数百万个三角形的相交进行测试的计算复杂度在计算上较高-并且这种光线数 量甚至没有包括作为与相交光线的物质相互作用的结果而产生(spawned)的全部附加光 线。
因为可以将针对生成图像的各个像素按照与该图像的其它像素无关的方式累积 所累积的颜色信息,所以,将利用光线追踪来渲染场景称为“令人为难的并行问题”。因而, 尽管在输出最终图像之前可存在针对像素的特定过滤、插值或其它处理,但是,可以并行地 确定图像像素的颜色信息。因此,容易通过将像素划分成在多个处理资源中渲染并且并行 执行对这些像素的渲染,来在指定的处理资源集上划分对图像进行光线追踪的任务。
在某些情况下,处理资源可以是支持多线程的计算平台,而其它情况可涉及通过 LAN链接的计算机群、或计算内核群。对于这些类型的系统来说,可以实例化指定处理资源 (例如,线程),用于通过完成相交测试(intersection testing)和着色(shading)来处理 指定光线或光线组。换句话说,利用可以彼此独立地渲染像素这一特性,可以在要相交测试 的线程或处理资源之间划分已知的有助于不同像素的光线,接着对那些相交着色,将这种 着色计算的结果写入至屏幕缓冲器,用于处理或显示。
已经提出了致力于解决这类问题的一些算法方法。Matt Wiarr等人在“Rendering Complex Scenes with Memory-Coherent Ray Tracing,,Proceedings of SigGraph (1997) (下面简称“Wiarr”)中公开了这样的方法。Wiarr公开了将要光线追踪的场景分成几何图 形体元(geometry voxel),其中,各个几何图形体元都是包围场景图元(例如,三角形)的 立方体。Wiarr还公开了叠加安排(scheduling)格栅,其中,该安排格栅中的各个元素都 是可以交叠该几何图形体元的某一部分的安排体元(即,安排体元还是场景中的、可与几 何图形体元的立方体相比不同地尺寸化的测定体积的立方体)。各个安排体元都具有关联 光线队列,该队列包括当前在该安排体元内部的光线(即,这些光线被包围在该安排体元 内),并包括与哪个几何图形体元同该安排体元交叠有关的信息。
Wiarr公开了当处理安排体元时,对关联队列中的光线与被安排体元包围的几何 图形体元中的图元的相交,进行测试。如果发现光线与图元之间的相交,则执行着色计算, 这可以获得添加至该光线队列的所产生光线。如果在该安排体元中没有发现相交,则该光 线前进至下一个非空安排体元,并且被放置在该安排体元的光线队列中。
Wiarr公开了这种方法的优点在于,帮助场景几何图形与在通常设置在通用计算 机的高速缓冲存储器相配合,使得如果各个安排体元内的场景几何图形可以与高速缓冲存 储器相配合,则该高速缓冲存储器在对光线与该场景几何图形的相交测试期间不会多次反 复(thrash) 0
而且,Pharr公开了通过将在安排体元中测试的光线排队,当将图元获取到几何图 形高速缓冲存储器中时,可以针对它们执行更多工作。在可以紧接着处理多个安排体元的 情况下,安排算法可以选择以下这种安排体元,该安排体元使得需要加载到几何图形高速 缓冲存储器中的几何图形的量最小化。
Wiarr认识到,如果特定场景的复杂度不均衡(即,场景的某些部分中的图元的 密度更高),则所提出的规则安排格栅不能很好执行。Wiarr假设可以使用诸如八叉树 (octree)的自适应数据结构,来代替规则安排格栅。八叉树通过使得按每一级层级沿场景的各个主轴(即,x、y以及ζ轴)进行细分,而在三维场景中引入了空间细分(spatial subdivision),使得八叉树细分获得8个较小的子空间,其皆可以被分成8个更小的子空间 等。按各个子空间,设置划分/非划分标志,该标志确定了该子空间是否要进一步划分。针 对细分来表示这种子空间,直到该子空间中的图元的数量低得足够进行测试为止。因而,对 于八叉树来说,可以根据场景的特定部分中的图元数量来控制细分的量。这样,八叉树允许 改变要渲染空间的测定体积的细分程度。
在授予Pfister的美国专利No. 6,556,200中公开了 一种类似方法(简称为 “Pfister”)。Pfister还公开了将场景分区成多个安排块。针对各个块设置光线队列,并且 各个队列中的光线都利用相关图(cbpendency graph)在空间上且在时间上进行排序。根 据相关图中定义的次序通过各个安排块来追踪光线。Pfister引用Wiarr文,并且增加了 Wiarr希望对超过一种单一类型的图形图元(例如,不仅是三角形)进行渲染,并且针对安 排块设计了更复杂的安排算法。Pfister还设想了按存储器层级中的多个高速缓存级来将 场景几何图形的子部分进行分段。
另一方法称为“包追踪(packet tracing) ”,并且针对这种包追踪的共同引用 是 Ingo WalcUPhillip Slusallek、Carsten Benthin 等人的 “Interactive Rendering through Coherent Ray Tracing" (Proceedings of EUROGRAPHICS 2001, pp 153-164, 20(3), Manchester, United Kingdom (Sep. 2001)) 在这个参考文献中,包追踪涉及通过 格栅来追踪具有类似起源和方向的光线的包。这些光线从大致共同的格栅位置发送,并且 沿大致类似的方向行进,使得大部分光线通过共同格栅位置。因而,包追踪需要对来自类 似起源的、沿类似方向行进的光线进行标识。针对这种包追踪的另一变型例是使用视锥 (frustrum)光线来包围光线包的边缘,使得将视锥光线用于确定哪些体元相交,这有助于 缩减针对指定光线包的计算量(即,不是对全部光线进行相交测试,而是仅测试该包的外 边缘上的那些光线)。包追踪仍需要对源自类似位置并且沿类似方向前进的光线进行标识。 随着光线在光线追踪期间反射、折射、以及/或生成,这种光线可能愈加难于进行标识。
在加速光线追踪领域仍存在其它方法;一种方法试图通过光线状态的更多活动管 理而改进高速缓冲存储器利用。Navratil等人的“Dynamic Ray Scheduling for Improved System Performance,,(2007IEEE Symposium on Interactive Ray Tracing, (Sep. 2007) (Navratil))弓丨用Wiarr,描述了 Wmrr的算法具有“光线状态激增(explosion),,的弱点, 这使得Pharr不适于主存储器至处理器高速缓冲存储器通信。为解决这个问题,Navratil 提出了在光线追踪期间通过设定针对“活动地管理”光线状态和几何图形状态而设计的限 制,来避免“光线状态激增”。一项提议是单独地追踪生成的光线,因而,Navratil公开了首 先追踪原生光线,接着在完成原生光线之后追踪次生光线等。
上述背景技术示出了在基于渲染的加速光线追踪领域中流行的各种构想和方法。 而且,这些参考文献示出了在光线追踪领域中存在的进一步改进。然而,所讨论的这些参考 文献和技术中的任一个都不是表示或暗示这些参考文献中的任一个或它们的主旨是针对 本申请中所公开的任何主旨的现有技术。相反,这些参考文献在于帮助示出利用光线追踪 来渲染的方法中的差异。而且,为了简洁,将这些参考文献中的任一个的论述进行了必要简 化,而非穷尽的。发明内容
在一个方面,提供了在对3-D场景的2-D表现的光线追踪中使用多个计算资源的 方法。该方法包括以下步骤将计算资源第一子集用于对包括一个或更多个图元和几何图 形加速元素的几何形状与在3-D场景中行进的光线进行相交测试。该第一子集中的各个计 算资源都可操作用于与存储有所述在场景中行进的光线的相应子集的相应本地存储器资 源进行通信。该方法包括以下步骤将对光线与图元之间的相交的指示从计算资源的第一 子集传送至计算资源的第二子集,并且将计算资源的第二子集用于执行和所标识出的、光 线与图元之间的相交相关联的着色例程;来自着色例程的输出包括要相交测试的新光线。 子集中的成员可以随时间而变,或者根据系统配置而静态地确定,或者在在对场景或一系 列场景进行渲染期间重新配置多个点期间确定。
该方法还包括以下步骤在多个本地存储器资源中分布定义新光线的数据,并且 向计算资源的第一子集传送分组的光线标识符与形状数据。各个光线标识符都包括与针对 该光线的光线定义数据不同的数据。传送的光线标识符激活了对所标识出的光线与由该形 状数据指示的形状的相交测试。该测试包括,通过各个计算资源来获得存储在其本地存储 器中的、定义所标识出的光线的数据,基于获得的光线定义数据来测试与所指示的形状的 相交,以及输出对检测到的相交的指示,用于传送。
另一方面包括利用光线追踪来对由多个图元组成的3-D场景的2-D表现进行渲染 的系统。该系统包括能够访问(having access to)相应高速缓冲存储器的多个相交测试 资源;这些相应高速缓冲存储器存储原版(master copy)光线定义数据的子集,针对各条 光线的光线定义数据保持在高速缓冲存储器中,直到完成了对该光线的测试为止。
该系统还包括控制逻辑,该控制逻辑可操作用于向各条光线指定标识符,并且通 过能够访问在相应高速缓冲存储器中的、针对该光线的定义数据的相应测试资源来控制测 试各条光线。该测试控制通过向存储针对要测试光线的数据的相应测试单元提供光线标识 符来实现。该系统包括输出队列,该输出队列用于对已经完成相交测试的光线和相交的相 应图元进行标识。该控制逻辑指定由着色计算而产生的新光线,以替换高速缓冲存储器中 的、已经完成相交测试的光线。
在一些方面,可以提供以下中的一个或更多个该控制逻辑设置为通过将针对已 完成光线的标识符重新用作针对新光线的标识符来进行替换,光线标识符涉及存储定义该 光线的相应数据的存储器位置,并且定义新光线的数据替换存储在已完成光线的存储器位 置中的数据。
其它方面包括一种利用光线追踪来对由多个图元组成的3-D场景的2-D表现进行 渲染的系统。该系统包括存储组成3-D场景的图元的存储器和多个相交测试资源。各个相 交测试资源都可操作用于对在该场景中行进的至少一条光线与至少一个图元的相交进行 测试,并且输出对检测到的相交的指示。该系统还包括多个着色器资源,各个着色器资源都 可操作用于根据对检测到的光线/图元相交的指示来运行与图元相关联的着色例程。该系 统还包括用于向着色器资源输出对检测到的相交的指示的第一通信链路,和用于向相交测 试资源发送由运行着色例程而产生的新光线的第二通信链路,其中,可以将新光线发送至 相交测试资源,并且按照与发送新光线的相对次序不同的次序来完成相交测试。这些通信 链路可以被实现为队列,如FIFO队列。
其它方面包括一种在具有多个计算资源的系统中对由多个图元组成的场景进行 光线追踪的方法,其中,各个计算资源都连接至包括主存储器和分布在多个计算资源当中 的存储器的分层存储器结构,其中,该主存储器在延迟上比分布式存储器高。该方法包括以 下步骤在分布式存储器当中分布对要在该场景中相交测试的多条光线进行定义的数据, 使得将这些光线的子集存储在分布式存储器中的不同存储器中;并且进行确定以对光线组 与一个或更多个几何形状进行相交测试,该组的成员存储在多个分布式存储器中。该方法 包括以下步骤从主存储器获取定义所述一个或更多个几何形状的数据;并且向与存储有 针对该组光线的数据的各个分布式存储器相关联的、至少一个计算资源提供该几何形状和 针对该组光线的标识符。该方法还包括以下步骤利用与和存储有针对所述组的数据的分 布式存储器中的至少一个存储器相关联的计算资源,来对该光线组中的各个光线进行相交 测试;并且从该计算资源收集相交测试结果。
其它方面包括一种用于对光线与组成3-D场景的图元进行相交测试的系统。该系 统包括多个相交测试资源,各个相交测试资源可操作用于对相应光线与几何形状的相交进 行测试。各个相应光线都用向各个相交测试资源提供的引用来指示,并且该测试资源可操 作用于向第一输出部或第二输出部输出对光线与几何形状之间的相交的指示。
一个输出用于图元相交,而另一输出用于几何图形加速元素相交。例如,第一输出 部可以向多个着色资源提供输入,并且用于指示光线与图元之间的相交,而第二输出部向 光线集合管理器提供输入,并且接收对光线与几何图形加速元素之间的相交的指示。
其它方面包括一种光线追踪方法,该方法包括以下步骤在主存储器资源中存储 组成3-D表述的多个图元和分别包围对这些图元的选择的几何图形加速元素;定义要在场 景中相交测试的光线;以及定义针对各条光线的标识符。该方法包括以下步骤在包括多 个可单独编程的处理资源的系统中,在分别与各个处理资源相关联的本地存储器资源中存 储光线起源和方向数据的一部分。该方法还包括以下步骤通过向处理资源提供针对安排 用于测试的光线的标识符和对几何形状的指示,来执行对用于相交测试的光线的安排。各 个处理资源都确定其本地存储器资源是否存储有针对任一条标识光线的光线定义数据,并 且,如果有,则对所述光线与所指示的几何形状的相交进行测试。
其它方面包括计算机可读介质/媒体,其包括用于一个系统的机器可读指令,该 系统用于控制多个处理资源来实现对几何形状与供在渲染3-D场景的2-D表现中使用的光 线的相交测试。该指令用于实现一个方法,该方法包括以下步骤访问针对被确定为与包围 了第一选择的图元的第一几何图形加速元素相交的光线的标识符的包;并且确定包围了被 第一几何图形加速元素所包围的图元的部分的其它几何图形加速元素。该方法还包括以下 步骤实例化多个包,各个包都包含光线标识符,并包括对其它几何图形加速元素中的不同 元素的相应指示;并且向分别被设置用于对比各个包中标识的全部光线更少的光线进行相 交测试的、多个计算资源中的各个计算资源提供所述多个包。该方法还包括以下步骤从所 述多个计算资源接收对检测到的相交的指示;并且根据几何图形加速元素来追踪接收到的 指示,直到标识出具有大于接收到的指示的阈值数的下一个几何图形加速元素为止;以及 重复对下一个包的访问。
其它方面包括一种光线追踪系统,该光线追踪系统包括被设置用于对形状与光 线进行相交测试的多个计算资源,并包括与各个计算资源连接的相应高速缓冲存储器,其中,各个高速缓冲存储器都存储有定义在场景中行进的多条光线中的一些光线的数据;以 及用于在所述多个计算资源之间传送消息的信道,其中,各个计算资源都被设置用于将由 其接收到的消息中的数据解释为包含多个光线标识符,用于确定其高速缓冲存储器是否具 有存储在其中的所述多条光线中的任一条,并且被设置成使用所关联的形状来测试任何存 储的光线。
其它方面包括一种用于对光线与组成3-D场景的图元进行相交测试的系统。该系 统包括多个相交测试资源,各个相交测试资源都可操作用于对相应光线与几何形状的相交 进行测试。该相应光线由向各个相交测试资源提供的引用来指示。各个相交测试资源还被 设置用于向第一输出部或第二输出部输出对光线与图元之间的相交的指示。该系统还包 括多个着色资源,各个着色资源都可操作用于执行针对检测到的相交的着色代码;和光 线集合管理器,该光线集合管理器可操作用于保持针对光线的引用并且可操作用于向所述 多个相交测试资源提供光线引用,以指示要测试的光线。第一输出部向所述多个着色资源 提供输入,并且接收对光线与图元之间的相交的指示,而第二输出部向光线集合管理器提 供输入,并且接收对光线与几何图形加速元素之间的相交的指示。
其它方面包括供在基于光线追踪的对3-D场景的2-D表现进行并行渲染中使用 的计算配置,其包括连接至本地高速缓冲存储器的处理器,该本地存储器被设置成存储定 义用于与指定几何形状相交的多条要测试光线的数据;和由该处理器服务的输入队列,在 该输入队列中接收到的数据可被该处理器解释为包括针对用于与所指示几何形状相交的 要测试光线的多个标识符,该处理器被设置成获得仅针对在其队列中标识的任何光线的定 义数据,对于该队列来说具有存储在处理器的本地高速缓冲存储器中的数据,被设置成对 任何这种光线与所指示几何形状进行相交测试,并被设置成输出对任何检测到的相交的指7J\ ο
其它方面包括计算机可读介质,其包括用于实现光线追踪方法的机器可读指令, 该光线追踪方法包括以下步骤访问针对被确定为与包围对图元的选择的几何图形加速元 素相交的光线的标识符的包;并且确定包围了由相交的几何图形加速元素所包围的图元的 一部分的其它几何图形加速元素。该方法还包括以下步骤实例化多个包,各个包都包含光 线标识符并包括对其它几何图形加速元素中的不同元素的相应指示;并且向分别被设置用 于对各个包中标识的光线进行相交测试的多个计算资源中的各个计算资源提供所述多个 包。该方法还包括以下步骤从所述多个计算资源接收对检测到的相交的指示;并且根据 几何图形加速元素来追踪接收到的指示。
其它方面包括一种光线追踪方法,该方法包括以下步骤确定定义了用于与组成 3-D场景的图元相交的多条要测试光线的光线定义数据。该方法还包括以下步骤在多个 计算资源的相应本地存储器中分布光线定义数据的子集,这些计算资源被设置用于对光线 与几何形状进行相交测试,并且在管理模块中,确定来自要通过计算资源相交测试的所述 多条光线的光线集合。该集合通过多个光线标识符来定义,各个光线标识符都包括与针对 该光线的定义数据不同并且与包围图元的一部分的包围形状相关联的数据。该方法还包括 以下步骤通过在所述多个计算资源之间传送针对该集合的光线标识符,而使得所述计算 资源对所确定集合的光线进行测试,对于该光线标识符各个计算资源都分别对所标识的光 线进行相交测试而响应,其中所标识的光线的定义数据存储在针对该计算资源的本地存储器中。
在任一方面中,存储在本地高速缓冲存储器中的所述多条光线可以是多条第二光 线的不相交子集,并且所述多个光线标识符中的一些标识符标识出存储在本地高速缓冲存 储器中的光线,而多条第二光线中的一些光线未存储在该本地高速缓冲存储器中。
所述功能方面可以被实现为模块,如计算机可执行代码的模块,该模块设置可操 作用于生成如上所述的输入和输出的合适硬件资源。


为更全面理解在此公开的方面和实施例,在下面的描述中针对附图进行说明。
图1例示了利用光线追踪来渲染场景的系统的第一实施例;
图2例示了图1的一部分的附加方面;
图3例示了光线追踪渲染系统的相交测试部分的另一实现;
图4例示了在图1-图3的系统中有用的、用于相交测试的计算资源的实施例;
图5例示了在光线追踪中使用的相交测试系统架构的另一实施例;
图6例示了用于相交测试的架构的另一实施例的各个方面;
图7例示了实现根据图1-6的公开的多个方面的系统架构,其包括通过队列连接 的相交测试资源和着色资源;
图和图8b例示了在根据图1-图7的系统中提供可以在控制光线追踪方面使 用的针对光线的标识符的各个方面;
图9a和图9b例示了使用光线ID来对图1_图7中的任一个的相交测试资源而设 置的存储器中的光线数据进行标识的实施例;
图10例示了可以在图1-图7的系统中实现的、在多个相交测试资源之间的相交 测试控制和形状分布的方面;
图11例示了当使用用于光线追踪的架构时可以实现图1-图10的系统的各个方 面的多处理器架构;
图12例示了可以实现根据图1-图11的公开的、具有资源间通信以及本地光线数 据存储的多个计算资源的结构;
图13例示了作为图12的计算资源的一部分而工作的多线程或内核的实施例;
图14a-图14c例示了用于根据图1_图13的系统和架构的不同排队实现;
图15用于例示将多个计算资源所共享的L2高速缓冲存储器的光线数据分布在专 用Ll高速缓冲存储器中的不同方式;
图16给出了可以在按照这些公开的队列中呈现的包中的数据的实施例;
图17提供了涉及特定计算资源对来自一个包的光线ID的处理的公开,其中在相 交测试中利用本地可用光线数据,以及写回该测试的结果;
图Ife和图18b例示了处理光线ID信息的包的实施例SIMD架构的各个方面;
图19例示了分散光线标识符、测试光线、并且将测试结果聚结成另一个包、以用 于另一测试的概念;
图20例示了在数据结构的背景下、通常可在根据前述附图的系统中应用的方法 步骤;以及
图21例示了根据本公开的进一步方法方面。
具体实施方式
下面的描述在于使得本领域普通技术人员能够作出和使用本发明的各个方面。仅 作为实施例而提供了具体技术、实现以及应用的描述。本领域技术人员可以清楚针对在此 描述的实施例的各个修改例,并且在不脱离本发明的范围的情况下,可以将在此定义的一 般原理应用于其它实施例和应用。本描述首先介绍与三维(3-D)场景的示例(图1)有关 的各个方面,其可以利用几何图形加速数据而抽象化,如图2的示例中所示。可以利用根据 所示和所述实施例的系统和方法将这种3-D场景渲染为二维表现。
如在背景技术中介绍的,3-D场景需要被转换成2-D表现、以进行显示。这种转换 要求选择观看场景的摄像机位置。该摄像机位置通常表示该场景的观看者(例如,游戏者、 观看动画片的人等)的位置。2-D表现通常位于摄像机与场景之间的平面位置处,以使得 2-D表现包括按希望分辨率的像素阵列。通过渲染来确定针对各个像素的颜色矢量。在光 线追踪期间,光线最初从摄像机位置投射,以在希望点处与2-D表现的平面相交,接着继续 投射到3-D场景中。光线相交2-D表现的位置保持在与该光线相关联的数据结构中。
摄像机位置不必是空间中定义的单一点,相反,摄像机位置可以弥散开,以使光线 可以从该摄像机位置内考虑的大量点开始投射。各条光线都与像素内的2-D表现相交,这 还可以称作样本。在一些实现中,可以记录光线与像素相交的更精确位置,这可以允许更精 确的插值和颜色混合。
描述中为了简洁,通常将特定类型对象(例如,图元)的数据(例如,三角形的三 个顶点的坐标)简述为“对象”本身,而非表示为“对象的数据”。例如,当采用“获取图元” 时,应当明白的是,获取表述该图元的数据,而非该图元的物理实现。然而,特别针对光线, 本公开在光线的标识符与定义了光线本身的数据之间作出了区别,并且在使用术语“光线” 的情况下,一般表示光线ID和定义了光线的数据这两者,除非上下文另行说明。
通常,通过设置逼近对象表面的大量较小几何图元(即,线框模型(wire frame model)),来实现在3-D场景中表现逼真且精细的对象的目的。这样,更复杂的对象可能会 需要利用比简单的对象更多的图元和更小的图元来表示。尽管提供了更高分辨率的益处, 但是,在光线与大量图元之间执行相交测试(如上所述,并且如下将进一步所述)在计算上 强度较高,尤其因为复杂场景具有大量对象。在没有将一些外部结构施加在相交测试的场 景的情况下,必须对各条光线与各个图元的相交进行测试,这导致了极慢的相交测试。因 此,一种缩减了每光线所需的光线/图元相交测试数量的方式有助于加速场景中的光线相 交测试。一种用于缩减相交测试的数量的方式在于,提供了对大量图元的表面进行抽象的 额外包围表面。首先,可以针对该包围表面对光线相交测试,以标识出图元的较小子集,以 与各条光线进行相交测试。这种包围表面形状可以按多种形状来设置。在本公开中,这种 包围表面元素的集合称作几何图形加速数据(下面,称为GAD)。
从于2007年9月17日提交的美国专利申请No. 11/856,612中可以获得针对GAD 结构、元素以及用法的更详尽论述,其通过引证合并于此。因而,针对上下文在此提供了 GAD 的简短论述,并且涉及这些问题的进一步细节可以从上述申请中获得。
如所介绍的,GAD元素通常包括3-D空间中包围了图元的相应集合的几何形状,使得该几何形状的表面不与光线相交的情况表示了该光线也不与被该形状所包围的任何图 元相交。GAD元素可以包括球形、轴对齐包围盒、kd树、八叉树、以及其它类别的空间包围层 级,这样,根据本公开的实现可以使用包围方案,如kd树的剖切平面,或用于定位和指定包 围了一个或更多个场景图元的包围表面的范围的另一方式。总之,因为GAD元素主要用于 对图元进行抽象、以更快速标识光线与图元之间的相交,所以GAD元素优选为可以容易地 对与光线的相交进行测试的形状。
GAD元素可以彼此相互关联。GAD元素的相互关联在此可以是包括节点和边缘的 图形,其中,节点表示GAD元素,而边缘表示两个GAD元素之间的相互关联。在一对元素通过 一个边缘彼此连接时,该边缘可以表示这两个节点中的一个节点具有与另一节点不同的相 对粒度(granularity),这可能意指被该边缘所连接的两个节点中的一个节点比另一节点 包围更多或更少图元。在某些情况下,该图形可以是分层的,使得具有针对该图形的方向, 并且该图形可以按从父(parent)节点到子(child)节点的次序行进,沿该路线将剩余包围 图元变少。在某些情况下,该图形可以具有同类GAD元素,使得如果指定GAD元素包围了其 它GAD元素,则该指定GAD元素也不直接包围图元(即,在同类GAD结构中,图元直接由叶 节点GAD元素来包围,非叶节点直接包围其它GAD元素而不包围图元)。
GAD元素的图形可以按照在被各个GAD元素包围的大量元素和/或图元中保持特 定均勻性的目的而构造。可以将指定场景细分,直到可以实现这种目的为止。
在下面的描述中说明的是,存在这样一种机制,S卩,该机制基于已经被确定为与指 定GAD元素相交的光线,来确定相应地接下来应当对哪些其它GAD元素进行测试。在分层 图形的示例中,接着,接下来进行测试的元素通常是被测试节点的子节点。
在许多示例中实现的GAD的一种用途包括,当发现一光线与指定GAD元素相交时, 将该光线与已被确定为也与该元素相交的其它光线一起收集。当收集了大量光线时,从主 存储器获取连接至该元素的GAD元素的流,并且,将其流动通过分别具有收集的不同光线 的多个测试器。因而,各个测试器都保持其光线固定在本地快速存储器中,而几何图形则在 需要时从慢速存储器获取并且允许被覆盖。更一般地说,本描述提供了可以怎样组织计算 资源来处理用于检测这种光线与几何形状(GAD元素和图元)的相交的光线的一系列示例, 以最终标识出哪些光线碰撞了哪些图元。
这些示例可以实现的其它方面包括以下之一 (1)针对从相交测试到着色的输出 设置队列;( 将光线数据本地化至针对计算资源的特定程度,同时在确定将特定光线针 对这些形状进行测试时从较慢存储器获取几何形状;以及( 通过针对执行相交测试的计 算资源而标识出光线(利用光线标识符),来驱动相交测试,使得各个计算资源从其本地存 储器获取与所标识出的光线相对应的数据。
下面的描述说明了利用光线追踪来渲染3-D场景的2-D表现的系统及其各个部分 的实施例。这种系统的两个主要功能组件为(1)对光线进行追踪以标识出相交;以及⑵ 对所标识的相交进行着色。
图1例示了在对由多个图元组成的场景进行光线追踪中使用的系统的多个方面。 一般来说,图1和其它图中的功能单元中的任一个的功能或任务中的任一个都可以按多个 硬件单元或多个软件、软件子程序来实现,并且甚至可以运行在不同计算机上。在某些情况 下,这种实现被更具体地描述为,这可以涉及系统功能和性能。13
图1例示了几何图形单元101、相交处理单元102、样本处理资源110、帧缓冲器 111,以及存储器资源139、样本106、光线着色数据107、以及纹理数据108,该存储器资源 139可操作或以其它方式设置成存储或存储有包括GAD元素和图元的几何图形形状(图元 和GAD存储部103)。几何图形单元101输入要渲染场景的描述,并且输出图元和包括包围 该图元的GAD元素的加速结构。相交处理102对所标识出的、光线与图元之间的相交进行 着色,并且使用输入(如从所示数据源获取的纹理、着色代码以及其它样本信息)。相交处 理102的输出包括新光线(下面讨论的)和将在生成被渲染场景的2-D表现中使用的颜色 信息。全部这些功能组件都可以在一个或更多个主机处理资源(通常用虚线185指示)上 实现。
如上所述,在对所标识出的光线/图元相交进行着色期间,相交处理102可以生成 要进行相交测试的新光线。驱动器188可以与相交处理102接口连接,以接收这些新光线, 并且管理相交处理资源102与本地相交测试区域104(包括光线数据存储部105和相交测 试单元109)之间的通信。相交测试区域140针对相交而测试光线,并且经由接口 112针对 图元和GAD存储部103进行读访问,并经由的结果接口 121针对相交处理102输出对所标 识出的相交的指示。优选的是,本地光线数据存储部105采用尺寸可以相对更小的相对快 速的存储器实现,而图元和加速结构存储部采用可以潜在为主机185的主动态存储器的、 相对较大且慢的主存储器139实现。
对高分辨率场景进行光线追踪的一个方面在于,所涉及光线数据和形状数据的纯 粹空间(sheer volume)。例如,按每秒钟30帧来渲染全HD分辨率电影需要每秒钟针对超 过六千万(1920 X 1080 >2M,每秒钟30次)个像素确定颜色。而且,为了确定各个像素颜 色,可能需要大量光线。因而,可能需要每秒钟处理数亿的光线,并且如果各条光线需要几 个字节的存储量,则对全HD场景进行光线追踪的光线可能涉及每秒钟多个千兆字节的光 线数据,或者更多。而且,按任何指定时间,必须将大量的光线数据存储在存储器中。在存 取速度与存储器尺寸之间几乎始终存在一种折中,致使费效比较高的存储器相当慢。而且, 较大存储器被构成使得该存储器未有效使用,除非可以存取和使用足够大的数据块。因而, 一项挑战是,能够一致地标识出足够大的光线组,以有效地从存储器存取它们。然而,在标 识这种光线方面,可能要求处理系统开销(有时较高的系统开销),如通过诸如寻找和组测 试具有类似起源和方向的光线的方法所示。在一个方面,下面的实施例架构公开了怎样组 织和使用多个计算资源、更快更昂贵的存储器、更慢更大的存储器,来增大用于场景渲染的 光线相交测试和着色的吞吐量。
图1由此例示了通过包括存储在本地化至计算资源109(计算资源109对光线与 GAD元素和图元的相交进行测试)的快速存储器中的光线定义数据的数据流,来将相交测 试与对所标识出的相交进行着色彼此解开(decoupling)。相交测试109的输出包括对与 所标识图元相交的所标识出的光线的指示。相交处理102接收这些指示,由此针对那些相 交而执行着色,并且可以实例化用于测试的新光线,这最终存储在快速光线数据存储器105 中。这种解开可以按使用利用根据本描述的软件编程的固定功能硬件和通用计算机中的一 个或更多个的多种实现、利用根据所使用处理资源选定的通信装置来提供。然而,这些实现 中的一个复现方面是,与光线定义数据相比,对与光线的相交而进行测试的形状数据在相 交测试区域140中是瞬变的。换句话说,在可用的情况下,在将形状流过测试器时,将更快速存储器主要分配给光线数据,而使用很少的计算资源,以最优化这种形状数据的高速缓 存。下面附图的各个方面例示了这种解开、数据流、光线数据存储以及伴随相交测试资源的 配置(collocation)的更具体实施例。
图1还例示了最终可以将帧缓冲器111输出用于驱动显示器197。然而,这仅是 可以由相交测试和着色操作而产生的输出的一个示例,为方便起见可以称作“渲染”。例如, 可以将输出写入至包括渲染产品的计算机可读介质,如用于以后显示的渲染图像序列,或 用于在有形计算机可读介质上分布或通过包括由通信链路互连的计算资源的网络发送的 渲染图像序列。在某些情况下,被渲染3-D场景可以表述真实世界3-D场景,如可以是针对 临境感(immersive)虚拟现实会议,或者针对渲染包括3-DCAD模型的立体图的图像的情 况。在这种情况下,该渲染方法操作或以其它方式转换表述物理对象的数据。在其它情况 下,3-D场景可以具有表述物理对象和不存在的其它对象的一些对象。在另一 3-D场景中, 整个场景可以是假想的,如在视频游戏等中。然而,最终这通常是这些方法是存储器、显示 器,以及/或计算机可读介质的变形产品的情况。
还存在这样的情况,S卩,利用光线追踪的渲染自从1979年起就已经实现,并且已 经针对为实现利用光线追踪的渲染所需的相交测试和其它功能开发出了多种技术。因此, 在此描述的特定架构和方法未排除在将3-D场景渲染成2-D表现中使用的光线追踪的基本原理。
图2例示了相交测试区域140的、包括一个或更多个单独测试资源(即,测试单 元)的相交测试单元109,相交测试单元109可以针对光线来测试几何形状。区域140包括 测试单元20 到205η,各个都可以接收来自光线数据存储部105的光线数据和来自存储器 139的几何形状数据。各个测试单元205a-205n都生成通过结果接口 121向相交处理102 传送的结果,并且其可以包括对指定光线是否与指定图元相交的指示。相反,将GAD元素与 光线的相交测试的结果提供给逻辑203。逻辑203保持针对将那些光线与已确定为与那些 光线相交的GAD元素相关联的光线的引用的集合210。
一般来说,系统组件被设计成支持未知完成时间的、指定的、具体的光线测试。相 交测试单元109读访问几何图形存储器,并且具有针对光线的引用的队列作为输入。随着 相交测试的输出,各条光线都与其首先相交的几何图形(为方便起见,在本公开中称作图 元)相关联。其它几何图形(即,图元)可以被视为不相关。
如上所述,区域140包括光线引用缓冲器和关联的管理逻辑203,这保持要在测试 单元20fe-205n中测试的光线集合的列表210。缓冲管理逻辑203可以按固定功能处理资 源,或者按利用从计算机可读介质获取的指令设置的硬件来实现。这种指令在此可以按根 据分配给逻辑203的功能和任务的模块来组织。普通技术人员还能够基于这些公开来提供 逻辑203的进一步实现。
逻辑203可以向测试单元指定光线和几何图形,并且可以按设计处理与其它单元 的通信。在一个方面,列表201中各个光线集合都包括多个光线标识符,这些光线全部要针 对与一个或更多个几何形状相交而进行测试,并且逻辑203保持这种光线集合。在一个更 具体实施例中,已经将多个光线标识符确定为与在所述收集中标识的GAD元素相交,并且 要针对与所述多条光线相交而进行测试的下一个GAD元素与GAD元素的图形中的该相交 GADA元素相关联。在开始对那些元素的相交测试时从存储器139获取针对指定集合的该联15系元素。
换言之,逻辑203可以在临时光线引用缓冲器中保持表示与相应子节点相对应的 几何图形数据的子部分相交的光线的引用,这允许延期进一步处理这种光线。在分层排列 GAD的实施例中,这种延期可以延期针对子节点之下的几何图形加速数据的子部分的处理, 直到当与该子节点的几何图形的子部分相交的光线的累积数量适于进一步处理的随后时 刻为止。
逻辑203还可以与存储器139通信,用于设立向测试单元205a-205n提供测试用 几何形状的存储器事务。逻辑203还与光线数据存储部105通信,并且确定哪些光线具有 存储在内的数据。在一些实现中,逻辑203可以获取或接收来自存储器139或来自在相交 处理单元102中执行的着色处理的光线,并且在空间可用时向存储器105提供那些光线,以 供存储和在相交测试期间使用。
因而,逻辑203可以保持临时光线引用缓冲,这包括光线标识符与GAD形状的标识 符的关联。在实现中,可以将针对GAD元素的标识符散列(hash),以在缓冲器中标识用于存 储与该GAD元素相关联的指定集合的位置。当描述在存储器中存储或收集这种数据时在此 通常将该关联称为“集合”,并且在本申请中的一些位置中,使用术语“包(packet) ”,通常含 有在测试期间移动集合数据并返回根据相交测试的结果的意义。返回的结果可以聚结到存 储器中的、与GAD形状相关联的已存储集合中,如下所述。
总之,图2继续例示了将光线定义数据存储在快速存储器105中,而要针对与光线 的相交进行测试的形状数据来自存储器139。上述公开还示出了,优选的是,使一次从存储 器139获取多个接下来要测试的形状,并且对与已知同“父” GAD元素相交的一组光线依次 进行相交测试。
下面,图3包括区域140(图1)的、可以在对三维场景的二维表现进行光线追踪的 渲染系统中使用的相交测试单元(ITU) 350实现的实施例的框图。ITU 350包括多个测试单 元310a-310n和;M0a-340n。GAD元素被例示为源自GAD数据存储部103b,而图元数据源自 图元数据存储部103a。
测试单元310a-310n接收GAD元素和光线数据,以针对那些元素进行测试(即,这 些测试单元测试GAD元素)。测试单元340a-340n接收图元和光线数据,以针对那些图元进 行测试(即,这些测试单元测试图元)。因而,ITU 350可以对光线集合与图元的相交进行 测试,并对单独的光线集合与GAD元素的相交进行测试。
ITU 350还包括集合管理逻辑203a和集合缓冲器203b。集合缓冲器203b和光线 数据105可以存储在存储器340中,存储器340可以接收(例如)来自存储器139的光线 数据。集合缓冲器20 保持与GAD元素相关联的光线引用。集合管理部203a基于来自测 试单元的相交信息,来保持那些集合。集合管理部203a还可以发起从存储器139获取图元 和GAD元素,用于测试光线集合。
ITU 350返回对所标识出的相交的指示,这可以在输出缓冲器375中缓冲,以最终 经由结果接口 121提供给相交处理102。指示信息足够以标识光线和在指定精确度内确定 为与该光线相交的图元。
ITU 350可以被视为通过控制处理或驱动器(例如,驱动器188)调用的功能或实 用程序,该驱动器向ITU 350提供光线和针对光线将进行相交测试的几何形状。例如,可以通过驱动器188向ITU 350馈送信息,即,将ITU 350与其它渲染处理(如着色)的处理) 和初始光线生成功能接口连接的过程。根据ITU 350的角度,ITU 350不需要获知提供给 它的信息的起源,如区域140可以利用提供给它的、或者基于提供给它的其它信息而通过 其获取的光线、GAD以及图元(或更一般地说,场景几何图形)来执行相交测试。
如上所述,ITU 350可以控制怎样、何时以及将哪些数据提供给它,使得ITU 350 不是被动的,并且例如可以在需要进行相交测试时获取光线或几何图形数据,或加速数据。 例如,可以向ITU 350提供大量用于相交测试的光线,连同足够以标识要测试光线的场景 的信息。例如,可以按指定时间提供给ITU 350大约一万条光线(10000光线)以供相交测 试,并且随着针对那些光线的测试完成,可以向其提供新光线(由相交处理102生成),以将 ITU 350中处理的光线的数量保持在大约最初数量,如下所述。ITU 350此后在处理期间可 以控制(在逻辑203a中(参见图幻)临时存储的光线(在光线集合缓冲器20 中(参见 图3)),并且在处理期间还可以在需要时开始获取图元和GAD元素。
如上所述,因为光线标识符保持在缓冲器20 中并且针对GAD元素而组织,同时 定义了光线的数据保持在光线数据部105中,所以,与光线相比,GAD元素和图元在ITU 350 中是瞬变的。缓冲器20 和光线数据部105中的各个都可以保持在存储器340中,这可以 在物理上按多种方式实现,如SRAM高速缓冲存储器中的一个或更多个存储体(bank)。
如上所述,逻辑203a追踪针对存储在存储器340中的光线集合的状态,并且确定 哪些集合准备用于处理。如图3所示,逻辑203a以通信方式连接至存储器340,并且可以开 始向各个所连接的测试单元递送用于测试的光线。在GAD元素仅包围GAD元素或者仅包围 图元而非包围其某些组合的情况下,逻辑203a根据特定集合是否与包围图元或其它GAD元 素的GAD元素相关联,而可以向测试单元340a-340n或者向测试单元310a-310n指定光线。
在特定GAD元素可以包围其它GAD元素和图元两者的示例中,ITU350可以具有用 于向各个测试单元提供GAD元素和图元以及光线的数据路径,使得逻辑203a可以在测试资 源中设置测试光线的集合。在这种示例中,因为GAD元素与图元之间在形状上的典型差异 (例如,球形与三角形),所以可以从逻辑203a提供用于切换测试逻辑的指示或者加载针对 被测试形状最优化的相交测试算法的指示。
逻辑203a可以直接或间接使向测试单元310a-310n和测试单元340εΗΜ0η提供 信息。在间接情况下,逻辑203a可以向各个测试单元提供信息,使得各个测试单元都可以 开始从存储器340获取用于测试的光线数据。尽管逻辑203a与存储器340单独地例示,但 为简化描述,因为逻辑203a所执行的管理功能相当程度涉及存储在存储器340中的数据, 所以逻辑203a可以在存储器340的电路内实现。
用于增加相交测试资源并行访问存储器340的能力是在此描述的一些方面的优 点。这样,增加针对存储器340的访问端口的数量(优选为多达至少每测试单元一个)是 有利的。下面,进一步描述涉及这种并行化的实施例结构。
而且,ITU 350可以针对向其提供输入数据,或者接收来自其的输出的单元异步操 作。这里,“异步”可以包括ITU可以接收并且开始附加光线的相交测试,同时继续针对先前 接收到的光线进行相交测试。而且,“异步”可以包括不需要按ITU 350接收光线的次序来 完成对光线的相交测试。异步还包括ITU 350中的相交测试资源可用于指定或安排相交测 试,而不需要考虑3-D场景内光线的位置,或者可用于安排叠加在场景上的格栅,或者仅测试具有两代关系的光线(如父光线和从较少数量的父光线产生的子光线),或者仅是由于 特定生成的光线(例如,摄像机光线或次生光线)。
ITU 350还包括输出缓冲器375,输出缓冲器375接收对所标识的、图元与同该图 元相交的光线的相交的指示。在实施例中,该指示包括与足够以标识与图元相交的光线的 信息配对的、针对该图元的标识。针对光线的标识信息可以包括引用,如索引,这标识了光 线列表中的特定光线。例如,该列表可以被运行在主机185上的驱动器188保持,并且该列 表可以保持在存储器139中。优选的是,存储器139还包括针对存储器340中的全部光线 的光线定义数据。然而,如果存储器139不包含足够以重建光线的、诸如光线的起源和方向 的信息,则光线标识信息还可以包括这种信息。通常,传送引用仅要求很少比特,这可以是 一个优点。
图4例示了测试单元310a的实施例,这可以包含工作存储器410和测试逻辑420。 工作存储器410可以是几个寄存器(其包含足以对线段与表面的相交进行测试的信息),或 者可以在其它实现中更复杂化。例如,工作存储器410可以存储用于设置测试逻辑420的指 令,以对接收到的特定形状进行相交测试,并且可以基于接收到的数据来检测接收哪些形 状。工作存储器410还可以高速缓存所检测到的碰撞,其中,各个测试单元都被设置用于针 对几何形状而对一系列光线进行测试,或者针对光线而对一系列几何形状进行测试;然后, 可将高速缓存的碰撞输出为一组。工作存储器还可以接收来自存储部10 的传入形状数 据。
测试逻辑420按可用或可选分辨率来执行相交测试,并且可以返回表示是否存在 检测到的相交的二进制值。该二进制值可以存储在工作存储器中以供读出、高速缓存,或者 输出用于在读取周期(如在存储器340中针对GAD元素测试的读取周期)期间锁存。
图5例示了更详细地聚焦在实施例存储器组织上的相交测试单元500的实现的多 个方面。在ITU 500中,在这个实施例中,呈现测试单元510a-510n和M0a-540n并且与 310a-310n和M0a-540n相对应。这不是暗示有关测试单元数量的任何必要条件。因而,在 IUT 500中,图元和GAD元素两者可以并行测试。然而,如果确定需要一种或另一种的更多 测试单元,则可以在恰当时重新配置任何测试单元(如果是硬件则重新分配,或者如果是 软件则重新编程)。随着晶体管密度持续增加,可以将更多的这种测试单元容纳在硬件实现 中(或者作为可用于执行软件的资源)。如将要描述的,测试单元的多个部分都可以作为 操作组来对待,这是因为它们将针对共同形状(即,图元或GAD元素)测试光线。测试单元 540a-M0n可以返回表示按指定精度级与图元相交的二进制值(例如,16比特),并且还可 以返回光线在图元上的哪些地方相交的更精确指示,这可以有用于较大图元。
在ITU 500中,存储器540包括多个独立操作存储体510-515,各个都具有两个端 口(所标识存储体515的端口 531和53 。一个端口通过GAD测试逻辑505访问,而另一 个通过图元测试逻辑530访问。GAD测试逻辑505和图元测试逻辑530中的各个都操作为 管理相应工作缓冲器560-565与570-575之间的数据流,并且分别从GAD存储部103a和图 元存储部10 获取用于测试的GAD元素。
存储体510-515旨在在较大程度上操作以通过GAD测试逻辑505和图元测试逻辑 530提供针对光线数据的非冲突访问,使得可以从单独的存储体510-515向各个测试单元 510a-510n和测试单元540a-M0n提供光线。根据这些公开应当明白,这种非冲突访问例如可以通过单独高速缓冲存储体以及允许通过针对存储器的不同物理部分的端口访问的 交叉式存取(cross-bar)架构实现。如果准许通过一个以上的测试单元测试存储在一存储 体中的光线,则在要测试驻留在同一存储体中的两条光线的情况下出现冲突,并且在这种 情况下,可以通过测试逻辑505和530依次处理访问。在某些情况下,工作缓冲器560-565 和570-575可以在完成其它处理的同时针对下一个处理周期而加载。ITU 500还可以被组 织成区域。例如,区域578包括针对GAD元素的测试区域(这是因为包括GAD测试器510a 和存储体510),而区域579包括针对GAD元素和图元两者的测试区域,这是因为包括测试 器510a和540a (各个测试器针对GAD和图元中的各个)并且能够访问存储有要在涉及区 域578和579的那些测试单元的测试中使用的光线数据的存储体510。
通过在一致排布结构(arrangement)中测试光线,可以缩减对指定给测试单元 的那条光线的追踪。例如,各个集合都可以具有32条光线,并且可以存在32个测试单元 310a-310n(510a-510n)。例如,通过一致向测试单元310d提供一集合中的第四条光线,测 试单元310d不需要保持与向其提供了哪些光线有关的信息,而仅需要返回对相交的指示。 如将示出,可以提供用于保持一致性的其它实现,包括在测试单元之间传送光线标识符的 包,并且允许测试单元向该包写入相交结果。
可以将针对光线集合的存储部实现为针对光线集合的η路交错高速缓冲存储器, 使得可以将任何指定光线集合存储在光线集合缓冲器20 或520的η个部分中的一个部 分中。光线集合缓冲器20 或520接着可以保持存储在该缓冲器的η个部分中的各个部 分中的光线集合的列表。光线集合缓冲器20 或520的一个实现可以包括使用与一光线 集合相关联的GAD的元素的标识特性,例如,可以使用在渲染场景中使用的GAD元素当中的 唯一标识符串。字母数字(alphanumeric)串可以是数字、或散列值等。例如,散列值可以 引用光线集合缓冲器20 和520的η个部分中的一个部分。
在其它实现中,可以例如通过将使用中的字母数字串的片段映射至这种缓冲器的 (多个)部分,而针对光线集合缓冲器20 和520的指定部分中预先指定用于存储的GAD 元素。图元/光线相交输出部580表示用于标识潜在图元/光线相交的输出,输出部580 可以串联或并联。例如,在存在32个图元测试单元M0a-540n的情况下,输出部580可以 包括表示存在或不存在针对刚才测试的、各条光线与图元的相交的32位。当然,在其它实 现中(举例来说,如在包实现中),输出可以直接来自测试单元。输出可以串行,并且可以通 过测试单元串行存储在包中。
在存储器340 (520)中接收来自光线源(如着色器)的光线数据。集合管理逻辑 (例如,图2&3中的203a)操作以初始地将光线指定给集合,其中,各个集合都与GAD元素相 关联。例如,GAD元素可以是图形的根节点,并且,接收到的全部光线都被初始地指定给与 该根节点相关联的一个或更多个集合。接收到的光线还可以按组尺寸化,使得成为满集合, 例如,来自一输入队列,并且例如,各个这种集合都可以被视为如同在光线集合缓冲器20 中标识的集合。
侧重在针对一个集合的处理上,可理解的是,可以并行测试多个集合,通过集合管 理逻辑203a发起从存储器340获得与测试节点相关联的集合的光线,例如,通过提供这种 光线的、存储为该集合中的数据的地址(光线标识符),以允许从存储器340获得这种光线, 或者通过图5的实施例而从存储体510-515获得这种光线,这在多个输出端口上提供被测19试单元(例如,测试单元560-565)接收到的光线数据。
关于对由针对测试而选定的节点所包围的GAD元素(即,与包围其它GAD元素的 选定节点相关联的GAD元素)进行测试而言,完成了针对被测试集合的光线的光线数据的 分布,并且,还执行获取所包围的GAD元素(不一定使得这种获取与光线分布依次进行)。 针对这种获取,逻辑203a可以向GAD存储部10 输入寻址信息(或通过提供的任意存储 器管理装置),这向测试单元310a-310n输出(多个)寻址到的GAD元素。在包围了多个 GAD元素的情况(通常是这种情况),可以将这些元素排列成针对测试单元串行地流动(如 利用串行化缓冲器),使得允许对多个GAD元素的块读取。
在测试单元(例如,310a-310n)中,可以针对光线集合与串行提供的GAD元素的 相交而进行测试(例如,各个测试单元中的不同光线)。在确定光线为相交的情况下,确定 是否存在针对相交的GAD元素的集合,如果存在,则将该光线添加至该集合(如果空间准许 (room permitting)),而如果不存在,则创建这种集合并且添加该光线。在现有集合没有空 间的情况下,则可以创建新集合。
在一些实现中,将集合中的光线的最大数量与测试单元310a-310n的数量设置为 1 1的对应关系,使得可将该集合中的全部光线针对指定GAD元素并行进行测试,这可以 包括吞吐量通常大约为在光线与测试单元为11对应关系的情况下所获取的结果的架 构,但是,这可以实现在不同测试单元之间依次传送包(例如,表示该集合的信息,如上所 述),使得不同测试单元可以对来自不同包的光线进行测试,即使可以将指定集合的全部光 线视为并行测试。
此后,对光线与提供给测试单元的图元的相交进行测试(即,在这个实施例中,各 个测试单元都具有不同光线,并且测试该光线与公共图元)。在测试之后,各个测试单元指 示出检测到的相交。
对该集合的各条光线在其测试单元中针对各条光线与提供给测试单元的GAD元 素的相交进行测试(例如,在图5的多个存储体实施例(所示区域578和579),例如,可以 认为光线对于GAD元素测试区域和/或图元测试区域是本地的,使得存储体可以向每一种 类的一个或更多个测试器提供光线数据)。
因为对光线与GAD元素的相交而进行测试的输出不同于对该同一光线与图元的 相交而进行测试的输出(即,与GAD元素的相交得到将集合合并到针对该GAD元素的集合 中,而与图元的相交得到确定了与该图元的最接近的相交,并且输出这种相交),正常情况 下不会出现针对写回集合数据或输出相交的冲突,即使特定光线恰好处于并行测试的两个 集合中。如果要实现进一步的并行性,例如,通过在测试单元340a-340n的多个实例中对 多个集合的光线与图元的相交而进行测试,则还可以将特征实现成实施有序地完成这种测 试,如存储多个相交,或锁定位等。而在图5的实施例的情况下,在仅可以从一个存储体向 一个测试器类型提供针对指定光线的数据的情况下(即,指定光线位于一个存储体中),那 么,多个GAD测试器例如将不能在同一时间测试同一光线,由此,避免写回冲突的问题。
总之,一个方法可以包括以下步骤接收光线;将它们指定给集合;选择准备测试 的集合,其中,可以算法上确定准备就绪;向合适测试单元指定选定集合的光线;以及通过 测试单元流动相交测试的合适几何图形。输出取决于几何图形是场景图元还是GAD元素。 对于针对GAD元素而测试的光线来说,基于与和被测试集合相关联的节点连接的图形来标识GAD元素,并且将光线添加至与被测试GAD元素相关联的集合。对这些集合就是否准备 就绪进行复查,并且在准备就绪时选择用于测试。对于光线与图元相交来说,随着该光线而 追踪最接近的相交。因为光线在与准备的集合相关联时被测试,所以隐含的是,将针对特 定光线的相交测试延期,直到与其相关联的集合被确定为准备就绪用于测试为止。可以将 光线一致地收集到多个集合中,这允许这种光线针对场景几何图形的全异部分而进行测试 (即,它们不需要按横向次序而进行测试)。
如前面提出的,ITU在存储器中存储表述先前从光线输入部接收到的光线的信息。 ITU针对这些光线保持各条光线与多个集合中的一条或更多条光线集合的关联。ITU还保 持对存储在该存储器中的多个集合的集合完整度的指示。这些指示可以是表示满集合的相 应标志,或者可以是表示与指定集合相关联的光线的数量。在有关上面引用的相关应用中 提供了与实现测试算法有关的进一步细节、和实现的其它实施例,以及变型例,这示出了在 此文字方式呈现的信息不是其排它论述。
针对这一点,如从公开清楚,基于在集合的光线中提供的信息从存储器加载(存 取)光线。因此,这种加载可以包括确定其中存储有表述各条光线的数据的相应存储器位 置。这种数据可被包括在该光线集合中,例如,光线集合可以包括存储器位置的列表或针对 存储部的其它引用,据此,存储该集合中针对光线的光线数据。例如,光线集合可以包括针 对存储器(例如,存储器340,或者存储器的存储体(例如,存储体510))或者某些其它实现 中的位置的引用,这些引用可以是绝对的,相对于基点的偏移,或者用于引用这种数据的另 一合适方式。这些方面从保持单独的光线数据和光线集合数据的观点来描述。然而,在一 些实现中,该单独不需要如此明确或清楚,因为光线集合数据和光线数据可以作为内容关 联数据库来保持,例如,保持集合与光线之间的关联以及集合与GAD元素之间的关联,并且 用于对与用于测试的集合相关联的光线进行标识,并且还用于对与集合相关联的GAD元素 进行标识。
而且,显然,因为图元或GAD元素在测试单元之间循环,所以光线数据“固定”在测 试单元中。其它实现是可能的,如在相关申请中所描述的,但这些公开的主要侧重点是,在 获取和测试几何图形的同时,使得光线位于本地或以其它方式针对测试单元而固定。
参照图6呈现了这种实现的多个方面。具体来说,相交测试逻辑的另一实现可以 包括处理器605,该处理器包括测试控制逻辑603 (类似于图2的测试逻辑20 ,测试控制 逻辑603包括用于连接至存储器接口 625的获取单元620、指令高速缓冲存储器630、指令 解码器645,以及数据高速缓冲存储器650。数据高速缓冲存储器650向测试单元610a-610n 进行馈送。指令解码器645还向测试单元610a-610n提供输入。指令生成器665向指令解 码器645提供指令输入。测试单元向写回单元660输出对检测到的相交的指示,写回单元 660然后可以将数据存储在数据高速缓冲存储器650中。来自写回单元660的输出还可以 在生成指令时用作针对指令生成器665的输入。设想的是,在这种处理器605中使用的指 令可以是单一指令、多数据种类,其中,测试单元中处理的指令是在所定义表面(例如,图 元和GAD元素)与光线之间的相交测试。
在实施例中,该“指令”可以包括定义几何形状的数据,如图元或GAD元素,并且, 多个数据元素可以包括用于针对设置为“指令”的几何形状而进行测试的光线的单独引用。 这样,几何形状和多光线引用的组合可以认为是可递送至多个所例示测试单元的离散信息21包。在某些情况下,包递送可以依次进行,使得多个包在多个测试单元当中“处于飞行(in flight)”。
这种测试单元可以存在于具有较大指令集的全特征化处理器的环境中,并且,各 个这种包都由此可以包括足够以分辨该包的目的的其它信息。例如,可以包括的多个比特, 用于区分针对相交测试而形成的包与出于其它目的(为其它目的将执行不同操作)而存在 的包。而且在恰当时候,可以提供多种相交测试指令,这包括针对不同图元形状和不同GAD 元素形状,甚或针对不同测试算法的指令。
在典型实施例中,各个相交测试包都初始地可以包含针对几何图形元素的引用, 或者包含针对该几何图形元素的数据(或者作为GAD元素,或者作为针对图元的引用),并 包含针对与该几何图形元素相交测试的大量光线的引用(即,上述“包”)。
解码器645可以解释该指令,以确定针对该几何图形元素的引用,并且发起通过 获取单元620获取该元素(针对存储器接口(如存储器接口 62 的控制)。在一些实现 中,解码器645可以先行处理(Iookahead)多个指令,以开始获取将来需要的几何图形元 素。该几何图形元素可以通过获取单元620提供给解码器645,其中,解码器645向测试单 元610a-610n提供几何图形元素。
解码器645还根据指令将光线引用作为函数地址提供给数据高速缓冲存储器 650,存储器650向测试单元610a-610n中的各个提供足以进行各条光线的相交测试的相应 数据。不需要提供相交测试不需的、与该光线相关联的数据。因而,数据高速缓冲存储器650 可以用作存储有本地光线数据的、针对操作为相交测试单元的一个或更多个计算资源的设备。
针对几何图形元素与各个测试单元610a-610n中的相应光线的相交而进行测试, 并且从各个测试单元610a-610n输出对相交的指示,以被写回单元660接收。根据被测试几 何图形元素的性质,写回单元660执行两个不同功能中的一个。在测试单元610a-610n测 试与图元的相交的情况下,写回单元660输出对与被测试图元相交的各条光线的指示。在 测试单元610a-610n测试GAD元素的情况下,写回单元660向指令单元665提供测试单元 610a-610n 的输出。
指令单元665操作以对在进一步相交测试中指令测试单元的未来指令进行汇编。 指令单元665利用指定哪些光线与指定GAD元素相交的测试单元610a-610n输入、指令高 速缓冲存储器630以及利用来自GAD输入部670的输入,来操作如下。利用来自测试单 元610a-610n的输入,指令单元665基于GAD输入来确定GAD元素连接至在来自测试单元 610a-610n的输入中所指定的GAD元素(即,指令单元665基于针对指定GAD元素所指示的 相交,来确定接下来应当测试哪些GAD元素)。
指令单元665确定存储在指令高速缓冲存储器630中的指令是否已经针对标识为 连接至已相交元素的各个GAD元素而存在,并且确定该指令是否可以接受任何进一步的光 线引用(即,该指令的全部数据槽是否填满?)。指令单元665将在测试单元输入中标识为 相交的光线全部添加至该指令,并且创建足以接收剩余光线引用的其它指令。指令单元665 针对标识为与在测试单元输入中标识出的元素相连接的各个GAD元素而执行上述过程。因 而,在处理测试单元输入(相交指示)之后,标识为与同一 GAD元素相交的光线皆被添加至 指定了针对连接至该同一 GAD元素的GAD元素来测试光线的指令。由此创建的指令可以存储在指令高速缓冲存储器630中。
可以基于从GAD输入部670接收到的结构的GAD元素而在指令高速缓冲存储器 630中组织指令。指令单元665执行与逻辑203a类似的功能,因为逻辑203a和指令单元 665两者都接收对哪些光线碰撞哪些GAD元素的指示,将这种光线分组在一起以供将来测 试。图6的系统旨在更一般的目的,因为用于测试的光线包可以是来自用于实现不同功能 的大量类型中的一个类型的包。
例如,GAD输入部670可以提供GAD图形,其中,该图形的节点表示GAD的元素,并 且成对的节点通过边缘连接。这些边缘标识哪些节点连接至哪些其它节点,并且指令单元 665可以通过跟随连接节点的边缘来搜索指令高速缓冲存储器630,以便标识针对指定GAD 元素的哪些指令已经在高速缓冲存储器中,并且其中,可以添加新光线。在存在针对指定 GAD元素的多个指令的情况下,可以在列表中链接它们,或以其它方式排序或彼此相关联。 还可以实现其它方法,如散列GAD元素ID,以标识出指令高速缓冲存储器630中的、可以发 现相关指令的潜在位置。
指令还可以引用测试下GAD的节点,使得响应于发出并且解码的指令,该指令能 够获取GAD的连接节点(与存储针对各个连接节点的指令相反)。各个这种连接节点都可 以通过测试单元610a-610n流动,以供与保持在各个测试单元中的相应光线进行测试(即, 在将多个GAD元素提供给各个测试单元的同时光线数据在测试单元中保持固定,并且各个 测试单元依次针对各个GAD元素来测试其光线)。
因而,根据这些实施例实现的处理器将提供用于获取或以其它方式创建指令的功 能,该指令收集针对与第一节点的相交测试而标识出的光线,以针对连接节点进行相交测 试。如上述实施例一样,如果提供给处理器605的GAD是分层的,则可以对GAD的图形按分 层次序而横越。
实施例连接和GAD源是示范性的,并且其它排布结构也是可以的。例如,存储器 615可以是针对GAD元素的源,然而,与几何图形数据相比,仍然优选的是,在更快速存储器 中存储光线(即,定义了光线的数据和其它数据,如当前发现的最接近的图元相交),其中, 准许指定处理架构。而且,在上面的实施例中,确定要基于测试结果来测试的下一个节点 (即,下一个加速元素或图元),并且相应地按照每几何形状来实例化包。根据这些公开清 楚的其它实现可以包括在确定为开始测试指定节点的“子节点”时实例化每个“子节点”的 包,这稍后及时创建子指令/集合。
图7也例示了光线追踪系统(例如,系统700)的多个方面,该光线追踪系统可以 使用针对相交测试和光线着色的解开操作的队列,这包括生成新光线(包括摄像机光线)。 系统700允许提交相交测试的光线并且完成它们的相交测试,按不同次序获得针对着色的 输出,如同图1-图6的系统。这样,相交测试资源可以继续处理相交测试光线,而不会针对 先前标识相交的分辨率进行着色而停顿(stalling)。
图7例示了多个相交测试资源(ITR) 70fe_705n,各个分别连接至光线数据存储部 766a-766n,该光线数据存储部存储有定义了该资源中要针对相交进行测试的光线的数据。 每一组ITR和光线存储部(例如,光线数据766a和ITR 705a)可被视为对测试资源和光线 数据存储部的本地分组,例如,例示了分组704,这类似于先前分组,例如图5的分组578和 579。
光线数据存储部766a-766n可以是存储器,如专用Ll高速缓冲存储器,L2高速缓 冲存储器的共享或映射部分等。如在先前实施例中,优选的是,将快速存储器专用于存储针 对特定处理资源为本地的光线数据,而非几何图形数据。通过在此使用的相交测试算法使 得本地存储光线数据更容易,该相交测试算法增加了可以在更多本地化的更快速存储器中 存储光线的时长,这缩减了这种较小存储器的反复量。这样,这种光线存储可以被视为准静 态的,这是因为通常将指针对定光线的数据存储在同一本地存储器中,直到完成了对其在 该场景中的相交测试为止。
定义了光线的数据经由输出部743从测试控制部703加载(类似于先前图中的逻 辑20 等)。测试控制部703接收包括针对已经通过光线完整队列730在ITR 705a-705n 中完成相交测试的光线的标识符的输入。
队列730存储有光线标识符(例示了一些实施例光线ID 1、18、106以及480)。队 列730从ITR 705a-705n得到输入,这表示该场景中完成测试的光线已经被测试以标识出 该光线相交的最接近的相交。这样,可以从判定点751馈送队列730,判定点751可以确定 来自ITR 705a-705n的指定输出表示GAD元素的信息还是表示最接近的可能图元相交的信 息(这在ITR 705a-705n可以测试两种类型形状的情况下有用)。
判定点751由此表示先前描述的两种类型的相交控制功能。一种是更靠近相交测 试器来保持/管理GAD/光线相交,另一种是仅输出最接近的检测到的图元/光线相交、以 进行着色。如果在一些先前架构中,单独测试单元用于各个相交控制功能,则判定点可以仅 在发现了最接近的可能图元相交时进行追踪。
从判定点751将GAD结果输入复用器752,复用器752还从存储有从输入部742接 收到的光线ID的队列725接收光线ID输入,输入部742是从光线控制部703得到馈送。光 线控制部703利用与光线信息相对应的光线标识符来填充输入742,该光线信息从测试控 制部703通过输出部743提供给光线数据部766a-766n。因而,将队列725中标识出的、定义 了光线的数据(通过光线标识符(光线ID))经由输出部743提供给光线数据部766a-766n, 以存储在那些存储器中。下面,提供了可以如何形成光线ID的实施例。
队列730和725两者例示了光线的一系列标识符(光线ID)。然而如下所述,光线 通常针对指定几何形状而同时进行测试。因而,在这种情况下的队列725优选地存储针对 光线ID包的光线ID,所以,队列730也可以表示各个都具有与指定形状相关联的多个光线 ID的一系列条目。
根据具体实施例,驱动这个架构的算法通常等待,直到已经确定了需要针对指定 形状来测试大量光线为止,接着,执行这种测试并且输出结果,从而,通常设想大量光线将 大约同时完成测试和开始测试。有利的是,就如何最初实例化这些光线或何时最初实例化 这些光线而言,或者根据它们横越加速层级的哪些路径而言,这些完成光线可以完全彼此 不相关。相反,可以认为队列725包含有要针对场景的默认GAD元素(例如,GAD元素的层 级的根节点)进行测试的新光线组或包。
这种新光线来自光线源,其包括摄像机着色器735和其它着色器710a-710n。因为 摄像机着色器735生成要在场景中测试的原生光线,所以单独地标识出摄像机着色器735。 着色器710a-710n运行计算资源(如按线程)和/或一个或更多个处理器的内核,并且表 示执行指定了哪些响应适于光线与图元之间的所标识出的相交的指令或其它逻辑。通常来说,这种响应至少部分地通过对与图元相关联的代码进行着色来确定;可以考虑到各种其 它影响以及因素。
着色器710a-710n通过分布点772接收到光线的标识符和相交的图元,该分布点 772从测试控制部703的输出部745接收这种光线数据(参见图8a)。分布点772可以用 于向具有可用性的计算资源提供这种光线数据,以执行针对指定图元的代码,所以,可以将 针对这种可用性确定的任何装置用于控制这种分布,包括负荷测量、通过计算资源设置的 标志、将FIFO与完整度指示符解开,甚或可以使用循环法(round robin)或伪随机分布方 案。
这些着色器710a-710n的输出可以包括其它光线,为方便起见,可以称作次生光 线(来自摄像机735的输出也包括光线)。在这个实施例中,这种光线在这一点上将至少包 括定义它们的起源和方向数据,但在这一点上不需要具有关联光线ID,这优选地将通过测 试控制部703来提供。
可以看出,测试控制部703可以监测相交测试资源中的光线状态,分配新光线以 替换光线数据部766a-766n中的已完成光线,如参照图8-图9更详细描述。将光线ID分 布至ITR 705a-705n通过分布器780来执行,如参照图10详细描述。这种分布主要根据光 线数据部766a-766n的存储有定义由指定标识符标识的光线的数据的那些存储器来控制。 而且,分布器780基于诸如收集准备就绪的因素来控制何时从队列725获取光线ID,如参照 图10所述。
下面,转至图8a,例示了测试控制部703的一部分,其包括与光线数据部 766a-766n中的各个相关联的存储体,各个存储体都具有利用光线数据填充、并且可根据存 储器地址寻址的槽。图8a例示了来自光线完整队列的输出744包括光线标识符1、18、106 以及480,各个都具有在存储器803中分配的空间。允许响应于从输出部744接收到的这些 光线标识符而覆盖/填充这种空间。针对分布点772的输出745包括供在着色中使用的光 线数据。输出745还包括其它数据。实际上,存储器803可以采用还被其它处理(如执行 着色器710a-710n的处理)使用的存储器来实现。在这种情况下,输出745可以表示通过 计算资源从存储器803获得(或通过其实现的)的这种数据。
图7中标识了多种通信链路,如链路741、742、743、744、745、750、790 ;这些链路中的任一个都可以根据总体架构实现来实现,并且可以包括共享存储器区域、物理链路、通过 扩展总线建立的虚拟信道、共享寄存器空间等。
图8b例示了针对新光线的数据从输出部741进来(来自着色操作,举例来说,如 摄像机着色器735)。这种光线数据至少包括光线起源和方向信息。下面,测试控制部703 将这些新光线指定给存储器803中的、对于光线数据部766a-766n来说不同的位置。与各 个光线起源和方向相关联的标识符取决于其存储在哪里。因而,输入部742(针对队列725 的输入)接收基于这种因素所确定的光线标识符。而且,输出743包括存储在存储器803 中的光线标识符和它们的关联起源和方向信息。图8a和图8b中例示的光线ID的指定是 方便的,这是因为光线ID可以用于索引存储器以标识相关数据,但针对光线可以使用任何 其它种类的标识符,只要最终可以利用标识数据的光线来实现在ITR 705a-705n和存储器 803中标识光线数据即可。
图9a例示了内容关联存储器910保持分别与不同光线数据相关联的键标905的另选例的实施例。
图9b例示了在各个光线数据766a-766n内,设置多个槽以经由接口 743接受来自 测试控制部703的光线数据。这些槽可以进一步细分成多个存储体,或交错存取,和/或其 它高速缓冲存储器组织机制,以允许更容易地从该高速缓冲存储器获得数据。在光线在此 需要针对存储部而分布的情况下,这种分布可以基于光线ID或散列的光线ID的最低有效 位来进行,或者通过利用要进行分布的大量存储体按模数划分来进行,通过循环法排队来 进行,或者可以用于将光线数据分布至存储器的任何其它分布机制来进行。在任何指定部 分内,光线数据还可以基于光线ID来分类。
总之,图7-图9b例示了通过控制逻辑来收集要测试光线,并且指定标识符优选地 基于将光线定义数据存储在连接至不同相交测试资源的相应高速缓冲存储器中的存储器 位置的架构。图元相交测试结果在它们完成时来自这些测试资源,并且测试控制逻辑接着 可以将针对那些完成光线的存储器位置重新指定给需要测试的新光线。可以在多个不同 相交处理/着色资源中的任一个上共享完成的光线,这可以生成要测试的进一步光线。光 线通常横越加速结构通过相交测试资源循环,并且直到标识出最接近的图元相交为止(或 者,直到确定了光线不能与除了场景背景以外的任何事物相交为止)。
转至图10,进一步例示了针对渲染系统的架构方面。图10中的一个方面在于,可 以将光线数据存储在连接至被设置用于相交测试的处理器的相应高速缓冲存储器中。另一 方面在于,分布器780如何与ITR705a-705n接口连接。另一方面是如何将用于测试的形状 数据提供给相交测试器。
分布器780通过通信链路790 (实现为硬件、进程间通信或线程间通信等)接收来 自复用器752(图7)的光线标识符。这些光线ID皆传送至集合管理部1075,其中,保持光 线ID与包围接下来要测试对象的相应GAD元素之间的关联。还可以根据队列1021、1022 以及1023中的判定1013、1014以及1015来分布光线ID,其中,光线ID等待来自集合管理 和存储部1075的确定,以测试它们的集合。例如,集合部1045已经被确定准备测试,并且 将光线ID分派给相应ITR 70fe-705n,其高速缓冲存储器106fe-1065n包含针对各个这种 光线ID的数据。集合管理部1075还可以具有针对存储有GAD元素数据和/或图元数据的 存储器的接口,以发起获得需要测试的几何形状。
这些形状从存储器103(图1)经由链路112(例如)抵达队列1040。这些形状基 于与和指定集合相关联的GAD元素的关联来标识。例如,在分层GAD的情况下,这些形状可 以是父GAD元素的子元素。各个ITR都可以针对来自队列1040的形状串行地测试其光线。 因而,当将指定集合的光线等同地分布在高速缓冲存储器1065a-1065n中时可获得最高吞 吐量,并且集合管理部1075可以最容易地基于测试指定光线集合的结果而更新集合。当指 定集合的多条光线处于一个高速缓冲存储器中,则其它相交测试器可能停顿,或者它们可 以测试来自下一个集合的光线。在再次要求集合测试同步化之前,可以容纳最大数量的无 次序测试。
在输出部750a-750n(其可以是链路750(图7)的组件)处生成输出,这被提供给 判定点751(图7)。如上所述,这种架构设置为ITR测试任何形状(S卩,图元或GAD元素)。 而且,与集合管理部1075连接的判定点751表示GAD相交测试的结果包括确定指定光线碰 撞指定GAD元素,这使得所标识方向添加至与该GAD元素相对应的集合。因而,另一实现可以包括直接向集合管理部1075提供GAD测试结果。更具体地说,该实施例例证了潜在的信 息流,并且将据此了解其它流。
要注意的其它方面是,可以将针对指定光线集合的一个以上的光线ID存储在队 列1021、1022、1023中的任一个中(集合部1047所示)。在这种情况下,针对该队列的ITR 可以随着它们变得可用而测试光线和针对第二测试(或者,无论随后测试的数量)的输出 结果两者。判定点751可以等待要汇编的集合的全部结果,或者可以在可用时传播“掉队 (straggler) ” 结果。
总之,图10例示了允许将与一个或更多个形状相关联的光线标识符的包分布到 针对多个测试资源的队列中的系统组织,各个测试资源都存储光线数据的子集。各个测试 资源都针对加载至被测试资源的形状来获取由各个光线标识符标识的光线数据。优选的 是,可以将这些形状同时依次通过全部测试资源来流动。可以将这些形状标识为以主存储 器中的地址开始的序列子类。因而,图10例示了通常针对多条光线同时测试一个形状的系 统组织。
然而,其它实施例设置为按一系列不同相交测试资源来依次测试一个形状,其中, 形状数据和光线标识符包在相交测试资源之间行进。通过使多个包“在空中”前进,增加了 测试的吞吐量。根据这个方法的实施例如下所述。
图11例示了可以实现多个计算机资源1104-1108的环形总线排布结构的计算机 架构的第一实施例。各个计算机资源都可以访问专用Ll高速缓冲存储器1125a-1125n,这 针对用于相交测试的任何计算机资源而言,包含将与来自存储器340中的形状数据存储部 1115的、被提供给该计算资源的几何形状进行相交测试的光线数据。计算资源1104-1108 之间的通信可以通过总线1106进行,这可以包括多个点对点链路或可用于这种处理器间 通信的任何其它架构。
如果计算资源共享特定存储器结构,如L2高速缓冲存储器1130和1135,则这些计 算资源(例如,共享L2高速缓冲存储器1130的计算资源1107和1106)之间的通信可以出 于某些目的而通过该高速缓冲存储器彼此通信。另外,可以将针对在该系统中测试的光线 的数据副本保持在光线数据部1110中,用于在光线数据部lllOa-lllOn之间分布其子集, 这种光线数据可以通过L2 1130和L2 1135传送。并且其较大部分还可以存储在L2高速 缓冲存储器中(如下所述)。形状数据1115还可以驻留在存储器340中,并且临时驻留在 L2 1130 1135中的一个或更多个中和高速缓冲存储器1125a-1125n中的任一个中。然而, 对存储在这种高速缓冲存储器中的光线数据进行保护而不被这种形状数据覆盖,并且,通 常将分配用于这些形状的空间的量限于那些用于当前标识为准备测试的光线包,足够以屏 蔽(shield)针对形状数据1115的延迟(latency),而不需要在没有对在测试中接下来何 时使用形状数据的任何指示的情况下尝试保持形状数据。换句话说,优选的是,避免针对光 线数据使用典型高速缓冲存储器管理算法,如最近最少使用替换法(least recently used replacement) 0
图11还例示了除了相交测试以外还可以在计算资源1104上执行应用和/驱动器 1120。而且,光线处理1121可以在计算资源1108上执行,并且可以将包数据1116存储在 高速缓冲存储器1125a中,以供包处理1121使用。可以将其它包数据存储在L2 11 中, 但类似于光线数据,优选地将包数据存储在最快速的可能存储器中。包处理执行大量与在先前图中执行的集合和其它管理逻辑相同的功能,即,追踪哪些光线与哪些GAD元素相交, 并且选择准备好进行测试的GAD元素,例如,依靠使得足够光线准备好针对所相交的GAD元 素的子类进行测试。
因为在这个实施例中,包处理1121被集中化,所以包处理1121通过发出包含多 个光线标识符、和针对(多个)形状的引用或针对要对与所标识出的光线的相交进行测 试的(多个)形状的数据在内的包,来操作。执行相交测试的各个计算资源1104-1107接 收该包。例如,依次按多个点对点链路(下面进一步说明),或者通常同时在共享总线类 型介质中(其类似于图10的架构)。各个计算资源1104-1107都确定其本地光线数据部 lllOa-lllOn是否存储有针对该包中所标识的任何光线的数据,并且,如果有,则获得针对 该光线的数据,测试它并输出结果。
因为通过包处理1121追踪针对GAD元素相交的结果,所以用于将这种结果返回至 包处理1121的任何通信机制都可接受。这种机制可以基于系统的总体架构来选择。下面 例示了一些实施例方法,并且可以包括针对所找到的各个相交的单独指示,或者允许各个 测试资源利用相交结果填充循环包。
图12例示了关联高速缓冲存储器1281-U84的计算资源1205-1208的组织的另 一实施例,各个高速缓冲存储器皆存储有光线数据U66a-U66n和包数据1216a-1216n。各 个计算资源1205-1208都根据队列1251-12M连接至至少一个其它计算资源。光线处理 1210通过队列1250向计算资源1205提供输入。光线处理1210与应用/驱动器1202通 信。来自计算资源1208的输出1255与光线处理1210通信。另一输出1256与计算资源 1205通信。图元和GAD存储部103向计算资源1205-1208提供该形状数据的读访问。
光线处理1210接收或创建用于测试的光线,并且形成包含光线标识符和针对所 标识出的光线的光线数据的包。通过队列1250-12M将该包传送至计算资源1205-1208中 的各个。各个计算资源1205-1208都采用指定包中的一部分光线,在某些实施例中,采用一 条光线,并将该部分光线存储在其光线数据部1266a-1266n中。其它实施例可以包括发送 前往特定计算资源1205-1208的包,使得光线处理1210确定哪些光线数据将存储在哪些本 地光线数据部1266a-1266n中。
在将光线加载在本地存储部中之后,此后根据仅包含光线ID (而不包含起源和方 向数据)的包标识它们。这种包还包含针对形状的引用或针对要针对该包中所标识出的 光线进行测试的形状的数据。在一些实施例中,将用于形成这种包的数据分布在计算资源 1205-1208的本地存储器U81-1284中。因而,计算资源1205-1208中的各个都按指定时间 保持针对在该系统中测试的光线的包数据的一部分,使得对涉及要接下来针对哪些形状进 行测试的哪些光线的信息进行分布。因而,各个计算资源1205-1208都可以发出光线ID的 包和形状信息,以发起测试准备测试的集合。
各个包都通过队列和计算资源而经过一轮(make a round),并接着随着填充有相 交测试结果而反向转发至起源计算资源。在一个实现中,各个计算资源1205-1208都获取 针对将发出的包的形状数据。例如,如果计算资源1205具有准备测试的包(例如,针对指 定GAD元素的光线的集合),则该计算资源可以根据这种关联(例如,GAD元素的子类)获 取要测试的形状,形成具有针对各个形状的数据的包,并且发送队列1251之外的各个包。
然后,在该包行进通过其它计算资源之后,计算资源1205接收发送的各个包。当28接收时,各个包都填充有测试该包中的形状(引用或定义数据)与存储在其它计算资源 1206-1208中的包中所标识的光线相交的结果。计算资源1205可以在其它计算资源执行它 们的测试之前或之后,对在光线数据U66a中的任何标识的本地光线进行测试。因而,光线 定义数据可以在多个快速存储器当中分布,连接至相交测试资源,并且可以按分布方式收 集测试结果。
实现根据图12的架构可以考虑使用的物理系统的各种特性。例如,将队列示出为 按一个方向发送包。然而,可以通过按两个方向(即,双向队列或多个队列)发送包来实现 益处。而且,图12例示了在计算资源当中分散包数据,这允许对更多L2高速缓冲存储器的 更多分散存储器访问,并且潜在地访问更大存储器(如主存储器103)的其它端口。
如果将包数据集中化,则利用数据引用按一个方向发送的包可以具有例如通过 计算资源1205获取的数据,而利用数据引用沿另一方向发送的包可以具有通过计算资源 1208获取的数据。这种情况可被概括成将任何输入点设置到这种环形总线架构(单向或双 向)中。
如从本公开清楚,该队列可以包括用于将用于相交测试的新光线引入到包括多个 相交测试资源的系统中的一个或更多个队列,和彼此互连相交测试资源的队列。在某些情 况下,引入新光线的队列可以包含光线定义数据(例如,等待在连接至相交测试资源的高 速缓冲存储器中存储数据的队列)。这种队列可被实现为存储有光线定义数据的主存储器 中的列表。互连用于传送包的相交测试资源的队列优选地仅包括光线标识符,而不包括光 线定义数据。
图13例示了系统1200的潜在实现的一部分,其中,计算资源可以利用芯片的多个 内核来实现,使得计算资源1205是一个内核,而计算资源1206是另一个,其中,队列1251 在内核间通信。而且例示了可以存储光线数据和形状数据的中间L2高速缓冲存储器1305。 如参照先前图所述,L2高速缓冲存储器1305可以存储场景几何图形的某一部分和加速数 据,只要通过存储这种数据就不会增加光线数据的反复(即,光线数据在高速缓冲存储器 存储部中被优选地赋予优先级)。
图14a-图14c皆例示了根据可以采用示范性系统的各种实现的队列的各种关系。 一般来说,计算资源间通信不需要串行或1 1。例如,图Ha例示了一个输入部1404可 以馈送两个队列1405和1406,这皆可以分别专用于一个计算1407和1408。例如,在计算 1407和1408在单一物理芯片上实现的情况下,那么,输入1404可以是芯片级输入,并且各 个队列1405 1406都可以用于特定内核。
图14b例示了单一输入可以馈送多个内核,这皆可以馈送计算14071498,这还皆 可以分别向相反队列1406 1405发送数据。图Hc例示了队列1411可以接收输入1410,并 且向两个计算1407和1408提供输出。因而,图14a-图Hc例示了可以根据这些方面针对 传送包实现各种排队策略。
图15是用于例示在存在高速缓冲存储器层级的多个级别(例如,1级高速缓冲 存储器1502和1503和2级高速缓冲存储器1504)的情况下,可以提供光线数据的各种组 合。例如,光线数据1507可以包括光线数据的不相交子集1505和1506,并且包括未呈现在 1505或1506中的其它光线数据。光线数据1505和1506可以动态地改变,如在一个队列 馈送一个以上的计算资源的情况下(图14c),那么,光线数据可以向光线数据1505或1506反映存储在光线数据1507中的光线的动态指定。
图16更详细地例示了队列1251和可以存储的数据的实施例实现。例示了包 1601a-1601n,各个都具有相应光线标识符 1605a_1605p、1606a_1606p 以及 1607a_1607p, 并具有对应碰撞信息域1610a-1610p、1611a-1611p以及1612a_1612p。包1601a包含针对 形状1的数据1615a,包1601b包含针对形状2的数据1615b,包1601η包含针对形状η的 数据1615η。可以看出,队列1251被计算资源1205馈送并且被计算资源1206读取。当然, 可以实现各种其它排队策略,图14a_14c中例示了其中一些排队策略。
在此作为术语使用的“排队”并没有暗示针对在任何指定计算资源中测试的光线 的“先入先出”的必要条件。一般而言,任何指定包中标识的光线将大约均勻地分布在针 对不同计算资源的本地光线存储部中,使得任何指定包应当找到分布在大量计算资源当 中的其光线,使得针对各个包实现并行化。在针对一个包的大量光线需要在一个计算资 源中测试的情况下,那么,在另一计算资源没有光线针对该包相交的情况下可能形成气泡 (bubble)。这种气泡可以被其它计算充满,包括另一包的其它相交测试。在一些实施例中, 各个计算资源都可以保持针对多线程的状态,并且在针对指定包的停顿条件下在线程之间 切换。只要针对包之间的各个相交测试的临界数据可以被保持在寄存器中,那么净吞吐量 优点应当可实现。
在示范性系统的操作的多个方面的部分摘要中,各个计算资源都响应于接收到的 包而工行。当一个包从针对特定计算资源的输入队列抵达时,该计算资源检查该包中的光 线标识符,并且确定该包中标识的哪些光线具有存储在其相应存储器中的、针对它们的数 据。换句话说,一个包可以利用光线标识符形成,而不需要计算资源包含或具有针对该包中 所标识的光线的光线数据的快速访问的先验获知。而且,各个计算资源都不相应地尝试获 取针对一个包中所标识的全部光线的光线数据,相反,仅确定该计算资源在其本地快速存 储器中是否具有针对一个包中所标识的任何光线的光线数据,并且仅针对该光线与所标识 出的形状的相交而进行测试。
图17是用于描述怎样可以在实施例计算资源中处理的一个包的方面。图17例示 了包1601a进入计算资源1206。计算资源1206利用来自包1601a的光线标识来对查询其 光线数据(例如,假设光线160 具有光线ID 31,并且匹配至光线数据存储部1266b中的 光线ID 31)。经由1290获得与光线ID 31相关联的起源和方向。而且,如果在该包中标识 出形状数据,则从当前存储该形状数据的存储器资源1291获取1715形状数据。如果在该 包中提供形状数据,则直接使用该形状数据。接着,针对光线31与形状1(或由获得的数据 所定义的形状)的相交而进行测试1720。
如果所测试形状数是GAD元素(1725),则这种相交测试的结果要确定仍可能具有 与所测试光线相交的可能性的场景图元的较小子集。因此,将正碰撞结果写回17 至用于 光线标识符(即,针对光线31的标识符)的位置1610a中的包。在一些实现中,因为包的 发送器可以追踪发送哪些光线ID和在一个包中采用哪些次序,所以仅需要写回结果,而隐 含表示利用与发送次序相同的次序。因而,在经过测试器之后,包发送资源可以处理测试结^ ο
另一方面,如果所测试形状是图元(1730),则可以进行最接近的图元相交确定 (1731),以确定该检测到的相交是否比任何先前相交更靠近。如果是,则可以利用包存储所相交图元,并且可选地存储相交距离,或者以其它方式输出。因为指定光线可以与多个包相 关联(即,同时与多个GAD元素相关联),所以针对每次光线与GAD元素相关联时保持1733 计数,使得该计数可以每次递减,使得确定光线何时不再处于仍需要测试的任何其它包中, 这允许释放专用于该光线的存储器,以准许另一光线进入。
总之,本地快速存储部中的、与各条光线相关联的数据优选地包括最接近的检测 到的图元相交标识符,这可以包括图元引用和针对该相交的参数化距离。与各条光线相关 联的其它数据包括存在该光线的GAD元素光线集合的计数。在测试了各个集合之后,递减 该计数,而当创建另一集合时,递增该计数。当该计数为零时,接着,标识为最接近的相交的 图元是被确定为与该光线相交的图元。
图18涉及实施例的单一指令多数据(SIMD)架构,这可以在一个包标识出用于测 试的几何图形带的起点的情况下使用。在一个实施例中,GAD元素图形的节点通过边缘连 接至一个或更多个其它节点,其中,各个节点都表述几何图形加速数据的元素,如球形或轴 对准包围盒。在一些实施例中,该图形是分层的,使得在测试指定节点时,该指定节点的子 节点包围住还被父节点包围的图元选择。GAD元素最终将包围图元选择。
在实现中,作为指定元素的子节点的加速元素串可以根据该串中第一元素的存储 器地址来标识。接着,该架构可以针对下一个元素的起点处的数据设置预定跨距(stride) 长度。可以设置标志,来表示作为一指定节点的子节点的指定元素串的末端。类似的是,图 元带可以根据具有已知跨距长度的开始存储器地址来标识,使得定义下一个图元。更具体 地说,针对三角形带,序列中的两个顶点都可以定义多个三角形。
图18用于例示SIMD架构的多个方面,类似于参照图6例示的SIMD架构。在该实 施例中,接收包1601a,包1601a包含多个光线标识符1605a-1605n (可选地包含用于存储接 收相交测试结果1610a-1610n的空间),并且可以包括形状定义数据的形状数据、针对形状 的标识符,或针对要测试的形状带的开头的标识符1815a。
这个实施例架构可以在将很少的、更强力的具有更大高速缓冲存储器的不同处理 资源用于相交测试的情况是合适的。这里,希望各个不同处理资源一般而言在其本地存储 部中具有与可以根据SIMD指令测试的大量光线大约相同的大量光线(相反,图10例示 了各个高速缓冲存储器都优选地具有针对各个集合的一条光线的实施例)。例如,如果在 SIMD执行单元中可以一次测试四条光线,则优选的是,在传送的各个包中,在针对该SIMD 单元的本地存储部中统计学上具有大约四条光线。例如,如果设置四个不同处理资源,并且 各个处理资源都具有能够测试四条光线的SIMD单元,则一个包可以具有大约16条所引用 光线。另选的是,可以针对具有SIMD单元的各个处理资源提供单独包,使得例如一个包可 以具有四条所引用光线,其中,存在4x SIMD单元。
在一个实施例中,接收包1601a的第一计算资源1205可以使用用于获取针对形状 带的数据的标识符1815a。接着,存储在光线数据部U66a中的在包1601a中引用的各条光 线都在计算单元1818a-1818n中进行测试。在形状带实施例中,获得形状带1816,并且包括 形状1-4。各个形状都可以通过各个计算单元1818a-1818n流动,针对各条光线与加载到该 单元中的光线的相交而进行测试。针对该带中的各个形状,计算资源可以形成包(所示包 1820),各个包都包含针对一个形状而测试光线的结果。
另选的是,可以在针对各条光线的结果部分中设置单独位,以接受相交结果,并且可以传送一个包。为了避免再次从较慢存储器获取,希望这种方法针对以下情况是最合适 的,其中,多个计算资源可以共享L2,或者,通过第一计算资源的获取使得将形状数据同样 传送至其它计算资源。例如,DMA事务可以具有多个对象(各个都是需要接收要测试形状 的指定流的不同计算资源),是针对某些实现的合适存储器事务模型的示例。主要的考虑因 素是,缩减一次以上从主存储器103获取同一数据。
如前所示,各个相交测试资源确定哪些光线标识符具有存储在其光线数据存储部 中的光线数据。针对任何这种光线,获得光线起源和方向。先前,实施例假设,测试资源可 以针对一个或更多个标识形状的序列来测试指定标识光线。然而,这可能存在这样的情况, 即,处理资源可以在不具有相当多的额外延迟的情况下,针对指定光线与多个形状的同时 相交进行测试,或者针对多条光线与一个形状的相交进行测试,或者对这两者的组合。在图 18中,示出了 SIMD架构,其中,在被设置用于相交测试的一个计算资源内,四个SIMD单元中 的各个都可以针对不同光线与依次提供给该SIMD单元的形状的相交而进行测试。该形状 序列可以基于用作针对场景数据存储部340的索引的形状带引用来获取,以发起获得形状 序列,该形状序列在计算单元123或四个计算单元中测试。
优选的是,基于检测到的、收集的光线与加速数据元素之间的相交而将光线收集 到多个集合中。因而,在这个实施例中,在将不同光线针对4个不同形状而在各个SIMD单 元中进行测试的情况下,包含SIMD单元的计算资源可以将结果重新格式化成光线的包,各 个包都引用形状。
另外,利用SIMD单元的其它架构可以提供将收集的多条光线获取到集合中。如所 讨论的,接下来要针对这种光线与和该集合相关联的形状有关的形状的相交进行测试。例 如,可以有连接至该针对集合形状的16或32个形状。可以将这些形状的第一子集加载到不 同SIMD单元中,并且,所收集光线可以通过各个SIMD单元流动(即,同一光线同时通过各 个SIMD单元)。可以通过各个SIMD单元单独形成结果包,并将接下来的形状加载到SIMD 中。接着,光线可以通过SIMD单元而再次循环。可以继续这个过程,直到已经针对所收集 光线测试了全部相关形状为止。
图18b例示了针对用于这种实施例的、计算单元1818a的基于时间的进展。在时刻 1,测试形状1和光线1。将这些形状从1到q编号,并且将来自集合的光线从1到η编号。 在时刻η,测试形状1和光线η。在下一个循环的开始(时刻q_l*n+l),在计算单元181a中 开始测试最后形状。
图19例示了包1905如何可以针对相交测试而在计算资源与测试结果之间分散的 方面,该测试结果最终聚结在计算资源1910中,该计算资源1910保持针对与所标识出的形 状1905相关联的包的光线的存储器。图19例示了处理期间的实施例系统状态。具体来 说,计算资源1910-1914皆接收到了针对存储在该计算资源可访问的存储器中的光线的光 线ID信息,针对相交测试了所标识出的形状并且输出结果1915-1919,该结果包括所标识 碰撞1915、1917、1919。碰撞或未击中(miss)可以是默认行为,使得未击中例如并不用正值 来指示,或者,可以将该包中的默认值设置成未击中。在测试之后,计算资源1910至少收集 该碰撞信息;这里,计算资源1910可以管理在测试系统中的全部包信息(或其子集),这包 括针对该特定形状的包信息。
存储器1966的实施例组织示出了映射至大量光线ID (光线A、D等)的形状引用32的逻辑组织。而且例示出了针对与Ref#l(即,针对测试的形状的引用)有关的行的一些槽 是空的。因而,当计算资源1910接收到碰撞结果时,它首先填充指定Ref#l集合的剩余空 槽,接着,在1966中例示了,光线η在存储器1966内开始针对Ref#l的新包。下面,因为 针对Ref#l的包是满的,所以可以确定这个包准备就绪用于测试。在一些实施例中,获取 根据Ref#l引用的形状的子GAD元素,并且利用各个包中的与Ref#l相关联的全部光线来 形成一个包。例如,可以有Ref#l的32个子GAD元素,由此,可以形成32个包,例示了包 1922-1924。在一些实施例中,计算资源1910可以获取定义了子形状的数据,并将该数据存 储在包1922-1924中。另选的是,可以提供允许其它计算资源获取这种数据的引用。
在某些情况下,计算资源1910还可以在创建的包内存储所标识出的光线,因而, 可以在将该包发出之前首先测试该光线。在这种情况下,计算资源1910可以存储在发出包 中获取的形状数据。如参照图12讨论的,各个实现可以允许向一个或更多个其它计算资源 发送这种包,例如,按照双向排队或任一对任一的方式,等。
图20是用于说明如何实现根据所述方面的方法的一些实施例。发送2005具有形 状信息、光线ID以及可以写回碰撞信息的位置的包,该碰撞信息这一点上可以被“置零”或 以其它方式设置为“不关心(don't care)”。针对光线1 ID进行2006进行第一测试,并且 发现碰撞,因而,将1写入该包,传送该包用于第二测试2007,其中,发现光线3是针对第二 测试本地的,并且发现其未击中,因而,写入0(或保持),在该包中向前传送来自测试2006 的碰撞信息(即,可以无次序地测试该包中的光线)。针对光线2进行第三测试2008,并且 发现碰撞。这个实施例示出了可以不按包中呈现的次序来测试该包中的光线,并且测试次 序取决于哪些测试器最能够存取针对指定光线ID的光线数据。测试继续(2009),直到测试 了全部光线ID为止。接着,可以聚结该包,意指仅需要保持碰撞信息。这种聚结可以在发 送包的计算资源处进行。可以将新碰撞结果与来自先前存在的包的碰撞结果组合(参见图 19)。接着,可以确定2025该包中光线的集合是否准备好进行测试(例如,基于完整度)。 如果不是,则可以处理2040不同包。如果是,则可以获取2030与该包相关联的形状的子形 状,其中,父节点2041是所述形状并且该节点的子节点例如用2042标识。接着,可以针对 各个子类形状与来自与该父相关联的包的光线标识符产生003 新包。
图21和图22在可以用于实现上述方法方面的背景系统中总结上述方法的各个方 面。具体来说,图21描绘了方法2100包括以下步骤在主存储器中存储图元和GAD元素 (2105);以及利用光线定义数据(例如,起源和方向信息)来定义0110)相交测试的光线。 各条光线都可利用标识符来标识(2115)。光线定义数据的子集存储在与多个处理资源中的 相应处理资源相关联的本地存储器中。通过在处理资源当中分布012 针对那些光线的 标识符和形状数据,来安排进行测试的光线。在具有针对本地存储的那些光线的定义数据 的处理资源中,测试光线(2130)。在某些情况下,各条光线都可以仅在一个本地存储器中具 有定义数据。
将对光线与图元之间的相交的指示从计算资源的第一子集向第二子集传送 013 。第二子集对该相交着色0140)。该着色可以获得新光线,为此,在本地存储器当中 分布2145新光线的定义数据,优选地替换完成数据的定义数据。接着,如上所述测试那些 光线。可以实例化或以其它方式分配计算资源来实现计算资源的子集,这包括实例化在多 线程化处理器或内核上执行的线程。这种分配可以随着时间而变,并且不一定是用于相交测试的资源及着色的多个资源之间的静态分配。例如,执行相交测试的线程的内核可以完 成一系列相交测试,利用对与图元相交的光线的大量指示来填充存储器空间,接着,该内核 可以切换成对那些相交进行着色。
上面一些实施例主要从对GAD元素进行相交测试的观点来说明,其中,这种测试 的结果针对越来越小分组的图元来分组光线(经由光线ID与特定GAD元素的关联)。公开 了根据测试所标识的GAD元素最终将包围住要针对标识为与该GAD元素相关联的组的一部 分的光线而进行测试的图元。针对具有图元的包,相交测试的结局是对光线/图元相交的 标识,这通常利用定义光线的其它数据(为方便起见),通过至少追踪针对指定光线检测到 的最接近的这种相交来考虑。
接着,在针对全体场景测试了指定光线之后,可以将针对各条光线的最接近的检 测到的相交(若有的话)与光线ID —起返回至应用或驱动器或另一处理(其可以使用这 种结果用于开始着色处理)。光线标识符可以经由排队策略(如根据在此的各个实施例的 策略)返回(即,不必指定哪些计算机资源针对特定相交执行着色代码,也不必指定特定相 交测试资源由预定着色资源来测试其检测到的相交)。在一些相交测试中,针对相交测试计 算重心坐标,并且若希望,可以将这些坐标用于着色。这是可以从相交测试器向着色器发送 的其它数据的示例。
一般来说,在此描述的功能、特征以及其它逻辑中的任一个都可以利用多种计算 资源来实现。计算资源可以是线程、内核、处理器、固定功能处理部件等。而且,可以将诸如 集合或包管理的其它功能设置或实现为可以被本地化成一个计算资源或者在多个计算资 源当中分布的处理、线程或任务(例如,分布在多个物理计算资源当中的多个线程)。该任 务基本上包括“在空中”标识具有针对具有通过该计算资源管理的集合的形状的、相交测试 结果的包。
同样,用于相交测试的计算资源还可以包含其它处理,如被用于对检测到的相交 进行着色的着色处理。例如,执行相交测试的处理器还可以执行着色线程。例如,在环线总 线实现中,如果针对一个处理资源的队列当前没有相交测试的任何包,则数据处理资源可 以开始对先前标识的相交进行着色的线程。主要差异是,在指定处理器上具有相交测试线 程还运行针对被该线程检测到的光线相交的着色线程之间不存在需求或一般关系。相反, 排队后的光线/图元相交提供针对着色线程的光线输入,由此相交测试资源与着色资源之 间的映射可以是任一对任一,使得不同硬件单元或软件单元可以针对同一光线进行相交测 试禾口着色。
同样,在不同功能之间(例如,在相交测试资源之间和相交测试与着色之间)居中 传送的各种队列和其它接口可以根据各种缓冲策略中的任一种而在一个或更多个存储器 中实现,这些缓冲策略可以基于与可用于实现它们的物理资源有关的考虑来选择。队列可 以根据起源资源或通过目的地资源来控制。换句话说,目的地可以在共享总线上监听数据, 并且可以采用其需要的数据,或者经由存储器映射、直接传送等来将数据定址给目的地。
通过另一实施例,如果内核可以支持多线程化,则可以将一个线程专用于着色,而 将另一线程专用于相交处理。然而,为避免在损害保持光线数据的情况下由获取纹理和其 它着色信息而产生的高速缓冲存储器不连贯,必须采用内核,这继续保持针对用于相交测 试资源的高速缓冲存储器分配的优先级。
因为设想这个架构的优点是缩减针对形状数据的高速缓存需求,所以能够缩减针 对该种数据的高速缓冲存储器相干性考虑。事实上,在一些实现中,在保持特定形状可用方 面,或者在预测何时再次使用形状数据方面,可能需要花费很少努力。相反,当指定光线ID 包准备好进行测试时,针对那些包的形状数据可以从存储它的最快速存储器获取,并且一 般来说,处理其它包的现有工作负荷将屏蔽在这种获取中发生的任何延迟。在测试用于相 交的那些形状之后,该形状数据可以允许覆盖。
在此标识的任何队列都可以在共享存储器资源中,在SRAM中、作为链接列表、循 环缓冲器、存储器顺序化或条纹化存储器位置,或在针对队列的本领域已知的任何其它功 能形式中实现。队列可以操作以保持包的排序,使得首先抵达的包首先退出,但这不是必要 条件。在一些实施例中,各个计算资源都可以设置有这样的能力,即,检查其队列中的指定 数量的包,以确定无次序地处理包是否有利。这种实现比有序系统更复杂,但若希望可以设 置。
计算机可执行指令例如包括使得或以其它方式配置通用计算机、专用计算机或专 用处理装置的指令和数据,以执行特定功能或功能组。该计算机可执行指令例如可以是二 进制、中间格式指令,如汇编语言或源代码。尽管一些主题可能已经采用专用于结构特征和 /或方法步骤的实施例的语言进行了描述,但应当明白,在所附权利要求书中限定的主题不 必受限于这些描述的特征或行为。相反,该特征和步骤被公开为所附权利要求书的范围内 的系统和方法的组件的实施例。
上面,对计算硬件和/或软件编程的各个实施例以及这种硬件/软件怎样可以互 相通信的实施例进行了说明。硬件或设置有软件和这种通信接口的硬件的这些实施例设置 了用于实现归因于它们中的各个的功能的装置。例如,用于根据在此的一些实施例相交测 试的装置可以包括以下中的任一个(1)多个可独立操作计算资源,各个都具有本地存储 的光线定义数据,并且可操作用于响应于提供的针对那些光线的标识符和形状数据来针对 该光线与形状的相交进行测试。
例如,用于管理光线的集合的装置包括设置有编程、或FPGA或ASIC,或其一部分 的计算资源,其实现了追踪光线标识符组,并且将组与加速数据的元素进行关联,并且,其 可以使得或提供用于使得形成具有光线标识符、和针对形状的引用或根据与光线标识符的 组相关联的形状所确定的形状数据的信息的包。
例如,上述功能包括通过队列传送针对已经完成相交测试并且与图元相交的光线 的标识符,以在设置用于对那些相交进行着色的计算资源中处理。用于实现这个功能的装 置可以包括硬件队列,或组织为队列或列表的共享存储器空间,如设置为环形缓冲器或设 置为链接列表等的存储器。该装置由此可以包括使从队列或存储器中的位置中的下一个或 指定槽获取光线标识符和图元标识符的编程和/或逻辑。控制器可以管理该队列或存储 器,以保持用于传出和传入光线和图元标识符的、下一个读取位置和下一个写入位置。这种 排队装置还可以用于在那些资源彼此传送光线标识符的包和形状数据时将相交测试资源 接口连接在一起。这种排队装置还可以用于接收针对等候开始相交测试的新光线的光线标 识符。因而,各个这种更具体的排队功能可以通过这些装置或它们的等同物来实现。
例如,上述功能包括对光线与图元之间的标识相交进行着色。这个功能可以通过 包括设置有与相交图元相关联的编程的计算硬件的装置来实现。该编程可以使该计算硬件获取诸如纹理、程序上的几何图形修改等的数据,以确定需要哪些其它信息来确定在光碰 撞该图元时其具有哪些效果。该编程可以使得发送要进一步相交测试的新光线(例如,阴 影、折射、反射光线)。该编程可以与用于使发送这种光线的应用编程接口连接。如通过着 色编程定义的光线可以包括起源和方向定义信息,并且控制器可以确定针对这种定义光线 的光线标识符。固定功能硬件可以用于实现这种功能的多个部分。然而,优选的是,若希望 或必要,可允许利用可以根据与相交的图元相关联的代码和/或其它代码设置的计算资源 的可编程着色。
例如,上述另一功能在于保持对相交进行测试和/或等候相交测试的光线的主列 表,并且,在与相交测试的装置相关联的分布式高速缓冲存储器中分布这些主光线的子集。 这种功能可以利用包括处理器或处理器组的装置来实现,该处理器或处理器组可以使用集 成或单独存储器控制器,以在实现那些功能的编程的控制下与用于存储数据的存储器接口 连接。这种编程可以至少部分地包括在与相交测试功能相关联和/或以其它方式控制相交 测试功能的驱动器中。
所述和/或要求保护的功能和方法的多个方面可以在包括如下更详细讨论的计 算机硬件的专用或通用计算机中实现。这种硬件、固件以及软件还可以具体实施在视频卡 或其它外部或内部计算机系统外围设备上。各种功能可以设置在定制的FPGA或ASIC或其 它可配置处理器中,而一些功能可以设置在管理或主机处理器中。这种处理功能可以用于 个人计算机、台式计算机、膝上计算机、消息处理器、手提式装置、多处理器系统、基于微处 理器或可编程消费者电子装置、游戏控制台、网络PC、小型计算机、大型计算机、移动电话、 PDA、寻呼机等。
而且,通信链路和其它数据流如附图中所示构成,如图1的链路112、121以及118。 并且其它附图中的类似链路可以根据标识的功能的实现而按多种方式实现。例如,如果相 交测试单元109包括在一个或更多个CPU上执行的多个线程,则链路118可以包括这种CPU 的物理存储器访问资源和合适存储器控制器硬件/固件/软件,以向光线数据存储部105 提供访问。通过另一实施例,如果相交测试区域140在通过PCI快速总线连接至主机140 的图形卡上,则链路121和112利用PCI快速总线来实现。
如在此描述的相交测试通常存在于较大系统和系统的组件的背景下。例如,处理 在诸如局域网或广域网的网络上分布,并且可以以其它方式利用对端技术等来实现。任务 的分割可以基于产品或系统的希望性能、希望价格点或其一些组合来确定。在至少部分地 采用软件实现所述单元中的任一个的实施方式中,表示单元功能的计算机可执行指令可以 存储在计算机可读介质上,举例来说,如磁盘或光盘、闪速存储器、USB装置,或在具有诸如 NAS或SAN设备的存储装置的网络等中。诸如用于处理的数据的其它相关信息也可以存储 在这种介质上。
而且,在某些情况下,在此因考虑更合理地向普通技术人员表达要点而使用了术 语,但这种术语不应被视为暗示地限制被所公开实施例和其它方面所涵盖的实现的范围。 例如,光线有时被称为具有起源或方向,并且为理解所公开的方面,这些单独条项中的各个 都可以被视为分别表示为3-D空间中的一点和3-D空间中的方向矢量。然而,在继续保持 在本公开内的同时,可以提供用于表示光线的多种其它方式中的任一种。例如,光线方向还 可以采用球面坐标来表示。还应明白,在保持初始表示的数据的信息的意义的同时,可以将按一种格式提供的数据变换或映射成另一格式。
而且,在前述公开中例示和描述了许多实施例,各个都例示了可以具体实施根据 权利要求的系统、方法、以及存储在计算机可读介质上的计算机可执行指令的不同方面。根 据必要,不是各个实施例都可以例示各个方面,并且这些实施例不是例示这种方面的排它 组合。相反,参照一个图或实施例例示和描述的方面可以与参照其它图例示和描述的方面 一起使用或组合。这样,普通技术人员根据这些公开将明白,上述公开不限于有关根据权利 要求的实施方式的内容,相反,权利要求的范围在此限定了发明的实施方式的宽度和范围。
权利要求
1.一种用于对由多个图元组成的3-D场景的2-D表现的光线追踪渲染进行控制的系 统,该系统包括一个或更多个相交测试资源,该一个或更多个相交测试资源能够访问相应高速缓冲存 储器,该相应高速缓冲存储器存储有原版光线数据的多个子集;控制逻辑,该控制逻辑可操作用于向各条光线指定标识符,并且按相应测试资源来控 制对各条光线的测试,该相应测试资源能够访问在该各条光线的相应高速缓冲存储器中 的、针对该光线的定义数据,该控制是通过向所述多个相交测试资源中的相应相交测试资 源提供光线标识符来实现;以及输出队列,该输出队列存储用于对已经通过相交图元而完成相交测试的光线进行标识 的数据并存储针对所相交的图元的数据。
2.根据权利要求1所述的系统,该系统还包括多个计算资源,该多个计算资源用于执 行与多个图元相关联的着色器代码例程,所述控制逻辑可操作用于对要基于从所述输出队 列获取的数据而执行的着色器代码例程进行标识。
3.根据权利要求2所述的系统,其中,执行所述着色器代码例程生成要相交测试的新 光线,并且,所述系统还包括针对所述多个相交测试资源的输入队列,该输入队列可操作用 于接收所述新光线,并且,所述控制逻辑可操作用于随着其它光线完成了相交测试而开始 对所述新光线的相交测试。
4.根据权利要求1-3中的任一项所述的系统,其中,各个相交测试资源都被设置成执 行以下处理在接收到针对存储在该各个相交测试资源的相应存储器中的光线的标识符的 情况下,针对设置有该光线标识符的数据的光线,通过对所标识出的光线与一系列几何形 状的相交进行测试,而对接收到该光线的标识符进行响应。
5.根据权利要求1-4所述的系统,其中,所述相交测试发生在光线与几何形状之间,该 几何形状包括从kD树、轴对齐包围盒以及球形的剖切面中的一个或更多个中选定的加速 结构元素。
6.根据权利要求1-5中的任一项所述的系统,其中,各个相交测试资源都被设置成执 行以下处理用于接收光线标识符的包;用于确定该各个相交测试资源的相应存储器是否 存储有针对所标识出的任何光线的定义数据;并且,用于利用所述包中表示的几何形状来 测试这样所标识出的任何光线。
7.根据权利要求6所述的系统,其中,所述多个相交测试资源被设置成执行以下处理 用于向所述多个相交测试资源中的下一个相交测试资源依次传送所述包,直到存储有针对 该包中的光线的数据的全部相交测试资源已经接收到该包为止。
8.根据权利要求6-7中的任一项所述的系统,其中,各个相交测试资源还被设置成执 行以下处理在所述包中存储加速元素测试的结果,并且,在所述相交测试资源的相应高速 缓冲存储器中存储针对各条光线的图元测试的结果,直到该光线完成了在所述场景中的相 交测试为止。
9.一种在具有多个计算资源的系统中对由多个图元组成的场景的光线追踪进行控制 的方法,其中,各个计算资源都连接至相应本地存储器和共享主存储器,该主存储器在延迟 上比该本地存储器高,该方法包括以下步骤在所述计算资源的本地存储器中分布用于对要在所述场景中相交测试的多条光线的相应子集进行定义的数据;进行确定以测试用于与几何形状相交的光线组,该组的成员共同存储在多个所述本地 存储器中;向所述计算资源提供针对所述几何形状的数据和光线标识符,以使得其本地存储器存 储有针对所述组中的光线的定义数据的至少一个计算资源能够接收所述几何形状数据和 所述光线标识符;以及从所述计算资源接收对检测到的在所述组的光线与所述几何形状之间的相交的指示, 该指示是从在其本地存储器存储有针对该光线的定义数据的至少一个计算资源中测试所 述组中的各条光线而得到的。
10.根据权利要求9所述的方法,该方法还包括以下步骤从所述主存储器获取定义所 述形状的数据,并且其中,所述提供针对所述几何形状的数据的步骤使得向具有所述组的 光线标识符的多个计算资源提供所述形状定义数据。
11.根据权利要求9-10中的任一项所述的方法,其中,所述指示包括针对几何图形加 速元素与光线之间的相交的数据,并且,所述光线组是通过收集被确定为与该同一几何图 形加速元素相交的光线而形成,并且,该方法还包括以下步骤延期对与所述几何图形加速 元素有关的几何图形加速元素的进一步测试,直到收集到足够数量的光线为止。
12.根据权利要求9-11中的任一项所述的方法,其中,所述本地存储器包括高速缓冲 存储器,并且,该方法还包括以下步骤保护定义了指定光线的数据使该数据在其高速缓冲 存储器中不被覆盖,直到该光线完成了相交测试为止。
13.根据权利要求9-12中的任一项所述的方法,该方法还包括以下步骤针对具有存 储在相应本地存储器中的光线定义数据的光线,在该相应本地存储器中保持相应当前最接 近的检测到的相交;并且,响应于识别出任何图元与指定光线之间的该最接近的可能相交 而生成用于接收到的各个指示。
14.根据权利要求9-13中的任一项所述的方法,其中,针对所述几何形状的数据包括 来自以下集合的选择⑴标识了要测试的一个或更多个形状的引用;以及⑵定义了要测 试的一个或更多个形状的数据。
15.根据权利要求9-14中的任一项所述的方法,其中,提供步骤包括将多个光线标识 符排队成第一队列,所述多个计算资源连接到该第一队列以进行接收,并且,接收步骤包括 从第二队列接收所述指示。
16.根据权利要求9-15中的任一项所述的方法,该方法还包括以下步骤在所述主存 储器中保持原版的所述光线。
17.一种存储有计算机可执行代码的模块的计算机可读介质,该计算机可执行代码的 模块用于在一个或更多个计算资源上实现根据权利要求9-16中的任一项所述的方法。
18.一种利用光线追踪来对由多个图元组成的3-D场景的2-D表现进行渲染的系统,该 系统包括存储器,该存储器存储有组成3-D场景的图元;多个相交测试资源,各个相交测试资源都可操作用于利用所述多个图元中的至少一个 图元来对在所述场景中行进的至少一条光线进行测试,并且可操作用于输出对检测到的相 交的指示;多个着色器资源,各个着色器资源都可操作用于针对检测到的光线/图元相交运行着 色例程;第一通信链路,该第一通信链路用于向所述着色器资源输出对检测到的相交的指示;以及第二通信链路,该第二通信链路用于向所述相交测试资源发送由运行所述着色例程而 产生的新光线,其中,可以向所述相交测试资源发送新光线,并且,按照与发送该新光线的 相对次序不同的次序来完成相交测试。
19.根据权利要求18所述的系统,该系统还包括用于在所述多个相交测试资源之间传 送消息的信道,其中,所述多个相交测试资源中的各个相交测试资源都被设置成执行以下 处理将由该相交测试资源接收到的消息中的数据解释为包含多个光线标识符,并且,对该 消息中所标识的选定光线进行相交测试。
20.根据权利要求18所述的系统,其中,所述多个相交测试资源按环形设置,以在所述 相交测试资源之间传送光线标识符的包。
21.根据权利要求18所述的系统,其中,所述多个相交测试资源中的各个相交测试资 源都可操作用于执行以下处理基于确定与该相交测试资源相关联的高速缓存是否存储有 针对在所述多个相交测试资源之间传送的消息中所标识的任一光线的定义数据,来选择用 于测试的相应光线。
22.根据权利要求18所述的系统,其中,所述多个相交测试资源被实现为在一个或更 多个计算内核上执行的计算机可执行指令的线程,各个相交测试资源都具有对在所述场景 中行进的多条光线的子集的本地高速缓冲存储器访问。
23.根据权利要求18所述的系统,其中,所述存储有组成3-D场景的图元的存储器被实 现为用于一个或更多个计算内核的主存储器,该一个或更多个计算内核能够并发地执行多 个线程,该线程的数量是按照时变的方式而在实现所述相交测试资源与实现所述着色器资 源之间进行分配。
全文摘要
本发明涉及用于光线追踪渲染的并行相交测试及着色的架构。在一个实施例中,对场景进行光线追踪包括利用与多个着色资源连接的多个相交测试资源,这些相交测试资源可通过链路/队列聚合集体通信。从测试到着色的队列包括相应光线/图元相交指示,该指示包括光线标识符。从着色到测试的队列包括用于测试的新光线的标识符,其中,定义该光线的数据单独地存储在分布在所述多个相交测试资源当中的多个存储器中。光线定义数据可以保持在分布式存储器中,直到光线完成相交测试为止,该光线定义数据可基于光线标识符而被多次选择用于测试。可以使用加速形状的结构。包括光线标识符和形状数据的包可以在多个相交测试资源之间循环,各个资源都可以对在该包中标识的光线进行测试,并且针对该光线的定义数据呈现在其存储器中。加速形状测试结果允许基于所相交形状收集光线,并且通过将光线标识符排队来指示出最接近的检测光线/图元相交,以用于着色。
文档编号G06T15/06GK102037497SQ200980118357
公开日2011年4月27日 申请日期2009年3月20日 优先权日2008年3月21日
发明者史帝芬·波希尔, 莱恩·R·沙斯伯里, 詹姆斯·亚历山大·麦康比, 路克·堤尔曼·彼特森 申请人:柯斯提克绘图有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1