用于图形渲染的几何图形处理方法和图形渲染系统与流程

文档序号:14009135阅读:206来源:国知局
用于图形渲染的几何图形处理方法和图形渲染系统与流程

本申请是申请日为2013年11月1日,申请号为201380069169.6,发明名称为“用于图形渲染的几何图形处理方法和图形渲染系统”的申请的分案申请。

在一个方面,下列涉及使用在3d空间中定义的几何图形输入的渲染系统。



背景技术:

来自3d场景描述的图像渲染(作为示例渲染输出)可以使用各种方法来实现。一种方法使用光栅化技术,其中,图元从3d坐标映射到2d屏幕空间,以便确定可视表面,随后该可视表面可被纹理化和着色(shade)。另一种方法是使用光线跟踪,这涉及跟踪穿过3d空间的光线。光线跟踪可以获得更好的反射和折射模型效果,并且能够产生高度复杂和完全精确的图像。

光栅化和光线跟踪两者使用几何图形数据作为输入来定义位于3d场景中的对象。几何图形数据定义各表面在场景中的范围,但是未定义例如它们的最终着色和纹理。不过,详细的几何图形可以产生现实和有乐趣的计算机制图体验的重要进步。在对象的细节与存储表示该对象的几何图形数据所需的存储器量之间可以有折衷。



技术实现要素:

一个方面涉及一种用于3d渲染的几何图形处理方法。该方法包括访问描述位于3d场景中的几何图形的几何图形数据,其中将根据该3d场景产生渲染,所述数据描述用以产生最终的几何图形的定义位于3d场景中的几何图形的一个或多个表面的几何图形控制点和将在几何图形控制点上执行的程序修正,渲染将基于所述最终的几何图形。该方法还包括使用最终几何图形产生几何图形范围数据,几何图形范围数据建立3d场景中定义的体积与一系列几何图形控制点之间的关联,该几何图形控制点在程序修正后产生分别在该体积内的最终几何图形。

此类方法还可以包括通过识别3d空间中的体积来定义将在3d场景中跟踪的光线,并使用几何图形范围数据识别在3d空间中的识别的体积中产生最终几何图形的几何图形控制点,其中在3d空间中的体积中将检验光线的子集的交叉点。随后,该方法还包括对那些识别的几何图形控制点执行任何程序修正以在识别的体积中产生最终的几何图形,并随后检验最终几何图形与光线子集的交叉点。

该方法还可以包括将3d空间中的体积定义为包括用于多个分块的每个屏幕空间分块的截头椎体,每个分块包括多个像素并共同定义要被渲染的2d图像。

该方法还可以包括产生包括包围3d场景的各自部分的单元的加速结构,并使用该加速结构识别最终几何图形的待被检测与不同光线的交叉点的各自子集。该方法还可以包括使用提示数据来定义在几何图形范围数据中引用的、3d场景中的体积。该方法还可以包括使程序修正与在3d场景的体积内产生最终几何图形所需的几何图形范围数据相关联,几何图形范围数据与该3d场景的体积有关。

该方法还可以进一步包括使用光栅化子系统和光线跟踪子系统两者来进行渲染,其中每个子系统对最终几何图形的各部分做出请求,并响应于该请求,通过执行与几何图形范围数据相关联的程序修正来产生最终几何图形,其中,该几何图形范围数据与包围最终几何图形的被请求部分的3d场景的体积相关联。

该方法还可以进一步包括产生具有的详细程度取决于请求是源于光线跟踪子系统还是光栅化子系统的最终几何图形。

该方法还可以进一步包括响应来自光线跟踪子系统的请求,产生在3d场景的一部分内的定型加速结构和在该3d的该部分内的最终几何图形。

该方法还可以进一步包括产生具有叶片单元的粗糙的加速结构并将该粗糙的加速结构的叶片单元用作几何图形范围数据。

该方法还可以进一步包括收集针对粗糙的加速结构的单元进行跟踪的光线,以及通过在调度收集的光线的遍历操作之前在该粗糙的加速结构的特定单元内动态产生定型加速结构,遍历针对该粗糙的加速结构的特定单元收集的光线。

该方法还可进一步包括响应于调度程序指示在定型加速结构的各部分内产生最终几何图形。

该方法还可以进一步包括在源几何图形数据上的预通(pre-pass)中执行访问和产生,该源几何图形数据包括顶点数据和两组或多于两组顶点连通性数据。

可以在几何图形控制点上执行的程序修正可以包括用于产生用于光线跟踪的定型几何图形的程序修正和用于产生用于光栅化的定型几何图形的程序修正。

各方面还可以提供产生几何图形范围数据,其包括产生指示当产生关于3d场景中定义的体积的最终几何图形时所要求的几何图形扩张量的提示,在3d场景中定义的体积与几何图形范围数据的该部分相关联。

各方法可以通过访问与控制点相关联的提示来实现访问,该提示指示当使用该控制点执行程序修正以产生最终几何图形时可能产生的几何图形的量的边界。

另一方面提供一种用于3d渲染的几何图形处理方法。该方法包括从源几何图形数据产生位于3d场景中的几何图形图元并定义一组分块(tile)对象列表。每个分块对象列表包含指示来自一组源几何图形的哪个源几何图形产生在2d图像的像素的各自分块的边界内的几何图形图元的数据。该方法还包括产生包括单元的图形的加速结构,每个单元定义在3d场景中的各自体积并通过以下方式根据该场景渲染2d图像:使用分块对象列表以识别在该2d图像的每个像素处的可视表面,并使用该加速结构根据已识别的可视表面跟踪3d场景中的光线以识别由光线中的每个光线相交(如果有的话)的图元,并产生有助于每个像素处的可视表面最终着色的信息。

该加速结构包括粗糙的加速结构单元,每个粗糙的加速结构单元与指示最终加速结构应该如何产生用于几何图形图元的数据相关联,其中几何图形图元位于由粗糙的加速结构单元定义的、3d场景中的体积内。

该加速结构产生用于被识别用于光线跟踪的集合图形图元,几何图形图元基于源几何图形数据的一部分产生,并且相比针对定义一组分块对象列表表示对象所用的图元数量,几何图形图元使用更少的图元数量表示位于3d场景中的相同对象。

该加速结构的每个单元识别源几何图形的在单元内产生一组最终几何图形的各自部分,并且该方法还包括将光线聚集为待在加速结构的各自单元内遍历的集合,并随后形成每个单元的最终加速结构,以便跟踪在单元中的光线的各自集合。另一方面提供一种用于图形渲染的3d几何图形处理方法。该方法包括定义待在源几何图形的各部分上执行的相应的一组修正过程,以便产生位于3d场景的各自部分中的最终几何图形并产生包围3d场景的各部分中的每个部分的加速结构的各自单元并与该单元相关联。相应的一组修正过程被执行是为了在该单元内产生最终几何图形。该方法还包括定义一组分块对象列表。每个分块对象列表识别源几何图形和待在识别的源几何图形上执行的相应的一组修正过程,以在将根据3d场景渲染的2d图像内的各像素的分块内产生最终几何图形,并通过在逐个分块的基础上识别2d图像内各像素的可视表面来渲染该2d图像。渲染包括根据每个分块的分块对象列表识别源几何图形,并在源几何图形上执行该组修正过程以产生最终几何图形。在该分块中每个像素的可视表面基于所产生的最终几何图形来识别,并且为了完成一组像素的渲染,各光线从各像素的可视表面发出并在3d场景中遍历。各光线在3d场景中遍历。

