具有最小存储器带宽要求的优化的光线编历算法的高速缓存利用的制作方法

文档序号:6455490阅读:106来源:国知局
专利名称:具有最小存储器带宽要求的优化的光线编历算法的高速缓存利用的制作方法
技术领域
本发明的实施例总体涉及图像处理领域。
背景技术
从三维场景再现二维图像的处理通常被称为图像处理。随着现代 计算机行业的发展,图像处理也向前发展。在图像处理发展中的一个 具体的目标是使三维场景的二维模拟或再现尽可能真实。再现真实的 图像的一个限制在于现代监视器通过使用像素来显示图像。
像素是能够在监视器上被照亮的最小的空间区域。大多数现代计 算机监视器会使用数十万或数百万的像素的组合来组成整个显示器 或再现的场景。各个像素排列在网格图形中并共同覆盖监视器的整个 观看区域。各个像素中的每一个都可以被照亮以再现用于观看的最终 图片。
用于利用像素将真实世界的三维场景再现到二维监视器上的一 种技术被称为栅格化。栅格化是将二维图像以矢量格式(场景内的几 何物体的数学表示)表示,并将图像转换为用于在监视器上显示的各 个像素的处理。栅格化在快速再现图形以及利用相对较少量的计算能
力方面是有效的;但是,栅格化也存在一些缺陷。例如,栅格化通常 有着缺乏真实性的缺陷,因为栅格化没有基于光的物理属性,而是基 于投射到二维平面上的场景中的三维几何物体的形状。此外,利用栅 格化再现场景要求的计算能力直接与要再现的场景的复杂度的增加 成比例。随着图像处理变得越真实,再现的场景也变得越复杂。因而, 栅格化随着图像处理的发展而遭受着缺陷,因为栅格化与复杂度直接 成比例。用于利用像素将真实世界的三维场景再现到二维监视器上的另 一种技术被称为光线追踪。光线追踪技术追踪进入到要在计算机屏幕 上再现的三维场景中的虛构的光线的传播,所述光线的行为类似于光 的光线。光线从坐在计算机屏幕后面的观看者的眼睛发出,并穿过构 成计算机屏幕的像素,通向三维场景,每个被追踪的光线进入到场景 中并且可以与场景中的物体相交。如果光线与场景中的物体相交,那 么物体的属性和几个其他的影响因素用于计算颜色和光的数量,或者 如果缺乏物体,则暴露光线。这些计算然后被用于确定被追踪的光线 从其穿过的像素的最终颜色。
对单个场景执行多次追踪光线处理。例如,可以对显示器中的每 个像素追踪单个光线。 一旦已经追踪到足够数量的光线用以确定构成 计算机屏幕的二维显示器的所有像素的颜色,那么三维场景的二维合 成就能够显示在观看者的计算机屏幕上。
光线追踪通常比栅格化更真实地再现真实世界的三维场景。这部 分由于光线追踪模拟光如何在真实世界环境中传播和行为,而不是如 栅格化所做的那样简单地将三维形状投射到二维平面上的事实。因 而,利用光线追踪再现的图形更精确地在显示器上描述我们的眼睛在 真实世界中习惯看到的情景。
此外,当场景变得更加复杂时,相比于栅格化光线追踪也能够更 好地处理场景复杂度增加的问题。光线追踪与场景复杂度成对数关 系。这是因为既便场景变得更加复杂,也还是相同数量的光线被投射 到场景中的事实。因而,光线追踪不会像栅格化所做的那样当场景变 得更加复杂时,遭受计算能力要求方面的缺陷。
光线追踪的一个主要缺点在于大量的计算,以及因此产生的再现 场景所需要的处理能力。这在需要快速再现时导致一些问题。例如, 当在诸如游戏机中为动画的目的,图像处理系统要再现图形时。由于 光线追踪的增加的计算要求,难以足够快地再现动画,使得看起来真 实(真实的动画每秒接近二十到二十四帧)。
因此,需要更有效的技术和装置来执行光线追踪。

发明内容
本发明的实施例总体提供用于执行光线追踪的方法和设备。 根据本发明的第 一方面,提供一种利用具有定义三维场景的有界
体积(bounded volume )的节点的空间索引的光线追踪的方法。所述 方法通常包括生成进入场景中的光线;通过采取来自内部节点的分 支直到到达叶节点来遍历空间索引,其中,基于光线是否与由节点定 义的有界体积相交来采取分支;记录指示一个或多个定义光线与之相 交的有界体积的节点和当对空间索引进行遍历时采取的分支的遍历 历史;确定光线是否命中由叶节点定义的有界体积内包含的基元 (primitive);以及如果光线没有命中由叶节点定义的有界体积内包 含的基元,那么利用记录的遍历历史重新遍历空间索引。
根据本发明的第二方面,提供包括程序的计算机可读介质,当所 述程序运行时,执行用于利用具有定义三维场景的有界体积的节点的 空间索引进行光线追踪的操作。操作通常包括生成进入场景中的光 线;通过采取来自内部节点的分支直到到达叶节点来遍历空间索引, 其中,基于光线是否与由节点定义的有界体积相交来采取分支;记录 指示一个或多个定义光线与之相交的有界体积的节点和当对空间索 引进行遍历时采取的分支的遍历历史;确定光线是否命中由叶节点定
义的有界体积内包含的基元;以及如果光线没有命中由叶节点定义的 有界体积内包含的基元,那么利用记录的遍历历史重新遍历空间索 引。
根据本发明的第三方面,提供一种系统。所述系统通常包括具有 定义三维场景的有界体积的节点的空间索引;以及第一处理元件,其 中,第一处理元件通常被配置为生成进入场景中的光线;通过采取 来自内部节点的分支直到到达叶节点来遍历空间索引,其中,基于光 线是否与由节点定义的有界体积相交来采取分支;记录指示一个或多 个定义光线与之相交的有界体积的节点和当对空间索引进行遍历时 采取的分支的遍历历史;确定光线是否命中由叶节点定义的有界体积内包含的基元;以及如果光线没有命中由叶节点定义的有界体积内包 含的基元,那么利用记录的遍历历史重新遍历空间索引。


