一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

图形处理的制作方法

2023-02-02 13:48:03 来源:中国专利 TAG:

图形处理


背景技术:

1.本文所述的技术涉及图形处理系统,并且具体地讲,涉及帧(图像)的渲染以用于显示。
2.图1示出了示例性片上系统(soc)图形处理系统8,其包括中央处理单元(cpu)1、图形处理器(gpu)2、显示处理器3和存储器控制器5形式的主机处理器。
3.如图1所示,这些单元经由互连器4进行通信并且具有对片外存储器6的访问权限。在该系统中,图形处理器2将渲染待显示的帧(图像),然后显示处理器3将这些帧提供给显示面板7以用于显示。
4.在该系统的使用中,在主机处理器(cpu)1上执行的应用13诸如游戏将例如需要在显示面板7上显示帧。为此,该应用将为在cpu 1上执行的图形处理器2向驱动器11提交适当的命令和数据。驱动器11然后将生成适当的命令和数据,以使图形处理器2渲染适当的帧以用于显示并将那些帧存储在适当的帧缓冲器中,例如存储在主存储器6中。然后,显示处理器3将这些帧读取到用于显示的缓冲器中,然后从该缓冲器中读取这些帧并将其显示在显示器的显示面板7上。
5.可由图形处理器执行的一个渲染过程是所谓的“光线追踪”。光线追踪是一种渲染过程,其涉及从视点(有时称为“相机”)通过图像平面中的采样位置将光线的路径追踪到场景中,以及模拟这些光线与该场景中的对象之间的交互效果。输出数据值(例如,图像中的采样点)基于场景中与穿过采样位置的光线相交的对象以及那些对象的表面的特性来确定。光线追踪计算是复杂的,并且涉及针对每个采样位置确定在场景内与穿过采样位置的光线相交的一组对象。
6.光线追踪被认为比更传统的光栅化渲染技术提供了更好的,例如更真实、物理上更准确的图像,尤其是在捕获反射、折射、阴影和照明效果的能力方面。然而,光线追踪可比传统的光栅化处理要密集得多。
7.申请人相信,仍然存在用于使用图形处理器执行光线追踪的改进技术的范围。
附图说明
8.现在将仅以举例的方式并参考附图来描述本文所述技术的实施方案,其中:
9.图1示出了示例性图形处理系统;
10.图2是示出“全”光线追踪过程的示意图;
11.图3示出了示例性光线追踪加速数据结构;
12.图4是示出全光线追踪过程的实施方案的流程图;
13.图5是示出“混合”光线追踪过程的示意图;
14.图6示意性地示出了能够以本文所述技术的方式操作的图形处理器的实施方案;
15.图7示意性地更详细地示出了能够以本文所述技术的方式操作的图形处理器的元件;
16.图8示意性地示出了可用于管理光线追踪遍历操作的堆栈布局;
17.图9是示出在本文所述技术的实施方案中的图形处理器的操作的流程图;
18.图10是示出根据本文所述技术的实施方案的光线与盒(ray-volume)相交测试操作的流程图;
19.图11是示出根据本文所述技术的实施方案的光线与基元相交测试操作的流程图;并且
20.图12示出了着色器程序编译过程的实施方案。
21.在适当的情况下,类似的附图标号用于附图中的类似元件。
具体实施方式
22.根据本文所述技术的第一方面,提供了一种在使用光线追踪过程渲染表示包括一个或多个对象的场景视图的帧时操作包括图形处理器的图形处理系统的方法,
23.其中光线追踪过程使用指示待渲染的场景的几何形状的分布的光线追踪加速数据结构,以确定场景的几何形状,该几何形状能够与正被用于光线追踪操作的光线相交,该光线追踪加速数据结构包括多个节点,每个节点与场景内的相应一个或多个盒相关联,
24.该光线追踪过程包括对多条光线执行光线追踪加速数据结构的遍历,以通过测试光线与由加速数据结构的节点表示的盒的相交来确定待渲染的场景的能够与光线相交的几何形状;
25.该图形处理器包括可编程执行单元,该可编程执行单元可操作为执行程序以执行图形处理操作,并且其中程序能够由多个执行线程的组一起执行;
26.该方法包括:
27.在执行光线追踪加速数据结构遍历的程序中包括,其中该程序待由一组多个执行线程执行,其中该组执行线程中的各个执行线程执行对应组光线中的相应光线的遍历操作,使得该组光线一起执行光线追踪操作,一个或多个“光线与盒测试”指令集用于测试光线与该一个或多个盒的相交,该一个或多个盒与在遍历操作期间待测试的光线追踪加速数据结构的给定节点相关联,该“光线与盒测试”指令集当被该组多个执行线程中的执行线程执行时将使得:
28.该图形处理器测试来自正在一起执行遍历操作的该组多条光线中的一条或多条光线与和正被测试的节点相关联的该一个或多个盒的相交;和
29.针对遍历操作的节点返回相交测试的结果;
30.该方法还包括:当一组执行线程正在为正在一起执行光线追踪加速数据结构的遍历的对应组光线执行程序时,响应于执行线程执行关于光线追踪加速数据结构的节点的该一个或多个“光线与盒测试”指令集:
31.测试来自正在一起执行遍历操作的该组多条光线中的一条或多条光线与和正被测试的节点相关联的该一个或多个盒的相交;以及
32.返回针对遍历操作的节点的相交测试的结果。
33.根据本文所述技术的第二方面,提供了一种图形处理系统,该图形处理系统包括图形处理器,该图形处理器可操作为使用光线追踪过程渲染表示包括一个或多个对象的场景视图的帧,
34.其中光线追踪过程使用指示待渲染的场景的几何形状的分布的光线追踪加速数
据结构,以确定场景的几何形状,该几何形状能够与正被用于光线追踪操作的光线相交,该光线追踪加速数据结构包括多个节点,每个节点与场景内的相应一个或多个盒相关联,
35.该光线追踪过程包括对多条光线执行光线追踪加速数据结构的遍历,以通过测试光线与由加速数据结构的节点表示的盒的相交来确定待渲染的场景的能够与光线相交的几何形状;
36.该图形处理器包括:
37.可编程执行单元,该可编程执行单元可操作为执行程序以执行图形处理操作,并且其中程序能够由多个执行线程的组一起执行;并且
38.该图形处理系统还包括:
39.处理电路,该处理电路被配置为:
40.在执行光线追踪加速数据结构遍历的程序中包括,其中该程序待由相应组多个执行线程一起执行,其中一组执行线程中的各个执行线程执行对应组光线中的相应光线的遍历操作,使得该组光线一起执行遍历操作,一个或多个“光线与盒测试”指令集用于测试光线与该一个或多个盒的相交,该一个或多个盒与在遍历操作期间待测试的光线追踪加速数据结构的给定节点相关联,该“光线与盒测试”指令集当被一组多个执行线程中的执行线程执行时将使得:图形处理器用于测试来自正在一起执行遍历操作的该组多条光线中的一条或多条光线与和正被测试的节点相关联的该一个或多个盒的相交;和针对遍历操作的节点返回相交测试的结果;
41.其中执行单元被配置为使得,当一组执行线程正在为正在一起执行光线追踪加速数据结构的遍历的对应组光线执行程序时,响应于执行线程执行关于光线追踪加速数据结构的节点的该一个或多个“光线与盒测试”指令集:
42.该执行单元触发测试关于来自正在一起执行光线追踪加速数据结构的遍历的该组多条光线中的一条或多条光线与和正被测试的节点相关联的该一个或多个盒的相交,其中针对遍历操作的节点然后返回相交测试的结果。
43.本文所述技术广泛地涉及在图形处理器上执行光线追踪,以便渲染表示特定场景视图的帧。当执行光线追踪操作时,对于正被渲染的帧中正被用于渲染采样位置的每条光线,为了渲染采样位置,首先需要确定与该光线相交(如果有的话)的为场景定义的几何形状。
44.根据需要,存在多种方式可做到这一点。然而,通常,在给定场景内可能存在数百万个图形基元,以及待测试的数百万条光线,使得针对每个图形基元测试每条光线通常是不切实际的。因此,为了加速光线追踪操作,本文所述技术使用了光线追踪加速数据结构(诸如层次包围盒(bvh)),该光线追踪加速数据结构表示待渲染的场景中的几何形状分布,以确定光线与正被渲染场景中的几何形状(例如,对象)的相交(并且然后相应地渲染表示该场景的输出渲染帧中的采样位置)。
45.因此,根据本文所述技术的光线追踪操作通常包括执行正被用于光线追踪过程的多条光线的光线追踪加速数据结构的遍历,该遍历涉及测试光线与由光线追踪加速数据结构的不同节点表示的盒的相交,以便参考节点盒确定对于正被渲染的场景的帧中的采样位置能够与哪些光线相交的哪个几何形状,并且因此需要针对采样位置的光线进一步处理哪些几何形状。
46.因此,光线追踪加速数据结构遍历操作涉及遍历光线追踪加速数据结构的节点、测试光线与和节点相关联的盒的相交,以及维护记录与哪些光线相交的哪些节点盒,例如,以确定接下来应该针对光线测试哪些节点,依此类推,直到光线追踪加速数据结构的末端节点,例如,在最低级别。
47.例如,并且在特别优选的实施方案中,光线追踪加速数据结构包括树结构,该树结构被配置为使得树结构的每个叶节点表示在叶节点对应的相应盒内定义的基元集,并且非叶节点表示分层布置的更大盒,直到树结构顶层的根节点,该根节点表示树结构对应的所考虑场景的总盒。因此,每个非叶节点优选地是多个子节点的相应集的父节点,其中父节点盒包含其相应子节点的盒。优选地,每个(非叶)节点因此与相应多个子节点盒相关联,每个表示由所考虑节点表示的整个盒内的(优选地不重叠的)子盒。
48.在那种情况下,通过沿树结构的分支前进并针对与树结构的第一层的节点相关联的子盒测试光线,从而确定应该测试树结构的下一层中的哪些子节点,依此类推,直到树结构的分支末端的相应叶节点的层,因此可(并且优选地确实)遍历光线追踪加速数据结构。
49.也就是说,在优选的实施方案中,在光线追踪加速数据结构包括这种类型的树结构的情况下,针对与节点相关联的盒来测试该一条或多条光线包括针对与该节点相关联的子节点盒中的每个子节点盒来测试光线,并且输出针对所考虑节点的子节点中的每个子节点的测试的结果。
50.(为了便于解释,将相应地描述各种实施方案,其中针对节点的光线与盒相交测试涉及针对所考虑节点的子节点盒中的每个子节点盒来测试一条或多条光线。然而,应当理解,其他布置也是可能的,例如,取决于如何配置光线追踪加速数据结构,并且针对给定节点测试的该一个或多个盒可以是与该节点相关联的任何合适的盒,诸如由该节点本身表示的盒,而不是由其子节点表示的盒。)
51.一旦通过对光线执行这种遍历操作确定了哪些末端节点表示可能与光线相交的几何形状,就可相应地确定该光线与占据与相交末端节点相关联的盒的几何形状的实际几何形状相交,例如通过测试光线与为占据与叶节点相关联的盒的场景定义的各个几何形状单元(基元)的相交。一旦已经确定正被用于渲染采样位置的光线的几何相交,则它就可(并且确实)确定采样位置应具有什么外观,并相应地呈现采样位置。
52.光线基元相交测试通常在计算上相对更昂贵。在本文所述技术中的光线追踪加速数据结构中使用光线追踪加速数据结构因此允许加速光线追踪操作。
53.例如,不是针对场景内的每个单独的基元测试光线,而是可针对树数据结构的每个级别表示的盒在更高级别测试正被用于光线追踪过程的光线的相交,并且对于不与树结构的特定分支中的给定节点相交的任何光线,可确定该光线不与落入包括该节点的树结构的分支内的几何形状相交,而无需针对树的较低级别的几何形状进一步测试光线。
54.因此,使用本文所述技术中的此类光线追踪加速数据结构可有效地加快整个光线追踪操作。
55.然而,申请人已经认识到,在这方面仍然存在改善的范围。
56.具体地讲,本文所述技术认识到,当对光线执行光线追踪加速数据结构的遍历时,在典型情况下,光线追踪加速数据结构被或者至少可被配置为使得大部分处理时间被花费在执行与光线追踪加速数据结构的节点的盒的相交测试上,并且该光线与盒测试因此可能
需要大量的处理工作。
57.此外,加载正被用于执行此类光线与盒相交的光线追踪过程的光线中的每条光线的所需数据可涉及相对高的存储器带宽。
58.因此,本文所述技术旨在改善在光线追踪操作期间执行光线追踪加速数据结构的遍历时需要执行的光线与盒相交测试操作的整体效率。
59.这在本文所述技术中通过使正被用于光线追踪过程的一组多条光线作为单次遍历操作的一部分一起执行光线追踪加速数据结构的遍历来实现。
60.这具有这样的效果和益处,即同时正在执行遍历的该组多条光线中的多条光线在一个处理实例中可针对光线追踪加速数据结构的给定节点进行测试,从而减少存储器访问操作的数量。
61.例如,这意味着在该组多条光线中存在多条光线应针对给定节点进行测试的情况下,可针对单个测试实例中的节点对所有那些光线进行测试。相应地,这意味着图形处理器能够一次从存储器中加载这些光线的所有数据,例如在单个存储器加载操作中。
62.同样,可针对正被测试的所有光线(以及所有盒)返回相交测试的结果,并然后相应地存储。
63.以这种方式,有可能减少测试所有光线所需的存储器访问操作的总数,例如至少与其他可能的布置相比,其中遍历和光线与盒测试是针对单条光线执行的,并因此这种布置可能需要大量的存储器访问来为相交测试的每个实例加载(以及随后写出)这些光线中的每条光线所需的数据。
64.因此,这也允许共享该组光线的处理资源。例如,在优选的实施方案中,通过一起针对一组光线执行遍历操作,因此可使用该组光线的单个公共数据结构(“遍历记录”)来管理遍历操作,该数据结构追踪哪些节点与可能与该组光线中的光线相交的几何形状相关联(以及因此需要测试(下一步)哪些节点/几何形状以进行遍历操作)。
65.同样,这可以进一步减少存储器带宽,因为在优选的实施方案中存在管理整组光线的遍历操作的单个数据结构(例如哪些节点(几何形状)可能与该组光线中的光线相交的公共记录,该记录通常可采取任何合适的形式,但是在优选的实施方案中是“堆栈”的形式),因此减少了存储器访问的数量,例如与其中为各条光线提供相应数据结构(例如堆栈)的其他可能的布置相比,例如如果光线独立地正在执行遍历操作,则可能需要这样的布置。
66.在优选的实施方案中,这也有助于经由本地寄存器管理遍历操作,再次减少了访问外部存储器的需要。例如,并且在优选的实施方案中,遍历操作可经由分配给执行线程组的公共寄存器集进行管理,其中维护了该组光线的共享遍历记录(遍历数据结构,例如堆栈),这将在下面进一步解释。
67.因此,根据本文所述技术的方法可尤其是在减小存储器带宽方面提供各种益处。
68.因此,在本文所述技术中,针对一组多条光线一起执行光线追踪遍历操作。具体地讲,光线追踪遍历程序由一组多个执行线程执行,其中该组多条光线中的每条光线由同时正在执行该程序的一组多个执行线程中的相应执行线程处理。
69.此外,这些执行线程中的每个执行线程(针对该组中的光线中的每条光线)优选地被布置为继续执行用于遍历操作的程序(即,使得执行线程组中的所有线程都处于并保持“活动”状态),直到该组光线作为整体完成了光线追踪加速数据结构的遍历。
70.换句话讲,在本文所述技术中,用于该组多条光线的整个执行线程组优选地保持“活动”,使得该组多条光线中的所有光线作为一个组一起有效地执行遍历操作,即使确定该组多条光线中的给定光线不与光线追踪加速数据结构中的任何几何形状相交(使得处理该光线的执行线程原则上可从该点退出/终止)。
71.为了促进这一点,在该程序中包括一个或多个指令,这些指令使得执行线程处于并保持处于活动状态,至少直到正在一起执行遍历操作的该组光线中的所有光线都完成了遍历,例如,至少直到已经为所有光线确定了光线可能与哪个几何形状相交。
72.因此,在实施方案中,该方法包括(并且图形处理系统的处理电路被配置为执行以下步骤):在执行光线追踪加速数据结构遍历的程序中包括,其中该程序待由一组多个执行线程执行,其中该组执行线程中的各个执行线程执行对应组光线中的相应光线的遍历操作,一个或多个指令集使该组执行线程中的执行线程处于活动状态,至少直到针对该组执行线程正在处理的该组光线中的所有光线完成了确定该场景的哪个几何形状(如果有的话)能够与光线相交的遍历操作。以这种方式,使得该组光线执行(整个)遍历操作。
73.这可根据需要以任何合适的方式实现。例如,程序指令可被布置成使得确保不会使线程分散或被终止,并且因保持在遍历操作的活动状态。或者,并且在一些优选的实施方案中,显式指令或指令修饰符可包括在程序中,当执行时强制执行线程组中的所有执行线程处于活动状态(例如,使得如果执行线程组中的执行线程已经终止,则可将该线程带回活动状态,以进行遍历操作)。就这一点而言,各种布置将是可能的。
74.当一组执行线程处于活动状态时,然后可使用该组线程作为整体来执行处理操作,例如,在线程组之间共享处理资源。例如,所有执行线程可被布置为执行相同的处理操作,但是针对不同的数据点,例如,在单指令、多数据(simd)执行状态中。
75.确保针对该组光线中的相应光线正在执行遍历操作的所有线程均处于活动状态可有助于简化遍历操作的实现,并且具有额外的好处,即遍历操作然后可以是,并且优选地是,例如使用共享数据结构作为整体来管理该组多条光线。
76.因此,在本文所述技术中,用于该组多条光线中的光线的所有执行线程优选地保持活动,至少直到执行了用于该组多条光线中的光线的所有所需的光线与盒相交测试,以确定光线可能与哪个几何形状相交(或者,相应地,如果在遍历期间确定没有光线与任何几何形状相交,使得存在“未命中”,则一旦确定了该组中没有光线与任何几何形状相交,遍历操作即完成)。
77.在一些优选的实施方案中,该组多条光线中的所有光线的执行线程在初始遍历操作之后保持活动,以确定哪个几何形状可能与光线相交,例如,并且优选地还保持活动,以用于针对确定光线相交的盒内包含的各个几何形状单元(基元)的后续光线测试。
78.也就是说,在优选的实施方案中,在遍历操作期间执行的确定哪个几何形状可能相交的光线与盒相交测试和随后执行以确定实际几何形状相交的光线与基元相交测试两者均是针对一组多条光线作为整体来执行的。
79.优选地,这些操作中的两者由相同的着色器程序触发。例如,该程序优选地由用于对应组光线的一组多个执行线程来执行,从而被布置为一起执行光线追踪加速数据结构的遍历,以确定表示可能与该组多条光线中的至少一条光线相交的相应几何形状子集的盒(例如,树结构的叶节点盒)集,并且还使得图形处理器对占据这些盒的几何形状执行所需
的光线与基元相交测试,以确定实际的几何形状相交(如果有的话)。
80.这些步骤可单独执行,例如顺序执行,例如使得首先确定哪些几何形状(例如光线追踪加速数据结构的哪些末端节点)子集可相交,然后仅在执行遍历以确定哪些末端节点表示包含可能与该组多条光线中的光线相交的几何形状的盒的该组光线中的所有光线的所有遍历完成之后,才使得图形处理器针对这些节点对光线执行所需的光线与基元相交测试。
81.然而,作为同一整体遍历操作的一部分,并行执行这些步骤也是可能的,并且这是在优选的实施方案中完成的。例如,作为程序执行的一部分,在光线追踪加速数据结构的遍历期间,取决于待测试的给定节点是对应于光线追踪加速数据结构中的父节点还是光线追踪加速数据结构的最低级别的末端(叶)节点,图形处理器然后可相应地执行所需的光线与盒相交测试和/或光线与基元相交测试。
82.例如,响应到达父节点的遍历操作,然后可使得图形处理器针对与该节点相关联的相应一个或多个子盒来测试该组多条光线中的光线,以确定应该测试哪些子节点(光线与盒相交测试)。另一方面,响应于遍历操作到达光线追踪加速数据结构的末端节点,图形处理器然后可测试光线与由所考虑末端节点表示的各个几何形状单元(基元)的相交(光线与基元相交测试)。
83.因此,在实施方案中,可在遍历操作已经完全处理树结构的所有分支之前,关于树的一个(第一)分支的特定末端节点执行光线与基元测试,以确定哪些其他末端节点(如果有的话)可能与光线相交。
84.例如,可执行遍历操作,使得遍历优选地沿树结构的第一分支进行,以确定该分支是否存在任何可能相交的几何形状,然后在移动到下一个(即相邻的)分支之前,继续确定该分支的实际几何形状相交,依此类推。
85.因此,根据本文所述技术对一组多条光线执行的遍历操作优选地包括光线与盒测试和光线与基元相交测试,光线与盒测试用于确定哪个几何形状(例如,哪些叶节点盒)可能与正被执行遍历的该组多条光线中的光线相交,光线与基元相交测试用于确定实际的几何形状相交。
86.这可有助于简化遍历操作,例如通过允许使用相同的数据结构(例如相同的遍历记录)来管理这两种操作,从而避免了在光线与盒和光线与基元测试操作之间存储任何数据的需要。
87.然而,这不是必须的,并且对于该组光线来说,还可执行遍历操作,直到并包括通过执行适当的光线与盒相交测试来确定该组光线中的光线作为整体可能一起与哪个几何形状相交的步骤,但是对于光线来说,例如,然后被重新分组以进行光线与基元相交测试,或者例如对于单独的光线来说,改为执行光线与基元测试。
88.为了进一步促进改善在遍历操作期间待执行的光线与盒相交测试的效率,本文所述技术还提供了专用的一个或多个“光线与盒测试”指令集,该指令集可被包括在用于光线追踪操作的着色器程序中,并且该指令集使得图形处理器在正在一起执行遍历的该组多条光线中的一条或多条光线和与正被执行着色器程序的光线的光线追踪加速数据结构的节点相关联的盒之间执行所需的相交测试,例如,如上所述。
89.在改善程序编译/执行的效率方面,使用用于执行光线与盒相交的指令本身可能
是有益的,例如,因为通常可能需要执行大量此类测试,使得使用可被包括在程序中以触发这样测试的专用指令可帮助降低着色器程序的复杂性。因此,每当需要对于光线追踪加速数据结构的节点进行光线与盒相交测试时,可将该指令适当地包括在所生成的程序中,使得图形处理器执行所需的光线与盒相交测试。
90.响应于执行该光线与盒相交测试指令,然后可加载定义待测试的光线的相关输入数据,以及指示与正被测试的节点相关联的盒的数据,然后可相应地执行光线与盒相交测试。
91.根据本文所述技术要求,光线与盒相交测试本身通常可根据需要以任何合适的方式来执行,例如,以用于此类光线追踪操作和用于所考虑图形处理器和图形处理系统的正常方式。
92.因此,光线与盒相交测试优选地将光线追踪加速数据结构中期望被测试的节点(该节点通常是父节点或非叶节点)作为输入,然后测试正在一起执行遍历的该组多条光线中的一条或多条光线与和正被测试的节点相关联的一个或多个盒的相交。
93.例如,如上所述,在树结构的情况下,光线可以并且优选地针对所考虑节点的子节点盒中的每个子节点盒者进行相交测试。这意味着光线与盒相交测试指令当被执行时,图形处理器然后可以并且优选地在一个处理实例中针对所考虑节点的多个子节点的盒来测试来自该组多条光线的多条光线(例如,并且优选地,利用一个加载操作来加载该测试的所有数据,并且利用单个输出来加载所有测试)。例如,并且由于这个原因,在优选的实施方案中,光线追踪加速数据结构包括相对“宽的”树结构。在特别优选的实施方案中,树中的每个父节点可具有多达六个相应的子节点。在此类情况下,优选地针对每个子节点盒的每条光线迭代地执行测试,直到已经针对每个子节点盒测试了该组光线中的所有光线。光线与盒相交测试的结果随后被适当地返回,以便执行遍历操作的程序继续进行。
94.以这种方式,通过能够在单个测试操作中测试多条光线,优选地针对多个(子节点)盒,因此可至少平均改善光线与盒测试的整体速度。
95.另一方面,通过使所有执行线程在遍历期间保持处于活动状态,使得该多条光线作为一组来执行遍历,然后这可能意味着执行遍历的该组多条光线中的一些光线不与正被测试的给定节点相交,并且甚至可能是这样的情况,该组中的光线中的一些光线不与为其定义了光线追踪加速数据结构的场景的任何几何形状相交(使得处理那些光线的对应执行线程原则上可在确定的点退出)。
96.将该组中的所有执行线程(对于所有光线)保持处于活动状态,使得整组光线一起执行遍历,因此可能导致在通过遍历操作携带那些光线时的一些不必要的处理。
97.然而,在这方面,本文所述技术进一步认识到,至少在光线追踪加速数据结构的较高级别中,将需要测试许多光线与相同或相似的盒相交。
98.例如,可以预期,或者图形处理器可被布置为对多条光线进行分组,使得由对应组执行线程作为一组一起处理的光线将显示出高度的“一致性”,例如,使得这些光线被预期与相似的几何形状相交。在这方面,用于汇集光线和从池中选择光线作为合适组的多条光线的各种布置是可能的,这将在下面进一步解释。
99.因此,布置一组多条光线一起遍历光线追踪加速数据结构通常可以很好地提供总体上更有效的光线追踪操作。
100.也就是说,已经发现,在许多光线追踪操作中,就允许在单个操作中测试更多光线以及减少存储器带宽而言,对整个组的光线一起执行遍历的好处通常超过了为了在遍历期间保持所有执行线程活动而可能执行的任何不必要的处理的成本。
101.此外,申请人已经认识到,对作为整体的一组光线执行遍历操作,使得作为整体的该组光线的对应执行线程组保持活动,在实施方案中可在减少存储器带宽方面提供进一步的改善。
102.具体地讲,通过以这种方式使正在处理该组多条光线的执行线程组中的所有执行线程保持活动,然后可将该组光线的遍历操作作为整体来管理,例如,并且优选地,使用为执行线程组分配的共享(例如,通用)寄存器集。
103.例如,如上所述,遍历操作本身可以并且优选地使用适当的记录来管理,例如,遍历记录包括指示哪些节点已被确定为与正在执行遍历的该组多条光线中的光线相交的条目列表。
104.例如,并且在特别优选的实施方案中,为了追踪哪些节点与哪些光线相交,并因此需要针对光线进行测试,每当确定用于光线追踪过程的光线与给定节点相交时,然后将节点(盒)相交的指示推送(添加)给用于遍历操作的合适记录。然后可读取哪些节点代表包含可能与光线相交的几何形状的盒的记录,以确定哪些节点需要在下一级别进行测试,依此类推。
105.在优选的实施方案中,遍历操作的记录以合适的遍历“堆栈”的形式提供,并且优选地使用“后进先出”方案来管理,例如以堆栈的正常方式。
106.因此,当第一父节点的测试指示其子节点中的一者或多者相交时,子节点然后被推送(添加)给堆栈,并然后弹出(移除)以进行相应的测试(使得在测试与第一父节点处于同一级别的任何其他父节点之前测试第一父节点的子节点)。然而,各种其他布置也可能用于追踪哪些节点将被测试,并且遍历记录通常可根据需要以任何合适的方式来布置和管理。
107.如上所述,因为在本文所述技术中,光线追踪加速数据结构的遍历是针对多条光线一起执行的,使得处理该组多条光线中的光线的所有执行线程在遍历期间保持“活动”,这意味着可为作为整体的该组光线维护单个公共遍历记录。此外,因为执行线程组作为整体优选地保持活动,所以可使用已分配给该组多个执行线程的寄存器集来完全管理遍历记录,这是可能的并且是本文所述技术的益处,使得由该组多个执行线程处理的所有光线的遍历操作可使用寄存器来处理。
108.因此,这可进一步降低存储器带宽要求,例如,与为每条光线维护单独的记录相比。例如,在本文所述技术的优选的实施方案中,不是每条光线具有其自己的保持在外部存储器中的遍历记录,并且图形处理器必须总是将每条光线的相交测试的结果写出到其在存储器中的相应(每条光线)记录中,如可以其他方式完成的,因为遍历是对作为整体的一组光线执行的,对该组中光线的相交测试的结果可以(并且优选地)写出到共享遍历记录中,该共享遍历记录优选地被维护在本地寄存器集中,该本地寄存器集已经被分配给正在处理执行遍历的该组多条光线执行线程组,使得该遍历记录被管理用于整组多条光线,例如,而不是必须重复地从存储器中读入各条光线的相应记录,从而减少存储器带宽。
109.以这种方式,遍历堆栈可优选地经由寄存器(完全)管理,优选地在芯片上,其中堆
栈仅在溢出的情况下从寄存器写出到存储器。
110.因此,在优选的实施方案中,使用为线程组分配的寄存器来管理遍历堆栈,优选地是完全管理遍历堆栈。以这种方式,在可能的情况下,遍历记录的状态可完全保存在图形处理器的本地,从而减少了存储器带宽。数据结构的大小可被设计成尝试确保至少在正常操作中是这种情况。在那种情况下,光线与盒相交测试的输出(即与光线相交并因此需要被测试用于遍历操作的节点(盒))优选地被推送到遍历记录,而不被写入存储器。
111.优选地,当将相交测试的结果写入记录将会导致记录溢出时,相交测试的输出仅被写入存储器。例如,遍历记录通常具有有限数目的条目(例如,并且尤其是在使用通常具有固定大小的寄存器来管理遍历记录的情况下)。例如,在示例性实施方案中,遍历记录可以是8个条目深。
112.因此,如果光线与盒测试的特定实例导致大量相交,则为所确定的相交中的每一者写入结果可能会导致遍历记录溢出。在那种情况下,整个遍历记录优选地复制到溢出输出,例如,然后以其当前形式写出到存储器。然后,溢出状态的适当指示符优选地被输出并被包括到遍历记录中,使得由于溢出而被写出到存储器的条目可被加载回用于测试,以允许条目进入堆栈。因此,在记录溢出的情况下,当前记录被写入存储器,并然后被清除,并且这种情况已经发生的指示被包括在记录中。
113.例如,并且优选地,溢出状态也(总是)作为光线与盒相交测试的输出返回。因为记录优选地作为整体被写出,所以溢出输出将总是或者为零或者不为零,从而易于检测何时发生了溢出(例如,而不是尝试识别哪些推送导致了溢出等))。
114.在本文所述技术中,遍历记录因此优选地经由寄存器本地维护,除了溢出情况之外,不必访问外部存储器。
115.因此,在优选的实施方案中,当期望一次性对正在一起执行遍历操作的该组多条光线中的一条或多条光线执行相交测试时(使用单个存储器加载操作),可一次性加载这些光线的数据,然后可将相交测试的结果输出到遍历记录,该遍历记录经由作为整体的执行线程组的寄存器进行维护(除了溢出情况之外,不必写出到存储器)。
116.以这种方式,可改善光线与盒相交测试操作的效率,特别是通过减少用于执行光线与盒相交测试和用于管理遍历的存储器带宽要求。
117.所有这些的效果是可更有效地执行整个光线追踪渲染过程,从而有利于例如在处理资源可能更有限的设备上执行光线追踪和/或改进的光线追踪。
118.因此,与其他可能的方法相比,本文所述技术可提供各种改善。
119.本文所述的技术涉及使用光线追踪过程渲染表示包括一个或多个对象的场景视图的帧的情况。
120.在该过程中,正被渲染的帧将(并且在一个实施方案中,确实)包括采样位置的阵列,并且光线追踪过程将用于渲染这些采样位置中的每个采样位置,以便提供表示场景的期望视图的输出帧(图像)(其中所投射的相应光线对应于帧的相应采样位置并且在渲染和待渲染帧的相应采样位置时被使用)。
121.本文所述的技术可用于任何形式的基于光线追踪的渲染。
122.因此,例如,本文所述的技术可用于并且当使用“全”光线追踪过程来渲染场景时,即其中所谓的“主”光线从视点(相机)投射通过图像帧中的采样位置以确定该光线与场景
中的对象的相交,例如,并且在一个实施方案中,针对每条光线确定该光线相交的场景中的最近对象(该光线的“第一交点”)。该方法可涉及从主光线与场景中对象的相应第一交点投射另外的(次)光线,并且另外使用次光线的相交数据来确定对采样位置的渲染。
123.在这种情况下,以本文所述技术的方式的操作可在(并且在一个实施方案中)分析主光线和次光线与场景中对象的相交时使用。
124.本文所述的技术还可用于所谓的“混合”光线追踪渲染过程,例如,其中在执行渲染时执行光线追踪和光栅化过程两者(例如,其中仅执行全光线追踪过程中的步骤中的一些步骤,其中一个或多个光栅化过程用于实现这些“全”光线追踪过程中的其他步骤)。例如,在示例性混合光线追踪过程中,可使用光栅化过程来确定主光线中的每条主光线与场景中对象的第一相交,但随后使用光线追踪过程来执行从所确定的主光线与场景中对象的相应第一交点的一个或多个另外的(次)光线的投射。
125.在这种情况下,以本文所述技术的方式的操作可在(并且在一个实施方案中)分析次光线与场景中对象的相交时使用。
126.以本文所述技术执行的帧的基于光线追踪的渲染由执行图形处理程序的图形处理器的可编程执行单元触发和执行,该图形处理程序将使得(并且使得)可编程执行单元执行必要的光线追踪渲染过程。
127.因此,一个或多个图形着色器程序将被发布到图形处理器并由可编程执行单元执行,该一个或多个图形着色器程序包括当被执行时将执行期望的光线追踪渲染过程的一组程序指令(序列)。如果需要,该一个或多个着色器程序可仅包括执行基于特定光线追踪的渲染操作所需的指令,或者其还可包括其他指令,例如以执行其他着色操作。
128.根据以本文所述技术的方式进行的特定操作,用于执行期望光线追踪过程的着色器程序的执行可以其他方式以任何合适且期望的方式执行,诸如并且在一个实施方案中,根据所考虑的图形处理器和图形处理系统中着色器程序的执行。
129.因此,图形处理器(图形处理器的可编程执行单元)将用于执行着色器程序,该着色器程序包括用于针对待渲染的帧的多个(并且在一个实施方案中,针对每个)采样位置执行期望的光线追踪渲染过程的指令序列。
130.相应地,当执行光线追踪着色器程序时,图形处理器将用于派生(发布)针对正被渲染的帧的采样位置的相应执行线程,其中每个线程随后执行程序以便渲染线程表示(并且对应于)的采样位置。因此,在一个实施方案中,图形处理器包括线程派生器(线程派生电路),该线程派生器可操作为并且被配置为派生(发布)执行线程以供可编程执行单元执行。
131.由可编程执行单元执行的光线追踪渲染着色器程序可以任何合适且期望的方式准备和生成。
132.在一个实施方案中,该射线追踪渲染着色器程序由所考虑的图形处理系统的图形处理器的编译器(着色器编译器)生成(并且因此在一个实施方案中,生成着色程序的处理电路包括适当的编译器电路)。在一个实施方案中,该编译器在图形处理系统的适当可编程处理电路上执行。
133.在可以本文所述技术的方式操作的图形处理系统中,在至少本文所述技术的实施方案中,编译器(例如在主机处理器上执行的编译器),将生成并向图形处理器发布一个或多个着色器程序,该一个或多个着色器程序当被执行时将根据本文所述的技术执行所需的
基于光线追踪的渲染操作,然后通过图形处理器(图形处理器的可编程执行单元)执行程序以执行基于光线追踪的渲染,并且作为该程序执行的一部分,与图形处理器的光线追踪加速数据结构遍历电路交换上述消息。
134.本文所述技术的操作可以(并且确实)通过在光线追踪渲染着色器程序中包括适当的“光线与盒”相交测试指令来实现和触发,该光线追踪渲染着色器程序待由可编程执行单元执行,该可编程执行单元将触发待执行的期望的光线与盒相交测试,例如,并且在优选的实施方案中,通过触发执行单元向相交测试电路发送适当的消息(然后当执行单元到达(执行)着色器程序中的相关指令时,执行单元发送该消息)。(用于使执行线程处于活动状态的适当指令,以及用于执行光线与基元测试的适当指令,至少在由同一着色器程序触发的情况下,也可适当地包括在着色器程序中)。
135.此类指令可包括在着色器程序中,以便由可编程执行单元以任何合适且期望的方式以及由总体数据(图形)处理系统的任何合适且期望的元件执行。
136.例如,在一个实施方案中,“光线与盒”相交测试指令由用于图形处理器的编译器(着色器编译器)包括在着色器程序中。因此,在一个实施方案中,编译器在执行光线追踪的光线追踪渲染着色器程序中的适当点处插入“光线与盒”相交测试指令。
137.在一个实施方案中,“光线与盒”相交测试包括在待由图形处理器通过编译器响应于适当的光线追踪指示(例如,“trace()”调用)而执行的光线追踪渲染着色器程序中,该光线追踪指示包括在由需要图形处理的应用提供的(高层级)着色器程序中。因此,例如,并且在一个实施方案中,应用程序将能够包括在光线追踪操作期间需要关于节点的光线与盒相交测试指令的明确指示,其中编译器然后在本文所述的技术中响应于此而在编译着色器程序中包括适当的“光线与盒”相交测试指令。编译器还可能包括其自身的“光线与盒”相交测试指令,例如,在编译器能够评估正被编译的着色器程序以识别何时以及何处包括一个或多个“光线与盒”相交测试指令的情况下,即使在不存在对其的明确指示的情况下也是如此。
138.在一个实施方案中,该编译器分析例如由主机处理器上需要图形处理的应用提供的着色器程序代码,并且在着色器程序中的适当点处(例如,通过将指令插入(编译)着色器程序中)包括一个或多个“光线与盒”相交测试指令。
139.本文所述的技术还扩展到并且包括编译器的此类操作。
140.因此,本文所述技术的另一个方面包括编译待由图形处理器的可编程执行单元执行的着色器程序的方法,该可编程执行单元可操作为执行图形处理程序以执行图形处理操作;
141.该方法包括:
142.用于在使用光线追踪过程渲染表示包括一个或多个对象的场景视图的帧时待由图形处理器的可编程执行单元执行的着色器程序,
143.其中光线追踪过程使用指示待渲染的场景的几何形状的分布的光线追踪加速数据结构,以确定场景的几何形状,该几何形状能够与正被用于光线追踪操作的光线相交,光线追踪加速数据结构包括多个节点,每个节点与场景内的相应一个或多个盒相关联,
144.该光线追踪过程包括对多条光线执行光线追踪加速数据结构的遍历,以通过测试光线与由加速数据结构的节点表示的盒的相交来确定待渲染的场景的能够与光线相交的
几何形状,并且
145.其中该程序待由一组多个执行线程执行,其中该组执行线程中的各个执行线程执行对应组光线中的相应光线的遍历操作:
146.在着色器程序中包括一个或多个“光线与盒测试”指令集,该指令集用于测试光线与和在遍历操作期间待测试的光线追踪加速数据结构的给定节点相关联的一个或多个盒的相交,该“光线与盒测试”指令集当被该组多个执行线程中的执行线程执行时将使得:
147.该图形处理器测试来自正在一起执行遍历操作的该组多条光线中的一条或多条光线与和正被测试的节点相关联的该一个或多个盒的相交;和
148.针对遍历操作的节点返回相交测试的结果。
149.本文所述技术的另一个方面包括编译器,所述编译器用于编译待由图形处理器的可编程执行单元执行的着色器程序的方法,该可编程执行单元可操作为执行图形处理程序以执行图形处理操作;
150.该编译器包括处理电路,该处理电路被配置为:
151.用于在使用光线追踪过程渲染表示包括一个或多个对象的场景视图的帧时待由图形处理器的可编程执行单元执行的着色器程序,
152.其中光线追踪过程使用指示待渲染的场景的几何形状的分布的光线追踪加速数据结构,以确定场景的几何形状,该几何形状能够与正被用于光线追踪操作的光线相交,光线追踪加速数据结构包括多个节点,每个节点与场景内的相应一个或多个盒相关联,
153.该光线追踪过程包括对多条光线执行光线追踪加速数据结构的遍历,以通过测试光线与由加速数据结构的节点表示的盒的相交来确定待渲染的场景的能够与光线相交的几何形状,并且
154.其中该程序待由多个执行线程的组执行,其中该组执行线程中的各个执行线程执行对应组光线中的相应光线的遍历操作:
155.在着色器程序中包括:
156.一个或多个“光线与盒测试”指令集,该指令集用于测试光线与和在遍历操作期间待测试的光线追踪加速数据结构的给定节点相关联的一个或多个盒的相交,该光线与盒测试指令集当被该组多个执行线程中的执行线程执行时将使得:
157.该图形处理器测试来自正在一起执行遍历操作的该组多条光线中的一条或多条光线与和正被测试的节点相关联的该一个或多个盒的相交;和
158.针对遍历操作的节点返回相交测试的结果。
159.在一个实施方案中,编译器还在程序中包括一个或多个指令集,该一个或多个指令集使得该组执行线程中的执行线程处于活动状态,至少直到针对该组执行线程正在处理的该组光线中的所有光线完成了确定场景的哪个几何形状(如果有的话)可能与光线相交的遍历操作,使得该组光线一起执行遍历操作,如上所述。
160.编译器(编译器处理电路)在一个实施方案中是图形处理系统的中央处理单元(cpu)(诸如主机处理器)的一部分,并且在一个实施方案中在该cpu上执行,并且在一个实施方案中是在该cpu上执行的图形处理器的驱动器(例如主机处理器)的一部分。
161.在这种情况下,编译器和编译代码将在整个图形处理系统内的单独处理器上运行。然而,如果需要,其他布置将是可能的,诸如编译器在与编译代码相同的处理器上运行。
162.编译过程(编译器)可以任何合适且期望的方式生成光线追踪渲染着色器程序,例如,并且在一个实施方案中,使用用于该目的的任何合适且期望的编译器技术。
163.因此,优选地,着色器程序由编译器生成,并且编译器被布置成在着色器程序内包括在本文所述技术中使用的指令。当然,其他布置将是可能的。
164.然后,所生成的着色器程序可被发送到图形处理器的可编程执行单元,以供执行。
165.本文所述技术还扩展到当执行着色器程序时图形处理器本身的操作。
166.根据本文所述技术的另一方面,提供了一种在使用光线追踪过程渲染表示包括一个或多个对象的场景视图的帧时操作图形处理器的方法,
167.其中光线追踪过程使用指示待渲染的场景的几何形状的分布的光线追踪加速数据结构,以确定场景的几何形状,该几何形状能够与正被用于光线追踪操作的光线相交,光线追踪加速数据结构包括多个节点,每个节点与场景内的相应一个或多个盒相关联,
168.该光线追踪过程包括对多条光线执行光线追踪加速数据结构的遍历,以通过测试光线与由加速数据结构的节点表示的盒的相交来确定待渲染的场景的能够与光线相交的几何形状;
169.该图形处理器包括可编程执行单元,该可编程执行单元可操作为执行程序以执行图形处理操作,并且其中程序能够由多个执行线程的组一起执行;
170.该方法包括:
171.当一组执行线程正在执行程序以执行光线追踪加速数据结构遍历时,其中该组执行线程中的各个执行线程执行对应组光线中的相应光线的遍历操作,使得该组光线一起执行遍历操作,响应于执行线程执行被包括在关于光线追踪加速数据结构的节点的程序中的一个或多个“光线与盒测试”指令集:
172.测试来自正在一起执行遍历操作的该组多条光线中的一条或多条光线与和正被测试的节点相关联的该一个或多个盒的相交;以及
173.返回针对遍历操作的节点的相交测试的结果。
174.根据本文所述技术的另一方面,提供了一种图形处理器,该图形处理器可操作为使用光线追踪过程渲染表示包括一个或多个对象的场景视图的帧,
175.其中光线追踪过程使用指示待渲染的场景的几何形状的分布的光线追踪加速数据结构,以确定场景的几何形状,该几何形状能够与正被用于光线追踪操作的光线相交,光线追踪加速数据结构包括多个节点,每个节点与场景内的相应一个或多个盒相关联,
176.该光线追踪过程包括对多条光线执行光线追踪加速数据结构的遍历,以通过测试光线与由加速数据结构的节点表示的盒的相交来确定待渲染的场景的能够与光线相交的几何形状;
177.该图形处理器包括:
178.可编程执行单元,该可编程执行单元可操作为执行程序以执行图形处理操作,并且其中程序能够由多个执行线程的组一起执行;
179.其中执行单元被配置为使得当一组执行线程正在执行程序以执行光线追踪加速数据结构遍历时,其中该组执行线程中的各个执行线程执行对应组光线中的相应光线的遍历操作,从而一起执行遍历操作,响应于执行线程执行被包括在关于光线追踪加速数据结构的节点的程序中的一个或多个“光线与盒测试”指令集:
180.该执行单元触发测试关于来自正在一起执行光线追踪加速数据结构的遍历的该组多条光线中的一条或多条光线与和正被测试的节点相关联的该一个或多个盒的相交,其中针对遍历操作的节点然后返回相交测试的结果。
181.如本领域技术人员将理解的,与编译器和/或图形处理器的操作相关的本文所述技术的这些附加方面可视情况可以并且优选地确实包括本文所述技术的任一个或多个或所有特征。
182.当执行着色器程序以执行基于光线追踪的渲染过程时,因为它是基于光线追踪的渲染过程,所以该过程的执行将包括将光线追踪到被渲染场景中并穿过该被渲染场景,(例如,并且在一个实施方案中)以便确定对应于所考虑的一条或多条光线的给定采样位置应如何渲染以在该采样位置处显示该场景的所需视图。
183.图形处理器可以是包括可执行程序指令的可编程执行单元(电路)的任何合适和期望的图形处理器。
184.该可编程执行单元可以是图形处理器可包含的任何合适且期望的可编程执行单元(电路)。该可编程执行单元应当可操作为执行图形着色程序以执行图形处理操作。因此,可编程执行单元将接收待执行的图形线程,并且为那些线程执行适当的图形着色程序以生成期望的图形输出。
185.一旦线程完成了其相应处理操作,该线程就可“退出”,例如,新执行线程在其位置上派生。
186.图形处理器可包括单个可编程执行单元,或者可具有多个执行单元。在存在多个执行单元的情况下,每个执行单元可以并且在一个实施方案中确实以本文所述的技术的方式操作。在存在多个执行单元的情况下,每个执行单元可以作为单独的电路提供给数据处理器的其他执行单元,或者执行单元可以共享其电路(电路元件)中的一些或全部。
187.该(和每个)执行单元应包括并且在一个实施方案中确实包括用于执行执行单元所需的操作的适当电路(处理电路/逻辑)。
188.根据本文所述技术,图形处理器和可编程执行单元可操作为例如以锁步方式(例如一次一个指令)一起执行多个执行线程的组(“warps”)的着色器程序。在那种情况下,执行线程组中的执行线程优选地执行相同的遍历操作,但是针对不同的光线,例如,并且优选地,在单指令多数据(simd)执行状态下。
189.因此,执行线程组可以(并且确实)各自处理用于光线追踪操作的对应组多条光线。
190.根据本文所述技术,图形处理器因此被配置为并且可操作为将待遍历相同加速数据结构的光线(遍历请求)分组在一起,以便一起执行针对该组光线中的光线的加速数据结构的遍历。
191.可根据需要以任何合适的方式执行分组,但是优选地,彼此足够相似并且遍历相同加速数据结构的光线被分组在一起,以便一起执行针对该组光线的加速数据结构的遍历。这将有助于增加存储器位置,并且因此改善光线追踪加速数据结构的任何高速缓存的有效性(并且对应地减少可能需要的片外存储器访问的次数)。
192.在这种情况下,这些光线在一个实施方案中基于它们彼此的相似性而分组在一起,使得“相似”光线将为此目的分组在一起。因此,光线在一个实施方案中基于一项或多项
特定的(在一个实施方案中为选择的、在一个实施方案中为预定义的)标准,诸如以下中的一者或多者(并且在一个实施方案中,基于以下中的全部)被分组用于一起遍历(相同的)光线追踪加速数据结构:光线的起始位置(起点);光线的方向(方向矢量);和光线待被投射的范围。
193.因此,在一个实施方案中,如果光线的位置(起点)、方向和/或范围足够相似,则可以将这些光线组合在一起以进行光线追踪加速数据结构遍历过程(例如,并且在一个实施方案中,在彼此的特定阈值范围或裕度内)(并且这些光线待遍历相同的光线追踪加速数据结构)。这然后将便于针对相似光线一起执行光线追踪加速数据结构遍历,从而增加存储器访问位置等,并且因此使光线追踪加速数据结构遍历操作更有效。
194.为了便于该操作,图形处理器可在一个实施方案中维护等待遍历加速数据结构(例如,在图形处理器上或其可访问的适当队列或缓冲区(高速缓存)中)的光线的“池”,例如,并且在一个实施方案中,基于上述标准中的一项或多项或全部标准从该池选择一组一条或多条光线以进行处理。然后,可为所选光线组衍生合适的执行线程组,并且执行程序以使该组光线一起执行遍历操作。这然后将便于光线追踪加速数据结构遍历处理相似光线的组。
195.相应地,在一个实施方案中,图形处理器包括适当的控制器,该控制器可操作以选择和分组待从“池”执行光线追踪加速数据结构遍历的光线,并使得一起对光线组进行光线追踪加速数据结构遍历。
196.在这种情况下,在一个实施方案中,在“池”中并且等待遍历光线追踪加速数据结构的光线在池中的持续时间(其“年龄”)被追踪,其中在池中的持续时间超过特定的(在一个实施方案中为选择的、在一个实施方案中为预先确定的)阈值持续时间(“年龄”)的光线然后被优先进行处理,例如,并且在一个实施方案中,不等待任何另外的更晚“相似”光线到达以进行处理。这然后将有助于确保这些光线不会在池中保持过长时间而等待其他可能与该光线分组在一起的光线。
197.池中的这些光线可例如为此目的加时间戳,使得它们在池中的年龄可被追踪。
198.当然,其他布置将是可能的。
199.一旦已经选择了待一起处理的一组光线,则光线应该作为一组一起处理,例如通过衍生合适的执行线程组,并且使执行线程组以上述方式执行使该多条光线一起遍历光线追踪加速数据结构的程序。
200.一起执行光线追踪加速数据结构的遍历的光线组可包括任何合适且期望(多个)数量的光线,但可存在(例如在一个实施方案中为特定的、在一个实施方案中为选择的、在一个实施方案中为预定义的)能够一起执行遍历的最大光线数量,例如,在这方面取决于光线追踪加速数据结构遍历电路的并行处理能力。
201.当然,其他布置将是可能的。
202.因此,在本文所述技术中,该组一个或多个执行线程包括多个执行线程,并且对应于以锁步方式执行程序的线程组(warp)。在一个实施方案中,该组执行线程包括多于两个执行线程,诸如四个、八个或十六个(或更多个,诸如32个、64个或128个)执行线程。
203.使用光线追踪加速数据结构执行根据本文所述技术的光线追踪操作。在本文所述的技术中使用和遍历的光线追踪加速数据结构可以是指示(表示)待渲染场景的几何形状
分布的任何合适且期望的光线追踪加速数据结构,并且可使用(和遍历)这些光线追踪加速数据结构以确定能够与正被投影到待渲染场景中的光线相交的该场景的几何形状。
204.在一个实施方案中,光线追踪加速数据结构表示正被渲染场景内的(多个)相应盒,并且指示和/或可用于确定存在于那些盒中的待渲染场景的几何形状。
205.光线追踪加速数据结构可采取任何合适的和期望的形式。优选地,光线追踪加速数据结构包括树结构,诸如层次包围盒(bvh)树。这些层次包围盒可以是轴向对准(立方体)盒。因此,在一个实施方案中,光线追踪加速数据结构包括层次包围盒,并且在一个实施方案中包括bvh树。
206.bvh是在叶节点处具有基元(其可以是三角形或其他合适的几何对象)的树结构。叶节点处的基元被包裹在包围盒中。优选地,包围盒是轴对准的边界框。然后,包围盒被递归地聚类并包裹在包围盒中,直到到达单个根节点。在递归的每个级别处,两个或更多个的包围盒可被聚类成单个父包围盒。例如,并且在特别优选的实施方案中,每个非叶节点具有对应的多个子节点。
207.优选地,在本文所述技术中使用的光线追踪加速数据结构包括“宽”树结构,其中每个父节点可以(并且优选地确实)与大于两个子节点(诸如三个、四个、五个、六个或更多个子节点)相关联。在特别优选的实施方案中,每个父节点可与多达六个子节点相关联。在那种情况下,光线与盒相交测试的每个实例优选地包括针对该多个子节点中的每一个子节点来测试该组多条光线中的一条或多条光线。
208.然而,也可根据需要使用其他合适的光线追踪加速数据结构。例如,不是使用bvh层次,其中在每个对象的基础上通过盒来细分场景,例如,通过在几何形状的子集周围绘制合适的包围盒,例如,并且优选地,使得每个叶节点(盒)对应于一定数量的对象(基元),而是可在每个盒的基础上将场景细分为例如基本上相等大小的子盒。例如,光线追踪加速数据结构可根据需要包括k-d树结构、体素(网格层次)等。还可使用“混合”光线追踪加速数据结构,其中场景被部分地基于每个对象细分,并且部分地基于每个盒细分。各种其他布置也是可能的,并且本文所述技术通常可与任何合适的光线追踪加速数据结构一起使用。
209.可以任何合适且期望的方式生成和提供遍历的光线追踪加速数据结构。例如,其可先前被确定并提供为例如场景的定义的一部分,以由需要图形处理的应用来渲染。
210.在一个实施方案中,光线追踪加速数据结构由图形处理器本身生成,例如基于例如在渲染场景之前的初步处理遍中提供给图形处理器的该场景的几何形状的指示。
211.它也可以或替代地由cpu(例如主机处理器)生成,例如基于场景几何形状的指示,例如在渲染场景之前的初步处理遍中。
212.当然,其他布置将是可能的。
213.光线追踪加速数据结构可表示和指示待以任何合适且期望的方式渲染的场景的几何形状分布。因此,它可以根据单个图形基元或多组图形基元来表示几何形状,例如使得树结构的每个叶节点表示为针对占据该叶节点所对应的盒的场景定义的图形基元的对应子组。除此之外或另选地,光线追踪加速数据结构可以几何形状的更高级表示(描述)的形式表示场景的几何形状,例如根据包括多个基元的模型或对象。
214.对于给定光线追踪加速数据结构,还可以根据指示需要分析的另外的光线追踪加速数据结构来表示几何形状。在这种情况下,初始光线追踪加速数据结构将例如进一步表
示例如更精细的分辨率、需要针对场景的不同盒考虑的光线追踪加速数据结构,随着初始光线追踪加速数据结构的遍历,然后确定需要遍历的一个或多个另外的光线追踪加速数据结构,这取决于所考虑的光线与场景中的哪些盒相交。
215.因此,光线追踪遍历操作可包括不同光线追踪加速数据结构之间的转变,诸如不同细节层次(lod)之间的转变,以及/或者多层次光线追踪加速数据结构的不同层次之间的转变。
216.在光线追踪加速数据结构切换之间也可存在光线变换(例如,使得在具有和/或使用光线的变换的不同光线追踪加速数据结构之间存在自动转变,例如由光线追踪加速数据结构的元数据描述或与光线追踪加速数据结构相关联)。例如,不同细节层次之间的转变可使用身份变换,并且多层次光线追踪加速数据结构之间的转变可使用这些光线的通用仿射变换。
217.当然,其他布置将是可能的。
218.遍历操作可以任何合适且期望的方式(例如,并且在一个实施方案中,取决于正在遍历的光线追踪加速数据结构的形式)来遍历光线的光线追踪加速数据结构。遍历操作将使用所提供的关于光线的信息来遍历光线追踪加速数据结构,以确定能够与所考虑的光线相交的待渲染场景的几何形状。
219.因此,在一个实施方案中,遍历过程用于遍历光线追踪加速数据结构,从而针对光线依次穿过的场景的每个盒确定该盒中是否存在任何几何形状(由光线追踪加速数据结构指示)。因此,将基于光线的位置和方向遍历光线追踪加速数据结构,从而确定沿着该光线的路径在场景的盒中是否存在任何几何形状(其可相应地随后可能与该光线相交)。当然,其他布置将是可能的。
220.具体地讲,遍历过程涉及对于正被用于光线追踪过程的光线(正在对其执行遍历的该组多条光线中的),测试该光线与和光线追踪加速数据结构的节点相关联的一个或多个(子节点)盒的相交,以确定与该光线相交的相关联盒(即子节点)。遍历过程然后包括随后测试光线与光线追踪加速数据结构的下一级别中的(子)节点相关联的盒的相交,依此类推,直到最低级别(叶)节点。一旦遍历过程已经通过光线追踪加速数据结构,通过对节点执行所需的光线与盒相交测试以确定哪些盒(由末端/叶节点表示)包含可能与光线相交的几何形状,然后可进一步测试光线以确定与在那些盒内(并且仅在那些盒内)定义的几何形状的实际(光线与基元)相交(其中任何相交的几何形状然后被适当地着色)。
221.根据本文所述技术的要求,可根据需要以任何合适的方式执行遍历。
222.在一个实施方案中,遍历操作遍历光线的路径的光线追踪加速数据结构,直到找到光线与针对场景定义的几何形状的第一(可能)相交。然而,如果需要,还可以在已发现光线的第一(可能)相交之后继续遍历光线追踪加速数据结构。
223.例如,光线遍历操作可(并且在一个实施方案中)被配置为并且能够丢弃(忽略)(可能)相交并且例如根据所考虑的相交的几何形状的特性来继续遍历。例如,如果(可能)相交的几何形状是完全或部分透明的,则可能期望继续遍历(并且丢弃或保持初始“透明”相交)。
224.当然,其他布置将是可能的。
225.针对光线的光线追踪加速数据结构遍历可包括针对该光线遍历单个光线追踪加
速数据结构,或针对该光线遍历多个光线追踪加速数据结构。因此,在一个实施方案中,针对光线的光线追踪加速数据结构遍历操作包括针对该光线遍历多个光线追踪加速数据结构,从而确定能够与该光线相交的待渲染场景的几何形状。
226.例如,在场景的整个盒和/或几何形状由多个不同的光线追踪加速数据结构表示的情况下,可针对光线遍历多个光线追踪加速数据结构。
227.相似地,如上所述,在一个实施方案中,使用指示待遍历的另外的光线追踪加速数据结构的光线追踪加速数据结构。因此,在这种情况下,光线追踪加速数据结构遍历电路将用于首先遍历光线的初始光线追踪加速数据结构,从而确定针对光线的待遍历的一个或多个另外的光线追踪加速数据结构,并且然后针对光线遍历那些确定的一个或多个光线追踪加速数据结构,以此类推,直到针对光线遍历提供对待渲染场景的几何形状的指示的一个或多个“末端”光线追踪加速数据结构。
228.根据本文所述技术,光线追踪加速数据结构的遍历由可编程执行单元执行,该可编程执行单元执行用于光线追踪操作的合适的着色器程序。具体地讲,并且如上文所解释的,在本文所述技术中,遍历操作是对正在由执行程序的对应组执行线程处理的整组光线一起执行的。
229.然而,不是程序在本文所述技术中执行整个遍历操作,而是优选地提供相交测试电路,其在遍历期间执行光线与由光线追踪加速数据结构的节点表示的盒之间的实际相交测试。光线与盒测试指令当被正在对该组多条光线执行遍历的执行线程组中的执行线程执行时,优选地使图形处理器向相交测试电路发送消息,以使相交测试电路对该组多条光线中的一个或多条光线执行所需的测试,
230.也就是说,在优选的实施方案中,整个光线追踪操作由执行图形处理程序以执行光线追踪操作的图形处理器的可编程执行单元执行。然而,在优选的实施方案中,作为光线追踪操作的一部分,当程序需要针对加速数据结构的节点测试光线时,“光线与盒测试”指令可适当地包括在程序中,使得当执行指令集时,执行单元向相交测试电路发送消息,并触发相交测试电路在光线和由加速数据结构的节点表示的盒之间执行所需的相交测试。
231.在这方面,本文所述技术认识到,作为上述光线追踪操作的一部分,仍然需要在光线与加速数据结构的节点之间执行许多相交测试。因此,本文所述技术认识到,为此目的提供专用相交测试电路可能是有益的,可使用适当的一个或多个“光线与盒测试”指令集来调用该专用相交测试电路,该适当的一个或多个“光线与基元”相交测试指令集可被包括在由图形处理器执行的程序中。
232.换句话讲,例如,可编程执行单元执行全光线追踪光线相交确定操作,包括遍历加速数据结构以确定可能与光线相交的几何形状,并然后确定是否有任何几何形状实际上与光线相交,可编程执行单元将该处理中的一些,并且特别是(并且至少)光线与由光线追踪加速数据结构的节点表示的盒之间的相交测试卸载到相交测试电路。
233.这于是具有使用专用于该目的的电路(硬件)来执行光线追踪操作中的一些(即光线与盒相交测试操作)的效果(而不是例如使用被编程以执行所需操作的更通用的可编程处理电路来执行该操作)。然后,与例如通过使用可编程处理电路执行适当程序来完成的布置相比(这可能是相对低效的,例如,由于对应于不同光线的执行线程的不良存储器访问位置),这可导致光线追踪加速数据结构的加速和更有效的相交测试。
234.根据本文所述技术,使用可被包括在程序中的专用指令因此可有助于此类相交测试电路(硬件)的使用。例如,如上所述,该指令可适当地并入到着色器程序中,以使图形处理器根据需要向相交测试电路发送消息,以在一个测试实例中对该组多条光线中的多条光线执行光线与盒相交测试。同样,以本文所述技术的方式将光线分组在一起用于遍历操作意味着相交测试电路可一次加载待测试的该多条光线的所有相关输入数据,从而节省存储器带宽,如上所述。
235.因此,本文所述技术特别便于以这种方式使用专用电路(硬件),以提供全面的、改善的(更有效的)遍历操作。
236.图形处理器的相交测试电路应该是并且在一个实施方案中是(基本上)固定功能的硬件单元(电路),其被配置为根据本文所述技术执行相交测试。相交测试电路因此应包括一个或多个适当的固定功能电路以执行所需的操作,但其在使用中可包括并具有一些有限形式的可配置性,例如,如果需要的话。
237.可存在单个或多个相交测试电路,例如,使得多个可编程执行单元共享给定(或单个)相交测试电路,和/或使得给定可编程执行单元具有对多个不同的相交测试电路的访问权限并且可与该多个不同的相交测试电路通信并使用该多个不同的相交测试电路。在存在多个相交测试电路的情况下,在一个实施方案中,每个该电路可以本文所述技术的方式操作。
238.相交测试电路(或多个电路)还应该并且优选地确实具有合适的消息接口,用于根据需要与图形处理器的可编程执行单元通信。
239.因此,在本文所述技术中,在光线追踪操作期间,当遍历操作需要对正在一起执行遍历的该组多条光线中的一条或多条光线执行光线与盒测试相交操作时,可编程执行单元优选地触发相交测试电路,以对所考虑的光线执行期望的(光线与基元)相交测试。
240.除了相交测试电路之外,如果需要,还可存在能够与可编程执行单元通信的其他加速器(专用单元),诸如加载/存储单元(电路)、一个或多个算术单元(电路)、纹理映射器等。
241.可根据需要促进相交测试电路等与可编程执行单元之间的通信。在一个实施方案中,存在用于在各个单元之间传递消息的适当通信(消息传送)网络。该通信(消息传送)网络可根据任何期望的通信协议和标准进行操作,诸如使用合适的互连/消息传送协议。
242.当可编程执行单元要求相交测试电路针对正被执行遍历操作的该组多条光线中的一条或多条光线的光线追踪加速数据结构的给定(非叶)节点执行相交测试时,可编程执行单元因此优选地向相交测试电路发送具有该效果的消息。
243.从可编程执行单元发送到相交测试电路的消息应该并且在一个实施方案中确实包含执行相关相交测试操作所需的信息。因此,在一个实施方案中,其指示光线与盒相交测试的输入中的一者或多者,并且在一个实施方案中,其指示所有输入,例如,如下所述。
244.至少在图形处理器包括多个可编程执行单元的情况下,消息在一个实施方案中还指示消息的发送者(即,哪个可编程执行单元已经发送消息),使得光线与盒相交测试的结果可返回到正确的可编程执行单元。
245.因此,相交测试电路可被调用以执行相交测试,如正被包括在程序中的适当的光线与盒相交测试指令(或指令集)所期望的。因此,在优选的实施方案中,当生成用于使一组
多条光线以上述方式一起执行光线追踪加速数据结构的遍历的程序时,当遍历需要针对光线追踪加速数据结构的节点执行光线与盒相交测试时,一条或多条光线与盒相交测试指令的适当集可被包括在程序中,该程序当被执行时将使得可编程执行单元向相交测试电路发送消息,以导致相交测试电路对节点执行所需的光线与盒相交测试(并将输出返回给可编程执行单元)。
246.然而,其他布置也是可能的。例如,指令可使着色器程序跳转到合适的子例程来实现所需的光线与盒相交测试,而不是发送消息给硬件来执行相交测试。
247.实际的相交测试本身,无论是如何实现的,都可根据需要以任何合适的方式来执行,例如以光线追踪过程的正常方式。
248.例如,在本文所述技术中,为光线与盒相交测试提供的输入(例如,并且优选地,提供给相交测试电路,如果存在相交测试电路的话)可以并且优选地包括:
249.一个或多个光线集,该光线集来自正在执行遍历的该组多条光线(每条光线对应于执行线程组中的相应执行线程);和
250.加速数据结构的节点,该节点待被测试用于正在执行遍历的该组多条光线。
251.每条光线可以是,并且优选地,根据待测试的光线(待针对其确定光线追踪加速数据结构的遍历)的原点(起始位置(例如x、y、z坐标))定义;待遍历光线追踪加速数据结构的光线的方向(方向矢量);和光线待遍历的范围(距离)(光线待遍历到场景中的(最小和/或最大)距离)。
252.在一些实施方案中,输入用于测试的该一个或多个光线集可以是该组多个光线中的该所有光线集。也就是说,在一些情况下,整组光线被输入用于测试,然后相应地进行测试。然而,在其他更优选的实施方案中,输入用于测试的该一条或多条光线集包括来自整组光线内的光线子集,该子集包括为所考虑的节点待测试的光线子集(例如,因为已经发现它们可能与和该节点相关联的一个或多个盒相交,例如,在先前测试实例中)。这可适当地指示,例如使用合适的位“掩码”来标识该组多条光线中的哪些光线应针对所考虑节点进行测试(这将在下面进一步解释)。
253.该节点与场景内的一个或多个盒集相关联。例如,在优选的实施方案中,每个(非叶)节点与多个子节点盒集相关联。因此,也获得相关联盒作为光线与盒相交测试的输入。这些可以任何合适的方式获得。例如,可将节点盒存储在例如存储器中,使得当针对给定节点执行光线与盒相交测试指令时,可根据需要加载节点盒。
254.然后可通过针对与该节点相关联的该一个或多个盒来测试一条或多条光线的输入集中的光线每条光线来执行光线与盒相交测试本身。这可根据需要以任何合适的方式来完成,例如以光线追踪操作的正常方式。
255.在优选的实施方案中,针对与节点相关联的多个子盒测试多条光线。这优选地以迭代方式完成,例如通过依次针对子盒中的每个子盒测试该组中的第一光线,然后移动到第二光线,依此类推,直到该组中需要测试的所有光线都针对所有子盒进行了测试。就这一点而言,各种布置将是可能的。
256.在一些优选的实施方案中,节点盒可以压缩格式存储在例如存储器中。在那种情况下,在对应的较低分辨率下执行相交测试可能是有益的。在这方面,应答理解,在遍历操作期间更保守地(以较低的分辨率)执行光线与盒测试没有害处,因为实际的光线与基元相
交将在随后的步骤中确定,例如,一旦遍历完成并且已经确定了哪个几何形状可能相交。
257.一旦完成了关于节点的所需相交测试,该节点的光线与盒相交测试的结果就作为输出返回。然后,输出的结果可被正在执行遍历的程序使用,例如以确定接下来要测试光线追踪加速数据结构的哪些节点。例如,如果确定正被测试的节点的特定子节点集可能与光线相交,则输出结果应该指示该子节点集,以使遍历程序触发与这些节点的光线与盒相交,依此类推。
258.因此,优选地维护合适的遍历记录,以追踪和管理在遍历操作期间应该测试哪些节点。因此,遍历记录优选地包括应测试光线追踪加速数据结构的哪些节点的指示作为条目(即,哪些节点具有已经确定与执行遍历操作的该组多条光线中的光线相交的盒。
259.遍历记录通常可采用任何合适的形式,例如可适用于管理此类光线追踪遍历操作的形式,但是在优选的实施方案中包括遍历“堆栈”,如上所述。
260.因此,在遍历操作期间,当(以及无论何时)由光线与盒测试的实例确定(子)节点表示可能与执行遍历操作的该组多条光线中的一条光线相交的几何形状的子集时,该节点的指示(例如指向该节点的指针)随后被包括在(例如被推送到)遍历记录中,使得该条目随后可由着色器程序从遍历记录中读出(弹出),从而相应地使光线针对该节点进行测试,依此类推。
261.然后可通过相应地读出(弹出)记录条目并提供给着色器程序以确定接下来要测试哪些节点来处理遍历记录。在遍历堆栈的情况下,这优选地使用“后进先出”方案来管理,其中节点相交被适当地推入堆栈或从堆栈中弹出。然而,就这一点而言,各种布置也是可能的。
262.因此,光线与盒相交测试优选地确定哪些(子)节点可能与光线相交,并且对于被确定为与光线相交的每个子节点,指向该子节点的指针被推送给遍历记录。然后在执行遍历程序以测试这些节点时处理该记录。因此,光线与盒测试的输出优选地以遍历记录的更新状态的形式返回,例如指示哪些(子)节点被命中并且需要在下一级别进行测试,依此类推。
263.因此,光线与盒相交测试的结果优选地包括一个或多个节点(例如,正被测试的节点的子节点)集,这些节点从光线与盒相交测试中被确定为与正被测试的光线中的至少一条光线相交。在那种情况下,遍历记录的当前状态(优选地在执行线程组中的所有执行线程之间共享)优选地也作为光线与盒相交测试的输入,连同识别待测试的节点和光线的信息一起提供。遍历记录的更新状态然后优选地作为输出返回。
264.因此,遍历记录是相交节点的列表,并因此包含可能相交的几何现在,并且遍历操作通过处理堆栈条目来执行,直到确定了与较低级别节点的盒的可能相交。
265.在本文所述技术中,针对一组多条光线执行遍历操作。这意味着遍历记录可以并且优选地作为整体为该组多条光线进行管理(优选地为处理该组光线中的光线的该对应多个执行线程使用共享的公共寄存器集)。这意味着不需要为每条光线加载/存储单独的遍历记录。
266.因为遍历记录优选地由多条光线共享,因此还优选地追踪该组多条光线中的哪些光线需要针对哪些节点进行测试。
267.例如,对于待测试的每个节点,可简单地对该组中的所有光线执行光线与盒相交
测试(在这种情况下,无论何时发现该组多条光线中的任何光线与和特定(子)节点相关联的盒相交,该组多条光线中的所有光线然后均可针对该节点进行测试,而不管实际确定哪些光线与该盒相交)。然而,这可能相对低效。
268.因此,在优选的实施方案中,相交测试的结果包括需要随后被测试的节点的指示(例如,如上所述,因为其相关联的盒与被测试的光线相交),以及被测试的光线中的哪些光线被确定为与和该节点相关联的盒相交的指示,因此当遍历程序到达该节点时,应该针对该节点进行测试。
269.该指示优选地以位“掩码”的形式提供,指示哪些光线应该被测试,并且哪个位掩码优选地也作为相交测试的结果被推送到遍历堆栈。也就是说,光线与盒相交测试优选地确定哪些光线与和正被测试的节点相关联的哪些(子)盒相交,并且作为相交测试的结果,返回已经发现哪些光线与哪些盒相交的指示,例如以与被确定为与光线相交的每个节点相关联的位掩码的形式。
270.因此,当从遍历记录(例如堆栈)中弹出节点用于光线与盒相交测试时,在执行光线与盒相交测试之前,可以(并且优选地)读取活动掩模以确定该组多条光线中的哪些光线需要针对该节点进行测试,并且优选地仅测试那些光线。
271.因此,当加载用于针对给定节点进行测试的指令时,优选地是首先使用位掩码来确定一起执行遍历操作的该组光线中的哪些光线应该针对该节点进行测试。然后,可以对那些光线(并且仅仅是那些光线)的节点执行期望的光线与盒相交测试,依此类推,以确定哪个几何形状可能与哪些光线相交。
272.在特别优选的实施方案中,使用由正在处理执行遍历操作的该组多条光线的该组多个执行线程中的执行线程共享的公共寄存器集来管理遍历记录。因此,该记录是加载到一个通用寄存器的所有通道中的当前遍历记录。根据需要,寄存器可以任何合适的方式配置。
273.例如,当执行程序中的指令时,执行单元(例如,执行单元的适当的功能单元,诸如算术单元)通常将读取一个或多个输入数据值(操作数),使用那些输入数据值来执行处理操作以生成输出数据值,然后返回该输出数据值,例如以用于通过被执行的程序中的后续指令进行进一步处理和/或用于输出(用于与在被执行的程序的执行期间不同的用途)。
274.当执行指令时待使用的输入数据值通常将被“本地”存储在执行(功能)单元的和/或执行(功能)单元可访问的寄存器(寄存器文件)的适当的集中,并且当执行指令时由执行(功能)单元生成的输出数据值将被相应地写回该存储器(寄存器文件)。
275.为了促进该操作,当执行着色器程序时,每个执行线程将被相应地分配一个或多个寄存器集,以供该线程在执行着色器程序时使用。
276.因此,当执行指令时,执行线程将从分配给该线程的一个或多个寄存器集中的一个或多个寄存器中读取输入数据值(操作数),并将其输出值写回到线程的寄存器分配的一个或多个寄存器中。
277.数据将被加载到寄存器中,并从寄存器中写出,从图形处理器的适当存储器系统或图形处理器可访问的适当存储器系统写入或写入图形处理器的适当存储器系统或图形处理器可访问的适当存储器系统(例如,经由适当的高速缓存系统(高速缓存层次))。
278.因此,除了可编程执行单元之外,图形处理器还包括一组多个寄存器(寄存器文
件),这些寄存器可操作为并用于存储正在执行的执行线程的数据。正在执行着色器程序的一组一个或多个执行线程中的每个线程将具有相关联寄存器集,用于存储从可编程执行单元可用的整组寄存器(寄存器文件)中分配给它的执行线程(以及可编程执行单元正在执行的执行线程)的数据(要为执行线程处理的输入数据或者由执行线程生成的输出数据)。
279.也就是说,执行线程组作为整体优选地也被分配了一个或多个共享寄存器,例如通用寄存器,并且在本文所述技术中,正是这些公共寄存器优选地用于管理遍历记录。
280.在存在多个执行单元的情况下,每个执行单元可具有其自己的不同寄存器组(寄存器文件)。还可以存在(并且优选地)在多个(例如,优选地所有)单独的执行单元之间共享的单组寄存器(寄存器文件)。
281.因此,光线与盒相交测试的结果优选地被推送到使用共享寄存器存储的遍历记录。同样,遍历记录条目优选地从共享寄存器中弹出。用于管理遍历记录所需的推送/弹出操作优选地例如通过执行适当的寄存器移位来实现。
282.寄存器组(寄存器文件)可采用任何合适的和期望的形式,并且以任何合适和期望的方式布置,例如包括单个或多个存储体等。
283.图形处理器将相应地包括适当的加载/存储单元和通信路径,用于在寄存器/寄存器文件和图形处理器的存储器系统或图形处理器可访问的存储器系统之间传输数据(例如,并且在实施方案中,经由适当的高速缓存层级)。
284.因此,在一个实施方案中的图形处理器具有到图形处理器的存储器(存储器系统)或图形处理器可访问的存储器(存储器系统)的适当接口并与之通信。
285.在一个实施方案中,存储器和存储器系统是图形处理器的主存储器或图形处理器可访问的主存储器,诸如专用于图形处理器的存储器,或者图形处理器是其一部分的数据处理系统的主存储器。在一个实施方案中,存储器系统包括位于存储系统的主存储器和图形处理器的可编程执行单元中间的适当的高速缓存层级。
286.因此,遍历程序将遍历光线追踪加速数据结构的节点,对光线追踪加速数据结构的每一级别处的节点执行所需的光线与盒相交测试,因此参考光线追踪加速数据结构的末端(叶)节点来确定哪个几何形状(如果有的话)可能与正在对其执行遍历操作的该组多条光线中的光线相交。
287.因此,如上所述的光线与盒相交测试优选地根据需要,针对跨光线追踪加速数据结构的多个级别的多个节点来执行,例如直到表示为场景定义的几何形状子集的末端(叶)节点的级别。
288.因此,这样做的最终结果是哪个几何形状(如果有的话)可能与该组多条光线中的光线相交的指示。优选地,该指示还指示哪些光线可能与哪些几何形状子集相交(例如,如上所述,以位掩模的形式)。
289.如果发现光线与包含针对场景定义的几何形状的该场景的盒相交(因此,遍历操作发现存在针对光线可能相交的场景定义的几何形状),则返回到可编程执行单元的结果(能够与该光线相交的待渲染场景的几何形状的指示)应当(并且在一个实施方案中,确实)包括对在被确定为与该光线相交的一个或多个盒中的定义几何形状的指示。因此,在发现光线与包含定义几何形状的盒相交的情况下,光线追踪加速数据结构遍历操作应当(并且在一个实施方案中,确实)向可编程执行单元返回针对所考虑的盒的几何形状的指示。
290.在这种情况下,能够与所考虑的光线相交的待渲染场景的几何形状的指示可指示能够以任何合适且期望的方式(例如,并且在一个实施方案中,取决于已遍历的光线追踪加速数据结构的格式)针对该光线相交的几何形状。因此,这可以是能够与光线相交的一组一个或多个基元(例如,点、线或多边形,诸如三角形等,以及/或者球体、圆柱体、圆锥体等)的形式,并且/或者可以是能够与该光线相交的几何形状的某种形式的更高级定义和/或描述,例如以更一般或通用的几何形状参考的形式,诸如针对场景的几何形状的更高阶表示。
291.针对(可能)相交的几何形状提供的信息可采取任何合适且期望的形式,例如,并且在一个实施方案中,取决于该几何形状本身的形式。例如,在一组基元(作为相交的候选者)的情况下,可以返回适当的基元标识符和任何相关联的几何形状标识符(例如它们所属的几何形状标识符)。
292.申请人认识到,针对光线的遍历也可能无法找到针对光线可能与之相交的场景定义的任何几何形状,例如,在光线穿过的场景的盒均不包含该场景的任何定义几何形状的情况下。
293.在光线追踪加速数据结构遍历发现光线不遍历包含针对场景的定义几何形状的任何盒的情况下,则在一个实施方案中,图形处理器在该情况下返回适当的响应。在一个实施方案中,光线追踪加速数据结构遍历返回响应,该响应指示光线没有任何相交(没有发现可能的相交)(即,存在“未命中”)。
294.在一个实施方案中,响应于来自光线追踪加速数据结构遍历的此类“未命中”响应,可编程执行单元执行适当的特定(在一个实施方案中为选择的、在一个实施方案中为预定义的)“默认”操作以用于响应于该情况对所考虑的采样位置进行进一步处理。这可包括例如假设与包围盒或天空盒相交或者计算背景的程序颜色等。就这一点而言,各种其他布置将是可能的。可编程执行单元然后将相应地对采样位置进行着色。
295.因此,在一个实施方案中,光线追踪操作用于(并且被配置为)确定由光线遍历的光线追踪加速数据结构表示的场景中的任何盒是否包含场景的任何几何形状,并且在该光线确实遍历包含针对场景定义的几何形状的场景的盒的情况下,向可编程执行单元返回对所考虑的盒的几何形状的指示,但是在该光线不遍历包含针对场景定义的几何形状的任何盒的情况下,向可编程执行单元返回对该(“未命中”)事件的指示。
296.因此,在一个实施方案中,一旦已经(从一组多条光线中)确定了哪些几何形状子集可能与光线相交,就例如通过执行合适的光线与基元相交测试来确定哪个几何形状(如果有的话)实际上与光线相交,如上所述。
297.该光线与基元相交确定可根据需要和期望使用由光线追踪加速数据结构遍历返回的信息。因此,在一个实施方案中,将使用能够与光线相交的几何形状的指示来测试该几何形状是否实际上与该光线相交,以及针对可影响光线相交或所需操作的几何形状所指示的任何其他特性,诸如表面特性。
298.因此,对于可能与一条或多条光线相交的每个叶节点(几何形状子集),然后确定哪个几何形状实际上与光线相交。也就是说,当确定哪个几何形状可能与该组多条光线中的光线相交的遍历操作确定了几何形状的特定子集(由叶节点表示)可能与一条或多条光线相交时,图形处理器然后相应地测试一条或多条光线与各个几何形状单元(基元)的相交。
299.可根据需要以任何合适的方式完成该光线与基元相交测试。例如,这可通过可编程执行单元本身或通过合适的相交测试硬件来完成。在硬件中执行的情况下,这可以是与执行光线与盒相交测试的相交测试电路相同或不同的硬件,如果提供的话。例如,在一些实施方案中,可为光线与盒相交测试和光线与基元相交测试提供专用(硬件)电路。
300.同样,光线与基元相交测试可针对一组多条光线(可以是针对其执行遍历操作的同组多条光线,但是也有可能在初始遍历操作之后对光线进行重新分组以便进行后续处理)来执行,或者可针对单独的光线来执行。
301.无论以何种方式执行光线与基元相交测试,所有这些的最终结果都是确定哪个几何形状(如果有的话)与哪些光线相交。
302.就这一点而言,应当指出的是,虽然可编程执行单元将(并且在一个实施方案中,确实)使用所指示的几何形状来确定与光线相交的几何形状,但由于光线追踪加速数据结构遍历仅返回能够与该光线相交的几何形状的指示(例如,其存在于光线相交(穿入/穿过)的盒中),因此事实上该光线将实际上不与所指示的几何形状中的任何几何形状相交。因此,虽然由可编程执行单元执行的对与光线相交的任何几何形状的确定可(并且通常将)导致对实际上与该光线相交的几何形状的识别,但可能的情况是,相交确定实际上将确定实际上不存在与该光线相交的几何形状。
303.在光线与基元相交确定确定了实际上不存在与该光线相交的几何形状的情况下(例如,当光线追踪加速数据结构遍历操作返回基元集,但没有基元实际上与该光线相交时),然后,在一个实施方案中,可编程执行单元将其视为光线追踪相交“未命中”(如上文针对光线追踪加速数据结构遍历未识别光线的任何相交的情况所述),然后相应地执行适当的“未命中”“默认”操作。
304.然后,图形处理器使用哪个几何形状与光线相交的确定来继续处理(光线追踪/渲染)操作。
305.例如,然后可以(并且确实)对采样位置的其他组光线重复上述操作,并且一旦完成,然后就可相应地渲染采样位置,例如以光线追踪操作的通常方式。
306.对于被确定为实际上与光线相交的任何几何形状(基元),然后可采取各种处理步骤来确定这在光线投射的采样位置中应该具有的效果(例如,外观)。
307.因此,一旦已确定该光线将实际上相交的几何形状(如果有的话),则可编程执行单元根据被确定为与该光线相交的场景的(任何)几何形状来对帧中该光线所对应的采样位置执行进一步处理。
308.就这一点而言执行的对采样位置的进一步处理可包括(例如,并且在一个实施方案中,根据并基于被确定为与光线相交的场景的任何几何形状)由于所考虑的光线的光线追踪操作而对采样位置进行的任何合适且期望的处理。
309.在一个实施方案中,对作为针对光线的光线追踪操作的结果而执行的采样位置的进一步处理是根据并基于被确定为与该光线相交的场景的几何形状,以及/或者根据并基于正在被执行的特定基于光线追踪的渲染过程(例如,光线追踪过程是否需要投射次光线(在适当的情况下),以及/或者投射特定类型的次光线,或者基于光线追踪的渲染是否旨在仅基于确定的第一交点)。例如,该进一步处理可以是(并且在一个实施方案中是)基于所确定的与之相交的几何形状的表面类型,以及针对该表面类型的预定义操作(例如,就投射任
何次光线而言)。
310.当然,其他布置将是可能的。
311.在一个实施方案中,可(并且是)根据被确定为与对应于采样位置的光线相交的场景的任何几何形状来执行的采样位置的进一步处理包括触发将另外的(例如,次)光线投射到所考虑的采样位置的场景中。
312.在一个实施方案中,对帧中光线所对应的采样位置的进一步处理也可(并且是)根据被确定为与该光线相交的场景的任何几何形状来执行(并且在一个实施方案中也可)包括对帧的采样位置进行渲染(着色)以生成该采样位置的输出数据值(颜色值),例如,并且在一个实施方案中,用于在所考虑帧的采样位置处显示场景视图。
313.因此,在一个实施方案中,对帧中光线所对应的采样位置执行的进一步处理包括以下中的一者:
314.触发对所考虑的采样位置的另外的(例如,次)光线的追踪(投射);以及
315.对采样位置进行渲染(着色),以便为该帧的该采样位置提供输出颜色值。
316.相应地,在一个实施方案中,本文所述的技术包括基于相交对采样位置进行着色,以及/或者基于该相交将另外的光线投射到场景中。
317.如上所述,在一个实施方案中,执行这些操作中的哪些操作基于并根据被确定为与光线相交的几何形状的一个或多个特性以及正在使用的特定基于光线追踪的渲染过程。
318.可以任何合适且期望的方式执行对采样位置的渲染(着色)。在一个实施方案中,其基于并根据采样位置的一条或多条光线的投射的结果,以及所确定的相交的几何形状(如果有的话),并且/或者基于并根据正在被执行的特定基于光线追踪的渲染过程来执行。例如,渲染(着色)处理可以是(并且在一个实施方案中是)基于所确定的与之相交的几何形状的表面类型,以及针对该表面类型的预定义着色操作。
319.在一个实施方案中,该渲染(着色)考虑了已针对采样位置投射的所有光线,因此在一个实施方案中,基于第一相交几何形状(和该几何形状的特性,例如表面特性)以及针对该采样位置投射的任何另外的(次)光线的结果,例如以确定任何照明、反射或折射效果。
320.当然,其他布置将是可能的。
321.在一个实施方案中,一旦所有(期望的)光线已经针对采样位置进行了投射(并且已确定了待针对所考虑的采样位置进行投射的所有光线的几何形状相交(如果有的话)),就执行对该采样位置的渲染(着色)。(如上所述,针对给定采样位置的光线追踪过程可包括确定与从采样位置本身投射的“主”光线相交的任何几何形状,以及确定针对已针对所考虑的采样位置投射的任何次光线的几何形状,等,例如作为针对主光线确定的一个或多个相交的结果。)
322.因此,在一个实施方案中,一旦已针对采样位置确定了光线(几何形状相交(如果有的话)的最终结果,可编程执行单元就将(至少)根据被确定为与已针对采样位置投射的光线相交的场景的任何几何形状来(至少)对帧中的采样位置进行渲染。
323.同样,这可以任何合适且期望的方式进行,并且可以使用被确定为与该采样位置的一条或多条光线相交的几何形状等的任何合适且期望的特性等。
324.一旦基于光线追踪的渲染过程已针对采样位置完成,则这将(并且在一个实施方案中,确实)如上所述生成用于采样位置的适当组的输出数据,例如,并且在一个实施方案
中,以针对采样位置的适当组的颜色(例如,rgb)数据的形式。
325.这将针对帧中的每个采样位置进行(因此,以本文所述技术的方式进行的操作在一个实施方案中针对正被渲染的帧的多个(并且在一个实施方案中,针对每个)采样位置执行),使得将生成示出待渲染场景的视图的最终输出帧,该输出帧然后可例如被写入存储器和/或以其他方式处理以供进一步使用,例如用于在合适的显示器上显示。
326.然后可针对下一帧(例如,待显示的下一帧)重复该过程,以此类推。
327.为了执行光线与基元相交测试和任何所需的后续处理,可编程执行单元可(并且在一个实施方案中,确实)使用与几何形状(例如,基元)相关的另外的信息,诸如几何形状(例如,基元)的适当属性,诸如它们的顶点位置、法线、表面类型/材料)等。这可能是需要的,以便确定实际相交(点),并且相应地用于执行相对于采样位置的进一步处理。
328.因此,在一个实施方案中,该过程使用关于几何形状的特性(例如,就其表面特性、其所属的表面等而言)的信息。该信息能够以任何合适且期望的方式提供,但是在一个实施方案中,使用到数据结构的索引/指针,在这些数据结构中存储了与几何形状的特性相关的数据。
329.在一个实施方案中,一旦光线追踪加速数据结构遍历操作已返回相交确定(例如,如下所述,通过执行另外的程序指令以获取所需特性),可编程执行单元就适当地获取这些特性(另外的特性)。
330.如果需要,也可能或者替代地,对于由该光线追踪加速数据结构遍历操作返回到可编程执行单元的针对待渲染场景的能够与光线相交的几何形状,以及指示该几何形状本身的指示,传达和/或指示关于该几何形状特性的此类信息(例如,以到数据结构的索引/指针的形式,其中数据与该几何形状的特性有关)被存储。
331.在一个实施方案中,光线追踪渲染过程支持使用多个不同的几何模型,例如,并且在一个实施方案中,根据几何形状与视点(相机)和/或场景的任何照明等的距离,并且光线追踪加速数据结构遍历操作与所指示的几何形状一起返回不同模型中的哪个模型应用于该几何形状的指示。
332.本文所述的技术可用于图形处理器能够输出的所有形式的输出。因此,其可在生成用于显示的帧、用于渲染到纹理的输出等时被使用。在一个实施方案中,来自图形处理器的输出被导出到外部(例如,主存储器)以供存储和使用。
333.根据对以本文所述技术的方式操作的要求,图形处理器可以其他方式具有图形处理器的任何合适且期望的形式或配置,并且包括和执行图形处理器可能包含的任何其他合适且期望的处理元件、电路、单元和阶段,并且执行任何合适且期望形式的图形处理流水线。
334.在一个实施方案中,图形处理器是总体图形(数据)处理系统的一部分,该总体图形(数据)处理系统(例如,并且在一个实施方案中)包括主机处理器(cpu),该主机处理器例如执行需要由图形处理器处理的应用。该主机处理器将向图形处理器发送适当的命令和数据,以控制该图形处理器来执行图形处理操作并产生在主机处理器上执行的应用所需的图形处理输出。为了便于这一点,该主机处理器应该(并且在一个实施方案中)还执行用于图形处理器的驱动器以及用于编译待由图形处理器的可编程执行单元执行的程序的一个或多个编译器。
335.该总体图形处理系统可例如包括以下中的一者或多者:主机处理器(中央处理单元(cpu))、图形处理器(处理单元)、显示处理器、视频处理器(编解码器)、系统总线和存储器控制器。
336.该图形处理器和/或图形处理系统还可包括存储本文所述的数据和/或由图形处理器生成的输出数据,并且/或者存储用于执行本文所述的过程的软件(例如,(着色器)程序)的一个或多个存储器和/或存储器设备,并且/或者与该一个或多个存储器和/或存储器设备通信。图形处理器和/或图形处理系统还可与显示器通信,以用于基于由图形处理器生成的数据来显示图像。
337.本文所述的技术还扩展到总体图形处理系统和该系统的操作。
338.因此,本文所述技术的另一个实施方案包括一种操作图形处理系统的方法,该图形处理系统包括:
339.图形处理器,该图形处理器包括:
340.可编程的执行单元,该可编程的执行单元可操作为执行程序以执行图形处理操作,并且其中程序能够被多个执行线程同时执行;
341.该方法包括:
342.生成一个或多个图形着色器程序,该一个或多个图形着色器程序当被图形处理器的可编程执行单元执行时,使得图形处理器使用光线追踪过程来渲染表示包括一个或多个对象的场景视图的帧,
343.其中光线追踪过程使用指示待渲染的场景的几何形状的分布的光线追踪加速数据结构,以确定场景的几何形状,该几何形状能够与正被用于光线追踪操作的光线相交,光线追踪加速数据结构包括多个节点,每个节点与场景内的相应一个或多个盒相关联,
344.该光线追踪过程包括对多条光线执行光线追踪加速数据结构的遍历,以通过测试光线与由加速数据结构的节点表示的盒的相交来确定待渲染的场景的能够与光线相交的几何形状;
345.生成一个或多个图形着色器程序,该一个或多个图形着色器程序当被图形处理器的可编程执行单元执行时,使得图形处理器使用光线追踪过程来渲染表示包括一个或多个对象的场景视图的帧,包括:
346.在执行光线追踪加速数据结构遍历的程序中包括,其中该程序待由一组多个执行线程执行,该组执行线程中的每个执行线程执行对应组光线中的相应光线的遍历操作,使得该组光线一起执行遍历操作,一条或多条光线与盒测试指令集用于测试光线与该一个或多个盒的相交,该一个或多个盒与在遍历操作期间待测试的光线追踪加速数据结构的给定节点相关联,该光线与盒测试指令集当被该组多个执行线程中的执行线程执行时将使得:
347.该图形处理器测试来自正在一起执行遍历操作的该组多条光线中的一条或多条光线与和正被测试的节点相关联的该一个或多个盒的相交;和
348.针对遍历操作的节点返回相交测试的结果;
349.该方法还包括:
350.向该图形处理器提供所生成的一个或多个图形着色器程序以供该可编程执行单元执行;并且
351.该图形处理器的该可编程执行单元:
352.执行该一个或多个图形着色器程序以使用光线追踪过程来渲染表示包括一个或多个对象的场景视图的帧;并且
353.当一组执行线程正在为正在一起执行光线追踪加速数据结构的遍历的对应组光线执行一个或多个程序时,响应于执行线程执行关于光线追踪加速数据结构的节点的该一条或多条光线与盒测试指令集:
354.测试来自正在一起执行遍历操作的该组多条光线中的一条或多条光线与和正被测试的节点相关联的该一个或多个盒的相交;以及
355.返回针对遍历操作的节点的相交测试的结果;
356.该方法还包括:
357.对于一起执行遍历操作的该组光线中的每条光线,确定与该光线相交的任何几何形状;以及
358.根据被确定为与该光线相交的该述场景的任何几何形状,对该帧中该光线所对应的采样位置执行进一步处理。
359.因此,本文所述技术的另一个实施方案包括一种图形处理系统,该图形处理系统包括:
360.图形处理器,该图形处理器包括:
361.可编程的执行单元,该可编程的执行单元可操作为执行程序以执行图形处理操作,并且其中程序能够被多个执行线程同时执行;
362.该图形处理系统还包括:
363.处理电路,该处理电路被配置为:
364.生成一个或多个图形着色器程序,该一个或多个图形着色器程序在由图形处理器的可编程执行单元执行时,使得图形处理器使用光线追踪过程来渲染表示包括一个或多个对象的场景视图的帧,
365.生成一个或多个图形着色器程序,该一个或多个图形着色器程序当被图形处理器的可编程执行单元执行时,使得图形处理器使用光线追踪过程来渲染表示包括一个或多个对象的场景视图的帧,包括:
366.在执行光线追踪加速数据结构遍历的程序中包括,其中该程序待由一组多个执行线程执行,该组执行线程中的每个执行线程执行对应组光线中的相应光线的遍历操作,使得该组光线一起执行遍历操作,一条或多条光线与盒测试指令集用于测试光线与该一个或多个盒的相交,该一个或多个盒与在遍历操作期间待测试的光线追踪加速数据结构的给定节点相关联,该光线与盒测试指令集当被该组多个执行线程中的执行线程执行时将使得:
367.该图形处理器测试来自正在一起执行遍历操作的该组多条光线中的一条或多条光线与和正被测试的节点相关联的该一个或多个盒的相交;和
368.针对遍历操作的节点返回相交测试的结果;
369.处理电路被进一步配置为:
370.向该图形处理器提供所生成的一个或多个图形着色器程序以供该可编程执行单元执行;并且
371.该图形处理器的该可编程执行单元被配置为:
372.执行该一个或多个图形着色器程序以使用光线追踪过程来渲染表示包括一个或
多个对象的场景视图的帧;并且
373.当一组执行线程正在为正在一起执行光线追踪加速数据结构的遍历的对应组光线执行一个或多个程序时,响应于执行线程执行关于光线追踪加速数据结构的节点的该一条或多条光线与盒测试指令集:
374.该执行单元触发测试关于来自正在一起执行光线追踪加速数据结构的遍历的该组多条光线中的一条或多条光线与和正被测试的节点相关联的该一个或多个盒的相交,其中针对遍历操作的节点然后返回相交测试的结果;
375.图形处理器的可编程执行单元被进一步配置为:
376.对于一起执行遍历操作的该组光线中的每条光线,确定与该光线相交的任何几何形状;以及
377.根据被确定为与所述光线相交的所述场景的任何几何形状,对所述帧中所述光线所对应的采样位置执行进一步处理。
378.如本领域的技术人员将理解的,本文所述技术的这些实施方案可(并且在一个实施方案中,确实)包括本文所述技术的任何一个或多个或所有特征。
379.因此,例如,在一个实施方案中,提供给图形处理器以供执行(并且由编译器准备)的一个或多个着色器程序包括:第一指令序列,该第一指令序列针对基于光线追踪的渲染过程执行适当的图形处理操作直到并包括遍历操作;和一旦接收到来自该遍历操作的响应就待执行的一个或多个指令序列(并且,在一个实施方案中,待取决于来自光线追踪加速数据结构的响应(诸如几何形状/表面类型)来执行),执行指令序列在被执行时将使用所确定的由光线追踪加速数据结构遍历返回的几何形状的指示来确定与光线相交的任何几何形状,然后触发关于该光线所对应的采样位置的进一步处理(在一个实施方案中,该进一步处理可以是透射另外的光线和/或对该光线所对应的采样位置进行渲染(着色))。
380.当然,其他布置将是可能的。
381.本领域的技术人员应当理解,本文所述技术的所有所述实施方案可(并且在一个实施方案中,确实)适当地包括本文所述技术的任何一个或多个或所有特征。
382.本文所述的技术可在任何合适的系统(诸如适当配置的基于微处理器的系统)中实现。在一个实施方案中,本文所述的技术在基于计算机和/或微处理器的系统中实现。在一个实施方案中,本文所述的技术在便携式设备(诸如在一个实施方案中,移动电话或平板电脑)中实现。
383.本文所述技术的各种功能可以任何期望且合适的方式执行。例如,本文所述技术的功能可根据需要以硬件或软件实现。因此,例如,除非另外指明,否则本文所述技术的各种功能元件、阶段、单元和“装置”可包括合适的一个或多个处理器、一个或多个控制器、功能单元、一个或多个电路、处理逻辑部件、微处理器布置等,这些部件可操作以执行各种功能等,诸如适当专用硬件元件(一个或多个处理电路)和/或可编程硬件元件(一个或多个处理电路),这些部件可被编程以按所需方式操作。
384.此处还应当指出的是,如本领域的技术人员将理解的,本文所述技术的各种功能等可在给定处理器上复制和/或并行执行。同样,如果需要,各种处理阶段等可共享一个或多个处理电路等。
385.根据本文所述技术的方法可至少部分地使用软件例如计算机程序来实现。因此,
可以看出,当从另外的实施方案来看时,本文所述的技术提供了:计算机软件,该计算机软件特别适于在安装在数据处理器上时执行本文所述的方法;计算机程序元件,该计算机程序元件包括用于当该程序元件在数据处理器上运行时执行本文所述方法的计算机软件代码部分;和计算机程序,该计算机程序包括适于当该程序在数据处理系统上运行时执行本文所述的一个或多个方法的所有步骤的代码。该数据处理器可以是微处理器系统、可编程fpga(现场可编程门阵列)等。
386.本文所述的技术还扩展到包括此类软件的计算机软件载体,该软件在用于操作显示处理器或包括数据处理器的微处理器系统时,使得所述控制器或系统结合所述数据处理器以执行本文所述技术的方法的步骤。此类计算机软件载体可以是物理存储中间体,诸如rom芯片、cd rom、ram、闪存存储器或磁盘,或者可以是信号,诸如通过导线的电子信号、光信号或诸如发送到卫星的无线电信号等。
387.还应当理解,并非本文所述技术的方法的所有步骤都需要由计算机软件执行,因此相对于另一个广泛的实施方案,本文所述的技术提供了计算机软件和安装在计算机软件载体上的用于执行本文所述方法的步骤中的至少一个步骤的此类软件。
388.因此,本文所述的技术可适当地体现为与计算机系统一起使用的计算机程序产品。此类具体实施可包括一系列计算机可读指令,这些计算机可读指令固定在有形非暂态中间体上,诸如计算机可读中间体,例如磁盘、cd rom、rom、ram、闪存存储器或硬盘。该具体实施还可包括能够经由调制解调器或其他接口设备通过有形中间体(包括但不限于光通信线路或模拟通信线路)或无源地使用无线技术(包括但不限于微波、红外或其他传输技术)传输至计算机系统的一系列计算机可读指令。该系列计算机可读指令体现了本文先前所述的功能的全部或部分。
389.本领域的技术人员将会理解,此类计算机可读指令可以多种编程语言编写,以与许多计算机架构或操作系统一起使用。此外,此类指令可使用目前或将来的任何存储器技术(包括但不限于半导体、磁性或光学技术)来存储,或者使用目前或将来的任何通信技术(包括但不限于光学、红外或微波技术)来传输。可以设想的是,此类计算机程序产品可以作为可移除中间体与附随的印刷或电子文档(例如收缩包装软件)一起分发,可以预加载计算机系统(例如系统rom或固定磁盘),或者可通过网络(例如互联网或万维网)从服务器或电子公告板来分发。
390.现在将仅以举例的方式并参考附图来描述本文所述技术的实施方案。
391.本实施方案涉及图形处理器的操作,例如在如图1所示的图形处理系统中,当使用基于光线追踪的渲染过程执行待显示的场景渲染时。
392.光线追踪是一种渲染过程,其涉及从视点(有时称为“相机”)通过图像平面(其为正被渲染的帧)中的采样位置将光线的路径追踪到场景中,以及模拟这些光线与该场景中的对象之间的交互效果。输出数据值(例如,图像中采样位置的颜色)基于场景中与穿过采样位置的光线相交的对象以及那些对象的表面的特性来确定。因此,光线追踪过程涉及针对每个采样位置确定在场景内与穿过采样位置的光线相交的一组对象。
393.图2示出了示例性“全”光线追踪过程。光线20(“主光线”)从视点21(例如,相机位置)穿过图像平面(帧)23中的采样位置22向后投射到正被渲染的场景中。光线20首先与场景中的对象25相交的点24被识别,该对象例如是基元(在本实施方案中基元是三角形的形
式,但是也可包括其他合适的几何形状)。该第一相交将与该场景中最靠近采样位置的对象在一起。
394.阴影光线26形式的次光线可从第一交点24投射到光源27。根据对象25的表面的材料,可从交点24追踪到反射光线28形式的另一条次光线。如果对象至少在一定程度上是透明的,则可考虑折射的次光线。
395.在期望将阴影和反射添加到图像中的情况下,可使用此类次光线的投射。次光线可在每个光源的方向上投射(并且,根据该光源是否为点源,可将多于一条次光线投射回到该光源上的点)。
396.在图2所示的示例中,在将反射光线追踪回光源之前,仅考虑主光线20的单次弹射。然而,如果需要,可考虑更高次数的弹射。
397.然后根据主光线和任何次光线投射与场景中对象的相交来确定采样位置22的输出数据,即其颜色值(例如,rgb值)。关于待在图像平面(帧)23中考虑的每个采样位置进行了相同的处理。
398.为了便于此类光线追踪处理,在本发明的实施方案中,当确定与图像平面中的采样位置相关联的光线的相交数据时,使用指示待渲染场景中的几何形状(例如,对象)的加速数据结构来识别能够与光线相交的几何形状的子组。
399.光线追踪加速数据结构表示并指示正被渲染场景中的几何形状(例如,对象)的分布,并且具体地讲,表示并指示落入该场景的(即,正被考虑的)总体盒中的相应(子)盒内的几何形状。在本实施方案中,使用呈层次包围盒(bvh)树形式的光线追踪加速数据结构。
400.图3示出了示例性bvh树30,该示例性二叉bvh树通过将整个场景包封在轴对准的包围盒(aabv)例如立方体中,然后根据任何合适且期望的例如各种细分方案将该包围盒递归地细分成连续子aabv直到达到期望的最小细分(盒)来构造(例如,每子节点相同数量的对象,基于遍历成本等)。
401.在该示例中,bvh树30是宽树,其中每个包围盒被细分成多达六个子aabv。然而,通常,可使用任何其他合适的树结构,并且树的给定节点可具有任何合适的和期望数量的子节点。
402.因此,bvh树30中的每个节点将具有与之相关联的待渲染场景的相应盒,其中末端、叶节点31各自表示该场景的特定最小细分盒,并且任何父节点表示其子节点的盒并与其相关联。每个叶节点还将相应地与为场景定义的至少部分落在叶节点对应的盒内(例如,其质心落在所讨论盒内)的几何形状相关联,其中叶节点31表示为场景定义的落在叶节点31的对应盒内的基元的唯一(非重叠)子集。该bvh树加速数据结构还存储(用于节点本身或以其他方式,例如作为边带信息)适当的信息,以允许该树基于光线的起点和方向逐盒地遍历,以便能够识别表示该光线穿过的盒的叶节点。
403.这然后允许并便于针对该bvh树中的包围盒的层次测试光线,直到找到叶节点。然后仅需要测试与特定叶节点相关联的几何形状是否与该光线相交。
404.图4是示出本文所述技术的实施方案中的总体光线追踪过程的流程图,并且该光线追踪过程将在(并且由)图形处理器2执行。
405.首先,该场景的几何形状被分析并用于获得加速数据结构(步骤40),例如以bvh树结构的形式,如上所述。这可以任何合适且期望的方式完成,例如通过图形处理器2上的初
始处理遍。
406.然后生成主光线,从相机穿过图像平面中的特定采样位置(帧)(步骤41)。然后针对主光线遍历加速数据结构(步骤42),并且识别对应于该光线穿过的第一盒的叶节点,该第一盒包含可能与该光线相交的几何形状。然后确定光线是否与该叶节点中的任何几何形状例如基元(如果有的话)相交(步骤43)。
407.如果在该节点中未识别出与光线相交的(有效)几何形状,则该过程返回到步骤42,并且该光线继续遍历加速数据结构和该光线穿过的下一盒的叶节点,该下一盒可包含识别出与该光线相交的几何形状,并且在步骤43处执行对相交的测试。
408.对(可能)与光线相交的每个叶节点重复该过程,直到识别出与该光线相交的几何形状。
409.当识别出与该光线相交的几何形状时,然后确定是否针对所考虑的主光线(以及因此采样位置)投射任何另外的(次)光线(步骤44)。这可基于(例如,并且在一个实施方案中基于)已发现与光线相交的几何形状(例如,其表面特性)的性质,以及所使用的光线追踪过程的复杂性。因此,如图4所示,可生成从交点发出的一条或多条次光线(例如,阴影光线、折射光线和/或反射光线等)。然后相对于每条次光线执行步骤42、43和44。
410.考虑到对象在主交点处的表面特性、与次光线相交的任何几何形状等,一旦没有待投射的另外的光线,就基于主光线的投射结果和所考虑的任何次光线来确定该光线所对应的采样位置的阴影颜色(步骤45)。然后将针对采样位置的着色颜色存储在帧缓冲区中(步骤46)。
411.如果在步骤42中没有可被识别的能够包括与给定光线(无论是主光线还是次光线)相交的几何形状的(有效)节点(并且不存在针对采样位置待投射的另外的光线),则该过程移动到步骤45,并且执行着色。在这种情况下,该着色在一个实施方案中基于某种形式的“默认”着色操作,该“默认”着色操作待在未发现与光线的相交的几何形状的情况下执行。这可包括例如简单地将默认颜色分配给采样位置,并且/或者具有定义的默认几何形状以在场景中未发现实际几何形状相交的情况下使用,其中该采样位置随后根据该默认几何形状被着色。当然,其他布置将是可能的。
412.针对待在图像平面(帧)中考虑的每个采样位置执行该过程。
413.图5示出了能够用于本文所述技术的实施方案中的另选光线追踪过程,其中仅执行相对于图3和图4所述的全光线追踪过程的步骤中的一些步骤。此类另选的光线追踪过程可被称为“混合”光线追踪过程。
414.在该过程中,如图5所示,首先使用光栅化过程确定图像平面(帧)中每个采样位置的第一交点50,并将其存储在被称为“g缓冲器”51的中间数据结构中。因此,为每个采样位置生成主光线以及识别场景中该主光线与几何形状的第一交点的过程被替换为初始光栅化过程以生成“g缓冲区”。该g缓冲区包括指示图像平面(帧)中的每个采样位置的每个第一(最近)交点的深度、颜色、法线和表面特性的信息(以及任何其他适当且期望的数据,例如,反照率等)。
415.然后可从第一交点50开始投射次光线(例如,到光源53的阴影光线52)和反射光线54,并且基于首先相交的几何形状的特性以及次光线与场景中的几何形状的相交来确定对这些采样位置进行的着色。
416.参见图4的流程图,在此类混合过程中,将省略针对主光线的全光线追踪过程的步骤41、42和43的初始遍,因为不需要投射主光线并确定它们与场景中的几何形状的第一相交。相反,从g缓冲区获得了每个采样位置的第一交点数据。
417.该过程然后可基于从g缓冲区获得的每个像素的第一交点或者在待考虑从第一交点发出的次光线的情况下前进至着色阶段45,这些次光线将需要以参考图4所述的方式被投射。因此,步骤42、43和44将以与先前针对任何次光线的全光线追踪过程所述相同的方式来执行。
418.针对采样位置确定的颜色将基于针对采样位置确定的着色颜色以与图4的步骤46相同的方式写入帧缓冲区,该着色颜色基于第一交点(如从g缓冲区获得的)以及在适用的情况下使用光线追踪确定的任何次光线与场景中的对象的相交。
419.本实施方案具体地讲,涉及图形处理器在执行基于光线追踪的渲染时的操作,例如,如上文参考图2至图4所述,并且具体地讲,涉及作为光线追踪操作的一部分执行的光线追踪加速数据结构遍历和几何形状相交(图4中的步骤42至步骤43)。
420.图6示意性地示出了本发明实施方案的图形处理器(gpu)60的相关元件和部件。
421.如图6所示,gpu 60包括一个或多个着色器(处理)核心61、62以及存储器管理单元63和二级高速缓存64,该二级高速缓存可操作为(例如,经由适当的互连器和(动态)存储器控制器)与片外存储器系统68通信。
422.图6示意性地示出了一个着色器核心61的相关配置,但是如本领域的技术人员将理解的,图形处理器60的任何其他着色器核心将以对应的方式配置。
423.(图形处理器(gpu)着色器核心61、62是可编程处理单元(电路),其通过运行针对要生成的输出(诸如渲染目标,例如帧)中的每个“项目”的小程序来执行处理操作。就这一点而言,“项目”可以是例如顶点、一个或多个采样位置等。着色器核心将通过一个或多个执行线程来处理每个“项目”,该一个或多个执行线程将执行针对所考虑的“项目”所考虑的着色器程序的指令。通常,将存在各自同时(并行)执行的多个执行线程。)
424.图6示出了与本发明实施方案的操作相关的图形处理器60的主要元件。如本领域的技术人员将理解的,可存在图形处理器60的在图6中未示出的其他元件。此处还应当指出的是,图6仅是示意性的,并且例如在实践中,即使所示的功能单元在图6中被示意性地示出为独立单元,这些功能单元也可共享重要的硬件电路。还应当理解,除非另外指明,否则如图6所示的图形处理器的元件和单元等中的每一者可根据需要来实现,并且将相应地包括例如用于执行必要的操作和功能的适当电路(处理逻辑)等。
425.如图6所示,图形处理器60的每个着色器核心包括适当的可编程执行单元(执行引擎)65,该可编程执行单元可操作为执行供执行线程用于执行图形处理操作的图形着色器程序。
426.着色器核心61还包括指令高速缓存66,该指令高速缓存存储要由可编程执行单元65执行以执行图形处理操作的指令。如图6所示,待执行的指令将经由互连器69和微型tlb(转换后备缓冲器)70从存储器系统68中获取。
427.着色器核心61还包括与可编程执行单元65通信的适当的加载/存储单元76,该加载/存储单元可操作为例如加载适当的高速缓存、数据等以由可编程执行单元65处理,并且将数据写回存储器系统68(用于在可编程执行单元中执行的程序的数据加载和存储)。同
样,此类数据将由加载/存储单元76经由互连器69和微型tlb 70获取/存储。
428.为了执行图形处理操作,可编程执行单元65将执行用于相应执行线程(例如,对应于要渲染的帧的相应采样位置)的图形着色器程序(指令序列)。
429.因此,如图6所示,着色器核心61还包括线程创建器(生成器)72,该线程创建器可操作为生成由可编程执行单元65执行的执行线程。
430.如图6所示,着色器核心61还包括相交测试电路74,该相交测试电路与可编程执行单元65通信,并且响应于从可编程执行单元65接收的消息75,该相交测试电路可操作为在光线追踪加速数据结构遍历(即图4的步骤42的操作)期间对作为基于光线追踪的渲染过程的一部分处理的光线执行所需的光线与盒测试。
431.在本实施方案中,相交测试电路74还可操作为执行所需的光线与基元测试(即,图4的步骤43的操作)。相交测试电路74还能够与加载/存储单元76通信,用于加载这种相交测试所需的数据。
432.在本实施方案中,图形处理器的相交测试电路74是(基本上)固定功能的硬件单元(电路),其被配置为在光线追踪加速数据结构的遍历期间执行所需的光线与盒相交测试和光线与基元相交测试,以确定待渲染的场景的几何形状,该几何形状可能(并且确实)与正被用于光线追踪操作的光线相交。
433.图7更详细地示出了相交测试电路74与着色器核心61、62之间的通信。如图7所示,在本实施方案中,相交测试电路74包括用于执行光线与盒测试(rt_ray_box)77和用于执行光线与基元测试(rt-ray-tri)75的相应硬件电路。因此,着色器核心61、62包含适当的消息块614、616、624、626,用于当期望在遍历操作期间执行相交测试时,相应地向相应光线与盒测试电路77和光线与基元测试电路75发送消息。
434.同样如图7所示,这些消息块与着色器核心61、62的各自寄存器堆612、622通信,使得相交测试的结果可被写入寄存器文件。具体地讲,在本实施方案中,使用遍历堆栈来管理遍历操作,该遍历堆栈被维护在共享寄存器文件集中,用于处理正在执行遍历操作的光线的一组多个执行线程(warp)。
435.图8示出了本实施方案中的堆栈布局。如图8所示,遍历堆栈包括条目80的列表。每个条目与待测试的下一个节点地址的指示相关联,例如以到下一个节点地址83的合适指针的形式。叶计数82字段用于追踪该节点是对应于叶节点还是内部节点,并因此追踪是否触发光线与盒测试或光线与基元测试。提供了另一个字段81,其指示对于所考虑的节点,应该测试一起执行遍历的该组光线中的哪些光线。
436.如上所述,在本实施方案中,经由为处理光线的执行线程分配的共享寄存器集,作为整体为该组光线管理遍历堆栈。因此,这可有助于减少存储器带宽,因为可在图形处理器本地为作为整体的该组管理遍历堆栈。
437.图9是示出在本文所述技术的实施方案中,在执行基于光线追踪的渲染过程以渲染场景的视图时图形处理器60的着色器核心61的操作的流程图。
438.图9示出了关于正被渲染的帧的给定采样位置的操作。该操作将针对正被渲染的帧的每个采样位置重复,并且由活动的且用于渲染帧的每个相应着色器核心重复。
439.如上所述,在本实施方案中,通过为采样位置生成相应的执行线程,然后执行针对这些线程的适当着色器程序来渲染这些采样位置。因此,该过程将从线程创建器72生成对
应于正被渲染的采样位置的适当执行线程开始。然后执行线程将执行初始光线追踪着色器程序以执行针对采样位置的基于光线追踪的渲染过程。
440.在本实施方案中,针对采样位置执行的初始光线追踪着色器程序将尤其包括一个或多个指令,该一个或多个指令当被执行时触发可编程执行单元65向相交测试电路74发送消息75,以在所考虑的光线与待测试的bvh树的给定节点之间执行所需的光线与盒相交测试或光线与基元相交测试。
441.在本实施方案中,着色器程序由一组多个执行线程(例如warp)来执行,其中每个执行线程对一组多条光线中的相应光线执行遍历操作,从而使得这些光线作为整体一起执行遍历操作。为了促进这一点,执行遍历操作的着色器程序可包括初始指令,该初始指令确保(强制)该组执行线程中的所有执行线程处于“活动”状态,例如使得遍历操作然后可使用该执行线程组作为整体来执行,例如处于simd执行状态。
442.因此,如图9所示,当在针对采样位置执行初始光线追踪着色器程序期间,可编程执行单元65遇到并执行这样的“enter_simd_state”指令时(步骤90),此时可确保执行该程序的该组执行线程中的所有执行线程都处于活动(simd)状态。
443.然后,为该组执行线程维护的遍历堆栈可被适当地初始化以用于遍历操作(步骤91)。
444.然后从堆栈中弹出遍历堆栈中的第一条目(例如根节点),以便开始遍历操作(步骤92)。
445.此时,根节点将是遍历堆栈中的唯一条目,使得不会有堆栈下溢(步骤93-否),并然后着色器程序继续确定该节点是叶节点还是内部节点(步骤94)。
446.对于根节点以及在遍历操作期间遇到的其他内部节点,则有必要执行所需的光线与盒相交测试,以确定该节点是否表示可与一起执行遍历操作的该组光线中的光线相交的任何几何形状。这是通过将适当的光线与盒测试指令(“rt_ray_box”)包括到着色器程序中来完成的,当执行单元执行该指令时(步骤95)将触发执行单元向相交测试电路74的光线与盒相交测试电路77发送消息,以执行期望的光线与盒测试。
447.图10是示出根据本文所述技术的实施方案的光线与盒相交测试操作的流程图。
448.如图10所示,当关于bvh树中的给定节点执行光线与盒测试指令(“rt_ray_box”)时,选择执行遍历操作的该组多条光线中需要被测试与该节点相交的第一光线(如遍历堆栈中的适当字段81所示)(步骤951),并然后针对与所考虑的节点相关联的每个子节点盒对其进行迭代测试(步骤952)。
449.因此,对于每个子节点盒,确定光线是否与子盒相交(步骤953),并且如果光线确实相交,则相应地设置该子节点的命中掩模(图8中的字段81)以反映这一点。如果光线不与第一子节点盒相交,则针对下一个子节点盒测试光线,依此类推,直到该光线针对子节点盒的迭代完成(步骤955)。然后,测试对针对节点待测试的光线进行迭代,直到针对所有子节点盒测试了所有光线(步骤956)。
450.对于相交的每个子节点盒,然后返回相交测试的结果,其中适当的条目被推送到遍历栈,使得子节点然后可相应地进行测试(步骤957)。
451.作为这种情况的一部分,首先测试了相交测试的结果的推送是否将导致遍历堆栈溢出,即因为堆栈已满(步骤958)。只要在遍历栈中存在可用条目(步骤958-否),就将合适
的条目推送到遍历堆栈,其中该条目包括用于子节点的命中掩模(图8中的字段81)以及子节点的叶计数和指示(图8中的字段82和83)。
452.例如,然后确定子节点是否是叶节点(步骤960)。如果节点不是叶节点,则可计算节点索引,指示哪个子节点与节点相关联(步骤961)并且相应地推送到遍历堆栈。另一方面,如果子节点是叶节点,则然后计算叶大小(步骤964),并且计算适当叶索引,指示哪个基元由叶节点表示(步骤955),然后将其推送到遍历堆栈。
453.对被确定为与光线相交的每个子节点都这样做(步骤963),直到每个子节点的相应条目都被适当地添加到遍历堆栈中。
454.然后相应地返回相交测试的结果,并且将其推送到遍历堆栈以用于遍历操作。在相交测试的结果溢出遍历堆栈的情况下(步骤96-是),然后将整个遍历堆栈推送到存储器(步骤97),并且将其指示记录到遍历堆栈中。然后可检查这一点(在步骤93),并且如果已经发生溢出事件(步骤93-是),则检查是否可从存储器加载堆栈(步骤103),如果可以,则适当地加载堆栈(步骤104),并且弹出堆栈条目(步骤92),以便遍历操作可继续。
455.另一方面,如果由于任何原因不能从存储器加载堆栈,则在这种情况下,遍历操作可完成(步骤106),其中执行线程组相应地首先退出simd状态(步骤105)。
456.因此,遍历堆栈可被处理,以便测试bvh树的各个节点,从而确定哪些节点表示可与一起执行遍历操作的该组光线中的光线相交的几何形状。
457.当遍历操作到达bvh树的给定分支末端的叶节点时,使得确定该节点是叶节点(在步骤94),因此遍历操作指示该叶节点表示可能与光线相交的几何形状,然后确定实际的几何形状相交。
458.这可以各种方式来完成,但是在本实施方案中,这是通过将适当的指令(“rt_ray_tri”)包括到着色器程序中来完成的,当执行单元执行该指令时(步骤98)将触发执行单元向相交测试电路74的光线与基元相交测试电路75发送消息,以执行期望的光线与基元测试。
459.图11是示出根据本文所述技术的实施方案的光线与基元相交测试操作的流程图。
460.如图11所示,响应于执行关于叶节点的光线与基元相交测试(“rt_ray_tri”)指令,由叶节点表示的基元集(例如三角形)然后被加载用于测试。
461.对于由叶节点表示的每个基元(三角形)(步骤981),被确定为与叶节点盒相交的光线(如图8中的命中掩码字段81所示)然后针对基元进行迭代测试(步骤982),以确定光线是否命中基元(步骤983)。如果没有命中,则接着测试下一条光线(步骤985),依此类推,直到已经针对基元测试所有光线。
462.对于任何命中,然后确定是否存在“不透明”命中(步骤984)。如果光线命中不透明几何形状,则光线不需要进一步传播,并因此可以相应地更新范围(步骤986)。然后可确定光线是否被标记为在第一次命中时终止(步骤987)。如果是,则可适当地更新命中掩模(图8中的字段81)(步骤988),并然后可在下一条光线上进行测试。
463.一旦已经针对(第一)基元测试了所有光线,则确定是否存在任何非不透明命中(步骤989)。对于被确定为命中“非不透明”基元的任何光线,光线与基元测试可能需要提前终止,例如,结果被相应地返回到着色器程序,使得着色器程序可确定如何处理非不透明命中(即,命中是否需要被计数)。因此,在存在任何非不透明命中的情况下,光线与基元测试
可提前终止(不测试任何更多的基元),其中遍历状态被相应地更新(步骤991)。在那种情况下,针对所有光线终止光线与基元相交测试,使得该组光线保持一起用于遍历操作。
464.否则,如果不存在非不透明命中,则光线与基元相交测试进行下一个基元的测试(步骤990),并且迭代地测试该组光线中的光线与该基元的相交,依此类推,直到已经测试叶节点的所有基元。一旦光线与基元相交测试完成,遍历状态因此就可用相交测试的结果相应地进行更新(步骤991),并然后操作完成(步骤992)。
465.遍历操作因此使用所提供的关于光线的信息来遍历光线追踪加速数据结构,以确定能够与所考虑的光线相交的待渲染场景的几何形状。在本实施方案中,遍历过程用来基于光线的位置和方向遍历光线追踪加速数据结构,从而针对光线依次穿过的场景的每个盒确定该盒中是否存在任何几何形状(由光线追踪加速数据结构指示),直到找到光线与针对场景定义的几何形状的第一(潜在)相交。
466.当然,其他布置将是可能的。
467.针对光线的光线追踪加速数据结构遍历可包括针对该光线遍历单个光线追踪加速数据结构,或者针对该光线遍历多个光线追踪加速数据结构(例如,在场景的整个盒和/或几何形状由多个不同的光线追踪加速数据结构表示的情况下,以及/或者在首先遍历指示另外的待遍历的光线追踪加速数据结构的初始光线追踪加速数据结构的情况下)。
468.一旦光线追踪加速数据结构遍历操作74已执行针对光线的一个或多个必要的遍历,并且已确定与光线相交的几何形状,就将该信息返回到可编程执行单元65,以供可编程执行单元根据并基于所确定的针对光线的遍历的结果对所考虑的采样位置执行进一步处理。
469.例如,在本实施方案中,可编程执行单元65然后可执行另外的“表面处理”着色器程序,该“表面处理”着色器程序将基于光线追踪加速数据结构遍历的结果对所考虑的采样位置执行进一步处理。
470.在本实施方案中,存在可根据已被光线追踪加速数据结构遍历电路确定为与光线相交的几何形状的类型(并且具体地讲,根据由光线追踪加速数据结构遍历电路确定的几何形状的特定表面类型(一种或多种表面特性))来执行的多个不同组的另外的“表面处理”着色器程序。
471.因此,该过程操作用来选择待执行的另外的“处理”着色器程序,以根据几何形状的类型(并且具体地表面类型)对对应于光线的采样位置执行进一步处理,该几何形状已被光线追踪加速数据结构遍历电路确定为与光线相交。
472.为了执行和控制该操作,在本实施方案中,光线追踪加速数据结构遍历电路触发生成执行线程,该执行线程将执行(并且执行)针对所考虑的几何形状类型所选择的另外的“表面处理”着色器程序。
473.可编程执行单元65然后执行所生成的线程的所选择的另外的着色器程序(例如,图4中的步骤45)。
474.一旦已生成所考虑的采样位置的最终输出值,就完成关于该采样位置的处理。然后可以相似的方式处理下一个采样位置,依此类推,直到帧的所有采样位置都被适当地加阴影。然后可输出帧,例如以用于显示,并且以相似方式处理下一帧,依此类推。
475.如根据上文将理解的,本实施方案的基于光线追踪的渲染过程尤其涉及图形处理
器60的可编程执行单元65执行适当的着色器程序来执行基于光线追踪的渲染。在本实施方案中,这些着色器程序由用于图形处理器60的编译器(着色器编译器)12生成,该编译器例如在图形处理系统的中央处理单元(cpu)诸如主机处理器上执行(并且在一个实施方案中,作为用于图形处理器的驱动器11操作的一部分)。
476.编译器(驱动器)将从需要基于光线追踪的渲染的应用13接收待执行的一个或多个基于高级光线追踪的渲染着色器程序,然后将该一个或多个程序编译成适当的着色器程序以用于由图形处理器执行,并且作为该处理的一部分,如上所述,将在要由该图形处理器执行的所编译的着色器程序中的一者或多者中包括一个或多个适当的“光线与盒”和“光线与基元”相交测试指令,以使得可编程执行单元向相交测试电路74发送消息,从而执行期望的相交测试。
477.编译过程(编译器)可使用任何合适的和期望的编译器技术来实现这一点。
478.图12示出了编译过程的实施方案。
479.如图12所示,用于图形处理器的编译器将接收用于编译的一个或多个基于光线追踪的渲染程序(步骤100)。
480.编译器将然后分析所提供的着色器程序代码,以在该着色器程序代码中的光线遍历操作期间识别所需相交测试的实例(步骤101),并在所编译的着色器程序中的适当点处插入对应指令(步骤102)。
481.还可识别相交几何形状所需的“表面处理”操作(步骤103),并编译相应“表面处理”着色器程序(步骤104)。
482.然后,这些编译着色器程序将被发布给图形处理器以用于执行(例如,存储在图形处理器的和/或图形处理器能够访问的适当存储器中,使得图形处理器可根据需要获取所需着色器程序以用于执行)(步骤105)。
483.从上文可以看出,本文所述的技术在其实施方案中至少可提供用于执行基于光线追踪的渲染的更有效的过程。至少在本文所述技术的实施方案中,这通过使用相交测试电路来执行针对正被处理的光线的光线与盒相交测试来实现,但是也可利用通过使用图形处理器的可编程执行单元执行一个或多个适当的着色器程序来执行基于光线追踪的渲染的其他处理。
484.上述具体实施方式是为了举例说明和描述的目的而呈现的。其并非旨在穷举或将技术限制为所公开的精确形式。按照上述教导内容,许多修改形式和变型形式是可能的。选择所述实施方案是为了最佳地解释本技术的原理及其实际应用,从而使得本领域的其他技术人员能够最佳地利用各种实施方案中的技术并且具有适合于所设想的特定用途的各种修改。本发明的范围旨在由所附权利要求限定。
再多了解一些

本文用于创业者技术爱好者查询,仅供学习研究,如用于商业用途,请联系技术所有人。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献