CN102037497B - 用于光线追踪渲染的并行相交测试及着色的架构 - Google Patents

用于光线追踪渲染的并行相交测试及着色的架构 Download PDF

Info

Publication number
CN102037497B
CN102037497B CN200980118357.7A CN200980118357A CN102037497B CN 102037497 B CN102037497 B CN 102037497B CN 200980118357 A CN200980118357 A CN 200980118357A CN 102037497 B CN102037497 B CN 102037497B
Authority
CN
China
Prior art keywords
light
test
crossing
data
bag
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.)
Active
Application number
CN200980118357.7A
Other languages
English (en)
Other versions
CN102037497A (zh
Inventor
路克·堤尔曼·彼特森
詹姆斯·亚历山大·麦康比
莱恩·R·沙斯伯里
史帝芬·波希尔
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
Caustic Graphics Inc
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 Caustic Graphics Inc filed Critical Caustic Graphics Inc
Priority to CN201410189255.7A priority Critical patent/CN104112291B/zh
Publication of CN102037497A publication Critical patent/CN102037497A/zh
Application granted granted Critical
Publication of CN102037497B publication Critical patent/CN102037497B/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/50Lighting effects
    • 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
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T17/00Three dimensional [3D] modelling, e.g. data description of 3D objects

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Computer Graphics (AREA)
  • General Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • Image Generation (AREA)
  • Geometry (AREA)
  • Software Systems (AREA)
  • Image Processing (AREA)

Abstract

本发明涉及用于光线追踪渲染的并行相交测试及着色的架构。在一个实施例中,对场景进行光线追踪包括利用与多个着色资源连接的多个相交测试资源,这些相交测试资源可通过链路/队列聚合集体通信。从测试到着色的队列包括相应光线/图元相交指示,该指示包括光线标识符。从着色到测试的队列包括用于测试的新光线的标识符,其中,定义该光线的数据单独地存储在分布在所述多个相交测试资源当中的多个存储器中。光线定义数据可以保持在分布式存储器中,直到光线完成相交测试为止,该光线定义数据可基于光线标识符而被多次选择用于测试。可以使用加速形状的结构。包括光线标识符和形状数据的包可以在多个相交测试资源之间循环,各个资源都可以对在该包中标识的光线进行测试,并且针对该光线的定义数据呈现在其存储器中。加速形状测试结果允许基于所相交形状收集光线,并且通过将光线标识符排队来指示出最接近的检测光线/图元相交,以用于着色。

Description

用于光线追踪渲染的并行相交测试及着色的架构
相关申请的交叉引用
本申请要求于2009年3月20日提交的美国申请No.12,408,478的优先权、于2008年3月21日提交的题名为“Coupling Ray Storage andCompute for Memory-Efficient Ray Intersection Test Scaling”的美国临时申请No.61/038,731、和于2008年9月10日提交的题名为“Architectures forParallelized Intersection Testing and Shading for Ray-Tracing Rendering”的美国临时申请No.61/095,890的优先权,出于全部目的而将其全部内容通过引证合并于此。
技术领域
本发明总体上涉及对三维场景的二维表现(representation)进行渲染(rendering),更具体地说,涉及使用光线追踪来对场景的、照片般逼真(photo-realistic)的二维表现进行加速渲染。
背景技术
利用光线追踪来渲染照片般逼真图像在计算机图形领域是公知的。已知的是,因为光线追踪可以对与场景的元素相互作用的光的物理行为进行建模,所以,光线追踪用于生成照片般逼真图像,包括逼真阴影和照明效果。然而,还已知的是,光线追踪在计算上强度较高,而且目前,甚至最先进的图形工作站的状态也仍然需要耗费大量的时间,以利用光线追踪来对复杂的场景进行渲染。
光线追踪通常涉及以下处理:获取由描述了场景中的结构表面的几何图元(primitive)(如三角形)所组成的场景描述;并且,通过从摄像机开始追踪光线,并且通过与场景对象的各种潜在相互作用、直到在光源终止或者没有与光源相交而退出场景为止,来对光怎样与场景中的图元相互作用进行建模。
例如,一个场景可以包括街道上的汽车,在该街道任一侧上存在有建筑物。这种场景中的汽车可以用逼近连续表面的大量三角形(例如,一百万个三角形)来定义。定义了观看该场景的摄像机位置。从摄像机投射的光线通常被称为原生光线(primary ray),而从一个对象向另一对象投射(例如,使得能够反射)的光线通常被称作次生光线(secondaryray)。将具有选定分辨率(例如,针对SVGA显示器为1024×768)的图像平面设置在摄像机与场景之间的选定位置处。
简单的光线追踪算法涉及将来自摄像机的一条或更多条光线通过图像的各个像素投射到场景中。接着,针对组成场景的各个图元来测试各条光线,以标识出该光线相交的图元,接着,确定该图元针对该光线产生的效果(例如,反射和/或折射)。这种反射和/或折射会导致光线沿其它方向前进,和/或划分成可以采取不同路径的多条次生光线。接着,针对场景图元来测试全部这些次生光线,以确定这些次生光线所相交的图元,并且,该过程递归进行,直到次生(和三生(tertiary)等)光线例如离开场景或碰撞(hitting)光源为止。在确定了全部这些光线/图元相交时,创建映射它们的树。在光线终止之后,通过该树反向追踪光源的贡献,以确定其针对场景像素的效果。容易理解的是,对(例如)1024×768条光线与数百万个三角形的相交进行测试的计算复杂度在计算上较高-并且这种光线数量甚至没有包括作为与相交光线的物质相互作用的结果而产生(spawned)的全部附加光线。
因为可以将针对生成图像的各个像素按照与该图像的其它像素无关的方式累积所累积的颜色信息,所以,将利用光线追踪来渲染场景称为“令人为难的并行问题”。因而,尽管在输出最终图像之前可存在针对像素的特定过滤、插值或其它处理,但是,可以并行地确定图像像素的颜色信息。因此,容易通过将像素划分成在多个处理资源中渲染并且并行执行对这些像素的渲染,来在指定的处理资源集上划分对图像进行光线追踪的任务。
在某些情况下,处理资源可以是支持多线程的计算平台,而其它情况可涉及通过LAN链接的计算机群、或计算内核群。对于这些类型的系统来说,可以实例化指定处理资源(例如,线程),用于通过完成相交测试(intersection testing)和着色(shading)来处理指定光线或光线组。换句话说,利用可以彼此独立地渲染像素这一特性,可以在要相交测试的线程或处理资源之间划分已知的有助于不同像素的光线,接着对那些相交着色,将这种着色计算的结果写入至屏幕缓冲器,用于处理或显示。
已经提出了致力于解决这类问题的一些算法方法。Matt Pharr等人在“Rendering Complex Scenes with Memory-Coherent Ray Tracing”Proceedings of SigGraph(1997)(下面简称“Pharr”)中公开了这样的方法。Pharr公开了将要光线追踪的场景分成几何图形体元(geometryvoxel),其中,各个几何图形体元都是包围场景图元(例如,三角形)的立方体。Pharr还公开了叠加安排(scheduling)格栅,其中,该安排格栅中的各个元素都是可以交叠该几何图形体元的某一部分的安排体元(即,安排体元还是场景中的、可与几何图形体元的立方体相比不同地尺寸化的测定体积的立方体)。各个安排体元都具有关联光线队列,该队列包括当前在该安排体元内部的光线(即,这些光线被包围在该安排体元内),并包括与哪个几何图形体元同该安排体元交叠有关的信息。
Pharr公开了当处理安排体元时,对关联队列中的光线与被安排体元包围的几何图形体元中的图元的相交,进行测试。如果发现光线与图元之间的相交,则执行着色计算,这可以获得添加至该光线队列的所产生光线。如果在该安排体元中没有发现相交,则该光线前进至下一个非空安排体元,并且被放置在该安排体元的光线队列中。
Pharr公开了这种方法的优点在于,帮助场景几何图形与在通常设置在通用计算机的高速缓冲存储器相配合,使得如果各个安排体元内的场景几何图形可以与高速缓冲存储器相配合,则该高速缓冲存储器在对光线与该场景几何图形的相交测试期间不会多次反复(thrash)。
而且,Pharr公开了通过将在安排体元中测试的光线排队,当将图元获取到几何图形高速缓冲存储器中时,可以针对它们执行更多工作。在可以紧接着处理多个安排体元的情况下,安排算法可以选择以下这种安排体元,该安排体元使得需要加载到几何图形高速缓冲存储器中的几何图形的量最小化。
Pharr认识到,如果特定场景的复杂度不均衡(即,场景的某些部分中的图元的密度更高),则所提出的规则安排格栅不能很好执行。Pharr假设可以使用诸如八叉树(octree)的自适应数据结构,来代替规则安排格栅。八叉树通过使得按每一级层级沿场景的各个主轴(即,x、y以及z轴)进行细分,而在三维场景中引入了空间细分(spatial subdivision),使得八叉树细分获得8个较小的子空间,其皆可以被分成8个更小的子空间等。按各个子空间,设置划分/非划分标志,该标志确定了该子空间是否要进一步划分。针对细分来表示这种子空间,直到该子空间中的图元的数量低得足够进行测试为止。因而,对于八叉树来说,可以根据场景的特定部分中的图元数量来控制细分的量。这样,八叉树允许改变要渲染空间的测定体积的细分程度。
在授予Pfister的美国专利No.6,556,200中公开了一种类似方法(简称为“Pfister”)。Pfister还公开了将场景分区成多个安排块。针对各个块设置光线队列,并且各个队列中的光线都利用相关图(dependency graph)在空间上且在时间上进行排序。根据相关图中定义的次序通过各个安排块来追踪光线。Pfister引用Pharr文,并且增加了Pharr希望对超过一种单一类型的图形图元(例如,不仅是三角形)进行渲染,并且针对安排块设计了更复杂的安排算法。Pfister还设想了按存储器层级中的多个高速缓存级来将场景几何图形的子部分进行分段。
另一方法称为“包追踪(packet tracing)”,并且针对这种包追踪的共同引用是Ingo Wald、Phillip Slusallek、Carsten Benthin等人的“InteractiveRendering through Coherent Ray Tracing”(Proceedings of EUROGRAPHICS2001,pp 153-164,20(3),Manchester,United Kingdom(Sep.2001))。在这个参考文献中,包追踪涉及通过格栅来追踪具有类似起源和方向的光线的包。这些光线从大致共同的格栅位置发送,并且沿大致类似的方向行进,使得大部分光线通过共同格栅位置。因而,包追踪需要对来自类似起源的、沿类似方向行进的光线进行标识。针对这种包追踪的另一变型例是使用视锥(frustrum)光线来包围光线包的边缘,使得将视锥光线用于确定哪些体元相交,这有助于缩减针对指定光线包的计算量(即,不是对全部光线进行相交测试,而是仅测试该包的外边缘上的那些光线)。包追踪仍需要对源自类似位置并且沿类似方向前进的光线进行标识。随着光线在光线追踪期间反射、折射、以及/或生成,这种光线可能愈加难于进行标识。
在加速光线追踪领域仍存在其它方法;一种方法试图通过光线状态的更多活动管理而改进高速缓冲存储器利用。Navratil等人的“DynamicRay Scheduling for Improved System Performance”(2007IEEE Symposiumon Interactive Ray Tracing,(Sep.2007)(Navratil))引用Pharr,描述了Pharr的算法具有“光线状态激增(explosion)”的弱点,这使得Pharr不适于主存储器至处理器高速缓冲存储器通信。为解决这个问题,Navratil提出了在光线追踪期间通过设定针对“活动地管理”光线状态和几何图形状态而设计的限制,来避免“光线状态激增”。一项提议是单独地追踪生成的光线,因而,Navratil公开了首先追踪原生光线,接着在完成原生光线之后追踪次生光线等。
上述背景技术示出了在基于渲染的加速光线追踪领域中流行的各种构想和方法。而且,这些参考文献示出了在光线追踪领域中存在的进一步改进。然而,所讨论的这些参考文献和技术中的任一个都不是表示或暗示这些参考文献中的任一个或它们的主旨是针对本申请中所公开的任何主旨的现有技术。相反,这些参考文献在于帮助示出利用光线追踪来渲染的方法中的差异。而且,为了简洁,将这些参考文献中的任一个的论述进行了必要简化,而非穷尽的。
发明内容
在一个方面,提供了在对3-D场景的2-D表现的光线追踪中使用多个计算资源的方法。该方法包括以下步骤:将计算资源第一子集用于对包括一个或更多个图元和几何图形加速元素的几何形状与在3-D场景中行进的光线进行相交测试。该第一子集中的各个计算资源都可操作用于与存储有所述在场景中行进的光线的相应子集的相应本地存储器资源进行通信。该方法包括以下步骤:将对光线与图元之间的相交的指示从计算资源的第一子集传送至计算资源的第二子集,并且将计算资源的第二子集用于执行和所标识出的、光线与图元之间的相交相关联的着色例程;来自着色例程的输出包括要相交测试的新光线。子集中的成员可以随时间而变,或者根据系统配置而静态地确定,或者在在对场景或一系列场景进行渲染期间重新配置多个点期间确定。
该方法还包括以下步骤:在多个本地存储器资源中分布定义新光线的数据,并且向计算资源的第一子集传送分组的光线标识符与形状数据。各个光线标识符都包括与针对该光线的光线定义数据不同的数据。传送的光线标识符激活了对所标识出的光线与由该形状数据指示的形状的相交测试。该测试包括,通过各个计算资源来获得存储在其本地存储器中的、定义所标识出的光线的数据,基于获得的光线定义数据来测试与所指示的形状的相交,以及输出对检测到的相交的指示,用于传送。
另一方面包括利用光线追踪来对由多个图元组成的3-D场景的2-D表现进行渲染的系统。该系统包括能够访问(having access to)相应高速缓冲存储器的多个相交测试资源;这些相应高速缓冲存储器存储原版(mastercopy)光线定义数据的子集,针对各条光线的光线定义数据保持在高速缓冲存储器中,直到完成了对该光线的测试为止。
该系统还包括控制逻辑,该控制逻辑可操作用于向各条光线指定标识符,并且通过能够访问在相应高速缓冲存储器中的、针对该光线的定义数据的相应测试资源来控制测试各条光线。该测试控制通过向存储针对要测试光线的数据的相应测试单元提供光线标识符来实现。该系统包括输出队列,该输出队列用于对已经完成相交测试的光线和相交的相应图元进行标识。该控制逻辑指定由着色计算而产生的新光线,以替换高速缓冲存储器中的、已经完成相交测试的光线。
在一些方面,可以提供以下中的一个或更多个:该控制逻辑设置为通过将针对已完成光线的标识符重新用作针对新光线的标识符来进行替换,光线标识符涉及存储定义该光线的相应数据的存储器位置,并且定义新光线的数据替换存储在已完成光线的存储器位置中的数据。
其它方面包括一种利用光线追踪来对由多个图元组成的3-D场景的2-D表现进行渲染的系统。该系统包括存储组成3-D场景的图元的存储器和多个相交测试资源。各个相交测试资源都可操作用于对在该场景中行进的至少一条光线与至少一个图元的相交进行测试,并且输出对检测到的相交的指示。该系统还包括多个着色器资源,各个着色器资源都可操作用于根据对检测到的光线/图元相交的指示来运行与图元相关联的着色例程。该系统还包括用于向着色器资源输出对检测到的相交的指示的第一通信链路,和用于向相交测试资源发送由运行着色例程而产生的新光线的第二通信链路,其中,可以将新光线发送至相交测试资源,并且按照与发送新光线的相对次序不同的次序来完成相交测试。这些通信链路可以被实现为队列,如FIFO队列。
其它方面包括一种在具有多个计算资源的系统中对由多个图元组成的场景进行光线追踪的方法,其中,各个计算资源都连接至包括主存储器和分布在多个计算资源当中的存储器的分层存储器结构,其中,该主存储器在延迟上比分布式存储器高。该方法包括以下步骤:在分布式存储器当中分布对要在该场景中相交测试的多条光线进行定义的数据,使得将这些光线的子集存储在分布式存储器中的不同存储器中;并且进行确定以对光线组与一个或更多个几何形状进行相交测试,该组的成员存储在多个分布式存储器中。该方法包括以下步骤:从主存储器获取定义所述一个或更多个几何形状的数据;并且向与存储有针对该组光线的数据的各个分布式存储器相关联的、至少一个计算资源提供该几何形状和针对该组光线的标识符。该方法还包括以下步骤:利用与和存储有针对所述组的数据的分布式存储器中的至少一个存储器相关联的计算资源,来对该光线组中的各个光线进行相交测试;并且从该计算资源收集相交测试结果。
其它方面包括一种用于对光线与组成3-D场景的图元进行相交测试的系统。该系统包括多个相交测试资源,各个相交测试资源可操作用于对相应光线与几何形状的相交进行测试。各个相应光线都用向各个相交测试资源提供的引用来指示,并且该测试资源可操作用于向第一输出部或第二输出部输出对光线与几何形状之间的相交的指示。
一个输出用于图元相交,而另一输出用于几何图形加速元素相交。例如,第一输出部可以向多个着色资源提供输入,并且用于指示光线与图元之间的相交,而第二输出部向光线集合管理器提供输入,并且接收对光线与几何图形加速元素之间的相交的指示。
其它方面包括一种光线追踪方法,该方法包括以下步骤:在主存储器资源中存储组成3-D表述的多个图元和分别包围对这些图元的选择的几何图形加速元素;定义要在场景中相交测试的光线;以及定义针对各条光线的标识符。该方法包括以下步骤:在包括多个可单独编程的处理资源的系统中,在分别与各个处理资源相关联的本地存储器资源中存储光线起源和方向数据的一部分。该方法还包括以下步骤:通过向处理资源提供针对安排用于测试的光线的标识符和对几何形状的指示,来执行对用于相交测试的光线的安排。各个处理资源都确定其本地存储器资源是否存储有针对任一条标识光线的光线定义数据,并且,如果有,则对所述光线与所指示的几何形状的相交进行测试。
其它方面包括计算机可读介质/媒体,其包括用于一个系统的机器可读指令,该系统用于控制多个处理资源来实现对几何形状与供在渲染3-D场景的2-D表现中使用的光线的相交测试。该指令用于实现一个方法,该方法包括以下步骤:访问针对被确定为与包围了第一选择的图元的第一几何图形加速元素相交的光线的标识符的包;并且确定包围了被第一几何图形加速元素所包围的图元的部分的其它几何图形加速元素。该方法还包括以下步骤:实例化多个包,各个包都包含光线标识符,并包括对其它几何图形加速元素中的不同元素的相应指示;并且向分别被设置用于对比各个包中标识的全部光线更少的光线进行相交测试的、多个计算资源中的各个计算资源提供所述多个包。该方法还包括以下步骤:从所述多个计算资源接收对检测到的相交的指示;并且根据几何图形加速元素来追踪接收到的指示,直到标识出具有大于接收到的指示的阈值数的下一个几何图形加速元素为止;以及重复对下一个包的访问。
其它方面包括一种光线追踪系统,该光线追踪系统包括:被设置用于对形状与光线进行相交测试的多个计算资源,并包括与各个计算资源连接的相应高速缓冲存储器,其中,各个高速缓冲存储器都存储有定义在场景中行进的多条光线中的一些光线的数据;以及用于在所述多个计算资源之间传送消息的信道,其中,各个计算资源都被设置用于将由其接收到的消息中的数据解释为包含多个光线标识符,用于确定其高速缓冲存储器是否具有存储在其中的所述多条光线中的任一条,并且被设置成使用所关联的形状来测试任何存储的光线。
其它方面包括一种用于对光线与组成3-D场景的图元进行相交测试的系统。该系统包括多个相交测试资源,各个相交测试资源都可操作用于对相应光线与几何形状的相交进行测试。该相应光线由向各个相交测试资源提供的引用来指示。各个相交测试资源还被设置用于向第一输出部或第二输出部输出对光线与图元之间的相交的指示。该系统还包括:多个着色资源,各个着色资源都可操作用于执行针对检测到的相交的着色代码;和光线集合管理器,该光线集合管理器可操作用于保持针对光线的引用并且可操作用于向所述多个相交测试资源提供光线引用,以指示要测试的光线。第一输出部向所述多个着色资源提供输入,并且接收对光线与图元之间的相交的指示,而第二输出部向光线集合管理器提供输入,并且接收对光线与几何图形加速元素之间的相交的指示。
其它方面包括供在基于光线追踪的对3-D场景的2-D表现进行并行渲染中使用的计算配置,其包括:连接至本地高速缓冲存储器的处理器,该本地存储器被设置成存储定义用于与指定几何形状相交的多条要测试光线的数据;和由该处理器服务的输入队列,在该输入队列中接收到的数据可被该处理器解释为包括针对用于与所指示几何形状相交的要测试光线的多个标识符,该处理器被设置成获得仅针对在其队列中标识的任何光线的定义数据,对于该队列来说具有存储在处理器的本地高速缓冲存储器中的数据,被设置成对任何这种光线与所指示几何形状进行相交测试,并被设置成输出对任何检测到的相交的指示。
其它方面包括计算机可读介质,其包括用于实现光线追踪方法的机器可读指令,该光线追踪方法包括以下步骤:访问针对被确定为与包围对图元的选择的几何图形加速元素相交的光线的标识符的包;并且确定包围了由相交的几何图形加速元素所包围的图元的一部分的其它几何图形加速元素。该方法还包括以下步骤:实例化多个包,各个包都包含光线标识符并包括对其它几何图形加速元素中的不同元素的相应指示;并且向分别被设置用于对各个包中标识的光线进行相交测试的多个计算资源中的各个计算资源提供所述多个包。该方法还包括以下步骤:从所述多个计算资源接收对检测到的相交的指示;并且根据几何图形加速元素来追踪接收到的指示。
其它方面包括一种光线追踪方法,该方法包括以下步骤:确定定义了用于与组成3-D场景的图元相交的多条要测试光线的光线定义数据。该方法还包括以下步骤:在多个计算资源的相应本地存储器中分布光线定义数据的子集,这些计算资源被设置用于对光线与几何形状进行相交测试,并且在管理模块中,确定来自要通过计算资源相交测试的所述多条光线的光线集合。该集合通过多个光线标识符来定义,各个光线标识符都包括与针对该光线的定义数据不同并且与包围图元的一部分的包围形状相关联的数据。该方法还包括以下步骤:通过在所述多个计算资源之间传送针对该集合的光线标识符,而使得所述计算资源对所确定集合的光线进行测试,对于该光线标识符各个计算资源都分别对所标识的光线进行相交测试而响应,其中所标识的光线的定义数据存储在针对该计算资源的本地存储器中。
在任一方面中,存储在本地高速缓冲存储器中的所述多条光线可以是多条第二光线的不相交子集,并且所述多个光线标识符中的一些标识符标识出存储在本地高速缓冲存储器中的光线,而多条第二光线中的一些光线未存储在该本地高速缓冲存储器中。
所述功能方面可以被实现为模块,如计算机可执行代码的模块,该模块设置可操作用于生成如上所述的输入和输出的合适硬件资源。
附图说明
为更全面理解在此公开的方面和实施例,在下面的描述中针对附图进行说明。
图1例示了利用光线追踪来渲染场景的系统的第一实施例;
图2例示了图1的一部分的附加方面;
图3例示了光线追踪渲染系统的相交测试部分的另一实现;
图4例示了在图1-图3的系统中有用的、用于相交测试的计算资源的实施例;
图5例示了在光线追踪中使用的相交测试系统架构的另一实施例;
图6例示了用于相交测试的架构的另一实施例的各个方面;
图7例示了实现根据图1-6的公开的多个方面的系统架构,其包括通过队列连接的相交测试资源和着色资源;
图8a和图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高速缓冲存储器的光线数据分布在专用L1高速缓冲存储器中的不同方式;
图16给出了可以在按照这些公开的队列中呈现的包中的数据的实施例;
图17提供了涉及特定计算资源对来自一个包的光线ID的处理的公开,其中在相交测试中利用本地可用光线数据,以及写回该测试的结果;
图18a和图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元素包围的大量元素和/或图元中保持特定均匀性的目的而构造。可以将指定场景细分,直到可以实现这种目的为止。
在下面的描述中说明的是,存在这样一种机制,即,该机制基于已经被确定为与指定GAD元素相交的光线,来确定相应地接下来应当对哪些其它GAD元素进行测试。在分层图形的示例中,接着,接下来进行测试的元素通常是被测试节点的子节点。
在许多示例中实现的GAD的一种用途包括,当发现一光线与指定GAD元素相交时,将该光线与已被确定为也与该元素相交的其它光线一起收集。当收集了大量光线时,从主存储器获取连接至该元素的GAD元素的流,并且,将其流动通过分别具有收集的不同光线的多个测试器。因而,各个测试器都保持其光线固定在本地快速存储器中,而几何图形则在需要时从慢速存储器获取并且允许被覆盖。更一般地说,本描述提供了可以怎样组织计算资源来处理用于检测这种光线与几何形状(GAD元素和图元)的相交的光线的一系列示例,以最终标识出哪些光线碰撞了哪些图元。
这些示例可以实现的其它方面包括以下之一:(1)针对从相交测试到着色的输出设置队列;(2)将光线数据本地化至针对计算资源的特定程度,同时在确定将特定光线针对这些形状进行测试时从较慢存储器获取几何形状;以及(3)通过针对执行相交测试的计算资源而标识出光线(利用光线标识符),来驱动相交测试,使得各个计算资源从其本地存储器获取与所标识出的光线相对应的数据。
下面的描述说明了利用光线追踪来渲染3-D场景的2-D表现的系统及其各个部分的实施例。这种系统的两个主要功能组件为:(1)对光线进行追踪以标识出相交;以及(2)对所标识的相交进行着色。
图1例示了在对由多个图元组成的场景进行光线追踪中使用的系统的多个方面。一般来说,图1和其它图中的功能单元中的任一个的功能或任务中的任一个都可以按多个硬件单元或多个软件、软件子程序来实现,并且甚至可以运行在不同计算机上。在某些情况下,这种实现被更具体地描述为,这可以涉及系统功能和性能。
图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×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场景中,整个场景可以是假想的,如在视频游戏等中。然而,最终这通常是这些方法是存储器、显示器,以及/或计算机可读介质的变形产品的情况。
还存在这样的情况,即,利用光线追踪的渲染自从1979年起就已经实现,并且已经针对为实现利用光线追踪的渲染所需的相交测试和其它功能开发出了多种技术。因此,在此描述的特定架构和方法未排除在将3-D场景渲染成2-D表现中使用的光线追踪的基本原理。
图2例示了相交测试区域140的、包括一个或更多个单独测试资源(即,测试单元)的相交测试单元109,相交测试单元109可以针对光线来测试几何形状。区域140包括测试单元205a到205n,各个都可以接收来自光线数据存储部105的光线数据和来自存储器139的几何形状数据。各个测试单元205a-205n都生成通过结果接口121向相交处理102传送的结果,并且其可以包括对指定光线是否与指定图元相交的指示。相反,将GAD元素与光线的相交测试的结果提供给逻辑203。逻辑203保持针对将那些光线与已确定为与那些光线相交的GAD元素相关联的光线的引用的集合210。
一般来说,系统组件被设计成支持未知完成时间的、指定的、具体的光线测试。相交测试单元109读访问几何图形存储器,并且具有针对光线的引用的队列作为输入。随着相交测试的输出,各条光线都与其首先相交的几何图形(为方便起见,在本公开中称作图元)相关联。其它几何图形(即,图元)可以被视为不相关。
如上所述,区域140包括光线引用缓冲器和关联的管理逻辑203,这保持要在测试单元205a-205n中测试的光线集合的列表210。缓冲管理逻辑203可以按固定功能处理资源,或者按利用从计算机可读介质获取的指令设置的硬件来实现。这种指令在此可以按根据分配给逻辑203的功能和任务的模块来组织。普通技术人员还能够基于这些公开来提供逻辑203的进一步实现。
逻辑203可以向测试单元指定光线和几何图形,并且可以按设计处理与其它单元的通信。在一个方面,列表201中各个光线集合都包括多个光线标识符,这些光线全部要针对与一个或更多个几何形状相交而进行测试,并且逻辑203保持这种光线集合。在一个更具体实施例中,已经将多个光线标识符确定为与在所述收集中标识的GAD元素相交,并且要针对与所述多条光线相交而进行测试的下一个GAD元素与GAD元素的图形中的该相交GADA元素相关联。在开始对那些元素的相交测试时从存储器139获取针对指定集合的该联系元素。
换言之,逻辑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和340a-340n。GAD元素被例示为源自GAD数据存储部103b,而图元数据源自图元数据存储部103a。
测试单元310a-310n接收GAD元素和光线数据,以针对那些元素进行测试(即,这些测试单元测试GAD元素)。测试单元340a-340n接收图元和光线数据,以针对那些图元进行测试(即,这些测试单元测试图元)。因而,ITU 350可以对光线集合与图元的相交进行测试,并对单独的光线集合与GAD元素的相交进行测试。
ITU 350还包括集合管理逻辑203a和集合缓冲器203b。集合缓冲器203b和光线数据105可以存储在存储器340中,存储器340可以接收(例如)来自存储器139的光线数据。集合缓冲器203b保持与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中(参见图3))临时存储的光线(在光线集合缓冲器203b中(参见图3)),并且在处理期间还可以在需要时开始获取图元和GAD元素。
如上所述,因为光线标识符保持在缓冲器203b中并且针对GAD元素而组织,同时定义了光线的数据保持在光线数据部105中,所以,与光线相比,GAD元素和图元在ITU 350中是瞬变的。缓冲器203b和光线数据部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和测试单元340a-340n提供信息。在间接情况下,逻辑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还可以高速缓存所检测到的碰撞,其中,各个测试单元都被设置用于针对几何形状而对一系列光线进行测试,或者针对光线而对一系列几何形状进行测试;然后,可将高速缓存的碰撞输出为一组。工作存储器还可以接收来自存储部103b的传入形状数据。
测试逻辑420按可用或可选分辨率来执行相交测试,并且可以返回表示是否存在检测到的相交的二进制值。该二进制值可以存储在工作存储器中以供读出、高速缓存,或者输出用于在读取周期(如在存储器340中针对GAD元素测试的读取周期)期间锁存。
图5例示了更详细地聚焦在实施例存储器组织上的相交测试单元500的实现的多个方面。在ITU 500中,在这个实施例中,呈现测试单元510a-510n和540a-540n并且与310a-310n和540a-540n相对应。这不是暗示有关测试单元数量的任何必要条件。因而,在IUT 500中,图元和GAD元素两者可以并行测试。然而,如果确定需要一种或另一种的更多测试单元,则可以在恰当时重新配置任何测试单元(如果是硬件则重新分配,或者如果是软件则重新编程)。随着晶体管密度持续增加,可以将更多的这种测试单元容纳在硬件实现中(或者作为可用于执行软件的资源)。如将要描述的,测试单元的多个部分都可以作为操作组来对待,这是因为它们将针对共同形状(即,图元或GAD元素)测试光线。测试单元540a-540n可以返回表示按指定精度级与图元相交的二进制值(例如,16比特),并且还可以返回光线在图元上的哪些地方相交的更精确指示,这可以有用于较大图元。
在ITU 500中,存储器540包括多个独立操作存储体510-515,各个都具有两个端口(所标识存储体515的端口531和532)。一个端口通过GAD测试逻辑505访问,而另一个通过图元测试逻辑530访问。GAD测试逻辑505和图元测试逻辑530中的各个都操作为管理相应工作缓冲器560-565与570-575之间的数据流,并且分别从GAD存储部103a和图元存储部103b获取用于测试的GAD元素。
存储体510-515旨在在较大程度上操作以通过GAD测试逻辑505和图元测试逻辑530提供针对光线数据的非冲突访问,使得可以从单独的存储体510-515向各个测试单元510a-510n和测试单元540a-540n提供光线。根据这些公开应当明白,这种非冲突访问例如可以通过单独高速缓冲存储体以及允许通过针对存储器的不同物理部分的端口访问的交叉式存取(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不需要保持与向其提供了哪些光线有关的信息,而仅需要返回对相交的指示。如将示出,可以提供用于保持一致性的其它实现,包括在测试单元之间传送光线标识符的包,并且允许测试单元向该包写入相交结果。
可以将针对光线集合的存储部实现为针对光线集合的n路交错高速缓冲存储器,使得可以将任何指定光线集合存储在光线集合缓冲器203b或520的n个部分中的一个部分中。光线集合缓冲器203b或520接着可以保持存储在该缓冲器的n个部分中的各个部分中的光线集合的列表。光线集合缓冲器203b或520的一个实现可以包括使用与一光线集合相关联的GAD的元素的标识特性,例如,可以使用在渲染场景中使用的GAD元素当中的唯一标识符串。字母数字(alphanumeric)串可以是数字、或散列值等。例如,散列值可以引用光线集合缓冲器203b和520的n个部分中的一个部分。
在其它实现中,可以例如通过将使用中的字母数字串的片段映射至这种缓冲器的(多个)部分,而针对光线集合缓冲器203b和520的指定部分中预先指定用于存储的GAD元素。图元/光线相交输出部580表示用于标识潜在图元/光线相交的输出,输出部580可以串联或并联。例如,在存在32个图元测试单元540a-540n的情况下,输出部580可以包括表示存在或不存在针对刚才测试的、各条光线与图元的相交的32位。当然,在其它实现中(举例来说,如在包实现中),输出可以直接来自测试单元。输出可以串行,并且可以通过测试单元串行存储在包中。
在存储器340(520)中接收来自光线源(如着色器)的光线数据。集合管理逻辑(例如,图2&3中的203a)操作以初始地将光线指定给集合,其中,各个集合都与GAD元素相关联。例如,GAD元素可以是图形的根节点,并且,接收到的全部光线都被初始地指定给与该根节点相关联的一个或更多个集合。接收到的光线还可以按组尺寸化,使得成为满集合,例如,来自一输入队列,并且例如,各个这种集合都可以被视为如同在光线集合缓冲器203b中标识的集合。
侧重在针对一个集合的处理上,可理解的是,可以并行测试多个集合,通过集合管理逻辑203a发起从存储器340获得与测试节点相关联的集合的光线,例如,通过提供这种光线的、存储为该集合中的数据的地址(光线标识符),以允许从存储器340获得这种光线,或者通过图5的实施例而从存储体510-515获得这种光线,这在多个输出端口上提供被测试单元(例如,测试单元560-565)接收到的光线数据。
关于对由针对测试而选定的节点所包围的GAD元素(即,与包围其它GAD元素的选定节点相关联的GAD元素)进行测试而言,完成了针对被测试集合的光线的光线数据的分布,并且,还执行获取所包围的GAD元素(不一定使得这种获取与光线分布依次进行)。针对这种获取,逻辑203a可以向GAD存储部103b输入寻址信息(或通过提供的任意存储器管理装置),这向测试单元310a-310n输出(多个)寻址到的GAD元素。在包围了多个GAD元素的情况(通常是这种情况),可以将这些元素排列成针对测试单元串行地流动(如利用串行化缓冲器),使得允许对多个GAD元素的块读取。
在测试单元(例如,310a-310n)中,可以针对光线集合与串行提供的GAD元素的相交而进行测试(例如,各个测试单元中的不同光线)。在确定光线为相交的情况下,确定是否存在针对相交的GAD元素的集合,如果存在,则将该光线添加至该集合(如果空间准许(roompermitting)),而如果不存在,则创建这种集合并且添加该光线。在现有集合没有空间的情况下,则可以创建新集合。
在一些实现中,将集合中的光线的最大数量与测试单元310a-310n的数量设置为1∶1的对应关系,使得可将该集合中的全部光线针对指定GAD元素并行进行测试,这可以包括吞吐量通常大约为在光线与测试单元为1∶1对应关系的情况下所获取的结果的架构,但是,这可以实现在不同测试单元之间依次传送包(例如,表示该集合的信息,如上所述),使得不同测试单元可以对来自不同包的光线进行测试,即使可以将指定集合的全部光线视为并行测试。
此后,对光线与提供给测试单元的图元的相交进行测试(即,在这个实施例中,各个测试单元都具有不同光线,并且测试该光线与公共图元)。在测试之后,各个测试单元指示出检测到的相交。
对该集合的各条光线在其测试单元中针对各条光线与提供给测试单元的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的测试逻辑203),测试控制逻辑603包括用于连接至存储器接口625的获取单元620、指令高速缓冲存储器630、指令解码器645,以及数据高速缓冲存储器650。数据高速缓冲存储器650向测试单元610a-610n进行馈送。指令解码器645还向测试单元610a-610n提供输入。指令生成器665向指令解码器645提供指令输入。测试单元向写回单元660输出对检测到的相交的指示,写回单元660然后可以将数据存储在数据高速缓冲存储器650中。来自写回单元660的输出还可以在生成指令时用作针对指令生成器665的输入。设想的是,在这种处理器605中使用的指令可以是单一指令、多数据种类,其中,测试单元中处理的指令是在所定义表面(例如,图元和GAD元素)与光线之间的相交测试。
在实施例中,该“指令”可以包括定义几何形状的数据,如图元或GAD元素,并且,多个数据元素可以包括用于针对设置为“指令”的几何形状而进行测试的光线的单独引用。这样,几何形状和多光线引用的组合可以认为是可递送至多个所例示测试单元的离散信息包。在某些情况下,包递送可以依次进行,使得多个包在多个测试单元当中“处于飞行(in flight)”。
这种测试单元可以存在于具有较大指令集的全特征化处理器的环境中,并且,各个这种包都由此可以包括足够以分辨该包的目的的其它信息。例如,可以包括的多个比特,用于区分针对相交测试而形成的包与出于其它目的(为其它目的将执行不同操作)而存在的包。而且在恰当时候,可以提供多种相交测试指令,这包括针对不同图元形状和不同GAD元素形状,甚或针对不同测试算法的指令。
在典型实施例中,各个相交测试包都初始地可以包含针对几何图形元素的引用,或者包含针对该几何图形元素的数据(或者作为GAD元素,或者作为针对图元的引用),并包含针对与该几何图形元素相交测试的大量光线的引用(即,上述“包”)。
解码器645可以解释该指令,以确定针对该几何图形元素的引用,并且发起通过获取单元620获取该元素(针对存储器接口(如存储器接口625)的控制)。在一些实现中,解码器645可以先行处理(lookahead)多个指令,以开始获取将来需要的几何图形元素。该几何图形元素可以通过获取单元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)705a-705n,各个分别连接至光线数据存储部766a-766n,该光线数据存储部存储有定义了该资源中要针对相交进行测试的光线的数据。每一组ITR和光线存储部(例如,光线数据766a和ITR 705a)可被视为对测试资源和光线数据存储部的本地分组,例如,例示了分组704,这类似于先前分组,例如图5的分组578和579。
光线数据存储部766a-766n可以是存储器,如专用L1高速缓冲存储器,L2高速缓冲存储器的共享或映射部分等。如在先前实施例中,优选的是,将快速存储器专用于存储针对特定处理资源为本地的光线数据,而非几何图形数据。通过在此使用的相交测试算法使得本地存储光线数据更容易,该相交测试算法增加了可以在更多本地化的更快速存储器中存储光线的时长,这缩减了这种较小存储器的反复量。这样,这种光线存储可以被视为准静态的,这是因为通常将指针对定光线的数据存储在同一本地存储器中,直到完成了对其在该场景中的相交测试为止。
定义了光线的数据经由输出部743从测试控制部703加载(类似于先前图中的逻辑203b等)。测试控制部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 705a-705n,其高速缓冲存储器1065a-1065n包含针对各个这种光线ID的数据。集合管理部1075还可以具有针对存储有GAD元素数据和/或图元数据的存储器的接口,以发起获得需要测试的几何形状。
这些形状从存储器103(图1)经由链路112(例如)抵达队列1040。这些形状基于与和指定集合相关联的GAD元素的关联来标识。例如,在分层GAD的情况下,这些形状可以是父GAD元素的子元素。各个ITR都可以针对来自队列1040的形状串行地测试其光线。因而,当将指定集合的光线等同地分布在高速缓冲存储器1065a-1065n中时可获得最高吞吐量,并且集合管理部1075可以最容易地基于测试指定光线集合的结果而更新集合。当指定集合的多条光线处于一个高速缓冲存储器中,则其它相交测试器可能停顿,或者它们可以测试来自下一个集合的光线。在再次要求集合测试同步化之前,可以容纳最大数量的无次序测试。
在输出部750a-750n(其可以是链路750(图7)的组件)处生成输出,这被提供给判定点751(图7)。如上所述,这种架构设置为ITR测试任何形状(即,图元或GAD元素)。而且,与集合管理部1075连接的判定点751表示GAD相交测试的结果包括确定指定光线碰撞指定GAD元素,这使得所标识方向添加至与该GAD元素相对应的集合。因而,另一实现可以包括直接向集合管理部1075提供GAD测试结果。更具体地说,该实施例例证了潜在的信息流,并且将据此了解其它流。
要注意的其它方面是,可以将针对指定光线集合的一个以上的光线ID存储在队列1021、1022、1023中的任一个中(集合部1047所示)。在这种情况下,针对该队列的ITR可以随着它们变得可用而测试光线和针对第二测试(或者,无论随后测试的数量)的输出结果两者。判定点751可以等待要汇编的集合的全部结果,或者可以在可用时传播“掉队(straggler)”结果。
总之,图10例示了允许将与一个或更多个形状相关联的光线标识符的包分布到针对多个测试资源的队列中的系统组织,各个测试资源都存储光线数据的子集。各个测试资源都针对加载至被测试资源的形状来获取由各个光线标识符标识的光线数据。优选的是,可以将这些形状同时依次通过全部测试资源来流动。可以将这些形状标识为以主存储器中的地址开始的序列子类。因而,图10例示了通常针对多条光线同时测试一个形状的系统组织。
然而,其它实施例设置为按一系列不同相交测试资源来依次测试一个形状,其中,形状数据和光线标识符包在相交测试资源之间行进。通过使多个包“在空中”前进,增加了测试的吞吐量。根据这个方法的实施例如下所述。
图11例示了可以实现多个计算机资源1104-1108的环形总线排布结构的计算机架构的第一实施例。各个计算机资源都可以访问专用L1高速缓冲存储器1125a-1125n,这针对用于相交测试的任何计算机资源而言,包含将与来自存储器340中的形状数据存储部1115的、被提供给该计算资源的几何形状进行相交测试的光线数据。计算资源1104-1108之间的通信可以通过总线1106进行,这可以包括多个点对点链路或可用于这种处理器间通信的任何其它架构。
如果计算资源共享特定存储器结构,如L2高速缓冲存储器1130和1135,则这些计算资源(例如,共享L2高速缓冲存储器1130的计算资源1107和1106)之间的通信可以出于某些目的而通过该高速缓冲存储器彼此通信。另外,可以将针对在该系统中测试的光线的数据副本保持在光线数据部1110中,用于在光线数据部1110a-1110n之间分布其子集,这种光线数据可以通过L2 1130和L2 1135传送。并且其较大部分还可以存储在L2高速缓冲存储器中(如下所述)。形状数据1115还可以驻留在存储器340中,并且临时驻留在L2 1130 1135中的一个或更多个中和高速缓冲存储器1125a-1125n中的任一个中。然而,对存储在这种高速缓冲存储器中的光线数据进行保护而不被这种形状数据覆盖,并且,通常将分配用于这些形状的空间的量限于那些用于当前标识为准备测试的光线包,足够以屏蔽(shield)针对形状数据1115的延迟(latency),而不需要在没有对在测试中接下来何时使用形状数据的任何指示的情况下尝试保持形状数据。换句话说,优选的是,避免针对光线数据使用典型高速缓冲存储器管理算法,如最近最少使用替换法(least recently usedreplacement)。
图11还例示了除了相交测试以外还可以在计算资源1104上执行应用和/驱动器1120。而且,光线处理1121可以在计算资源1108上执行,并且可以将包数据1116存储在高速缓冲存储器1125a中,以供包处理1121使用。可以将其它包数据存储在L2 1129中,但类似于光线数据,优选地将包数据存储在最快速的可能存储器中。包处理执行大量与在先前图中执行的集合和其它管理逻辑相同的功能,即,追踪哪些光线与哪些GAD元素相交,并且选择准备好进行测试的GAD元素,例如,依靠使得足够光线准备好针对所相交的GAD元素的子类进行测试。
因为在这个实施例中,包处理1121被集中化,所以包处理1121通过发出包含多个光线标识符、和针对(多个)形状的引用或针对要对与所标识出的光线的相交进行测试的(多个)形状的数据在内的包,来操作。执行相交测试的各个计算资源1104-1107接收该包。例如,依次按多个点对点链路(下面进一步说明),或者通常同时在共享总线类型介质中(其类似于图10的架构)。各个计算资源1104-1107都确定其本地光线数据部1110a-1110n是否存储有针对该包中所标识的任何光线的数据,并且,如果有,则获得针对该光线的数据,测试它并输出结果。
因为通过包处理1121追踪针对GAD元素相交的结果,所以用于将这种结果返回至包处理1121的任何通信机制都可接受。这种机制可以基于系统的总体架构来选择。下面例示了一些实施例方法,并且可以包括针对所找到的各个相交的单独指示,或者允许各个测试资源利用相交结果填充循环包。
图12例示了关联高速缓冲存储器1281-1284的计算资源1205-1208的组织的另一实施例,各个高速缓冲存储器皆存储有光线数据1266a-1266n和包数据1216a-1216n。各个计算资源1205-1208都根据队列1251-1254连接至至少一个其它计算资源。光线处理1210通过队列1250向计算资源1205提供输入。光线处理1210与应用/驱动器1202通信。来自计算资源1208的输出1255与光线处理1210通信。另一输出1256与计算资源1205通信。图元和GAD存储部103向计算资源1205-1208提供该形状数据的读访问。
光线处理1210接收或创建用于测试的光线,并且形成包含光线标识符和针对所标识出的光线的光线数据的包。通过队列1250-1254将该包传送至计算资源1205-1208中的各个。各个计算资源1205-1208都采用指定包中的一部分光线,在某些实施例中,采用一条光线,并将该部分光线存储在其光线数据部1266a-1266n中。其它实施例可以包括发送前往特定计算资源1205-1208的包,使得光线处理1210确定哪些光线数据将存储在哪些本地光线数据部1266a-1266n中。
在将光线加载在本地存储部中之后,此后根据仅包含光线ID(而不包含起源和方向数据)的包标识它们。这种包还包含针对形状的引用或针对要针对该包中所标识出的光线进行测试的形状的数据。在一些实施例中,将用于形成这种包的数据分布在计算资源1205-1208的本地存储器1281-1284中。因而,计算资源1205-1208中的各个都按指定时间保持针对在该系统中测试的光线的包数据的一部分,使得对涉及要接下来针对哪些形状进行测试的哪些光线的信息进行分布。因而,各个计算资源1205-1208都可以发出光线ID的包和形状信息,以发起测试准备测试的集合。
各个包都通过队列和计算资源而经过一轮(make a round),并接着随着填充有相交测试结果而反向转发至起源计算资源。在一个实现中,各个计算资源1205-1208都获取针对将发出的包的形状数据。例如,如果计算资源1205具有准备测试的包(例如,针对指定GAD元素的光线的集合),则该计算资源可以根据这种关联(例如,GAD元素的子类)获取要测试的形状,形成具有针对各个形状的数据的包,并且发送队列1251之外的各个包。
然后,在该包行进通过其它计算资源之后,计算资源1205接收发送的各个包。当接收时,各个包都填充有测试该包中的形状(引用或定义数据)与存储在其它计算资源1206-1208中的包中所标识的光线相交的结果。计算资源1205可以在其它计算资源执行它们的测试之前或之后,对在光线数据1266a中的任何标识的本地光线进行测试。因而,光线定义数据可以在多个快速存储器当中分布,连接至相交测试资源,并且可以按分布方式收集测试结果。
实现根据图12的架构可以考虑使用的物理系统的各种特性。例如,将队列示出为按一个方向发送包。然而,可以通过按两个方向(即,双向队列或多个队列)发送包来实现益处。而且,图12例示了在计算资源当中分散包数据,这允许对更多L2高速缓冲存储器的更多分散存储器访问,并且潜在地访问更大存储器(如主存储器103)的其它端口。
如果将包数据集中化,则利用数据引用按一个方向发送的包可以具有例如通过计算资源1205获取的数据,而利用数据引用沿另一方向发送的包可以具有通过计算资源1208获取的数据。这种情况可被概括成将任何输入点设置到这种环形总线架构(单向或双向)中。
如从本公开清楚,该队列可以包括用于将用于相交测试的新光线引入到包括多个相交测试资源的系统中的一个或更多个队列,和彼此互连相交测试资源的队列。在某些情况下,引入新光线的队列可以包含光线定义数据(例如,等待在连接至相交测试资源的高速缓冲存储器中存储数据的队列)。这种队列可被实现为存储有光线定义数据的主存储器中的列表。互连用于传送包的相交测试资源的队列优选地仅包括光线标识符,而不包括光线定义数据。
图13例示了系统1200的潜在实现的一部分,其中,计算资源可以利用芯片的多个内核来实现,使得计算资源1205是一个内核,而计算资源1206是另一个,其中,队列1251在内核间通信。而且例示了可以存储光线数据和形状数据的中间L2高速缓冲存储器1305。如参照先前图所述,L2高速缓冲存储器1305可以存储场景几何图形的某一部分和加速数据,只要通过存储这种数据就不会增加光线数据的反复(即,光线数据在高速缓冲存储器存储部中被优选地赋予优先级)。
图14a-图14c皆例示了根据可以采用示范性系统的各种实现的队列的各种关系。一般来说,计算资源间通信不需要串行或1∶1。例如,图14a例示了一个输入部1404可以馈送两个队列1405和1406,这皆可以分别专用于一个计算1407和1408。例如,在计算1407和1408在单一物理芯片上实现的情况下,那么,输入1404可以是芯片级输入,并且各个队列1405 1406都可以用于特定内核。
图14b例示了单一输入可以馈送多个内核,这皆可以馈送计算14071498,这还皆可以分别向相反队列1406 1405发送数据。图14c例示了队列1411可以接收输入1410,并且向两个计算1407和1408提供输出。因而,图14a-图14c例示了可以根据这些方面针对传送包实现各种排队策略。
图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,包1601n包含针对形状n的数据1615n。可以看出,队列1251被计算资源1205馈送并且被计算资源1206读取。当然,可以实现各种其它排队策略,图14a-14c中例示了其中一些排队策略。
在此作为术语使用的“排队”并没有暗示针对在任何指定计算资源中测试的光线的“先入先出”的必要条件。一般而言,任何指定包中标识的光线将大约均匀地分布在针对不同计算资源的本地光线存储部中,使得任何指定包应当找到分布在大量计算资源当中的其光线,使得针对各个包实现并行化。在针对一个包的大量光线需要在一个计算资源中测试的情况下,那么,在另一计算资源没有光线针对该包相交的情况下可能形成气泡(bubble)。这种气泡可以被其它计算充满,包括另一包的其它相交测试。在一些实施例中,各个计算资源都可以保持针对多线程的状态,并且在针对指定包的停顿条件下在线程之间切换。只要针对包之间的各个相交测试的临界数据可以被保持在寄存器中,那么净吞吐量优点应当可实现。
在示范性系统的操作的多个方面的部分摘要中,各个计算资源都响应于接收到的包而工行。当一个包从针对特定计算资源的输入队列抵达时,该计算资源检查该包中的光线标识符,并且确定该包中标识的哪些光线具有存储在其相应存储器中的、针对它们的数据。换句话说,一个包可以利用光线标识符形成,而不需要计算资源包含或具有针对该包中所标识的光线的光线数据的快速访问的先验获知。而且,各个计算资源都不相应地尝试获取针对一个包中所标识的全部光线的光线数据,相反,仅确定该计算资源在其本地快速存储器中是否具有针对一个包中所标识的任何光线的光线数据,并且仅针对该光线与所标识出的形状的相交而进行测试。
图17是用于描述怎样可以在实施例计算资源中处理的一个包的方面。图17例示了包1601a进入计算资源1206。计算资源1206利用来自包1601a的光线标识来对查询其光线数据(例如,假设光线1605a具有光线ID 31,并且匹配至光线数据存储部1266b中的光线ID 31)。经由1290获得与光线ID 31相关联的起源和方向。而且,如果在该包中标识出形状数据,则从当前存储该形状数据的存储器资源1291获取1715形状数据。如果在该包中提供形状数据,则直接使用该形状数据。接着,针对光线31与形状1(或由获得的数据所定义的形状)的相交而进行测试1720。
如果所测试形状数是GAD元素(1725),则这种相交测试的结果要确定仍可能具有与所测试光线相交的可能性的场景图元的较小子集。因此,将正碰撞结果写回1726至用于光线标识符(即,针对光线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。接着,存储在光线数据部1266a中的在包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到n编号。在时刻n,测试形状1和光线n。在下一个循环的开始(时刻q-1*n+1),在计算单元181a中开始测试最后形状。
图19例示了包1905如何可以针对相交测试而在计算资源与测试结果之间分散的方面,该测试结果最终聚结在计算资源1910中,该计算资源1910保持针对与所标识出的形状1905相关联的包的光线的存储器。图19例示了处理期间的实施例系统状态。具体来说,计算资源1910-1914皆接收到了针对存储在该计算资源可访问的存储器中的光线的光线ID信息,针对相交测试了所标识出的形状并且输出结果1915-1919,该结果包括所标识碰撞1915、1917、1919。碰撞或未击中(miss)可以是默认行为,使得未击中例如并不用正值来指示,或者,可以将该包中的默认值设置成未击中。在测试之后,计算资源1910至少收集该碰撞信息;这里,计算资源1910可以管理在测试系统中的全部包信息(或其子集),这包括针对该特定形状的包信息。
存储器1966的实施例组织示出了映射至大量光线ID(光线A、D等)的形状引用的逻辑组织。而且例示出了针对与Ref#1(即,针对测试的形状的引用)有关的行的一些槽是空的。因而,当计算资源1910接收到碰撞结果时,它首先填充指定Ref#1集合的剩余空槽,接着,在1966中例示了,光线n在存储器1966内开始针对Ref#1的新包。下面,因为针对Ref#1的包是满的,所以可以确定这个包准备就绪用于测试。在一些实施例中,获取根据Ref#1引用的形状的子GAD元素,并且利用各个包中的与Ref#1相关联的全部光线来形成一个包。例如,可以有Ref#1的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标识。接着,可以针对各个子类形状与来自与该父相关联的包的光线标识符产生(2035)新包。
图21和图22在可以用于实现上述方法方面的背景系统中总结上述方法的各个方面。具体来说,图21描绘了方法2100包括以下步骤:在主存储器中存储图元和GAD元素(2105);以及利用光线定义数据(例如,起源和方向信息)来定义(2110)相交测试的光线。各条光线都可利用标识符来标识(2115)。光线定义数据的子集存储在与多个处理资源中的相应处理资源相关联的本地存储器中。通过在处理资源当中分布(2125)针对那些光线的标识符和形状数据,来安排进行测试的光线。在具有针对本地存储的那些光线的定义数据的处理资源中,测试光线(2130)。在某些情况下,各条光线都可以仅在一个本地存储器中具有定义数据。
将对光线与图元之间的相交的指示从计算资源的第一子集向第二子集传送(2135)。第二子集对该相交着色(2140)。该着色可以获得新光线,为此,在本地存储器当中分布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空间中的方向矢量。然而,在继续保持在本公开内的同时,可以提供用于表示光线的多种其它方式中的任一种。例如,光线方向还可以采用球面坐标来表示。还应明白,在保持初始表示的数据的信息的意义的同时,可以将按一种格式提供的数据变换或映射成另一格式。
而且,在前述公开中例示和描述了许多实施例,各个都例示了可以具体实施根据权利要求的系统、方法、以及存储在计算机可读介质上的计算机可执行指令的不同方面。根据必要,不是各个实施例都可以例示各个方面,并且这些实施例不是例示这种方面的排它组合。相反,参照一个图或实施例例示和描述的方面可以与参照其它图例示和描述的方面一起使用或组合。这样,普通技术人员根据这些公开将明白,上述公开不限于有关根据权利要求的实施方式的内容,相反,权利要求的范围在此限定了发明的实施方式的宽度和范围。

Claims (28)

1.一种用于对由多个图元组成的3-D场景中的光线进行相交测试的系统,所述系统包括:
存储有几何图形加速数据元素的存储器,其中每个元素在3-D空间中包围图元的相应集合;
多个相交测试器,各个相交测试器都能够访问相应高速缓冲存储器,以存储定义了多条光线的原版光线定义数据的相应子集;
包处理,可操作用于如下控制光线相交测试:
追踪所述多条光线中的哪些光线已经与所述几何图形加速数据元素中的哪些相交,以及
发出包,所述包包含多个光线标识符以及对形状的引用或者针对要与所标识的光线的相交进行测试的形状的数据;
其中每个所述相交测试器可操作用于接收所述包,确定其高速缓存是否存储有针对所述包中标识的任何光线的数据并且从其高速缓存获得针对该光线的数据,测试所述光线与所述形状的相交,以及输出结果;以及
输出缓冲器,连接以从所述多个相交测试器接收输出,所述输出包括与足够以标识与图元相交的光线的信息配对的、针对所述图元的标识。
2.根据权利要求1所述的系统,所述系统还包括用于执行与所述图元相关联的着色器代码例程的多个计算资源,其中执行所述着色器代码例程生成要相交测试的新光线,并且,所述系统还包括针对所述多个相交测试器的、用于接收所述新光线的输入队列,并且,所述包处理可操作用于随着其它光线完成了相交测试而开始所述新光线的相交测试器。
3.根据权利要求1-2中的任一项所述的系统,其中所述相交测试发生在光线与几何形状之间,所述几何形状包括从kD树、轴对齐包围盒以及球形的剖切面中的一个或更多个中选定的加速结构元素。
4.根据权利要求1所述的系统,其中
所述包包括与所述包中包含的每个光线标识符对应的碰撞信息域;
每个相交测试器还可操作以用于将针对所述光线的相交测试的结果写入所述包中针对该光线的所述碰撞信息域。
5.根据权利要求1-2中的任一项所述的系统,其中所述多个相交测试器被实现为在一个或更多个计算内核上执行的计算机可执行指令的线程。
6.根据权利要求1-2中的任一项所述的系统,所述系统还包括用于执行与所述图元相关联的着色器代码例程的多个计算资源以及存储器,所述存储器存储组成3-D场景的多个图元,所述存储图元的所述存储器还用作用于包括一个或更多个计算内核的计算系统的主存储器,所述一个或更多个计算内核能够并发地执行多个线程,所述多个线程按照时变的方式在执行所述多个相交测试器与执行所述着色器代码例程之间通过所述系统分配。
7.一种在一系统中控制由多个图元组成的场景的光线追踪的方法,所述系统具有多个计算资源,各个计算资源都连接至一相应本地存储器和一共享主存储器,其中所述主存储器在延迟上比所述本地存储器高,所述方法包括以下步骤:
在所述多个计算资源的多个所述本地存储器中分布定义要在所述场景中相交测试的多条光线的相应子集的数据;
进行确定以测试用于与一几何形状相交的光线组,所述组的成员共同存储在多个所述本地存储器中;
向所述多个计算资源提供针对所述几何形状的数据和光线标识符,以使其本地存储器存储针对所述组中的一光线的定义数据的至少一个计算资源接收所述几何形状数据和所述光线标识符;以及
从所述多个计算资源接收对所述组的光线与所述几何形状之间的检测到的相交的指示,所述指示是在至少一个计算资源中测试所述组中的各条光线而得到的,所述至少一个计算资源的本地存储器在存储针对所述光线的定义数据。
8.根据权利要求7所述的方法,所述方法还包括以下步骤:从所述主存储器获取定义所述形状的数据,并且其中所述提供针对所述几何形状的数据的步骤使向所述多个计算资源提供所述形状定义数据和所述组的所述光线标识符。
9.根据权利要求7-8中的任一项所述的方法,其中所述指示包括针对几何图形加速元素与光线之间的相交的数据,并且,所述光线组通过收集被确定为相交同一所述几何图形加速元素的光线而形成,并且,所述方法还包括以下步骤:推迟进一步测试与所述几何图形加速元素有关的几何图形加速元素,直到收集到足够数量的光线为止。
10.根据权利要求7-8中的任一项所述的方法,其中多个所述本地存储器包括高速缓冲存储器,并且,所述方法还包括以下步骤:保护定义指定光线的数据在其高速缓冲存储器中不被覆盖,直到所述光线完成相交测试为止。
11.根据权利要求7-8中的任一项所述的方法,所述方法还包括以下步骤:针对具有存储在相应本地存储器中的光线定义数据的光线,在所述相应本地存储器中保持相应当前最接近的检测到的相交,和响应于标识任何图元与一指定光线之间的最接近的可能相交来生成各个相交指示。
12.根据权利要求7-8中的任一项所述的方法,其中针对所述几何形状的所述数据包括来自(1)标识要测试的一个或更多个形状的引用和(2)定义要测试的一个或更多个形状的数据的集合中的选择。
13.根据权利要求7-8中的任一项所述的方法,其中所述提供步骤包括将多个光线标识符排队成第一队列,所述多个计算资源被偶合成从所述第一队列接收光线标识符,并且,所述接收步骤包括从第二队列接收所述指示。
14.根据权利要求7-8中的任一项所述的方法,所述方法还包括以下步骤:在所述主存储器中保持原版的所述光线。
15.一种在一系统中控制由多个图元组成的场景的光线追踪的装置,所述系统具有多个计算资源,各个计算资源都连接至一相应本地存储器和一共享主存储器,其中所述主存储器在延迟上比所述本地存储器高,所述装置包括:
用于在所述多个计算资源的多个所述本地存储器中分布定义要在所述场景中相交测试的多条光线的相应子集的数据的模块;
用于进行确定以测试用于与一几何形状相交的光线组的模块,所述组的成员共同存储在多个所述本地存储器中;
用于向所述多个计算资源提供针对所述几何形状的数据和光线标识符以使其本地存储器存储针对所述组中的一光线的定义数据的至少一个计算资源接收所述几何形状数据和所述光线标识符的模块;以及
用于从所述多个计算资源接收对所述组的光线与所述几何形状之间的检测到的相交的指示的模块,所述指示是在至少一个计算资源中测试所述组中的各条光线而得到的,所述至少一个计算资源的本地存储器在存储针对所述光线的定义数据。
16.根据权利要求15所述的装置,所述装置还包括:用于从所述主存储器获取定义所述形状的数据的模块,并且其中用于提供针对所述几何形状的数据的所述模块包括用于使向所述多个计算资源提供所述形状定义数据和所述组的所述光线标识符的模块。
17.根据权利要求15-16中的任一项所述的装置,其中所述指示包括针对几何图形加速元素与光线之间的相交的数据,并且所述光线组通过收集被确定为相交同一所述几何图形加速元素的光线而形成,并且所述装置还包括:用于推迟进一步测试与所述几何图形加速元素有关的几何图形加速元素直到收集到足够数量的光线为止的模块。
18.根据权利要求15-16中的任一项所述的装置,其中多个所述本地存储器包括高速缓冲存储器,并且所述装置还包括:用于保护定义指定光线的数据在其高速缓冲存储器中不被覆盖直到所述光线完成相交测试为止的模块。
19.根据权利要求15-16中的任一项所述的装置,所述装置还包括:用于针对具有存储在相应本地存储器中的光线定义数据的光线在所述相应本地存储器中保持相应当前最接近的检测到的相交的模块,以及用于响应于标识任何图元与一指定光线之间的最接近的可能相交来生成各个相交指示的模块。
20.根据权利要求15-16中的任一项所述的装置,其中针对所述几何形状的所述数据包括来自(1)标识要测试的一个或更多个形状的引用和(2)定义要测试的一个或更多个形状的数据的集合中的选择。
21.根据权利要求15-16中的任一项所述的装置,其中用于提供的所述模块包括用于将多个光线标识符排队成第一队列的模块,所述多个计算资源被偶合成从所述第一队列接收光线标识符,并且用于接收的所述模块包括用于从第二队列接收所述指示的模块。
22.根据权利要求15-16中的任一项所述的装置,所述装置还包括:用于在所述主存储器中保持原版的所述光线的模块。
23.一种利用光线追踪来对由多个图元组成的3-D场景的表现进行渲染的系统,所述系统包括:
存储器,所述存储器存储有组成3-D场景的多个图元;
一个或更多个存储器,所述一个或更多个存储器存储针对多条光线的定义数据;
多个相交测试器,各个相交测试器用于测试所述多条光线中的至少一条光线与所述多个图元中的至少一个图元,获得相交测试结果的输出;
多个着色器计算单元,各个着色器计算单元可操作用于运行针对由所述结果指示的、检测到的光线/图元相交的着色例程,所述运行所述着色例程获得要相交测试的新光线,针对所述新光线的定义数据要存储在存储有针对所述多条光线的定义数据的所述一个或更多个存储器中;
第一通信链路,所述第一通信链路用于向所述着色器资源输出来自所述多个相交测试器的所述相交测试结果;以及
第二通信链路,所述第二通信链路用于向所述多个相交测试器发送针对由运行所述着色例程而产生的新光线的标识符,所述标识符要用于在相交测试所述光线期间从所述一个或更多个存储器获得针对相应光线的定义数据。
24.根据权利要求23所述的系统,所述系统还包括用于在所述多个相交测试器之间传送消息的多个信道,其中所述多个相交测试器中的各个相交测试器都被设置成执行以下处理:将由其接收到的消息中的数据解释为包含多个光线标识符,并且,被设置成相交测试所述消息中标识的选定光线。
25.根据权利要求23所述的系统,其中所述多个相交测试资源按环形设置,以在所述多个相交测试资源之间传送光线标识符的包。
26.根据权利要求23所述的系统,其中所述多个相交测试器中的各个相交测试器都可操作用于基于确定与所述相交测试器相关联的高速缓冲存储器是否存储有针对在所述多个相交测试器之间传送的消息中所标识的任一光线的定义数据,来选择用于测试的相应光线。
27.根据权利要求23所述的系统,其中所述多个相交测试器被实现为在一个或更多个计算内核上执行的计算机可执行指令的线程,各个相交测试器都具有接入在所述场景中行进的所述多条光线的子集的本地高速缓冲存储器。
28.根据权利要求23所述的系统,其中存储组成3-D场景的多个图元的所述存储器被实现为用于一个或更多个计算内核的主存储器,所述一个或更多个计算内核能够并发地执行多个线程,线程的数量按照时变的方式在执行所述多个相交测试器与所述多个着色器计算单元之间进行分配。
CN200980118357.7A 2008-03-21 2009-03-20 用于光线追踪渲染的并行相交测试及着色的架构 Active CN102037497B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201410189255.7A CN104112291B (zh) 2008-03-21 2009-03-20 用于光线追踪渲染的并行相交测试及着色的架构

Applications Claiming Priority (5)

Application Number Priority Date Filing Date Title
US3873108P 2008-03-21 2008-03-21
US61/038,731 2008-03-21
US9589008P 2008-09-10 2008-09-10
US61/095,890 2008-09-10
PCT/US2009/037860 WO2009117691A2 (en) 2008-03-21 2009-03-20 Architectures for parallelized intersection testing and shading for ray-tracing rendering

Related Child Applications (1)

Application Number Title Priority Date Filing Date
CN201410189255.7A Division CN104112291B (zh) 2008-03-21 2009-03-20 用于光线追踪渲染的并行相交测试及着色的架构

Publications (2)

Publication Number Publication Date
CN102037497A CN102037497A (zh) 2011-04-27
CN102037497B true CN102037497B (zh) 2014-06-11

Family

ID=40886951

Family Applications (2)

Application Number Title Priority Date Filing Date
CN200980118357.7A Active CN102037497B (zh) 2008-03-21 2009-03-20 用于光线追踪渲染的并行相交测试及着色的架构
CN201410189255.7A Active CN104112291B (zh) 2008-03-21 2009-03-20 用于光线追踪渲染的并行相交测试及着色的架构

Family Applications After (1)

Application Number Title Priority Date Filing Date
CN201410189255.7A Active CN104112291B (zh) 2008-03-21 2009-03-20 用于光线追踪渲染的并行相交测试及着色的架构

Country Status (4)

Country Link
JP (2) JP5485257B2 (zh)
KR (1) KR101550477B1 (zh)
CN (2) CN102037497B (zh)
WO (1) WO2009117691A2 (zh)

Families Citing this family (48)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20100064291A1 (en) * 2008-09-05 2010-03-11 Nvidia Corporation System and Method for Reducing Execution Divergence in Parallel Processing Architectures
CN101826215B (zh) * 2010-04-19 2012-05-09 浙江大学 实时二级光线跟踪的并行渲染方法
CN102074039B (zh) * 2010-09-29 2012-12-19 深圳市蓝韵网络有限公司 一种体绘制裁剪面绘制方法
KR101845231B1 (ko) 2011-06-14 2018-04-04 삼성전자주식회사 영상 처리 장치 및 방법
US20130033507A1 (en) * 2011-08-04 2013-02-07 Nvidia Corporation System, method, and computer program product for constructing an acceleration structure
CN102426710A (zh) * 2011-08-22 2012-04-25 浙江大学 图形处理器上的表面积启发式构建kd树并行方法
US9595074B2 (en) 2011-09-16 2017-03-14 Imagination Technologies Limited Multistage collector for outputs in multiprocessor systems
KR102042539B1 (ko) * 2012-07-24 2019-11-08 삼성전자주식회사 레이 트레이싱 방법 및 장치
CN102855655A (zh) * 2012-08-03 2013-01-02 吉林禹硕动漫游戏科技股份有限公司 Gpu并行光线追踪渲染方法
KR102080851B1 (ko) 2012-09-17 2020-02-24 삼성전자주식회사 레이 추적의 스케쥴링을 위한 장치 및 방법
GB2546020B (en) 2012-11-02 2017-08-30 Imagination Tech Ltd Method of scheduling discrete productions of geometry
GB2549217B (en) * 2013-03-14 2017-11-22 Imagination Tech Ltd 3-D Graphics rendering with implicit geometry
US10970912B2 (en) 2013-03-14 2021-04-06 Imagination Technologies Limited 3-D graphics rendering with implicit geometry
GB2544931B (en) * 2013-03-15 2017-10-18 Imagination Tech Ltd Rendering with point sampling and pre-computed light transport information
CN103279974A (zh) * 2013-05-15 2013-09-04 中国科学院软件研究所 一种高精度高分辨率卫星成像模拟引擎及实现方法
CN104516831B (zh) * 2013-09-26 2019-02-22 想象技术有限公司 原子存储器更新单元和方法
US11257271B2 (en) 2013-09-26 2022-02-22 Imagination Technologies Limited Atomic memory update unit and methods
KR102116981B1 (ko) * 2013-10-02 2020-05-29 삼성전자 주식회사 광선 추적 가속 방법 및 장치
KR102193684B1 (ko) * 2013-11-04 2020-12-21 삼성전자주식회사 레이 트레이싱 처리 장치 및 방법
US9697640B2 (en) * 2014-04-21 2017-07-04 Qualcomm Incorporated Start node determination for tree traversal in ray tracing applications
KR102219289B1 (ko) * 2014-05-27 2021-02-23 삼성전자 주식회사 레이 트레이싱 시스템에서의 가속 구조 탐색 장치 및 그 탐색 방법
EP3012805A1 (en) * 2014-10-21 2016-04-27 The Procter and Gamble Company Synthesizing an image of fibers
KR102282896B1 (ko) 2014-12-23 2021-07-29 삼성전자주식회사 영상 처리 장치 및 방법
KR102493461B1 (ko) * 2015-08-31 2023-01-30 삼성전자 주식회사 렌더링 시스템 및 방법
US10262456B2 (en) * 2015-12-19 2019-04-16 Intel Corporation Method and apparatus for extracting and using path shading coherence in a ray tracing architecture
US9892544B2 (en) * 2015-12-22 2018-02-13 Intel Corporation Method and apparatus for load balancing in a ray tracing architecture
US10282890B2 (en) * 2016-09-29 2019-05-07 Intel Corporation Method and apparatus for the proper ordering and enumeration of multiple successive ray-surface intersections within a ray tracing architecture
US10445852B2 (en) * 2016-12-22 2019-10-15 Apple Inc. Local image blocks for graphics processing
KR101826123B1 (ko) 2017-07-14 2018-02-07 한국과학기술정보연구원 비정렬 격자 볼륨 렌더링 방법 및 장치
US10438397B2 (en) * 2017-09-15 2019-10-08 Imagination Technologies Limited Reduced acceleration structures for ray tracing systems
CN107895400A (zh) * 2017-11-09 2018-04-10 深圳赛隆文化科技有限公司 一种虚拟现实的三维小区域物体渲染模拟方法及装置
US10559115B2 (en) * 2018-03-02 2020-02-11 Microsoft Technology Licensing, Llc Techniques for generating visualizations of ray tracing images
US10679317B2 (en) * 2018-07-19 2020-06-09 Microsoft Technology Licensing, Llc Techniques for displaying a shader table associated with raytracing images
US11138009B2 (en) * 2018-08-10 2021-10-05 Nvidia Corporation Robust, efficient multiprocessor-coprocessor interface
KR102143155B1 (ko) * 2018-08-14 2020-08-10 국방과학연구소 광선 그룹화를 이용한 고주파 산란 해석 방법 및 장치
US10970914B1 (en) * 2019-11-15 2021-04-06 Imagination Technologies Limited Multiple precision level intersection testing in a ray tracing system
CN111105341B (zh) * 2019-12-16 2022-04-19 上海大学 一种低功耗高运算性能求解计算流体动力学的框架方法
CN111177014B (zh) * 2020-02-24 2023-02-24 重庆长安新能源汽车科技有限公司 软件自动测试方法、系统及存储介质
US11373358B2 (en) * 2020-06-15 2022-06-28 Nvidia Corporation Ray tracing hardware acceleration for supporting motion blur and moving/deforming geometry
US11508112B2 (en) * 2020-06-18 2022-11-22 Nvidia Corporation Early release of resources in ray tracing hardware
US11367242B2 (en) * 2020-07-30 2022-06-21 Apple Inc. Ray intersect circuitry with parallel ray testing
US11335061B2 (en) 2020-07-30 2022-05-17 Apple Inc. Ray intersection data structure with many-to-many mapping between bounding regions and primitives
CN114331800B (zh) * 2020-09-30 2024-06-21 想象技术有限公司 用于光线跟踪的相交测试
CN112190937A (zh) * 2020-10-10 2021-01-08 网易(杭州)网络有限公司 游戏中的光照处理方法、装置、设备及存储介质
GB2599182B (en) * 2021-03-23 2022-10-26 Imagination Tech Ltd Intersection testing in a ray tracing system
US11922026B2 (en) 2022-02-16 2024-03-05 T-Mobile Usa, Inc. Preventing data loss in a filesystem by creating duplicates of data in parallel, such as charging data in a wireless telecommunications network
US20240112397A1 (en) * 2022-09-30 2024-04-04 Advanced Micro Devices, Inc. Spatial test of bounding volumes for rasterization
CN115640138B (zh) * 2022-11-25 2023-03-21 摩尔线程智能科技(北京)有限责任公司 用于光线追踪调度的方法和装置

Family Cites Families (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH01149183A (ja) * 1987-12-05 1989-06-12 Fujitsu Ltd 映像生成方法
EP0439260B1 (en) * 1990-01-23 1998-08-19 Hewlett-Packard Company Distributed processing apparatus and method for use in global rendering
KR100300969B1 (ko) * 1996-04-25 2001-10-22 윤종용 레이트레이싱에있어서교차테스트영역추출방법및이에적합한렌더링장치
JPH11353496A (ja) * 1998-06-10 1999-12-24 Ken Nishimura 光線追跡のための交点探索装置
US6556200B1 (en) * 1999-09-01 2003-04-29 Mitsubishi Electric Research Laboratories, Inc. Temporal and spatial coherent ray tracing for rendering scenes with sampled and geometry data
US6724856B2 (en) * 2002-04-15 2004-04-20 General Electric Company Reprojection and backprojection methods and algorithms for implementation thereof
DE10239672B4 (de) * 2002-08-26 2005-08-11 Universität des Saarlandes Verfahren und Vorrichtung zur Erzeugung einer zweidimensionalen Abbildung einer dreidimensionalen Struktur
US7043579B2 (en) * 2002-12-05 2006-05-09 International Business Machines Corporation Ring-topology based multiprocessor data access bus
DE102004007835A1 (de) * 2004-02-17 2005-09-15 Universität des Saarlandes Vorrichtung zur Darstellung von dynamischen komplexen Szenen
FR2896895B1 (fr) * 2006-02-01 2008-09-26 Redway Soc Par Actions Simplifiee Procede de synthese d'une image virtuelle par lancer de faisceaux
CA2649745A1 (en) * 2006-04-19 2007-11-01 Mental Images Inc. Instant ray tracing
CN101127126B (zh) * 2006-08-16 2012-09-26 腾讯科技(深圳)有限公司 一种非物理模型模拟次表面散射效果的方法及装置
US8237711B2 (en) 2007-11-19 2012-08-07 Caustic Graphics, Inc. Tracing of shader-generated ray groups using coupled intersection testing

Also Published As

Publication number Publication date
KR101550477B1 (ko) 2015-09-04
WO2009117691A3 (en) 2009-11-12
CN104112291B (zh) 2017-03-29
JP5485257B2 (ja) 2014-05-07
JP5740704B2 (ja) 2015-06-24
WO2009117691A4 (en) 2009-12-30
JP2014089773A (ja) 2014-05-15
CN102037497A (zh) 2011-04-27
CN104112291A (zh) 2014-10-22
KR20100128337A (ko) 2010-12-07
WO2009117691A2 (en) 2009-09-24
JP2011515766A (ja) 2011-05-19

Similar Documents

Publication Publication Date Title
CN102037497B (zh) 用于光线追踪渲染的并行相交测试及着色的架构
US10789758B2 (en) Ray tracing in computer graphics using intersection testing at selective resolution
CN102282591B (zh) 光线跟踪系统架构和方法
JP5756940B2 (ja) レイトレーシングによるレンダリングシステムおよび方法
US9710954B2 (en) Processor with ray test instructions performed by special purpose units
US8102391B2 (en) Hybrid rendering of image data utilizing streaming geometry frontend interconnected to physical rendering backend through dynamic accelerated data structure generator
US8773449B2 (en) Rendering of stereoscopic images with multithreaded rendering software pipeline
CN100570638C (zh) 分发工作负载的方法和图像处理系统
CN103793876A (zh) 分布式拼接式进行高速缓存
CN103106120A (zh) 具有冲量传播的多线程物理引擎
CN103886547A (zh) 用于存储共享顶点的技术
CN113822788B (zh) 光线追踪硬件中对资源的早期释放
KR102525084B1 (ko) 프레임 분할을 이용한 멀티칩 기반의 레이 트레이싱 장치 및 방법

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C53 Correction of patent of invention or patent application
CB02 Change of applicant information

Address after: American California

Applicant after: Caustic Graphics Inc.

Address before: American California

Applicant before: Caustic Graphics Inc.

COR Change of bibliographic data

Free format text: CORRECT: APPLICANT; FROM: CAICOS CELTICS DRAWING LTD. TO: CAUSTIC GRAPHICS INC.

C14 Grant of patent or utility model
GR01 Patent grant
ASS Succession or assignment of patent right

Owner name: ENVISION TECHNOLOGIES GMBH

Free format text: FORMER OWNER: CAUSTIC GRAPHICS INC.

Effective date: 20150505

C41 Transfer of patent application or patent right or utility model
TR01 Transfer of patent right

Effective date of registration: 20150505

Address after: Hertfordshire

Patentee after: Imagination Technologies Limited

Address before: American California

Patentee before: Caustic Graphics Inc.