现在将参考下文中的附图,仅以示例的形式,描述本发明的优选 实施例。
图l示出根据本发明的一个实施例的多核心处理元件。 图2示出根据本发明的一个实施例的多核心处理元件网络。
图3是根据本发明的一个实施例的要由图像处理系统再现的示
例性三维场景。
图4A-4C根据本发明的一个实施例,示出要由图像处理系统再 现的二维空间以及由图像处理系统创建的对应的空间索引。
图5根据本发明的一个实施例,示出空间索引和用于存储光线通 过空间索引的遍历历史的对应的数据结构。
图6和图7是根据本发明的一个实施例,示出用于遍历空间索引 的方法的流程图。
图8是根据本发明的一个实施例的要由图像处理系统再现的示 例性二维空间。
图9A-9G根据本发明的一个实施例,示出光线通过空间索引的遍历。
具体实施例方式
本发明的实施例提供用于记录光线通过空间索引结构的遍历历 史以及利用记录的光线通过空间索引的遍历历史的技术和系统。图像 处理系统可以首先确定当光线遍历通过空间索引时,光线与哪些节点 相交。当光线遍历空间索引时,可以记录节点相交确定的结果,并且 该记录的确定可以与光线相关联。此外,图像处理系统可以基于射中 对应于构成空间索引的节点的基元的某一概率,确定遍历路径。这个 遍历路径也可以被记录并与光线相关联。如果图像处理系统需要在以后重新遍历空间索引,那么记录的遍历历史可用于消除重新计算光线 -节点相交的需要,并消除不正确的遍历路径确定。
在下文中,将参考本发明的一些实施例。但是应当理解,本发明 不限于特定描述的实施例。相反,下文中的特征和要素的任何组合, 无论是否涉及到不同的实施例,都构思用于实现和实施本发明。此夕卜, 在各种实施例中,本发明提供相对于现有技术的多种优点。但是,尽 管本发明的实施例可以实现相对于其他可能的技术方案和/或相对于 现有技术的优点,无论特定的优点是否通过给定的实施例来实现,都 不能构成对本发明的限制。因而,除了在权利要求中明确表述以外, 下文中的多个方面、特征、实施例以及优点都仅仅是示意性的,并且 不能认为是附属权利要求的要素或限制。同样,除了在权利要求中明 确表述以外,对"本发明"的引用不应当被解释为对本文公开的任何发 明性主题的概括,并且不应当被认为是附属权利要求的要素或限制。
示例性处理器布局和通信网络
图l根据本发明的一个实施例,示出多核心处理元件100。多核 心处理元件100包括多个基本吞吐量引擎105 (BTE) 。 BTE105可 以包括多个处理线程和核心高速緩存(例如,Ll高速緩存)。位于 每个BTE中的处理线程可以访问共享的多核心处理元件高速緩存llO (例如,L2高速緩存)。
BTE105还可以访问多个接收箱115。接收箱115可以是存储器 映射的地址空间。接收箱115可以被映射到位于每个BTE105中的处 理线程。位于BTE中的每个线程可以具有存储器映射的接收箱并可 以访问所有其他的存储器映射的接收箱115。接收箱115构成由 BTE105使用的低等待时间和高带宽的通信网络。
BTE可以使用接收箱115作为网络以进行相互通信并在BTE之 间重新分配数据处理工作。在一些实施例中,可以在通信阿络中使用 独立的待发箱,例如,用于接收BTE105处理的结果。在其他实施例 中,接收箱115还可以用作待发箱,例如, 一个BTE105将处理功能 的结果直接写入将使用该结果的另 一个BTE105的接收箱中。
12图像处理系统的总体性能依赖于BTE能够多好地分割并重新分 配工作。接收箱115的网络可用于收集工作并向其他BTE分配工作, 而不会用不具有帧对帧一致性的BTE通信数据分组来破坏共享的多 核心处理元件高速緩存110。能够每帧再现数百万个三角形的图像处 理系统可以包括以这种方式连接的BTE105。
在本发明的一个实施例中,可以向工作负荷管理器分配一个 BTE105的线程。图像处理系统可以使用各种软件和硬件组件来从三 维场景再现二维图像。根据本发明的一个实施例,图像处理系统可以 使用工作负荷管理器用于以图像处理系统发出的光线遍历空间索引。 如参考附图4在下文中进一步描述的,空间索引可以实现为用于将相 对较大的三维场景划分为较小的有界体积的树类型数据结构。使用用 于图像处理的光线追踪方法的图像处理系统可以使用空间索引以快 速确定光线-有界体积相交。在本发明的一个实施例中,工作负荷管 理器可以利用空间索引执行光线-有界体积相交测试。
在本发明的一个实施例中,多核心处理元件IOO上的多核心处理 元件的BTE105的其他线程可以是矢量吞吐量引擎。在工作负荷管理 器确定光线-有界体积相交以后,工作负荷管理器可以通过接收箱 115发出(发送)光线到多个矢量吞吐量引擎中的其中一个。然后, 矢量吞吐量引擎可以确定光线是否与包含在有界体积中的基元相交。 矢量吞吐量引擎还可以执行与确定光线从其穿过的像素的颜色相关 的操作。
图2根据本发明的一个实施例,示出多核心处理元件200的网络。 图2还示出本发明的一个实施例,其中,多核心处理元件100的其中 一个BTE的线程是工作负荷管理器205。根据本发明的一个实施例, 多核心处理元件200的网络中的每个多核心处理元件220iN可以包括 一个工作负荷管理器205ln。根据本发明的一个实施例,多核心处理 元件200的网络中的每个处理器220还可以包括多个矢量吞吐量引擎 210。
根据本发明的一个实施例,工作负荷管理器220^可以使用高速
13荷管理器22(h.n和/或其他多核心处理元件220 的矢量吞吐量引擎210进行通信。每个矢量吞吐量引擎210可以使用 高速总线225与其他矢量吞吐量引擎210或工作负荷管理器205进行 通信。工作负荷管理器处理器205可以使用高速总线225来收集图像 处理相关的任务并将该任务分配给其他工作负荷管理器处理器205, 和/或将该任务分配给其他矢量吞吐量引擎210。高速总线225的使用 可以允许工作负荷管理器205^进行通信,而不会用与工作负荷管理 器205的通信相关的数据分组影响高速緩存230。 示例性三维场景
图3是由图像处理系统再现的示例性三维场景305。在三维场景 305中可以有物体320。图3中的物体320具有不同的几何形状。尽 管在图3中只示出四个物体320,但在典型的三维场景中的物体数量 可以更多或更少。通常,三维场景会具有比图3中示出的物体多许多 的物体。
如图3所示,物体具有不同的几何形状和大小。例如,图3中的 一个物体是棱锥体320A。图3中的其他物体是盒形体320b-d。在许多 现代图像处理系统中,物体经常被分解成较小的几何形状(例如,方 形、圓形、三角形等)。较大的物体然后由多个较小的简单几何形状 来表示。这些较小的几何形状通常被称为基元。
在场景305中还示出光源325A.B。光源可以照亮位于场景305中 的物体320。此外,根据光源325和物体320在场景305中的位置, 光源可以将阴影投射到场景305中的物体上。
三维场景305可以由图像处理系统再现在二维图片中。图像处理 系统还可以使二维图片显示在监视器310上。监视器310可以使用不 同颜色的多个像素330来再现最终的二维图片。
图像处理系统用于将三维场景320再现成二维图片的一种方法 被称为光线追踪。光线追踪通过由图像处理系统从观看者315的角度 "发出"或"发射"光线进入三维场景320中来实现。光线具有类似于光 的光线的属性和行为。在观看者315的位置发出并穿过三维场景305的一个光线340 能够在图3中被看到。当光线340从观看者315穿过三维场景305时, 光线340穿过其中将由图像处理系统再现最终二维图片的平面。在图 3中,该平面由监视器310表示。光线340穿过平面或者监视器310 的点由像素335表示。
如前简述,大多数图像处理系统使用数以千计(如果不是数以百 万计)的像素的网格330来在监视器310上再现最终场景。各个像素 中的每一个可以显示不同的颜色以在监视器310上再现最终合成的二 维图片。利用光线追踪图像处理方法从三维场景再现二维图片的图像 处理系统将计算发出的光线在三维场景中遇到的颜色。然后,图像处 理场景将光线遇到的颜色分配给光线从观看者到三维场景途经的路 径上从其中穿过的像素。
每个像素的发出光线的数量可以变化。一些像素可以具有对于要 再现的特定场景的多个发出的光线。在这种情况下,1象素的最终颜色 由从为该像素发出的所有光线的每个颜色的影响来确定。其他像素可 以只具有单个发出光线来确定在二维图片中的像素的结果颜色。 一些
像素可以不具有由图像处理系统发出的任何光线,在这种情况下,它 们的颜色可以由图像处理系统中的算法来确定、估计或分配。
为了确定二维图片中像素335的最终颜色,图像处理系统必须确 定光线340是否与场景中的物体相交。如果光线没有与场景中的物体 相交,那么它可以被分配默认的背景颜色(例如,蓝色或黑色,表示 白天或晚上的天空)。相反,当光线340穿过三维场景时,光线340 可能射中物体。当光线射中场景中的物体时,物体的颜色可以被分配 给光线从其穿过的像素。但是,物体的颜色必须在其分配给像素之前 被确定。
许多因素可以影响原始光线340射中的物体的颜色。例如,三维 场景中的光源可以照亮物体。此外,物体的物理属性可以影响物体的 颜色。例如,如果物体是反射光的或者是透明的,那么其他非光源物 体也可以影响该物体的颜色。为了确定来自三维场景中的其他物体的影响,可以从原始光线
340与物体的相交点发出第二光线。例如,第二光线的一种类型可以 是阴影光线。阴影光线可用于确定光对原始光线340与物体相交的点 的影响。第二光线的另一种类型可以是透射光线。透射光线可用于确 定什么颜色或者光可以透射通过物体的实体。此外,第二光线的第三 种类型可以是反射光线。反射光线可用于确定将什么颜色或光反射到 物体上。
如上所述,笫二光线的一种类型可以是阴影光线。可以从原始光 线与物体的相交点到三维场景305中的光源对每一个阴影光线进行追 踪。如果光线到达光源而没有在光线到达光源之前与另一个物体相 遇,那么光源将在原始光线射中物体的点照亮原始光线射中的物体。
例如,阴影光线341a可以从原始光践340与物体320a相交的点 发出;并向着光源325A的方向穿过。阴影光线34lA到达光源325A, 而不与场景305中的任何其他物体320相遇。因而,光源325a将在原 始光线340与物体320a相交的点上照亮物体320a。
其他阴影光线可以在原始光线射中物体的点与被三维场景中的 另一个物体阻挡的光源之间具有其路径。如果阻隔原始光线射中的物
体上的点与光源之间的路径的物体是不透明的,那么光源将不会在原 始光线射中物体的点上照亮物体。因而,光源不会影响原始光线的颜 色,并且因此也不会影响在二维图片中再现的像素的颜色。但是,如 果物体是半透明的或者透明的,那么光源可以在原始光线射中物体的 点上照亮物体。
例如,阴影光线341b可以从原始光残340与物体320a相交的点 发出,并可以向光源325B方向穿过。在该例中,物体320n阻挡阴影 光幾341b的路径。如果物体320d不透明,那么光源325b将不会在原 始光线340与物体320a的相交点上照亮物体320a。但是,如果物体 320d半透明或透明,那么光源325b可以在原始光残340与物体320A 的相交点上照亮物体320A。
第二光线的另一个类型是透射光线。如果与原始光线相交的物体具有透明或者半透明的属性(例如,玻璃),那么透射光线可以由图 像处理系统发出。透射光线以相对于原始光线射中物体的角度的角度
穿过物体。例如,透射光线344被观察到穿过与原始光线340相交的 物体320A。
第二光线的另一个类型是反射光线。如果与原始光线相交的物体 具有反射属性(例如,金属饰面),那么,反射光线将由图像处理系
"W山,"石&々力法K念^业"5T i" 《^业^i ," ^Pt A工店
始光线与物体相交的角度的角度从物体穿离。例如,反射的光线343 可以由图像处理系统发出以确定什么颜色或光可以被与原始光线340 相交的物体320a反射。
所有的第二光线(例如,阴影光线、透射光线、反射光线等)的 颜色和光的总的影响将产生原始光线从其穿过的像素的最终颜色。
示例性kd-树
执行光线追踪时遇到的一个问题是快速和有效地确定发出的光 线是否与要再现的场景内的任何物体相交。本领域技术人员公知的一 种使光线相交确定更加高效的方法是使用空间索引。空间索引将三维 场景或三维世界划分成可能包括或不包括基元的较小的体积(相对于 整个三维场景较小)。图像处理系统然后能够使用这些较小的体积的 已知边界来确定光线是否可以与包含在较小的体积内的基元相交。如 果光线确实与包括基元的体积相交,那么能够使用光线对包含在该体 积内的基元的已知位置和维度的轨迹来进行光线相交测试。如果光线 没有与特定体积相交,那么不需要对包含在该体积内的基元进行光线 -基元相交测试。此外,如果光线与没有包括基元的有界体积相交, 那么不需要对该有界体积进行光线-基元相交测试。因而,通过降低 可能必要的光线-基元相交测试的次数,空间索引的使用大大提高光 线追踪图像处理系统的性能。不同的空间索引加速数据结构的一些例 子是八叉树、k维树(kd-树)以及二叉空间分割树(BSP树)。当 几个不同的空间索引结构存在时,为了便于描述本发明的实施例,在 下文的实施例中将使用kd-树。但是本领域技术人员将容易地认识
17到,本发明的实施例可以应用于任何不同类型的空间索引。
Kd-树使用与有界体积对齐的轴来将整个场景或空间分割为较 小的体积。即,kd-树可以通过利用与已知轴平行的分割平面对场景 包括的三维空间进行划分。分割平面将较大的空间分割成较小的有界 体积。较小的有界体积合起来构成场景中的整个空间。确定将较大的 有界体积分割(划分)成两个更小的有界体积可以由图像处理系统通
过使用kd-树构造算法进行。
用于确定何时将有界体积分割成较小的体积的一个标准可以是 包含在有界体积内的基元的数量。也就是,只要有界体积包含比预定 阈值更多的基元,那么树构造算法可以通过绘制更多的分割平面来继 续划分体积。用于确定何时将有界体积分割成较小的体积的另一个标 准可以是包含在有界体积内的空间的数量。此外,还可以基于有多少 基元可以与创建有界体积的平面相交来决定继续分割有界体积。
对场景的分割可以用由节点、分支和叶子组成的二叉树结构来表 示。树中的每个内部节点可以表示相对大的有界体积,而节点可以包 括到子节点的分支,所述子节点可以表示由分割平面对相对大的有界 体积分割后产生的两个相对较小的分割的体积。在与轴对齐的kd -树 中,每个内部节点可以只包括到其他节点的两个分支。内部节点可以 包括到一个或两个叶节点的分支(即,指针)。叶节点是不进一步被 再划分成较小的体积并包括到基元的指针的节点。内部节点还可以包 括到被进一步再划分的其他内部节点的分支。内部节点还可以包括需 要的信息用以确定沿着哪个轴绘制分割平面,以及沿着轴在什么地方 绘制分割平面。
示例性有界体积
图4A-4C示出由图像处理系统再现的二维空间以及对应的kd-树。简单起见,二维场景用于描述kd-树的构建,但kd-树还可以 用于表示三维场景。在图4A-4C的二维描述中,描述分割线而不是分 割平面,并且描述有界区域而不是如将在三维结构中使用的有界体 积。但是,本领域技术人员将很快认识到,该原理可以被容易地应用于包括物体的三维场景。
图4A示出包括要在显示在监视器310上的最终图片中再现的基 元410的二维场景405。表示场景的整个体积的最大体积被包围在有 界体积1(BVJ中。在对应的kd-树中,这可以由顶层节点450表 示,也被称为根节点或界节点。在图像处理系统的一个实施例中,当 有界体积包含例如两个以上的基元时,图像处理系统可以继续将有界 体积分割为较小的有界体积。如前所述,可以基于多个因素决定继续 将有界体积分割为较小的有界体积,但是为了便于说明,在本例子中
只基于基元的数量来决定继续分割有界体积。如图4A所示,B^包 括六个基元,因而,kd -树构造算法可以将BW分割为较小的有界体 积。
图4B与图4A示出相同的二维场景405。但是,在图4B中树构 造算法将BV!分割成两个更小的有界体积BV2和BV3。对的分割 是通过沿着x轴在Xi点上绘制分割平面SP一15来实现的。该BK的 分割也在kd -树中反映为在内部节点或父节点BV一50之下的两个节 点455和460,分别对应于BV2和BV3。表示的内部节点现在可 以存储信息,例如但不限于,到B^之下的两个节点(如BV2和BV3) 的指针,沿着哪个轴绘制分割平面(例如x轴)以及沿着轴在什么地 方(如在点A上)绘制分割平面。
Kd-树构造算法可以继续分割有界体积BV3,因为其包括多于 预定阈值的基元(例如,多于两个基元)。然而,kd-树构造算法也 可以不继续分割有界体积BV2,因为有界体积BV2包括小于或等于基 元的数量(例如,只有丙个基元410a)。没有被任何进一步分割或再 划分的节点,例如BV2,被称为叶节点。
图4C与图4B示出相同的二维场景405。但是,在图4C中,kd -树构造算法将BV3分割为两个更小的有界体积BV4和BV5。 Kd构 造算法沿着y轴在力点利用分割平面分割BV3。由于BV3被分割为两 个子节点,它现在可以被称为内部节点。对BV3的分割也在kd-树 中反映为两个叶节点465和470,分别对应于BV4和BV5。 BV4和BV5是叶节点,因为它们表示的体积没有被进一步划分为较小的有界体
积。两个叶节点,BV4和BVs,位于表示在kd-树中被分割的有界体 积的内部节点BV3之下。
表示BV3的内部节点可以存储信息,例如但不限于,到两个叶 节点(即,BV4和BV5)的指针,沿着哪个轴绘制分割平面(即,y 轴)以及沿着轴在什么地方绘制分割平面(即,在y!点上)。
Kd-树构造算法现在可以停止分割有界体积,因为位于场景中 的所有有界体积包含小于或等于可以被包含在有界体积中的基元的
最大预定数量。叶节点可以包括到包含在每个叶子表示的有界体积内 的基元的指针。例如,叶节点BV2可以包括到基元410a的指針,叶 节点BV4可以包括到基元410b的指針,以及叶节点BVs可以包括到 基元410c的指针。
光线追踪图像处理系统可以使用工作负荷管理器205来遍历空 间索引(kd -树)。遍历kd -树可以包括选择到kd -树的较低层(子 节点)上的节点的分支,以采取或前进以确定光线是否与子节点内包 括的任何基元相交。工作负荷管理器205可以使用坐标和发出的光线 的轨迹以在kd -树上进行遍历或导航。通过执行光线-有界体积相交 测试,工作负荷管理器205可以确定光线是否与kd -树结构内的节点 表示的有界体积的平面相交。如果光线与只包括基元(即,叶节点) 的有界体积相交,那么工作负荷管理器205可以将光线和相关联的信 息发送到矢量吞吐量引擎210,用于进行光线-基元相交测试。可以 执行光线 一基元相交测试,以确定光线是否与有界体积内的基元相 交。相比于为光线对每个包含在场景内的基元进行光线-基元相交测 试,该方法导致需要更少的光线-基元相交测试来确定光线是否与场 景内的物体相交。
结果kd-树结构或者其他空间索引结构可以存储在处理器高速 緩存230中。Kd-树和包括kd-树的对应数据的大小可以被优化以 存储在处理器高速緩存230中。在处理器高速緩存230中存储kd-树 可以允许工作负荷管理器205以已经由图像处理系统发出的光线遍历kd -树,而不一定每次当图像处理系统发出光线时都从存储器检索
kd-树。
示例性kd —树和对应的节点历史数据结构
可以为空间索引(例如,kd-树)中的内部节点深度的每一层 存储节点历史。节点层历史可用于存储与有界体积-光线相交测试和 kd-树遍历相关的信息。通过保存先前的测试和kd-树遍历的结果, 图像处理系统可以利用以前的测试结果来减少用于确定光线-基元 相交所需的处理量。根据本发明的一个实施例,每一层的节点历史位 都可以存储在与描述光线的信息一起(例如,附加在其上)发送的节 点历史数据结构的半字节中。
图5示出根据本发明的一个实施例的示例性kd-树550以及对 应的示例性节点历史数据结构545。示例性kd-树550被描述为包括 八个层的内部节点深度(Li-Lj 。根据本发明的一个实施例,对应的 节点历史545可以包括如与kd-树550包括内部节点层("丄8)相 同的半字节数量。因而,根据本发明的一个实施例,节点历史545可 以包括八个半字节(即,32位),其可以记录光线-相交测试和kd -树遍历的历史。根据本发明的一个实施例,最高有效半字节"可 以对应于kd-树550中的第一层L,(即,根节点或界节点)以及最 低有效半字节Ls可以对应于kd-树550中的最低层L8。
节点历史数据结构545中的每个半字节可以包括四个位。每个半 字节的两个最高有效位525可以对应于位于内部节点左下方的节点。 每个半字节的两个最低有效位530可以与位于内部节点的右下方的节 点相关。如果执行光线-有界体积相交测试并且光线与内部节点左下 方的节点表示的有界体积相交,那么可以对每个半字节的最高有效位 505进行设置(例如,设置到高电平状态,或"l")。如果在遍历kd -树的过程中,工作负荷管理器205 "采取"分支或对位于内部节点左 下方的节点进行遍历,那么可以对第二最高有效位505进行设置。如 在本文中所使用的,如果kd -树被沿着路径遍历到达内部节点或叶节 点,那么认为该路径被"采取"过。
21如果执行光线-有界体积相交测试,并且光线与位于内部节点右
下方的节点表示的有界体积相交,那么可以对第三最高有效位515进 行设置。如果在对kd-树550进行遍历的过程中,工作负荷管理器 205"采取"分支或对位于内部节点右下方的节点进行遍历,那么可以 对最低有效位520进行设置。
因而,每个层历史位的一个"半字节"是记录光线-有界体积相交 测试结果以及路径是否已经被采取过所需要的全部信息。当然,为了 确定在任何特定层已经到达哪个节点,需要检查前面的层上的历史 位。因而, 一旦在搜索具有与给定光线相交的基元的叶节点时已经采 取特定层上的所有路径,那么在该层以及之下层上的节点历史位应当 被清除,并应当釆取更高层的不同路径。
利用节点历史的示例性kd -树遍历算法
图6是示出用于遍历kd-树的方法600的流程图。方法600在 步骤605开始,此时图像处理系统发出要在三维场景中被追踪的光线。 图像处理系统可以使用工作负荷管理器205执行与用发出的光线遍历 kd-树相关的任务。接下来,在步骤610中,图像处理系统在根节点 或者界节点开始。从根结点,图像处理系统可以前进到步骤615,其 中,图像处理系统可以选择分支进行采取。
步骤615可以在图像处理系统中开始子程序,该程序根据将在下 文中参考附图7详细说明的节点历史位遍历kd-树。
图7是示出根据节点历史位500遍历kd-树的方法的流程图。 在步骤705开始方法700,此时图像处理系统到达内部节点(即,包 括到子节点的分支的节点)。接着,在步骤710,图像处理系统可以 确定是否有对应于发出的光线的节点层历史信息。如果没有,那么图 像处理系统前进到步骤715,其中工作负荷管理器205可以为从当前 正在被遍历的内部节点分出的节点表示的每个有界体积,执行光线-有界体积相交测试。接下来,在步骤720中,图像处理系统可以更新 对应于节点层的节点层历史位。具体地说,图像处理系统可以更新"命 中节点,,位505和515,其表示光线是否与对应于从内部节点分出的每个节点的有界体积相交。接下来,图像处理系统可以前进到步骤725。 在步骤725中,图像处理系统可以确定由从内部节点分出的节点 表示的有界体积是否都与光线相交。如果有界体积都相交,那么图像 处理系统可以前进到步骤727,其中,图像处理系统可以选择到离光 线的起源最近的节点的路径。但是,如果只有一个节点相交,那么在 步骤729中,图像处理系统可以选择到相交的节点的路径。在步骤727 和729之后,图像处理系统可以前进到步骤730。在步骤730中,图 像处理系统更新节点层历史中采取的位,以反映由图像处理系统选择 的路径/分支。在步骤730以后,图像处理系统在步骤735中采取选定 的路径/分支。
如果在步骤710中,图像处理系统确定光线确实具有节点层历史 信息,图像处理系统可以前进到步骤740。在步骤740中,图像处理 系统可以确定图像处理系统先前已经确定有界体积与光线相交,但图 像处理系统没有采取到该有界体积的路径/分支的最低节点深度。
已经存储节点层历史信息的光线是图像处理系统已经以其遍历 空间索引(例如,kd-树)的光线,但是该光线没有与对其进行光线 -基元相交测试的有界体积内的基元相交(即,发生错过的情况)。 在错过以后,为了确定有界体积相交但没有被采取的最低内部节点深 度,图像处理系统可以专门在节点层历史中寻找"10"的发生。图像处 理系统既可以在构成节点层历史的两个最高有效位的对中,或者在构 成节点层历史的两个最低有效位的位的对中寻找"10"。那两对的任何 一个中的"10"表示由该节点表示的有界体积与光线相交,但是仍然要 为该节点层之下的其中一个有界体积进行光线基元相交测试(即,对 应的路径没有被采取)。
例如,在kd-树的特定层上,光线可以与内部节点之下的子节 点表示的有界体积都相交。图像处理系统可以在对kd-树的先前的遍 历中确定在内部节点右下方的子节点表示的有界体积之前,kd-树的 内部节点的左下方的子节点表示的有界体积与光线相交。图像处理系 统可以已经采取过左边的子节点,并且可以已经更新过历史位以显示这种遍历。
作为例子,根据本发明的一个实施例,如果每个节点层都由半个
字节表示,那么对应于该内部节点层的节点历史位将是"1110",其可 以被读作命中左节点、釆取到左节点的分支、命中右节点、还没有 采取到右节点的分支。内部节点右下方的子节点与光线相交,但是还 没有进行光线-基元相交测试,如内部节点层历史中的"10"所表示 的。
在确定其中有界体积相交但没有被采取的最低节点层历史之后, 图像处理系统可以前进到步骤745。在步骤745,图像处理系统可以 为其中有界体积相交但没有被采取的最低节点层之下的内部节点层
清除所有的节点层历史位。该步骤确保当图像处理系统遍历kd-树 时,先前为在作出不正确的遍历路径决定的点之下的分支、节点或叶 节点记录的任何历史都不影响kd -树将来的遍历。
接下来,在步骤750中,图像处理系统可以根据从根节点到有界 体积相交但没有采取的最低节点深度的节点层历史,遍历kd-树。步 骤750可以确保图像处理系统从高速緩存230中检索到较低层上的内 部节点或者到叶节点的适当的指针。接下来,在步骤755中,图像处 理系统选择到还没有被图像处理系统采取的节点的路径/分支(即,其 中有界体积相交但没有被采取的最低节点层的节点历史中的"10"表 示的路径)。在步骤755以后,图像处理系统前进到步骤730。在步 骤730,图像处理系统更新节点层历史中的采取位,以反映图像处理 系统选择的路径。在步骤730以后,图像处理系统在步骤735中采取 选定的路径。
在路径被采取后,图像处理系统返回到方法600。图像处理系统 在步骤620上重新开始方法600。在步骤620上,图像处理系统确定 采取的路径已经使得图像处理系统到达叶节点。如果不是,那么图像
处理系统返回到步骤615以选择分支进行釆取。
但是,如果工作负荷管理器205在步骤620中确定采取的路径使 得工作负荷管理器205到达叶节点,那么工作负荷管理器205可以通过接收箱115或网络225向矢量吞吐量引擎210发送光线、光线历史 数据结构以及叶节点信息(例如,到由叶节点限定的基元的指针)用
于光线-基元相交测试。
矢量吞吐量引擎210可以执行光线-基元测试,以确定命中由叶 节点表示的有界体积的光线是否实际命中任何包含在有界体积内的 基元。如果光线确实命中有界体积内的任何基元,那么矢量吞吐量引 擎210可以向光线分配颜色(例如,基元的颜色)。但是,矢量吞吐 量引擎210还可以确定光线没有命中有界体积内的任何基元。
一段时间以后,矢量吞吐量引擎210返回光线以及光线是否命中 或错过包含在有界体积内的基元的指示。然后,在步骤630中,图像 处理系统可以确定矢量吞吐量引擎210返回的信息是否指示光线命中 基元,或者信息是否指示光线错过所有包含在有界体积中的基元。
如果光线命中基元,那么图像处理系统可以将从矢量吞吐量引擎 210返回的颜色分配给显示器310上光线从其穿过的像素335。图像 处理系统然后可以前进以发出另 一个光线以遍历kd -树或者执行其 他与从三维场景再现二维图片相关的操作。
如果矢量吞吐量引擎210确定光线错过包含在有界体积中的基
元,那么工作负荷管理器205可以返回到步骤610。在步骤610中,
工作负荷管理器205可以从根节点开始再次遍历kd -树,光线历史帮
助避免再次进行不必要的光线-有界体积相交测试,并避免遍历树至 指向具有与给定光线没有相交的基元的叶节点的路径。
Kd-树遍历的例子
图8示出已经分割为有界体积(BVrBV5)的示例性场景800。 图8类似于在图4中使用的场景,以示出kd-树的构建。在图8中示 出的还有由图像处理系统发出的光线805。光线805可用于遍历kd-树。光线在第一点805上与BV2相交,并在第二点815上退出BV2。 光线在第二点815上与BV3和BV4相交,并在笫三点820上退出BV3 和BV4。
图9A是对应于图8中的分割的场景800的示例性kd-树900。图9A还示出与光线805以及kd -树900的第 一层(即,根节点BVj) 相关联的示例性内部节点历史数据结构的第一半字f 905。此外,还 示出与光线805以及kd-树的第二层相关联的示例性内部节点历史 数据结构的第二半字节910。图9A示出在工作负荷管理器205开始 以光线805遍历kd-树之前的节点历史数据结构的初始状态(所有位 未声明)。
如参考图5中的方法500所述,工作负荷管理器205可以在光线 805由图像处理系统发出以后,执行与遍历kd-树900相关的操作。 例如,如方法600的步骤615中所述,工作负荷管理器205可以执行 光线-有界体积相交测试,以确定光线805是否与对应于根节点BW 的子节点BV2和BV3的有界体积相交。如图8所示,光线805与对应 于子节点BV2和BV3的有界体积都相交。光线805在第一点810上与 BV2相交,并在第二点815上退出BV2。光线在第二点815上与BV3 相交,并在第三点820上退出BV3。
在工作负荷管理器205执行光线-有界体积相交测试以后,工作 负荷管理器205可以更新对应于根节点BW层的节点历史半字节905, 以反映光线-有界体积相交测试的结果。在图9B中示出对根节点层 历史半字节905的更新。由于光线805与子节点BV2和BV3都相交的 事实,所以工作负荷管理器205可以在对应于每个子节点BV2和BV3 的节点层历史中声明"命中节点,,位。因而,工作负荷管理器205可以 声明根节点层历史905的最高有效位,其代表光线805命中对应于左 边子节点(BV2)的有界体积。此外,工作负荷管理器205可以声明 根节点层历史905的第三最高有效位,其代表光线805命中对应于右 边子节点(BV3)的有界体积。
接着,工作负荷管理器205可以基于有界体积相交测试,确定要 沿着kd-树900采取的路径。如图9C所示,在本发明的一个实施例 中,如果父节点BVi (在本例中是根节点)的子节点BV2和BV3,那 么工作负荷管理器205可以前进到光线与之相交的第一个(例如,最 近的)有界体积。在接下来的例子中,光线805首先与BV2相交。因而,工作负荷管理器205可以遍历到BV2并更新根节点层历史905以 显示工作负荷管理器205"采取"过到BV2的分支(即,采取左节点)。 在图9C中示出对根节点的节点层历史的更新。
工作负荷管理器205现在可以确定BV2是否是叶节点(即,没 有分出到其他节点的节点)。由于节点BV2是叶节点,工作负荷管理 器205现在可以发送光线805、光线的节点历史905和910以及到包 含在叶节点BV2中的基元的指针到矢量吞吐量引擎210,如图9D所 示。然后,矢量吞吐量引擎210可以执行光线-基元相交测试以确定 光线805是否与任何包含在BV2中的基元相交(命中)。
如图8所示,光线805没有与位于BV2中的任何基元相交。因 而,矢量吞吐量引擎210可以将光线以及对应的历史返回到工作负荷 管理器205,指示光线805没有与BV2中的任何基元相交(即,错过)。
在光线从矢量吞吐量引擎210返回以后,工作负荷管理器205 可以确定光线节点层历史包括信息。工作负荷管理器205可以利用历 史来便于对kd -树的遍历。工作负荷管理器205可以利用光线的历史 来确定指示有界体积相交但对应的分支没有被采取的最低层节点历 史。这可以通过确定在节点历史中包括"10,,的最低节点历史来实现。 因而,如图9E所示,工作负荷管理器205可以确定kd-树的根节点 层是kd -树上有界体积相交但没有被釆取的最低层。这可以通过检查 包括"10"的^L节点层历史905来确定,所述"10"指示在对应于右边分 支的有界体积中有命中,但该右边分支没有被采取。在确定根节点层 是最低层以后,工作负荷管理器205可以为根节点之下的所有节点层 清除节点层历史。
接下来,工作负荷管理器205可以在根节点B^开始遍历kd-树900。接着,工作负荷管理器205可以使用节点层历史905来帮助 对kd-树900的遍历。基于根节点的节点层历史905,工作负荷管理 器可以确定对仍要被采取的分支进行采取。通过检查节点层历史卯5, 工作负荷管理器可以确定左节点和右节点都与光线805相交。这可以 通过检查根节点层历史半字节卯5的第一和第三位来确定。这些位都被声明(即,"1")并且因而都被确定为在先前的光线-有界体积相
交测试中已经相交。此外,工作负荷管理器205可以确定工作负荷管理器先前"采取"了到左边的子节点的分支(即,对包含在BV2中的基元发送要测试的光线)。这可以通过检查被声明的节点层历史的第二位来确定。因而,工作负荷管理器可以不前进到或者"采取,,到与光线805相交的右节点(即,BV3)的其他分支。如图9F所示,工作负荷管理器205还可以更新根节点层历史半字节905的采取的右边的位,以指示对BV3的遍历。
工作负荷管理器205可以确定遍历到的节点BV3是否是叶节点。如图9E所示,节点BV3不是叶节点,而是内部节点。因而,工作负荷管理器205可以执行光线-有界体积相交测试,以确定光线805是否与对应于BV3之下或者在比BV3更低的层上的节点(即,BV4和BV5)的有界体积相交。
如图8所示,光线805在点815上与BV4相交,但是,光线没有与BVs相交。因而,光线-有界体积相交测试的结果可以指示光线805没有与BVs相交。工作负荷管理器205现在可以更新BV3节点层历史910,以反映光线-有界体积相交测试的结果。因而,如图9F所述,工作负荷管理器205可以在BV3节点历史910内的最高有效位位置中放置"l,,或者对位进行声明,以反映光线与BV3相交的事实。接着,工作负荷管理器205可以根据BV3节点层历史910确定"要采取"什么分支/路径。
通过检查BV3节点层历史910,工作负荷管理器205可以确定只有一个BV3之下的节点与光线805相交,并且因而工作负荷管理器205可以遍历到相交的节点BV4。如图9G所示,工作负荷管理器205可以通过声明BV3节点层历史中第二最高有效位(指示采取的左边分支),来更新BV3节点层历史910,以反映从节点BV3到节点BV4的遍历。
工作负荷管理器205现在可以确定左边的子节点BV4是否是叶节点(即,该节点没有子节点)。由于节点BV4是叶节点,工作负荷吐量引擎210发送光线805、光线的节 点层历史(905和910)以及到包含在叶节点BV4中的基元的指针。 接着,矢量吞吐量引擎210可以执行光线-基元相交测试,以确定光 线805是否与任何包含在BV4中的基元相交(命中)。如图8所示, 光线805与BV4中的基元相交。因而,矢量吞吐量引擎210可将颜色 分配给光线805从其穿过的像素,并向工作负荷管理器205返回信息。
本领域技术人员将理解,当光线确实与叶节点的基元相交时,可 以产生例如对应于反射、透射、折射等的另外的光线。虽然产生这种 光线的迭代处理是公知的,但这些光线中的每一个都可以使用本文中 描述的技术被有效地追踪,以确定最终像素值。
结论
本发明的实施例提供用于记录光线通过空间索引结构的遍历历 史并利用记录的光线通过空间索引的遍历历史的技术和系统。图像处 理系统可以首先确定当光线遍历通过空间索引时其与哪些节点相交。 当光线遍历空间索引时,可以记录节点相交确定的结果,并且记录的 确定可以与光线相关联。此外,图像处理系统可以基于射中对应于构 成空间索引的节点的基元的某一概率,来确定遍历路径。该遍历路径 还可以被记录并与光线相关联。如果图像处理系统需要在以后遍历空 间索引,那么记录的遍历历史可以用于消除重新计算光线_节点相交 的需要,并消除重复进行不正确的遍历路径确定。
虽然前文涉及本发明的实施例,在不背离本发明的基本范围的情 况下,还可以构思本发明的其他的和进一步的实施例,本发明的范围 由下文中的权利要求确定。
29
权利要求
1. 一种利用具有定义三维场景的有界体积的节点的空间索引进行光线追踪的方法,所述方法包括生成进入所述场景中的光线;通过采取来自内部节点的分支直到到达叶节点来遍历所述空间索引,其中,基于所述光线是否与由所述节点定义的有界体积相交来采取分支;记录指示一个或多个定义所述光线与之相交的有界体积的节点和当对所述空间索引进行遍历时采取的分支的遍历历史;确定所述光线是否命中由所述叶节点定义的有界体积内包含的基元;以及如果所述光线没有命中由所述叶节点定义的所述有界体积内包含的基元,利用记录的遍历历史重新遍历所述空间索引。
2. 根据权利要求1的方法,其中,所述空间索引包含多个内部 节点层,并且为每个节点层记录所述遍历历史。
3. 根据权利要求1的方法,其中,所述空间索引包含多个内部 节点层,并且所述遍历历史对于所述空间索引的每个内部节点层包括 四个位。
4. 根据权利要求3的方法,其中,遍历历史位中的其中两个指 示所述光线是否与由位于其中一个所述内部节点层中的节点定义的 有界体积相交,并且其中,所述遍历历史位中的其中两个指示当从其 中一个所述内部节点层上的所述节点遍历所述空间索引时所采取的分支。
5. 根据权利要求l、 2、 3或4的方法,进一步包括 存储光线遍历历史和定义所述光线的信息;以及 将定义所述光线的信息和所述遍历历史从在第一处理元件上执行的工作负荷管理器发送到在第二处理元件上执行的矢量吞吐量引 擎,其中,所述工作负荷管理器和所述矢量吞吐量引擎通过存储器映射的地址空间通信。
6. 根据权利要求5的方法,其中,所述工作负荷管理器确定所 述光线是否与由所述节点定义的有界体积相交,其中,所述工作负荷 管理器记录所述遍历历史,并且其中,所述矢量吞吐量引擎确定所述 光线是否命中由所述叶节点定义的所述有界体积内包含的基元。
7. 根据权利要求5或6的方法,其中,所述工作负荷管理器和 所述矢量吞吐量引擎位于相同的处理元件上。
8. 根据权利要求5或6的方法,其中,所述工作负荷管理器和 所述矢量吞吐量引擎位于分离的处理元件上。
9. 根据权利要求1到8中的任何一个的方法,其中,利用所述 记录的遍历历史重新遍历所述空间索引包括,确定其中对应于节点的有界体积与所述光线相交,但来自所述节 点的分支没有被采取的所述空间索引上的最低层;基于被采取并被记录在到所述最低层的所述遍历历史中的分支, 遍历所述空间索引;采取还没有被采取的来自所述节点的分支;以及通过釆取来自内部节点的分支直到到达叶节点来遍历最低层之 下的所述空间索引,其中,基于所述光线是否与由所述节点定义的有 界体积相交来采取分支;记录指示一个或多个定义所述光线与之相交的有界体积的节点 和当对所述空间索引进行遍历时采取的分支的所述最低层之下的遍 历历史;以及确定所述光线是否命中在所述最低层之下并由所述叶节点定义 的有界体积内包含的基元。
10. —种包括程序的计算机可读介质,当所述程序被运行时,其 执行用于利用具有定义三维场景的有界体积的节点的空间索引进行 光线追踪的操作,所述操作包括生成进入所述场景中的光线;通过采取来自内部节点的分支直到到达叶节点来遍历所述空间索引,其中,基于所述光线是否与由所述节点定义的有界体积相交来采取分支;记录指示一个或多个定义所述光线与之相交的有界体积的节点 和当对所述空间索引进行遍历时采取的分支的遍历历史;确定所述光线是否命中由所述叶节点定义的有界体积内包含的 基元;以及如果所述光线没有命中由所述叶节点定义的所述有界体积内包 含的基元,那么利用记录的遍历历史重新遍历所述空间索引。
11. 根据权利要求10的计算机可读介质,其中,所述空间索引 包含多个内部节点层,并且为每个节点层记录所述遍历历史。
12. 根据权利要求10的计算机可读介质,其中,所述空间索引包含多个内部节点层,并且所述遍历历史对 于所述空间索引的每个内部节点层包括四个位,其中,遍历历史位中 的其中两个指示所述光线是否与由其中一个所述内部节点层上的节 点定义的有界体积相交,并且其中,所述遍历历史位中的其中两个指 示当从其中一个所述内部节点层上的所述节点遍历所述空间索引时 所采取的分支。
13. 根据权利要求10的计算机可读介质,其中,所述操作进一 步包括存储光线遍历历史和定义所述光线的信息;以及 将定义所述光线的信息和所述遍历历史从在第一处理元件上执 行的工作负荷管理器发送到在第二处理元件上执行的矢量吞吐量引 擎,其中,所述工作负荷管理器和所述矢量吞吐量引擎通过存储器映 射的地址空间通信。
14. 根据权利要求13的计算机可读介质,其中,所述工作负荷 管理器确定所述光线是否与由所述节点定义的有界体积相交,其中, 所述工作负荷管理器记录所述遍历历史,并且其中,所述矢量吞吐量 引擎确定所述光线是否命中由所述叶节点定义的所述有界体积内包 含的基元。
15. 根据权利要求10的计算机可读介质,其中,利用所述记录 的遍历历史重新遍历所述空间索引包括确定其中对应于节点的有界体积与所述光线相交,但来自所述节 点的分支没有被采取的所述空间索引上的最低层;基于被采取并被记录在所述最低层的所迷遍历历史中的分支,遍 历所述空间索引;采取还没有被采取的来自所述节点的分支;以及通过采取来自内部节点的分支直到到达叶节点来遍历最低层之 下的所述空间索引,其中,基于所述光线是否与由所述节点定义的有 界体积相交来采取分支,并且其中,所述操作进一步包括记录指示一个或多个定义所述光线与之相交的有界体积的节点 和当对所述空间索引进行遍历时采取的分支的所述最低层之下的遍 历历史;以及确定所述光线是否命中在所述最瓶差之下并由所述叶节点定义 的有界体积内包含的基元。
16. —种系统,包括具有定义三维场景的有界体积的节点的空间索引;以及 第一处理元件,其中,所述第一处理元件被配置为 生成进入所述场景中的光线;通过采取来自内部节点的分支直到到达叶节点来遍历所述 空间索引,其中,基于所述光线是否与由所述节点定义的有界体 积相交来采取分支;记录指示一个或多个定义所述光线与之相交的有界体积的 节点和当对所述空间索引进行遍历时采取的分支的遍历历史;确定所述光线是否命中由所述叶节点定义的有界体积内包 含的基元;以及如果所述光线没有命中由所述叶节点定义的所述有界体积 内包含的基元,那么利用记录的遍历历史重新遍历所述空间索 引。
17. 根据权利要求16的系统,其中,所述空间索引包含多个内 部节点层,并且为每个节点层记录所述遍历历史。
18. 根据权利要求16的系统,其中,所述空间索引包含多个内 部节点层,并且所述遍历历史对于所述空间索引的每个内部节点层包 括四个位。
19. '根据权利要求18的系统,其中,遍历历史位中的其中两个 指示所述光线是否与由位于其中一个所迷内部节点层中的节点定义 的有界体积相交,并且其中,所述遍历历史位中的其中两个指示当从 其中一个所述内部节点层上的所述节点遍历所述空间索引时所采取 的分支。
20. 根据权利要求16、 17、 18或19的系统,其中,所述第一处 理元件进一步包括多个线程;以及存储器映射的地址空间;以及所述第一处理元件被进一步配置为存储光线遍历历史和定义所述光线的信息;以及 将定义所述光线的信息和所述遍历历史从在第一处理元件线程上执行的工作负荷管理器发送到在第二处理元件线程上执行的矢量吞吐量引擎,其中,所述工作负荷管理器和所述矢量吞吐量引擎通过存储器映射的地址空间通信。
21. 根据权利要求20的系统,其中,所述工作负荷管理器确定 所述光线是否与由节点定义的有界体积相交,所述工作负荷管理器记 录所述遍历历史,并且所述矢量呑吐量引擎确定所述光线是否命中由 所述叶节点定义的所述有界体积内包含的基元。
22. 根据权利要求20或21的系统,其中,所述系统进一步包括 包括第二多个线程和笫二存储器映射的地址空间的第二处理元件;将所述第一处理元件连接到所述第二处理元件的高速总线;以及 其中,所述工作负荷管理器在所述笫一处理元件上执行并且所述矢量吞吐量引擎在所迷第二处理元件上执行,并且其中,所述工作负 荷管理器和所述矢量吞吐量引擎通过所述高速总线和存储器映射的 地址空间通信。
23. 根据权利要求16到22中任何一个的系统,其中,利用所述 记录的遍历历史重新遍历所述空间索引包括,确定其中对应于节点的有界体积与所述光线相交,但来自所述节 点的分支没有被采取的所述空间索引上的最低层;基于被采取并被记录在到所述最低层的所述遍历历史中的分支, 遍历所述空间索引;采取还没有被采取的来自所述节点的分支;以及通过采取来自内部节点的分支直到到达叶节点来遍历最低层之 下的所述空间索引,其中,基于所述光线是否与由所述节点定义的有 界体积相交来采取分支;并且其中,所述系统进一步被配置为记录指示一个或多个定义所述光线与之相交的有界体积的节点和当所述系统对所述空间索引进行遍历时采取的分支的所述最低层之下的遍历历史;以及确定所述光线是否命中在所述最低层之下并由所述叶节点定义 的有界体积内包含的基元。
24. —种包括程序代码装置的计算机程序,当所述程序在计算机 上运行时,所述程序代码装置适于执行权利要求1到8中的任何一个 的方法。
全文摘要
本发明的实施例提供用于记录光线通过空间索引结构的遍历历史并利用记录的遍历历史的方法和设备。图像处理系统可以首先确定当光线遍历通过空间索引时其与哪些节点相交。当光线遍历空间索引时,可以记录节点相交确定的结果,并且记录的确定可以与光线相关联。此外,图像处理系统可以基于射中对应于构成空间索引的节点的基元的某一概率,来确定遍历路径。该遍历路径还可以被记录并与光线相关联。如果图像处理系统需要在以后重新遍历空间索引,那么记录的遍历历史可以用于免除重新计算光线-节点相交的需要,并消除不正确的遍历路径确定。
文档编号G06T15/50GK101490715SQ200780027168
公开日2009年7月22日 申请日期2007年7月10日 优先权日2006年7月28日
发明者J·克里耶格尔, R·A·席勒 申请人:国际商业机器公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1