另一方面提供一种用于图形渲染的3d几何图形处理方法。该方法包括通过对源几何图形应用一个或多个几何图形修正过程来从源几何图形产生最终几何图形,产生的最终几何图形受限于位于据此得到2d渲染的3d场景中的最终几何图形的子集;并且基于所产生的最终几何图形的一个或多个消费者对所产生的最终几何图形的特定部分指示的需求来控制所产生的最终几何图形的特定部分的缓存。

该方法还可以包括跟踪对所产生的最终几何图形的特定部分的需求并制定关于所产生的最终几何图形的那些部分被缓存或被允许从高速缓存器中驱逐的相对的优先级。

另一方面提供一种用于图形渲染的3d几何图形处理方法,该方法包括通过向源几何图形应用一个或多个几何图形修正过程来从源几何图形产生最终几何图形,所述产生通过多个独立的生产来表征,每个生产产生受限于位于3d场景中的最终几何图形的子集的最终几何图形;并通过将最终几何图形的特定子集的请求收集到各组中并基于调度标准来调度最终几何图形的多个独立的生产,并根据调度标准相对排序多个独立的生产。

该请求可以从光栅化子系统和光线跟踪子系统收集。

该请求可以与来自帧序列中的被渲染的不同帧的几何图形相关。

该调度标准可以包括对关于几何图形的不同子部分的请求的数量计数并选择在相比其他子部分具有更多请求的子部分内产生最终几何图形的独立的生产。

该调度标准可以包括为源自与帧序列中被渲染的较早帧相关的渲染过程的请求指定优先级。

该调度标准可以是在几何图形处理与着色之间分配计算单元集群的调度过程的一部分。

另一方面提供了一种图形渲染系统,该系统包括:几何图形处理单元,该几何图形处理单元被配置为访问描述位于3d场景中的几何图形的几何图形数据,其中将根据3d场景产生渲染,几何图形数据描述用以产生最终几何图形的几何图形控制点和能够在几何图形控制点上执行的程序修正,渲染将基于最终几何图形,并且几何图形处理单元被配置为使用最终几何图形产生几何图形范围数据,每个几何图形范围数据建立3d场景中定义的体积与一系列几何图形控制点之间的关联,如果有程序修正,则一系列几何图形控制点产生分别在体积内的最终几何图形;和渲染子系统,渲染子系统被配置为生成对3d场景的各部分内的定型几何图形的请求,请求通过几何图形处理单元来服务,并且渲染子系统被配置为使用响应于根据3d场景产生渲染的请求而返回的定型几何图形。

该渲染子系统可以包括光线跟踪子系统和光栅化子系统,光线跟踪子系统用于跟踪3d场景中的光线,光线跟踪子系统被配置为识别3d场景中的体积,在3d场景中的体积中,将检验光线的交叉点。

另一方面提供了一种图形渲染系统,该系统包括:几何图形处理单元,几何图形处理单元可配置为通过向源几何图形应用一个或多个几何图形修正过程来从源几何图形产生最终几何图形,产生通过响应于从渲染子系统收到的请求的多个独立的生产来表征,每个独立的生产产生受限于位于3d场景中的最终几何图形的子集的最终几何图形;和调度程序,调度程序被配置为基于调度标准,通过将关于最终几何图形的特定子集的请求收集到分组中来调度最终几何图形的多个独立的生产,并根据调度标准相对排序多个独立的生产。

另一方面提供了一种图形渲染系统,该系统包括:几何图形处理单元,几何图形处理单元能够从源几何图形产生最终几何图形;和存储器控制器,存储器控制器被配置为:基于被配置为在渲染过程中使用最终几何图形的一个或多个渲染子系统对所产生的最终几何图形的特定部分指示的需求,控制所产生的最终几何图形的特定部分的缓存。

另一方面提供了一种被配置为实施以上所述的方法中的任意一种方法的图形渲染系统。

另一方面提供了一种被配置为根据本公开操作的图形渲染系统。

另一方面提供了一种根据本公开产生用于渲染的最终几何图形的方法。

另外的方面提供一种用于图形渲染的3d几何图形处理方法,该方法包括通过向源几何图形应用一个或多个几何图形修正过程从源几何图形产生最终几何图形,所述产生通过多个独立的生产来表征,每个生产产生受限于位于3d场景中的最终几何图形的子集的最终几何图形;并通过将最终几何图形的特定子集的请求收集到各组中并基于调度标准来调度最终几何图形的多个独立的生产,并根据调度标准相对排序多个独立的生产。

这些方面的任一方面可以在计算系统中实现。此类计算系统可以包括可编程单元,该可编程单元可以被编程以实现几何图形修正过程、控制过程、着色处理,该着色过程包括用于对由光栅化所确定的可视表面着色且也用于对光线交叉点着色的着色过程。该计算系统可以包括固定的或有限功能单元,例如用于光线跟踪操作(诸如穿过加速结构遍历光线或检验光线与几何图形图元的交叉点)的固定或有限功能单元。实现本公开各方面的系统可以包括光栅化子系统和光线跟踪子系统。这些不同的子系统可以在具有不同软件的公用硬件上实现。包括纹理采样和混合的其他辅助硬件可以设置在此类系统中。此类系统可以包括用于存储源几何图形的一个或多个存储器,以及用于存储最终几何图形的高速缓冲存储器。这些存储器可以是存储器层次结构的一部分。此类系统可以是便携式装置(诸如平板电脑或智能手机、笔记本电脑或台式电脑)的一部分,或被嵌入,诸如嵌入在诸如电视或家电的装置内。

附图说明

图1描绘用于按需进行几何图形处理的示例系统的组件;

图2a-2c描绘在执行光栅化和光线跟踪两者的系统中的用于按需几何图形的示例过程的各方面;

图3描绘一种示例实施,通过该示例实施,源几何图形数据可以通过api提交,并且源几何图形数据可以包括提示,该提示指示或可用于推导从源几何图形数据的特定组或单元产生的最终几何图形的体积边界。

图4描绘视椎体和位于其中的分块;

图5-6描绘具有由平面补丁定义的壳体的bezier补丁表面的示例;

图7描绘基于与镶嵌几何图形相关的信息定义加速结构的示例过程,诸如调整将用于将3d场景细分为不同部分的加速结构的糙程度,其用于按需形成这些不同部分的最终几何图形的目的;

图8描绘多分辨率几何图形生成的示例过程;

图9描绘用于多分辨率几何图形生成的源几何图形数据的存储;

图10描绘调度几何图形和/或加速结构形成任务的示例过程;

图11描绘可被用于调度几何图形和/或加速结构形成任务的数据的示例;

图12描绘表示光线遍历状态的数据的示例;

图13描绘功能单元的示例模块结构;

图14描绘可被用于实现图13的功能单元的系统单元的示例框图;

图15描绘可以作为图14的示例单元的一部分的矢量化执行单元的示例。

具体实施方式

减少表示对象的表面的定义所需的存储器的量的技术包括将对象的表面指定为具有控制点的补丁,该控制点可用于产生各图元的顶点。另外,图元顶点可以用作镶嵌和几何图形着色器或位移引擎的输入,位移引擎能够通过将较大的图元切成较小的图元来放大图元的数量,或以其他方式使几何图形变形,使得在这些另外的几何图形操作之后的几何图形范围不同于原始范围。

在不受约束的存储器资源环境中,简单产生整个3d场景的最终几何图形并将其存储在快速随机存取存储器中是可接受的。然而,在其中快速存储器资源受约束的计算环境中,分配足够的存储器来存储此类数据可能是不可能或不可取的。

