3d图形处理系统中用于处理图元的不透明度测试的制作方法

文档序号:8513043阅读:403来源:国知局
3d图形处理系统中用于处理图元的不透明度测试的制作方法
【技术领域】
[0001]本发明涉及3D图形处理系统,更具体地,涉及3D图形处理系统中用于处理图元的不透明度测试。
【背景技术】
[0002]三维(3D)图形处理系统被用于生成表示3D场景的视图的图像,例如用于在计算机游戏或者运行在计算机上的其他应用中使用。现代3D渲染(rendering)技术允许来自多个图元的片元以若干不同的方式合并。合并的类型通常由片元的类型指定,片元的类型可以是例如不透明的(opaque)、半透明(translucent)的或者穿透的(punch through)。作为术语,“片元”指在采样位置的图元的元素。在一些示例中,单一的采样位置可以对应于最终渲染的图像的一个像素位置,但在其他示例中,多于一个(例如,四个)采样位置可以对应于每一个像素位置。深度缓存可以用于存储对于采样位置数组的深度值,以表示在每一个采样位置的当前深度。可以参考深度缓存对输入片元执行深度测试以确定片元是否被之前处理的片元隐藏。如果输入片元没有被隐藏,则可以更新深度缓存中的适当的深度值以反映输入片元的深度。通过覆盖任何之前写入的片元而合并不透明的片元。通过使用由应用指示的混合方程式处理半透明的片元,以使得新的半透明的片元值与之前的片元值合并。通常混合方程式使用来自纹理的alpha值以确定片元是多么透明。通过执行指示片元是否是“当前的”(即图元的一部分)的测试来处理穿透的片元。如果片元被确定为不是当前的,则不执行与之前写入的片元的合并,并且此外,对于该片元不向深度缓存写入深度。通常针对来自纹理的alpha值执行穿透测试。穿透/alpha测试可以与不透明度或者半透明度混合合并,以产生不透明的穿透和半透明的穿透的片元类型。在穿透和半透明度的情况下,应当注意,由于每一种情况将新的片元值与之前的值有效地合并,保持图元被提交的顺序是重要的。
[0003]为清楚起见,以上处理的类型将被称为不透明的、半透明的、不透明的穿透以及半透明的穿透的“对象类型”。半透明的以及两种穿透的对象类型在此可以被称为“非不透明的对象类型”。可以理解,具有非不透明的对象类型的图元的处理通常比具有不透明的对象类型的图元的处理复杂。
[0004]一些3D图形处理系统是基于区片(tile)的渲染系统。这些系统具有被划为为多个矩形块或者区片的渲染空间。参考图8中示意性地示出的基于区片的延迟渲染系统来描述在这些系统中执行渲染的方式。图8显示了几何结构处理单元802,该几何处理单元802接收来自应用的图像数据,并使用周知的方法将该图像数据转变到屏幕空间。该数据接下来被提供给分片(tiling)单元804,该分片单元804将屏幕空间几何结构插入用于一组定义的矩形区域或者区片的对象列表806。每一个列表包括完全地或者部分地存在于屏幕(即,区片)的子区域中。对于屏幕上的每一个区片存在一个列表,应当注意尽管一些列表其中可能没有数据。
[0005]区片列表随后被按逐个区片的方式传递给隐藏面消除单元(HSR) 808,并且从那被传递至纹理化和着色单元(TSU)810。HSR单元808在区片中的图元的片元上执行深度测试(参考如上所述的深度缓存),并且仅向TSU 810传递关于通过深度测试的片元的数据。
[0006]图像通常包括不透明的、半透明的以及穿透的图元对象类型的混合。为了正确地渲染这样的图像,HSR单元808必须向TSU 810传递需要被处理的片元的“层”。这是因为多于一个片元可以对将被应用于特定的采样位置的图像数据有所贡献。例如从建筑物内部透过肮脏的玻璃窗的视图需要通过玻璃可见的几何结构,以及继而该玻璃窗本身这两者被传递至TSU 810。该处理被称为“传递播种(pass spawning)”。
[0007]标签是标识符,该标识符将片元和该片元作为其中一部分的图元相关联,并且该标识符允许在需要时获取对于图元的比如纹理化和着色数据的属性。通常,图8中所示的该类型的基于区片的延迟渲染设备将在HSR单元808和TSU 810之间的接口处使用标签缓存,以便保持对于当前正在被处理的区片中对于每一个采样位置的、来自最前端图元(即,通过深度测试的那些图元)的片元的标签。如上所述,通常将对于通过深度测试的不透明的片元的标签写入如下标签缓存中,即使这些标签覆盖对应于合并不透明的片元的正确的操作的现有标签。来自半透明的和穿透的图元的片元可能需要与它们过度绘制(overdraw)的片元合并。这些片元的合并必须按照应用提交它们的顺序执行。正因如此,每当发现半透明的或者穿透的片元位于当前存储于标签缓存内的片元之前,HSR单元808必须将当前可见的标签冲刷(flush)至TSU 810,即必须播种传递。这导致存储于标签缓存中的所有当前可见的标签被冲刷至TSU 810。对于穿透片元的情况,片元的有效性以及因此它们的深度值在深度缓存中是否应当被更新,只能由TSU 810决定。因此,对于穿透图元的标签也必须在当前存储于标签缓存中的任何标签被冲刷之后立即被冲刷。应当注意,标签缓存中的标签和位置的组合定义片元,从而来自标签缓存的标签的冲刷可以被认为是冲刷来自标签缓存的片元。从概念上讲,考虑正被存储于标签缓存中的片元以及被冲刷出以到达纹理化和着色单元的片元是有意义的。在实际实现中,通过在标签缓存中存储标签和冲刷来自标签缓存的标签来体现片元的该概念流程。
[0008]随着用户对于应用的要求和期望增加,应用馈送到图形处理系统之中的图形数据变得更加复杂。特别地,纹理化和着色的复杂性在增加,并且非不透明的对象类型的使用正变得更加普遍。如上所述因为具有非不透明的对象类型的图元的处理比具有不透明的对象类型的图元的处理更复杂,这可能是有问题的。

