基于图块的计算机图形的制作方法

文档序号:11515822阅读:260来源:国知局
基于图块的计算机图形的制造方法与工艺

本申请是申请日为2013年9月12日,申请号为201310415416.5,名称为“基于图块的计算机图形”的中国发明专利申请的分案申请。

本发明涉及用于在基于图块的计算机图形系统中产生和阴影化计算机图形图像的方法和系统。



背景技术:

基于图块的渲染是用于渲染2d或3d计算机图形图像的众所周知的技术。图像被再分成多个通常为矩形的块或图块,并且每个块或图块包括多个图像像素。

从存储器中读取表示几何对象的图元数据并将其传输至屏幕空间。图元通常为多边形的,但也可能是线或点。之后为每个图块创建用于指示图元的对象列表,并且如果存在图元的话,这些图元部分或全部地位于该图块内。

每个图块独立地被渲染。对于每个图块,在各个对象列表中标识的图元被处理并且隐藏面消除可以被执行。可见对象的合成像素数据接着被传递至阴影化单元,该阴影化单元将纹理和阴影应用至可见对象内的每个像素。在已经为图块中的每个像素确定了最终像素值之后,图块的像素数据被写入存储器中以用于在输出设备上显示。

对于三角图元,图元数据将通常包括定义了顶点的数据和这些图元数据所定义的表面,其中用标记来指示待应用的相关阴影和纹理数据。



技术实现要素:

根据本发明的第一方面,提供了一种用于在基于图块的计算机图形系统中产生和阴影化计算机图形图像的方法,该方法包括以下步骤:提供几何数据;从所述几何数据获得多个图元;从所述多个图元中的至少一者获得一个或多个修改后图元;对于多个图像图块中的每个图像图块,获得包括标识了从中获得至少部分位于图块内的每个修改后图元的图元的数据的对象列表;以及使用各自的对象列表来阴影化每个图块以用于显示。

根据本发明的第二方面,提供了一种用于在基于图块的计算机图形系统中产生和阴影化计算机图形图像的方法,该方法包括以下步骤:提供几何数据;从所述几何数据获得多个图元;从所述多个图元中的至少一者获得一个或多个修改后图元;对于多个图块中的每个图块,获得包括标识了至少部分位于图块内的每个修改后图元的数据的对象列表;以及使用各自的对象列表来阴影化每个图块以用于显示。

本发明的实施方式具有以下优势:(全部或部分地)位于特定图块内的所有修改后图元能够从该图块的对象列表来确定。

申请人已经意识到,在基于图块的计算机图形系统中,对于每个图块而言,如果修改后图元仅在该图块的对象列表已经产生之后被从一个或多个在该对象列表中标识的图元中获得,那么并非事实上所有位于该图块中的修改后图元都将被创建。正如申请人已经意识到的,这是因为根据从中获得修改后图元的图元,这些修改后图元可以位于一个或多个不同的图块中。

以示出为目的,图5是显示了划分为四个矩形图块t1至t4的图像170的图示。在该图示中,一个图元180完全位于图块3(t3)中。从图元180获得的两个修改后图元以在图元中被阴影化的方式示出。这些修改后图元中的一者(由参考数字190所指示)也位于图块3中。但是,另一个修改后图元200在邻近的图块中,即图块4(t4)中。

因而,在该示例中,如果修改后图元仅在每个图块的对象列表已经被获得之后才被获得,那么在各个图块的渲染期间,图块4的图像将是不准确的。图块3的对象列表将包括用于标识图元180的数据。因而,在使用其对象列表来渲染图块3的情况下,修改后图元190能够针对该图块被获得并被处理。但是,图块4的对象列表将不包括用于标识图元180的数据,因为图元180不位于图块4内。因此,在使用其对象列表渲染图块4的情况下,图元200不能针对图块4被获得并被处理。

因而,本发明使得更加准确、更好质量的图像能够在基于图块的计算机图形渲染系统中被产生。

在实施方式中,一个或多个修改后图元中的至少一者为所述多个图元中的其中一个图元的转化、缩放和/或旋转后的实例。