下列涉及用于减少存储几何图形所需的存储器占用,以便渲染给定复杂程度图像的方法。下面公开的各方面涉及用以渲染的光栅化和光线跟踪方法两者。此类方法也可以适用于其中复杂的3d几何图形可能需要被用在存储器受限的环境的其他情况。存储器受限并不意味着任何特定的存储器约束,而是与旨在使用的几何图形的复杂性相关。同样,存储器约束是在整体平台的设计考虑。如果可以减少给定复杂性的几何图形处理的存储器占用,那么通过包括更少的存储器,可以减少用于装置的材料单。

在一个方面,本公开的实施执行收集信息、生成信息或收集和生成信息两者的预通,该信息定义一组输入几何图形数据如何产生用于场景渲染的一组几何图形数据。例如,在一种方法中,源场景几何图形可以通过几何图形流水线运行,该方法可以包括将各补丁变换成一组图元,将这些图元镶嵌到其他图元中,执行位移映射,并在此数据上运行几何图形着色器。这个预通可以在场景的渲染开始前执行,或可在给定场景首次用于渲染时执行。

这个预通的输出是其中最终几何图形存在的描述。这个描述可以根据要被执行的渲染类型(或各类型)而不同。例如,在基于分块的(tile-based)渲染系统的背景下,此类信息可以包括几何图形的哪些初始单元最终产生几何图形的在每个屏幕空间分块的边界内的图元或其它部分的描述。在光线跟踪的背景下,此类信息可以包括一组包围盒或识别包围体的粗糙的加速结构,该粗糙的加速结构识别将作为3d空间中的几何图形扩展点的包围体。每个原始图元与包含从原始图元产生的最终几何图形的一部分的每个包围体之间可以有关联。各种更具体的示例被提供如下。

指定3d场景几何图形的各种各样方法是可用的。为简化起见,本公开提供开始于表面补丁的实施的示例,表面补丁可以用于定义各顶点,各顶点可以通过镶嵌或位移被放大,或公开了通过可编程着色来操作的实施的示例。另外,除了用于光线跟踪渲染的方法以外,公开一种在基于分块的延迟渲染(tbdr)的背景下按需几何图形的方法。

首先,多个图元是通过镶嵌表面数据的补丁生成的镶嵌图元。不过,应当理解,各实施并不限于这个实施例,并且可以等同使用通过其他方式生成的镶嵌图元或非镶嵌图元。

几何图形处理

图1示出说明图形流水线的示意图,该图形流水线用于在支持镶嵌和镶嵌几何图形的光线跟踪两者的基于分块的渲染系统中生成计算机图形图像并对计算机图形图像进行着色。

几何图形数据25定义在渲染期间在3d空间中使用的对象。几何图形数据25可以包括更高阶表面(诸如补丁(例如,bezier补丁)、通过各顶点定义的图元的网格和连通性数据)的描述,或指定几何图形的其他方式。几何图形数据25被提供给几何图形处理单元61,该几何图形处理单元可以操纵几何图形数据并可以从对象数据导出各图元,或者以其他方式产生可用于要被执行的几何图形处理的几何图形的规范。在渲染设置过程中,在通过应用编程接口(api)提交时,几何图形数据25可以以一种或多种格式。例如,如果要被渲染系统执行的光线跟踪和光栅化过程两者消费三角形图元,那么几何图形处理单元61可输入更高阶表面描述并输出三角形图元的网格。

在示例中,几何图形数据25可以被提交(例如流传输)供处理。在示例中,几何图形的补丁可以被提供给顶点着色器27,该顶点着色器可以相应向外壳(hull)着色器29提供着色的顶点数据。顶点着色器27可以例如以编程方式移动补丁的控制点(例如,平移、旋转、或缩放中的一个或多个的组合)或执行初始顶点点亮或两者全部或对这些控制点的其他类型的编程操作。这些控制点可以被提供给执行镶嵌相关功能的单元。

镶嵌涉及将低细节度模型(例如更高阶表面)分解为多个镶嵌图元,低清晰度模型可以被称为“补丁”。“补丁”通常是多项式方程的函数,多项式方程定义一组控制点,该组控制点描述相对于变量t(对于2d度曲线)或域坐标“u,v”(对于3d度曲线)的曲线的形状。用于计算机制图的补丁的一个示例是bezier补丁,但是正如本领域的技术人员所理解的,存在其他补丁。目前,常用的是平补丁(例如三角形补丁),其被分割为多个图元(其然后被函数位移)和/或依赖位移高度映射来形成多个镶嵌的图元。镶嵌是以编程方式从表面的描述导出多个图元的一种方法示例。补丁是通过参数关系定义的表面(例如,3d,uv坐标)。表面上的点可以使用参数坐标来定义。正如本领域技术人员所熟知的,在图形流水线中的表面数据的各补丁的镶嵌可以通过若干应用编程接口(api)(例如microsoft的direct3d11api)来支持。microsoft的direct3d11api支持位移映射,镶嵌图元可以借此在距离补丁的表面的位移的位置。

如可以被应用到各补丁或各自图元的可编程顶点着色可根据功能描述被用于生成修正图元。例如,在可编程顶点着色被用在顶点着色27的情况下,顶点着色的输出可以被镶嵌。作为示例,在修正图元中的每个修正图元或补丁在距离其导出自的源几何图形的位置的位移位置的情况下,多个修正图元或补丁可以从输入几何图形生成。几何图形的这些修正元素中的每个修正元素可以以增量方式生成。例如,第一生成的图元可以最接近原始图元的位置,并且随后生成的图元中的每个图元可以渐次远离输入图元的位置。另一示例是散焦模糊应用,其中,多个修正图元可以在距离输入图元的小偏移生成,而不必在距离输入图元的递增距离生成。不过,在一般情况下,修正图元可以以包括任意顺序的任何顺序或次序生成。

外壳着色器29可以计算给定补丁的各边缘的镶嵌因子,并且还可以进一步修正变换的控制点。外壳着色器29输出到域镶嵌31和连通性镶嵌33。域镶嵌基于镶嵌因子将补丁细分为被称为“域”点的若干已知点。连通性镶嵌33确定各域点如何被组合或连接以产生镶嵌的图元。这些功能模块可以根据标准化的镶嵌方法(诸如dx11)来操作。这些域点被传送给域着色器35,该域着色器根据可编程的几何图形着色器37使用该数据以及通过外壳着色器产生的控制点。着色器37对几何图形进一步执行可编程着色操作并产生待存储在顶点缓存41中的各顶点。存储在顶点缓存41中的各顶点可以用作用于产生待在光栅化(例如,基于分块的光栅化)期间和光线跟踪操作期间使用的数据的基础。

对于如图11所示准备执行基于分块的光栅化,来自顶点缓存41的各顶点被提供给一个剪辑/剔除单元43,该剪辑/剔除单元去除不在被渲染2d图像的可见度范围内的几何图形(例如,它是关闭的屏幕或背面)。剩下的几何图形被通过投射单元45投射到2d坐标系统用于2d图像。

这个投射的几何图形通过分块单元47被分块(分块是各像素的区域,诸如各像素的矩形区域)。分块单元输出识别哪个几何图形至少部分在每个分块的边界内的信息。这个信息可以采用分块以及至少部分在该分块内的几何图形列表的标识符的形式。在本公开的背景下,被分块的几何图形可以包括镶嵌的几何图形。如上所述,镶嵌的几何图形是从源几何图形推导的几何图形。在本公开的背景下,识别分块和几何图形列表的信息可以包括识别源几何图形的信息;这个信息可以被称为特定分块的“对象列表”。对象列表可以被存储在存储器(例如缓冲器)中。为了光栅化和着色用于显示的每个分块,可以读取用于该分块的对象列表。

