图形处理系统的制作方法

文档序号:12142320阅读:127来源:国知局
图形处理系统的制作方法与工艺

在此描述技术涉及图形处理系统,并且特别涉及用于当渲染图像以用于显示时考虑阴影的效果的方法和设备。

当在图形处理系统中渲染图像(诸如输出帧)以用于显示时,通常期望能够考虑被渲染场景中的阴影的效果。因此,已开发各种渲染技术来尝试这样做。

一种这样的技术是所谓的“阴影映射”。在该技术中,导出指示从光源到在每个采样点处投射阴影的对象的深度的“阴影图”(例如,在第一渲染通道中),然后当渲染输出帧时使用该阴影图来确定采样位置是否在阴影中(通过比较阴影图深度与所论述的采样点处的几何结构的深度,来确定几何结构是在阴影投影对象前面还是后面(并且因此是否将在阴影中))。

虽然阴影图可以是用于允许在渲染图像时考虑阴影效果的有效技术,但是对在这些布置中首先准备然后存储并使用阴影图的需要意味着使用阴影图可能变得非常昂贵(例如,在存储器和带宽资源方面),特别是如果存在需要考虑的多个光源。每当光或视点(相机)位置变化(这可能每帧发生)时,还必须重新生成阴影图。

因此,申请人相信仍然存在施展用于在图形处理系统中渲染阴影的改进技术的机会。

附图说明

现在仅通过举例并且参考附图描述在此描述技术的多个实施方式,其中:

图1示意性地示出可以按在此描述技术的方式操作的图形处理流水线;

图2示意性地示出在此描述技术的实施方式的操作;

图3示出在此描述技术的实施方式中使用的示例性纹理;

图4示意性地示出在此描述技术的实施方式中的纹理的生成;以及

图5、图6和图7示出在此描述技术的实施方式的操作。

在附图中,当合适时,类似参考标号被用于类似组件。

具体实施方式

在此描述技术的第一实施方式包括当渲染场景以用于输出时操作图形处理系统的方法,其中,限定表示要渲染的场景的全部或部分的体的包围体,该方法包括以下步骤:

针对包围体上或内的至少一个采样点,通过以下步骤来确定指示由在包围体外部的光源投射在采样点上的阴影量的透明度参数:

确定包围体上与从采样点至光源的矢量相交的位置;

使用相交位置来确定要用于对表示场景中的包围体的表面的透明度的图形纹理进行采样的矢量;以及

使用所确定的矢量对图形纹理进行采样,以确定针对采样点的光源的透明度参数值。

在此描述技术的第二实施方式包括图形处理流水线,该图形处理流水线包括:

多个处理阶段,该多个处理阶段至少包括光栅(rasteriser),该光栅栅格化输入图元,以生成要处理的图形片段,每个图形片段具有与之关联的一个或更多个采样位置;以及渲染器,该渲染器处理由光栅生成的片段,以生成输出片段数据;

并且其中,当渲染场景(针对所述场景限定表示要渲染的场景的全部或部分的体的包围体并且在所述场景中存在能够包围体中投射阴影的外部光源)以用于输出时,图形处理流水线被构造为:

针对包围体上或内的至少一个采样点,通过以下步骤确定指示由在包围体外部的光源投射在采样点上的阴影量的透明度参数:

确定包围体上与从采样点至光源的矢量相交的位置;

使用相交位置来确定要用于对表示场景中的包围体的表面的透明度的图形纹理进行采样的矢量;以及

使用所确定的矢量对图形纹理进行采样,以确定针对采样点的光源的透明度参数值。

在此描述技术致力于用于当渲染场景以用于输出时(特别是在场景内存在所限定的包围体外部的光源的情况下)考虑阴影的效果的方法和设备。为了确定由该光源投射到包围体中的阴影的效果,使用表示包围体的表面的透明度的纹理,使用从被考虑的采样点与光源之间的矢量导出的矢量对纹理进行采样。

如下面将进一步论述的,申请人已经认识到,该布置可以用于使用表示包围体的表面的透明度的单个“静态”图形纹理来模拟由包围体外部的光源投射的阴影的效果。这则意味着例如即使视点(相机)位置和/或光的位置变化,相同图形纹理也可以用于多个帧。而且,该相同纹理可以用于评估由在包围体外部的全部光源投射的阴影(而不是需要每光源存在例如单独纹理)。这与例如传统阴影映射布置形成对比,在传统阴影布置中,必须例如针对每个帧且针对每个光源连续地重新生成阴影图。

因为在此描述技术使用“静态”纹理来模拟阴影效果,而不是像在传统阴影映射中使用“动态”纹理,所以这还意味着在此描述技术的纹理可以以更高质量且使用更复杂效果(诸如模糊)来生成。纹理例如可以“离线”生成并经过非实时优化,然后被提供用于图形处理系统使用。这与用于传统阴影映射的情况形成对比,例如在传统阴影映射中,因为必须例如针对每个帧重新生成阴影图,所以为了维持实时渲染所需的速度,阴影图必须以低分辨率/低质量形式来生成。在此描述技术不经受该缺点,因此用于模拟阴影效果的纹理可以被生成为具有更高的质量,从而提供更高质量的遮蔽(shadowing)效果,诸如“软阴影”。因为单个“静态”纹理在在此描述技术中可以用于给定包围体,所以还可以提供压缩形式的纹理(如果期望),从而提供带宽和存储器节省。

因此,与诸如阴影映射的传统阴影处理技术相比,在此描述技术可以显著减少处理至少特定遮蔽情况所需的存储器和带宽,同时还提供提高的渲染质量(并且便于例如“软阴影”的渲染)。

在此描述技术与阴影由包围体外部的光源投射在用于场景的包围体内的情况有关。包围体可以表示正被渲染的整个场景(并且在一个优选实施方式中是这种情况),而且还包围体还可以表示场景的仅一部分。包围体例如可以表示房间。

包围体可以以任何期望且合适方式来限定。在一实施方式中,包围体被限定在世界空间中。包围体可以采取任何合适且期望形式,但是在一实施方式中为包围盒(立方体)的形式。用于包围体的其它布置当然是可以的。

表示包围体的表面的透明度的图形纹理可以采取任何合适且期望形式。在一实施方式中,该图形纹理为用于环境映射的纹理的形式,诸如立方体纹理(立方体图)或球体纹理(球体图)。

由此,在一实施方式中,表示包围体的表面的透明度的纹理包括如下纹理,该纹理针对围绕该纹理包围的体内的参考位置的表面上的点指示并且存储针对每个点的透明度值,然后基于从用于纹理的参考位置(关于其限定纹理)开始的矢量(方向)对纹理进行采样。

换言之,在一实施方式中,纹理存储针对从纹理表示的体内的参考位置(点)开始的各方向的透明度值,并且通过确定从纹理内的参考位置(点)至纹理表示的表面上的位置的方向被采样。

在一实施方式中,关于其限定(并采样)纹理的纹理内的参考位置(点)处于纹理包围的体的中心,但是其它布置当然是可以的(如果期望)。