几何数据可以定义用于用基于图块的计算机图形系统进行显示的对象。所述对象可以为表面数据的补丁(patch),以及获得所述多个图元的步骤可以包括镶嵌表面数据的补丁以获得多个镶嵌后的图元。

在本发明的第二方面的实施方式中,一个或多个修改后图元中的每一者可以被分配唯一标识符;并且,对于每个对象列表,用于标识每个至少部分位于该图块内的修改后图元的数据可以包括那个修改后图元的各自的唯一标识符。

但是,申请人已经意识到,本发明的第一方面中定义的可替换的解决方案为可以存储标识了从中获得至少部分位于图块内的每个修改后图元的图元的数据,而不是存储标识了至少部分位于特定图块内的每个修改后图元的数据。也就是,一个或多个修改后图元可以被分配与从中获得这些修改后图元的图元相同的标识符。

从中获得至少部分位于图块内的每个修改后图元的图元可以位于不同的图块中。

本发明的该方面具有以下缺点:修改后图元可能需要在阴影化每个图块的情况下被重新获得以用于显示。但是,申请人已经意识到,本发明的该方面具有以下显著的优势:可以减少需要被存储在对象列表中的数据量,并且更充分地压缩存储在对象列表中的数据是可能的。因而,需要存储对象列表的存储器和需要写入对象列表至存储器或从存储器读取对象列表的存储器带宽可以被有益地减少。

通过示例的方式,邻近的图元或空间上的本地图元(例如根据镶嵌表面数据的补丁而获得的镶嵌后图元)通常被分配连续的整数以作为标识符。连续整数的行程(run)可以使用简单的方法(诸如行程长度编码(runlengthencoding))而简单地被压缩。但是,如果整数因为相关联的图元不位于图块内而没有位于对象列表中,那么这些压缩技术的有效性是有限的。向的图元分配与从中获得修改后的图元的图元相同的标识符(整数)增加了存在于特定对象列表内的图元整数的更长行程的机会。这是特定的实例,因为在许多应用中,至少一个修改后的图元将位于从中获得该修改后的图元的图元的附近。因此,如果图元刚好位于图块之外,那么该图元的修改后图元中的一者可以位于该图块内是可能的。

在本发明的该方面中,阴影化步骤可以包括从从中获得修改后的图元的图元中重新获得至少部分位于所述图块中的每个修改后的图元。

在实施方式中,获得一个或多个修改后的图元的步骤可以包括应用递增地获得修改后的图元的序列的修改函数。

如果所述序列中多个修改后的图元至少部分地位于一个图块中,则该方法还可以包括存储用于指示所述多个修改后的图元的序列中的第一和/或最后位置的数据。

在该实施方式中,所述阴影化步骤可以包括重新获得所述修改后的图元的序列并将至少一些所述修改后的图元存储在高速缓存中。这意味着不需要多于一次地获得这些修改后的图元及可以针对不同图块来恢复所述序列。

阴影化步骤可以包括重新获得修改后的图元的序列的一部分并存储修改函数的状态和最后重新获得的修改后的图元,藉此修改函数能够开始从所述最后重新获得的图元中重新获得所述修改后的图元的序列。

根据本发明的第一方面,还提供了一种用于在基于图块的计算机图形系统中产生和阴影化计算机图形图像的系统,该系统包括:至存储器设备的接口;以及处理器,该处理器被配置成:经由所述接口从所述存储器设备读取几何数据;从所述几何数据获得多个图元;从所述多个图元中的至少一者获得一个或多个修改后的图元;对于多个图块中的每个图块,获得包括标识了从中获得至少部分位于图块内的每个修改后的图元的图元的数据的对象列表;以及使用各自的对象列表来阴影化每个图块以用于显示。