在复杂的3d渲染中,可以生成或要求大量数据以便分别识别每个图元。因此,在某些实施中,可以采用一种压缩这种数据的方法。当用于分块的数据要被使用时,那么,反压缩或其他解释可以被应用于包含在用于该分块的对象列表中的数据。

在图1中,产生包围体39的处理单元可以使用由于可编程几何图形着色37产生的各顶点对3d空间的子体积内的最终几何图形操作,几何图形着色37产生的各顶点可以被存储在顶点缓存41中。该几何图形结构范围数据可以被存储在非暂时性存储器57中。在3d操作诸如光线遍历或光线交叉检验期间,最终几何图形的一部分可以(再次)形成并被存储在非暂时性存储器55中。非暂时性存储器55可以以各种方式实施,并且图1不意味非暂时性存储器55是单一物理存储器。几何图形单元控制器61可以操作以指示几何图形的哪些部分要被处理(例如,调度生产或向消费者本人提供最终几何图形,如下面所解释的)。

光栅化54可以使用屏幕空间几何图形缓冲器51的输出,该输出表示被映射到屏幕空间的最终几何图形。例如,光栅化54可以对几何图形的各分块操作。光栅化54的输出包括可视表面,其被提交给像素着色器51,该像素着色器向输出缓冲器72输出像素着色结果数据。一般来说,此类像素着色器可以被包括在纹理和着色单元52内,该纹理和着色单元可以在可编程计算单元或单元集群上实现。这个单元52还可以实施光线着色器53。光线着色器63可以基于光线跟踪单元59的输出被触发。各光线跟踪单元可以识别最终几何图形与各光线之间的最近交叉点。这些交叉点可以根据可编程着色模块被着色。光线跟踪单元59可以在光线遍历期间使用光线数据65。光线着色器63还可以访问此类光线数据65,并可以在光线数据65中存储新光线。

已压缩的分块对象列表

分块单元47将图像划分为多个分块,每个分块包括多个图像像素。分块通常是矩形的,但是可以是其他形状。对于每个分块,分块单元47确定各图元中的每个图元是否至少部分位于该分块内。就是说,分块单元47确定该图元的至少一部分是否位于该分块的可视区域内。分块单元47也推导用于每个分块的对象列表。该对象列表指示至少部分位于该分块内的各图元。对象列表可以被形成用于每个分块,即使没有图元位于分块内,并且在此情况下,用于该分块的对象列表是空的。在某些实施中,被确定位于分块内的非空图元被指示实际在该分块的对象列表中。例如,在分块阶段可以确定某图元被该分块中的其他图元模糊(例如,在分块期间,可以采用去除隐藏表面的步骤),并因此在该分块内是不可见的。该图元可以因此不在该分块的对象列表中指示,以节省以后对该图元的不必要处理。

各图元可以由若干方式指示。识别各图元的每个图元的标识符可以被存储在各自对象列表中。例如,每个图元可以被分配索引,或各图元的各顶点中的每个顶点可以被分配索引。这些标识符可以参考指向用于各自图元或图元顶点的几何图形数据的指针或提供指向用于各自图元或图元顶点的几何图形数据。另一示例是对于每个镶嵌图元,最终几何图形可藉此推导的数据被存储,而不是存储用于该图元的完全几何图形数据。例如,用于该图元的几何图形数据可随后被从用于补丁和镶嵌参数的一组控制点导出。

作为另一示例,各修正图元(例如,从镶嵌或其他几何图形着色器产生的各图元)可以被在各对象列表中指示。例如,各修正图元中的每个修正图元可以被分配唯一的标识符。例如,各修正图元中的每个修正图元可以被分配连续整数。如果输入图元被分配整数0,那么该图元的多个新实例(或从处理该输入图元产生的各图元)可以被分别分配整数1、2、3、4...n。如果确定修正图元中的一个或多个修正图元至少部分位于分块内,那么,这些修正图元中的每个修正图元的独特的标识符被存储在用于该分块的对象列表中。

用于指示各修正图元的替代方法可以进行如下。如果确定修正图元中的一个或多个修正图元位于分块内,那么,用于输入图元的标识符(一个索引/多个索引)被存储在用于该分块的对象列表中,这些修正图元可从该标识符生成。换句话说,各修正图元中的每个修正图元可以被分配与输入图元相同的标识符(一个索引/多个索引)。例如,如果输入图元被分配整数0,那么,该图元的修正示例中的每个修正实例也被分配索引0。用于输入图元的一个索引/多个索引可以为位于该分块内的图元的修正实例的每个修正实例存储一次。不过,用于输入图元的一个索引/多个索引只可以每列表被存储一次,而不管位于特定分块内的该图元的实例的数量。

同样,可能无法从用于分块的对象列表识别在该对象列表中识别的图元哪些或多少实例位于该分块内。虽然如此,不过如果该图元的至少一个实例位于该分块内,这个实施例具有修正图元可藉此导出的输入图元在对象列表中被识别的优点,而不管该输入图元本身是否位于该分块内。因此,位于分块内的所有修正图元可以被处理,以使用分块的对象列表对该分块精确着色。而且,这种方法允许存储在对象列表中的数据被以高度压缩的格式存储。

如下面所更加详细描述的,为了着色分块,相同的修正功能被再次应用于在对象列表中已识别的每个图元。随后,一旦再次生成修正图元,则位于分块内的修正图元(如果有的话)可以使用如上所述的众所周知技术来确定。

然而,这种方法不仅具有位于分块内的任何修正图元必须再次生成,而且实际上不位于分块内的修正图元可能要进行不必要计算的缺点。假设每个图元可以具有成百上千的修正实例,这种情况会产生计算资源的明显浪费。因此,在一种方法中,包括若干位的标识可以被存储在用于分块的对象列表或存储器的另一区域中,指示在该对象列表中识别的各图元具有在该分块内的修正实例。这可以避免不得不对在对象列表中识别的所有图元再次应用修正功能,同时保留能够以高度压缩格式将数据存储在对象列表中的优点。

如上所述,修正图元可以以增量方式生成,使得一个修正图元被从输入图元形成,并且随后第二修正图元被从该修正图元形成,等等,直到导出修正图元序列。同样,除了存储识别图元的标识符以外,修正图元序列可从该标识符导出,可以存储指示位于分块内的这些修正图元序列中的第一和/或最后位置的数据。这个数据可以被存储在用于该分块的对象列表中或存储器的另一区域中。这个方法具有的优点在于:在只有该修正图元的序列的子集位于特定分块内的情况下,不需要关于该分块再次导出修改的图元的所有序列,如下面更详细解释的。

不过,需要被存储用于对象列表中已识别的图元中的每个图元的指示第一和/或最后序列位置的数据有折衷。在这个描述的实施例中,本领域的技术人员应当理解,在各图元是镶嵌图元的情况下,可以有由每个补丁生成的数以千计的图元。存储用于图元中的每个图元的这个位置数据将需要大量的存储器。

确定位于分块内的任何修正图元的最高和/或最低序列位置可以有一个折衷,其中,任何修正图元从镶嵌图元导出,镶嵌图元从表面数据的补丁导出。这个方法提供了整个补丁的每分块只需要两个整数被存储。这个技术可以导致更多的非必需的修改图元的生成,但需要更少的存储器,同时避免再次导出某些非必需的修正图元。

