用于渲染的滤波的制作方法

专利2023-10-21  100



1.本发明涉及渲染期间的滤波,例如用于在图形处理单元中渲染软阴影。


背景技术:

2.阴影的渲染对于视频游戏非常重要,因为阴影的存在不仅可以增加渲染图像的真实感,还可以向观众指示对象间的距离和位置。
3.简单的阴影贴图算法(称为硬阴影)不使用任何滤波算法(即,没有加权计算),而是从阴影贴图纹理中提取一个最近的纹理样本,以测试当前渲染片段是否在阴影区域内。然而,这可能会导致图像质量不佳,如图1中101所示,这是不逼真的。
4.在现代游戏中渲染阴影时,滤波阴影贴图样本对于减少锯齿状伪影非常重要。通常,需要减少由于对被光栅化到阴影贴图中的几何体的欠采样而导致的混叠,但这对于阴影贴图本身被像素着色器欠采样的情况也可能有用。
5.然而,使用涉及大量纹理采样抽头的高质量滤波算法渲染高质量软阴影是非常困难的,尤其是对于现代移动图形处理单元(graphics processing unit,gpu)。
6.在现代游戏引擎(例如,虚幻引擎和unity 3d引擎)中发现的阴影算法通常需要在阴影贴图纹理中的n
×
n区域中执行纹理采样,以获得n
×
n个纹素数据样本,然后对这些数据样本执行滤波操作以获得高质量的软阴影值,从而对像素着色器中的最终像素进行着色。
7.一种常见的滤波技术是百分比渐近滤波(percentage closer filtering,pcf),它对阴影贴图纹理应用多个采样抽头,然后执行阴影测试,最后滤波所有测试的结果。
8.为了实现最简单的软阴影以实现跨像素的光过渡,作为最小解决方案,必须提取四个可见性样本抽头,例如相邻阴影贴图纹素的2
×
2网格,并使用子纹素坐标偏移作为权重对其进行加权,以生成平滑的光过渡结果。这称为2
×
2双线性pcf滤波。
9.图2a显示了使用2
×
2双线性pcf生成软阴影时的改进渲染结果,如201所示。如上所述,该阴影贴图算法从阴影贴图纹理中提取围绕目标uv坐标的2
×
2邻域区域中的四个纹理样本,如图2b中的(s,t)所示。然后执行2
×
2双线性加权滤波,以计算当前渲染片段是否在阴影内的百分比,即表面点是否更靠近光照区域而因此不在阴影中。然而,生成的图像仍然不逼真,并且具有锯齿形混叠的特征。
10.图3a显示了使用3
×
3双线性pcf时的渲染结果。许多现代游戏采用3
×
3双线性pcf滤波,在目标uv坐标周围的3
×
3邻域区域中提取九个纹理样本,如图3b中的(s,t)所示。然后对片段着色器中的九个样本执行3
×
3双线性加权计算,以获得平滑的滤波阴影。采用三角形双线性滤波核作为滤波器权重。从301处指示的阴影区域可以看出,与2
×
2pcf滤波相比,得到的渲染图像质量得到了改善,并且更自然。图4显示了使用3
×
3双线性pcf处理的图像的图3(a)所示的区域301的放大图。
11.图5进一步说明了3
×
3pcf滤波算法,该算法对目标uv坐标500周围的3
×
3纹素网格进行采样。九个样本中的每个的权重由框501计算为每个纹素单元中的覆盖区域,框501
分别被由沿x轴和y轴的子纹素偏移[α,β]包于内部。九个样本的滤波权重被计算为2d(二维)采样占用空间(如框501所示)覆盖的每个样本的纹素单元中的百分比覆盖率,即权重是为每个纹素单元计算的所覆盖2d区域。
[0012]
对于3
×
3双线性pcf,沿x轴和y轴的权重向量分别为:a[1-α,1,α],c[1-β,1,β];2d采样占用空间(如方框501所示)的总面积为2
×
2=4,因此最终结果除以4进行归一化。这里,α和β是沿纹素空间中两个轴的子纹素偏移。
[0013]
对于具有双线性滤波的3
×
3pcf,在二维和3
×
3数据采样抽头中,b由下式给出:
[0014][0015]
滤波器内核的占地面积是2
×
2,然后可以将其除以结果进行归一化。在矩阵表示法中,3
×
3双线性pcf方程可以表示为下面的方程(2)所示。这里,为了便于推导,α和β分别由x和y表示,即,x和y分别是纹素空间中沿x轴和y轴的子纹理偏移。
[0016][0017]
此外,a和c也需要动态计算,因为每个目标像素的子纹素偏移不是固定的。因此,必须动态计算所有权重(每个样本的权重都是唯一的),因为阴影贴图纹素并非位于距采样位置的固定距离处,即,这些是动态子纹素偏移,将用于计算九个样本的双线性权重。这是为了实现跨像素滤波结果的连续转换,因为非连续pcf(例如统一的pcf,其中对所有九个样本使用相同的权重)是不可取的。
[0018]
在移动平台上的许多现代游戏引擎中,阴影滤波的3
×
3pcf直接在3
×
3数据样本上计算,以获得最终的高质量滤波软阴影值。
[0019]
尽管大内核pcf可以产生非常好的图像质量,如上所述,但它需要许多纹理提取指令来进行数据采样,这会消耗大量数据带宽。它还需要许多加权计算来进行加权滤波(即,许多alu指令)以对每个单个片段进行着色。这对移动gpu的内存和纹理带宽以及计算能力来说可能是沉重的负担。
[0020]
移动设备需要实时渲染性能,具有高帧速率和低延迟交互。同时,当设备长时间被手持时,它们需要低功耗以延长电池寿命,并需要低散热以提高用户舒适度。当高阶滤波算法被用于高质量软阴影的渲染时,这些要求可能无法实现。
[0021]
因此,尽管3
×
3pcf滤波允许平滑的阴影过渡,但它非常耗时,因为它需要九个纹理提取指令(如矩阵b所示)到阴影贴图纹理中,然后需要使用3
×
3纹素网格中沿x和y方向的加权计算对其进行滤波,对于单次滤波操作,涉及十二位浮点乘法和八位加法,如等式(2)所示,其中两个向量a和c分别拥有三个权重,矩阵b拥有九个数据样本(在3
×
3纹素网格中)。
[0022]
在us 7106326 b2中描述的阴影滤波方法中,计算单元被配置为从存储器访问数据值,并对邻域(np
×
np)的数据值执行滤波操作(例如线性、双线性、三线性、三次或双三次滤波),其中np
×
np是以纹素为单位的邻域的大小。然而,它需要np
×
np个数据采样抽头和基于多个样本和动态权重的非常复杂的加权滤波计算。
[0023]
gruen在“快速传统阴影滤波”(“fast conventional shadow filtering”,gpu pro,a k peters,2010年,第415-445页)中描述的方法可以通过对每个新采样的纹理值应用动态移位的采样位置和额外的纹理后权重,以更少的纹理提取实现高质量pcf滤波。然而,对于三角形加权滤波,它涉及为每个样本求解复杂的线性系统,以计算正确的纹理后权重和正确的动态偏移,以便为所有新采样位置获得新的移位纹理采样坐标。因此,求解线性系统的计算很复杂,可能会消耗太多用于移动gpu的alu着色器指令。
[0024]
高阶滤波,如双三次滤波,由于复杂的加权滤波计算的数量较多,更为复杂,并且所有样本的动态权重也不容易计算,因为这涉及高阶多项式的计算。
[0025]
希望开发一种用于渲染高质量软阴影的新方法来克服这些问题。