根据本发明的第二方面,还提供了一种用于在基于图块的计算机图形系统中产生和阴影化计算机图形图像的系统,该系统包括:至存储器设备的接口;以及处理器,该处理器被配置成:经由所述接口从所述存储器设备读取几何数据;从所述几何数据获得多个图元;从所述多个图元中的至少一者获得一个或多个修改后的图元;对于多个图块中的每个图块,获得包括标识了至少部分位于图块内的每个修改后的图元的数据的对象列表;以及使用各自的对象列表来阴影化每个图块以用于显示。

附图说明

本发明的实施方式将参照附图仅以示例的方式进行描述,其中:

图1是根据本发明优选实施方式的显示了用于在基于图块的渲染系统中产生和阴影化计算机图形图像的设备的示意图;

图2是根据本发明实施方式的显示由图块化单元(tilingunit)执行的步骤的流程图;

图3是根据本发明实施方式的显示由图块化单元执行的步骤的又一流程图;

图4是根据本发明优选实施方式的显示由图块化单元执行的步骤的流程图;

图5是示出了被划分成多个图块的图像的图示;

图6a和6b是根据本发明实施方式的存储在图5所示的图块的对象列表中的信息的示意图。

具体实施方式

在以下本发明的优选实施方式中,多个图元为通过镶嵌表面数据的补丁产生的镶嵌图元。但是,应当理解的是本发明并不限于该实施方式且可以同样与由其他方式产生的镶嵌图元一起使用或与非镶嵌图元一起使用。

图1显示了根据本发明优选实施方式的示意图,该示意图示出了用于在基于图块的渲染系统中产生和阴影化计算机图形图像的图形流水线。

定义了用于显示的对象的几何数据10被提供给几何处理单元20,该几何处理单元20从对象数据中获得多个图元。在该实施方式中,该几何处理单元20包括镶嵌单元,该镶嵌单元从表面数据的补丁中获得多个镶嵌图元。

镶嵌是已知的技术,该技术将低细节的模型分解为多个镶嵌图元,所述低细节的模型例如是更高阶的表面,其一般在计算机图形工业中被称为“补丁”。“补丁”通常为定义了一组控制点的多项式方程的函数,这些控制点描述了关于变量“t”(用于二维曲线)或域坐标“u、v”(用于三维曲线)的曲线形状。在计算机图形中使用的补丁的一个示例是bezier(贝塞尔)补丁,但本领域技术人员应当理解也存在其他补丁。目前,通常使用平面补丁(flatpatch),例如三角补丁,这些平面补丁被分成之后由函数进行位移和/或依赖位移高度图的多个图元来创建多个镶嵌图元。

正如本领域技术人员已知的,图形流水线中表面数据的补丁的镶嵌能够由多个应用编程接口(api)(例如,11api)支持。11api支持位移映射,藉此镶嵌图元可以处于距离补丁的表面位移后的位置处。

在镶嵌图元已经获得之后,待修改的镶嵌图元被传递至修改单元30,该修改单元30可以包括编程元件。本领域技术人员应当理解,哪些图元将被修改由图形流水线确定。

对于待修改的镶嵌图元中的每个镶嵌图元,修改单元30或者对图元进行剔除,或者将修改函数应用至与该图元相关联的几何数据以产生该图元的一个或多个被几何修改后的实例(修改后的图元)。

修改单元30可以应用任何几何变换,包括转化、旋转或缩放变换,或这些变换的任意组合。关于应用什么样的几何变换,修改单元30可以是可编程的。每个修改后的图元可以根据从中获得该修改后的图元的图元(输入图元)而覆盖图像的整个不同区域,或者每个修改后的图元所覆盖的区域可以与由输入图元所覆盖的图像区域相重叠。

在该示例中,所述函数产生多个修改后的图元。多个修改后的图元中的每个修改后图元处于距离从中获得这些修改后的图元的图元位置位移后的位置处。这些图元可以被递增地产生。例如,第一个产生的图元可能最接近输入图元的位置,随后产生的每个实例渐渐远离输入图元的位置。但是,这仅仅是一个示例,并且这些修改后的图元可以以任何次序或顺序(包括任意的次序)产生。进一步地,应当理解的是,例如在散焦模糊应用中,多个修改后的图元可以以与输入图元有小的偏移的方式被产生,而没有必要以增加与输入图元的距离的方式被产生。

修改单元可以将可编程函数应用于输入图元的顶点,或者将可编程函数应用于表面数据的补丁(输入图元从该表面数据的补丁中获得)并接着对表面数据的修改后补丁进行镶嵌以获得输入图元的修改后实例。

所产生的图元被传递至图块化单元40,所述所产生的图元包括未修改的和修改后的图元。

可选地,图元可以首先被传递至修剪和剔除单元(未示出),该修剪和剔除单元移除了例如任意背向图元(back-facingprimitive)、屏幕外图元或不可见图元,并且剩余的图元然后可以被传递至投影单元(也未示出),该投影单元将图元转换到屏幕空间中。

图2是示出了由图块化单元40执行的步骤的流程图。

首先,在步骤90,图块化单元40将屏幕空间视区图像划分成多个图块,每个图块包括多个图像像素。图块通常为矩形,但也可以为其他形状。

在步骤100,对于每个图块,图块化单元40接着确定是否每个图元都至少部分位于该图块中。也就是,是否图元的至少一部分位于图块的可视区域中。这可以使用多个已知技术来进行。

在步骤110,图块化单元40获得对象列表,对于每个图块,该对象列表指示至少部分位于该图块中的图元。即使没有位于图块中的图元并因而该图块的对象列表是空的,也会为那个图块创建对象列表。本领域技术人员还应当理解,有可能不是每个被确定为位于图块中的图元实际上都在该图块的对象列表中被指示。例如,在图块化阶段,可以确定图元被图块中的其他图元模糊化了,并因而该图元在图块中是不可见的。该图元可能因而不能在该图块的对象列表中被指示出,以节省以后不必要的处理该图元的步骤。

未修改的图元可以以多种方式被指示出。优选地,标识每个图元的标识符被存储在各自的对象列表中。每个图元例如可以被分配索引,或者每个图元顶点可以被分配索引。

这些标识符可以为各个图元或图元顶点引入或提供至几何数据的指针。但是,在该实施方式中,对于每个镶嵌图元而言,正如在申请人已公开的英国专利公开号no.2480012中所描述的那样,不是存储用于图元的完整几何数据,而是存储例如针对补丁的一组控制点和镶嵌参数之类的数据,根据该数据能够随后获得那个图元的几何数据。

图3是示出根据本发明实施方式的用于指示修改后的图元的方法的流程图。

在步骤120,每个修改后的图元被分配了唯一标识符。例如,每个修改后的图元可以被分配连续的整数。如果输入图元被分配了整数0,那么多个新的图元实例可以分别被分配整数1,2,3,4……n。在步骤130,如果确定了其中一个或多个修改后的图元至少部分位于图块内,那么,在步骤140,每个修改后图元的唯一标识符被存储在那个图块的对象列表中。

仅以示出为目的,图6a显示了可以被存储在图5所示的图块3和4的对象列表中的信息。在该示例中,考虑图元180(输入图元)被分配了标识符0。修改后的图元190被分配了标识符1以及修改后的图元200被分配了标识符2。在图块3的对象列表中,存储了图元180的标识符(0),还存储了修改后的图元200的标识符(1)。在图块4的对象列表中,存储了修改后的图元200的标识符(2)。

图4是根据本发明优选实施方式的显示了用于指示修改后的图元的可替换方法的流程图。

在步骤150,如果确定了其中一个或多个修改后的图元位于图块内,那么在步骤160,输入图元的标识符(一个/多个索引)被存储在那个图块的对象列表中,其中从输入图元中可以产生那些修改后的图元。换句话说,每个修改后的图元可以被分配与输入图元相同的标识符(一个/多个索引)。例如,如果输入图元被分配了整数0,那么那个图元的每个修改后的实例也可以被分配索引0。

输入图元的一个/多个索引可以被存储一次,以用于那个图元的位于图块内的每个修改后实例,但是优选地,每个列表仅存储输入图元的一个/多个索引一次,而不管那个图元的位于特定图块内的实例的数量。

图6b显示了在该优选实施方式中可以被存储在图5中的图块3和4的对象列表中的信息。在图块3的对象列表中,存储了图元180的标识符(0)。应当注意的是,在该示例中,仅存储图元180的标识符(0)一次,虽然图元180和从图元180获得的修改后图元190二者都位于图块3内。在图块4的对象列表中,图元180的标识符(0)也被存储。

在该实施方式中,不能从图块的对象列表中识别出在对象列表中被标识出的哪个或者多少个图元实例是位于该图块内的。但是,尽管如此,该实施方式具有以下优势:如果输入图元的实例中的至少一个实例位于图块内,则从中获得修改后的实例的该输入图元在对象列表中被标识出,而不管该输入图元自身是否位于该图块内。因而,与以上实施方式类似,所有位于该图块内的修改后图元可以被处理以使用其对象列表精确地对图块进行阴影化。此外,该优选实施方式使得存储在对象列表中的数据能够以高度压缩格式进行存储。

如以下更加详细描述的那样,为了对图块进行阴影化,相同的修改函数被再次应用至在对象列表中所标识的每个图元。接着,一旦修改后的图元已经被重新产生,那么哪些图元位于图块内(如果有的话)就可以使用以上描述的已知技术来确定。

然而,该实施方式是有缺点的,即不仅必须重新产生任何位于图块内的修改后图元,而且会不必要地计算实际上未位于图块内的修改后图元。假定每个图元可以具有几百或几千个修改后实例,那么这会带来巨大的计算资源浪费。

优选地,包括多个比特的标记因而被存储在图块的对象列表中或被存储在存储器的另一区域中,该标记用于指示在对象列表中所标识的哪些图元在该图块内具有修改后实例。这避免了必须将修改函数再次应用至对象列表中所标识的所有图元,同时保留了能够将对象列表中的数据以高度压缩格式进行存储的优势。

如以上提到的,修改后的图元经常被递增地产生,以使一个修改后的图元根据输入图元创建,并且接着第二个修改后的图元根据该修改后的图元创建,等等,直至修改后的图元的序列已经被获得。

在该实施方式中,更优选地,除了存储标识了图元(从该图元中获得修改后的图元的序列)的标识符之外,还存储了指示位于图块内的这些修改后的图元的序列中的第一个和/或最后一个位置的数据。该数据可以被存储在该图块的对象列表中或存储在存储器的另一区域中。

该实施方式具有以下优势:在修改后的图元的序列的子集位于特定图块内的情况下,不是所有的修改后图元的序列都需要相对于那个图块被重新获得,如以下更具体解释的那样。

但是,存在着这样的折衷:需要为在对象列表中被标识的每个图元存储用于指示第一个和/或最后一个序列位置的数据。在该描述的实施方式中,在图元为镶嵌图元的情况下,本领域技术人员应当理解,可以具有由每个补丁所产生的几千个图元。为每个图元存储该位置数据将需要大量的存储器。

申请人因此已经意识到,在该实施方式中,一个很好的折衷办法是确定位于图块内的任何修改后图元的最高和/或最低序列位置,这些修改后图元从镶嵌图元中获得,这些镶嵌图元从表面数据的补丁中获得。这意味着对于整个补丁而言,需要每个图块存储仅两个整数。该技术可能导致产生更多不需要的修改后图元,但需要较少存储器,同时避免了重新获得一些不需要的修改后图元。

在一些实施方式中,可能存在着不止一种类型的修改单元30,该修改单元30将不同的修改函数应用至输入图元。在这些实施方式中,优选地,每个修改函数被分配了标识符,并且标识了修改函数的标识符被存储起来,其中,该修改函数产生位于特定图块内的修改后的图元。该标识符可以被存储在该图块的对象列表中或被存储在其他位置。

在这些实施方式中,指示修改后的图元的序列中的第一和/或最后位置的数据可以关于每个修改单元而被存储。

可以例如以本领域技术人员公知的方式通过使用索引/顶点缓冲器来压缩索引的列表。

申请人的未公开英国专利申请no.1104066.4描述了多种用于压缩由表面数据补丁的镶嵌而获得的镶嵌图元的索引列表的技术,这些技术利用了表面数据的镶嵌补丁的内部结构知识。

应当理解的是,为修改后的图元分配与输入图元相同的一个/多个索引的重大意义在于可以使用相同的压缩技术来压缩所述一个/多个索引。

对象列表50可以被存储在存储器中,例如缓冲器中。

返回参照图1,在本发明的优选实施方式中,为了对每个图块进行阴影化以用于显示,图块的对象列表被读取,并且在必要时,存储在对象列表中的索引列表被解压缩。

在该实施方式中,镶嵌图元的索引和相关联的补丁数据和镶嵌因子被传递至镶嵌单元(未示出)。镶嵌单元对表面数据的补丁进行再次镶嵌以获得在对象列表中被标识的镶嵌图元的几何数据。

修改函数接着可以被修改单元60再次应用于与其中一个或多个图元相关联的几何数据以重新获得一个或多个修改后的图元,例如,在读取了用于指示该图元的修改后实例位于图块内的数据的情况下。修改单元60可以是与修改单元30相同的单元或可以是单独的单元,该单独的单元与修改单元30应用相同的修改函数。在在图块化之前使用应用不同修改函数的多个修改单元产生修改后图元的情况下,应当理解的是,在图块化之前,修改单元60必须应用与被应用至输入图元的函数相同的修改函数。可以通过例如读取该图元的修改函数标识符来确定哪个修改函数应该被应用。

如以上所提到的,一些修改单元可以递增地进行操作,并且即使已知图元的哪些实例位于特定图块内,也不可能仅产生这些实例。

在这种情况下,由修改单元60产生的所有修改后实例可以被存储在本地存储器中,例如高速缓存中。这具有以下优势:在这些实例遍布一个以上的图块的情况下,关于另一图块,修改单元可以不需要针对相同的图元被应用第二次。在修改单元60被应用于在对象列表中所标识的图元之前,可以确定修改后的图元实例是否已经被存储在高速缓存中。如果是的话,对于那个图元而言,就不需要再次重新应用修改单元60。

在可替换的实施方式中,修改单元60可以在位于特定图块内的最后一个图元已经被产生之后被停止。这例如可以通过读取指示出序列中位于该图块内的最后一个图元的数据来确定。在该实施方式中,修改单元60的状态以及最后产生的修改后图元可以被存储起来,以使修改单元能够从已经针对另一图块而停止的地方继续执行。因而,例如在前100个修改后图元已经被产生且接着随后的图块需要第101个修改后图元的情况下,修改单元并不需要从起始处开始重新获得修改后图元的序列。位于特定图块内的第一个修改后图元可以通过读取指示出序列中位于图块内的第一个修改后图元的位置的数据来确定。

在该可替换的实施方式中,在修改单元60被应用于在对象列表中标识的图元之前,可以确定是否具有相同标识符的任意修改后图元都被存储在高速缓存中。如果是的话,可以提取序列中与所需要的修改后图元最接近的修改后图元,并且,在修改单元的状态已经被存储的情况下,修改单元可以从该修改后图元继续执行直至产生所需要的修改后图元。在修改后图元必须被递增地产生的应用中,序列中较早的最接近的修改后图元可以不必是最接近的修改后图元。

一旦修改后的实例已经被重新产生,则如果必要的话,哪些实例位于特定图块中可以使用以上描述的已知技术来确定。

对于每个图块,在针对位于该图块中的每个修改后图元和未修改后图元的数据已经被获得之后,图元可以被处理以使用已知技术来渲染图像。

例如,图元可以被传递至隐藏面消除单元70,该隐藏面消除单元70消除了图块中不可见的任何表面,并且所得到的像素数据可以被传递至纹理和阴影化单元80,在用于显示的最终像素值被写入存储器之前,该纹理和阴影化单元80应用像素或纹理阴影化。

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