在一实施方式中,表示包围体的表面的透明度的纹理被配置为对应于针对场景的包围体。由此,例如,在包围体为立方体形式的情况下,在一实施方式中,纹理为立方体纹理(立方体图)的形式。在一实施方式中,纹理为立方体纹理(立方体图)。

对应地,在一实施方式中,纹理具有适于要一起使用的包围体的预期尺寸的分辨率(但这不是必要的,并且例如可以缩放纹理以便使用(如果要求))。

纹理应该并且在一实施方式中确实存储指示场景中的包围体的表面沿从关于其限定纹理的体内的参考点开始的相关方向的透明度的透明度值(阿尔法值)。由此,例如,在包围体表面沿给定方向不透明的情况下,针对从参考点开始的该方向上的纹理透明度(阿尔法)值应被设置为指示该表面沿该方向不透明的值(例如,“1”)。对应地,对于从表面完全透明的参考点开始的那些方向,指示完全透明度的透明度(阿尔法)值(例如,“0”)应存储在纹理中。对于半透明表面区域,可以使用指示半透明度的透明度(阿尔法)值(即,在“0”至“1”之间)。以此方式,纹理可以用于表示从完全透明到完全不透明的透明度的整个范围。(如本领域技术人员将理解的,纹理中的阿尔法值本质上表示来自光源的多少光在所论述的(从该方向开始的)点处由表面阻止(阴影强度),即,多少阴影在所论述的点处由阻止光源的表面投射)。

纹理可以单独存储透明度值(即,为单个通道纹理,仅存储单个透明度(阿尔法))。另选地,纹理还可以存储其它数据通道,诸如颜色通道(例如,为RGBα纹理(并且在一实施方式中是这样))。在这种情况下,不透明度(阿尔法)数据通道可以用于存储要用于不同目的的环境纹理。例如,RGBα纹理可以用于将要按在此描述技术的方式使用的纹理存储在阿尔法通道中,并且还将用于其它目的(例如,用于反射映射)的第二纹理存储在RGB颜色通道中。然后,这将允许相同(例如,立方体)纹理用于渲染反射和阴影两者。

在纹理还包括颜色通道的实施方式中,那些颜色通道还在在此描述技术的方法中使用,例如作为当计算阴影效果时要使用的另外颜色参数。然后,这将允许模拟染色(着色)半透明表面的效果,并且当计算包围体内的阴影的效果时考虑该效果。

包围体上与从采样点(针对其要求透明度参数)至光源(针对其确定透明度参数)的矢量相交的位置可以根据期望来确定。在一实施方式中,确定从包围体上或内的采样点至光源位置(在世界空间中)的矢量,然后确定从采样点至光源的该矢量在包围体上的相交点。

这些处理可以由图形处理流水线的任何期望且合适阶段或部件来实现。

在一实施方式中,确定从与被考虑的采样点有关的图元的顶点至光源的矢量,然后通过那些顶点至光源矢量的适当插值来确定从采样点至光源的矢量。在一实施方式中,顶点至光矢量在世界空间中被计算。在一实施方式中,针对每个顶点,确定从顶点至光源位置的矢量。然后,在一实施方式中,通过顶点至光源矢量的适当插值来确定从采样点至光源的矢量。

在一实施方式中,顶点至光源矢量由图形处理流水线的顶点着色(shading)阶段来确定(在一实施方式中,通过执行适当顶点着色程序的阶段(顶点着色器)来确定),然后由顶点着色阶段输出,以便由图形处理流水线的其它阶段使用。提供采样点至光矢量的顶点至光矢量的插值可以由图形处理流水线的任何适当阶段来执行,诸如且在一实施方式中,该阶段为另外执行并计算处理图元所要求的差值参数的图形处理流水线的适当图元设置阶段。

采样点至光源矢量(不管该矢量是由顶点至光源矢量的插值生成还是通过其它方式生成)可以用于再次通过图形处理流水线的任何期望且合适阶段或部件确定包围体上与从采样位置至光源的该矢量相交的位置。在一实施方式中,这由图形处理流水线的片段着色阶段(由片段着色器)来进行,再次在一实施方式中,由执行适当片段着色程序的该阶段(片段着色器)来进行以计算相交点。片段着色器将使用采样点至光源矢量和关于包围体的信息作为该处理的输入。

在一实施方式中,包围体上与从采样位置至光源的矢量相交的位置的确定通过图形处理流水线的片段着色阶段来确定(在一实施方式中,通过执行可以计算相交点的适当片段着色程序的该阶段(片段着色器)来确定)。其它布置(诸如该确定通过图形处理流水线的顶点着色阶段来进行)也是可以的(如果期望)。

包围体上的所确定的相交位置可以用于确定以任何合适且期望方式对表示图形纹理的透明度进行采样的矢量。例如,从采样位置至相交点的矢量可以被简单地用作用于对图形纹理进行采样的矢量。

然而,申请人已经认识到,在参照图形纹理对应的体内的参考位置(例如,中心点)限定图形纹理的情况下,然后简单地使用从感兴趣的采样位置至包围体上的相交点的矢量将不总是对图形纹理正确地采样。由此,在一实施方式中,采样处理涉及负责(补偿)纹理参照可能不对应于正被考虑的采样位置的参考点来限定的事实。

该补偿可以根据期望来执行,但是在一实施方式中,确定从关于其限定纹理的参考位置至包围体上的所确定相交点的矢量,然后该矢量被用于对透明度指示纹理进行采样。这将确保即使采样位置不对应于关于其限定纹理的参考位置,也对纹理中的正确位置进行采样。实际上,将“局部”校正应用至从被考虑的采样位置至光源的矢量。

换言之,包围体上的所确定的相交位置被用于确定从纹理参考位置(例如,中心点)至所确定的相交点的矢量,然后从参考位置至所确定的相交点的该矢量被用于对透明度指示纹理进行采样。

然后应该使用所确定的“采样”矢量对透明度指示纹理适当地进行采样,以检索期望透明度值。

透明度指示纹理可以以任何期望且合适方式被采样。例如,如果期望,当对纹理进行采样时,可以使用适当滤波(插值)处理(诸如双线性滤波)。类似地,在透明度指示纹理被提供作为mipmap的集合的情况下,在一实施方式中,采样处理被构造为例如(并且在一实施方式中)使用三线性滤波来过滤(插值)mipmap,以提供所采样的纹素值。

在纹理为mipmap的集合的形式的情况下,在一实施方式中,采样处理还包括确定应该对透明度指示纹理进行采样的mipmap等级(level)(细节等级)(然后对针对透明度指示纹理的这样确定的mipmap等级进行采样)。

在一实施方式中,要使用的mipmap等级(细节等级)基于从被考虑的采样点至从该采样点至光源的矢量在包围体上的相交位置的距离(从采样点至相交位置的矢量的长度)来确定。

其它布置当然是可以的。