技术实现要素:

[0026]
根据第一方面,提供了一种用于渲染具有多个像素的图像的图形处理系统,其中,该系统被配置为:针对多个像素中至少一个像素中的各个像素:确定对应于各个像素的多个纹素,每个纹素包括指示纹理空间中的纹理样本值的子像素数据点,并通过依赖于采样位置x对子像素数据点应用滤波函数以形成滤波值来渲染各个像素,其中x是纹理坐标的小数位置;其中,滤波函数是通过将图形处理系统对关于与x等距的多个位置的子像素数据点实现的线性插值函数的输出求和来执行的。
[0027]
这可以允许2d图像应用中更快的阴影滤波,并且可以为软阴影产生平滑的图像质量结果。
[0028]
多个位置各自可以与x间隔0.5的偏移量,该偏移量是沿纹理空间中的每个维度的纹理空间中的子像素数据点的间隔。偏移量可以是+/-0.5。这可以减少渲染图像所需的处理。
[0029]
沿纹理空间中的每个维度的被每个像素覆盖的纹素的数量可以是三的倍数。沿纹理空间中的x、y和z方向中的至少一个方向,被每个像素覆盖的纹素的数量可以是三的倍数。
[0030]
由图形处理系统在(x-0.5)和(x+0.5)处实现的两个线性插值函数的输出之和可以近似等于沿纹理空间中一维整数纹理坐标位置处的三个函数值的线性加权3抽头百分比渐近滤波的加权和。因此,在将1d解决方案扩展到2d图像应用之后,该系统可以允许更快的3
×
3pcf阴影滤波。
[0031]
该系统可以被配置为沿纹理空间中的多个正交方向应用滤波函数。多个位置可以各自沿纹理空间中的一个、两个或三个正交方向与x间隔开。这可以允许该方法应用于一维、二维或三维的pcf滤波。
[0032]
该系统可被配置为以glsl、hlsl和spir-v语言之一或任何其他合适的着色语言实现滤波功能。因此,该系统与许多现代图像处理系统和视频游戏中使用的滤波算法和语言兼容。
[0033]
该系统可以被配置为在单个指令或固定功能硬件单元中实现滤波功能。这可以减少渲染图像所需的处理成本。
[0034]
该系统可以包括纹理高速缓存,该纹理高速缓存被配置为存储处理后的采样结果以供图像中的相邻像素重新使用。这可以进一步减少渲染图像所需的处理。
[0035]
多个像素中的至少一些可以表示图像中对象的阴影。滤波函数可以是pcf滤波函数。滤波函数可以是阴影滤波函数。滤波值可以是滤波阴影值。这可以允许2d图像应用中更快的阴影滤波,并且可以为软阴影产生平滑的图像质量结果。
[0036]
根据第二方面,提供了一种用于渲染具有多个像素的图像的方法,至少一些像素表示所述图像中对象的阴影,其中该方法包括:针对多个像素中至少一个像素中的各个像素:确定对应于各个像素的多个纹素,每个纹素包括指示纹理空间中的纹理样本值的子像素数据点,并通过依赖于采样位置x对子像素数据点应用滤波函数以形成滤波阴影值来渲染各个像素,其中x是纹理坐标的小数位置;
[0037]
其中,滤波函数是通过将图形处理系统对关于与x等距的多个位置的子像素数据点实现的线性插值函数的输出求和来执行的;
[0038]
该方法可以允许更快的阴影滤波,并且可以为软阴影产生平滑的图像质量结果。
[0039]
多个位置可以各自与x间隔0.5的偏移量,该偏移量是纹理空间中的子像素数据点的间隔。该偏移量可以是+/-0.5。这可以减少渲染图像所需的处理。
[0040]
被每个像素所覆盖的纹素的数量可以是三的倍数。沿纹理空间中的x、y和z方向中的至少一个方向,被每个像素所覆盖的纹素的数量可以是三个。因此,该系统可以简化2d中的3
×
3pcf阴影滤波。
[0041]
该方法可以包括沿纹理空间中的多个正交方向应用滤波函数。多个位置可以各自沿纹理空间中的一个、两个或三个正交方向与x间隔开。这可以允许该方法应用于一维、二维或三维的pcf滤波。
[0042]
多个像素中的至少一些可以表示图像中对象的阴影。滤波函数可以是pcf滤波函数。滤波函数可以是阴影滤波函数。滤波值可以是滤波阴影值。这可以允许2d图像应用中更快的阴影滤波,并且可以为软阴影产生平滑的图像质量结果。
[0043]
根据第三方面,提供了一种计算机程序,当由计算机执行时,使该计算机执行上述方法。计算机程序可以被提供在非暂时性计算机可读存储介质上。
附图说明
[0044]
现在将参考附图以示例的方式描述本发明。
[0045]
在附图中:
[0046]
图1示出了没有任何滤波的硬阴影算法的渲染结果。
[0047]
图2a显示了使用2
×
2双线性百分比渐近滤波(pcf)生成软阴影时的渲染结果。
[0048]
图2b示出了对目标uv坐标周围的2
×
2纹素网格进行采样。
[0049]
图3a显示了使用3
×
3双线性百分比渐近滤波(pcf)生成软阴影时的渲染结果。
[0050]
图3b示出了围绕目标uv坐标的3
×
3纹素网格进行采样。
[0051]
图4显示了使用3
×
3双线性pcf的图3a渲染结果的放大图。
[0052]
图5示意性地说明了3
×
3pcf滤波算法(对目标uv坐标周围的3
×
3纹素网格进行采样)。九个样本中的每个的权重由框(即采样占用空间)计算为每个纹素单元中的覆盖区域,框分别被沿x轴和y轴的子纹理偏移[α,β]包于内部。
[0053]
图6示出了通过对要滤波的整数位置(f-1
,f0,f1)处的三个相邻函数值进行加权,在1d(一维)中在位置x处进行3
×
1线性pcf滤波的计算,其中,滤波权重是基于子纹素偏移
计算的。
[0054]
图7示出了一种用于渲染具有多个像素的图像的方法的流程图,至少一些像素表示该图像中对象的阴影。
[0055]
图8显示了图形处理系统的一个示例。
具体实施方式
[0056]
本文描述了一种图形处理系统和方法,例如,可以用于渲染高质量软阴影。
[0057]
这里,渲染指的是生成可见图像的任何形式,例如在计算机屏幕上显示图像、打印或投影。
[0058]
没有任何滤波,阴影贴图纹理的数据样本值为1.0或0.0。结果,最终图像中的渲染阴影显示出强烈的混叠。这是因为如果数据样本值等于1.0,则表示像素完全在阴影之外,而如果为0.0,表示像素完全处于阴影中。
[0059]
滤波后,数据样本值可以是一个浮点数,介于1.0和0.0之间。这是为了实现连续变换,因此可以在最终图像中将像素渲染为软阴影。
[0060]
图像空间中的像素p具有以纹理空间中的x为中心的投影区域,并且在3
×
3pcf中,x具有3
×
3纹素的局部邻域,这是投影区域的占用空间覆盖的九个纹素。将pcf滤波函数应用于这九个纹素以获得滤波值,该滤波值是像素p的最终阴影值。因此,每个纹素指示纹理空间中的纹理样本值。对于每个像素的着色,由于像素位于图像空间中,因此可能需要多个纹素抽头,该图像空间在纹理空间中具有投影占用空间,该纹理空间覆盖多个纹素。在纹理空间中执行滤波。在下面描述的示例中,每个像素的纹素数量在x、y或z(如果存在)的每个方向或维度上为三个。
[0061]
现在将说明本方法在1d中的应用,然后将其扩展到2d以进行软阴影渲染。还可以将该方法扩展到3d(三维),用于3d体数据的3
×3×
3三线性pcf滤波。
[0062]
为不损失一般性,假设连续函数f(x)的样本在整数纹素位置是已知的,并且f(x)需要从这些离散整数位置近似重构为这些离散样本的归一化加权和。
[0063]
分段线性函数重建定义如下。
[0064]
一般的1d线性插值是一种将函数值f
(i+x)
估计为整数网格位置(i和i+1)处已知函数值f(i)和f
(i+1)
的两个抽头的归一化加权和的方法,其中,x∈[0,1],即1》x≥0,且i∈z是整数,x是(i+x)的小数部分。为了简化符号,在以下(fi-1
,fi,f
i+1
)符号中省略i,这些值将仅记为(f-1
,f0,f1)。
[0065]
与一般的1d线性插值类似,1d 3
×
1线性pcf滤波是一种更高级的插值,它计算三个整数网格位置(-1,0和1)处函数值(f-1
,f0,f1)的三个抽头的加权和。
[0066]
这里,1d滤波器的占用空间大小(即,1d采样的占用空间)为2(范围从x-1到x+1),将其被最终结果做除法以进行归一化。
[0067]
图6说明了1d中3
×
1线性pcf滤波的加权和的积分计算。三个整数网格位置(-1,0和1)处的函数值(f-1
,f0,f1)分别由601、602和603处的条形图表示。
[0068]
这里,x是纹理坐标的小数部分(即纹理空间中整数纹理坐标位置之间),f
lin
(x)是两个连续整数位置之间偏移x处硬件线性插值函数(即图形处理系统实现的线性插值函数)的结果。
[0069]
pcf滤波结果可以被计算为三个阴影区域604、605、606的面积之和,其中每个区域604、605、606的面积被计算为由从x-1到x+1的采样占用空间覆盖的每个区域的权重和高度的乘积。
[0070][0071]
参考图6,对于任意偏移x∈[0,1),发现(x-0.5)∈[-0.5,0.5)处的线性插值可以表示为两个整数位置(-1和0)的两个函数值的加权和,以及(x+0.5)∈[0.5,1.5)处的线性差值可以表示为两个整数位置(0和1)的两个函数值的加权和。lerp()是插值函数。这表示为:
[0072]flin
(x-0.5)=lerp(f-1
,f0,x)=(1-x)*f-1
+x*f0=f-1-x*f-1
+x*f0ꢀꢀ
(4)
[0073]flin
(x+0.5)=lerp(f0,f1,x)=(1-x)*f0+x*f1=f0+x*f
1-x*f0ꢀꢀ
(5)
[0074]
将这两项加在一起得到:
[0075]flin
(x-0.5)+f
lin
(x+0.5)=f-1
+f0+x*(f
1-f-1
)=f-1

