CN110349273A - 访问图元数据 - Google Patents
访问图元数据 Download PDFInfo
- Publication number
- CN110349273A CN110349273A CN201910272742.2A CN201910272742A CN110349273A CN 110349273 A CN110349273 A CN 110349273A CN 201910272742 A CN201910272742 A CN 201910272742A CN 110349273 A CN110349273 A CN 110349273A
- Authority
- CN
- China
- Prior art keywords
- vertex
- pel
- pieces
- tessellation
- subdivision
- 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.)
- Pending
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T19/00—Manipulating 3D models or images for computer graphics
- G06T19/20—Editing of 3D images, e.g. changing shapes or colours, aligning objects or positioning parts
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T17/00—Three dimensional [3D] modelling, e.g. data description of 3D objects
- G06T17/20—Finite element generation, e.g. wire-frame surface description, tesselation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T1/00—General purpose image data processing
- G06T1/20—Processor architectures; Processor configuration, e.g. pipelining
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T15/00—3D [Three Dimensional] image rendering
- G06T15/005—General purpose rendering architectures
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T17/00—Three dimensional [3D] modelling, e.g. data description of 3D objects
- G06T17/005—Tree description, e.g. octree, quadtree
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T17/00—Three dimensional [3D] modelling, e.g. data description of 3D objects
- G06T17/10—Constructive solid geometry [CSG] using solid primitives, e.g. cylinders, cubes
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T2200/00—Indexing scheme for image data processing or generation, in general
- G06T2200/28—Indexing scheme for image data processing or generation, in general involving image processing hardware
Landscapes
- Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- Computer Graphics (AREA)
- Geometry (AREA)
- Software Systems (AREA)
- Architecture (AREA)
- Computer Hardware Design (AREA)
- General Engineering & Computer Science (AREA)
- Image Generation (AREA)
Abstract
本申请涉及访问图元数据。本文描述了一种在曲面细分期间针对图元以及可选地针对顶点生成标识符(ID)的方法。ID包括位的二进制序列,其代表在曲面细分过程期间采取的细分步骤,因此对执行曲面细分的方式进行编码。这样的ID随后可以用于生成随机图元或顶点,并因此重新计算对于该图元或顶点的顶点数据。
Description
技术领域
本申请涉及,但不限于,访问图元数据。
背景
曲面细分(tessellation)是计算机图形学中使用的技术,它将一组表示场景中对象的曲面(surfaces)分成许多更小且更简单的片(称为图元),这种片通常是三角形,其更适合渲染。得到的经曲面细分的曲面通常是原始曲面的近似,但是可以通过增加生成的图元的数量来提高这种近似的精度,这反过来通常导致图元更小。曲面细分/细分(sub-division)的数量通常由细节层次(LOD)确定。因此,在需要更高的细节层次的地方(例如,因为对象更靠近观察者和/或对象具有更复杂的形状),通常使用增加数量的图元。然而,使用更大数量的三角形增加了渲染场景所需的处理工作量。
通常在形状为正方形或三角形(即,四边形或三角形)的片(patch)上执行对三角形图元的细分,并且该片可以被弯曲以拟合(fit)成它们所代表的对象的曲面(因此可以被称为“曲面片(surface patches)”)和/或应用位移(displacement)映射。然而,不是在弯曲片上执行细分,而是在片的域中执行细分(例如,就像片是平面的,而不是由例如多项式方程定义的),片的域可以用(u,v)参数(也称为UV参数)来定义,并被称为“参数空间”或“UV空间”。这意味着曲面细分过程独立于最终曲面中存在的任何曲率。
由于生成的图元数量的增加,图形处理系统处理图元的能力变得更为重要。提高图形处理系统的效率的一种已知方式是以基于图块(tile)的方式渲染图像。以这种方式,图元在其中被渲染的渲染空间被分成多个(aplurality of)图块,其然后可以被彼此独立地渲染。基于图块的图形系统包括平铺图元的平铺(tiling)单元,即,对于图元,确定该图元位于渲染空间的哪个图块中。然后,当渲染单元渲染图块时,可以给出指示哪些图元应当被用于渲染图块的信息。
下面描述的实施例仅以示例的方式被提供并且不是解决已知图形处理系统的任何或所有缺点的实现方式的限制。
概述
提供本概述来以简化的形式引入在以下详细描述中将进一步描述的概念的选择。本概述不旨在标识出要求保护的主题的关键特征或必要特征,亦不旨在用于限定要求保护的主题的范围。
本文描述了一种在曲面细分期间针对图元以及可选地针对顶点生成标识符(ID)的方法。ID包括位的二进制序列,其代表在曲面细分过程期间采取的细分步骤,因此对执行曲面细分的方式进行编码。这样的ID随后可以用于生成随机图元或顶点,并因此重新计算对于该图元或顶点的顶点数据。
第一方面提供了一种在计算机图形系统中执行曲面细分的方法,该方法包括:使用多个细分步骤将初始片细分成多个图元;以及针对每个图元生成图元ID,其中,图元ID对关于如何通过多个细分步骤来生成图元的数据进行编码。
关于如何通过细分初始片来生成图元的数据可以包括描述在曲面细分期间为生成图元而采取的多个细分步骤的位的序列。位的序列中的每个位可以指示在曲面细分期间在相应的细分步骤中采取哪个分支来生成图元。
图元的ID可以包括指定在曲面细分过程期间采用的递归序列的位的序列。图元的ID还可以包括可变长度的尾部部分,并且其中,图元的ID包括固定数量的位。
使用多个细分步骤将初始片细分成多个图元可以包括:分析初始片以确定是否对片进行细分;响应于确定片将不被细分,将片输出为三角形图元;响应于确定片将被细分,将初始片分成两个或更多个子片;依次选择由初始片的细分形成的每个子片,并以选择的子片代替初始片重复该方法;并且其中,针对每个图元生成ID可以包括:响应于将初始片分成两个或更多个子片,向子片分配与已经被细分的片的ID匹配的ID;以及响应于选择由初始片的细分形成的片,根据选择来更新由初始片的细分形成的每个片的ID。
可以通过对三角形、四边形或多边形域的细分来形成初始片,并且片的ID还包括报头部分,该报头部分包括指示图元在由三角形或四边形域形成的多个初始片的哪一个中的一个或更多个位。
根据选择来更新由初始片的细分形成的每个片的ID可以包括,对于每个ID:向指定在曲面细分过程期间采用的递归序列的位的序列添加一个或更多个新位,新位的值取决于选择。
初始片可以是三角形片,并且依次选择由初始片的细分形成的每个子片以及以选择的子片代替初始片重复该方法可以包括:基于一个或更多个标志的值来依次选择由初始片的细分形成的子片的每一个,并且以选择的子片代替初始片重复该方法;并且其中,以选择的子片代替初始片重复该方法包括:分析选择的子片以确定是否进一步细分选择的子片;响应于确定选择的子片将不被细分,将选择的子片输出为三角形图元;响应于确定所选择的子片将被进一步细分,将选择的子片分成两个或更多个子片;以及基于一个或更多个标志的值来依次选择由选择的子片的细分形成的每个子片,并以选择的子片重复该方法。
将初始片分成两个或更多个子片可以包括:将初始片分成左子片和右子片。
在方法中,初始片可以具有排序标志,细分形成两个片,左片和右片,并且基于一个或更多个标志的值来依次选择由初始片的细分形成的左片和右片中的每一个可以包括:基于初始片的排序标志的值来依次选择由初始片的细分形成的左片和右片中的每一个。
在方法中,细分形成两个片,左片和右片,并且基于一个或更多个标志的值来依次选择由初始片的细分形成的左片和右片中的每一个可以包括:基于排序标志的值来依次选择由初始片的细分形成的左片和右片中的每一个。
方法还可以包括:对于细分层次的每次增加或减少,将排序标志的值反转(invert)一次。
初始片可以包括两个或三个顶点,并且将初始片分成两个或更多个子片可以包括:添加新顶点(M);为新顶点分配已被细分的初始片的ID;形成包括新顶点和初始片的一个或两个顶点的左子片;以及形成包括新顶点和初始片的一个或两个顶点的右子片。
方法还可以包括:在曲面细分单元中接收先前被曲面细分的图元的ID和曲面片引用(surface patch reference);访问来自与图元相关联的曲面片的数据,该数据包括曲面细分因子和拓扑数据;基于图元ID选择初始片,并且用一个或更多个细分阶段来至少部分地曲面细分初始片,其中,在细分的每个阶段处,基于图元的ID中的一个或更多个位的序列确定是否执行细分以及任何新形成的子片中的哪个要被进一步细分。
方法还可以包括:在曲面细分单元中接收图元的ID;在多个不同位置截短(truncate)图元的ID,以生成图元中每个顶点的ID;对于图元中顶点的子集,在多个不同位置截短顶点的顶点ID以生成父顶点的ID;使用顶点ID来计算对于图元中每个顶点和对于图元中顶点的子集的父顶点的UV坐标;以及使用域着色器(shader)根据计算的UV坐标针对图元中的每个顶点生成顶点数据。
第二方面提供了一种在计算机图形系统中执行曲面细分的方法,该方法包括:在曲面细分单元中接收先前被曲面细分的图元的ID和曲面片引用;访问来自与图元相关联的曲面片的数据,该数据包括曲面细分因子和拓扑数据;基于图元ID选择初始片,并且用一个或更多个细分阶段来至少部分地曲面细分初始片,其中,在细分的每个阶段处,基于图元的ID中的一个或更多个位的序列,确定是否执行细分以及任何新形成的子片中的哪个要被进一步细分。
方法还可以包括:基于来自与图元相关联的曲面片的数据来选择输入片,并将输入片细分成一个或更多个初始片。
图元的或片的ID可以包括指定在曲面细分过程期间采用的递归序列的位的序列。位的序列中的每个位可以指示是处理由曲面细分过程中的细分操作形成的左子片还是右子片。
方法还可以包括:从存储器中访问先前被曲面细分的图元的ID。
在方法中,对由输入片的细分生成的初始片至少部分地曲面细分可以导致重新生成先前被曲面细分的图元。
方法还可以包括:输出对于先前被曲面细分的图元的域顶点。域顶点可以被输出到域着色器。在先前被曲面细分的图元是三角形图元的情况下,输出三个域顶点。在先前被曲面细分的图元是等值线(isoline)图元的情况下,输出两个域顶点。
第三方面提供了一种在计算机图形系统中执行曲面细分的方法,该方法包括:在曲面细分单元中接收图元的ID;在多个不同位置截短图元的ID,以生成图元中每个顶点的ID;对于图元中顶点的子集,在多个不同位置截短顶点的顶点ID以生成父顶点的ID;使用顶点ID来计算对于图元中每个顶点和对于图元中顶点的子集的父顶点的UV坐标;以及使用域着色器根据计算的UV坐标针对图元中的每个顶点生成顶点数据。
图元的ID可以包括描述用于生成图元的细分序列的位的序列。
图元的ID可以包括指定在曲面细分过程期间采用的递归序列的位的序列。递归序列可以定义细分层次结构,并且在多个不同位置截短图元的ID以生成图元中每个顶点的ID可以包括:根据第一函数执行第一截短,第一函数将细分层次结构后退一步(steps onestep back up the subdivision hierarchy)以生成第一顶点ID;根据第二函数执行两次进一步截短以生成第二顶点ID和第三顶点ID,其中第二函数将细分层次结构后退两步以生成第二顶点ID,并且将细分层次结构后退S步以生成第三顶点ID,其中S的值由图元的ID确定。每个顶点可以具有相关联的位移因子,并且子集可以仅包括图元中的位移因子不等于位移因子的最大值的那些顶点。
递归序列可以定义细分层次结构,并且对于图元中顶点的子集,在多个不同位置截短顶点的顶点ID以生成父顶点的ID,可以包括:对于图元中顶点的子集,根据第二函数执行两次截短以生成第一父顶点ID和第二父顶点ID,其中,第二函数将细分层次结构后退两步以生成第一父顶点ID,并且将细分层次结构后退S步以生成第二父顶点ID,其中S的值由顶点ID确定。
递归序列可以定义细分层次结构,并且使用顶点ID来计算对于图元中每个顶点和对于图元中顶点的子集的父顶点的UV坐标,可以包括:对于图元中的每个顶点:使用第三函数根据顶点ID来计算对于顶点的顶点UV坐标;并且对于图元中顶点的子集:使用第三函数根据父顶点的顶点ID来计算对于顶点的父顶点的顶点UV坐标。第三函数可以包括:生成固定的复数值;针对顶点ID的每个位形成复数值的缩放版本(scaled versions)的序列;对序列中的所有缩放版本进行求和;以及执行缩放和平移操作以生成对应于顶点ID的顶点UV。
第四方面提供了一种曲面细分单元,该曲面细分单元被配置为在计算机图形系统中执行曲面细分,该曲面细分单元包括硬件逻辑,该硬件逻辑被布置成:使用多个细分步骤来将初始片细分成多个图元;以及针对每个图元生成图元ID,其中,图元ID对关于如何通过多个细分步骤生成图元的数据进行编码。
被布置成将初始片分成两个或更多个子片的硬件逻辑可以包括被布置成将初始片分成左子片和右子片的硬件逻辑。
在各种示例中,初始片具有排序标志,细分形成两个片,左片和右片,并且被布置成基于一个或更多个标志的值来依次选择由初始片的细分形成的左片和右片中的每一个的硬件逻辑包括被布置成执行以下操作的硬件逻辑:基于初始片的排序标志的值来依次选择由初始片的细分形成的左片和右片中的每一个。
细分可以形成两个片,左片和右片,并且被布置成基于一个或更多个标志的值来依次选择由初始片的细分形成的左片和右片中的每一个的硬件逻辑可以包括被布置成基于排序标志的值来依次选择由初始片的细分形成的左片和右片中的每一个的硬件逻辑。
曲面细分单元还可以包括硬件逻辑,该硬件逻辑被布置成:对于细分层次的每次增加或减少,将排序标志的值反转一次。
在各种示例中,初始片包括两个或三个顶点,并且被布置成将初始片分成两个或更多个子片的硬件逻辑可以包括被布置成执行以下操作的硬件逻辑:添加新顶点(M);为新顶点分配已经被细分的初始片的ID;形成包括新顶点和初始片的一个或两个顶点的左子片;并且形成包括新顶点和初始片的一个或两个顶点的右子片。
第五方面提供了一种计算机图形系统,包括:如本文所述的第一曲面细分单元;以及包括硬件逻辑的第二曲面细分单元,该硬件逻辑被布置成:在曲面细分单元中接收先前被曲面细分的图元的ID和曲面片引用;访问来自与图元相关联的曲面片的数据,该数据包括曲面细分因子和拓扑数据;基于来自与图元相关联的曲面片的数据来选择输入片,并将输入片细分成一个或更多个初始片;基于图元ID来选择初始片,并且用一个或更多个细分阶段至少部分地曲面细分初始片,其中,在细分的每个阶段处,基于图元的ID中的一个或更多个位的序列来确定是否执行细分以及任何新形成的子片中的哪个要被进一步细分。
曲面细分单元还可以包括硬件逻辑,该硬件逻辑被布置成:输出对于先前被曲面细分的图元的域顶点。域顶点可以被输出到域着色器。
曲面细分单元还可以包括硬件逻辑,该硬件逻辑被布置成:从存储器访问先前被曲面细分的图元的ID。
第六方面提供了一种计算机图形系统,包括:如本文所述的第一曲面细分单元;包括硬件逻辑的第二曲面细分单元,该硬件逻辑被布置成:在曲面细分单元中接收图元的ID;在多个不同位置截短图元的ID,以生成图元中每个顶点的ID;对于图元中顶点的子集,在多个不同位置截短顶点的顶点ID以生成父顶点的ID;并使用顶点ID来计算对于图元中每个顶点和对于图元中顶点的子集的父顶点的UV坐标;以及包括硬件逻辑的域着色器,该硬件逻辑被布置成根据计算的UV坐标来生成对于图元中每个顶点的顶点数据。
图元的ID可以包括指定在曲面细分过程期间采用的递归序列的位的序列。
在各种示例中,每个顶点具有相关联的位移因子,并且子集仅包括图元中的位移因子不等于位移因子的最大值的那些顶点。
在图元的ID包括指定在曲面细分过程期间采用的递归序列的位的序列的各种示例中,递归序列可以定义细分层次结构,并且曲面细分单元中被布置成使用顶点ID来计算对于图元中的每个顶点和对于图元中顶点的子集的父顶点的UV坐标的硬件逻辑可以包括被布置成执行以下操作的硬件逻辑:对于图元中的每个顶点:使用第三函数根据顶点ID来计算对于顶点的顶点UV坐标;以及对于图元中顶点的子集:使用第三函数根据父顶点的顶点ID来计算对于顶点的父顶点的顶点UV坐标。第三函数可以包括:生成固定的复数值;针对顶点ID的每个位形成复数值的缩放版本的序列;对序列中的所有缩放版本进行求和;以及执行缩放和平移操作以生成对应于顶点ID的顶点UV。
第七方面提供了一种被配置为在计算机图形系统中执行曲面细分的曲面细分单元,该曲面细分单元包括硬件逻辑,该硬件逻辑被布置成:在曲面细分单元中接收先前被曲面细分的图元的ID和曲面片引用;访问来自与图元相关联的曲面片的数据,该数据包括曲面细分因子和拓扑数据;基于图元ID选择初始片,并且用一个或更多个细分阶段来至少部分地曲面细分初始片,其中,在细分的每个阶段处,基于图元的ID中的一个或更多个位的序列,确定是否执行细分以及任何新形成的子片中的哪个要被进一步细分。
第八方面提供了一种计算机图形系统,包括:曲面细分单元,其包括硬件逻辑,该硬件逻辑被布置成:在曲面细分单元中接收图元的ID;在多个不同位置截短图元的ID,以生成图元中每个顶点的ID;对于图元中顶点的子集,在多个不同位置截短顶点的顶点ID以生成父顶点的ID;并使用顶点ID来计算对于图元中每个顶点和对于图元中顶点的子集的父顶点的UV坐标;以及包括硬件逻辑的域着色器,该硬件逻辑被布置成根据计算的UV坐标来生成对于图元中每个顶点的顶点数据。
可以在集成电路上的硬件中体现被配置成执行本文描述的任何方法的硬件曲面细分器或其他硬件,例如单独的单个图元曲面细分器(或包括硬件的图形流水线(pipeline))。可以提供在集成电路制造系统处制造被配置为执行本文描述的排序方法之一的曲分细分单元的方法。可以提供集成电路定义数据集,当其在集成电路制造系统中被处理时,配置系统以制造被配置为执行本文描述的任一种方法的硬件曲面细分器或其他硬件(例如单独的单个图元曲面细分器)。可以提供一种非暂时性计算机可读存储介质,其上存储有集成电路的计算机可读描述,当该计算机可读描述在被处理时使布局处理系统生成在集成电路制造系统中使用的电路布局描述以制造被配置为执行本文描述的任一种方法的硬件曲面细分器或其他硬件(例如单独的单个图元曲面细分器)。
可以提供一种集成电路制造系统,其包括:非暂时性计算机可读存储介质,其上存储有描述被配置为执行本文描述的任一种方法的硬件曲面细分器或其他硬件(例如单独的单个图元曲面细分器)的计算机可读集成电路描述;布局处理系统,其被配置为处理集成电路描述,以便生成体现被配置为执行本文描述的任一种方法的硬件曲面细分器或其他硬件(例如单独的单个图元曲面细分器)的集成电路的电路布局描述;以及集成电路生成系统,其被配置为根据电路布局描述来制造被配置为执行本文描述的任一种方法的硬件曲面细分器或其他硬件(例如单独的单个图元曲面细分器)。
可以提供用于执行本文描述的方法的计算机程序代码。可以提供其上储存有计算机可读指令的非暂时性计算机可读储存介质,该计算机可读指令在计算机系统处被执行时使计算机系统执行本文中所描述的方法。
如对技术人员将明显的是,以上特征可酌情进行组合,并且可与本文中所描述的示例的任意方面组合。
附图说明
现在将参照附图对示例进行详细描述,在附图中:
图1A是已知的GPU流水线的示意图;
图1B是改进的GPU流水线的示意图;
图2A-图2E示出了图示三角形输入片的曲面细分的示意图;
图3A是示出第一示例曲面细分方法的流程图;
图3B是示出图3A示出的第一示例曲面细分方法的变型的流程图;
图3C是示出应用图3A的曲面细分方法的示例顺序的示意图;
图4A是示出其中根据“改进的排序”生成图元的第二示例曲面细分方法的流程图;
图4B是示出图4A示出的第二示例曲面细分方法的变型的流程图;
图5A和图5B是示出示例图元ID的结构的示意图;
图6是针对图元生成ID的示例方法的流程图;
图7、图8A和图8B是根据图元ID生成顶点数据的示例方法的流程图;
图9A、图9B和图9C示出了当与已知的曲面细分方案一起使用时,图8A和图8B的方法的部分的三个图形表示;
图10A和图10B示出了图8A和图8B的方法的部分的图形表示;
图11是基于计算的设备的示意图,该设备被配置为实现本文描述的生成和/或使用图元和/或顶点ID的方法;
图12示出了计算机系统,其中实现了被配置为执行本文描述的任一种方法的硬件曲面细分器或其他硬件(例如单独的单个图元曲面细分器);
图13示出了用于生成集成电路的集成电路制造系统,该集成电路体现被配置为执行本文描述的任一种方法的硬件曲面细分器或其他硬件(例如单独的单个图元曲面细分器);
图14A和图14B是示出本文描述的曲面细分方法的预处理阶段的示意图;
图15是定义图8A示出的第二函数γ的表格。
附图图示了不同的示例。技术人员将认识到,图中所示出的元件边界(例如,框、框的组、或其他形状)表示边界的一个示例。在一些示例中可以是,一个元件可以被设计为多个元件,或者多个元件可被设计为一个元件。在适当情况下,共同的参考数字在全部附图中用于指示类似的特征。
详细描述
以下的描述是通过示例的方式来呈现的,以使本领域技术人员能够进行并使用本发明。本发明不限于本文中所描述的实施例,并且对所公开的实施例的各种修改对于本领域技术人员将是明显的。
现在将仅通过示例来对实施例进行描述。
如上所述,曲面细分涉及选择性地将形状通常为正方形或三角形的片细分成更小的三角形片。通常基于一个或更多个曲面细分因子(TF),例如通过将一个或更多个TF彼此进行比较和/或与阈值进行比较,做出关于片是否应当被细分的确定。在一些示例中,使用边(edge)曲面细分因子,其中片的每条边都具有边曲面细分因子,并且边曲面细分因子定义了特定边(以及由此该特定边是其一部分的片)应当被细分多少次。在其他示例中(例如在GB2533443和GB2533444中描述的方法中),使用顶点曲面细分因子,其中片的每个顶点(或角)具有顶点曲面细分因子。
术语“曲面片”在本文中被用来指通常是有限的N维曲面(或者在等值线(isoline)的情况下是N维曲线段),其是将参数映射函数应用于有界2D域的结果,曲面片是四边形、三角形或其他多边形(或者在等值线的情况下是1D线段)。所得的曲面或等值线可以被认为是N维的,因为它不仅可以包括对于笛卡尔(Cartesian)(或均匀)空间定位的3(或4)维,还可以包括其他参数,例如纹理坐标。如上所述,曲面片可以被弯曲以拟合它们所表示的对象的曲面和/或应用位移映射。然而,曲面细分(即片的细分)不是在“世界空间”中执行的(即,其不在弯曲的曲面片上执行),而是在域空间(其也可以被称为参数化空间或参数空间或UV空间)中执行的,其中域中的任何位置都可以由被认为是域空间坐标的两个坐标(u,v)来描述,这意味着曲面细分过程独立于最终曲面中存在的任何曲率。
术语“片”在本文中被用来指界定域的两个、三个、四个或更多个顶点(分别对于等值线、三角形、四边形或多边形)的有序集合。因此,术语“域”是指由片的顶点界定的二维空间。术语“输入片”被用来指由曲面细分单元基于输入拓扑选择的片,并且该输入片还指顶点的有序集合。在曲面细分单元执行预处理阶段的示例中,该预处理阶段对输入片进行细分,之后将曲面细分算法重复地应用于由预处理阶段形成的片,在预处理阶段中形成的片在本文被称为“初始片”。由初始片的细分形成的片在本文被称为“子片”。术语“图元”在本文中被用来指由曲面细分单元输出的片(例如,初始片或子片),因为它不需要进一步的细分,并且尽管每个图元对应于片(即,初始片或子片),但是它可以是与片不同的形式(例如,图元可以包括索引而不是顶点的有序集合)。虽然输入片、初始片和子片通常是三角形,并且下面的示例示出三角形,但是在其他示例中,输入片、初始片和/或子片可以是等值线或任何形式的多边形。
在GB2533443中描述了并且在图14A和图14B中示出了生成初始片的预处理阶段的示例。预处理阶段被用于确保曲面细分独立于取向。如图14A所示,如果输入片是三角形片1402,则预处理阶段输出一个三角形片1402(其与输入三角形片相同,并且不需要曲面细分)或者三个三角形片1408-1410。如图14B所示,如果输入片是四边形片1404,则预处理阶段输出四个三角形片1412-1415。类似的技术也可以应用于输入多边形片,以将其细分成多个初始三角形片。
术语“顶点”通常用于描述位置外加其他属性,其中这些属性根据上下文而不同。例如,来自域着色器的输入控制点和输出顶点包括3D位置外加其他参数,例如法线、切线、纹理等(并且可以被称为“世界空间顶点”),而曲面细分器内的顶点(即,曲面细分方法内用作片的元素的那些顶点)包括域空间坐标和顶点曲面细分因子(并且可以被称为“曲面细分器顶点(tessellator vertice)”)。因此,曲面细分器内的这些顶点与输入控制点或形成最终三角形的最终N维顶点不同。
图1A示出了示例图形处理单元(GPU)流水线100的示意图,其可以在GPU内的硬件中被实现,并且其使用基于图块的渲染方法。如图1A所示,流水线100包括几何形状处理阶段(geometry processing phase)101A和光栅化阶段101B。几何形状处理阶段101A包括曲面细分单元104和负责执行按顶点计算的顶点着色器102。顶点着色器102不知道网格(mesh)拓扑,并且执行按顶点操作,使得它仅具有正在被处理的当前顶点的信息。在顶点着色器102和曲面细分单元(或曲面细分器)104之间可以有一个或更多个可选的外壳(hull)着色器,未在图1A中示出。几何形状处理阶段101A还包括几何形状特定域着色器(DS)103、平铺单元106,并且还可以包括其他元件,例如存储器105和/或图1A中未示出的其他元件。
与顶点着色器不同,硬件曲面细分单元104(以及任何可选的外壳着色器)按片(per-patch)而不是按顶点来操作。曲面细分单元104输出图元,并且在使用顶点索引的系统中,输出图元采取三个顶点索引和顶点数据(例如,对于每个顶点一个UV坐标,以及在各种示例中,诸如位移因子和可选地父UV坐标的其他参数)的缓冲区的形式。在不使用索引的情况下,输出图元采取三个域顶点的形式,其中域顶点可以仅包括UV坐标,或者可以包括UV坐标加上其他参数(例如权重,诸如位移因子以及可选地父UV坐标)。曲面细分器104输出的数据可以被存储在存储器105中。
几何形状处理阶段101A中的几何形状特定域着色器103生成图元的角的投影位置。平铺单元106从存储器105读取由曲面细分器104生成的数据,并使用该数据连同由几何形状特定域着色器103生成的投影位置来生成按图块(per-tile)显示列表。显示列表然后被输出到参数存储器107。对于特定图块,每个按图块显示列表标识至少部分地位于该图块内的那些图元。这些显示列表可以由平铺单元106使用平铺算法生成。GPU流水线内的后续元件(例如光栅化阶段101B)然后可以从参数存储器107读取数据。
尽管图1A示出了使用几何形状特定域着色器103来计算屏幕空间中新图元的投影位置(称为“屏幕坐标”),但是在其他示例中,可以使用全域着色器(类似于域着色器108)或可以使用替代的专用硬件来执行对于图元的屏幕坐标的这些计算。在不包括几何形状特定域着色器103的其他示例中,可以提供硬件,其被布置成估计新图元的屏幕坐标。
作为光栅化阶段101B的一部分的域着色器108用作对于由曲面细分器104产生的顶点的第二顶点着色器,并且每图块每图元每顶点被执行一次(executed once pervertex per primitive per tile),然而高速缓存可以用于实现着色的顶点的重用。域着色器被提供了域空间位置(u,v),并且被赋予所有片信息(例如,来自顶点着色器),并且输出完整的顶点结构。域着色器使用片控制点和域空间坐标来构建新顶点,并(例如,通过采样纹理中编码的高度映射)应用任何位移映射。(在域着色器108中的)域着色可以被尽可能晚地保留在GPU流水线100中,因为它极大地扩大了存储每个顶点所需的空间。在域着色器108已经针对每个片的每个生成的顶点运行之后,对于每个图块的数据在光栅化器109中被进一步处理,并且渲染一些或所有图元。
为了顶点数据可用于渲染(例如,用于域着色器108和光栅化器109),可以根据平铺储存方案来存储由曲面细分器104生成的顶点数据。在第一示例方案中,顶点数据可以被存储在对于由平铺单元106生成的每个组(或图块)的图元的列表中,例如,其中图元以顶点UV的三元组(triples)形式被输出,并且在另一示例方案中,顶点数据可以被存储在一起,并且图元的列表可以包括对该数据的引用。可选地,顶点数据(例如,存储器105中顶点UV的缓冲区的内容)可以(例如,在平铺单元106之后)被丢弃,并且只有图元标识符可以被保留在显示列表中(并且存储在参数存储器107中)。当(例如,域着色器108)需要顶点数据时,曲面细分过程可以被重新运行,并且(例如,对于特定的显示列表)不需要的那些图元的数据被丢弃或者根本不生成。将顶点数据(例如UV坐标并且在一些示例中,附加的顶点属性)存储在显示列表中(因此在参数存储器107中)使用了大量的储存和带宽(例如在GPU和系统存储器之间),因此丢弃顶点数据并随后再生成它,节省了储存和带宽;然而,通过对所有图元重新运行曲面细分来重新生成顶点数据是低效的。
本文描述了一种针对从曲面细分单元(可替换地,其可以被称为曲面细分器)输出的图元生成ID的方法,其中这些图元ID对关于如何生成图元的信息进行编码,而不是简单地指示图元从曲面细分单元输出的顺序。还描述了实现该方法的曲面细分单元(或曲面细分器)。使用本文描述的图元ID,顶点数据可以被丢弃并且不存储在显示列表中(从而节省储存和带宽),而不是重新运行曲面细分,并且图元ID可以被用于生成顶点数据,例如在曲面细分单元中或者在单独的专用的硬件逻辑中。本文还描述了使用图元的图元ID针对图元生成顶点数据的方法,以及实现这些方法的硬件,包括不涉及重新运行曲面细分单元的方法,该曲面细分单元执行完整的细分或执行对于单个图元的细分。
可以在硬件中实现本文描述的方法,例如在如图1B示出的改进的GPU流水线101中。如图1B所示,流水线101包括几何形状处理阶段111A和光栅化阶段111B。几何形状处理阶段111A包括负责执行按顶点计算的顶点着色器102。如上参考图1A所述,顶点着色器102不知道网格拓扑,而只知道已经被馈送到其中的当前顶点。几何形状处理阶段111A还包括所有图元曲面细分器(All Primitives Tessellator)112、存储器115、几何形状特定域着色器(DS)113以及平铺单元116。在顶点着色器102和所有图元曲面细分器112之间可以有一个或更多个可选的外壳着色器(未在图1B中示出)。
与顶点着色器102不同,所有图元曲面细分器112(以及任何可选的外壳着色器)按片而不是按顶点进行操作。
所有图元曲面细分器112被配置为执行初始的完整的曲面细分,并生成图元及其ID以及顶点数据。在各种示例中,所有图元曲面细分器112输出图元的列表(例如,以UV缓冲区和使用索引的索引缓冲区的形式,或者如果不使用索引,则以UV三元组的图元缓冲区的形式)。所有图元曲面细分器112也生成ID缓冲区(与图元顺序匹配),并且图元列表和ID缓冲区可以被存储在存储器115中。
改进的GPU流水线101中的几何形状特定域着色器113生成图元的角的投影位置(即屏幕坐标)。平铺单元116然后使用(如由几何形状特定域着色器113生成的)投影位置来确定哪些图元至少部分地位于每个图块中,并生成相应的按图块显示列表。图元ID或对这些ID的引用(取决于所使用的平铺储存方案)被存储在相应的显示列表中(例如,在参数存储器117中,即在每个图块中部分可见的图元的列表中),而不是随后可以被丢弃的UV坐标中。图元ID比三个UV坐标更紧凑,因此这节省了存储器使用和带宽(因此参数存储器117的大小可以比图1A示出的GPU流水线100中相应的参数存储器107小得多,并且这种布置将使用更少的功率)。对曲面片控制点(包括曲面细分因子)的引用也被存储(例如,在参数存储器117中)。
尽管以上的描述和图1B示出了使用几何形状特定域着色器113来计算屏幕空间中新图元的投影位置(称为“屏幕坐标”),但是在其他示例中,可以使用全域着色器(类似于域着色器108)或可以使用替代的专用硬件来执行对于图元的屏幕坐标的这些计算。在不包括几何形状特定域着色器113的其他示例中,可以提供硬件,其被布置成估计新图元的屏幕坐标。
当(在光栅化阶段111B中)要光栅化图块时,使用单个图元曲面细分器114将对于图块的显示列表中的每个图元ID变换成UV坐标的三元组(可以被缩写为“UV的三元组”)。单个图元曲面细分器114被配置为根据输入图元ID生成顶点数据,并且尽管这被示出为光栅化阶段111B的一部分(因为这是它在数据流中被定位的位置),但是它可以物理上靠近所有图元曲面细分器112或者与所有图元曲面细分器112集成在一起,例如使得可以在所有图元曲面细分器112和单个图元曲面细分器114之间重用逻辑。两个曲面细分器112、114物理上位于同一位置或集成在一起,这两个曲面细分器可以被统称为改进的曲面细分单元。
光栅化阶段111B中的域着色器118用作对于由单个图元曲面细分器114产生的顶点的第二顶点着色器,并且每图块每图元每顶点被执行一次,尽管高速缓存可以用于实现着色的顶点的重用。域着色器118被提供了域空间位置(u,v),并被赋予所有的片信息,并输出完整的顶点结构。域着色器使用片控制点和域空间坐标来构建新顶点,并(例如,通过采样纹理中编码的高度映射)应用任何位移映射。(在域着色器118中的)域着色可以被尽可能晚地保留在GPU流水线101中,因为它极大地扩大了顶点大小(例如,就每个顶点的数据的位数而言)。在域着色器118和几何形状特定域着色器113被单独地实现的情况下,域着色器118的大小可以大于几何形状特定域着色器113,因为它还可以被配置为处理除了几何数据之外的其他边带数据。
在域着色器118已经针对由单个图元曲面细分器114生成的每个顶点运行之后,在光栅化器119中进一步处理对于每个图块的数据,并且渲染一些或所有图元。
如上所述,本文描述的生成图元ID的方法和根据图元(例如,单个图元)的图元ID生成顶点数据的方法可以分别在所有图元曲面细分器112和单个图元曲面细分器114内被实现,或者在结合两个曲面细分器112、114的功能的改进的曲面细分单元内被实现。
图1B的GPU流水线101仅作为示例被示出,并且本文描述的改进的曲面细分方法可以用在任何GPU体系结构中。还将认识到,所有图元曲面细分器112和/或单个图元曲面细分器114可以被用在GPU流水线中,该GPU流水线包括除顶点着色器102、可选的外壳着色器和域着色器118之外的其他着色器,或者代替顶点着色器102、可选的外壳着色器和域着色器118的其他着色器。
可以在硬件中实现所有图元曲面细分器112和单个图元曲面细分器114。可替换地可以在软件(或软件和硬件的组合)中实现本文描述的方法,并且下面参考图11描述了可以被配置为实现上述曲面细分方法的示例基于计算的设备。
虽然上面没有描述,但是顶点数据可以在被存储在存储器中(例如,在图1A的存储器105和/或参数存储器107中,以及在图1B的存储器115和/或参数存储器117中)时被压缩。
如可以参考图2A-图2E和图3A描述的,曲面细分方法可以是递归的。图2A示出了示例三角形初始片202,并且图3A是示出曲面细分方法的流程图。尽管在图2A-图2E示出的示例中,初始片是三角形片,但是在其他示例中,初始片可以是等值线或具有任意数量边的多边形。如上所述,三角形片是界定域的三个顶点的有序集合,并且在本文描述的示例中,该顶点的有序集合被写成(T,L,R),其中T、L和R分别指顶部、左侧和右侧顶点(如图2A所示)。在本文描述的方法中,对片或子片的引用是指顶点的有序集合(即表示片的数据)。
初始片202的曲面细分从进行评估以确定是否需要初始片202的细分开始(块302)。可以使用任何合适的曲面细分方法(例如,涉及二进制细分的任何曲面细分方法)来做出该确定(在块302中),并且在GB2533443和GB2533444中描述了使用顶点曲面细分因子的两个示例(尽管该方法适用于四边形片而不是三角形片)。可替换地,可以使用其他曲面细分方法。
如果确定初始片不需要被细分(块302中的“否”),则将初始片输出为图元(块304)。然而,如果确定初始片需要被细分(块302中的“是”),则形成左子片204L和右子片204R(块306)。初始片202的这种细分可以包括在左顶点和右顶点之间的边上添加中间顶点(指示为M)(如图2B所示),并且在各种示例中,可以在左顶点和右顶点之间的中间点处添加中间顶点。形成的这两个片204L、204R(在块306中)都是三角形片,并且包括三个顶点的有序集合:(M,R,T)和(M,T,L),并且它们可以分别被称为右子片204R和左子片204L。如上所述,尽管在图2A-图2E示出的示例中,初始片是三角形片,但是在其他示例中,初始片可以是等值线或具有任意数量边的多边形。
在曲面细分的下一阶段处,使用图3A的方法依次选择子片的每一个以被进一步曲面细分(块308),使得图3A的方法被递归地应用。只有当初始子片的第一选择的子片已经被曲面细分使得不需要进一步的细分时,才选择由初始片的细分形成的子片中的第二个(在块308中),并将其输入到图3A的方法中。例如,如果首先选择右子片204R(来自图2B)(在块308中),输入到图3A的方法中,然后再细分(在块306中),则有两个子片206R和206L(如图2C所示),它们又依次被选择(在块308中)以被输入到图3A的曲面细分方法中。如果确定这些中的第一个(例如206L)不需要被细分(块302中的“否”),则这些中的下一个(例如206R)被输入到图3A的曲面细分方法。一旦该子片已经被完全地曲面细分(到所需的程度),则该方法返回递归的顶层,并且由初始片形成的子片中的第二个(例如204L)被输入到图3A的方法中,并且方法被递归地应用于由该子片形成的任何子片(例如子片208L和208R)。该方法继续进行,直到已经评估了由初始片形成的所有子片,并且已经确定它们不需要被细分(块302中的“否”)。子片(以及如果没有细分的话,初始片)一旦输出,就可以被称为图元,因为它们不需要任何进一步的细分。
使用图3A的方法,在评估细分树的另一个分支之前,曲面细分方法被递归地应用于初始片的每个细分层次,其中细分树的一个分支被完全地细分,如图3C所图示,其中每个分支代表子片,并且每个分支上的数字指示子片被输入到图3A中的顺序。作为图元被输出的那些子片(在块304中)具有在图3C中以粗体显示它们的顺序号。
还如图3C所示,由曲面细分单元输出图元的顺序(在块304中)取决于选择子片用于评估的顺序(在块308中)。可以使用不同的标准来选择在每个细分、或分支、点处的片(在块308中),并且图4A示出了示例曲面细分方法,该方法通过对每个细分片的片选择进行特定编码,交替曲面细分单元内对于每个细分层次处理子片的顺序,并且因此,排序中的邻近图元被保证为UV空间中的相邻图元,从而共享两个顶点。输出图元的这种排序可以称为“改进的排序”。
图4A示出的方法最初将初始片作为输入,初始片可以是例如三角形片202,并且进行评估以确定是否需要初始片202的细分(块302)。可以使用任何合适的曲面细分方法(例如,涉及二进制细分的任何曲面细分方法)做出该确定,并且在GB2533443和GB2533444中描述了使用顶点曲面细分因子的两个示例。
如果确定初始片不需要被细分(块302中的“否”),则初始片被输出作为图像(块304)。但是,如果确定初始片需要被细分(块302中的“是”),则形成左子片和右子片(块306)。初始片202的这种细分可以包括在左顶点和右顶点之间的边上添加中间顶点(被指示为M)(如图2B所示),并且在各个示例中,中间顶点可以在左顶点和右顶点之间的中间点处被添加。在所示的示例中形成的这两个子片204L、204R(在块306中)都是三角形片,并且包括三个顶点的有序集合:(M,R,T)和(M,T,L),但是在其他示例中,它们可以是等值线或者具有多于三条边,并且它们可以分别被称为右子片204R和左子片204L。
然后选择新形成的子片中的一个(即,在块306中形成的左子片204L或右子片204R)(在块408中),以通过将所选择的子片输入回图4A的方法中来在新形成的子片中的另一个之前被进一步曲面细分。左子片或右子片的选择的顺序(在块408中)是基于一个或更多个标志的值进行的,并且下面描述了标志的使用的两个不同示例。以这种方式,在评估细分树的另一个分支之前(例如,以与图3C中图形地示出的类似的方式,但其中每个分支点处的选择的顺序由一个或更多个标志确定),图4A的方法被递归地应用于初始片的每个细分层次,其中细分树的一个分支被完全地细分。
在第一示例中,对于每个片(例如,对于每个初始片以及对于随后通过曲面细分形成的每个子片)都有一个标志(例如,单个位标志)。该按片标志确定左子片还是右子片首先被选择,并且当该片被细分时(即当初始片被细分时(在块306中))被输入回图4A的方法中(在块408中),与初始片相关联的标志确定在随后的步骤中做出的选择顺序(在块408中)。在这样的示例中,这使得三角形片成为三个顶点和一个标志的有序集合,例如,(T,L,R,F)或者(T,L,R,),其中F和表示两个不同的标志值(例如,关和开,1和0)。
如果初始片202的标志(作为块302中评估的结果,其在块306中被细分)具有标志的第一值(例如F),则右子片首先被选择并被输入回到图4A的方法中(在块408中),并且仅当不可能进一步细分右子片时,左子片才被输入回图4A的方法中(即,根据需要曲面细分)。然而,如果初始片202的标志具有另一个值(例如),则左子片被首先选择并被输入回到图4A的方法中(在块408中),并且仅当不可能进一步细分左子片时,右子片才被输入回图4A的方法中(即,根据需要曲面细分)。在这样的示例中,当通过父片的细分生成两个子片时(在块306中,其中父片可以是初始片或根据初始片形成的子片),对于两个新形成的子片的标志的值被设置为具有与父片相反的值。因此,如果初始片是(T,L,R,F),则形成的两个子片(在块306中)是(M,T,L,)和(M,R,T,)。类似地,如果初始片是(T,L,R,),则形成的两个子片(在块306中)是(M,T,LF)和(M,R,T,F)。
在第二示例中,可以在曲面细分器中使用单个标志,每当递归层次减少或增加一时,曲面细分器切换状态。在该第二示例中,如果单个标志具有第一值(例如F),则首先选择右子片并将其输入回图4A的方法中(在块408中),并且仅当不可能进一步细分右子片时,左子片才被输入回图4A的方法中(即,根据需要曲面细分)。然而,如果单个标志具有另一个值(例如),则首先选择左子片并将其输入回图4A的方法中(在块408中),并且仅当不可能进一步细分左子片时,右子片才被输入回图4A的方法中(即,根据需要曲面细分)。在该示例中,可以例如在决定进行细分之后(例如,响应于块302中的“是”)或者在形成两个子片之后(在块306中)执行标志值的交换。
如上所述,已经选择了两个新形成的子片204R、204L中的一个(在块408中),所选择的子片被输入回图4A的方法中,并且被曲面细分,直到不可能进一步细分为止,并且这是递归过程。所选择的新形成的子片(例如,片204R)成为图4A的方法的输入,并且确定该子片是否应当被细分(在块302中)。如果不需要细分(块302中的“否”),则所选择的新形成的子片作为图元被输出(块304),并且未选择的新形成的子片(例如,片204L)被输入到图4A的方法。
然而,如果需要对所选择的子片(例如,204R)进行细分(块302中的“是”),则根据所选择的子片形成左子片和右子片(206L、206R)(块306)。由于在该递归层次的标志已经被交换(或者作为子片204R中的标志与初始片202中的标志相反的结果,或者因为作为生成子片204R、204L的方法的一部分交换单个标志),代替首先选择右子片206R(如导致选择子片204R的紧接前一递归层次的情况),首先选择左子片206L(在块408中)。如果该选择的子片206L不需要任何细分,则它作为图元被输出(在块304),并且选择并评估未选择的子片206R(在块302中)。只有当这两个子片206L、206R的曲面细分都完成时,未选择的子片204L才从曲面细分的顶层输入到图4A的方法中,并被考虑用于细分(在块302中)。
输出的图元(来自块304)在使用顶点索引的系统中采取三个索引的形式,并且在不使用索引的系统中采取三个域顶点的形式,并且如上详述,其中域顶点可以仅包括UV坐标或者可以包括UV坐标外加其他参数(例如,权重(诸如位移因子)以及可选地父UV坐标)。
如图2D所示,如果该未选择的子片204L需要细分(块302中的“是”),则形成两个新子片208L、208R。当在子片208L和208R之间进行选择时,用于进行选择的标志(在块408中)具有与其在子片206L和206R之间进行选择时相同的值,因为两个细分都发生在相同的递归/曲面细分层次处,因此首先选择左子片208L。如果该选择的子片208L不需要任何细分,则它被输出(在块304中),并且未选择的子片208R被选择并被评估(在块302中)。
如果使用图4A示出的方法,利用如上所述的用于子片选择的标志位的特定编码,则初始片202被细分为四个子片206L、206R、208L、208R,子片被生成,并且图元以以下顺序被输出:206L、206R、208L、208R,并且图2E示出了该顺序(其中输出图元按顺序被标记为0-3)。
图5A和图5B示出了使用本文描述的方法生成的两个示例图元ID 500、501的示意图。如图5A和图5B所示,图元ID 500、501包括r位的序列502,其指定在曲面细分过程(如图3A或图4A所示的过程)期间采用的递归序列。序列502中的每个位指示在任何选择操作(例如,图3A中的块308或图4A中的块408)中,根据其形成图元的片是首先被选择用于细分(例如,由0指示)还是未被选择(例如,由1指示)。因此,每个位指示根据其形成图元的片是第一个被曲面细分还是第二个被曲面细分,并且这也可以用分支算法来描述,其中位的序列502指示是采取第一分支(即,在块408中片首先被选择用于曲面细分)还是采取第二分支(即,在块408中第二次选择片)。
除了指定在曲面细分过程期间采用的递归序列的r位的序列502之外,图元ID500、501可以包括一个或更多个附加位或位序列。虽然图5A示出的第一示例500包括报头部分504和尾部部分506,但是在其他示例中,图元ID可以仅包括报头部分504和尾部部分506中的一个,或者可以既不包括报头部分504也不包括尾部部分506,和/或可以包括其他部分。图5B中的被示为仅包括尾部部分的第二示例501可以包括报头部分或者不包括尾部部分。
在曲面细分方法中,其中在曲面细分之前的预处理步骤中对输入三角形、四边形或多边形片进行细分(例如,使得输入三角形、四边形或多边形片被分成多个初始片,每个初始片然后被输入到图3A或图4A的曲面细分方法中),图元ID 500可以包括报头部分504,报头部分504包括一个或更多个位(例如2位),指示图元在(例如,如图14A和14B所示以及如上所述由输入三角形/四边形/多边形片形成的)那些初始片的哪一个中。
在各种示例中,图元ID可以包括尾部部分506,尾部部分506用于提供固定长度的图元ID 500、501。在没有这样的尾部部分506的情况下,图元ID 500、501的长度将取决于递归序列的长度(即r的值),并且如果ID被串接(concatenated)起来,这可能会导致歧义(例如,因为编码不是无前缀的(prefix-free),其中术语“无前缀”指的是存在编码对c、d的事实,其中c是d的前缀,因此解析器不能确定它们是已经到达编码c的末尾还是在编码d的中间)。通过包括可变长度的尾部部分506,图元ID的长度是固定的,而与r的值无关,并且尾部部分可以包括预定义的位序列(例如,如图5A和图5B中的示例所示,单个1后面跟着零个或更多个0),这使得尾部部分506能够被识别并与指定所采用的递归序列的位的序列502相区别。
如图6所示,为了生成图元ID,每次形成子片时(块602中的“是”,例如在图3A或图4A的块306中),它继承其父片的图元ID(块604),并且每次发生子片选择时(块606中的“是”,例如在图3A的块308或图4A的块408中),另一组位(例如一个或更多个位)被附加到指定采用的递归序列的位的序列502(块608)。这种向序列502添加新位(在块608中)可以导致从尾部部分506(如果提供)移除一个或更多个位,或者替代地,在提供尾部部分506的情况下,可以在使用图6的方法生成递归序列502之后对尾部部分506进行添加。
虽然图6的方法与曲面细分方法(如图3A和图4A所示)被分开示出,但是将认识到,这两种方法可以一起被实现,使得匹配其父片ID的新形成的子片的图元ID的初始生成(在块604中)可以被实现为用于细分初始片或子片的过程的一部分(例如在图3A或图4A的块306中),并且ID的更新可以被实现为子片选择操作的一部分(例如在图3A的块308中或在图4A的块408中)。
如图5A所示,对于四边形或三角形域(即,对于根据被细分成多个初始片的输入三角形或四边形片形成的图元),可以通过使用可变长度尾部部分506将ID的大小固定在2T+2位,其中T是预定义的固定值(非零),并且在各种示例中,可以大于或等于可以被用于曲面细分的最大曲面细分因子(例如,最大顶点TF)(即,使得码本具有足够的元素来对所有可能的图元进行编码)。将认识到,在报头部分504被省略或者长度不等于2位的情况下,这将改变ID的大小,例如改变为2T+h位,其中h是可选报头部分504中的位数(如上所述,其可以对初始域细分进行编码),或者更一般地改变为h+bR+1位,其中b是在每个递归层次处添加的位数,并且R是递归层次的最大数量(并且在本文描述的示例中,h=2,b=1并且R=2T-1。
在T等于最大TF的示例中,图元ID的长度是最小的(并且码本可以是最小的),因此这提供了有效的实现方式,如下面表格所示:
在本文描述的示例中,最大TF和所有曲面细分因子被认为是以2为底的对数。
如上所述,对于三角形、四边形或多边形域,其中在曲面细分之前,输入片被预处理以将其细分成3个、4个或更多个初始片,图元ID 500可以包括标识图元在那些初始片的哪一个中的报头部分504。对于等值线域或者在输入片没有被预处理的其他情况下,图元ID可以具有如图5B中的第二示例501中的更简单的格式。该示例ID 501省略了报头部分504。在这样的示例中并且对于等值线域(其中细分层次是四边形或三角形域的一半),可以通过使用可变长度尾部部分506将ID的大小固定在T+1位,如上所述,其中T是预定义的固定值(非零),并且在各种示例中,可以大于或等于可用于曲面细分的最大曲面细分因子(例如,最大顶点TF)。同样,在T等于最大TF的示例中可以示出,图元ID的长度最小,因此这提供了有效的实现方式,如下面表格所示:
域 | 最大图元数 | 不等式 | 最小位 | 未使用的编码 |
等值线 | 2<sup>T+1</sup>-1 | 2<sup>T</sup><2<sup>T+1</sup>-1<2<sup>T+1</sup> | T+1 | 0...0 |
当图元ID以与由曲面细分器的递归算法生成的其相关联的图元相同的顺序被输出时,并且其中位0对应于被处理的第一子片,并且位1对应于被处理的第二子片,将以词典(lexicographical)顺序输出图元ID。因此,可以有效地执行找到具有特定ID的图元在缓冲区中的位置或是否存在缓冲区中。如果在每个细分步骤处将多于1位附加到序列,只要子片的选择顺序与按词典顺序排列的附加位匹配,情况也是如此。此外,相邻ID之间的差异通常很小,并且这可以用于有效地压缩存储器中的ID块。
虽然上面结合使用二进制细分的曲面细分方法描述了生成ID的方法(例如,如图3A和图4A所示),但是本文描述的方法也可以用于将片细分成多于两个的子片的情况(例如,细分成四个子片或X个子片,其中,X通常可以是2的幂)。图3B示出了作为图3A(如上所述)示出的方法的变型的另一种曲面细分方法,并且图4B示出了作为图4A(如上所述)示出的方法的变型的另一种曲面细分方法。
在图3B示出的方法中,如果需要细分(块302中的“是”),则初始片或后续递归层次中的子片被细分成两个或更多个子片(块306’,例如,细分成X个子片)。然后依次选择子片的每一个(在块308中),以作为输入被馈送到该方法中(即,馈送到块302中),并且重复该方法,直到形成的所有子片(在块306’中)都已经被选择为止,并且被曲面细分直到没有进一步的细分为止。
在图4B示出的方法中,如果需要细分(块302中的“是”),则初始片或后续递归层次中的子片被细分成两个或更多个子片(块306’,例如,细分成X个子片)。然后依次选择子片的每一个,其中选择的顺序基于一个或更多个标志的值(块408),这些标志将被馈送到图4B的方法中并被曲面细分,直到没有进一步的细分为止。
选择子片的顺序(在块408中)基于多于一个的标志的值。更一般地,一个或更多个标志的值可以被认为是对由输入片形成的子片的曲面细分的排序进行编码(在块306’中),并且每个子片可以依次被曲面细分(通过将子片输入到图4B的方法中),直到没有基于由一个或更多个标志的值编码的排序的进一步细分为止。
如上参考图4A所述,每个初始片(以及曾经形成的子片)可以具有相关联的标志,并且当选择子片时可以使用这些标志的值(在块408中)。在每个子片不具有相关联的标志的示例中(如在上述第二标志示例中),并且在输入片被细分成X个子片的示例中,一个或更多个标志可以包括整数的小堆栈(stack)(其中对于每个递归层次有一个条目),其存储在每个细分层次处形成的子片的数量,例如对于特定细分层次X的值,其中对于不同层次该值可能不同。
如果发生了将片(例如,初始片或子片)新细分为X个子片,则值X被推入到堆栈上。每次不发生细分时,堆栈上最顶端的值递减1。如果堆栈上最顶短端的值达到零,则将它从堆栈中弹出。细分层次随后由堆栈的元素数量给出,并且子片选择的顺序(在块408中)可以被确定为该层次的函数。
在替换方案中,如果发生了将片新细分成X个子片,则将值X-1压入堆栈上。每次不发生片/子片的细分并且输出图元时,堆栈上最顶端的值递减1,除非该值为0,在这种情况下,将它从堆栈中弹出。如果当从堆栈中弹出一个值时,下一个值也是0,也会将它从堆栈中弹出。当堆栈为空时,该过程终止。然后从堆栈的元素数量导出细分层次,并且子片选择的顺序(在块408中)可以被确定为该层次的函数。该替代方案每条目只有X个可能值,而不是像前一种方案那样有X+1个,这意味着可以用更少的位对每个条目进行编码。
使用图3B或图4B的方法,并且其中X是2的幂,来自图2A-2E的方法的两个或更多细分层次可以例如在一个细分步骤中(例如,在下一个片选择发生之前的一个片中)被执行。
在曲面细分方法将初始片或子片细分成多于两个的子片的情况下(例如,如图3B和图4B的方法),可以使用相同的原理来生成图元ID,其中每次子片选择发生时都将新位添加到位序列(例如,如图6所示以及如上所述)。例如,当细分成2的幂个子片(例如8个子片)时,每次细分发生时,将多个位(例如3位)添加到图元ID的末尾,其中添加的位指示子片在处理顺序中的位置(例如,3位指示子片是被第一个、还是第二个、...、还是第八个处理)。图6的方法可以用于涉及片的递归细分的任何曲面细分方法,而与任何层次处的分支数量无关。该分支的数量不必是2的幂,但是当使用二进制编码时,该过程对于2的幂是最有效的。
在没有细分发生的示例中,即初始片没有被细分并且仅输出单个图元,任何未使用的图元ID可以被分配给该图元(例如,任何以11开始的图元ID)。通过以这种方式使用特殊的图元ID,图元总是可以被识别为特殊情况,并且也可以根据图元ID将它的顶点ID生成为特殊情况(例如,000...0、010...0和100...0)。
本文描述的方法也可以用于不使用递归细分的其他曲面细分方法,例如,其中曲面细分方法是迭代的而不是递归的,例如,在DirectX和OpenGL中(如在OpenGL规范的第313-321页所述,https://www.khronos.org/registry/OpenGL/specs/es/3.2/es_spec_3.2.pdf)。在这样的示例中,r位的序列502没有指定在曲面细分过程期间采用的递归序列,但是仍然对在曲面细分过程期间采用的细分的序列进行编码。例如,如果曲面细分方法首先将四边形域分成行,然后分成列,然后将由行-列划分形成的每个四边形子片细分成两个三角形(例如,左上和右下),那么针对特定的三角形图元,r位的序列502可以对其所在的行、其所在的列以及它是左上图元还是右下图元进行编码。报头部分可以附加地指示图元是边缘图元(即,在四边形域的边缘处)还是内部图元(即,不在四边形域的边缘处)。边缘图元可以由ID编码为有序的列表,或者可以使用编码的一部分来指示边缘图元与域的哪个边缘相邻,并且可以使用编码的另一部分来指示其沿着该边缘的位置。
通过使用包括r位的序列502的图元ID,r位的序列502指定在曲面细分过程(如上所述)期间的细分的序列(例如,采用的递归序列),图元ID可以用于高效地生成对于图元的顶点数据(例如UV),而不需要完全重新曲面细分整个输入或初始片,因此不需要存储所有域顶点数据以及图元ID,从而节省了存储器。
在各种示例中,可以通过将ID输入到执行曲面细分方法(例如,如图3A、图3B、图4A或图4B所示)的曲面细分单元(如图1B所示,可以被称为单个图元曲面细分器114)的简化版本中来根据图元ID生成对于图元的顶点数据,但是如图7所示,其中关于每个细分分支的决策(例如,在图3A和图3B的块308中、在图4A和图4B的块408中)是使用ID的位来确定的(例如,基于图元ID中的r位的序列502)。也可以以类似的方式根据图元ID生成对于图元的顶点数据,其中所使用的曲面细分方法不是递归的,而是迭代的过程(如上所述)。
在这样的示例中,该方法(如图7所示)包括:在曲面细分单元中接收图元的ID和曲面片引用(块701),其中该图元先前已经被曲面细分(例如,如上所述)。曲面片引用可以识别与曲面片相关的数据,例如曲面片控制点、曲面细分因子和域拓扑。可以针对每个图元存储曲面片引用(例如,与图元ID相关联或与其一起存储),或者可以针对由同一曲面片形成的多个图元(例如,在同一图块内来自同一片的所有图元)来存储单个片引用以节省空间。方法还包括:使用接收到的曲面片引用从与图元相关联的曲面片访问数据(块702),使用用于与图元相关联的曲面片的域拓扑来选择输入片(块703),对该输入片执行任何必要的预处理以产生一个或更多个初始片(块704),并基于图元ID选择初始片(从块704中形成的那些初始片)(块705)。可以基于图元ID的报头部分504(例如,如图5A所示)来执行初始片的选择。方法然后包括对选择的初始片进行曲面细分(块706),其中在细分的每个阶段处,基于图元ID中的一个或更多个位的序列,确定是否执行细分以及任何新形成的子片中的哪个要进一步细分。从图7的方法输出的顶点数据(块708)包括多个域顶点(例如,两个、三个或更多个域顶点),其中,如上所述,每个域顶点可以仅包括UV坐标,或者可以包括UV坐标外加其他参数(例如,位移因子以及可选地,父UV坐标)。
然而,在其他示例中,可以使用迭代过程(不管用于生成图元ID的曲面细分过程是迭代的还是递归的)根据图元ID生成对于图元的顶点数据,并且在图8A和图8B中示出了两个示例。下面描述了图8A和图8B示出的方法,并且在图1B示出的光栅化阶段111B中实现该方法。可以在专用的单个图元曲面细分器114内实现示出的方法的部分(例如,可以在专用的单个图元曲面细分器114内的硬件逻辑中实现函数π、γ、z和类似的z’随后是ρ),并且可以在域着色器118内实现该方法的最后部分(例如,如在图8A和图8B中标记的DS、DS(以及混合物)。
上面描述的并使用图6的方法生成的图元ID也可以用于针对每个域顶点提供顶点ID。在细分算法中,每个细分的初始片(例如,(T,L,R))创建新顶点M(例如,如图2B所示),并且类似地,每个细分的子片(例如(T,L,R))创建新顶点M。由(T,L,R)给出的图元的ID也可以被分配给顶点M。当图元ID对到达图元的分支的序列进行编码时,它也对到达顶点M的分支的序列进行编码。由于细分不会发生在最小图元上,每个顶点ID需要的位比图元ID少一个,因此可以节省单个位(即,对于四边形/三角形域为2T+1位,并且对于等值线域为T位)。例如,这些顶点ID可以用于以类似于使用图元ID生成对于图元的顶点数据的方式来随机重新生成单个顶点,例如,通过将顶点ID输入到曲面细分单元(例如,输入到单个图元曲面细分器114),并且通过曲面细分器遵循与生成顶点时最初遵循的相同的分支序列;然而,通过在图元的左顶点和右顶点之间对生成的图元进行最后一次细分(以生成顶点M)来修改用于根据其图元ID生成图元的方法,并且这是期望的顶点。在通过初始片或子片的细分生成多于一个的新顶点的示例中,然后通过在由被细分以生成顶点M的片给出的图元ID的末尾附加一个或更多个位来给出新添加的顶点M的ID。
这种将顶点编码为顶点ID的方法不包括不是通过初始片或子片的细分生成的域顶点,例如图14A和图14B中示出的角顶点和中间顶点1416、1418。然而,因为编码000...0、010...0、100...0、110...0对于2D域是不使用的,并且000...0对于等值线域是不使用的,所以这些编码可以以顺时针方式分别被分配给角顶点和最左边的顶点(例如,分配给UV坐标(0,0)、(1,0)、(1,1)和(0,1))。这将保留对于2D域的中间顶点和等值线域中的右顶点。对于四边形域和等值线域,需要一个额外的位来分配新编码。在各种示例中,可以使用由单个1后面跟着(2T+1或T)个0给出的编码,分别由1000...0和10...0进行指示。对于三角形域,编码110...0可以用于中间顶点。这些编码使对于2D域的中间顶点的ID和对于等值线域的右顶点的ID成为词典顺序排列顶点ID时的最后顶点。一般来说,未使用的编码可以被分配给通过输入片的预处理(如图14A和图14B所示)而不是初始片或子片的细分所生成的顶点。当分配ID或根据ID重新生成域顶点时,这些少量的顶点/ID对可以被视为特殊情况。包括这些特殊顶点,需要一个额外的位来存储对于四边形域和等值线域的每一个可能的编码(即,对于四边形域为2T+2位,并且对于等值线域为T+1位),由此除了四边形域的中间顶点和等值线域的右顶点之外的每一个编码前面都有一个0。
以上述方式生成的顶点ID通常不是唯一的。对于图14A和图14B示出的四边形/三角形域以及图2A-图2E示出的初始片和子片的细分,一些顶点ID不是唯一的:任何非边界、非中间顶点由曲面细分器产生两次,因为细分的边缘由两个三角形片共享,所以有两个可能的分支序列到达它,因此这些顶点具有两个不同的顶点ID;然而,任何一个ID都可以用来生成顶点数据。具有两个ID的顶点可以分为两种类型,位于初始三角形片内部的顶点和位于两个初始三角形片之间对角线上的顶点。
图8A示出了根据图元的图元ID针对图元生成顶点数据的第一示例方法的流程图。如图8A所示,根据图元的图元ID针对图元生成顶点数据的方法也采用多达三个位移因子(DF)作为输入,对于三角形片的每个顶点一个位移因子,其中这些DF可以例如与图元ID一起被存储。尽管图8A示出了3个DF的输入,但是在各种示例中,可以输入少于3个DF,并且可以将未接收到DF的任何顶点的DF设置为等于1。在2015年6月5日提交的第1509762.9号英国专利申请中描述了位移因子的使用,并在公开号GB2539042下进行了公布。如该专利申请中所述,位移因子是一个参数,该参数与图元中顶点的域空间(UV)坐标一起被使用,以针对图元的每个顶点生成一个或更多个世界空间顶点参数(例如位置、法线和切线)。可以使用一个或更多个顶点(例如父顶点)的顶点TF来计算顶点的位移因子。位移因子可以被定义为使得它们具有介于0和1之间的值(即,它们具有在[0,1]中的值),并且对于顶点的位移因子的值根据顶点的“年龄”而变化。为了避免视觉伪象(例如,爆裂(popping)),当顶点第一次被引入时(例如在特定的细节层次处),用于顶点的位移因子为零,然后位移因子增加(随着细节层次的增加),并且在顶点成为父顶点之前(随着细节层次的进一步增加),位移因子为一。更一般地,位移因子可以使用任何数值范围,其中位移因子的值根据顶点的年龄而变化,在顶点被添加时具有一个极值,并且在顶点成为父顶点之前具有另一个极值。
如图8A所示,通过使用第一函数π(如下所述,箭头802)根据图元ID首先生成三个顶点(顶部、右侧和左侧)的ID,来根据图元ID和三个DF生成顶点数据。第二函数γ(如下所述,箭头804)用于生成顶点的两个父顶点ID,然后第三函数z(如下所述,箭头806)用于将顶点ID映射到顶点UV。然后顶点被提交(箭头808)到域着色器(例如,如图1B所示的域着色器118),并且对于三角形域,如图9C所示并且如下所述,这涉及使用函数的顶点变换。对于顶点,如果其DF小于1,则应用函数γ,然后在域着色器中对所得顶点进行着色并混合(例如,其中混合步骤可以是两个值(子顶点和父顶点的平均值)之间的插值,其中权重由DF给出)。DF为1的任何顶点都可以跳过函数γ的使用,并且可以在不混合的情况下被着色。
图8B示出了根据图元的图元ID针对图元生成顶点数据的第二示例方法的流程图。如图8B所示,根据图元的图元ID针对图元生成顶点数据的方法也采用多达三个位移因子(DF)作为输入,包括对于输入片的每个顶点一个DF,DF不等于1,其中这些DF可以例如与图元ID一起被存储。如上所述,在第GB2539042号英国专利申请公开中描述了位移因子的使用。
如图8B所示,通过使用第一函数z’(如下所述,箭头812)根据图元ID首先生成三个顶点(顶部、右侧和左侧)的UV,来根据图元ID和多达三个DF生成顶点数据。然后,第二函数ρ(如下所述,箭头814)被用于生成任何相关顶点的两个父顶点UV。然后,顶点以与图8A示出的第一种方法相同的方式被提交(箭头808)到域着色器(例如,如图1B所示的域着色器118)(同样对于三角形域,如图9C所示并且如下所述,这涉及使用函数的顶点的变换)。如上所述,如果DF<1,则使用函数ρ,并且在域着色器中对所得顶点进行着色并混合(例如,其中混合步骤可以是两个值(子顶点和父顶点的平均值)之间的插值,权重由DF给出),并且DF为1的任何顶点可以跳过ρ的使用,并且可以在不混合的情况下被着色。
将认识到,虽然图8A和图8B示出了用于三角形图元的方法,但是这些方法也可以用于等值线域(例如,在仅生成两个顶点情况下,因此仅需要两个输入DF)。此外,如上所述,虽然在图8A中示出了三个DF,但是作为空间优化,可以存储少于三个DF,在示例中,每图元仅存储两个DF(如图8B所示),因为顶点之一(例如,左顶点或右顶点)是顶部顶点的父顶点,因此位移因子为1。可以根据顶点ID或通过存储标志位来确定哪个顶点具有DF=1(例如,通过查看尾部零的数量:如果顶部顶点T具有T位的主体,则L和R顶点之一将具有T-1位的主体。T的父顶点是另一个顶点,即没有T-1位的主体的顶点)。类似地,对于等值线域,可以仅存储单个DF,例如,对于其顶点ID中具有最小数量尾部零的顶点,因为这将是子顶点。
图8A和图8B示出了每个数据结构的大小,其中T指的是最大TF(如上)。示出的值与四边形域相关。对于三角形域(不管是使用图8A的方法还是图8B的方法),对于每个顶点UV需要两个额外的位。对于等值线域,对于顶点ID仅需要T位(如上所述),并且对于顶点UV只需要一半的位。
可以使用图8A和图8B的任一种方法来代替图7的方法。通过使用图8B的方法代替图8A的方法,具有更少的阶段,并且计算更快地移出ID空间,这在一些应用中可能是有益的,而在图8A的方法中,在ID空间中执行计算,随后移至UV空间,并且这可以导致更紧凑的解决方案(例如,每顶点1位)。方法之间的选择可能是特定于实现的,例如,因为它可能取决于系统中哪些其他过程需要UV以及何时需要UV。
在图8A和图8B的方法中使用的函数的以下描述中,假设导致改进的图元排序的曲面细分方法(如图4A和图4B所示)被用于生成图元ID。如果使用另一种曲面细分方法,图8A和图8B的方法仍然适用,并且在高层次上,函数以相同或类似的方式进行操作(例如,第一函数和第二函数仍然截短图元ID),然而,函数的确切形式将不同。
在图8A的方法中,第一函数π用于根据图元ID生成三个顶点(顶部、右侧和左侧)的ID,并且该第一函数涉及在三个不同位置截短图元ID。第一函数π由两个函数组成:γ’,其是应用于图元ID的第二函数γ的有序版本(如下所述,并且其包括在两个不同位置上顶点ID的截短)和τ(其涉及图元ID的单次截短)。使用γ的有序版本是因为图元包含三个顶点的有序集合,因此第一函数π需要以正确的顺序生成顶部、右侧和左侧顶点ID,以避免生成取向不正确的图元。当截短图元ID时,从ID(或其一部分)中截短n位相当于将细分层次结构后退n步。
回头参考图2A和图2B,M具有等于它所细分的图元202的图元ID的顶点ID,因此左顶点和右顶点(L和R)是M的父顶点。可以使用函数γ’来确定这些,该函数将细分层次结构后退两步以产生第一父顶点,并且将层次结构后退另一数量S步(S>2)以产生第二父顶点。S的值由图元ID(其相当于M的顶点ID)决定。在下面表格中描述了该函数。函数τ根据图元ID生成对应于图元的顶部顶点(T)的顶点ID。如果发生了前一次细分,则顶部顶点(T)是前一次细分的M的值,因此可以通过图元ID的截短来确定其ID。一个特殊的情况是,如果细分步骤的数量r为0,则在这种情况下,图元是初始片,并且其顶部顶点的ID为1000...0。如果r>0,则图元ID被截短1位,例如,从该序列移除r位的序列502中的最后一位(例如,在使用图5A示出形式的尾部部分506的情况下,ID中的最后的1之前的位),并且在尾部部分506中包括附加位(如果提供)。如果使用图5A示出形式的尾部部分506,这因此包括将ID中最后的1之前的位设置为1,并用0替换ID中最后的1。
在图8A的方法中,第二函数γ用于生成顶点的两个父顶点ID,并且如图8A所示,被实现为第一函数π(在其有序的版本中)的一部分,然后最多三次(例如,对于使用第一函数生成的顶部、右侧和左侧顶点中的每一个,一次)。如上所述,该第二函数将细分层次结构后退两步以产生第一父顶点ID,并且将层次结构后退另一数量S步(S>2)以产生第二父顶点ID,其中S的值由当前顶点的顶点ID确定。假设对于DF=1的顶点,不执行混合(如上所述),则不需要父顶点,因此对于这样的顶点,可以省略第二函数γ(如图8A所示)。因此,该第二函数γ(及其有序版本γ’)包括在除特殊情况(例如,涉及中间顶点或角顶点的那些情况)之外的所有顶点的两个不同位置上的图元ID的截短,并且可以如图15示出的表格中所陈述的被定义(其中行1-6涉及特殊情况),该表格使用以下标记:
1000...0 中间顶点
a0a10...0 角顶点
10...0 顶点ID尾部
0...0 零个或更多个0
1...1 零个或更多个1
0...1 空字符串或01...1
1...0 空字符串或10...0
例如,a0a1011...110...0以及父ID a0a10...110...0表示以下任何子ID到父ID的映射:
a0a10110...0→a0a110...0
a0a101110...0→a0a1010...0
a0a1011110...0→a0a10110...0
a0a10111110...0→a0a101110...0
图15的表格还具有值a′0、a′1、s、R、L、T、P+,、P-、Pr-1以及其定义如下:
·2a′0+a′1≡2a0+a1+1(mod 4);
·s是图元ID,其中ai位对应于报头部分504,bi位对应于指示递归序列502的r位的序列,并且位10...0对应于尾部部分506;
·R、L和T指的是顶点M在其域中的初始片的右顶点、左顶点和顶部顶点,其由ai位决定(如图2A、图9A和图9B中所使用的),这意味着R和L是域的角顶点,并且T是域的中间顶点;
·P+和P-是如图9A所示的两个父顶点。P+和P-对应于通过添加顶点M被细分的三角形片901的左顶点和右顶点;以及
·Pr-1是通过将细分层次结构后退两步而产生的父顶点;
·是通过将细分层次结构后退S步而产生的父顶点,其中S的值被编码在顶点ID中。
尽管γ的上域(codomain)由无序对组成,但在上面表格中不同顺序的情况是分开的,以突出显示(P_,P+)可以等于(Pp*,Pr-1)或的情况,因此我们可以定义的γ有序版本γ'。γ的该有序版本γ'可以用来定义第一函数π(如上所述)。
在示例中,如果T=3(所以2T+1=7),那么对于具有ID 1000101(=69)的顶点,这给出:
r=4,r-1=3,br-1=0
p*=2,bp*=i
因此父顶点ID如下:
(P-,P+}={Pp*,Pr-1}={1001000,1000100}={72,68}
在图8A的方法中,第三函数z被用于将顶点ID映射到顶点UV,并且如图8A所示,被执行多次,例如,当存储两个DF时,它可以多达七次:一次用于使用第二函数生成的每个顶点ID(两组三个顶点,一个子顶点加上两个父顶点),并且一次用于DF=1的顶点(并且没有为其生成父顶点)。然而,最多产生五个唯一的顶点ID,因此通过重用结果可以实现函数z的更少运行次数。通过从固定的复数值开始,针对ID的每个位形成该值的(复数)缩放版本的序列,然后将所有这些值相加,第三函数z根据顶点ID产生顶点UV。执行最终缩放和平移以生成顶点UV。
对于四边形域和由2T+1位的编码s=a0a1b0...br-110...0给出的非角、非中间顶点ID,第三函数的结果(及其顶点的UV坐标M)的复数形式为:
zj被定义为z的第j个项(term),并由下式给出:
如图9A所示,对于具有由2T+2位的编码a0a1b0...br-110...0给出ID的图元,其顶点T、R和L的UV坐标由下式给出:
(T,R,L)=(M-zr-1,M-izr-1,M+izr-1)
在上面给出的表达式中:
2T-1是确保坐标是高斯整数的全局缩放
(1+i)是到大约2T-1(1+i)的中心坐标的全局平移
是在a0和a1中编码的初始三角形片(-i、1、i或-1)的旋转
是第j个新顶点相对于第(j-1)个顶点的相对位置,其中,j=-1给出了细分初始三角形片的顶点,并且j=0,1,...r-1给出了细分由bj确定的子片的顶点。新顶点相对于前一个顶点的相对位置的幅度缩放相对方向是:
如图9B所示,位bk选择乘以μ或从而反转方向并且顺时针或逆时针旋转2π/8。
对于三角形域,可以以与四边形域相同的方式来生成顶点,然后可以通过使用变换函数将坐标后变换到三角形域中。一个示例变换函数是函数
其中,A、B、C和A’、B’、C’分别是三角形域902和四边形域903中的三个三角形区域,(u、v)是UV坐标(其中,z(s)=M=u+iv),并且在图9C中以图形方式示出了该变换。在其他示例中,可以使用不同的变换函数。
对于等值线域和由T位的编码s=b0...br-110...0给出的顶点ID,其中br=1,br+1=…=bT-1=0,其顶点M的坐标被考虑为二进制展开,由下式给出:
对于由多达T位的编码b0...br-110...0给出的图元ID,其顶点L和R由下式给出:
(L,R)=(M-2T-1-r,M+2T-1-r)
在图8B的方法中,第一函数z’用于根据图元的图元ID生成图元的三个顶点(顶部、右侧和左侧)的UV。该函数是上述图8A的方法中第三函数z(箭头806)的修改版本。如上所述,通过从固定的复数值开始,针对ID的每个位形成该值的(复数)缩放版本序列,然后将所有这些值相加,函数z根据顶点ID产生顶点UV。在图8B的方法中,函数的修改版本z’根据单个图元ID生成三个UV,因此包括附加阶段,其中通过单个UV的平移生成三个顶点UV。这可以参考图9A进行描述。图元ID对应于中间顶点M的ID,因此已经生成了对于M的顶点UV,可以通过取消曲面细分的最后一步(平移-zr-1)来获得顶部顶点的UV,然后可以通过将zr-1分别旋转i和-i通过平移来获得左顶点和右顶点的UV。
可以以递归方式生成函数z或其修改版本z’。对于z的表达式在上面的等式(1)-(3)中有详细描述。可以通过首先以递归方式生成2T-1·w(b0...br-110...0)来计算z(s),然后计算:
对于2T-1·w(b0...br-110...0)的递归表达式如下所示,其中,(n)2=n(mod 2):
S-1=w-1=2T-1
Sj=Sj-1+wj
2T-1·w(bo...br-110...0)=Sr-1
通过乘以2T-1,保证所有wj和Sj都在集合{-2T-1,...,0,...,2T-1}2中,即高斯整数。可以通过以下方式(使用(-1)b=2(b+1)2-1)导出递归表达式:
图10A示出了上面递归表达式的示例迭代实现。对于原始函数z需要单个输出1001,并且对于函数的修改版本z’需要三个输出1002。
在图8B的方法中,第二函数ρ用于生成顶点的两个父顶点UV,并且对DF<1的每个顶点执行。下面表格示出了对于四边形域定义该函数的映射的等式。它们是基于以下特性被生成的。首先,在生成父UV之一后,精确地以两步细分来生成子UV。其次,子顶点在四个不同方向中的一个方向上平分一个边缘,如可以参考图10B描述的:如果是水平的(在图10B中用方格阴影1004示出),只有u坐标改变;如果是垂直的(在图10B中用菱形阴影1006示出),只有v坐标改变;如果是对角线右下(在图10B中用水平阴影1008示出),u和v坐标以相同的幅度和符号变化;如果对角线右上(在图10B中用垂直阴影1010示出),u和v坐标以相同的幅度但是不同符号变化。最后,u或v坐标的每一个差值的幅度等于对于二的幂上升的UV的层次的下限(floor)。
也可以在图8B示出的环境以外的环境中使用第二函数ρ。例如,由于它提供了根据子UV生成两个父UV的方法,因此它可以用于减小来自曲面细分器的输出顶点的大小(以及因此得用于存储它们的任何高速缓存的大小),因为这些输出顶点可能另外包含子UV、两个或三个父UV和DF。使用该第二函数可以省略父UV。
虽然图8A示出了根据图元ID生成顶点UV,但是可以替代地根据UV生成顶点ID(无需重新运行曲面细分器),并且在下面表格中示出了该函数z-1。该函数还可以用于根据其UV生成图元ID,而无需重新运行曲面细分器(例如,在平铺阶段之后),并且这可用于节省带宽,例如,因为已经生成了UV坐标,这些UV坐标可以被发送到没有图元ID的平铺单元,从而减少在曲面细分器和平铺单元之间传输的数据,并且图元ID可以在平铺之后随后被重新生成。
下面表格还包括函数γ-1,其根据两个父顶点ID生成子顶点ID,并且该函数可以用于根据其自身ID确定给定父顶点的子顶点的ID,使得可以确定该父顶点的最后一个子顶点何时被处理,从而可以从高速缓存中移除该父顶点。这提高了高速缓存的效率,因为顶点只能在它们被需要时才被存储在高速缓存中。
下面的表格示出了对于四边形域顶点ID函数的概要:
在上面表格中,~符号的用法如下:给定从集合A到集合B的函数f,我们可以在A上定义一个等价关系,表示为~,这样当且仅当f(a)=f(a’)时,a等价于a’(a~a’)。这是一个等价关系,因为a~a;a~a’表明a’~a;并且a~a’、a’~a”表明a~a”。接下来,A可以被划分成子集{U}的集合,使得对于U中的任何u,v在A中,则当且仅当v在U中,v~u。子集{U}的集合被指示为A/~,并且对于U中的任一u,它给出了由f/~(U)=f(u)给出的从A/~到B的继承函数f/~。此外,该函数是一对一的,因此在其图像上是可逆的。
对于三角形域,编码1000...0的角色与对于中间顶点ID的110...0交换。110...0有三个父ID 000..0、010..0和100..0,并对应于具有父坐标(0,0)、(3·2T,0)和(0,3·2T)的顶点坐标(2T-1,2T-1)。具有包含在U或U(2)中的域的任何函数分别被预包括(pre-composed)或以将三角形域UV预映射到四边形域UV中(例如,如图9C所示)。具有包含在U或U(2)中的上域的任何函数分别被后包括(post-composed)或以将四边形域UV后映射到三角形域UV中。对于图15的表格中示出的其他情况,也存在TR或TL边界顶点的替代同余(congruence)2a′0+a′1≡2a0+a1+1(mod 3)。
下面表格示出了针对等值线域的顶点ID函数的概要。由于U坐标的顶点ID只是它的二进制展开,并且由于通常以二进制形式存储U坐标,因此它们可以被认为是等价的。下面表格中一个值得注意的部分是父计算,它是通过加上和减去划分U坐标的2的最大幂给出的(其中对于顶点ID的等价表达式涉及将编码截短为两个不同的长度)。
如上所述,图8A的方法中使用的三个函数是相对于导致改进的图元排序的曲面细分方法(如图4A所示)来描述的。如果使用另一种曲面细分方法,图8A的方法仍然适用,并且在高层次上,函数以相同或类似的方式进行操作,但是函数本身是不同的。例如,如果不使用改进的排序,则可以通过补充每个奇数bx来给出每个顶点的修改的ID。然后,通过这种补充通过结合,可以找到图8A中三个函数的新版本。例如,为了找到父ID,方法可以包括:补充每个奇数bx,将该ID截短为p*或r-1,然后在截短的编码中补充每个奇数bx。
使用上述用于图元ID和顶点ID生成的方法,ID是包括包含r个位的部分的位的串,r个位中的每一个指示曲面细分器中两个可能分支之一(例如,选择或未选择的片),因此ID对曲面细分器分支进行编码。曲面细分单元可以使用这些ID来重新产生完整顶点和/或完整图元(如上所述)。如上所述,域的边界上的顶点和图元ID采取与域的内部上的顶点和图元ID不同的形式,因此可以仅根据ID来确定顶点/图元是在边界上还是在内部。
如上所述,顶点ID对UV坐标进行编码,因为它可以用于生成单个UV坐标,并且图元ID可以用于生成对于四边形/三角形域的三个UV坐标或对于等值线域的两个UV坐标。如上所述,图元ID对其顶点ID进行编码,并且如上所述,这些可以通过ID的截短来确定。在由曲面细分器按顺序输出的图元具有按词典顺序排序时(指示为ID顺序)的按顺序的图元ID时,ID也对顺序进行编码。对于给定的顶点,其父顶点的ID通常在ID顺序上是位于附近的,并且由于附近的ID也非常类似,这使得当存储在存储器中时,ID块能够得到很好的压缩。另外,如上所述,ID可以是紧凑的,即它们可以具有包括表示所有图元和顶点所需的最小位数的形式(例如,其中T等于最大TF)。
与存储UV不同,ID可以用于使用单个图元曲面细分器来重新生成其他曲面细分器顶点属性。相反,如果只存储了UV,则它们不会对顺序进行编码,并且也不能用于重新生成其他曲面细分器顶点属性(例如位移因子)。
本文描述的方法适用于曲面细分的所有输入域:四边形、三角形、等值线和一般多边形。
如下所述,对于图元ID和顶点ID有许多应用,并且其中一些已经在上面描述过了。示例应用包括:
·针对域着色器/混合器生成顶点-随机顶点或图元ID可以被馈送到单个图元曲面细分器中,以分别生成一个或三个/两个具有属性(例如UV和DF)的顶点。
·生成UV坐标-硬件单元可以用于针对随机顶点ID生成UV坐标,或针对随机图元ID生成三个/两个UV坐标。
·搜索曲面细分器输出图元-当曲面细分器以词典顺序排列的ID给定的顺序输出图元时,它们准备被排序用于搜索。
·寻址高速缓存-顶点或图元可以通过它们各自的ID被高速缓存和寻址。ID顺序确保了良好的高速缓存一致性,尤其是在搜索最近使用的父顶点时,因为它们在ID排序上很接近,因此更有可能属于高速缓存。
·搜索父顶点-顶点ID可以用于生成父顶点ID,而父顶点ID又可以用于在顶点高速缓存中搜索父顶点。
·搜索图元顶点-图元ID可以用于生成它们的三个/两个顶点ID,这些顶点ID又可以用于在顶点高速缓存中搜索它们的顶点。
上面结合使用基于图块的延迟渲染(TBDR)的图形处理系统描述了生成并使用图元ID和顶点ID的方法。然而,这些方法也可以用在图形处理系统中,该图形处理系统使用技术来减少存储在参数存储器(例如,图1A和图1B示出的参数存储器107、117)中的存储量。第GB2458488号英国专利申请公开中描述了一种这样的技术。典型地,对于每个特定图块,显示列表包括渲染特定图块需要哪些变换的图元的指示(其中变换的图元是被变换到屏幕空间中的图元)。变换的图元与显示列表一起被存储在参数存储器中。通过使用未变换的图元,避免了将变换的图元存储在参数存储器中的需要,而是每个显示列表包括渲染特定图块所需的未变换的图元的指示。在光栅化阶段中,使用被存储在图形存储器中的未变换的图元数据来重新变换图元,这需要额外的处理(与从参数存储器中读取变换的图元数据相比),但是具有减少存储在参数存储器中的数据量的好处。在该技术与本文描述的方法结合使用的情况下,显示列表包括如上所述生成的ID的列表,以及针对根据该片生成的图块中所有图元对片的至少一个引用。在这样的示例中,单个图元曲面细分器114(在图1B中)将是图元生成阶段链中的一个阶段。这具有减少光栅化阶段的处理的效果,因为图元ID通过对要遵循的曲面细分序列进行编码来简化曲面细分过程。
可以在硬件曲面细分单元112(如图1B所示)或在单独的单个图元曲面细分器114中实现本文描述的方法。或者,可以在软件(或者软件和硬件的组合)中实现该方法。图11示出示例性的基于计算的设备1100的各种部件,其可被实现为计算和/或电子设备的任何形式,并且其可以被配置为实现上面描述的方法。
基于计算的设备1100包括一个或更多个处理器1102,其可以是微处理器、控制器或用于处理计算机可执行指令以控制设备的操作以便执行本文描述的图元和可选的顶点排序方法的处理器。在一些示例中,例如在使用片上架构的系统的情况中,处理器1102可包括在硬件(而不是软件或固件)中实现排序方法的一部分的一个或更多个固定功能块(也被称为加速器)。可以在基于计算的设备处提供包括操作系统1104的平台软件或任何其他合适的平台软件,以使得应用软件1106能够在设备上执行,并且应用软件可以包括曲面细分模块1108,曲面细分模块1108被配置为实现本文描述的一种或更多种方法。
可使用基于计算的设备1100可访问的任何计算机可读介质提供计算机可执行指令。计算机可读介质可包括例如计算机存储介质(诸如存储器1110)和通信介质。诸如存储器1110的计算机存储介质(即,非暂时性机器可读介质)包括在任何方法或技术中实现的用于存储信息(诸如计算机可读指令、数据结构、程序模块或其它数据)的易失性和非易失性的、可移动和不可移动的介质。计算机存储介质包括但不限于RAM、ROM、EPROM、EEPROM、闪存或其它存储器技术、CD-ROM、数字通用盘(DVD)或其它光学存储器、盒式磁带、磁带、磁盘存储器或其它磁性存储设备或可用于存储由计算设备访问的信息的任何其它非传输介质。相反,通信介质可体现计算机可读指令、数据结构、程序模块或在已调制数据信号(诸如载波)或其它传输机构中的其它数据。如在本文定义的,计算机存储介质不包括通信介质。虽然计算机存储介质(即,非临时机器可读介质,例如存储器1110)被显示在基于计算的设备1100内,但是将认识到,存储器可远程地分布或定位并经由网络或其它通信链路(例如,使用通信接口1112)来访问。
基于计算的设备1100还可以包括被布置成向可以与基于计算的设备1100分离或集成的显示设备输出显示信息的输入/输出控制器。显示信息可以提供图形用户界面。输入/输出控制器还可以被布置成接收并处理来自一个或更多个设备(诸如用户输入设备(例如,鼠标或键盘)的输入。在实施例中,如果显示设备是触敏显示设备,则其也可充当用户输入设备。输入/输出控制器也可以将数据输出至除了显示设备以外的设备,例如本地连接的打印设备。
图12示出了在其中可以实现上面描述的GPU流水线101(包括硬件曲面细分器112)的计算机系统。计算机系统包括CPU 1202、GPU 1204、存储器1206和诸如显示器1216、扬声器1218和摄像机1220的其他设备1214。图1B示出的改进的GPU流水线101形成GPU 1204的一部分。计算机系统的部件可以经由通信总线1222彼此通信。
可以在集成电路上的硬件中体现硬件曲面细分器112(或被配置成执行本文描述的任何方法的其他硬件,例如单独的单个图元曲面细分器114)。本文描述的曲面细分器单元112可以被配置为执行本文描述的方法中的任一种。通常,以上所描述的功能、方法、技术或部件中的任一个都能够以软件、固件、硬件(例如,固定逻辑电路)、或它们的任何组合来实现。本文可以使用术语“模块”、“功能”、“部件”、“元件”、“单元”、“块”和“逻辑”,以一般性地表示软件、固件、硬件、或它们的任何组合。在软件实现方式的情况下,模块、功能、部件、元件、单元、块或逻辑表示当在处理器上被执行时执行特定任务的程序代码。本文描述的算法和方法可以由执行使处理器(一个/更多个)执行算法/方法的代码的一个或更多个处理器来执行。计算机可读存储介质的示例包含随机存取存储器(RAM)、只读存储器(ROM)、光盘、闪存、硬盘存储器和可以使用磁、光或其他技术来存储指令或其他数据并可以被机器访问的其他存储器设备。
如本文中所使用的术语计算机程序代码和计算机可读指令是指用于处理器的任何类型的可执行代码,包括以机器语言、解释语言或脚本语言表达的代码。可执行代码包括二进制代码、机器代码、字节码、定义集成电路的代码(诸如,硬件描述语言或网表)、以及以诸如C、Java或OpenCL的编程语言代码表达的代码。可执行代码可以是例如任何类型的软件、固件、脚本、模块或库,当其在虚拟机或其他软件环境下被适当地执行、处理、解释、编译、执行时,使支持可执行代码的计算机系统的处理器执行由代码指定的任务。
处理器、计算机、或计算机系统可以是具有处理能力使得其可以执行指令的任何类型的设备、机器或专用电路、或它们的集合或部分。处理器可以是任何类型的通用处理器或专用处理器,诸如CPU、GPU、片上系统、状态机、媒体处理器、专用集成电路(ASIC)、可编程逻辑阵列、现场可编程门阵列(FPGA)、物理处理单元(PPU)、无线电处理单元(RPU)、数字信号处理器(DSP)、通用处理器(例如,通用GPU)、微处理器、被设计为在CPU外部加速任务的任何处理单元等。计算机或计算机系统可以包括一个或更多个处理器。本领域中的技术人员将认识到,这样的处理能力被结合到很多不同的设备内,且因此术语“计算机”包括机顶盒、媒体播放器、数字无线电装置、PC、服务器、移动电话、个人数字助理和很多其它设备。
还旨在包含对如本文所描述的硬件的配置进行限定的软件,诸如HDL(硬件描述语言)软件,如用于设计集成电路、或用于配置可编程芯片以执行期望功能。也就是说,可以提供计算机可读存储介质,其具有在其上编码的以集成电路定义数据集的形式的计算机可读程序代码,其当在集成电路制造系统中被处理时配置系统以制造被配置成执行本文描述的方法中的任一个的曲面细分单元,或制造包括本文描述的任何装置的曲面细分单元。集成电路定义数据集可以例如是集成电路描述。
集成电路定义数据集可以是计算机代码的形式,例如,作为用于配置可编程芯片的网表、代码,作为限定任何级处的集成电路的硬件描述语言(包括作为寄存器传送级(RTL)代码),作为诸如Verilog或VHDL的高级电路表示,以及作为诸如OASIS(RTM)和GDSII的低级电路表示。在逻辑上限定集成电路的较高级的表示(诸如RTL)可以在计算机系统处被处理,该计算机系统被配置成在软件环境的背景下生成集成电路的制造定义,包括电路元件和用于组合这些元件的规则的定义,以便生成由该表示如此定义的集成电路的制造定义。如软件在计算机系统处执行以便限定机器的通常情况,可以需要一个或更多个中间用户步骤(例如,提供命令、变量等),以便被配置为生成集成电路的制造定义的计算机系统执行对集成电路进行定义的代码,从而生成该集成电路的制造定义。
现在将参考图13描述在集成电路制造系统处来处理集成电路定义数据集以便配置系统来制造曲面细分单元的示例。
图13示出了集成电路(IC)制造系统1302的示例,其包括布局处理系统1304和集成电路生成系统1306。IC制造系统1302被配置为接收IC定义数据集(例如,定义硬件曲面细分器或被配置为执行本文描述的任何方法的其他硬件,诸如单独的单个图元曲面细分器),处理IC定义数据集,并根据IC定义数据集生成IC(例如,其体现硬件曲面细分器或被配置为执行本文描述的任何方法的其他硬件,诸如单独的单个图元曲面细分器)。IC定义数据集的处理将IC制造系统1302配置为制造体现硬件曲面细分器或被配置为执行本文描述的任一种方法的其他硬件(例如单独的单个图元曲面细分器)。
布局处理系统1304被配置为接收IC定义数据集并对其进行处理以确定电路布局。根据IC定义数据集确定电路布局的方法在本领域中是已知的,且例如可涉及合成RTL代码以确定例如在逻辑部件(例如,与非(NAND)、或非(NOR)、与(AND)、或(OR)、MUX和触发器(FLIP-FLOP)部件)方面待生成的电路的门级表示。可通过确定逻辑部件的位置信息,根据电路的门级表示来确定电路布局。这可自动地或借助用户干预来完成,以便优化电路布局。当布局处理系统1304已经确定电路布局时,它可以向IC生成系统1306输出电路布局定义。例如,电路布局定义可以是电路布局描述。
如在本领域中已知的,IC生成系统1306根据电路布局定义生成IC。例如,IC生成系统1306可实现半导体器件制造过程以生成IC,这可以涉及光刻和化学处理步骤的多步骤序列,在该多步骤序列期间,电子电路逐步在由半导体材料制成的晶圆上被创建。电路布局定义可以是可以在光刻过程中使用的用于根据电路定义生成IC的掩模的形式。可选地,被提供到IC生成系统1306的电路布局定义可以是计算机可读代码的形式,IC生成系统1306可以使用该计算机可读代码来形成适当的掩模以在生成IC时使用。
由IC制造系统1302执行的不同过程可以都在一个位置上例如由一方来实现。可选地,IC制造系统1302可以是分布式系统,使得过程中的一些可以在不同的位置处被执行,并可以由不同方来执行。例如,以下阶段中的一些可在不同位置和/或由不同方执行:(i)合成表示IC定义数据集的RTL代码,以便形成要生成的电路的门级表示;(ii)基于门级表示,生成电路布局;(iii)根据电路布局,形成掩模;以及(iv)使用掩模制造集成电路。
在其它示例中,在集成电路制造系统处对集成电路定义数据集的处理可以配置系统以制造如本文所述的被配置为执行排序方法的曲面细分单元,而无需处理IC定义数据集以便确定电路布局。例如,集成电路定义数据集可以定义可重构处理器(例如FPGA)的配置,并且该数据集的处理可以将IC制造系统配置为生成具有该定义的配置的可重构处理器(例如,通过将配置数据加载到FPGA)。
在一些实施例中,集成电路制造定义数据集在集成电路制造系统中被处理时可使集成电路制造系统生成如本文中所描述的设备。例如,集成电路制造系统以如上参考图13所描述的方式通过集成电路制造定义数据集进行的配置可以使如本文中所描述的设备得以制造。
在一些示例中,集成电路定义数据集可包括软件,该软件在数据集处定义的硬件上运行或与在数据集处定义的硬件组合运行。在图13所示的示例中,IC生成系统还可以由集成电路定义数据集配置,以在制造集成电路时,根据在集成电路定义数据集处定义的程序代码将固件加载到该集成电路上,或以其他方式向集成电路提供程序代码以用于与集成电路一起使用。
本领域中的技术人员将认识到,用于存储程序指令的存储设备可以被分布在网络中。例如,远程计算机可存储被描述为软件的过程的示例。本地或终端计算机可访问远程计算机并下载软件的一部分或全部以运行程序。可选地,本地计算机可以按需下载软件的片段,或在本地终端处执行一些软件指令而在远程计算机(或计算机网络)处执行一些软件指令。本领域中的技术人员也将认识到,通过利用本领域中的技术人员已知的常规技术,软件指令的全部或一部分可由专用电路(例如DSP、可编程逻辑阵列等)执行。
本文描述的方法可以由配置有软件的计算机执行,软件是以存储在有形存储介质上的机器可读形式,例如以包括用于配置计算机来执行所述方法的组成部分的计算机可读程序代码的计算机程序的形式,或以包括适合于当在计算机上运行程序时执行本文描述的任何方法的所有步骤的计算机程序代码方式的计算机程序的形式,并且其中计算机程序可以被体现在计算机可读存储介质上。有形(或非暂时性)存储介质的示例包括磁盘、拇指驱动器、存储卡等,且并不包括传播的信号。软件可适合于在并行处理器或串行处理器上执行,使得方法步骤可以按任何适当的顺序或同时被执行。
本文描述的硬件部件可以由在其上编码有计算机可读程序代码的非暂时性计算机可读存储介质生成。
存储在实现所公开的方面时使用的机器可执行数据的存储器可以是非暂时性介质。非暂时性介质可以是易失性的或非易失性的。易失性非暂时性介质的示例包括基于半导体的存储器,例如SRAM或DRAM。可用于实现非易失性存储器的技术的示例包括光学和磁性存储器技术、闪存、相变存储器、电阻式RAM。
对“逻辑”的特定引用是指执行一种功能或更多种功能的结构。逻辑的示例包括被布置成执行这些功能(一种/更多种功能)的电路。例如,这样的电路可包括晶体管和/或在制造过程中可用的其它硬件元件。作为示例,这样的晶体管和/或其它元件可以用于形成实现和/或包含存储器(例如寄存器、触发器、或锁存器)、逻辑运算器(例如布尔运算)、数学运算器(例如加法器、乘法器、或移位器)和互连的电路或结构。这样的元件可以作为定制电路或标准单元库、宏、或以其它抽象级被提供。可在特定的布置中将这样的元件互连。逻辑可包括固定功能的电路,且电路可被编程以执行一种功能或更多种功能;这样的编程可以由固件或软件更新或控制机构提供。被识别为执行一种功能的逻辑也可包括实现组成性功能或子过程的逻辑。在示例中,硬件逻辑具有实现固定功能操作、或多个操作、状态机或过程的电路。
如对技术人员将明显的是,本文给出的任何范围或设备值可以被扩展或改变而不失去所寻求的效果。
将理解的是,上面描述的益处和优点可以涉及一个实施例或可以涉及若干实施例。实施例不限于解决任何或全部所陈述的问题的那些实施例或具有任何或全部所陈述的益处和优点的那些实施例。
对“一个(an)”项目的任何引用指的是那些项目中的一个或更多个。术语“包括”在本文中用于意指包括所识别的方法块或元件,但这样的块或元件并不包括独有列表,且装置可包含额外的块或元件,并且方法可包含额外的操作或元件。此外,块、元件和操作本身并不是隐含地封闭的。
本文描述的方法的步骤可以按照任何适当的顺序被执行或在适当时同时被执行。在附图中的框之间的箭头示出方法步骤的一个示例顺序,但并不意欲排除其它顺序或多个步骤的并行执行。此外,各个块可以从任何方法中删除而不偏离本文描述的主题的精神和范围。上面描述的任何示例的方面可以与所描述的其它示例中的任一个的方面组合以形成另外的示例,而不失去所寻求的效果。在附图的元件被示为由箭头连接的场合,将认识到,这些箭头仅示出在元件之间的一个示例通信流(包括数据和控制消息)。在元件之间的流可以在任一方向上或在两个方向上。
申请人特此独立地公开了本文中所描述的每个单独特征以及两个或更多个这样的特征的任何组合,公开的程度是使得这样的特征或组合能够基于本说明书依据本领域技术人员的公知常识作为整体来实现,而无论这样的特征或特征的组合是否解决了本文中所公开的任何问题。鉴于上述描述,对于本领域技术人员明显的是,可在本发明的范围内进行各种修改。
当与已知的实现进行比较时,在本申请中阐述的概念在器件、装置、模块和/或系统(以及本文中所实现的方法)中的实现可以引起性能改进。性能改进可以包括增加的计算性能、减少的延迟、增加的吞吐量和/或减少的功耗中的一个或更多个。在(例如,在集成电路中)制造这样的器件、装置、模块和系统期间,性能改进可以与物理实现相折衷,从而改进制造方法。例如,性能改进可以针对布局面积进行权衡,从而与已知的实现的性能匹配,但使用更少的硅。这可以例如通过以串行化方式重用功能块或在器件、装置、模块和/或系统的元件之间共享功能块来完成。相反,可以权衡在器件、装置、模块和系统的物理实现中产生改善(诸如减小的硅面积)的本申请中所阐述的概念以供改进性能。这可以通过例如在预定面积预算内制造模块的多个实例来完成。
Claims (21)
1.一种曲面细分单元,所述曲面细分单元被配置为在计算机图形系统中执行曲面细分,所述曲面细分单元包括硬件逻辑,所述硬件逻辑被布置成:
使用多个细分步骤将初始片细分成多个图元;以及
针对每个图元生成图元ID,其中,所述图元ID对关于如何通过所述多个细分步骤生成所述图元的数据进行编码。
2.根据权利要求1所述的曲面细分单元,其中,关于如何通过对所述初始片进行细分来生成所述图元的数据包括描述在曲面细分期间为生成所述图元而采取的所述多个细分步骤的位的序列。
3.根据权利要求2所述的曲面细分单元,其中,所述位的序列中的每个位指示在曲面细分期间在相应的细分步骤处采取哪个分支来生成所述图元。
4.根据权利要求1所述的曲面细分单元,其中,所述图元的ID包括指定在曲面细分过程期间采用的递归序列的位的序列。
5.根据权利要求4所述的曲面细分单元,其中,所述图元的ID还包括可变长度的尾部部分,并且其中,所述图元的ID包括固定数量的位。
6.根据权利要求1所述的曲面细分单元,其中,被布置成使用多个细分步骤将初始片细分成多个图元的硬件逻辑包括被布置成执行以下操作的硬件逻辑:
分析初始片以确定是否对所述片进行细分;
响应于确定所述片将不被细分,将所述片输出为三角形图元;
响应于确定所述片将被细分,将所述初始片分成两个或更多个子片;
依次选择由所述初始片的细分形成的每个子片,并且以选择的子片代替所述初始片重复操作;
并且其中,被布置成针对每个图元生成ID的硬件逻辑包括被布置成执行以下操作的硬件逻辑:
响应于将所述初始片分成两个或更多个子片,向所述子片分配与已经被细分的片的ID匹配的ID;以及
响应于选择由所述初始片的细分形成的片,根据所述选择来更新由所述初始片的细分形成的每个片的ID。
7.根据权利要求6所述的曲面细分单元,其中,通过对三角形域、四边形域或多边形域的细分形成所述初始片,并且所述片的ID还包括报头部分,所述报头部分包括指示所述图元在由所述三角形域或四边形域形成的多个初始片的哪一个中的一个或更多个位。
8.根据权利要求6所述的曲面细分单元,其中,被布置成根据所述选择来更新由所述初始片的细分形成的每个片的ID的硬件逻辑包括被布置成针对每个ID执行以下操作的硬件逻辑:
向指定在曲面细分过程期间采用的递归序列的所述位的序列添加一个或更多个新位,所述新位的值取决于所述选择。
9.根据权利要求6所述的曲面细分单元,其中,所述初始片是三角形片,并且被布置成依次选择由所述初始片的细分形成的每个子片并且以所述选择的子片代替所述初始片重复操作的硬件逻辑包括被布置成执行以下操作的硬件逻辑:
基于一个或更多个标志的值依次选择由所述初始片的细分形成的所述子片的每一个,并且以所述选择的子片代替所述初始片重复操作;
并且其中,被布置成以所述选择的子片代替所述初始片重复操作的硬件逻辑包括被布置成执行以下操作的硬件逻辑:
分析所述选择的子片以确定是否进一步细分所述选择的子片;
响应于确定所述选择的子片将不被细分,将所述选择的子片输出为三角形图元;
响应于确定所述选择的子片将被进一步细分,将所述选择的子片分成两个或更多个子片;以及
基于一个或更多个标志的值依次选择由所述选择的子片的细分形成的每个子片,并以所述选择的子片重复操作。
10.根据权利要求9所述的曲面细分单元,其中,细分形成两个片,左片和右片,并且被布置成基于一个或更多个标志的值依次选择由所述初始片的细分形成的所述左片和所述右片中的每一个的硬件逻辑包括被布置成执行以下操作的硬件逻辑:
基于排序标志的值依次选择由所述初始片的细分形成的所述左片和所述右片中的每一个。
11.根据权利要求10所述的曲面细分单元,还包括被布置成执行以下操作的硬件逻辑:
对于细分层次的每次增加或减少,将所述排序标志的值反转一次。
12.一种曲面细分单元,所述曲面细分单元被配置为在计算机图形系统中执行曲面细分,所述曲面细分单元包括硬件逻辑,所述硬件逻辑被布置成:
在曲面细分单元中,接收先前被曲面细分的图元的ID和曲面片引用;
访问来自与所述图元相关联的曲面片的数据,所述数据包括曲面细分因子和拓扑数据;
基于所述图元ID选择初始片,以及
用一个或更多个细分阶段至少部分地对所述初始片进行曲面细分,其中,在细分的每个阶段处,基于所述图元的ID中的一个或更多个位的序列,确定是否执行细分以及任何新形成的子片中的哪一个要进一步细分。
13.根据权利要求12所述的曲面细分单元,其中,所述曲面细分单元还包括被布置成执行以下操作的硬件逻辑:
基于来自与所述图元相关联的所述曲面片的数据来选择输入片,并将所述输入片细分成一个或更多个初始片。
14.根据权利要求13所述的曲面细分单元,其中,所述图元的或片的ID包括指定在曲面细分过程期间采用的递归序列的位的序列。
15.根据权利要求13所述的曲面细分单元,其中,所述位的序列中的每个位指示是对由曲面细分过程中的细分操作形成的左子片还是对右子片进行处理。
16.根据权利要求12所述的曲面细分单元,其中,对由输入片的细分生成的初始片至少部分地曲面细分导致重新生成所述先前被曲面细分的图元。
17.根据权利要求12所述的曲面细分单元,还包括被布置成执行以下操作的硬件逻辑:
输出对于所述先前被曲面细分的图元的域顶点。
18.一种计算机图形系统,包括:
曲面细分单元,所述曲面细分单元包括硬件逻辑,所述硬件逻辑被布置成:
在曲面细分单元中接收图元的ID;
在多个不同位置截短所述图元的ID,以生成所述图元中每个顶点的ID;
对于所述图元中的顶点的子集,在多个不同位置截短所述顶点的顶点ID,以生成父顶点的ID;以及
使用所述顶点ID来计算对于所述图元中每个顶点和对于所述图元中的顶点的所述子集的所述父顶点的UV坐标;以及
域着色器,所述域着色器包括被布置成根据所计算的UV坐标生成对于所述图元中每个顶点的顶点数据的硬件逻辑。
19.根据权利要求18所述的计算机图形系统,其中,所述图元的ID包括描述用于生成所述图元的细分序列的位的序列。
20.根据权利要求18所述的计算机图形系统,其中,所述图元的ID包括指定在曲面细分过程期间采用的递归序列的位的序列,并且其中,所述递归序列定义细分层次结构,并且其中,所述曲面细分单元中被布置成在多个不同位置截短所述图元的ID以生成所述图元中每个顶点的ID的硬件逻辑包括被布置成执行以下操作的硬件逻辑:
根据第一函数执行第一截短,所述第一函数将所述细分层次结构后退一步以生成第一顶点ID;
根据第二函数执行两次进一步截短以生成第二顶点ID和第三顶点ID,其中,所述第二函数将所述细分层次结构后退两步以生成所述第二顶点ID,并且将所述细分层次结构后退S步以生成所述第三顶点ID,其中,S的值由所述图元的ID确定。
21.根据权利要求18所述的计算机图形系统,其中,所述图元的ID包括指定在曲面细分过程期间采用的递归序列的位的序列,并且其中,所述递归序列定义细分层次结构并且针对所述图元中的顶点的所述子集,所述曲面细分单元中被布置成在多个不同位置截短所述顶点的顶点ID以生成父顶点的ID的硬件逻辑包括被布置成执行以下操作的硬件逻辑:
针对所述图元中的顶点的所述子集,根据所述第二函数执行两次截短,以生成第一父顶点ID和第二父顶点ID,其中,所述第二函数将所述细分层次结构后退两步以生成所述第一父顶点ID,并且将所述细分层次结构后退S步以生成所述第二父顶点ID,其中,S的值由所述顶点ID确定。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
GB1805678.8A GB2572620C (en) | 2018-04-05 | 2018-04-05 | Accessing Primitive Data |
GB1805678.8 | 2018-04-05 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN110349273A true CN110349273A (zh) | 2019-10-18 |
Family
ID=62203009
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910272742.2A Pending CN110349273A (zh) | 2018-04-05 | 2019-04-04 | 访问图元数据 |
Country Status (4)
Country | Link |
---|---|
US (3) | US20190311535A1 (zh) |
EP (2) | EP3761269A1 (zh) |
CN (1) | CN110349273A (zh) |
GB (1) | GB2572620C (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112307035A (zh) * | 2020-11-26 | 2021-02-02 | 深圳云天励飞技术股份有限公司 | 一种特征值id的管理方法、装置、电子设备及存储介质 |
Families Citing this family (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
GB2572620C (en) * | 2018-04-05 | 2021-10-20 | Imagination Tech Ltd | Accessing Primitive Data |
US11270471B2 (en) | 2018-10-10 | 2022-03-08 | Bentley Systems, Incorporated | Efficient refinement of tiles of a HLOD tree |
EP3864627A1 (en) * | 2018-10-14 | 2021-08-18 | Bentley Systems, Incorporated | Conversion of infrastructure model geometry to a tile format |
US11030792B1 (en) * | 2019-05-22 | 2021-06-08 | Parallel International GmbH | System and method for packing sparse arrays of data while preserving order |
US11004263B1 (en) * | 2019-05-22 | 2021-05-11 | Parallels International Gmbh | System and method for reading arrays of data by rebuilding an index buffer while preserving order |
US11055896B1 (en) | 2020-02-25 | 2021-07-06 | Parallels International Gmbh | Hardware-assisted emulation of graphics pipeline |
Family Cites Families (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5963209A (en) * | 1996-01-11 | 1999-10-05 | Microsoft Corporation | Encoding and progressive transmission of progressive meshes |
KR100294927B1 (ko) * | 1998-08-29 | 2001-07-12 | 윤종용 | 점진적인 삼차원 메쉬 정보의 부호화 방법 및 그 장치 |
GB2458488C (en) | 2008-03-19 | 2018-09-12 | Imagination Tech Ltd | Untransformed display lists in a tile based rendering system |
GB201104066D0 (en) | 2011-03-09 | 2011-04-20 | Imagination Tech Ltd | Compression of a tessellated primitive index list in a tile rendering system |
US9449419B2 (en) | 2012-03-30 | 2016-09-20 | Intel Corporation | Post tessellation edge cache |
US10186070B2 (en) * | 2012-11-02 | 2019-01-22 | Imagination Technologies Limited | On demand geometry and acceleration structure creation |
US9552665B2 (en) | 2013-03-18 | 2017-01-24 | Arm Limited | Hidden surface removal in graphics processing systems |
US9177413B2 (en) * | 2013-06-26 | 2015-11-03 | Nvidia Corporation | Unique primitive identifier generation |
GB2539042B (en) * | 2015-06-05 | 2019-08-21 | Imagination Tech Ltd | Tessellation method using displacement factors |
GB2533443B (en) * | 2015-06-05 | 2018-06-06 | Imagination Tech Ltd | Tessellation method using recursive sub-division of triangles |
GB2533444B (en) | 2015-06-05 | 2017-08-16 | Imagination Tech Ltd | Tessellation method |
GB2542133B (en) * | 2015-09-08 | 2020-05-27 | Imagination Tech Ltd | Graphics processing method and system for processing sub-primitives |
US9865073B2 (en) * | 2015-10-05 | 2018-01-09 | Adobe Systems Incorporated | Computer animation of artwork using fast 2-dimensional deformation solving |
GB2572620C (en) * | 2018-04-05 | 2021-10-20 | Imagination Tech Ltd | Accessing Primitive Data |
-
2018
- 2018-04-05 GB GB1805678.8A patent/GB2572620C/en active Active
-
2019
- 2019-04-03 EP EP20192203.6A patent/EP3761269A1/en active Pending
- 2019-04-03 EP EP19167182.5A patent/EP3550519B1/en active Active
- 2019-04-04 CN CN201910272742.2A patent/CN110349273A/zh active Pending
- 2019-04-05 US US16/376,511 patent/US20190311535A1/en active Pending
-
2020
- 2020-08-19 US US16/997,074 patent/US11308691B2/en active Active
-
2022
- 2022-03-29 US US17/707,032 patent/US11676336B2/en active Active
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112307035A (zh) * | 2020-11-26 | 2021-02-02 | 深圳云天励飞技术股份有限公司 | 一种特征值id的管理方法、装置、电子设备及存储介质 |
CN112307035B (zh) * | 2020-11-26 | 2024-01-05 | 深圳云天励飞技术股份有限公司 | 一种特征值id的管理方法、装置、电子设备及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
EP3550519B1 (en) | 2023-11-08 |
US11308691B2 (en) | 2022-04-19 |
US11676336B2 (en) | 2023-06-13 |
GB2572620B (en) | 2020-06-17 |
US20220222894A1 (en) | 2022-07-14 |
EP3550519A2 (en) | 2019-10-09 |
EP3761269A1 (en) | 2021-01-06 |
US20200380777A1 (en) | 2020-12-03 |
GB2572620C (en) | 2021-10-20 |
US20190311535A1 (en) | 2019-10-10 |
GB2572620A (en) | 2019-10-09 |
EP3550519A3 (en) | 2019-12-04 |
GB201805678D0 (en) | 2018-05-23 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110349273A (zh) | 访问图元数据 | |
US20220245755A1 (en) | Task Assembly for SIMD Processing Using Characteristics of Computation Instance for Allocation to a Task | |
US11263806B2 (en) | Graphics processing method and system for processing sub-primitives | |
CN106251384A (zh) | 使用三角形的递归再分的细分方法 | |
CN109979000A (zh) | 多视图图元块 | |
CN110362846B (zh) | 硬件曲面细分装置 | |
CN110363856A (zh) | 混合硬件 | |
EP3420537B1 (en) | Single pass bounding volume hierarchy rasterization | |
US11527034B2 (en) | Methods and tiling engines for tiling primitives in a graphics processing system | |
GB2555929A (en) | Task assembly | |
US20230385981A1 (en) | Task Merging | |
CN110349266A (zh) | 曲面细分操作中的排序 | |
GB2592046A (en) | Methods and tiling engines for tiling primitives in a graphics processing system | |
GB2592045A (en) | Data structures, methods and primitive block generators for storing primitives in a graphics processing system | |
GB2585750A (en) | Hardware tessellation units | |
Olsson | Real-Time Shading and Accurate Shadows Using GPGPU Techniques |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |