用于处理计算机图形的方法和设备转让专利

申请号 : CN200910134653.8

文献号 : CN101533522B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : J·尼斯塔德

申请人 : ARM挪威股份有限公司

摘要 :

本发明涉及用于处理计算机图形的方法和设备。当把阿尔法测试作为多次采样图形处理流水线中的渲染过程的一部分来执行,而不是取为每个片段80、81、82、83初始定义的单个阿尔法值时,针对所讨论的片段正被用于渲染的每个被覆盖的采样位置来生成单独阿尔法值。然后,把为每个采样位置估计的单独阿尔法值与为阿尔法测试定义的临界阿尔法值单独地进行比较,并且该阿尔法测试比较的结果被用于确定是保留采样位置还是将其从进一步的处理中丢弃。

权利要求 :

1.一种在图形渲染系统中执行阿尔法测试的方法,所述方法包括通过以下步骤执行对一个或多个片段的阿尔法测试:为所讨论的一个或多个片段的一个或多个采样点生成单独阿尔法值;以及使用为采样点生成的单独阿尔法值来单独地执行对每个采样点的阿尔法测试。

2.如权利要求1所述的方法,其中为其生成单独阿尔法值的采样点对应于用于在光栅化阶段确定基元的覆盖范围的采样点。

3.如权利要求1或2所述的方法,其中采样点用于一组多个片段。

4.一种处理待显示的图像的图形基元的方法,所述方法包括:生成一组图形片段以用于渲染供显示的基元;

渲染为基元生成的图形片段以确定用于每个渲染的图形片段的渲染片段数据集;以及作为渲染过程的一部分,执行针对一个或多个片段的阿尔法测试;其中:通过以下步骤来执行阿尔法测试:

为所讨论的一个或多个片段的一个或多个采样点生成单独阿尔法值;以及使用为采样点生成的单独阿尔法值来单独地执行对已经为其生成了阿尔法值的每个采样点的阿尔法测试。

5.如权利要求1或4所述的方法,包括通过根据与所讨论的片段相关联的阿尔法值估计每个采样点处的阿尔法值,来为采样点生成单独阿尔法值。

6.如权利要求1或4所述的方法,包括使用为所讨论的片段定义的阿尔法值以及为所讨论的片段的一个或多个相邻片段定义的一个或多个阿尔法值,来为采样点生成阿尔法值。

7.如权利要求1或4所述的方法,其中阿尔法值的比较被用于确定是否丢弃采样点。

8.如权利要求1或4所述的方法,包括将每个片段与指示片段正被用于渲染哪些采样点的数据相关联,并且使用阿尔法测试的结果来修改该数据以指示作为阿尔法测试的结果而将被丢弃的采样位置。

9.如权利要求1或4所述的方法,包括使用对单独采样位置的阿尔法测试来评估阿尔法测试引入的边缘是否可以经过所讨论的一个或多个片段。

10.一种用于在图形渲染系统中执行阿尔法测试的系统,所述系统包括:用于为将要经历阿尔法测试的片段或片段组的一个或多个采样点生成单独阿尔法值的装置;以及用于使用为采样点生成的单独阿尔法值来单独地执行对每个采样点的阿尔法测试的装置。

11.如权利要求10所述的系统,其中为其生成单独阿尔法值的采样点对应于用于在光栅化阶段确定基元的覆盖范围的采样点。

12.如权利要求10或11所述的系统,其中采样点用于一组多个片段。

13.一种用于处理待显示的图像的图形基元的系统,所述系统包括:用于生成一组图形片段以用于渲染供显示的基元的装置;

用于渲染为基元生成的图形片段以确定用于每个渲染的图形片段的渲染片段数据集的装置;以及用于作为渲染过程的一部分而执行针对一个或多个片段的阿尔法测试的装置;其中:用于执行阿尔法测试的装置包括:

用于为所讨论的一个或多个片段的一个或多个采样点生成单独阿尔法值的装置;以及用于使用为采样点生成的单独阿尔法值来单独地执行对每个采样点的阿尔法测试的装置。

14.如权利要求10或13所述的系统,包括用于通过根据与所讨论的片段相关联的阿尔法值估计每个采样点处的阿尔法值来为采样点生成单独阿尔法值的装置。

15.如权利要求10或13所述的系统,包括用于使用为所讨论的片段定义的阿尔法值以及为所讨论的片段的一个或多个相邻片段定义的一个或多个阿尔法值来为采样点生成阿尔法值的装置。

16.如权利要求10或13所述的系统,其中阿尔法值的比较被用于确定是否丢弃采样点。

17.如权利要求10或13所述的系统,包括用于将每个片段与指示片段正被用于渲染哪些采样点的数据相关联的装置,以及用于使用阿尔法测试的结果来修改该数据以指示作为阿尔法测试的结果而将被丢弃的采样位置的装置。

18.如权利要求10或13所述的系统,包括用于使用对单独采样位置的阿尔法测试来评估阿尔法测试引入的边缘是否可能经过所讨论的一个或多个片段的装置。

说明书 :

用于处理计算机图形的方法和设备

技术领域

[0001] 本发明涉及计算机图形的处理,更特别地,涉及当处理计算机图形时用于执行反锯齿(anti-aliasing)的方法和设备。

背景技术

[0002] 将特别参照三维图形的处理来描述本发明,不过就如本领域的技术人员将会理解的,其同样适用于二维图形的处理。
[0003] 如本领域所公知的,通常通过首先将待显示的场景(scene)分成多个相似的基本部分(通常所说的“基元(primitive)”)来执行3D图形处理,以允许更加容易地执行3D图形处理操作。这些“基元”通常是简单多边形的形式,如三角形,并且通常通过定义它们的顶点来描述它们。
[0004] 一旦待显示的场景被分成多个图形基元,然后,如本领域所公知的,图形基元通常被进一步分成离散的图形实体或元素,通常称为“片段(fragment)”,对其执行实际的图形处理操作(如渲染(rendering)操作)。每个这样的图形片段将表示并且对应于基元中的一个或多个给定位置,并且实际上包括用于所讨论的一个或多个位置的数据集(如颜色和浓度(depth)值)。
[0005] 每个图形片段(数据元素)可以对应于最终显示中的单个像素(像元)(由于像素是待显示的最终图像中的奇点,所以会在3D图形处理器所操作的“片段”与显示中的像素之间存在一一映射)。然而,可以是这种情况,在“片段”和“像素”之间不存在一一对应,例如,在显示最终图像之前,在所渲染的图像上执行特定形式的后处理,例如缩小比例(down-scaling)。
[0006] 因此,通常被执行的3D图形处理的两个方面是图形“基元”(或多边形)位置数据到图形片段位置数据的“光栅化(rasterising)”(即,确定将被用于表示待显示的场景中的每个基元的图形片段的(x,y)位置),然后“渲染”“光栅化的”片段(即,片段的着色、明暗等等)以供在显示屏上显示。
[0007] (在3D图形文献中,术语“光栅化(rasterisation)”有时用于意指对片段的基元转换和渲染这二者。然而,这里“光栅化”将仅用于指代基元数据到片段地址的转换。)[0008] 光栅化过程基本上包括为实际上叠加在待显示的场景上的采样点阵列确定所讨论的基元覆盖了阵列中的哪些采样点。然后生成具有适当(x,y)位置的片段,以用于渲染被发现由基元覆盖的采样点。
[0009] 渲染过程基本上包括得到显示每个片段所需的数据。这样的数据通常包括每个片段的红、绿和蓝(RGB)颜色值(其将基本上确定显示器上片段的颜色),以及每个片段的所谓的“阿尔法”(透明度)值。
[0010] 正如本领域所公知的,通常通过以线性或流水线方式相继地对每个片段执行单独的渲染过程(步骤)来得到该数据(即,用于该片段的数据)。因此,例如根据例如片段的(x,y)位置以及为片段所属的基元的顶点记录的颜色和透明度数据,为每个片段首先分配初始RGB和阿尔法值。然后接连地对片段数据执行诸如纹理化(texturing)、雾化以及混合等等之类的操作。这些操作更改了为每个片段设置的初始RGB和阿尔法值,以使得在最后的处理操作之后,每个片段具有一组适当的RGB和阿尔法值以允许在显示屏上正确地显示该片段。
[0011] 当处理供显示的图形时(当显示计算机生成的图像时)遇到的一个问题是,所显示的图像被量化为正被使用的显示器(例如,监视器或打印机)的离散像素位置。这限制了所显示图像的分辨率并且会产生不希望的视觉伪像(artifact),例如,输出显示设备的分辨率不足以显示平滑线条。这些效应通常被称作“图形失真(aliasing)”。
[0012] 图1图示了这样的图形失真效应。图1的左手边示出了待绘制的图像,而右手边示出了所显示的实际图像。如所能够看到的,白色对象的期望的平滑曲线实际上在显示器上具有锯齿状外观。这就是图形失真。(图1中,每个方形表示显示器的像素,而交叉号表示针对每个(x,y)像素位置确定了(采样了)颜色值的该像素位置处的点。例如,图1中的像素A被绘制成全白,因为该像素位置的颜色采样点落入白色对象内。应当注意的是,图1中仅示出了所关心的像素上的采样交叉,虽然实际上会对所有的像素进行采样。)[0013] 通过使用足够高分辨率的显示器可以消除所有图形失真伪像(其对于肉眼是可见的)。然而,电子显示器和打印机的分辨率通常是有限的,而很多图形处理系统使用其他技术设法消除或减少图形失真的效应。该技术通常被称作反锯齿技术。
[0014] 一种已知的反锯齿技术称作超级采样或过采样。
[0015] 在这样的方案中,对于最终显示的每个像素,存在多个采样点(位置),并且为每个(覆盖的)单独采样点取单独的颜色采样(colour sample)(例如,通过将每个采样点渲染成单独的片段)。其效果是,在渲染过程期间,为由基元覆盖的像素的每个采样点取不同的颜色采样。
[0016] 这意味着为显示器的每个像素位置取多个颜色采样(每个颜色采样用于像素的每个采样点,因为为每个采样点渲染单独的颜色值)。然后当显示像素时,这些多个颜色采样被合并成像素的单一颜色。这具有平滑或平均所讨论的像素位置处的原始图像的颜色值的效果。
[0017] 图2说明了超级采样过程。在图2所示的例子中,在渲染过程期间,为显示器中的每个像素确定四个采样点并且为每个采样点取单独的颜色采样。(从而每个这样的采样实际上能够被视为“子像素”,因为显示器中的每个像素由四个这样的子像素组成。)然后合并(向下过滤(down-filter))给定像素的四个颜色值采样(子像素),以使得用于显示器中的像素的最终颜色是为像素所取的四个颜色采样的颜色的适当平均(混合)值。
[0018] 这具有平滑所显示的图像,以及例如,通过用颜色的中间阴影环绕它们来减少显著的图像失真伪像的效果。这能够在图2中看到,其中像素A现在具有两个“白色”采样和两个“黑色”采样,并且因此在所显示的图像中被设置为50%“白色”。这样,根据例如发现多少像素落到边缘的每一侧上,使围绕白色对象的边缘的像素变模糊以产生更平滑的边缘。
[0019] 超级采样实际上以比实际用于显示器的分辨率高得多的分辨率来处理屏幕图像,然后在显示之前,将处理后的图像缩放(scale)并过滤(向下采样)到最终的分辨率。这具有提供具有减少图像失真伪像的改进图像的效果,但是需要更大的处理能力和/或时间,这是因为图形处理系统必须实际上处理与所存在的采样一样多的片段(以使得,例如,对于4x超级采样(即,为每个像素位置取4个采样),处理需求将是没有采用超级采样时的4倍)。
[0020] 因此已经建议了其他的反锯齿技术,在仍提供图像质量的一些改进的同时,其与全部超级采样相比具有较少的处理需求。
[0021] 一种这样的常见技术被称为“多次采样”。
[0022] 在多次采样的情况中,当图像被光栅化成片段时(在光栅化阶段),为每个像素再次测试多个采样点,以确定给定基元是否覆盖了采样点。因此,采用与“超级采样”系统类似的方式来确定多次采样系统中基元的采样点覆盖范围(因此在多次采样系统中,仍然有效地“超级采样”(过采样)基元的外部几何边缘)。
[0023] 然而,在多次采样系统的渲染过程中,由所讨论的基元覆盖的给定像素的所有采样点被分配以单个相同、公共的片段数据集(例如,浓度值、颜色值等等)(而不是像超级采样的情况,每个分别具有它们自己的片段数据集)。
[0024] 因此,在多次采样中,当渲染“像素”时,为组成最终显示的每个像素再次取多个采样,但是并非为每个采样确定单独的颜色值(如完全超级采样系统的情况那样),而是确定单个颜色值并且应用到发现其属于最终图像中的相同对象的像素的所有采样。换句话说,多次采样计算场景中给定对象的给定像素的单个颜色值,该颜色值被应用到(再次使用)由该对象覆盖的像素的所有采样(子像素)(与超级采样形成对比,超级采样中为每个采样确定单独的颜色值)。
[0025] 因为只有单个颜色值被用于给定像素的多个采样,所以多次采样与超级采样相比处理不那么密集,因此能够允许比超级采样更快的处理和性能。然而,与超级采样相比,所显示的图像的质量有所降低,这是因为虽然仍以较高的分辨率采样对象的边缘,但是颜色不是这样。
[0026] 尽管这样,许多图形处理系统使用多次采样反锯齿技术,由于多次采样能够大体上提供渲染图像中足够的(并且与根本没有多次采样或超级采样时相比改进了的)反锯齿,但是没有完全超级采样所必需的相当大的额外处理和计算负担。
[0027] 然而,申请人现在已经认识到现有多次采样图形处理方案的缺点。该缺点涉及许多图形处理系统中使用的被称为“阿尔法测试”的过程。
[0028] 如现有技术中所公知的,许多图形处理系统使用一般称为“阿尔法”或“阿尔法值”的特性来实际上表示待渲染的对象的透明度(或其他)。实际上,图形顶点和片段,例如,可以与所谓的阿尔法值相关联,这些阿尔法值如与顶点和片段相关联的颜色(红色、绿色、蓝色)值,但是作为代替表示顶点或片段等等处的对象的“透明度”。
[0029] 给定片段的阿尔法值可以,例如,从为片段所属的基元的顶点定义的阿尔法值得到,从将被应用到片段的纹理(texture)得到,或者从将被应用到片段的片段着色器(shader)(像素着色器)程序中的计算得到。
[0030] 图形处理中阿尔法值的共同使用是“公告牌(bill-boarding)”,如特别是重复渲染背景、图案,如待显示的场景中的树和草。阿尔法值能够被用于将诸如纹理之类的特征有效地应用于场景,这会比例如为树的每个叶子等定义基元要便宜。
[0031] 在渲染过程期间,通常通过执行所谓的“阿尔法测试”来执行这样的处理。阿尔法测试通常是渲染流水线(pipeline)中的定义步骤,并且通常包括把与正被渲染的片段相关联的阿尔法值与已经为场景和所讨论的阿尔法测试定义的临界值或参考阿尔法值相比较,并且然后根据比较结果来保留或丢弃所讨论的片段。换句话说,阿尔法测试使用定义的临界值或参考阿尔法值来保留或丢弃正被渲染的片段(以便将片段写入或不写入区块(tile)或帧缓冲器中)。
[0032] 申请人进一步认识到,在场景被渲染时执行阿尔法测试的结果是,它会将边缘引入到待显示的场景中。可能会产生边缘或线,例如,阿尔法测试中阿尔法值和与其比较的临界值交叉。
[0033] 例如,如果阿尔法测试参考值有效地定义了穿过待显示的场景的一条或多条线,则其会引起线的一侧上给定基元的片段(例如具有给定阿尔法值)被丢弃,但是线的另一侧上的被保留。同样,如果与片段相关联的阿尔法值在基元的表面的范围内逐渐变化,则可能再次有效地存在穿过基元的线,该线的一侧上的片段被保留,而另一侧上的片段被丢弃。
[0034] 因此,这些阿尔法测试过程会有效地使一个或多个新边缘被呈现或在基元中(当其被显示时)。(这里应当注意的是,当执行阿尔法测试时,这样的阿尔法测试引入的“边缘”不在光栅化阶段呈现或引入,而只是在渲染过程之后出现。)
[0035] 申请人进一步认识到,由此,阿尔法测试引入的这样的边缘对于反锯齿可能是希望的,同样对于反锯齿任何其他边缘,诸如基元的几何外部边缘,也是所希望的。
[0036] 然而,在多次采样图形处理方案的情况下,如上讨论的,当渲染片段时,得到单个片段数据集(例如,颜色值(R,G,B值)和阿尔法值)并且将其用于由给定基元覆盖的像素的所有采样位置。因此,给定像素的采样点将只具有与它们相关联的单个阿尔法值,然后阿尔法值被用于像素的所有采样位置。
[0037] 换句话说,在多次采样图形处理方案中,只有单个阿尔法值被共同用于将要得到的像素的所有采样。因此,当执行阿尔法测试时,由于每个采样具有相同的阿尔法值,所以所有采样或者没有采样将被丢弃,以致于实际上作为阿尔法测试的结果,像素作为一个整体被保留或被丢弃。
[0038] 申请人认识到,其的结果是,当执行阿尔法测试时,该测试将使像素被整体地保留或被丢弃。而且,这意味着以像素级分辨率,即实际上以整个像素乘像素为基础执行阿尔法测试。
[0039] 于是其效果是,不以过采样(超级采样)方式处理阿尔法测试引入的图像中的任何边缘,并且因此不会是反锯齿的(与如以上所论述的以过采样(超级采样)方式处理的几何外部原始边缘形成对比)。
[0040] 因此,申请人认识到,即使在多次采样图形渲染过程中,阿尔法测试引入的边缘也不会是反锯齿的并且因此它们的外观不是很好。
[0041] (这个问题不趋向于在完全超级采样图形处理方案中出现,因为在该情况下,每个“采样”将有效地具有它自己的颜色和阿尔法值并且因此无论如何会以较高的、超级采样的分辨率执行阿尔法测试(因此是反锯齿的)。然而,如上所述,超级采样可能不总是所希望的或者可能的,而在许多情况下,作为质量与处理负荷之间的权衡,优先选用多次采样图形处理方案。)
[0042] 申请人因此相信,仍然存在对多次采样图形处理系统进行改进的余地,特别针对这样的方案中的阿尔法测试的处理。

发明内容

[0043] 根据本发明的第一方面,提供了一种处理待显示的图像的图形基元的方法,该方法包括:
[0044] 为多个采样点的多个集合中的每个采样点确定图形基元是否覆盖了采样点;
[0045] 生成一组图形片段以用于渲染供显示的基元,每个图形片段对应于被发现包括由基元覆盖的采样点的多个采样点的集合,以及定义将被用于被发现由基元覆盖的采样点集合的采样点的片段数据集;
[0046] 渲染为基元生成的图形片段,以确定用于每个渲染的图形片段的渲染片段数据集;以及
[0047] 作为渲染过程的一部分,执行针对一个或多个片段的阿尔法测试;其中:
[0048] 通过以下步骤执行阿尔法测试:
[0049] 为与所讨论的片段相对应的每个覆盖的采样点生成单独阿尔法值;以及[0050] 使用为采样点生成的单独阿尔法值来单独地执行对每个覆盖的采样点的阿尔法测试。
[0051] 根据本发明的第二方面,提供了一种用于处理待显示的图像的图形基元的系统,该系统包括:
[0052] 用于为多个采样点的多个集合的每个采样点确定图形基元是否覆盖了采样点的装置;
[0053] 用于生成一组图形片段以用于渲染供显示的基元的装置,每个图形片段对应于被发现包括由基元覆盖的采样点的多个采样点的集合,以及定义将被用于被发现由基元覆盖的采样点集合的采样点的片段数据集;
[0054] 用于渲染为基元生成的图形片段以确定用于每个渲染的图形片段的渲染片段数据集的装置;以及
[0055] 用于作为渲染过程的一部分而执行针对一个或多个片段的阿尔法测试的装置;其中:
[0056] 用于执行阿尔法测试的装置包括:
[0057] 用于为与所讨论的片段相对应的每个覆盖的采样点生成单独阿尔法值的装置;以及
[0058] 用于使用为采样点生成的单独阿尔法值来单独地执行对每个覆盖的采样点的阿尔法测试。
[0059] 在本发明中,对其中每个图形片段对应于待显示的图像的多个采样点的集合的图形片段执行渲染过程(渲染)。(如上所述,每个采样点集合将,例如,通常对应于最终显示中的像素。)
[0060] 于是其效果是,给定片段将定义并提供将被用于与片段(正被用于渲染)相对应的采样点集合的所有采样点的单个公共的片段数据集。换句话说,本发明是多次采样图形处理方案。
[0061] 然而,当作为渲染过程的一部分而对片段执行阿尔法测试,而不是单个阿尔法值和阿尔法值比较测试作为整体被用于片段(如将是现有技术多次采样系统的情形)时,在本发明中,为与片段相对应(正被用于渲染)的每个覆盖的采样点生成单独阿尔法值,然后单独地执行对每个覆盖的采样点的阿尔法测试。
[0062] 其效果是,使用为所讨论的采样点生成的单独阿尔法值,即,实际上以采样点的分辨率(等级),而不是整个(多个采样点的集合的)片段的分辨率(等级),单独(分别)执行针对每个(覆盖的)采样点的阿尔法测试。
[0063] 于是,这使得,例如,能够根据单独阿尔法测试的结果来保留或丢弃(采样点集合的)片段的采样点,而不是像现有技术的多次采样方案那样,作为阿尔法测试的结果,只能够一起保留或丢弃所有的(采样点集合的)片段的采样点。
[0064] 这意味着,尤其,在本发明中,实际上仍然能够以与超级采样类似的方式(即,每个像素使用多个单独采样)执行阿尔法测试,虽然实际上不以完全超级采样方式来执行渲染过程,而是“多次采样”方案。
[0065] 因此,实际上,在本发明中,对于每个片段(并且因此,例如,对于显示器的每个像素)能够使用(支持)多个阿尔法采样,但是不需要完全的超级采样系统。本发明因此允许对阿尔法测试引入的边缘执行反锯齿,但是不需要具有完全的“超级采样”渲染过程(并且因此没有增加与完全超级采样系统相关联的大工作量)。
[0066] 根据本发明的第三方面,提供了一种在图形渲染系统中执行阿尔法测试的方法,其中待渲染的图形片段均能够表示由基元覆盖的待显示图像的多个采样点,但是其最初均把它们与将被用于片段的单个阿尔法值相关联,该方法包括通过以下步骤执行对片段的阿尔法测试:
[0067] 为与所讨论的片段相对应的每个覆盖的采样点生成单独阿尔法值;以及[0068] 使用为采样点生成的单独阿尔法值来单独地执行对每个覆盖的采样点的阿尔法测试。
[0069] 根据本发明的第四方面,提供了一种用于在图形渲染系统中执行阿尔法测试的系统,其中待渲染的图形片段均能够表示由基元覆盖的待显示图像的多个采样点,但是其最初均把它们与将被用于片段的单个阿尔法值相关联,该系统包括:
[0070] 用于为与所讨论的片段相对应的每个覆盖的采样点生成单独阿尔法值的装置;以及
[0071] 用于使用为采样点生成的单独阿尔法值来单独地执行对每个覆盖的采样点的阿尔法测试的装置。
[0072] 为待显示的图像所取的(并且其因此与渲染的每个片段相关联的)采样点的集合能够根据需要进行选择。如现有技术中所公知的,每个采样点集合(并且从而每个采样点)将表示待显示图像中的不同位置(x,y位置)(不过每个集合中的采样点的相对位置可能(并且通常将会)相同)。
[0073] 通常的情形是,将在具有显示器的输出设备上显示的图像包括多个像素,每个采样点集合优选地与显示器的给定像素(像素位置)的采样点集合相对应,或者与显示器的像素的一部分(例如,子像素)的采样点集合相对应。在后面的方案中,一组多个采样点集合优选地由用于显示器像素的整个采样点集合组成。在这些方案中,每个片段将有效地渲染显示器中给定像素的片段数据。
[0074] 采样点的集合可以表示(覆盖)待显示的整个图像区域,或者可以,例如只表示(并覆盖)待显示的整个图像的一部分。例如,将在基于区块的渲染系统中使用后者的方案,其中依次渲染图像(如16×16像素区块)的单独部分(区块),然后组合以便显示最终的图像。在这种情况下,表示图像的期望区块(部分)的多个采样点集合将被用于处理基元,然后,如果需要,则为图像的其他区块重复该过程。
[0075] 每个采样点集合包括多个采样点(即,覆盖了图像中的多个采样位置)。能够根据需要选择采样点的实际数量,不过四个是优选的数量。
[0076] 能够根据需要选择每个采样点集合中采样点的模式(pattern)和(相对)位置(采样模式)。例如,能够使用任何已知的合适的反锯齿采样模式,例如顺序栅格超级采样。最优选地,使用旋转栅格超级采样模式,原因在于它提供较好的采样效果,如现有技术中所公知的。因此,优选的是,图像中的每个采样点具有唯一的x和y坐标。
[0077] 在一个优选的实施例中,就给定基元而言用于对图像进行采样的每个采样点集合是相同的(即,使用采样点的相同数量和模式以及相对位置)。在这种情况下,每个片段的采样点集合将是相同的。
[0078] 在另一个优选的实施例中,就给定基元而言用于对图像进行采样的采样点集合可能不同和/或是不同的,例如,在采样点的数量和/或采样模式或用于每个采样点集合的相对位置。最优选的是,在用于渲染基元的片段之间采样点集合可以不同。
[0079] 在一个优选的实施例中,用于渲染基元的每个片段对应于不同的采样点集合。在这种方案中,实际上将只生成单个片段并且将其用于共同渲染每个采样点集合的采样点,其中渲染(不同的)采样点集合的(多个)采样点的每个片段是共用的。
[0080] 为渲染基元而生成的图形片段的集合应当包括用于适当渲染供显示的基元的足够片段。因此,例如,公知的是,实际上在最终显示中将不会看到基元的一部分,所以将没有必要为基元的该部分生成片段。同样,即使已经为基元生成了片段,优选的是,不渲染在最终图像中实际上看不到的任何片段。(可以使用,例如,早期浓度(z)-测试来对此进行评估(assess),如现有技术中所公知的。)
[0081] 为每个片段和采样点确定并存储的片段数据能够是任何合适的此类数据。它应该至少包括适当的颜色和/或透明度数据,如RGB和阿尔法值,例如,以便允许适当地显示显示器的像素。(这里应当理解的是,这里提及的“颜色数据”包括合适的格雷码或类似数据,如将被用于单色或黑白显示。)
[0082] 至少在处理三维图形的情况下,确定并存储的片段数据优选地还包括用于片段(并且从而用于所讨论的一个或多个采样位置)的浓度(z)值。
[0083] 根据情况(并且如果需要),还能够(优选地)确定并存储其他片段数据,如所谓的模板数据。
[0084] 根据情况,应当在适当的片段数据阵列中存储渲染的片段数据,如现有技术中所公知的。如现有技术中所公知的,该阵列应当表示,例如,片段位置的二维阵列,然后可以适当地对其进行处理,以便例如,显示像素的2D阵列。例如,片段数据的阵列可以对应于待显示的图像的采样位置的阵列。
[0085] 能够以任何期望的并且合适的方式来生成阿尔法值,所述阿尔法值是为与片段相对应的每个(覆盖的)采样点而生成的,以供在本发明的阿尔法测试过程中使用。
[0086] 这里应当注意的是,本发明中,为每个采样点生成单独的阿尔法值。换句话说,为每个(相关的)采样点分别生成阿尔法值,并且分别执行针对每个采样点的阿尔法值生成过程(而不是,例如,仅仅为每个采样点分配最初为片段分配或定义的阿尔法值)。
[0087] 因此,每个采样点将经历它本身的阿尔法值生成过程,并且将具有,并且优选地具有为它生成的与对应于片段的其他采样点不同的阿尔法值(虽然有时候,为每个采样点生成的阿尔法值可能是相同的,例如,取决于阿尔法值在基元的范围内如何变化)。因此,在优选的实施例中,为每个采样点生成的阿尔法值与为对应于片段的其他采样点生成的阿尔法值不同。
[0088] 在特别优选的实施例中,通过根据与所讨论的片段相关联的和/或与正被渲染的其他片段相关联的一个或多个阿尔法值估计每个采样点处的阿尔法值来生成采样点的单独阿尔法值。例如,如果片段具有已经与它相关联的给定阿尔法值(例如,在渲染过程开始时为它定义的),则优选地至少部分地使用为片段定义的阿尔法值来生成(估计)将被用于本发明的阿尔法测试过程的片段的采样点的阿尔法值。
[0089] 因此,在特别优选的实施例中,在渲染过程期间,使用为所讨论的片段最初定义的(单个)阿尔法值来为片段的采样点(一个或多个)生成单独的阿尔法值。
[0090] 在特别优选的实施例中,所讨论的片段的所生成的阿尔法值是通过使用为待渲染的多于一个的片段定义的初始阿尔法值来生成的,例如,优选地,为所讨论的片段定义的阿尔法值以及为一个或多个相邻片段定义的一个或多个阿尔法值,并且优选地直接相邻的片段。
[0091] 在一个优选实施例中,包括所讨论的片段的2×2块的片段(2个片段宽度乘以两个片段高度的块)的阿尔法值被用于为每个采样点生成(估计)单独的阿尔法值(例如,优选地,通过使用双线性过滤过程或类似的方式)。因此,优选地,为四个片段定义的初始阿尔法值被用于为采样位置生成单独的阿尔法值。
[0092] 当然,其他的方案也是可能的。例如,为片段定义的、用于阿尔法值生成过程的初始阿尔法值越多,给定采样点的阿尔法值的估计就越准确(但是,另一方面,估计过程可能会越处理密集)。例如,可以使用3×3块的片段的初始设置的阿尔法值。例如,如果希望,也可以使用为与所讨论的片段相隔更远的片段定义的阿尔法值,而不是直接相邻的片段。
[0093] 能够以任何合适且期望的方式,根据一个或多个片段的最初定义或得到的单个阿尔法值来生成采样点的阿尔法值。实际上,只要可能,目的是估计(再现(recreate))采样点处的阿尔法值,并且这能够使用任何合适的功能来实现,所述功能能够提供每个采样点处的阿尔法值的估计。当然,可能是这种情况,不同的估计功能可能比其他的更为适合某些环境,例如,关于待显示的场景的阿尔法值是在该场景范围内平滑地变化,还是更加不规律地变化。
[0094] 在特别优选的实施例中,通过以下步骤来估计片段的采样点的阿尔法值:将为片段定义的单个初始阿尔法值作为片段中心处的阿尔法值,估计所讨论的采样点处的阿尔法值相比于片段的中心点之间的差,并且将所估计的阿尔法值之差加到片段的单个初始阿尔法值以便得到将被用于采样位置的阿尔法值。换句话说,在优选的实施例中,估计采样点处与片段的中心处的阿尔法值之间的差,然后将其与为片段最初定义或得到的阿尔法值一起使用以生成采样点的阿尔法值。
[0095] 如果希望,片段的初始阿尔法值和/或用于片段的中心的阿尔法值可以是,例如,静态阿尔法值、动态变化的值、构造的或计算的值等等。
[0096] 在这些方案中,能够以任何期望的方式得到或估计片段中心处与采样位置处的阿尔法值之间的差。然而,在特别优选的实施例中使用梯度估计方法。换句话说,优先地估计或确定阿尔法值相对于从片段中心到采样点的距离的变化率(斜率(导数)),然后使用它来得到阿尔法值之差(根据采样点与片段中心的距离)。
[0097] 在这些方案中,能够根据需要以任何合适的方式估计或得到阿尔法值相对于距离的变化率(斜率)。在特别优选的实施例中,这是通过取适当相邻片段的阿尔法值之间的差(以及适当相邻片段的中心点之间的距离)来实现的。
[0098] 因此,例如,能够通过以下步骤来优选地估计x方向上阿尔法值的变化率(斜率):取彼此间相对的位置x和x+1(或x-1)处的两个片段的阿尔法值,确定片段的阿尔法值之间的差以及两个片段的中心之间沿x轴的距离,并且使用阿尔法值的差以及距离来确定x方向上阿尔法值的梯度的估计。优选地使用类似过程来估计y方向上阿尔法值的梯度,然后能够使用这两个梯度来估计沿着屏幕上任意线的阿尔法值的变化。
[0099] 通常,根据需要,能够使用用于使用已知阿尔法值以及阿尔法值的差等等来得到阿尔法值的任何合适的过程。
[0100] 为与片段(正被用于渲染)相对应的每个被覆盖的采样点生成单独的阿尔法值。在优选的实施例中,仅仅为被发现由基元覆盖的一个或多个采样点生成阿尔法值,不过,仅仅为与片段相对应的采样点集合中的所有采样点生成阿尔法值而不考虑它们是否被所讨论的基元所覆盖是可能的。
[0101] 为每个采样点生成的阿尔法值被用于执行针对每个采样点的阿尔法测试。可以用任何期望并且合适的方式来执行该阿尔法测试,并且该阿尔法测试可以优选地包括,如现有技术中公知的,把为采样点生成的单独阿尔法值与为所讨论的采样点的阿尔法测试定义的(例如,优选预定的)相应参考或临界阿尔法值进行比较。如果希望,还可以使用比简单的临界值比较更为复杂的测试。
[0102] 用于阿尔法测试的参考或临界阿尔法值可以包括任何合适的或期望的此类值,并且可以用任何合适且期望的方式来得到或定义所述参考或临界阿尔法值。例如,可能存在为作为整体显示的场景或部分场景定义的固定的、静态的临界阿尔法值。可替换地,在某些方面,参考或临界阿尔法值可以是动态或变化的,例如,根据其在场景中的位置(x,y位置),或根据某些其他参数或因素。
[0103] 通常,将存在为所讨论的采样点的特定阿尔法测试定义的(例如,在使用中预定或得到的)特定阿尔法值,而该临界或参考阿尔法值可以与用于同一片段的其他采样点和/或其他片段的采样点的参考阿尔法值相同或不同,例如,取决于就场景整体而言是否存在单个固定的参考阿尔法值,或者阿尔法值在场景范围内是否有所改变。
[0104] 能够根据需要使用每个单独采样点的阿尔法测试比较的结果。在一个特别优选的实施例中,它们被用于确定是否丢弃(或不丢弃)所讨论的采样位置,如现有技术中所公知的。实际上,如果阿尔法测试比较指示应当保留采样位置,则为采样位置(例如,片段数据阵列中的采样位置)保留片段的颜色值等等(将颜色值等写到该采样位置)(即,允许可能影响该采样位置的最终颜色),而如果阿尔法测试比较指示应当丢弃采样位置,则不为所讨论的采样位置保留片段的颜色值等等(不将颜色值等写到该采样位置)。
[0105] 应当理解的是,在这些方案中,可能需要存在某种机制来表示或记录作为阿尔法测试的结果是否已经丢弃了给定采样位置。这能够以任何期望且合适的方式来完成。
[0106] 然而,在特别优选的实施例中,每个图形片段将其与以下数据相关联,所述数据表示片段被用于渲染与片段相对应的采样点集合中的哪些采样点(即,与片段相对应的采样点集合中的采样点,应当(预期)为其在输出片段数据阵列中存储渲染的片段数据)。系统然后优选地操作来根据情况(针对所指示的选定采样位置,而不是与片段相关联的剩余采样位置)在片段数据阵列中存储渲染的片段数据。
[0107] 在该方案中,例如,指示片段正被用于渲染哪些采样点的该数据,优选地最初基于并对应于被发现由所讨论的基元覆盖的采样位置。然而,阿尔法测试结果然后优选地被用于修改该数据,以便指示作为阿尔法测试的结果而将被丢弃的采样位置。
[0108] 指示片段正被用于渲染哪些采样点的信息优选地与经过渲染器(renderer)的片段的片段数据或其部分相关联(如片段的RGB和阿尔法值)。优选地采用覆盖掩码(mask)的形式,其指示对于与片段相关联的采样位置集合的每个采样位置,片段是否正被用于渲染该采样点(即,是否应当(预期)为该采样点存储片段的数据)。所述掩码然后能够优选地被修改为每个采样点的阿尔法测试的结果。
[0109] 已经发现该方案是将给定片段与适当的采样点进行关联的特别便利的方式,并且使本发明的操作更容易。
[0110] 虽然如上所述,在一个优选的实施例中,本发明的阿尔法测试被用于保留或丢弃与片段关联的采样位置,但是阿尔法测试结果的其他方案和使用也是可能的。
[0111] 例如,在优选的实施例中,单独采样位置上的阿尔法测试还用于或者作为代替被用于确定或估计阿尔法测试引入的边缘是否经过所讨论的片段。
[0112] 这可以通过,例如,确定片段的一些采样位置是否“通过”阿尔法测试比较(例如,超过参考阿尔法值)而片段的其他采样位置“没有通过”阿尔法测试(例如,小于参考值)来实现。这然后将指示阿尔法测试引入的边缘可能或者将要经过片段。
[0113] 还可以使用或者作为代替使用其他边缘测试方案,如用于计算边缘在何处的基于几何的测试。通常,如果希望,还可以使用或者作为代替使用用于此目的的与常规光栅化中进行的测试相似的任何线功能测试。
[0114] 因此,在优选的实施例中,采用本发明的方式的阿尔法测试被用于评估阿尔法测试引入的边缘是否可以经过片段。
[0115] 在这些方案中,如果发现阿尔法测试引入的边缘可以经过片段,则在特别优选的实施例中,再次渲染(重新发布(reissue)用于渲染)所讨论的片段,但是采用完全超级采样方式。这可以通过,例如,循环回到渲染过程(流水线)中较早的点并且将片段分成多个片段(多个拷贝)来实现,其中每个片段表示单个子采样(采样点)。
[0116] 然后,这将使得阿尔法测试边缘是反锯齿的(通过对其进行“超级采样”),而不需要以超级采样方式处理整个场景或基元(这是由于仅以超级采样方式处理处于落在阿尔法测试边缘的风险的那些片段)。
[0117] 实际上,应该相信,在其自己的权利范围内,本发明定义的这样的方案和其他方案可以是新的并且有利的。
[0118] 因此,根据本发明的第五方面,提供了一种处理待显示的图像的图形基元的方法,该方法包括:
[0119] 生成一组图形片段以用于渲染供显示的基元;
[0120] 渲染为基元生成的图形片段,以确定用于每个渲染的图形片段的渲染片段数据集;以及
[0121] 作为渲染过程的一部分,执行针对一个或多个片段的阿尔法测试;其中:
[0122] 通过以下步骤执行阿尔法测试:
[0123] 为所讨论的一个或多个片段的一个或多个采样点生成单独阿尔法值;以及[0124] 使用为采样点生成的单独阿尔法值来单独地执行对采样点或每个采样点的阿尔法测试。
[0125] 根据本发明的第六方面,提供了一种用于处理待显示的图像的图形基元的系统,该系统包括:
[0126] 用于生成一组图形片段以用于渲染供显示的基元的装置;
[0127] 用于渲染为基元生成的图形片段以确定用于每个渲染的图形片段的渲染片段数据集的装置;以及
[0128] 用于作为渲染过程的一部分而执行针对一个或多个片段的阿尔法测试的装置;其中:
[0129] 用于执行阿尔法测试的装置包括:
[0130] 用于为所讨论的一个或多个片段的一个或多个采样点生成单独阿尔法值的装置;以及
[0131] 用于使用为采样点生成的单独阿尔法值来单独地执行对采样点或每个采样点的阿尔法测试的装置。
[0132] 根据本发明的第七方面,提供了一种在图形渲染系统中执行阿尔法测试的方法,其中待渲染的图形片段最初均把它们与将被用于片段的单个阿尔法值相关联,该方法包括通过以下步骤执行对一个或多个片段的阿尔法测试:
[0133] 为所讨论的一个或多个片段的一个或多个采样点生成单独阿尔法值;以及[0134] 使用为采样点生成的单独阿尔法值来单独地执行对采样点或每个采样点的阿尔法测试。
[0135] 根据本发明的第八方面,提供了一种用于在图形渲染系统中执行阿尔法测试的系统,其中待渲染的图形片段最初均把它们与将被用于片段的单个阿尔法值相关联,该系统包括:
[0136] 用于为将要经历阿尔法测试的片段或片段组的一个或多个采样点生成单独阿尔法值的装置;以及
[0137] 用于使用为采样点生成的单独阿尔法值来单独地执行对采样点或每个采样点的阿尔法测试。
[0138] 正如本领域内的技术人员将会理解的,根据情况,本发明的这些方面和实施例能够优选地包括这里所描述的本发明的任意一个或多个或所有优选和任选的特征。因此,例如,优选地为所讨论的一个或多个片段的多个采样点中的每一个生成单独阿尔法值。同样,优选地采用上述方式来估计为采样点生成的单独阿尔法值(例如,至少部分地使用为一个或多个片段最初定义或向其分配的一个或多个阿尔法值而生成的)。
[0139] 同样,优选的是,为其生成单独阿尔法值的采样点对应于用于在光栅化阶段确定基元的覆盖范围的采样点。然而,在这些方案中使用(例如,如下所述的,用于测试阿尔法测试边缘的存在)的采样点不必与在光栅化期间用于测试待渲染的基元的覆盖(与否)的采样点相对应。
[0140] 例如,在这些方案中可以优选地生成一个或每个片段的角(即,一个或多个片段的一个或多个角处的采样点)处的阿尔法值(例如,为了确定阿尔法测试边缘是否会经过片段)。对于某些应用而言,取片段的角处的阿尔法值实际上可以是更可靠的测试。
[0141] 同样,采样点(例如,针对阿尔法测试边缘的存在的测试)不需要单独地与片段相关(被携带),但是,例如,可以评估多个片段的组或块,例如,以查看阿尔法测试边缘是否会经过片段块(其中该块中的所有片段然后被重新发布,从而以超级采样方式(或不采用该方式)进行处理)。
[0142] 在这种情况下,在其处生成单独阿尔法值的采样位置可以,例如,优选地对应于作为整体的片段块或组的多个采样点(例如,优选地对应于块的角),但是,例如,对于块中的一个或任意给定的单独片段,可能只有一个(或者实际上没有)采样点。同时,这样的方案可能特别适合于用于渲染片段块的渲染系统,如2×2片段块。
[0143] 在本发明的这些实施例和方面中,为了任何期望和合适的目的,能够使用阿尔法值比较(阿尔法测试)。
[0144] 在特别优选的实施例中,如上所述,比较结果被用于评估阿尔法测试引入的边缘是否可能经过所讨论的一个或多个片段。这优选地通过评估某些但不是所有采样点是否通过了阿尔法测试来实现(如上所述,因为如果某些采样点通过(将被保留)但是某些没有通过(将被丢弃),则表明阿尔法测试边缘会被引入)。如上所述,最优选地,在此基础上被发现包括阿尔法测试边缘的任何片段或片段组被重新发布以用于以完全超级采样方式进行渲染。
[0145] 阿尔法测试方案的这些方面和实施例也可以用于或作为代替用于其他目的。例如,如上所述,根据阿尔法测试的结果(比较),它们可以被用于保留或丢弃片段或片段组。
[0146] 虽然上面已经特别参考图形渲染中阿尔法测试的性能描述了本发明,但是申请人认识到本发明的原理和技术也可以应用于其他情况和参数,并且不仅仅是阿尔法值,例如,优选地,其中没有为特定采样点或位置最初定义一个或多个特定参数或属性的值,和/或其中定义的值涉及例如给定片段,数量小于被认为与片段有关的采样点的数量。
[0147] 这可能尤其是以下情况,例如,其中执行针对采样点的保留或丢弃测试,诸如在图形处理中的阿尔法测试的情况,并且为渲染最初定义的图形数据(例如,片段属性)没有给出将在所讨论的特定采样点处测试的一个或多个相关参数的准确值。
[0148] 例如,可以在片段着色器中执行有关例如片段的采样点的浓度或模板值的保留或丢弃测试,但是仅仅存在为片段最初定义的单个浓度或模板值。在这种情况下,可以采用与上述用于得到阿尔法值的类似方式来得到浓度和/或模板值,然后采用与以上针对阿尔法测试所论述的类似方式在每个采样点处更准确地执行浓度或模板测试(并且采用“反锯齿”方式)。
[0149] 因此相信,本发明能够不仅仅被应用于图形渲染系统中的阿尔法测试。
[0150] 因此,根据本发明的另一方面,提供了一种在图形渲染系统中执行参数测试的方法,该方法包括通过以下步骤执行对一个或多个片段的参数测试:
[0151] 为所讨论的一个或多个片段的一个或多个采样点生成单独参数值;以及[0152] 使用为采样点生成的单独参数值来单独地执行对每个采样点的参数测试。
[0153] 根据本发明的另一方面,提供了一种用于在图形渲染系统中执行参数测试的设备,该设备包括:
[0154] 用于为一个或多个片段的一个或多个采样点生成单独参数值的装置;以及[0155] 用于使用为采样点生成的单独参数值来单独地执行对每个采样点的参数测试的装置。
[0156] 同样,根据本发明的又一方面,提供了一种处理待显示的图像的图形基元的方法,该方法包括:
[0157] 生成一组图形片段以用于渲染供显示的基元;
[0158] 渲染为基元生成的图形片段,以确定用于每个渲染的图形片段的渲染片段数据集;
[0159] 在渲染过程期间,为一个或多个片段的一个或多个采样点生成单独参数值;以及[0160] 把为采样点生成的单独参数值用于与采样点有关的后续处理。
[0161] 根据本发明的又一方面,提供了一种用于处理待显示的图像的图形基元的图形处理系统,该系统包括:
[0162] 用于生成一组图形片段以用于渲染供显示的基元的装置;
[0163] 用于渲染为基元生成的图形片段以确定用于每个渲染的图形片段的渲染片段数据集的装置;
[0164] 用于在渲染过程期间为一个或多个片段的一个或多个采样点生成单独参数值的装置;以及
[0165] 用于把为采样点生成的单独参数值用于与采样点有关的后续处理的装置。
[0166] 正如本领域内的技术人员将会理解的是,本发明的这些方面能够并且优选地包括这里所描述的本发明的任何一个或多个或所有优选的和可选的特征。因此,例如,所讨论的特定参数和测试优选地是阿尔法、浓度和/或模板值以及针对一个或多个片段的测试和一个或多个采样点处的测试。同样,所讨论的参数测试优选地被用于确定是否保留或丢弃所讨论的采样点。
[0167] 同样,针对单独采样点处的所得到参数值的测试优选地包括,将单独参数值或为采样点单独生成的值与一个或多个相应参考参数值进行比较。
[0168] 如果希望,在这些方案中,得到(并测试)每个采样点处的多于一个参数或属性的值也是可能的,如得到浓度和模板值,例如,然后执行针对这两个参数(属性)等等的比较测试。
[0169] 同样,优选地为所讨论的一个或多个片段的多个采样点和/或覆盖的采样点中的每一个生成单独参数值。同样,优选地采用上述方式来估计为采样点生成的单独参数值(并且,例如优选地至少部分地使用为所讨论的片段和/或多个片段初始定义的或者向其分配的一个或多个参数值来生成)。
[0170] 同样,优选的是,为其生成单独参数值的采样点对应于在光栅化阶段用于确定基元的覆盖范围的采样点(不过这不是必需的)。
[0171] 通常,例如,本发明的这些方面和实施例可以应用于可能不具有基元范围内的已知分布函数的任何片段属性(例如,图形程序员能够利用纹理等对其进行任意操作),由于在该情况下,图形处理系统可能最初不能得到每个采样点处的参数的准确值。同样,本发明可以被应用于以下任意情况,其中在采样点处希望或需要给定参数或属性的值,但是该采样点的值尚未被定义。
[0172] 虽然已经主要参照单个图形基元的处理描述了本发明,如本领域的技术人员将会理解的,待显示的图像通常由多个基元组成,因此实际上本发明的方法将针对组成显示的每个基元而被重复,以使得最后已经为图像的每个采样点生成了一组适当的片段数据,所述采样点是显示整个图像(或例如,基于区块的渲染系统中图像的相关部分)所需的,所述数据然后能够被例如向下采样以供显示。
[0173] 在特别优选的实施例中,在单个图形处理平台上执行本发明的各种功能,该平台生成并且输出被写到显示设备的帧缓冲器的数据。
[0174] 本发明适用于任何形式或配置的渲染器,如具有“流水线”布置的渲染器(在该情况下,渲染器将是渲染流水线的形式)。在优选实施例中,它应用于硬件图形渲染流水线。能够根据需要实现本发明的各种功能和元件等等,例如,优选地通过适当的功能单元、处理逻辑、处理器、微处理器装置等等。
[0175] 本发明适用于所有形式的渲染,如立即模式(immediate mode)渲染、延迟模式渲染、基于区块的渲染等等,不过它特别适用于使用延迟模式渲染的图形渲染器并且特别适用于基于区块的渲染器。
[0176] 如根据上文可以理解的,本发明特别(不过不是排他性地)适用于3D图形处理器以及处理设备,因此扩展到3D图形处理器和3D图形处理平台,其包括根据这里所描述的本发明的任何一个或多个方面的设备,或根据这里描述的本发明的任何一个或多个方面来操作。受制于执行上述的具体功能所需的任何硬件,这样的3D图形处理器能够另外包括3D图形处理器包括的任何一个或多个或所有通常的功能单元,等等。
[0177] 本领域的技术人员还将会理解的是,所描述的本发明的所有方面和实施例都能够并且优选地根据情况包括这里所描述的任何一个或多个或所有优选的和可选的特征。
[0178] 可以使用软件(例如计算机程序)来至少部分地实现根据本发明的方法。因此将会看到,当从进一步的方面考虑时,本发明提供了计算机软件,所述计算机软件在被安装在数据处理装置上时特别适于执行这里所描述的方法;计算机程序单元,包括计算机软件代码部分,所述计算机软件代码部分在所述程序单元在数据处理装置上运行时用于执行这里所描述的方法;和计算机程序,包括代码装置,所述代码装置在所述程序在数据处理系统上运行时,适于执行这里所描述的一个或多个方法的所有步骤。数据处理器可以是微处理器系统,可编程的FPGA(现场可编程门阵列)等等。
[0179] 本发明还扩展到包括这种软件的计算机软件载体,当被用于操作图形处理器、渲染器或包括数据处理装置的微处理器系统时,其与所述数据处理装置一起使得所述处理器、渲染器或系统执行本发明的方法的步骤。这样的计算机软件载体可以是诸如ROM芯片、CD ROM或磁盘之类的物理存储介质,或者可以是诸如通过电线的电子信号、光信号或如到卫星的无线电信号等等之类的信号。
[0180] 进一步将会理解的是,并非本发明的方法的所有步骤都需要通过计算机软件来执行,因此从更广泛的方面考虑,本发明提供了计算机软件,并且这样的软件安装在计算机软件载体上以用于执行这里所描述的方法的至少一个步骤。
[0181] 因此本发明可以被适当具体化为供计算机系统使用的计算机程序产品。这种实施方式可以包括一系列计算机可读指令,所述指令或者被固定在诸如计算机可读介质的有形介质上(例如,磁盘、CD-ROM、ROM或硬盘),或者能够通过包括但不限于光学或类似通信线路的有形介质,或通过使用包括但不限于微波、红外的无线技术或其他传送技术而无形地,经由调制解调器或其他接口设备传送到计算机系统。该一系列的计算机可读指令包含这里先前描述的所有或部分功能。
[0182] 本领域的技术人员将会理解,能够用多种编程语言来编写这样的计算机可读指令,以供多种计算机体系结构或操作系统使用。此外,可以使用现在或将来的任何存储器技术来存储这样的指令,包括但不限于半导体、磁、或光学,或者使用现在或将来的任何通信技术来传送这样的指令,包括但不限于光学、红外或微波。可以预期,这样的计算机程序产品可以被作为可拆装介质来分发(其中所附的打印或电子文件,例如,收缩包软件通过利用计算机系统被预装在例如系统ROM或固定磁盘上),或者通过网络(例如,因特网或万维网)而从被服务器或电子公告板分发。