x*f-1
+f0+x*f1=(1-x)*f-1
+1*f0+x*f1=f
pcf
(x)
ꢀꢀ
(6)
[0076]
或者,等价地,在矩阵运算的符号中:
[0077][0078]
从该推导中可以看出,在1d中采样位置x处的3
×
1pcf滤波结果等于两个位置处的两个一般线性插值函数之和:(x-0.5)和(x+0.5),它们已经作为线性采样纹理指令f
lin
(x)被gpu硬件支持。
[0079]
在2d(二维)中,3
×
3双线性pcf滤波将涉及3
×
3=9个抽头:2d滤波器的占用空间尺寸(即图5中框501所示的2d采样占用空间面积)为2
×
2=4,然后将其被最终结果做除法以进行归一化。
[0080]
如等式(2)所示,用于2d双线性pcf滤波的滤波器是可分离滤波器,这意味着它可以分别沿x和y方向分离为两个一维滤波器。
[0081]
为了简化用于2d渲染的传统方程(2),可以首先沿着x方向应用上面推导的1d方程,然后在获得中间结果之后,可以沿着y方向再次应用1d方程。在矩阵运算的符号中,2d双线性pcf滤波方程可通过以下推导进行简化:
[0082]
[0083][0084]
作为上述推导的结果,可以看出2d采样位置(x,y)处的3
×
3pcf滤波结果等于四个位置处的四个通用2d双线性插值函数的总和,沿两个维度的每个维度到原始2d采样位置的2d偏移量为
±
0.5。这些函数已经作为2d双线性采样纹理指令:f
lin
(x,y)被gpu硬件支持。
[0085]
在3d应用中,如体绘制,沿光线对3d纹理进行采样,并且需要对样本值进行滤波,其中pcf对于实现平滑渲染结果非常有用。
[0086]
在3d中,3
×3×
3三线性pcf滤波将涉及整数网格位置处的3
×3×
3=27个函数值抽头,3d滤波器的占用空间(即3d采样占用空间的体积)为2
×2×
2=8,需要将其被最终结果做除法以进行归一化。
[0087]
3d中的3
×3×
3三线性pcf滤波结果可以表示为27个整数网格位置处的27个函数值的归一化加权和。
[0088]
本文描述的pcf插值方案的3d扩展可以类似于2d情况推导出。因此,对于3d,以下仅给出了该推导的结果:
[0089]fpcf
(x,y,z)=f
lin
(x-0.5,y-0.5,z-0.5)+f
lin
(x-0.5,y-0.5,z+0.5)+f
lin
(x-0.5,y+0.5,z-0.5)+fl
lin
(x-0.5,y+0.5,z+0.5)+f
lin
(x+0.5,y-0.5,z-0.5)+fl
lin
(x+0.5,y-0.5,z+0.5)+fl
lin
(x+0.5,y+0.5,z-0.5)+fl
lin
(x+0.5,y+0.5,z+0.5)
ꢀꢀ
(9)
[0090]
从等式(9)可以得出结论,3d采样位置(x,y,z)处的3
×3×
3pcf滤波结果等于八个位置处的八个通用3d三线性插值函数的总和,沿三个维度的每个维度到原始3d采样位置(x,y,z)的3d偏移量为
±
0.5。此3d三线性插值函数已经作为3d三线性采样纹理指令:f
lin
(x,y,z)被gpu硬件支持。
[0091]
图7总结了一种用于渲染具有多个像素的图像的方法,其中该方法包括,针对多个像素中至少一些像素中的各个像素。该方法包括针对多个像素中至少一个像素中的各个像素的以下步骤。在步骤701,该方法包括确定对应于各个像素的多个纹素,每个纹素包括指示纹理空间中的纹理样本值的子像素数据点。在步骤702,该方法包括通过依赖于所选采样位置x对子像素数据点应用滤波函数以形成滤波值来渲染各个像素,其中x是纹理坐标的小数位置;其中,该滤波函数是通过将图形处理系统对关于与x等距的多个位置的子像素数据点实现的线性插值函数的输出求和来执行的。
[0092]
与使用传统等式(2)的方法相比,使用该方法的一些优点如下所述。
[0093]
在1d中,该方法需要更少的gpu指令来处理tex_instruction(从三个减少到两个)和alu指令(从三次乘法和两次加法到只有两次加法和没有乘法)。
[0094]
与传统等式(2)相比,这种简化的2d等式的好处在于,对于tex_instruction(从9个减少到4个)和alu_instruction(从9+3=12次乘法和6+2=8次加法到只有3次加法和零次乘法),需要更少的gpu指令。该方法还需要更少的寄存器分配,这意味着在运行中调度更多的并发gpu线程。这会导致更快的渲染速度和更少的功耗。
[0095]
本文描述的用于3
×
3双线性pcf的2d方程可用于滤波阴影贴图采样,以获得视频
游戏的高质量软阴影渲染结果。
[0096]
通过用实现本文所描述的方法的着色器替换使用等式(2)的旧片段着色器,可以将渲染方法部署到用于软阴影渲染的着色器中的多个现代视频游戏上。在一些实现方式中,这可能导致平均功耗降低超过30ma,即大约5-10%的gpu功率改进。
[0097]3×3×
3三线性pcf的方法可用于3d应用,如体绘制,其中3d纹理将沿光线被采样,样本值需要被滤波,其中3
×3×
3三线性pcf对于实现平滑体绘制结果非常有用。在tex_instruction(从27次减少到8次)和alu_instruction(从27+9+3=39次乘法和18+6+2=26次加法,减少到只有7次加法和0次乘法)方面,它需要更少的gpu指令。还有更少的寄存器分配,这意味着在运行中调度更多的并发gpu线程。这会导致更快的渲染速度和更少的功耗。
[0098]
本文描述的用于pcf滤波的方法涉及更少的加权计算,特别是对于2d和3d。
[0099]
更少的gpu指令可以导致更长的移动电池寿命,并且对于复杂且苛刻的游戏渲染,也能够减少延迟和提高帧速率。
[0100]
这也允许使用着色器代码实现可能的gpu软件。1d、2d或3d中的方程可以在图形处理系统中通过使用着色语言(例如glsl、hlsl、spir-v或任何其他合适的语言)的几行gpu着色器代码来实现。
[0101]
可以修改gpu的纹理单元(texture unit,tu)模块以使用固定功能硬件通过单个指令而不是着色器代码来实现3
×
3pcf滤波方程。例如,一个isa内在调用可用于完成2d3
×
3pcf滤波。
[0102]
因此,该方法可以通过使用gpu的tu硬件模块内部的固定功能硬件来实现。该硬件功能可以通过单个着色器指令而不是多行着色器代码提供给用户。
[0103]
在一种实现方式中,可以利用纹理高速缓存来存储四粒度的处理后采样结果,以供相邻像素重新使用。此外,也可以使用独立纹理读取(由于优选实现方式中的恒定偏移量为0.5)来执行数据预取,以进一步增强渲染性能。
[0104]
本文描述的方法可以分别针对1d、2d和3d允许更快和更便宜的三角形线性pcf滤波(具有三个纹素的滤波器直径大小),这在纹理采样指令和alu指令方面实现了比传统方法更少的加权滤波计算。对于复杂且苛刻的游戏渲染,这还能够减少延迟和提高帧速率。
[0105]
图8是被配置为执行本文所描述的方法的系统800的示意图。系统800可以在诸如膝上型计算机、平板电脑、智能电话、tv或将在其中处理图形数据的任何其他设备上实现。
[0106]
系统800包括被配置为处理数据的图形处理器801。例如,处理器801可以是gpu。可选地,处理器801可以被实现为在诸如gpu或中央处理单元(central processing unit,cpu)的可编程设备上运行的计算机程序。系统800包括被布置成与图形处理器801通信的存储器802。存储器802可以是非易失性存储器。图形处理器801还可包括高速缓存(图8中未显示),其可用于临时存储来自存储器802的数据。该系统可以包括不止一个处理器和不止一个存储器。存储器可以存储可由处理器执行的数据。处理器可以被配置为根据以非暂时性形式存储在机器可读存储介质上的计算机程序进行操作。计算机程序可以存储用于使处理器以本文描述的方式执行其方法的指令。
[0107]
与传统方法相比,该系统可以允许在移动gpu上以更少的加权滤波计算以更高的性能渲染高质量的3
×
3pcf滤波软阴影。如上所述,该方法可能比以前的方法涉及更少的纹理采样指令和alu计算。
[0108]
尽管上述系统和方法主要针对与阴影渲染相关的应用进行了描述,但是该系统和方法也可以应用于其他类型的图像渲染应用中。
[0109]
申请人在此单独公开了本文所述的每个单独的特征以及两个或多个这样的特征的任何组合,只要这些特征或组合能够根据本领域技术人员的公知常识,作为一个整体基于本说明书实施,而不论这些特征或特征的组合是否解决本文公开的任何问题,并且不限于权利要求的范围。申请人指出,本发明的各方面可以由任何这样的单独特征或特征组合组成。鉴于上述描述,本领域技术人员显然可以在本发明的范围内进行各种修改。