在某些实施例中,可以有一个以上的应用于源几何图形的任何给定单元的着色(修正)步骤,以便导出最终几何图形。这些步骤中的每个步骤可以向输入图元应用不同的修正功能或程序。每个修正功能可以被分配识别用于生成修正图元的修正功能的标识符(或其序列)。该标识符可以被存储在涉及包含这些修正图元的分块的对象列表中。指示在修正图元序列中的第一和/或最后位置的数据可以关于修正单元中的每个修正单元被存储。索引列表可以例如使用索引/顶点缓冲器以本领域技术人员已知的方式来压缩。可以提供用于压缩通过表面数据的补丁镶嵌导出的镶嵌图元的索引列表的若干不同技术,该技术可以利用表面数据的镶嵌图元的内部结构的知识。向修正的图元分配与输入图元相同的一个索引/多个索引的优点在于可以利用相同的压缩技术来压缩该索引/多索引。

用于光线跟踪的几何图形的预处理

准备光线跟踪所需的处理在某些方面不同于用于光栅化的几何图形的处理。一个主要区别在于:通过形成在3d场景中具有不同的几何图形抽象等级的加速结构,光线跟踪复杂场景的效率通常得以提高。例如,加速结构可以是各单元的层次结构布置,其中单元中的每个单元包围3d空间中的各自体积。每个体积可以包围单个图元、多个图元或其一部分。用于光线跟踪的加速结构可以被形成用于最终几何图形(即,在经编程几何图形修正或形成后,诸如通过使用位移几何图形或镶嵌)。在某些情况下,通过提供更详细的加速结构,确定3d场景中的交叉点的效率可得以提高。不过,更详细的加速结构预计比更颗粒状的加速结构消费更多的存储器。

为了实现使用一种或多种光栅化和光纤跟踪的存储器有意识的(conscious)渲染方法,避免形成和存储整个3d场景的最终几何图形的技术可以被采用。这些技术可以包括响应于需要形成最终几何图形或其他几何图形相关的构造(例如,加速结构的一部分)。在产生每分块对象列表后,可以通过逐步通过每个分块来进行拼接,并且处理从每个对象列表指示的几何图形。因此,根据实施,拼接计算可以是相对规律和可预测的。

不过,在3d场景中的遍历光线可以是非常不规律的,特别是全局照明光线,诸如反射或折射光线,因为源自不同位置的各光线将散射并在不同方向行进(与从场景“照相机”跟踪的主要光线相比)。而且,在某些情况下,在拼接过程中,各光线可以被发出用于遍历,其中,用于各像素的几何图形的可视表面被确定。在这些可视表面被确定后,随后这些表面被着色或以其他方式被处理。例如,各光线可以从表面投出以确定通过光对该表面点的阴影。例如,各光线可以随机发出用于全局照明采样。在这里,术语像素往往被使用,但是各像素可以包含各种各样的分段。而且,当确定该像素的可视表面时,通过在一个或多个方向偏移该像素,可以提取每个像素的多个采样。

用于光线跟踪的几何图形的预处理可以受益于被执行用于拼接目的的预处理。用于拼接的预处理还可以受益于被执行设置光线跟踪的几何图形处理。解释了进行用于拼接和光线跟踪的最终几何图形的预处理以及按需生成用于拼接和光线跟踪的最终几何图形的示例时机。

在一个方面,用于光线跟踪的几何图形预处理提供在加速结构的各单元之间分配最终几何图形。在加速结构中的这些单元的分配可以根据对象列表数据的实施,通过用于这些单元的每个单元的压缩的对象列表数据来表示,但是其中是否包括对象列表中的数据的决定标准是3d体积内的对象是否与特定单元相关联。

最终几何图形的产生

根据本公开产生的最终几何图形可以从源几何图形产生,源几何图形根据一个或多个修正功能来修正。这些修正功能可以连续应用。修正功能的级联也可以表示或分解成少量单独识别步骤或过程的一部分。在实施本公开的背景下,其中,产生3d空间的特定分块或区域的最终几何图形的源几何图形在列表中被识别,该列表还可以包含识别什么修正过程将要对该数据执行以产生最终几何图形的数据。因此,再次形成3d场景的特定部分的最终几何图形可以通过向已识别的源几何图形应用已识别的修正序列来执行(凭借被识别为与屏幕空间像素的分块或用于光线跟踪的3d空间的体积相关)。

这种几何图形处理的实施可以被在不同实施中不同执行。例如,在计算单元的可编程集群可以用来执行几何图形计算、着色计算(例如,光线交叉点的着色,顶点着色,像素着色,等等)、光线遍历或其他种类任务的情况下,可编程集群可以经配置实施所需的几何图形处理。该实施可以运行从另一个线程接收输入和/或产生输出的计算的线程以便实施所需的一系列的几何图形修正。在其他示例中,中间处理的几何图形数据可以被存储在存储器中,并在需要时通过实施几何图形处理的计算的一个或多个线程来读取/写入。

如上所述,某些几何图形修正可以是增加的。因此,即使可以指示增加的系列的几何图形单元序列的特定部分位于特定分块内,只生成这些实例可能是不可能的,因为以后的实例可能依赖于通过可编程序列中的较早图元迭代。在一个实施中,通过将增加的几何图形数据存储在本地存储器(诸如缓存)中,非必要的重复计算得以下降。这具有以下优点:在各实例在不止一个分块扩展的情况下,可能不需要为每个分块再次形成前任几何图形单元。在此类实施中,可以定义增加的几何图形序列的哪些部分在特定分块或3d加速结构单元内,并随后在开始几何图形处理以再次产生这些单元之前,可以首先在缓存内查找这些单元,这可能需要通过不在该分块或加速结构单元内的前体单元来迭代。

在替代实施例中,几何图形修正/产生可以位于特定分块内的最后图元已生成后被中止。这可以例如通过读取指示序列中位于该分块内的最后图元的数据来确定。在这个实施例中,修正单元或过程的状态以及最后生成的修正图元可以被存储,使得修正或产生可以从其停止的地方为另一分块继续执行。因此,在例如第100修正图元已经生成,并且然后在第101修正图元被随后分块要求的情况下,修正单元不必开始从起始再次导出修正图元的序列。位于特定分块(或3d空间单元)内的第一修正图元可以通过读取指示在位于分块内的序列中的第一修正图元的位置的数据来确定。

在这个方法中,在修正被应用于在对象列表中识别的图元之前,可以确定带有对应标识符的任何修正图元是否被存储在缓存中。如果是的话,则序列中最接近所需修正图元的修正图元可以被提取,并且在修正单元的状态已经被存储的情况下,修正单元可以从该修正图元继续执行直到生成所需的修正图元。在其中修正图元必须增量生成的应用中,序列中较早的最接近的修正图元可以被要求,该修正图元可以不必是最接近的。

一旦修正实例已再次生成,如果有必要,各实例在特定分块内的实例可以使用如上所述的众所周知的技术来确定。对于每个分块,在用于位于该分块内的修正图元和非修正图元中的每个修正图元的数据已获得后,各图元可以被处理以使用众所周知的技术来渲染图像。

例如,各图元可以被传送给隐藏表面去除单元70,该单元去除分块内不可视的任何表面,并且所产生的像素数据可以被传送给纹理和着色单元80,该单元在用于显示的最终像素值被写入存储器之前施加像素或纹理着色。

图2a/b描绘在使用光栅化(基于分块的光栅化)和光线跟踪的混合的渲染期间可以被执行的接合几何图形处理。在图2a中,几何图形处理预通产生最终几何图形流82,并用于产生(84)被存储(86)的3d对象范围数据。3d对象范围数据可以映射到加速结构的节点,表示加速结构的各节点的标识符,或被包含在加速结构的各节点内。3d对象范围数据可以指示源几何图形和待在该源几何图形上执行的几何图形处理,以进行最终几何图形和识别最终几何图形的边界的功能。最终几何图形数据的流被用于产生(88)被存储(90)的2d屏幕空间对象范围数据。转向图2b,在各光线通过粗糙的加速结构分类/遍历(105)的情况下,3d对象范围数据被用于光线跟踪(103)。在缓存被使用以及最终几何图形在缓存中的存在可以被检测(113)的情况下,源几何图形可以被识别(111)。在此类最终几何图形在缓存中的情况下,源几何图形可以不必被识别(111)。如果最终几何图形不可用,那么最终几何图形从源几何图形再次形成(115)。在加速结构的粗糙的单元内的加速结构可以被形成(117)和用于遍历(119)该粗糙的加速结构单元的体积内的各光线。基于最终几何图形,图元检验(121)也被执行用于该粗糙的加速结构单元内的各光线。

图2c描绘其中可以通过开始处理分块(125)来执行屏幕空间拼接123的光栅化流,所述处理包括访问2d屏幕空间对象范围数据(127)(例如,对象列表)和检测已识别的最终几何图形是否被缓存(133)和未被缓存的程度,向几何图形处理单元提供已识别的源几何图形和几何图形处理标识(129)。在检索或再次形成最终几何图形时,hsr(可视表面识别)可以被执行。在某些实施中,即使某些最终几何图形在分块内是不可视的,但是某些几何图形可以被缓存,因为它可以被用于光线遍历操作。在某些情况下,缓存请求标识可以被设定用于某最终几何图形,该标识将指示对最终几何图形的特定部分的光线遍历侧的需求(或反之亦然)。

图3描绘一种示例实施,通过该示例实施,源几何图形数据可以通过api180提交,并且源几何图形数据可以包括各提示,该提示指示或可用于推导从特定组源几何图形数据或源几何图形数据的单元产生的最终几何图形的体积边界。预处理步骤可以使用或代替使用如上所述的提示被执行。因此图3指示虽然几何图形预通可以被执行,但是其他实施可以应用各提示或启发法以从源几何图形获得最终几何图形的范围的近似。对象范围数据可以被用于识别源几何图形数据,该源几何图形数据将用于产生完成交叉点检验所需或在光线跟踪期间对几何图形的其他操作可能需要的最终几何图形数据。此类对象范围数据可以包括粗糙的加速结构的定义。

在这里,粗糙的加速结构可以意味着不是将各体积细分为给定的尺寸,而是形成用于交叉点检验的更小图元分组,各体积未被细分。因此,粗糙的加速结构的叶片节点将是相对大的,并且将包围最终几何图形的相对高数量的图元。在示例中,细粒度加速结构通常可以包围5-10、10-15、15-20或也许20-30或30-50个图元,而粗糙的粒度加速结构的节点可以包围一百或数百个图元或甚至数千个图元。这些数量可以被认为是相对术语,而不是绝对数量或比率。

图4描绘用于像素平面205的视锥体,以及用于像素平面205中的特定分块的视锥体208。用于像素平面205的视锥体可以是其中该视锥体将要穿过的3d场景的整体的子部分(即使该视锥体的一部分也在该3d场景的外面)。用于特定分块的视锥体208可以重叠该场景中粗糙的加速结构中的特定单元。这些空间实体之间的重叠可以被用作表示用于拼接和用于3d体积的对象范围数据的输入。例如,用于分块的对象列表可以被表示为围住视锥体208的一组加速结构单元。这些加速结构单元中的每个可以具有各自对象列表,使得这些对象列表的集合形成用于该分块的对象列表。某些实施可以基于最终几何图形的各单元是否在2d平面的视锥体内或分块内或两者内对它们分类。

图5和6描绘在3d空间中定位场景对象的各个方面。关于图4,图4的视锥体可以被定位在如图5所示的立方体内,或被部分定位在该立方体内。不是要求所有的定义是立方体或其他常规的形状,而是为了简化起见在各附图中对其进行示出。

图7描绘调整将用于将3d场景细分为不同部分的加速结构的粗糙的糙程度的方法,该方法用于按需形成这些不同部分的最终几何图形的目的。粗糙的加速结构可以基于多少存储器可以被分配存储粗糙的加速结构的标准来定义。这可以基于要被跟踪的光线的数量的预期来选择,其中如果许多光线被跟踪,那么更细的加速结构可以有相对大的好处。如上所述,可以针对粗糙的加速结构的各单元收集各光线,并且随后可以在遍历该粗糙的加速结构单元中的各光线或简单遍历该结构内的各光线之前形成更细粒度的加速结构。某些方法可以提供在粗糙的加速结构单元的子部分内的各光线的分类,并形成用于该子部分的几何图形以对所收集的各光线的适当子集进行检验。

图8描绘可以按需产生多种分辨率的几何图形的示例过程;此类过程也可以包括产生加速结构的部分,虽然该示例并不限于几何图形。此类过程可以被实施,例如,其中,给定对象在第一分辨率的最终几何图形被提供给该最终几何图形的第一消费者,而该对象在第二分辨率的最终几何图形被提供给该最终几何图形的第二消费者。在特定示例中,光线跟踪子系统可以被提供比用于光栅化子系统的几何图形的分辨率更低的分辨率对象的几何图形。例如,当这些图元被用于光线跟踪时用于定义对象的图元的总数可以不同于当光栅化对象时用于定义相同对象的图元的总数。

在图8的示例过程中,几何图形源数据350是可用的,最终几何图形可以从该几何图形源数据形成。这个几何图形源数据350可以包括用于低分辨率几何图形的顶点定义数据370、补充顶点定义数据372、用于低分辨率几何图形的顶点连通性数据374和补充顶点连通性数据376。

在352,对3d空间的特定区域内最终几何图形的请求从不同消费者接收。例如,光线跟踪子系统和光栅化子系统是不同的消费者;这些子系统中的每个也可以被认为包含多个几何图形消费者。而且,被执行的特定代码单元可以被认为是消费者;例如,着色器模块可以进行几何图形请求。3d空间的各区域可以以不同方式来识别。例如,光栅化子系统可以识别要被渲染的图像内的分块,并且该分块可以被用于对该分块的视锥体内的3d空间的映射建立索引。光线跟踪子系统可以识别加速结构的单元。消费者可以识别要被产生最终几何图形的几何图形对象或对象的列表。因此,应当理解,各实施可以在几何图形的消费者如何能够指示哪个几何图形被请求方面改变(并且,加速结构单元也是一样)。

在354,这些请求被分类,诸如根据每个请求是高分辨率几何图形还是低分辨率几何图形。虽然这个示例涉及两种可用的几何图形分辨率,但是可以提供更多的分辨率,或可以有经编程可配置的几何图形生成,其可以根据例如未用分辨率或图元数来直接表示的目标形成最终几何图形。在一个方法中,在356,顶点连通性数据的选定部分从几何图形源数据350被应用于顶点数据的适当部分,以用于每个消费者以及其中几何图形请求的3d空间中的区域中的每个区域。最终几何图形在358输出。