这些处理可以再次由图形处理流水线的任何期望且合适阶段或部件来执行。在一实施方式中,它们由图形处理流水线的片段着色阶段(片段着色器)来执行(在一实施方式中,通过执行适当片段着色程序来执行)。如果期望,它们还可以或作为代替至少部分地由图形处理流水线的适当纹理映射阶段来执行。

一旦已经对纹理进行采样,就可以在期望时使用用于包围体的表面的所采样透明度值,例如在确定从被考虑的外部光源落在采样点上的光的强度(和例如颜色)的(传统)照明计算。

针对采样点的所采样透明度值可以在期望时用于模拟采样点处的阴影的效果。在一实施方式中,所确定的透明度值用于当确定要用于采样位置的输出渲染颜色时在采样位置处调制光源。由此,在一实施方式中,来自纹理的所采样透明度(阿尔法)值被用于调制从被考虑的光源落在所论述的采样位置上的所确定光量。例如,阿尔法值可以用于作为或导出倍增系数。

由此,在一实施方式中,在此描述技术的方法还包括当渲染采样点的输出版本时使用(并且在此描述技术的图形处理流水线还被构造为使用)针对采样点的所确定透明度值,并且在一实施方式中,用于在采样点处调制所论述的光源的效果。

这些处理可以再次由图形处理流水线的任何期望且合适阶段或部件来进行。在一实施方式中,它们由图形处理流水线的渲染器来执行,并且在一实施方式中,它们由图形处理流水线的片段着色阶段来执行(再次在一实施方式中,通过执行期望照明计算的适当片段着色程序来执行)。

上述处理中的任何或全部可以针对采样点被独立执行,或者处理中的一些或全部可以针对多个采样点的集合被执行(其然后将具有执行针对正被考虑的集合内的采样点的处理的效果)。例如,在图形处理流水线在均表示多个采样位置的集合的片段上操作的情况下,在此描述技术的处理可以基于每片段被执行,而不是针对片段表示的每个采样点独立执行(并且在一实施方式中是这样)。在这种情况下,因此将存在例如针对片段确定的单个透明度值,该透明度值然后被用于片段正被用于渲染的每个采样点。

如将从以上理解的,在此描述技术的优点是该技术可以用于计算阴影而不管在包围体外部的光源的位置如何。此外,这意味着表示包围体的表面的透明度的相同图形纹理可以用于不同外部光源。

由此,在此描述技术可以扩展到在包围体外部的随机数量的光。在这种情况下,确定针对光源的在采样点处的透明度值的在此描述技术的处理应该并且在一实施方式中针对在包围体中可以投射阴影的每个外部光源被重复。在一实施方式中,针对被考虑的每个光源确定单独透明度值和随后光源贡献,然后适当地组合单独光源值,以确定光源在所论述的采样点处的整体效果。

由此,在一实施方式中,针对包围体外部的多个光源中的每个(并且在一实施方式中针对包围体外部的全部光源)重复在此描述技术的处理,例如以确定由两个或更多个外部光源在包围体内或上的采样点处投射的阴影的效果。在考虑多个外部光源的情况下,在一实施方式中,针对每个光源单独执行为在此描述技术的方式的操作,使得针对每个光源单独执行透明度(阿尔法)参数并且然后对应照明计算,然后适当组合针对各单独光源的所得到的值,以确定多个光源在采样点处的整体效果。

还将想到,虽然上面具体参照确定所论述的包围体上或内的给定采样点处的透明度参数描述了在此描述技术,但是在此描述技术的技术可以并且在一实施方式中用于包围体上和内的多个采样点,并且在一实施方式中用于包围体上或内的当渲染场景时需要考虑的每个采样点。

由此,在一实施方式中,针对用于正被考虑的包围体上或内的图元的每个采样点且针对正被考虑的包围体上或内的每个图元重复该处理。

类似地,在一实施方式中,针对被渲染的场景序列中的多个场景(例如且在一实施方式中,针对要渲染的帧序列中的包括可以投射阴影的外部光源的每个帧)重复处理。

申请人还认识到,如果与包围体上或内的采样点有关的表面背朝被考虑的光源,则该采样位置将在阴影中,而不管光源与采样位置之间的包围体的表面的透明度如何。

由此,在一实施方式中,在此描述技术的方法包括检查(并且图形处理流水线被构造为检查)采样点是否位于背朝被考虑的光源的表面上(相对于被考虑的光源位于背向表面(back-facing surface)上)。然后如果确定采样点确实位于背向表面上,则采样点被看作从光源被完全遮蔽,并且不对透明度指示纹理进行采样。

表面是否是背向的确定可以根据期望来执行。在一实施方式中,用于所论述的表面(即,用于采样位置所在的表面)的法向矢量被考虑且用于该目的。在一实施方式中,法向矢量与从被考虑的采样点到光源的矢量之间的角度被用于该目的。在一实施方式中,如果表面法线与从采样点至光源的矢量之间的角度大于90°(在+90°至-90°范围外),则确定表面是背向的,因此假定采样点对于所论述的光源完全处于阴影中。

在一实施方式中,针对采样点是图元的一部分的图元的法向矢量被用作用于所论述的表面的法向矢量,因此被测试以确定采样点是否将肯定地处于阴影中。由此,在一实施方式中,处理包括使用针对采样点所属的图元的法向矢量来测试采样点是背向还是朝向被考虑的光源。在一实施方式中,如果确定指示采样点(关于所论述的光源)是背向图元的一部分,则不对透明度指示纹理进行采样。

确定采样点是否位于背向表面(图元)的测试可以在处理的任何期望且合适阶段执行。由此,例如,该处理可以在执行对图形纹理进行采样以确定透明度值的处理之前(并且例如在确定包围体与从采样点至光源的矢量相交的位置之前)执行。在一实施方式中,处理在如下阶段执行:如果确定采样点相对于所论述的光源位于背向表面(是背向图元的一部分)上,则应该允许省略(避免)用于对图形纹理进行采样以确定透明度值的操作中的至少一些(但不必是全部)。

在一实施方式中,特别是在测试使用法向矢量的情况下,该测试在已经确定采样位置至灯矢量之后但是在确定包围体上与该矢量相交的位置之前执行(并且使得如果“背向”测试指示采样点与针对所论述的光源的背向图元有关,则将不确定包围体上与从采样点至光源的矢量相交的位置)。

这些处理可以再次由图形处理流水线的任何期望且合适阶段或部件来进行。在一实施方式中,针对与采样点有关的表面(或图元)的法向矢量通过图形处理流水线的顶点着色阶段(顶点着色器)来确定,再次在一实施方式中,通过执行适当顶点着色程序来确定。在一实施方式中,然后存储该法向矢量,以用于由图形处理流水线的随后阶段使用。在一实施方式中,使用法向矢量进行的采样点是否属于背向表面(图元)的测试然后由图形处理流水线的片段着色阶段执行,再次,在一实施方式中,通过执行适当片段着色程序来执行。该操作将使用法向矢量和来自顶点着色阶段的插值采样点至光源矢量作为输入。