【发明内容】

[0009]提供本
【发明内容】
用于以简要的形式介绍经选择的概念,在以下详细描述中将进一步描述这些概念。本概要不旨在为确定要求保护的主题的关键特性或者基本特性,也不旨在为用于限制要求保护的主题的范围。
[0010]已经意识到,具有非不透明的对象类型的半透明的和穿透的图元通常包括不需要被当作具有非不透明的类型的片元的一些片元。例如,半透明的或者穿透的图元的一些片元可以是完全不透明的或者完全半透明的。在上述图形处理系统中,半透明的或者穿透的图元的片元的不透明度在应用纹理化之前是未知的,因为它是包括被应用于片元的半透明度信息(例如,alpha值)的纹理。考虑到在上述图形处理系统中传递半透明的或者穿透的片元至TSU之前冲刷重叠的片元的必要性,显然,将存在很多不需要执行冲刷的情况。例如,在过度绘制的片元是完全透明的(并且因此不存在过度绘制)或者完全不透明的地方(并且因此可以在不冲刷的情况下覆盖标签缓存的内容)。
[0011]然而,在此描述的实例中,不透明度测试预先被执行(例如,在纹理化被用于半透明的或者穿透的图元的片元之前)以发现是否能够避免或者简化片元的进一步的处理。例如,如果穿透图元的片元是完全透明的则它们可以被丢弃,并且如果半透明的图元的片元是完全透明的,则可以设置标志以指示该片元将不被传输用于后续的纹理化。例如,如果半透明的图元的片元是完全透明的,则可以设置“标签写禁止”的标签,该标签意味着半透明的图元的标签不被写入标签缓存,并且因此将不导致潜在的(underlying)标签至纹理化和着色单元的冲刷。如另一示例,如果片元是完全不透明的,则可以当作它们具有不透明的对象类型来处理片元,使得它们的标签可以覆盖标签缓存中的当前标签而不导致冲刷。
[0012]提供了一种在3D图形处理系统中处理图元以对于图元应用深度测试和纹理化的方法,其中图元具有非不透明的对象类型,并且其中纹理化包括根据与图元的片元相关联的对象类型对片元进行纹理化,该方法包括:接收将被处理的图元的片元,所接收的图元的片元与所述非不透明的对象类型相关联;在对于所接收的图元的片元应用纹理化之前:
(i)获取不透明度状态图(map),该不透明度状态图提供将被应用于图元的纹理的纹素的不透明度的指示;(ii)对于图元的一个或者多个片元的多个块中的每一个块,通过以下步骤,使用不透明度状态图来确定对于片元块的各自的不透明度状态,通过:(a)基于片元块的一个或者多个片元的纹理坐标,确定对于片元块的不透明度状态图内的不透明度状态的块的位置,以及(b)执行不透明度状态块的不透明度状态的保守组合,来确定对于片元块的不透明度状态;以及(iii)通过执行以下步骤中的一项或者多项,使用对于片元块的确定的不透明度状态来简化图元的片元的处理:(a)基于确定的不透明度状态,指示片元块中的一个或者多个片元块的片元将与不同于所述非不透明的对象类型的对象类型相关联以用于片元的后续的处理,(b)基于确定的不透明度状态丢弃片元块中的一个或者多个块,以及(C)基于确定的不透明度状态,设置一个或者多个标志来指示片元块中的一个或者多个块的片元将不被传输用于后续的纹理化;对于图元的片元应用深度测试;以及继所述简化之后,对于图元的片元根据它们的相关联的对象类型应用纹理化。步骤(i)至(iii)可以在对于图元的片元应用深度测试之前被执行,并且深度测试可以继所述简化之后被应用于图元的片元并且根据它们的相关联的对象类型。
[0013]提供了一种生成用于在3D图形处理系统中处理图元中使用的包括多个不透明度状态的不透明度状态图的方法,其中该不透明度状态图中的不透明度状态中的每一个不透明度状态指示纹理的一个或者多个纹素的纹素块的不透明度,并且其中不透明度状态中的每一个状态指示一个或者多个纹素的对应的纹素块是:(i)完全透明的;(ii)完全不透明的;或者(iii)既不是完全透明的也不是完全不透明的,该方法包括:接收对于纹理的纹素的不透明度值;以保守方式基于接收的不透明度值确定不透明度状态图的不透明度状态以使得:(i)仅当纹理的不透明度值指示纹素块中的一个或者多个纹素的全部纹素为透明时,不透明度状态被确定为指示该一个或者多个纹素的对应的纹素块是完全透明的,以及
(ii)仅当纹理的不透明度值指示纹素块中的一个或者多个纹素的全部纹素为不透明时,不透明度状态被确定为指示该一个或者多个纹素的对应的纹素块是完全不透明的;以及存储该不透明度状态图以便用于在3D图形处理系统中处理图元的方法中的后续的使用;其中以一种方式确定该不透明度状态以使得该不透明度状态图内的不透明度状态的块被用于通过执行该不透明度状态块的不透明度状态的保守组合来对于一个或者多个片元的块确定不透明度状态。
[0014]提供了一种3D图形处理系统,被配置为通过对图元应用深度测试和纹理化来处理图元,其中图元具有非不透明的对象类型,该系统包括:深度测试模块,被配置为对于图元的片元应用深度测试;纹理化模块,被配置为根据与片元相关联的对象类型对于图元的片元应用纹理化;以及不透明度测试模块,被设置为在由纹理化模块对片元的纹理化之前对图元的片元操作,该不透明度测试模块被配置为:(i)获取不透明度状态图,该不透明度状态图提供将被应用于图元的纹理的纹素的不透明度的指示;(ii)对于图元的一个或者多个片元的多个块中的每一个块,使用不透明度状态图来通过如下步骤确定对于片元块的各自的不透明度状态:(a)基于片元块的一个或者多个片元的纹理坐标,确定对于片元块的不透明度状态图内的不透明度状态的块的位置,以及(b)执行不透明度状态块的不透明度状态的保守组合来确定对于片元块的不透明度状态;以及(iii)通过执行以下步骤中的一项或者多项,使用对于片元块的确定的不透明度状态来简化图元的片元的处理:(a)基于确定的不透明度状态,指示片元块
当前第1页1 2 3 4 5 6 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1