图9描绘顶点数据和顶点连通性数据如何可以被安排在存储器中的示例存储器图382。在图9中,用于低分辨率几何图形的顶点定义数据388可以与补充顶点定义数据390分开存储,以及用于低分辨率几何图形的顶点连通性数据392可以与用于高分辨率几何图形的顶点连通性数据394分开存储。为了形成在特定分辨率的几何图形,基线低分辨率几何图形可以总是被访问,并且随后从补充顶点定义数据的选择连同顶点连通性数据的适当部分可以被访问。

布局用于存储在存储器中的几何图形数据的其他方法是可能的。例如,属于3d空间的特定区域的顶点数据可以被一起存储;例如,用于3d空间的特定区域的低分辨率和补充顶点定义数据可以被一起存储。这个方法提供低分辨率和补充顶点定义数据随后将被交错。还可以提供低分辨率和补充顶点定义数据的对象-对象聚集。这些选项均可以被用在某些方法中。

图8的示例主要涉及使用从多组图元数据的选择来生成几何图形。不过,在其他实施中,较高分辨率几何图形可以通过程序修正从较低分辨率几何图形来生成。此类实施可以使用较高阶的表面定义数据(而不是图元数据),并且较高阶的表面定义数据可以根据一个或多个几何图形过程被处理以便产生在期望分辨率的几何图形。虽然这些示例主要处理不同的分辨率几何图形,但是按需几何图形处理的实施也可以产生用于不同消费者的不同种类的最终几何图形。而且,某些实施可以产生和/或输出不同的图元子集(甚至在给定的分辨率。)例如,通过光栅化子系统旨在用于消费的几何图形产生可以将几何图形剪辑为图像或图像内分块的视锥体,和/或剔除背面图元。不过,对象的图像的图元的背面剔除不会被执行用于光线跟踪子系统。

图10描绘控制加速结构单元和几何图形数据的调度和/或缓存的示例过程。在资源未受约束的情况下,几何图形产生的调度可以简单提供在接收时按顺序处理请求。不过,此类方法留下可用的优化,如下面所解释的。在410,收到用于特定3d区域内的几何图形的请求(该请求可以来自不同的消费者)。在412,这些请求根据3d区域被收集到分组中。在414,用于这些分组的几何图形和/或加速结构单元产生根据调度标准来调度。因此,在第一实施中,各请求未按顺序来处理,而是在调度窗口内被推迟,以便识别属于3d空间的相同区域的请求(或例如属于相同对象)。此类调度414还可以使用表示对特定几何图形或加速结构单元的需求的预测的输入。

调度可以包括确定多少计算资源可以被用于几何图形生产,以及可以相应选择并行处理的分组的数量。优先级可以给予具有更多请求的空间的3d区域。来自光栅化子系统的请求可以被给予比来自光线跟踪子系统的请求更高的权重。某些系统可以具有多个运行框架,并且属于较早框架的请求可以比来自以后的框架的请求优先。调度还可以包括比较将要被产生以完成给定请求的几何图形和/或加速结构单元的预期数量,并且确定是否有足够的存储器可用。进一步的调度标准可以包括确定缓存中的源几何图形是否可用于某些部分的请求,并对这些请求给予优先级。相反,如果最终几何图形或加速结构单元存在于缓存中,则各请求可以被剔除(或以其他方式从缓存直接服务);例如,请求可以简单是用于最终几何图形的请求-不必是产出此类几何图形的请求。几何图形产生过程可以返回所请求的几何图形(或向存储此类几何图形的存储器提供参考或一组参考)。

在416,除了来自存在的几何图形数据的服务请求以外,还产生所请求的几何图形和/或加速结构单元。在此类生产期间,在418,涉及此类产生的元数据可以被收集。此类元数据可以包括所产生数据的大小、用于源几何图形的存储器访问图案、产生几何图形所需的计算量,等等。在414,这个元数据可以被用于调度,以及确定此类数据的缓存(如下所述)。在419,所产生的数据的消费者根据需要使用此类数据。此类使用可以在一段时间内发生或可以与其他数据的生成并行发生。动作419被包括主要为了解决紧随其后的动作420-426的适用性。

在420,确定用于所产生的几何图形和/或加速数据的缓存/缓存能力特性。此类确定可以使用对此类几何图形和/或加速结构单元的需求的标记424。此类确定还可以使用在418收集的元数据。例如,需要执行大量计算的几何图形可以在缓存时比其他几何图形等级更高。通过命令缓存一致性管理器或缓存置换管理器期望特定数量的读取用于给定的数据集,这些缓存/缓存能力特性可能受影响,并然后允许数据被驱逐。

在426,可以生成被引导到执行模块的调度提示。例如,几何图形处理可以与该几何图形的消费异步发生。虽然可以预期给定消费者可以被提醒响应于给定请求的几何图形的可用性,作为基本提示,各提示还可以提醒消费者此类几何图形已经被给予特定缓存优先级。例如,如果特定数据已被给予低缓存优先级,那么,该数据很有可能被覆盖或驱逐(溢出)到缓存层次结构的另一层或到主存储器。同样,消费者可以选择优先使用该数据。某些实施可以使用缓存和调度提示的组合以影响几何图形数据的消费的相对顺序。例如,某些产生的几何图形数据可以被初始缓存并且某些被存储在主存储器中,并且调度提示可以识别哪个数据在哪里。具有存储在缓存中的数据的消费者将预期使用在调度窗口内的数据,因为该数据很有可能随着时间推移被覆盖,或甚至可能被其他几何图形数据明确覆盖,或溢出到主存储器。

图11描绘可以被存储用于加速结构单元的数据453的示例,该数据可以被用在几何图形的调度生产或在此类单元内所产生的几何图形的使用。例如,若干光线分组需要遍历该单元。可以提供涉及什么样的细粒度加速结构位于该粗糙的糙单元内的提示。此类提示可以包括多少单元在粗糙的糙单元内。可以提供涉及图元特性的提示(例如,图元的数量)。可以提供复杂性的提示;此类提示涉及在该粗糙的粒度单元内产生加速结构单元和/或最终几何图形所需的资源消费量。

图12描绘根据遍历状态的跟踪光线的示例460。例如,各光线可以在加速结构的多个不同部分并行遍历。不同的计算体系结构可以不同实施光线遍历。例如,某些实施可以形成用于每个光线的线程并且该线程负责完全负责遍历该光线。随后,示例460可以跟踪哪个加速结构单元将被每个光线下次访问。例如,其他实施可以保持一组线程(或其他功能单元),该线程用于遍历变化的光线和/或用于检验不同组光线与不同组图元的交叉点。

图13描绘可以被包括在此类按需加速结构/几何图形形成和消费中的模块示例。例如,几何图形过程462和加速结构过程464分别负责形成最终几何图形和加速结构。光线跟踪过程466和几何图形拼接过程468是此类几何图形的示例消费者。这些过程可以与存储器仲裁/控制470通信,该存储器仲裁/控制负责管理缓存的层次结构476(以及例如,主存储器478);这个单元可以使用如上所述的缓存提示。处理器调度474负责粗糙的粒度调度或向不同计算资源分配不同的任务。处理器调度474可以引入和使用如上所述的处理器调度提示。单元470和474可以协同动作,以便实施所产生数据的分级传递和消费。