还可以在表面从面向光源移动至背向光源的区域周围执行一些形式的平滑操作,使得更逐步地示出从光到阴影的转变(如果期望)。该操作可以再次例如基于表面在所论述的采样位置处的法线与从采样位置至光源的矢量的角度。例如,在曲面的情况下,可以存在角度从小于90°逐渐移动至大于90°的采样位置序列(指示采样位置处于阴影中),并且平滑处理可以应用至那些采样位置。

从以上将想到,在此描述技术的技术特别适用于期望确定并模拟来自在表示要渲染的场景的全部或一部分的包围体外部的光源的阴影的效果的情况。由此,在此描述技术特别适于(并且在一实施方式中用于)确定并模拟用于场景内的环境(诸如房间)的阴影的效果,但是更少用于(并且在一实施方式中不用于)确定由场景中的附近和/或动态对象投射的阴影。该技术也不适于(并且在一实施方式中不用于)确定由被考虑的包围体内的光投射的阴影的效果。(然而,诸如例如在相机(观察)位置和/或外部光源的位置在连续帧之间移动的情况下其可以用于动态阴影,这是因为透明度纹理(例如立方体图)可以用于在包围体外部的任何光源位置)。

在存在在此描述技术的技术不能用于或优选不被用于的其它光源的情况下,其它(例如,已知)阴影模拟技术(诸如阴影图)可以用于这些光源。由此,在一实施方式中,在此描述技术的技术可以并且在一实施方式中与用于确定并模拟阴影效果的一个或更多个其它技术组合使用。由此,例如,在具有在场景包围体外部的光源和在场景包围体内的光源的场景的情况下,在一实施方式中,在此描述技术的技术用于确定并模拟由外部光源投射的阴影的效果,但是在一实施方式中,不同阴影确定和模拟技术用于包围体内的光源。然后,可以针对影响场景的每个和每一个光源重复该布置。

在此描述技术还扩展到表示用于场景的包围体的表面的透明度的纹理的生成和纹理本身。该生成例如可以是将单独生成(并存储)纹理和/或预先生成(和存储)纹理,然后例如将纹理提供给图形处理器以便使用。在此描述技术扩展到这些活动,以及用于渲染被渲染场景的包围体内的阴影的透明度指示纹理的使用。

由此,在此描述技术的另一个实施方式包括当渲染场景以用于输出时生成在图形处理系统中使用的纹理的方法,该方法包括以下步骤:

生成包括纹理纹素阵列的图形纹理;

设置纹理中的纹素值,使得纹素值均存储透明度值,该透明度值表示纹理表示的包围体的表面沿从关于其对纹理进行采样的参考位置开始的给定方向的透明度;以及

存储表示纹理的纹素值且指示关于其对纹理进行采样的参考位置的数据。

在此描述技术的另一个实施方式包括用于当渲染场景以用于输出时生成在图形处理系统中使用的纹理的设备,该设备包括处理电路,该处理电路被构造为:

生成包括纹理纹素阵列的图形纹理;

设置纹理中的纹素值,使得纹素值均存储透明度值,该透明度值表示纹理表示的包围体的表面沿从要关于其对纹理采样的参考位置开始的给定方向的透明度;以及

存储表示纹理的纹素值且指示要关于其对纹理进行采样的参考位置的数据。

在此描述技术的另一个实施方式包括在渲染场景以用于输出时在图形处理系统中使用的纹理,该纹理包括:

纹理纹素的阵列,其中:

设置纹素值,使得纹素值均存储透明度值,该透明度值表示纹理表示的包围体的表面沿从将要关于其对纹理采样的参考位置开始的给定方向的透明度。

如本领域技术人员将理解的,在此描述技术的这些实施方式可以并且在一实施方式中当合适时包括这里所述的可选特征中的任何一个或多个或全部。

由此,例如,在一实施方式中,纹理为立方体纹理(立方体图)的形式。类似地,在一实施方式中,不但存储阿尔法(透明度)值通道,纹理还存储颜色通道,颜色通道的值根据关于其使用纹理的包围体的表面的颜色来设置。

在一实施方式中,纹理通过从针对纹理的参考位置(从纹理参考位置)的视点渲染针对包围体的表面的图像来生成。设备例如可以包括可以进行该处理的任何合适处理器,诸如图形处理器、CPU等。

在一实施方式中,所生成的纹理例如被存储在适当便携式存储介质(诸如DVD)上或存储在存储器中,以便当期望在渲染例如图像时使用纹理时,用于由图形处理流水线的未来使用。

在一实施方式中,纹理被存储(编码)为mipmap的集合(即,均具有不同细节等级(分辨率)的初始纹理的多个版本被存储以便使用)。

在一实施方式中,在要求之前生成纹理,例如“离线”(而不按需且在需要时“实时”被生成)。

在一实施方式中,纹理在生成之后(并且在存储以便使用之前)经受一个或更多个处理操作,诸如且在一实施方式中,一个或更多个滤波处理(诸如使一个或更多个卷积滤波器应用至纹理)。在一实施方式中,纹理经受以下处理中的一个或更多个:模糊;亮度处理;对比度处理(例如,增强)、锐化等。在一实施方式中,纹理经受一个或更多个非实时优化。(如上面论述的,在此描述技术的特别优点是因为用于表示透明度值的纹理事实上是“静态”纹理,所以该纹理不需要实时生成,因此可以经受一个或更多个非实时优化(如果期望)。)

在一实施方式中,纹理在被存储之前还被压缩。任何合适纹理压缩处理可以用于该处理。

在一实施方式中,不但生成纹理,还生成并存储纹理表示的(与纹理一起使用的)包围体。该包围体应该并在一实施方式中确实表示要与纹理结合使用的要渲染的场景的全部或部分的体。

在一实施方式中,限定与纹理结合使用的包围体的数据被生成并且与纹理关联地存储。在一实施方式中,包围体被限定在世界空间中,并且在一实施方式中,与透明度指示纹理对齐。再次,该包围体信息可以经受任何期望的后处理操作,诸如压缩(如果期望)。

如上面所论述的,在一实施方式中,通过从针对纹理的参考位置的视点渲染将表示包围体的表面的图像来生成透明度指示纹理。在一实施方式中,这通过针对包围体上(沿从针对纹理的参考位置开始的相关方向)的各位置对表面(图像表示该表面)上的各位置进行采样来进行。在该处理中,因为包围体通常将为所限定的实际场景(例如,房间)的近似,所以包围体可能不与所限定的场景(例如,房间)的表面精确匹配(例如,在例如房间的墙壁可能不平坦或具有表面粗糙度的情况下)。为了在生成纹理时允许这样,针对纹理(针对每个纹素)被采样的表面的点可以并且在一实施方式中被允许落在包围体上、外部或内部(而不是采样点被限于包围体的墙壁上)。这将在包围体与场景几何结构不精确匹配的情况下避免孔被引入纹理内。因为采样点离包围体越远,在使用纹理时将引入的误差越大(特别是在进行局部校正时),所以在一实施方式中,表面在尽可能靠近包围体上(沿从针对纹理的参考位置开始的相关方向)的对应位置的位置处被采样。因此,在一实施方式中,包围体被限定为使得包围体与场景(表面限定该场景)紧密地(在一实施方式中为尽可能紧密地)配合,使得纹理可以使用靠近(尽可能靠近)包围体的墙壁的样本来生成。

