专利名称:用于构建加速结构的系统、方法及计算机程序产品的制作方法
技术领域:
本发明涉及渲染图像,并且更具体地涉及执行光线跟踪(ray tracing)。
背景技术:
习惯上,已经使用光线跟踪来在显示场景内生成图像。例如,该显示场景的多条射线和多个基元(primitive)之间的交叉可以被确定,以渲染与这些基元相关联的图像。但是,当前用于执行光线跟踪的技术与各种限制相关联。例如,当前的用于执行射线追踪的方法可能会低效地构建与该光线跟踪联合使用的加速结构。这可能导致时间密集地构建与大量基元相关联的加速结构。因此,需要解决与现有技术相关联的这些和/或其他问题。
发明内容
本发明提供了一种用于构建加速结构的系统、方法及计算机程序产品。在使用时,识别与场景相关联的多个基元。另外,利用这些基元来构建加速结构。
图1示出了根据一实施例的用于构建加速结构的方法;图2示出了根据另一实施例的在构建加速结构期间用于执行剖分的任务队列系统;图3示出了根据又一实施例的使用莫顿(Morton)编码的基元组的排序;图4示出了根据又一实施例的对应于图3中所执行的排序的多个中间分裂(middle-split)的队列;图5示出了根据又一实施例的SAH分箱(binning)过程的数据流可视化;图6示出了可实现各种前述实施例的各种结构和/或功能的示范性系统。
具体实施例方式图1示出了根据一实施例的构建加速结构的方法100。如操作102所示,识别与场景相关联的多个基元。在一实施例中,场景可以包括正被渲染的场景。例如,场景可以是正使用光线跟踪被渲染的场景。在另一实施例中,多个基元可被包括于场景内。例如,场景可以由多个基元组成。在又一实施例中,多个基元可以包括多个三角形。但是,多个基元当然可包括用于执行光线追踪的任何基元。另外,如操作104所示,利用这些基元来构建加速结构。在一实施例中,加速结构可包括包围体层次(bounding volume hierarchy, BVH)。在另一实施例中,加速结构可以包括线性化的包围体层次(LBVH)。在又一实施例中,加速结构可以包括分级的(hierarchical)线性化包围体层次(HLBVH)。在另一实施例中,加速结构可包括多个节点。例如,加速结构可包括节点层次,其中子节点代表位于各自父节点包围盒内的包围盒,并且其中叶节点代表处于各自父包围盒内的一个或多个基元。以这种方式,加速结构可包括包围体层次,所述包围体层次可将基元组织在分级的盒中,以在光线跟踪的过程中加以使用。进一步的,在一实施例中,构建加速结构可包括对基元加以排序。例如,基元可以沿着跨越(span)场景包围盒的空间填充曲线加以排序(例如莫顿曲线、希尔伯特曲线等)。在另一实施例中,空间填充曲线可通过计算在场景中每个基元的质心的莫顿编码加以确定(例如,在基元中间的平均位置可从三维(3D)坐标被转换为与递归设计的莫顿曲线相关联的一维坐标)。在另一实施例中,可利用最低有效数字基数排序算法(least signifcant digitradix sorting algorithm)来执行排序。在另一实施例中,构建加速结构可包括在场景内形成基元的集群(例如,基元的粗集群(coarse cluster)等)。例如,可利用游程(run-length)编码压缩算法来形成集群。进一步的,在一实施例中,构建加速结构可包括对在每个已形成的集群内的基元进行剖分。例如,构建加速结构可包括,使用空间中间分裂(例如LBVH类型的空间中间分裂等)对每个集群内的所有基元进行剖分。在另一示例中,构建加速结构可包括利用这些集群来创建树(例如,顶层树等)。例如,构建加速结构可包括通过对这些集群进行剖分(例如,利用分箱表面面积启发式算法(surface area heuristic, SAH)、优化的SAH树构建算法等)来创建顶层树。在另一实施例中,SAH可利用并行binning方案。而且,在一实施例中,可以利用一个或多个任务队列来执行对基元和集群的剖分。例如,任务队列系统可用于在构建加速结构的过程中将工作加以并行化(例如,通过创建管线等)。在另一实施例中,可以利用一个或多个算法来构建加速结构。例如,对基元加以排序、形成基元的集群、剖分基元和创建树均可以利用一个或多个算法来加以执行。另外,在一实施例中,构建加速结构可以利用图形处理单元(GPU)来加以执行。例如,GPU执行加速结构的整个构建。以这种方式,可以避免在GPU和与中央处理单元(CPU)相关联的系统存储器之间的数据传输,这就可减少构建加速结构所必需的时间。现在将对有关各种可选的结构和特征的更多示例性信息加以说明,按照使用者的意愿,上述架构可以采用或不采用这些结构和特征加以实现。应极其注意,以下信息出于示例性的目的加以说明,不应被解释为以任何方式进行限制。任何以下特征可以排除或不排除其他所描述的特征而选择性地加以组合。图2示出了根据另一实施例的在构建加速结构的过程中用于执行剖分的任务队列系统200。作为选择,本任务队列系统200可在图1的功能环境中加以执行。但是,当然也可在任何所需环境中实现任务队列系统200。应注意,上述定义也可应用在当前的描述过程中。如图所示,任务队列系统200包括多个warp 202A和202B,每个warp均获取任务集合来进行处理(例如,从输入队列等)。在一实施例中,多个warp 202A和202B的每一个均可包括工作单元(例如,在GPU上的物理SMT工作单元等)。在另一实施例中,每个单独的任务可对应于在构建加速结构的过程中处理一个单节点。另外,在一实施例中,在运行时,多个warp 202A和202B的每一个均可继续从该输入队列获取任务集合进行处理,其中每个集合可对于每线程包含一个任务。另外,多个warp202A和202B的每一个均可对于每warp使用单全局存储器原子加法运算(atomic add)来更新队列头(queue head)。进一步的,在多个warp 202A和202B的每一个中的每个线程均计算其将要生成的输出任务204的数量。更进一步的,在多个warp 202A和202B的每一个中的每个线程均计算出其将要生成的输出任务204的数量之后,在多个warp 202A和202B的每一个中的所有线程参与全warp的前缀和(warp-wide prefix sum)206以计算它们的输出任务相对于多个warp 202A和202B的每一个的共有基础的偏移。在一实施例中,在多个warp 202A和202B的每一个中的第一线程可执行单全局存储器原子加法运算以计算在多个warp 202A和202B的输出队列中的基础地址。在一实施例中,还可以每层使用一单独的队列,这可使所有的处理在单内核调用之内被执行,而同时能产生广度优先树布置。在一实施例中,构建加速结构可包括使用一个或多个算法来创建标准LBVH和高质量SAH的混合。请参见,例如,“HLBVH:用于动态几何体的实时光线跟踪的分级的LBVH构建(HLBVH-Hierarchical LBVH construction for real-time ray tracing of dynamicgeometry)”(Pantaleoni 等所著,高性能图形(High-Performance Graphics) 2010,美国计算机协会计算机图形专业组(ACM Siggraph) /欧洲制图学会研讨会(EurographicsSymposium)论文集,欧洲制图学会,87-95页),在此通过援引将其全部纳入本申请,并且其描述了构建LBVH和HLBVH的方法。另外,在另一实施例中,构建加速结构可包括沿跨场景的包围盒的30位莫顿曲线对基元加以排序。请参见,例如,“GPU上的快速bvh构建(Fast bvh construction onGPUs)” (Lauterbach等所著,计算机_图形论坛,第28期,第2册,375-384页),在此通过援引将其全部纳入本申请,并且其描述了用于对基元加以排序和构建BVH的方法。在又一实施例中,这些基元可利用暴力算法进行排序(例如最低有效数字基数排序算法等)。在又一实施例中,利用观察到的以下情况:莫顿编码定义分级的网格,其中每3n位编码识别在每边具有2n个条目的规则网格中的唯一体素(voxel),并且其中在一实施例中,编码的第一组3m位识别在每边具有2m个细分(subdivision)的粗网格中的父体素,对象的粗集群可被形成落入到每个3m位分箱(bin)中。在另一实施例中,识别了唯一体素的网格每边可包括不同数量的条目。在又一实施例中,可利用例示的游程编码压缩算法来执行对象的粗集群的形成,并可使用单压缩操作加以实现。进一步的,在一实施例中,在这些集群被识别后,所有基元就可被剖分在每一集群中(例如,使用LBVH式的空间中间分裂等)。在另一实施例中,接着可创建顶层树,其中这些集群可用分箱SAH生成器加以剖分。请参见,例如,“关于基于SAH包围体层级的快速构建(On fast Construction of SAH based Bounding Volume Hierarchies),,(Wald 著,卷 I,关于交互式光线跟踪的2007欧洲制图学会/IEEE讨论会会议记录,欧洲制图学会),在此通过援引将其全部纳入本申请,并且其描述了用于剖分集群的方法。更进一步的,在一实施例中,空间中间分裂剖分和SAH生成器都可依靠高效的任务队列系统(例如,任务队列系统200等),所述高效的任务队列系统可将工作并行化在输出层次的单独节点上。在一实施例中,还可执行中间分裂层次发出(emission)。例如,可注意到,在层次中的每个节点均可对应于由基元的莫顿编码排序的基元的连续范围,并且,分裂节点可能需要找到在该范围中的第一元素,其编码区别于在先元素。另外,在另一实施例中,通过恢复到可用在串行设备的标准排序,可避免复杂的机构。例如,每个节点可映射到单线程,并且,每个线程可被允许找到自己的分裂面。在又一实施例中,代替在在节点中基元的整个范围内的依次循环,可以看到,该问题可表示为简单的二分搜索的形式。例如,如果节点位于I层,那么可以确定,节点基元的莫顿编码可具有完全相同的高1-1位集合。在另一实施例中,可确定第一个P > I位,通过该第一个P > I位,节点范围中的第一个和最后一个莫顿编码得以区分。在又一实施例中,可执行二分搜索,以定位在P位包含I的第一个莫顿编码。以这种方式,对于包含N个基元的节点,通过仅运用Odog2(N))个存储单元,算法就可找到其分裂面,而不是N个莫顿编码的整个集合。另外,在一实施例中,中间分裂有时可能会失败,这将导致偶然的大叶。在另一实施例中,当检测到这样的失败时,可用对象中值(object-median)来分裂这些叶。在又一实施例中,在已经计算了 BVH的拓扑之后,可运行自下而上的重新拟合过程来计算树中每个节点的包围盒。依据BVH按广度优先顺序存储的实际情况,这一过程可被简化。在另一实施例中,树的每一层均可使用一个内核启动,以及在该层上每一节点均可使用一个线程。图3示出了根据另一实施例的使用莫顿编码的基元组的排序300。作为选择,当前排序300可在图1和图2的功能环境中加以执行。但是,当然也可以在任何所需的环境中实现排序300。还应注意,上述定义也可应用在当前的描述过程中。如图所示,位于二维投影内的多个被包围的基元302A-J,其质心都各自被分配莫顿编码(例如,4位莫顿编码等)。另外,多个被包围的基元302A-J被排序到行306A-J的序列中,其中所分配的莫顿编码作为关键字使用。例如,对于序列306A-J的每个单独的基元,莫顿编码位在分开的行308中示出。另外,对行306A-J的序列进行二分搜索剖分310。进一步的,图4示出了根据另一实施例的与图3中执行的排序300相对应的多个中间分裂的队列 402A-E。另外,在一实施例中,优化的SAH树构建算法可被运行在由莫顿曲线的第一组3m位所定义的粗集群上。在一实施例中,m可在5和7之间。但是,当然m可以包括任何整数。在另一实施例中,构建算法可运行在被包围的存储器占用中。例如,如果处理N。个集群,则可仅对2凡-1个节点进行空间预分配。表I示出了用于与优化的树构建算法相关联的SAH分箱过程的伪代码。当然,应注意到,表I中所示的伪代码仅出于示例性的目的加以说明,因此不应被解释为以任何方式加以限制。
权利要求
1.一种方法,包括: 识别与场景相关联的多个基元;和 利用所述基元来构建加速结构。
2.根据权利要求1所述的方法,其中所述场景由所述多个基元组成。
3.根据权利要求1所述的方法,其中图形处理单元(GPU)执行所述加速结构的整个构建。
4.根据权利要求1所述的方法,其中所述加速结构包括分级的线性化包围体层次(HLBVH)0
5.根据权利要求1所述的方法,其中所述加速结构包括多个节点。
6.根据权利要求5所述的方法,其中所述加速结构包括节点层次,其中子节点表示位于各自父节点包围盒内的包围盒,以及其中叶节点表示处于各自父包围盒内的一个或多个基兀。
7.根据权利要求1所述的方法,其中构建所述加速结构包括对所述基元进行排序。
8.根据权利要求7所述的方法,其中沿跨越所述场景的包围盒的空间填充曲线对所述基兀进行排序。
9.根据权利要求8所述的方法,其中通过计算在所述场景中每个基元的质心的莫顿编码来确定所述空间填充曲线。
10.根据权利要求1所述的方法,其中利用最低有效数字基数排序算法来执行所述排序。
11.根据权利要求1所述的方法,其中构建所述加速结构包括在所述场景内形成基元的集群。
12.根据权利要求11所述的方法,其中利用游程编码压缩算法来形成所述集群。
13.根据权利要求11所述的方法,其中构建所述加速结构包括对在每个所形成的集群内的基元进行剖分。
14.根据权利要求11所述的方法,其中构建所述加速结构包括使用空间中间分裂来对在每个集群内的所有基元进行剖分。
15.根据权利要求11所述的方法,其中构建所述加速结构包括利用所述集群来创建树。
16.根据权利要求14所述的方法,其中构建所述加速结构包括通过剖分所述集群来创建顶层树。
17.根据权利要求16所述的方法,其中利用一个或多个任务队列来执行对所述基元和所述集群的剖分。
18.一种具体化在计算机可读介质上的计算机程序产品,包括: 用于识别与场景相关联的多个基元的代码; 用于利用所述基元来构建加速结构的代码。
19.一种系统,包括: 图形处理单元(GPU),用于识别与场景相关联的多个基元和利用所述基元来构建加速结构。
20.根据权利要求19所述的系统,还包括经由总线耦合到所述GPU的存储器。
全文摘要
本发明提供了一种用于构建加速结构的系统、方法及计算机程序产品。在使用时,识别与场景相关联的多个基元。另外,利用这些基元来构建加速结构。
文档编号G06T15/06GK103106681SQ20121027716
公开日2013年5月15日 申请日期2012年8月6日 优先权日2011年8月4日
发明者基里尔·弗拉基米罗维奇·加兰扎, 雅各布·潘塔莱奥尼, 戴维·基尔克·麦卡利斯特 申请人:辉达公司