图14描绘可以实施在图13中描绘的各单元的示例执行单元的各方面。粗糙的调度程序502跨一组向量执行单元504分配任务,该组向量执行单元中的每个可以包括一个指令提取/解码单元和由该提取/解码单元驱动的一组处理单元。粗糙的调度程序502可以在向量化执行单元上或管理处理器(未示出)上执行。这些向量化执行单元504-506与缓存层次结构510通信。缓存层次结构510可以提供用于每个执行单元的一组专用存储器(例如,l1缓存)以及其他级别的缓存层次结构。缓存层次结构510可以与主存储器512通信。缓存一致性控制器515可以消费缓存提示并控制哪个数据被从缓存层次结构510驱逐以及哪个数据被预提取。固定和/或有限的可编程加速器514可以被实施用于各种处理。例如,可以提供固定功能的光线/图元交叉点检验单元。

图15描绘向量化执行单元的示例。此类示例包括用于接收各任务定义的输入队列524以及前端,该前端可以保持跟踪在单元上运行的各种线程的数据并可以解码各指令。细粒度调度程序522可以在时钟周期上确定,基于该时钟周期,线程将被允许在一组simd执行单元526-527上执行各指令。这些单元中的每个单元可以访问寄存器文件(未单独描绘)。此类寄存器文件可以作为l1缓存被实施,或部分作为缓存并且部分作为寄存器文件(例如,此类寄存器文件的某些部分可以通过缓存一致性控制515来管理,而某些部分不是通过其管理)。

这些公开可以作为因素计入面向吞吐量的通用计算系统中,其中,按需几何图形处理连同其他计算可以用根据调度键对工作量分组的调度过程来调度。这些调度键可以表示各种各样的基于特定任务的信息。例如,调度键可以指的是粗糙的粒度加速结构的单元,并且当被几何图形形成过程引用时,可以被调度为用于需求几何图形形成的请求。其他示例面向任务的过程可以包括更多的颗粒任务,诸如检验光线与图元的交叉点,或检验光线与加速结构单元的交叉点。这些调度方面可以被应用于其中有数据单元的发生器的其他计算,该数据单元被另一计算单元或处理单元(诸如视频解码器和图案识别内核、压缩器等等)消费。各过程可以根据它们是否容忍抖动或延迟通过调度过程来处理。例如,某些过程,诸如麦克风输入处理器是不能容忍抖动的,并且因此,调度过程不会将麦克风输入处理调度为光线遍历任务的同类。

在图形处理的背景下,框架着色器可以产生通过消费者光线遍历单元来遍历的光线。着色器可以产生待被另一着色器消费的数据。例如,着色器因为像处理从其中其他材料(着色器)可能被该光线附带的值指定或影响的、在应用距离相关的衰减的材料(例如,浑浊水)脱离的原因可以想要执行另一着色器。同样,交叉点可以触发两个不同的着色器执行,两个着色器可以串行或并行执行(串行是指一个着色器可以向下一个着色器提供输入)。隔板也是可以根据这些公开来调度的模型,其中,着色器在此输出是隔板的输入的中间结果。

更具体地,涉及几何图形处理,顶点着色器或几何图形着色器(输出多边形/几何图形图元)可以具有向层次结构建筑过程发送或排队的输出。贡献值可以由不同的发生器产生,并能通过队列传送到以缓存友好方式读取-更改-写入像素值的内核。

发生器可以在队列中对待由一个或多个消费者读取的输出排队;收集可以基于排队的输出形成。例如,在光线跟踪中,光线可以被修正到用于相应子单元的一个或多个收集,该子单元将通过一个或多个检验单元来读取。在某些情况下,顺序建立模块可以设定多个同类收集的顺序(例如,相对于一个或多个光线待被检验的一组单元)。例如,如果单元相对于所有这些单元具有到要被检验的不同光线的较低平均距离,则该单元可以比其他单元优先检验。随机或代表性的光线可以被选择用于距离检验。

各光线可以从经光栅化过程确定是可见的表面发出。不过,各光线也可以针对位于给定3d场景中的对象的低分辨率(例如,低多边形数)模型检验交叉点,而光栅化可以使用相同对象的较高分辨率模型。因此,应当理解,来自通过光栅化过程识别的可视表面的跟踪光线不排除基于被定义用于光线跟踪背景中的几何图形数据确定给定光线的来源和/或方向。例如,其中光线被发出用于低多边形数对高多边形数的表面位置可能不同;不过,权利要求的范围包括基于例如涉及的任一模型或基于3d空间中的绝对位置定义各光线。

在各图中描绘的活动的顺序不是限制此类活动必须以此方式排序,或者以该顺序执行是优选的。另外,对于给定的同步操作,可能有其中不是所有描绘的活动被执行的情况。例如,某些数据或表组织或格式可能已被执行,并因此此类活动不需再被执行。

如从公开是明显的,所公开的组件和功能中的某些组件和功能可以在硬件、软件、固件或它们的任意组合中实现。如果在固件/软件中实现,那么,功能可以被存储为计算机可读介质上的一个或多个指令或代码,在一个示例中,该介质是非暂时性的。示例包括用数据结构编码的计算机可读介质和用计算机程序编码的计算机可读介质。机器可读介质包括非暂时性机器可读介质。其他种类的介质包括传输介质。非暂时性的介质可以是可以通过机器可访问的任何有形介质。借助示例,此类计算机可读介质可以包括但不限于ram、rom、eeprom、cd-rom或其他光盘存储、磁盘存储或其他磁存储装置,或可用于以指令或数据结构的形式存储期望的程序代码并可以通过机器访问的任何其他介质。

本领域的技术人员也应当理解,结合本文公开的实施例描述的各种说明性逻辑块、模块、电路和算法步骤可以被实施为计算机可读介质中的电子硬件、计算机软件或两者的组合。为了清楚说明这种硬件和软件的可互换性,各种说明性组件、块、模块、电路和步骤已就其功能在上面进行了一般描述。这类功能被实施为硬件还是软件取决于施加在整个系统的特定应用和设计约束条件。熟练的技术人员可以为每个特定应用以各种方式实施所描述的功能,但是此类实施决定不应被理解为导致偏离本发明的范围。

所提供的各方面和特征描述允许本领域的任何技术人员能制作和使用各系统、设备并执行所公开的方法。各种更改对于本领域的技术人员是明显的,并且在该文件中描述的原理可以应用于其他方面而不脱离本公开的精神或范围。因此,所述描述并不旨在限制权利要求。相反,权利要求符合与本文公开的原理和新颖特征一致的范围。

附图包括结构的相关布置和过程组件的排序,该附图仅用于帮助理解所述描述的目的。这些相对布置和编号并不隐含对权利要求中各单元和步骤的排序或布置的任何指定限制的公开。过程限制可以互换顺序,而不偏离本公开的范围,并且,权利要求中装置加功能的条款旨在覆盖不仅包括结构等同件而且包括等价结构的被描述为执行引用功能的结构。

虽然各种示例和其他信息用来解释在所附权利要求的范围内的各方面,但是并不意味着基于此类示例中的特定特征或布置来限制权利要求,因为本领域的普通技术人员能够使用这些示例导出各种各样的实现。此外,虽然某些主题被以指定结构特征和/或方法步骤的示例的语言来描述,但应当理解,在附属权利要求中定义的主题不一定局限于这些描述特征或行为。例如,此类功能可以在与本文确认的那些组件不同的组件、附加到本文确认的那些组件的组件或少于本文确认的那些组件的组件中不同分布或执行。相反,所描述的特征和步骤被公开为在附属权利要求的范围内的系统和方法的组件的示例。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1