在一实施方式中,多个纹理并且在一实施方式中相应包围体针对所预期的各场景被生成和存储,在执行与纹理和场景相关的应用(例如,游戏)时被显示。例如,在游戏将包括可以具有外部光源的多个场景(诸如房间)的情况下,在一实施方式中,针对可以在玩游戏时开始显示的每个场景(例如,房间)生成各透明度指示纹理和包围体。然后,纹理和包围体可以例如用在执行游戏时使用的剩余游戏数据来存储。

在此描述技术可以用于任何合适且期望图形处理系统和流水线中且与任何合适且期望图形处理系统和流水线一起使用。

在此描述技术特别适于与分块渲染器(基于块的图形处理系统)一起使用。由此,在一实施方式中,图形处理流水线为基于块的图形处理流水线。

如本领域中已知的,图形处理流水线的光栅将生成要渲染的图形片段,以生成针对期望图形输出(诸如要显示的帧)的采样点的所渲染图形数据。由光栅生成的每个图形片段与图形输出的采样点的集合相关,并且将被用于生成针对与片段关联的采样点的集合中的采样点中的一个或更多个的所渲染图形数据。

光栅可以被构造为以任何期望且合适方式生成用于渲染的片段。如本领域中已知的,光栅将接收例如要栅格化的图元,对照采样点位置的集合测试这些图元,并且因此生成表示图元的片段。

如在领域中已知的,渲染器应该处理由光栅生成的片段,以生成针对片段表示的(所覆盖的)采样点的所渲染片段数据。这些渲染处理可以包括例如片段着色、混合、纹理映射等。在优选实施方式中,渲染器为可编程片段着色器的形式或包括可编程片段着色器。

图形处理流水线还可以包含图形处理流水线可以包含的任何其它合适且期望处理阶段,诸如早期深度(或早期深度和模板)测试器、后期深度(或深度和模板)测试器、混合器、块缓冲器、写出单元等。

在一实施方式中,图形处理流水线还包括一个或更多个存储器和/或存储装置和/或与一个或更多个存储器和/或存储装置通信,该存储器和/或存储装置存储这里所述的数据(诸如透明度指示纹理、场景包围体等)和/或存储用于执行这里所述的处理的软件。图形处理流水线还可以基于由图形处理流水线生成的数据与主微处理器和/或与用于显示图像的显示器通信。

在一实施方式中,图形处理流水线包括可以用于存储透明度参数确定处理所要求的数据和所确定的透明度参数的至少局部存储器,诸如(芯片上)缓冲器和/或寄存器。在存在的情况下,块缓冲器可以用于该目的(如果期望)。在一实施方式中,图形处理流水线还可以缓存所采样的透明度值以便未来使用(如果期望)。

在此描述技术可以用于图形处理流水线可以用于生成的所有形式的输出,诸如用于显示的帧、渲染到纹理输出等。

在一实施方式中,在此描述技术的各种功能在单个图形处理平台上执行,该图形处理平台生成和输出例如写到用于显示装置的帧缓冲器的渲染后的片段数据。

在此描述技术可以在任何适当系统中实现,诸如基于适当构造的微处理器的系统。在一实施方式中,在此描述技术在计算机和/或基于微处理器的系统中实现。

在此描述技术的各种功能可以以任何期望且合适方式执行。例如,在此描述技术的功能可以在硬件或软件中(根据期望)实现。由此,例如,除非另外指示,在此描述技术的各种功能元件和“装置”可以包括合适处理器、控制器、功能单元、电路、处理逻辑、微处理器布置等,它们可操作以执行各种功能等,诸如适当专用硬件元件和/或可以被编程为以期望方式操作的可编程硬件元件。

这里还应当注意的是,如本领域技术人员将理解的,在此描述技术的各种功能等可以在给定处理器上重复和/或并行执行。等同地,各种处理阶段可以共享处理电路等(如果期望)。

此外,在此描述技术的处理阶段中的任何一个或更多个或所有可以被具体实现为处理阶段电路,例如为一个或更多个固定功能单元(硬件)(处理电路)的形式和/或为可以被编程为执行期望操作的可编程处理电路的形式。等同地,在此描述技术的处理阶段和处理阶段电路中的任何一个或更多个可以作为单独电路元件被提供给其它处理阶段或处理阶段电路中的任何一个或更多个,和/或处理阶段和处理阶段电路中的任何一个或更多个或所有可以至少部分地由共享处理电路形成。

受制于必须执行上面论述的特定功能的任何硬件,图形处理系统可以另外包括图形处理系统包括的普通功能单元等中的任何一个或更多个或所有。

如本领域技术人员还将理解的,在此描述技术的所描述的所有实施方式可以(且在一实施方式中确实)在合适时包括这里描述的可选特征中的任何一个或更多个或所有。

根据在此描述技术的方法可以至少部分地使用软件(例如,计算机程序)实现。由此将看出,当从另外实施方式看时,在此描述技术提供:计算机软件,该计算机软件当安装在数据处理器上时特别适用于执行这里描述的方法;计算机程序元件,该计算机程序元件包括计算机软件代码部,其用于当程序元件在数据处理器上运行时执行这里描述的方法;以及计算机程序,该计算机程序包括代码,该代码适于当程序在数据处理系统上运行时执行这里描述的方法的所有步骤。数据处理器可以是微处理器系统、可编程FPGA(现场可编程门阵列)等。

在此描述技术还扩展到计算机软件载体,该计算机软件载体包括这种软件,这种软件当用于操作图形处理器、渲染器或包括数据处理器的微处理器系统时,与所述数据处理器结合使所述处理器、渲染器系统执行在此描述技术的方法的步骤。这种计算机软件载体可以是物理存储介质,诸如ROM芯片、CD ROM、RAM、闪存或盘,或可以是信号,诸如电线上的电信号、诸如到卫星的光信号或无线电信号等。

还将理解的是,不是在此描述技术的方法的所有步骤都需要由计算机软件执行,并且由此根据更宽实施方式,在此描述技术提供了计算机软件,并且这种软件安装在计算机软件载体上,以用于执行这里阐述的方法的步骤中的至少一个。

在此描述技术可以因此适当地具体实现为用于与计算机系统一起使用的计算机程序产品。这种实现可以包括一系列计算机可读指令,该一系列计算机可读指令固定在有形非暂时性介质上,诸如计算机可读介质,例如,磁盘、CD-ROM、ROM、RAM、闪存或硬盘。还应当包括一系列计算机可读指令,该一系列计算机可读指令在有形介质(包括但不限于光学或模拟通信线)上或无形地使用无线技术(包括但不限于微波、红外线或其它传输技术),经由调制解调器或其它接口装置可发送到计算机系统。该一系列计算机可读指令具体实现这里之前描述的功能的所有或一部分。

