标识符(一个索引/多个索引)被存储在用于该分块的对象列表中,这些修正图元可从该标识符生成。换句话说,各修正图元中的每个修正图元可以被分配与输入图元相同的标识符(一个索引/多个索引)。例如,如果输入图元被分配整数0,那么,该图元的修正示例中的每个修正实例也被分配索引O。用于输入图元的一个索引/多个索引可以为位于该分块内的图元的修正实例的每个修正实例存储一次。不过,用于输入图元的一个索引/多个索引只可以每列表被存储一次,而不管位于特定分块内的该图元的实例的数量。
[0067]同样,可能无法从用于分块的对象列表识别在该对象列表中识别的图元哪些或多少实例位于该分块内。虽然如此,不过如果该图元的至少一个实例位于该分块内,这个实施例具有修正图元可藉此导出的输入图元在对象列表中被识别的优点,而不管该输入图元本身是否位于该分块内。因此,位于分块内的所有修正图元可以被处理,以使用分块的对象列表对该分块精确着色。而且,这种方法允许存储在对象列表中的数据被以高度压缩的格式存储。
[0068]如下面所更加详细描述的,为了着色分块,相同的修正功能被再次应用于在对象列表中已识别的每个图元。随后,一旦再次生成修正图元,则位于分块内的修正图元(如果有的话)可以使用如上所述的众所周知技术来确定。
[0069]然而,这种方法不仅具有位于分块内的任何修正图元必须再次生成,而且实际上不位于分块内的修正图元可能要进行不必要计算的缺点。假设每个图元可以具有成百上千的修正实例,这种情况会产生计算资源的明显浪费。因此,在一种方法中,包括若干位的标识可以被存储在用于分块的对象列表或存储器的另一区域中,指示在该对象列表中识别的各图元具有在该分块内的修正实例。这可以避免不得不对在对象列表中识别的所有图元再次应用修正功能,同时保留能够以高度压缩格式将数据存储在对象列表中的优点。
[0070]如上所述,修正图元可以以增量方式生成,使得一个修正图元被从输入图元形成,并且随后第二修正图元被从该修正图元形成,等等,直到导出修正图元序列。同样,除了存储识别图元的标识符以外,修正图元序列可从该标识符导出,可以存储指示位于分块内的这些修正图元序列中的第一和/或最后位置的数据。这个数据可以被存储在用于该分块的对象列表中或存储器的另一区域中。这个方法具有的优点在于:在只有该修正图元的序列的子集位于特定分块内的情况下,不需要关于该分块再次导出修改的图元的所有序列,如下面更详细解释的。
[0071]不过,需要被存储用于对象列表中已识别的图元中的每个图元的指示第一和/或最后序列位置的数据有折衷。在这个描述的实施例中,本领域的技术人员应当理解,在各图元是镶嵌图元的情况下,可以有由每个补丁生成的数以千计的图元。存储用于图元中的每个图元的这个位置数据将需要大量的存储器。
[0072]确定位于分块内的任何修正图元的最高和/或最低序列位置可以有一个折衷,其中,任何修正图元从镶嵌图元导出,镶嵌图元从表面数据的补丁导出。这个方法提供了整个补丁的每分块只需要两个整数被存储。这个技术可以导致更多的非必需的修改图元的生成,但需要更少的存储器,同时避免再次导出某些非必需的修正图元。
[0073]在某些实施例中,可以有一个以上的应用于源几何图形的任何给定单元的着色(修正)步骤,以便导出最终几何图形。这些步骤中的每个步骤可以向输入图元应用不同的修正功能或程序。每个修正功能可以被分配识别用于生成修正图元的修正功能的标识符(或其序列)。该标识符可以被存储在涉及包含这些修正图元的分块的对象列表中。指示在修正图元序列中的第一和/或最后位置的数据可以关于修正单元中的每个修正单元被存储。索引列表可以例如使用索引/顶点缓冲器以本领域技术人员已知的方式来压缩。可以提供用于压缩通过表面数据的补丁镶嵌导出的镶嵌图元的索引列表的若干不同技术,该技术可以利用表面数据的镶嵌图元的内部结构的知识。向修正的图元分配与输入图元相同的一个索引/多个索引的优点在于可以利用相同的压缩技术来压缩该索引/多索引。
[0074]用于光线跟踪的几何图形的预处理
[0075]准备光线跟踪所需的处理在某些方面不同于用于光栅化的几何图形的处理。一个主要区别在于:通过形成在3D场景中具有不同的几何图形抽象等级的加速结构,光线跟踪复杂场景的效率通常得以提高。例如,加速结构可以是各单元的层次结构布置,其中单元中的每个单元包围3D空间中的各自体积。每个体积可以包围单个图元、多个图元或其一部分。用于光线跟踪的加速结构可以被形成用于最终几何图形(即,在经编程几何图形修正或形成后,诸如通过使用位移几何图形或镶嵌)。在某些情况下,通过提供更详细的加速结构,确定3D场景中的交叉点的效率可得以提高。不过,更详细的加速结构预计比更颗粒状的加速结构消费更多的存储器。
[0076]为了实现使用一种或多种光栅化和光纤跟踪的存储器有意识的(consc1us)渲染方法,避免形成和存储整个3D场景的最终几何图形的技术可以被采用。这些技术可以包括响应于需要形成最终几何图形或其他几何图形相关的构造(例如,加速结构的一部分)。在产生每分块对象列表后,可以通过逐步通过每个分块来进行拼接,并且处理从每个对象列表指示的几何图形。因此,根据实施,拼接计算可以是相对规律和可预测的。
[0077]不过,在3D场景中的遍历光线可以是非常不规律的,特别是全局照明光线,诸如反射或折射光线,因为源自不同位置的各光线将散射并在不同方向行进(与从场景“照相机”跟踪的主要光线相比)。而且,在某些情况下,在拼接过程中,各光线可以被发出用于遍历,其中,用于各像素的几何图形的可视表面被确定。在这些可视表面被确定后,随后这些表面被着色或以其他方式被处理。例如,各光线可以从表面投出以确定通过光对该表面点的阴影。例如,各光线可以随机发出用于全局照明采样。在这里,术语像素往往被使用,但是各像素可以包含各种各样的分段。而且,当确定该像素的可视表面时,通过在一个或多个方向偏移该像素,可以提取每个像素的多个采样。
[0078]用于光线跟踪的几何图形的预处理可以受益于被执行用于拼接目的的预处理。用于拼接的预处理还可以受益于被执行设置光线跟踪的几何图形处理。解释了进行用于拼接和光线跟踪的最终几何图形的预处理以及按需生成用于拼接和光线跟踪的最终几何图形的示例时机。
[0079]在一个方面,用于光线跟踪的几何图形预处理提供在加速结构的各单元之间分配最终几何图形。在加速结构中的这些单元的分配可以根据对象列表数据的实施,通过用于这些单元的每个单元的压缩的对象列表数据来表示,但是其中是否包括对象列表中的数据的决定标准是3D体积内的对象是否与特定单元相关联。
[0080]最终几何图形的产生
[0081]根据本公开产生的最终几何图形可以从源几何图形产生,源几何图形根据一个或多个修正功能来修正。这些修正功能可以连续应用。修正功能的级联也可以表示或分解成少量单独识别步骤或过程的一部分。在实施本公开的背景下,其中,产生3D空间的特定分块或区域的最终几何图形的源几何图形在列表中被识别,该列表还可以包含识别什么修正过程将要对该数据执行以产生最终几何图形的数据。因此,再次形成3D场景的特定部分的最终几何图形可以通过向已识别的源几何图形应用已识别的修正序列来执行(凭借被识别为与屏幕空间像素的分块或用于光线跟踪的3D空间的体积相关)。
[0082]这种几何图形处理的实施可以被在不同实施中不同执行。例如,在计算单元的可编程集群可以用来执行几何图形计算、着色计算(例如,光线交叉点的着色,顶点着色,像素着色,等等)、光线遍历或其他种类任务的情况下,可编程集群可以经配置实施所需的几何图形处理。该实施可以运行从另一个线程接收输入和/或产生输出的计算的线程以便实施所需的一系列的几何图形修正。在其他示例中,中间处理的几何图形数据可以被存储在存储器中,并在需要时通过实施几何图形处理的计算的一个或多个线程来读取/写入。
[0083]如上所述,某些几何图形修正可以是增加的。因此,即使可以指示增加的系列的几何图形单元序列的特定部分位于特定分块内,只生成这些实例可能是不可能的,因为以后的实例可能依赖于通过可编程序列中的较早图元迭代。在一个实施中,通过将增加的几何图形数据存储在本地存储器(诸如缓存)中,非必要的重复计算得以下降。这具有以下优点:在各实例在不止一个分块扩展的情况下,可能不需要为每个分块再次形成前任几何图形单元。在此类实施中,可以定义增加的几何图形序列的哪些部分在特定分块或3D加速结构单元内,并随后在开始几何图形处理以再次产生这些单元之前,可以首先在缓存内查找这些单元,这可能需要通过不在该分块或加速结构单元内的前体单元来迭代。
[0084]在替代实施例中,几何图形修正/产生可以位于特定分块内的最后图元已生成后被中止。这可以例如通过读取指示序列中位于该分块内的最后图元的数据来确定。在这个实施例中,修正单元或过程的状态以及最后生成的修正图元可以被存储,使得修正或产生可以从其停止的地方为另一分块继续执行。因此,在例如第100修正图元已经生成,并且然后在第101修正图元被随后分块要求的情况下,修正单元不必开始从起始再次导出修正图元的序列。位于特定分块(或3D空间单元)内的第一修正图元可以通过读取指示在位于分块内的序列中的第一修正图元的位置的数据来确定。
[0085]在这个方法中,在修正被应用于在对象列表中识别的图元之前,可以确定带有对应标识符的任何修正图元是否被存储在缓存中。如果是的话,则序列中最接近所需修正图元的修正图元可以被提取,并且在修正单元的状态已经被存储的情况下,修正单元可以从该修正图元继续执行直到生成所需的修正图元。在其中修正图元必须增量生成的应用中,序列中较早的最接近的修正图元可以被要求,该修正图元可以不必是最接近的。
[0086]一旦修正实例已再次生成,如果有必要,各实例在特定分块内的实例可以使用如上所述的众所周知的技术来确定。对于每个分块,在用于位于该分块内的修正图元和非修正图元中的每个修正图元的数据已获得后,各图元可以被处理以使用众所周知的技术来渲染图像。
[0087]例如,各图元可以被传送给隐藏表面去除单元70,该单元去除分块内不可视的任何表面,并且所产生的像素数据可以被传送给纹理和着色单元80,该单元在用于显示的最终像素值被写入存储器之前施加像素或纹理着色。
[0088]图2A/B描绘在使用光栅化(基于分块的光栅化)和光线跟踪的混合的渲染期间可以被执行的接合几何图形处理。在图2A中,几何图形处理预通产生最终几何图形流82,并用于产生(84)被存储(86)的3D对象范围数据。3D对象范围数据可以映射到加速结构的节点,表示加速结构的各节点的标识符,或被包含在加速结构的各节点内。3D对象范围数据可以指示源几何图形和待在该源几何图形上执行的几何图形处理,以进行最终几何图形和识别最终几何图形的边界的功能。最终几何图形数据的流被用于产生(88)被存储(90)的2D屏幕空间对象范围数据。转向图2B,在各光线通过粗糙的加速结构分类/遍历(105)的情况下,3D对象范围数据被用于光线跟踪(103)。在缓存被使用以及最终几何图形在缓存中的存在可以被检测(113)的情况下,源几何图形可以被识别