技术特征:
1.一种用于渲染具有多个像素的图像的图形处理系统,其中,所述系统被配置为,针对所述多个像素中至少一个像素中的各个像素:确定对应于所述各个像素的多个纹素,每个纹素包括指示纹理空间中的纹理样本值的子像素数据点;以及通过依赖于所选采样位置x对所述子像素数据点应用滤波函数以形成滤波值来渲染所述各个像素,其中x是纹理坐标的小数位置;其中,所述滤波函数是通过将所述图形处理系统对关于与x等距的多个位置的子像素数据点实现的线性插值函数的所述输出求和来执行的。2.根据权利要求1所述的系统,其中,所述多个位置各自与x间隔0.5的偏移量,所述偏移量是沿所述纹理空间中的每个维度的所述纹理空间中的所述子像素数据点的间隔。3.根据权利要求1或2所述的系统,其中,沿所述纹理空间中的每个维度的被每个像素所覆盖的纹素的数量是三个。4.根据前述权利要求中任一项所述的系统,其中,由所述图形处理系统在(x-0.5)和(x+0.5)处实现的两个线性插值函数的所述输出之和近似等于沿所述纹理空间中的每个维度的整数纹理坐标位置处的三个函数值的线性加权3抽头百分比渐近滤波的加权和。5.根据前述权利要求中任一项所述的系统,其中,所述系统被配置为沿所述纹理空间中的多个正交方向应用所述滤波函数。6.根据前述权利要求中任一项所述的系统,其中,所述多个位置各自沿所述纹理空间中的一个、两个或三个正交方向与x间隔开。7.根据前述权利要求中任一项所述的系统,其中,所述系统被配置为以glsl、hlsl和spir-v语言之一实现所述滤波功能。8.根据前述权利要求中任一项所述的系统,其中,所述系统被配置为在单个指令或固定功能硬件单元中实现所述滤波功能。9.根据前述权利要求中任一项所述的系统,其中,所述系统包括纹理高速缓存,所述纹理高速缓存被配置为存储处理后的采样结果以供所述图像中的相邻像素重新使用。10.根据前述权利要求中任一项所述的系统,其中,所述多个像素中的至少一些像素表示所述图像中对象的阴影。11.一种用于渲染具有多个像素的图像的方法,其中,所述方法包括,针对所述多个像素中至少一个像素中的各个像素:确定对应于所述各个像素的多个纹素,每个纹素包括指示纹理空间中的纹理样本值的子像素数据点;以及通过依赖于所选采样位置x对所述子像素数据点应用滤波函数以形成滤波值来渲染所述各个像素,其中x是纹理坐标的小数位置;其中,所述滤波函数是通过将所述图形处理系统对关于与x等距的多个位置的子像素数据点实现的线性插值函数的所述输出求和来执行的。12.根据权利要求11所述的方法,其中,所述多个位置各自与x间隔0.5的偏移量,所述偏移量是沿所述纹理空间中的每个维度的所述纹理空间中的所述子像素数据点的间隔。13.根据权利要求11或12所述的方法,其中,沿所述纹理空间中的每个维度的被每个像素所覆盖的纹素的数量是三个。
14.根据权利要求11至13中任一项所述的方法,其中,所述方法包括沿所述纹理空间中的多个正交方向应用所述滤波函数。15.根据权利要求11至14中任一项所述的方法,其中,所述多个位置各自沿所述纹理空间中的一个、两个或三个正交方向与x间隔开。16.根据权利要求11至15中任一项所述的方法,其中,所述多个像素中的至少一些像素表示所述图像中对象的阴影。17.一种计算机程序,当由计算机执行时,使所述计算机执行权利要求11至16中任一项所述的方法。

技术总结
一种用于渲染具有多个像素的图像的图形处理系统,其中,所述系统被配置为:针对多个像素中的至少一个像素的各个像素:确定对应于各个像素的多个纹素,每个纹素包括指示纹理空间中的纹理样本值的子像素数据点;和通过依赖于采样位置x对子像素数据点应用滤波函数以形成滤波值来渲染各个像素,其中x是纹理坐标的小数位置;其中,滤波函数是通过将所述图形处理系统对关于与x等距的多个位置的子像素数据点实现的线性插值函数的输出求和来执行的。实现的线性插值函数的输出求和来执行的。实现的线性插值函数的输出求和来执行的。


技术研发人员:刘保权
受保护的技术使用者:华为技术有限公司
技术研发日:2020.04.24
技术公布日:2022/11/1
转载请注明原文地址: https://tieba.8miu.com/read-5847.html

最新回复(0)