本领域技术人员将理解,这种计算机可读指令可以以多种编程语言来编写以用于与许多计算机架构或操作系统一起使用。进一步地,这种指令可以使用现在或未来的任何存储技术来存储(存储技术包括但不限于半导体、磁或光),或使用现在或未来的任何通信技术来发送(通信技术包括但不限于光学、红外线或微波)。将预期的是,这种计算机程序产品可以作为可去除介质来分布,附有已打印的文档或电子文档,例如由计算机系统预先加载、例如在系统ROM或固定盘上、或在网络(例如,因特网或万维网)上从服务器或电子公告栏分配的压缩打包软件。

现在将在用于显示的计算机图形的处理的背景下描述在此描述技术的实施方式。

如在本领域中已知的,当要显示计算机图形图像时,计算机图形图像通常首先被限定为一系列图元(多边形),这些图元然后被划分(栅格化)为用于依次图形渲染的图形片段。在正常图形渲染操作期间,渲染器将修改(例如)颜色(红色、绿色以及蓝色,RGB)和与每个片段关联的透明度(阿尔法、α)数据,使得可以正确地显示片段。一旦片段已经完全穿过渲染器,则它们的关联数据值被存储在存储器中,以准备输出以便显示。

图1示意性地示出了可以根据在此描述技术操作的图形处理流水线1。图形处理流水线1是具有完全可编程GPGPU背景的分块延迟渲染器,例如部分经由Direct Compute、OpenCL、CUDA等执行的渲染器。

因为图1中所示的图形处理流水线1是基于块的渲染器,如在本领域中已知的,该渲染器由此将产生渲染输出数据阵列的块,诸如要生成的输出帧。

(如在本领域中已知的,在基于块渲染时,不是整个渲染输出(例如,帧)被一下子有效地处理为中间模式渲染,而是渲染输出(例如,要显示的帧)被划分为多个更小的子区域(通常称为“块(tile)”)。每个块(子区域)被单独(通常一个接一个地)渲染,然后渲染后的块(子区域)被重组以提供完整渲染输出(例如,用于显示的帧)。在这种布置中,渲染输出通常被划分为规则大小且成形的子区域(块)(它们通常是例如正方形或矩形),但这不是必须的。每个块对应于屏幕空间采样位置的集合。)

如在本领域中已知的,渲染输出数据阵列可以通常是输出帧,输出帧旨在显示在显示装置上,诸如屏幕或打印机上,但是还可以例如包括中间数据,中间数据旨在用于在后期渲染通道(还称为“渲染到纹理”输出)中使用等。

图1示出了图形处理流水线1的与本实施方式的操作有关的主元件和流水线阶段。如本领域技术人员将想到的,可以存在图1中未示出的图形处理流水线的其它元件。这里还应当注意的是,图1仅是示意性的,并且例如,实际上,所示的功能单元和流水线阶段可以共享重要硬件电路(即使它们在图1中被示意性地示出为单独阶段)。还将想到的是,如图1所示的图形处理流水线的每个阶段、元件以及单元等可以在期望时被实现,并且因此将包括例如适当电路和/或处理逻辑等,以用于执行需要的操作和功能。

图1示意性地示出了生成用于输入到栅格化处理的图形图元(多边形)2之后的流水线阶段。由此,已如在本领域中已知的,此时,响应于提供给图形处理器的命令和顶点数据,图形数据(顶点数据)已经经受了片段前端操作8(诸如变换操作(未示出)、顶点着色、插值以及设置要渲染的图元的图元设置阶段(未示出))。

如图1所示,图形处理流水线1的该部分包括多个阶段,包括栅格化阶段3、早期Z(深度)和模板测试阶段4、片段着色阶段6形式的渲染器、后期Z(深度)和模板测试阶段7、混合阶段9、块缓冲器10以及下采样和写出(多采样分辨率)阶段13。

如在本领域中已知的,图形处理流水线1的栅格化阶段3操作,以将组成渲染输出(例如,要显示的图像)的图元栅格化为独立图形片段以用于处理。为了这样做,光栅3接收用于渲染的图形图元2,将图元栅格化为采样点,并且生成具有用于渲染图元的适当位置(表示合适采样位置)的图形片段。

然后由光栅生成的片段被向前发送至流水线的剩余部分以用于处理。

如在本领域中已知的,早期Z/模板阶段4对从光栅3接收的片段进行Z(深度)测试,以看出在该阶段是否可以丢弃(剔除)任何片段。为了这样做,早期Z/模板阶段4将从光栅3发布的片段的深度值(与片段关联的深度值)与已经渲染的片段的深度值进行比较(这些深度值被存储在作为块缓存器10的一部分的深度(Z)缓冲器中),以确定新片段是否将由已经被渲染的片段挡住。同时,执行早期模板测试。

通过片段早期Z和模板测试阶段4的片段然后被发送到片段着色阶段6。如在本领域中已知的,片段着色阶段6对通过早期Z和模板测试的片段执行适当片段处理操作,以便处理片段以生成适当渲染的片段数据等。

如在本领域中已知的,该片段处理可以包括任何合适且期望的片段着色处理,诸如对片段执行片段着色器程序,向片段应用纹理,向片段应用雾化或其它处理等,以生成合适的片段数据。在本实施方式中,片段着色阶段6为着色器流水线(可编程片段着色器)的形式,但如果期望,其它布置(诸如使用或代替固定功能片段着色单元)将是可以的。

然后,存在“后期”片段Z和模板测试阶段7,该阶段尤其对着色后的片段执行流水线深度测试的结尾部分(end),以确定被渲染的片段是否实际上将在最终图像中被看到。该深度测试使用针对块缓冲器10中的Z缓冲器中所存储的片段位置的Z缓冲器值,来确定针对新片段的片段数据是否应当代替片段的片段数据,如在本领域中已知的,该片段已经通过将从片段着色阶段6发布的片段(与片段关联的)深度值与已经被渲染的(如存储在深度缓冲器中的)片段的深度值进行比较被渲染。该后期片段深度和模板测试阶段7还对片段执行任何必须的“后期”阿尔法和/或模板测试。

通过后期片段测试阶段7的片段然后经受(如果需要)与已经存储在混合器9中的块缓冲器10中的片段的任何必要混合操作。必须在片段上进行的任何其它剩余操作(诸如,抖动(dither)等(未示出))也在该阶段执行。

最后,(混合后的)输出片段数据(值)被写到块缓冲器10,它们可以从该块缓冲器10例如被输出到帧缓冲器以用于显示。针对输出片段的深度值还被适当地写到块缓冲器10内的Z缓冲器。(如在本领域中已知的,块缓冲器将存储颜色和深度缓存,颜色和深度缓冲器分别存储针对缓冲器表示的每个采样点(实质上针对正被处理的块的每个采样位置)的适当颜色等值或Z值。)如在本领域中已知的,这些缓冲器存储表示整体渲染输出(例如,要显示的图像)的一部分(块)的片段数据的阵列,缓冲存中的采样值的各集合对应于整体渲染输出的各像素(例如,采样值的每个2x2集合可以对应于输出像素,其中使用4x多采样)。