附图说明

[0183] 将参照附图仅通过举例来描述本发明的多个优选实施例,其中:
[0184] 图1示意性地示出锯齿的影响;
[0185] 图2示意性地示出超级采样反锯齿技术;
[0186] 图3示意性地示出待显示的图像;
[0187] 图4示出了在本发明的实施例中使用的典型采样模式;
[0188] 图5示出了能够根据本发明操作的图形处理平台的实施例;
[0189] 图6示出了图3的像素的放大视图;
[0190] 图7图示了与本发明的实施例中待渲染的片段相关联的数据;
[0191] 图8和11示意性地示出根据本发明的阿尔法测试方案的实施例;以及[0192] 图9和10示意性地示出与片段相关联并且作为本发明的所描述实施例中的阿尔法测试结果而被修改的数据。

具体实施方式

[0193] 现在将在处理供显示的3D图形的背景中描述本发明的优选实施例。然而,如本领域的技术人员将会理解的,本发明并不限于处理3D图形,而是还具有其他应用。
[0194] 如现有技术中所公知的,并且如上所述,当将要显示3D图形图像时,通常首先将它定义为一系列基元(多边形),所述基元然后被划分(光栅化)成图形片段以用于依次进行图形渲染。在一般的3D图形渲染操作期间,渲染器将修改(例如)与每个片段相关联的颜色(红色、绿色和蓝色,RGB)和透明度(阿尔法)数据,以使得能够正确地显示片段。一旦片段已经完全通过渲染器,则它们的相关联数据值被存储在存储器中,准备好输出以供显示。
[0195] 当显示图形图像时,本发明特别涉及使反锯齿操作容易进行。如现有技术中所公知的,通过取待显示的图像的多个采样来执行反锯齿,然后将那些采样直向下采样到显示器的输出分辨率。
[0196] 图3示意性地示出在当前实施例中使用的基本反锯齿方案。图3示意性地示出当前实施例中表示待显示的一部分图像的像素30的阵列(因为,如下面将进一步讨论的,本发明是基于区块的渲染系统)(不过同样可以认为像素的集合表示图像的完整显示)。如图3中所示,每个像素包括一组四个采样点31,所述采样点用于采样所讨论的像素的图像并且从而确定将在最终显示器上如何显示像素。
[0197] 如图3中所示,相同的采样模式31被用于像素阵列30中的每个像素。在该实施例中,采样模式是旋转网格线采样模式,不过如果希望,可以使用任何其他适当的反锯齿采样模式。图4示出了单个像素的展开图,其示出像素内采样模式中采样点的位置。
[0198] 图3也以单个基元32的形式示出了像素阵列30上叠加的图像。(这里应该理解的是,为简单起见图3中已经示出的图像包括单个基元,并且实际上该图像可以并通常将包括许多重叠的基元,如现有技术中所公知的。)正如能够从图3中看到的,基元32完全叠加在像素阵列30中的一些像素上面,但是只经过了某些其他像素的一部分。
[0199] 为了处理图像的基元32,渲染系统实质上将确定在光栅化阶段每个像素的每个采样点集合中的哪些采样点被基元32覆盖,然后渲染并存储那些被覆盖采样点的数据,以使得能够在显示设备上适当地显示基元32的图像。
[0200] 现在将参照图5来描述当前实施例中采用这种方法显示基元32的图像的处理,图5示意性地示出能够根据本发明操作的3D图形处理平台的实施例。图5中所示的3D图形处理平台是基于区块的渲染器,不过如本领域的技术人员将会理解的,能够使用其他渲染方案(实际上,本发明也同样适用于二维图形处理)。
[0201] 图5中所示的图形处理平台包括光栅器50,该光栅器接收用于渲染的图形基元并且将基元数据转换成具有用于渲染基元的适当位置的图形片段。
[0202] 然后存在渲染流水线形式的渲染器51,该渲染器从光栅器50接收用于渲染的图形片段并且对那些图形片段应用多个渲染操作,例如纹理映射、雾化、混合等等,以便生成用于显示片段的适当片段数据。来自渲染器51的渲染片段数据被存储到渲染流水线的区块缓冲器52中以用于后续处理。
[0203] 如现有技术中所公知的,区块缓冲器52存储表示待显示的图像部分的片段数据的阵列。一旦已经处理了每个区块,它的数据就被输出到适当的存储器,然后处理下一个区块,等等,直到已经处理了足够的区块来显示整个图像为止。
[0204] 在当前的实施例中,提供了四个区块缓冲器52。每个区块缓冲器在32×32阵列中存储其片段数据(即,对应于待显示的图像中32×32阵列的采样位置)。这些区块缓冲器可以被提供为单独的缓冲器,或者可以实际上都是同一个大缓冲器的一部分。它们位于图形处理平台(芯片)上(在本地)。
[0205] 来自区块缓冲器52的数据被输入到向下采样单元53,并由此输出到显示设备55的帧缓冲器54(其可以不在图形处理平台本身上)以用于在显示设备55上显示,如现有技术中所公知的。显示设备55可以包括,例如包括像素阵列的显示器,如计算机监视器。
[0206] 向下采样单元53将区块缓冲器中存储的片段数据向下采样到显示设备55的适当分辨率(即,以使得生成与显示设备的像素相对应的像素数据阵列)。
[0207] 在当前的实施例中,图像的采样点在区块缓冲器32中具有它们自己的单独片段数据项。因此,每个32×32数据位置区块缓冲器将,例如,对应于待显示的图像中的16×16像素阵列,在区块缓冲器与显示帧缓冲器之间使用4x向下采样(因为在那种情况下,每个像素将有效地具有与它相关联的四个采样点)。
[0208] 在该实施例中,四个区块缓冲器的两个被用于存储每个采样点的颜色(红色、绿色、蓝色)值(为此目的使用一个区块缓冲器是可能的,但是两个是优选的),一个区块缓冲器被用于存储每个采样点的Z(浓度)值,而一个区块缓冲器被用于存储每个采样点的模板值。当然,其他方案也是可能的。
[0209] 虽然每个采样点在区块缓冲器52中具有它们自己的单独片段数据项,在当前的实施例中,不是为区块缓冲器52中的每个单独采样(数据)位置渲染单独的片段(即,为每个单独的采样点),而是为与图像中给定像素相对应的四个采样点的每个集合渲染一个片段。换句话说,单个片段被用于一次渲染(并且从而图像中的像素的)一组采样点中的所有四个采样点,即,以使得给定像素的采样点被共同渲染。然后,一旦已经渲染了片段,被渲染的片段数据就以多个拷贝的形式被存储到区块缓冲器52中的适当的采样位置,以便为所获得的图像的每个单独的采样位置提供单独的片段数据集。
[0210] 因此,在当前的例子中,考虑包括图3中所示的基元32的图像,光栅器50将从图形处理系统中接收该基元,然后确定图像的哪些采样点集合(即,实际上,哪些像素在像素阵列30中)包括由基元32覆盖的采样点。(这可以采用现有技术中公知的任何适当的方式来执行。)然后,光栅器50为被发现包括由基元32所覆盖的采样点的每个采样点集合生成片段。然后将这些片段传送到渲染器51以用于渲染。
[0211] 图7示意性地示出了在每个片段被渲染之前为其生成的并且经过渲染器51的数据70。如图7中所示,与每个片段相关联的数据特别包括片段的x,y位置71(它表示与片段相对应的采样点集合的图像中的x,y位置(实际上在图像中的相关像素的当前实施例中)),连同所必要的每片段数据72,如片段的颜色(RGB)、透明度(阿尔法)、浓度(z)以及模板值。如现有技术中所公知的,该每片段数据72由渲染器51的渲染单元使用并且进行适当修改,以便为片段提供片段数据的输出集合,然后将其存储在区块缓冲器52中。
[0212] 与片段相关联的数据70还包括覆盖掩码73,该掩码采用位阵列的形式,表示与片段相对应的采样点集合内每个采样位置。在光栅化阶段,如果发现对应的采样位置由所讨论的基元覆盖,则位阵列覆盖掩码73中每个位置被设置为“1”,而如果采样位置不由所讨论的基元覆盖,则被设置为“0”。这就使得渲染过程知道与给定片段相关联的哪些采样点实际上被所讨论的基元32覆盖,以使得渲染过程能够确保片段的片段渲染数据只被用于(例如,存储)由基元覆盖的采样点。
[0213] 因为,如能够从图3看到的,并非像素的一组采样点的所有采样点都必定由基元覆盖。例如,如图6中所示,图6示出了图3中涉及待渲染的基元32的像素33的采样点集合的放大视图,能够看到像素33的采样点集合、采样点43和44被基元32覆盖,但是采样点45和46没有被基元覆盖。因此,光栅器50将为像素33的采样位置集合生成用于渲染的片段,这是因为该采样位置集合包括被基元32覆盖的两个采样位置43,44。然而,因为基元32只覆盖采样位置43,44,所以只针对那些采样位置(而不针对采样位置45和46),将渲染的片段数据存储在区块缓冲器52中。
[0214] 因此,对于图6中所示的像素33的采样位置集合,光栅器将生成“1100”形式的覆盖掩码73(如图7中所示的),用于指示片段70正在渲染采样位置43和44,但是片段不渲染采样位置45和46(由于它们没有被基元32覆盖)。
[0215] 因此,当光栅器50接收用于渲染的基元32时,它将首先确定阵列30的哪些采样点(像素)集合包括被基元32覆盖的采样点,并且为那些采样点集合中的每个集合生成具有与图7中所示形式的数据相关联的片段。
[0216] 然后每个片段将依次被传到渲染器51以用于渲染。在当前的实施例中,片段被发送到渲染器51以用于在2×2片段的块中渲染,即,以使得渲染引擎有效地处理4个片段(像素)块中2个像素宽度乘以2个像素高度的片段(像素)。当然,其他方案也是可能的,例如在渲染器中逐一地处理片段(像素)。
[0217] 如现有技术中所公知的,渲染器51将对它接收到的片段执行渲染操作。例如,这些渲染操作将包括修改片段的颜色(RGB)和透明度(A)值,以便为每个片段提供最终的、渲染的片段数据。在当前实施例中,渲染器51包括根据与每个片段相关联的纹理位置数据(s,t)(这在图7中没有被示出)执行纹理映射过程的纹理映射阶段。
[0218] 在当前实施例中,根据正用片段共同渲染的被覆盖的采样点的图像中的区位(位置)来选择纹理映射过程确定将被应用于片段的纹理(颜色)所需的图像中的位置,即,使用“加权的”纹理采样位置。
[0219] 当然,其他纹理采样位置方案也是可能的。例如,可以在所讨论的采样图案的中心处简单采取全部纹理查找。
[0220] 这里应当理解的是,因为每个片段经历了一次纹理查找,所以与每个片段相对应的采样点集合经历了一次共同的纹理查找(即,纹理操作被用于与片段相关联的采样点集合的所有采样点),即,采用多次采样方式来有效地处理采样点集合。
[0221] 当前实施例的渲染过程的另一部分是,执行针对正被渲染的每个片段的阿尔法测试。如现有技术中所公知的,阿尔法测试通常包括将为片段定义的阿尔法值与为阿尔法测试定义的参考或临界阿尔法值进行比较,然后根据比较结果来保留或丢弃片段。
[0222] 在当前实施例中,根据本发明修改阿尔法测试过程,以便提供,如这里所述的,“反锯齿”阿尔法测试过程,然而实际上每个片段可能最初仅具有为它定义的单个阿尔法值,如上所述。
[0223] 图8、9、10和11图示了当前实施例的阿尔法测试过程。
[0224] 图8示意性地示出了与图3的像素80、81、82和83相对应的像素80、81、82、83的2×2块。图8中的线84和85对应于基元84,85的边缘,如图3中所说明的。图8还示出了像素80、81、82和83中每一个的相应的采样点。图8中还表示出了每个片段的中心点
87、88、89、90。
[0225] 如上所述,在最初的光栅化阶段,对照像素80、81、82和83中的每一个来测试基元的几何边缘84、85,以便确定每个像素的哪些采样点被基元覆盖。然后生成一组片段,每个片段对应于显示器中的给定像素,并且为像素定义适当的数据并且还为各像素指示哪些采样位置被基元覆盖。
[0226] 因此,在当前情况下,如图9中示意性地示出的,在光栅化阶段,为像素80、81、82和83的2×2块生成一组片段80、81、82和83。
[0227] 如图9中所示,片段80的覆盖掩码73示出了被基元覆盖的与片段80相对应的像素的两个采样位置,片段81的覆盖掩码73示出了被覆盖的该像素的三个采样位置,等等。
[0228] 同样如图9中所示,每个相应片段80、81、82和83具有为它最初定义的单个透明度(阿尔法)值。在当前的实施例中,从为基元的顶点定义的阿尔法值得到该值,但是能够以现有技术中公知的任何适当的方式来实现。
[0229] 在当前的例子中,假设片段80的透明度(阿尔法)值是0.3,片段81的是1.0,片段82的是0.0而片段83的是0.3。当然,这些值仅仅是说明性的。
[0230] 在通常的过程中,如上所述,为了比较的目的,将使用为每个片段定义的这些阿尔法值与为阿尔法测试定义的参考阿尔法值进行比较,以便根据阿尔法测试的结果整个保留或丢弃片段(以及因此,与片段相对应的像素)。
[0231] 然而,在当前的实施例中,根据本发明,当执行阿尔法测试时,不是仅仅采用为每个片段最初定义的阿尔法值来执行阿尔法测试,而是针对所讨论的片段正被用于渲染的每个被覆盖的采样位置生成单独阿尔法值。然后,执行针对单独采样位置的阿尔法测试。
[0232] 将针对片段80的采样点86的阿尔法值的得到来说明该过程。针对所讨论的片段的由基元覆盖的每个单独采样点应用相同的过程。
[0233] 为了为片段80的采样点86生成单独阿尔法值,首先取为片段80最初定义的单个阿尔法值0.3作为片段80的中心87处的阿尔法值。
[0234] 然后,估计采样点86与片段80的中心87处的阿尔法值之间的差。这通过估计阿尔法值相对于屏幕X,Y位置的斜率(导数)(然后,使用采样点86与片段80的中心87之间已知的相对屏幕X,Y距离,所述斜率能够被用于得到从中心87到采样点86阿尔法值的相对变化)来实现。
[0235] 在当前实施例中,通过以下步骤确定阿尔法值相对于位置的斜率(变化率),通过确定片段80的中心87处的阿尔法值与片段81的中心88处的阿尔法值之间的差(其被用作为片段81定义的阿尔法值1.0)以及中心87和88之间X方向上的已知屏幕距离,来得到X方向上阿尔法值的斜率。
[0236] 同样,通过识别片段80的中心87处的阿尔法值与片段82的中心89处的阿尔法值之间的差(其被用作为片段82定义的阿尔法值0.0),以及片段中心之间的Y距离,来确定片段80在Y方向上阿尔法值的斜率(变化率)。
[0237] 然后,这些生成的X和Y导数(变化率)乘以片段80的中心87与采样点86之间的屏幕空间X和Y距离,以便给出从中心87到采样位置86的阿尔法值变化。然后,该估计的阿尔法值的变化加上片段80的中心点87的阿尔法值(即,当前实施例中为片段80最初定义的阿尔法值),从而得到采样位置86的“真正”阿尔法值的估计。
[0238] 然后,为片段80的每个剩余的覆盖采样位置重复这个过程,并且同样为其他片段的覆盖采样位置重复这个过程(虽然,在这种情况下,使用为片段分别最初定义的阿尔法值作为其他片段中心点处的阿尔法值:因此,例如,在片段81的情况下,片段中心88的阿尔法值被用作为片段81最初定义的阿尔法值1.0)。
[0239] 图11进一步图示了阿尔法值的得到过程。如图11中所示,对于给定的片段100具有采样位置101、102、103、104,为片段最初定义的阿尔法值105被用作片段中心106处的阿尔法值,得到x和y方向上片段的梯度(德尔塔Δ)107、108,然后将其与中心点的阿尔法值105一起使用以给出每个相应采样点的阿尔法值。
[0240] 如果希望,可以使用其他方案来得到并估计每个被覆盖采样位置的阿尔法值。
[0241] 例如,当估计阿尔法值时,可以采用类似的方式为每个片段单独地生成一组新的梯度(变化率)值,而不是使用为片段80、为2×2的片段块的每个其他片段81、82和83得到的X和Y方向上的梯度(变化率)。
[0242] 因此,例如,在片段81的情况下,可以通过考虑片段80的中心87和片段81的中心88处的阿尔法值来得到X梯度,并且可以通过考虑片段81的中心88和片段83的中心90处的阿尔法值来得到Y梯度。
[0243] 例如,使用片段81的中心88和片段83的中心90处的阿尔法值来得到片段80等等的Y梯度也是可能的。同样,如果希望,可以使用比图8中所示的那些相隔更远的片段的阿尔法值来得到阿尔法梯度。
[0244] 通常,可以使用任何合适的和期望的技术来得到阿尔法值相对于屏幕空间X和Y距离的的梯度(变化率)。越复杂的技术可以提供对采样点处的阿尔法值的越准确的估计,但是另一方面会需要更大的处理工作量。
[0245] 然后,为每个采样位置估计的单独阿尔法值被用于阿尔法测试比较,即,它们与为阿尔法测试定义的临界阿尔法值相比较。因此,例如,在采样位置86的情况下,为该采样位置估计的阿尔法值然后与为阿尔法测试定义的参考阿尔法值进行比较。然后分别针对每个被覆盖的采样位置重复该过程。
[0246] 然后,单独采样点的阿尔法测试比较的结果被用于根据阿尔法测试比较来保留采样位置或从进一步的处理中丢弃采样位置。这通过修改与所讨论的片段相关联的覆盖掩码73来实现,以便排除作为阿尔法测试的结果而实际上发现将被丢弃的任何被覆盖的采样点。
[0247] 图10中图示了该过程,图10示出了执行阿尔法测试之后图9中所示的片段80、81、82和83的结果片段数据集,在当前的例子中,假设阿尔法测试比较产生一条线(实际上是阿尔法测试引入的边缘)91,其上是作为阿尔法测试的结果而将被丢弃的采样点,但是其下是被保留的采样点。
[0248] 如图9中所示,该阿尔法测试以及产生阿尔法测试引入的边缘91的阿尔法临界值的结果是:通过将该采样位置的覆盖掩码位从“1”变为“0”,来修改片段80的覆盖掩码,以便表示从进一步的处理中排除采样点86(即,没有通过阿尔法测试)。同样,关于片段81,该片段的覆盖掩码现在被设置成“0000”,这是因为阿尔法测试已经丢弃了基元覆盖的片段的所有采样位置。在片段83的情况下,阿尔法测试丢弃两个采样位置,因此该片段的覆盖掩码变为“1001”。
[0249] 采用这种方式,执行针对每个相应覆盖的采样位置的单独阿尔法测试,尽管实际上仅仅为作为整体的像素的四个采样位置的集合定义了单个初始阿尔法值,然后能够根据单独的阿尔法测试的结果来保留或丢弃采样位置。于是其效果是,阿尔法测试引入的任何边缘实际上是“反锯齿的”(因为在采样位置的层面根据它们的位置对它们进行了处理)。
[0250] 一旦已经渲染了片段,它们的数据需要被适当地存储在区块缓冲器52中。根据当前的实施例,每个渲染片段的数据被存储在区块缓冲器阵列中的适当采样位置(一个或多个),由与每个片段相关联的覆盖掩码73来表示。因此,在图7中所例示的片段70的情况下,例如,该片段的渲染数据将被存储在区块缓冲器52中与片段70相关联的两个采样位置,而不是其他两个采样位置。
[0251] 区块缓冲器52中存储的片段数据包括每个采样位置的颜色(RGB)、透明度(A)、浓度(Z)和模板值,如上所述。该数据能够以任何适当的形式来存储。
[0252] 如本领域的技术人员将会理解的是,将要存储在区块缓冲器的新渲染的片段数据可能并且通常需要与区块缓冲器中已经存储的数据混合,如现有技术中所公知的。因此,给定片段正被用于共同渲染多于一个采样位置(即,以使得来自片段的数据将被存储在区块缓冲器中的多个采样位置),然后应当采用适当的方式执行该混合操作以便实现这一点,即,将新渲染片段数据适当地混合到区块缓冲器中的每个适当采样位置中。因此,例如,可以采用适当地“并行”方式执行例如混合操作,以便将渲染片段数据混合到多个并行区块缓冲器中。
[0253] 一旦已经完成了与基元32相关的所有片段的该过程,然后就能够为图像的后续基元重复该过程(因为,如上所述,图像通常将由多个基元组成,而不仅仅是单个基元32)。为图像的所有基元重复该过程,直到区块缓冲器52具有在它们的采样位置的每一个中存储的适当数据。
[0254] 然后,在区块缓冲器中存储的数据能够被输出到向下采样单元53以用于向下采样并且之后输出到帧缓冲器54以供显示,如现有技术中所公知的。可以采用任何适当的方式执行该向下采样。在当前实施例中,数据的线性混合被用于对其进行向下采样。然而,如果希望,其他方案也是可能的。
[0255] 待显示的图像包括多个重叠的基元,如现有技术中所公知的,它对于渲染过程也是必需的,以便确定实际上在给定采样点处是否确实会看到任何给定的基元。在当前实施例中,如现有技术中所公知的,这是通过在片段被渲染时比较片段的浓度(Z)值来实现的。特别地,当新片段将被渲染时,与该片段相关联的浓度(Z)值与已经存储在区块缓冲器52中的与片段相对应的采样位置的片段数据的浓度值相比较,并且如果比较结果指示看不到新片段,则不再进一步处理新片段。另一方面,如果浓度值的比较结果指示实际上将在区块缓冲器52中当前存储片段的位置看到新片段,则新片段被渲染并且它的渲染片段数据被存储在区块缓冲器52中,代替现有的适当采样位置的数据。
[0256] 向下采样单元53还对输出到帧缓冲器54的数据应用适当的伽玛校正。
[0257] 当然,对本发明和当前实施例的其他安排和修改也是可能的。例如,对于阿尔法测试和/或阿尔法值估计,就每个片段或像素而言可以使用多于四个采样位置。
[0258] 在当前实施例中还可以使用估计的阿尔法测试来评估阿尔法测试引入的边缘是否可能经过片段或片段块。例如,在图8所示的方案中,有关片段83的阿尔法测试比较的结果,例如,示出了两个采样位置被保留,但是两个采样位置被丢弃。然后,这将指示阿尔法测试引入的边缘将经过该片段。关于这种类型的测试,还可以执行关于片段的角的测试,而不是例如使用与用于基元的外部几何边缘的光栅化相同的采样位置。
[0259] 在这种方案中,如果发现片段或片段块可能包含阿尔法测试引入的边缘,则在优选的实施例中,基于完全的超级采样,优选地重新发布所讨论的片段或片段块以用于渲染(换句话说,以使得每个采样位置被处理为单独的片段,并且因此获得它自己的单独颜色和阿尔法值,等等)。
[0260] 如能够从上面看到的,至少在本发明的优选实施例中,提供了一种系统,在该系统中,阿尔法测试引入的边缘能够被反锯齿,但是不需要采用完全的超级采样方式来处理待渲染的基元。例如,不像完全的超级采样方法,本发明的方法不需要针对反锯齿阿尔法测试方案的每个像素或片段计算多个颜色值。这意味着,例如,与完全的超级采样系统相比,本发明促进了处理中的计算的减少,并且伴随着节能。
[0261] 至少在本发明的优选实施例中,这是通过以下步骤来实现的:使用为待渲染的每个片段最初定义的单个阿尔法值来为有关待渲染的片段的多个单独采样点重新创建单独阿尔法值,然后单独地执行针对那些单独采样点的阿尔法测试。
[0262] 如上所述,虽然已经特别参照图形处理系统中的阿尔法测试描述了本发明和当前的实施例,本发明同样能够应用到其他场合,其中希望知道特定采样点处的属性或参数值而那些值尚未被定义。因此,例如,它可能特别用于图形处理系统中的浓度和/或模板测试操作,如在片段着色器中。在这些情况下,就所讨论的一个或多个特定参数而言,上述针对阿尔法测试所描述的方法和技术能够类似地被应用。