块缓冲器被提供为位于图形处理流水线(芯片)上(图形处理流水线(芯片)本地)的RAM的一部分。

来自块缓冲器10的数据被输入到下采样(多采样分辨率)写出单元13,并且从那里被输出(写回)到外部存储输出缓冲器,诸如显示装置的帧缓冲器(未示出)。(该显示装置可以包括例如包括像素阵列的显示器,诸如计算机监视器或打印机。)

在本实施方式中,下采样和写出单元13(以固定或可变方式二者之一)将块缓冲器10中所存储的片段数据下采样为针对输出缓冲器(装置)的合适分辨率(即,使得生成与输出装置的像素对应的像素数据的阵列),以生成用于向输出缓冲器输出的输出值(像素)。

一旦渲染输出的块被处理且其数据被输出到用于存储的主存储器(例如,到主存储器中的帧缓冲器(未示出)),就处理下一个块,以此类推,直到处理足够块为止,以生成整个渲染输出(例如,要显示的帧(图像))。然后针对下一个渲染输出(例如,帧)等重复该处理。

当然,用于图形处理流水线1的其它布置是可以的。

上面描述了图1中所示的图形处理系统的操作的特定特征。现在将描述根据在此描述技术的实施方式的允许模拟所渲染图像中的阴影的效果的图1中所示的图形处理系统的操作的另外特征。

本实施方式操作以模拟由在包围体外部的光源投射在针对场景的所限定体内的阴影的效果。

图2示出了该情况且示出了在世界空间中限定的包围盒的形式的示例性包围体20,该包围体表示所渲染场景内的体。在本实施方式中,假定包围体20对应于整个场景且表示例如房间,但是其它布置当然是可以的。如图2中可以看到的,假定包围体20具有窗口21,但是另外具有不透明墙壁。

如图2所示,还假定存在在包围体20外部的照射通过窗口21并因此在包围体20内投射光23的光源22。包围体的其它区域关于灯22处于阴影中。如上面所论述的,在此描述技术涉及用于实际上确定来自光源22的光将可见的区域23和光源22被遮蔽的区域24的布置。

为了便于以在此描述技术的方式进行的操作,在本实施方式中,生成对应于包围体20的表面的立方体纹理,该立方体纹理存储表示包围体20的表面的透明度的透明度(阿尔法)值。

图3示出了用于图2中所示的包围体20的对应立方体纹理30。如图3所示,立方体纹理30将存储指示用于不透明的包围体表面的那些区域的不透明表面的值,但对于存在窗口21的包围体表面的区域,将存储指示透明度(或至少半透明度)的透明度值。由此,立方体纹理30的不透明面32(如围绕窗口21的区域33)将存储阿尔法值1,但窗口21的区域将存储小于1的阿尔法值以指示包围体的表面的该部分是半透明的或完全透明的。

图4示意性地示出了图3中所示的立方体纹理的生成。如图4所示,处理通过从限定关于其限定立方体纹理的参考位置31(图2中所示)至立方体纹理渲染场景(或至少场景的阿尔法值)(步骤40)开始。(立方体纹理30将关于立方体纹理表示的体(由此针对场景的包围体)内的参考位置31(图2中所示)被限定,并且通过确定从采样值(采样位置)被要求用于的该参考位置开始的方向被采样。)

该处理将限定包围体20的信息、限定针对立方体纹理的参考位置31的信息、以及指示立方体纹理期望的分辨率尺寸42的信息作为关于场景41的输入信息。

通过从针对纹理的参考位置31的视点渲染表示包围体20的表面的图像来生成立方体纹理30。为了这样做,针对包围体上的各位置(沿从针对纹理的参考位置31开始的相关方向)对针对(如由场景信息41限定的)场景的表面(图像表示表面)上的各位置进行采样。在该处理中,因为包围体通常将为实际场景的近似且因此不与所限定的场景(例如,房间)的表面精确匹配,所以针对纹理(针对每个纹素)采样的表面的点不需要精确落到包围体20的墙壁上,而是可以处于包围体上、外部或内部。该立方体纹理生成处理的输出47然后是如图3所示的立方体纹理,该立方体纹理具有阿尔法(透明度)通道,该通道表示针对与立方体纹理相关的场景的包围体的表面在包围体的表面上的各位置处的透明度。

如图4所示,一旦生成立方体纹理,该纹理就可以可选择地经受各种处理效果和优化,诸如模糊、伽马校正、亮度和/或对比度增强等(步骤43)。该步骤将期望后处理效果参数(诸如模糊参数、伽马校正参数、对比度参数等)用作输入。

因为每当要求所论述的场景时可以重新使用立方体纹理30,并且对于所有外部光源,立方体纹理30不需要在使用时被动态地再生且因此可以使用不适于立方体纹理的实时生成的非实时优化,所以该优化处理是可以的。

此外,如图4所示,可以使用期望压缩参数46,压缩所生成的立方体纹理(并且如果期望,则是后处理的立方体纹理)(步骤45)。再次,因为立方体纹理不需要实时被生成,所以这是可以的。任何合适纹理压缩方案可以用于压缩立方体纹理。

立方体纹理生成和立方体纹理的任何后处理/压缩可以根据期望且使用任何合适处理系统来执行。在实施方式中,立方体纹理被“离线”生成并存储,然后被提供给图形处理流水线,以便在要求立方体纹理时使用。这里还应注意的是,对于立方体纹理生成,不要求或使用灯的限定。

现在将参照图2、图5、图6以及图7描述图3中所示的立方体纹理,以确定从灯22投射在包围体20内的阴影的效果。

图5示意性地示出了处理的主要步骤。

本实施方式操作以针对正被渲染的包围体20上或内的各采样点,使用立方体纹理30确定光源22在采样点上的效果(若有的话)。本质上,因为渲染包围体20上或内的针对场景的每个图元,所以执行图5中示意性示出的处理以确定灯22在所论述的采样点处的效果(即,实际上确定阴影量以应用至所论述的采样点)。

由此,图5示出了用于给定采样点的处理。针对要以本实施方式的方式处理的每个采样点重复该处理。

如图5所示,处理通过确定从正被考虑的包围体上或内的采样点25至光源22的矢量28开始(步骤50)。该处理将灯22的位置51和采样点25的位置用作输入。

在本实施方式中,从采样点25至光源22的矢量通过以下步骤来确定:首先确定从与采样点相关的图元的顶点至灯22的矢量,然后对那些“顶点至灯”矢量进行插值以导出采样点至灯矢量28。这些处理通过确定“顶点至灯”矢量的图形处理流水线的片段前端操作8的顶点着色阶段,然后通过对那些顶点至灯矢量进行插值以给出对应采样点至灯矢量的图形处理流水线的片段前端操作8的插值阶段来实现。

然后将从采样位置至灯的矢量28与针对与采样点25相关的图元的法向矢量52进行比较,以确定采样点所属的图元是面朝还是背朝灯22(步骤53)。

为了便于该操作,图形处理流水线的片段前端操作8的顶点着色阶段还确定用于待处理的每个图元的法向矢量,并且存储这些法向矢量,使得它们可用于由图形处理流水线的随后阶段使用。

由此,在本实施方式中,片段前端操作8的顶点着色器(顶点着色阶段)确定用于确定采样点至灯矢量的顶点至灯矢量和针对图元的法向矢量两者。

图6示出了该操作,并且示出了执行顶点着色程序61的图形处理流水线的顶点处理器(顶点着色器)60,该顶点着色程序可操作以计算针对要被考虑的每个图元的“顶点至灯”矢量(步骤62),计算针对要被考虑的每个图元的法向矢量(步骤63),并且然后输出顶点至灯矢量和法向矢量,以用于由图形处理流水线的随后阶段使用(步骤64)。

针对与采样点相关的图元的法向矢量与采样点至灯矢量的比较确定法向矢量与采样点至灯矢量之间的角度是否大于90°。如果角度大于90°,则采样点关于灯22位于背向图元上。

如果在步骤53处确定采样点关于灯22位于背向图元上(使得不管包围体的表面与灯22之间的包围体的表面的透明度如何,采样点都将从灯22被完全遮蔽),则处理简单地确定所论述的采样位置关于灯22将完全处于阴影中(如图5所示)。

如果在步骤53处确定所论述的采样点面朝灯22,则下一个步骤是将“局部校正”应用至采样点至灯矢量,以确保对立方体纹理30内的正确位置进行采样。因为如可以从图2中看到的,例如从其(关于其)对立方体纹理采样的参考位置31可能不(并且通常将不)对应于所考虑的采样位置25,使得简单地采用从采样点25至光源22的矢量28并使用该矢量从针对立方体纹理30的参考位置31进行采样将不对立方体纹理的正确部分进行采样,所以要求这样。

为了应用该“局部校正”,如图2所示,确定从采样点25至灯22的矢量28在包围体20的表面上的相交点26,然后确定从关于其限定立方体纹理30的参考位置31至包围体20上的相交点26的矢量27,然后使用该矢量27对立方体纹理30进行采样(步骤55)。因此且如可以从图2看到的,这将可以在对应于包围体20的表面位于所处理的采样点25与光源22之间的部分的相交点26处对立方体纹理30进行采样。

然后,在对应于相交位置26的位置处对立方体纹理30进行采样,以确定包围体20的表面在该点处的阿尔法值(即,透明度)(步骤56)。立方体纹理30可以使用任何期望纹理采样(滤波)处理(诸如双线性和/或三线性滤波)被采样(例如,在立方体纹理30为mipmap的形式的情况下)。滤波例如可以由图形处理流水线的纹理模块(阶段)来提供。然后,这给出指示阴影量的阿尔法值(透明度值)57,以关于光源22应用至采样点25。

该输出阿尔法值57然后可以根据期望(并且根据要求(例如在适当照明计算中))用于确定将从灯22落在被考虑的采样点25上的光量,以便渲染用适当阴影量处理的采样点25。

在本实施方式中,图元法向矢量与采样点至灯角度的比较、用于采样点至灯矢量的局部校正、阴影指示立方体纹理30的采样、以及基于所采样立方体纹理30透明度值的适当阴影效果到采样点的应用由图形处理流水线的片段着色阶段6来执行。

图7示出了该处理,并且示出了片段着色阶段6执行适当片段着色程序70,该程序首先将由顶点着色器提供的图元法向矢量与采样点至灯矢量进行比较(步骤71)。如果比较揭示针对与采样点相关的图元的法向矢量与采样点至灯矢量之间的角度大于90°(步骤72),则确定采样点将完全处于阴影中,但如果角度小于90°,则计算用于采样点至灯矢量的“局部”校正(步骤73),使用校正后的采样点至灯矢量来对立方体纹理进行采样(步骤74),将所确定的阴影量适当地应用至采样点(步骤75),并且然后输出这样渲染的采样点(步骤76),以用于由图形处理流水线的随后阶段使用。

然后针对用于要渲染的包围体20上或内的所有图元的采样点(并且然后针对下一帧(如果适当)等)重复该处理。

对在此描述技术的上述实施方式的各种修改、添加以及另选方案是可以的(如果期望)。

例如,虽然上面参照存储阿尔法值(透明度值)的立方体纹理30描述了处理,但立方体纹理30还可以存储其它数据通道(诸如颜色通道),颜色数据然后在遮蔽处理中使用,例如以允许模拟染色(着色)半透明表面的效果。

在一实施方式中,透明度指示纹理(由此立方体纹理30)以mipmap的形式被存储(即,初始纹理数据阵列的多个版本(每个版本具有不同细节等级(分辨率))被存储以用于使用)。在这种情况下,在一实施方式中,每个较低分辨率mipmap等级为先前更高分辨率mipmap等级的下采样(在一实施方式中为因数2)表示。

在这种情况下,在一实施方式中,纹理采样处理还确定在哪个mipmap等级(细节等级)对透明度指示纹理进行采样。在一实施方式中,要使用的mipmap等级(细节等级)基于从被考虑的采样点至从采样点至光源的矢量在包围体上的相交点的距离来选择。其它布置当然是可以的。

虽然已经关于单个外部光源22描述了本实施方式,但立方体纹理30和包围体20可以用于确定并模拟针对在包围体20外部的任何随机数量的光源的阴影的效果。在这种情况下,针对每个另外外部光源分别重复上面参照光源22描述的操作,然后适当地组合用于每个外部光源的所确定阴影效果,以提供全部外部光源在所考虑的采样点处的整体阴影效果。

还将可以组合在此描述技术与其它阴影模拟技术的处理(例如包围体20内还存在光源)。

如可以从以上看到的,在此描述技术至少在其实施方式中提供了用于模拟阴影效果的有效且带宽高效机制,与诸如阴影映射的现有技术形成对照,该机制可以使用“静态”纹理图用于确定阴影的效果,而不是必须使用(并且经常重新生成)“动态”纹理图用于该目的。这然后允许以带宽和处理高效方式实现更高质量的“阴影”效果,诸如“软阴影”。

至少在在此描述技术的实施方式中,这通过限定指示要渲染的场景内的包围体的表面的透明度的纹理图且然后对该纹理图进行采样以确定用于应用至包围体外部的光源的透明度值来实现。

已经为了示出和说明的目的而提出了上述详细描述。其不旨在是详尽的,或者将本技术限于所公开的精确形式。很多修改例和变型例鉴于上述教导都是可以的。选择所述实施方式以最好地解释本技术的原理及其实际应用,以使本领域技术人员能够在各种实施方式中最好地利用本技术,以及各种变型适合于所设想的具体用途。范围旨在由所附权利要求来限定。

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