1.本公开涉及用于在计算机图形系统内执行纹理滤波的技术。
背景技术:2.在计算机图形学中,纹理化通常用于向待渲染的场景内的对象添加表面细节。纹理通常被存储为图像,可对这些图像进行访问以返回正在处理的像素的颜色值。为了获得像素的纹理颜色值,可确定纹理的多个纹理像素的值。这可以被称为对纹理重采样或对纹理进行采样。然后可以对采样的纹理像素值进行滤波以获得像素的最终纹理像素值。
3.执行重采样的原因是,由于纹理在图像内投影到3d几何上,通常渲染图像的单个像素不能精确映射到纹理的单个纹理像素。如下面更详细地描述的,对于描绘纹理的相对较近视图的纹理像素,每个像素都可以与映射到纹理的相对较小的区域(例如,覆盖零或一个纹理像素)的覆盖区域(footprint)相关联,而对于描绘纹理的相对远处的纹理像素,每个像素可以与映射到纹理的相对较大的区域(例如,覆盖许多(例如,两个或更多个)纹理像素)的覆盖区域相关联。
4.一种执行纹理重采样的方法是通过mip映射。存储为mip映射的纹理包括图像序列,其中每个图像都是基本纹理的分辨率逐渐降低的表示。mip映射用于通过离线执行纹理的一些重采样来提高渲染速度。mip映射100的示意图在图1中示出。图像序列102至108中的每个连续图像是该序列中先前图像的宽度和高度的一半(即,分辨率的一半)。这些图像102至108中的每个图像都可以被称为“mip映射级别”或“细节级别”(lod),并且每个图像都表示相同的基本纹理,但分辨率不同。尽管图1中所示的mip映射级别一般为正方形,但一般不必如此,也不必是二维的。
5.为了使用mip映射渲染图像,可使用三线性滤波。三线性滤波包括两个双线性滤波操作的组合,然后是线性插值(或混合)。为了以特定分辨率(或细节级别)渲染图像,双线性滤波用于从两个最接近的mip映射级别中的每一个mip映射级别(即,分辨率比所要求的分辨率高的级别,以及分辨率比所要求的分辨率低的级别)重构连续图像,然后线性插值(或混合)用于产生处于中间的所需分辨率的图像。
6.例如,再次参考图1,为了在空间位置(x,y)处以高于图像104的分辨率(res
104
)但低于图像106的分辨率(res
106
)的分辨率(res)对mip映射进行采样,滤波(例如,双线性插值)用于根据两个图像(或mip映射级别)104和106中的每一个图像重构空间位置(x,y)处的相应的纹理值,然后通过在两个重构纹理值之间进行线性插值来生成所需分辨率(res)的结旋纹理值。
7.尽管对mip映射的纹理进行三线性滤波可以帮助减少渲染图像中的视觉伪影,但仍然存在对成角度倾斜远离观察者(即,远离图像平面)的表面的纹理欠采样的缺点。这种欠采样通常将表现为图像模糊,因为实施方式保守地选择较低分辨率的重构来避免出现更多令人不快的混叠伪影(诸如高频闪烁)。
8.为了解决此问题,可执行各向异性纹理滤波。各向异性纹理滤波识别出纹理的采
样率,该采样率取决于从屏幕空间(其中描绘了图像并且定义了像素坐标)到纹理空间(其中描绘了纹理并且定义了纹理像素坐标)的映射,并且是屏幕空间中行进方向的函数。换句话讲,最佳纹理采样率在屏幕空间中沿不同的行进方向或轴可能不同。在这种情况下,屏幕空间和纹理空间之间的映射可以说成是各向异性的。各向异性映射的一个示例是水平面附近的平面纹理表面的3d投影,或者是将纹理施加于场景中与视点成显著大的角度的表面的任何其他情况。
9.对于各向异性纹理映射,映射到屏幕空间中的像素的纹理空间中的采样内核沿纹理空间中的特定轴线延长,该轴线的方向取决于屏幕空间和纹理空间之间的映射。这在图2中示意性地示出。
10.图2示出了由具有在图像空间中定义的坐标的像素形成的图像200,以及由具有在纹理空间中定义的坐标的纹理像素形成的纹理202。图像200包括对象204,该对象的表面细节由纹理202指定,即,纹理202映射到对象204的表面。为了清楚起见,已经省略了图像200内的其余对象。对象204在图像200内处于倾斜视角。因此,在映射到纹理空间的情况下,未保持图像200内的纹理映射像素的覆盖区域的形状。数字206表示圆形的图像空间中的像素覆盖区域,并且数字208表示纹理像素空间中对应的像素覆盖区域。可以看出,覆盖区域在纹理空间中已经延长以形成椭圆,使得它是各向异性的。一般来讲,在图像空间中具有圆形覆盖区域的像素到纹理空间的映射可以用椭圆近似,只要纹理映射本身可以通过像素原点的仿射映射近似即可。在此,需注意,关于像素使用的术语“覆盖区域”不一定指显示装置中像素的物理形状,而可能是指用于构成该像素的最终像素值的像素滤波器的面积。因此,可以说像素在纹理空间中的覆盖区域相当于该像素在纹理空间中的采样内核;即,纹理空间中的覆盖区域标识待采样和待滤波的纹理像素以形成像素的纹理颜色值。
11.尽管上面已经在投影的上下文中说明了具有椭圆形覆盖区域的纹理映射的近似,对于不对应于典型投影的纹理映射,诸如对于可以在能够定义任意映射的现代可编程着色器体系结构内构建的那些纹理映射,该近似可能仍然有效。
12.可以理解的是,纹理滤波的质量将取决于用于执行滤波的采样内核。在各向异性滤波的情况下,滤波的质量将取决于纹理空间中采样内核的尺寸和取向;例如,如旋所使用的采样内核的取向与纹理映射的各向异性方向不紧密对准,则纹理可能因此在一个方向上过采样,并且在另一个方向上欠采样。
技术实现要素:13.提供本发明内容是为了介绍在以下详细描述中进一步描述的一些概念。本发明内容不旨在标识所要求保护的主题的关键特征或必要特征,也不旨在用于限制所要求保护的主题的范围。
14.提供一种执行各向异性纹理滤波的方法,以在屏幕空间中的采样点处施加纹理,该方法包括:
15.计算纹理滤波器参数,以用于配置滤波器以对采样点执行纹理滤波;以及
16.使用具有由纹理滤波器参数确定的纹理空间中的覆盖区域的滤波内核对采样点的纹理进行滤波,其中计算纹理滤波器参数的步骤包括:
17.生成第一对屏幕空间基向量和第二对屏幕空间基向量,该第一对屏幕空间基向量
和该第二对屏幕空间基向量相对于彼此旋转;
18.在屏幕空间和纹理空间之间的映射的局部近似的情况下,计算与变换到纹理空间的第一对屏幕空间基向量和第二对屏幕空间基向量相对应的第一对纹理空间基向量和第二对纹理空间基向量;
19.基于针对多对纹理空间基向量中的至少一对纹理空间基向量的向量大小之差,确定第一对屏幕空间基向量和第二对屏幕空间基向量中所选择的一对屏幕空间基向量与映射的局部近似的指示映射的最大比例因子和最小比例因子的屏幕空间主轴之间的角位移;
20.使用所确定的角位移和所选择的一对屏幕空间基向量来生成纹理空间主轴,该纹理空间主轴包括与映射的最大比例因子相关联的长轴和与映射的最小比例因子相关联的短轴;以及
21.使用长轴和短轴来计算纹理滤波器参数。
22.使用所确定的角位移和所选择的一对屏幕空间基向量来生成纹理空间主轴的步骤可包括,将所选择的一对屏幕空间基向量旋转所确定的角位移以生成屏幕空间主轴,以及将屏幕空间主轴变换到纹理空间以生成纹理空间主轴。
23.第二对屏幕空间基向量可相对于第一对屏幕空间基向量旋转45度。
24.可选择相对于屏幕空间主轴具有较小的角位移的一对屏幕空间基向量作为所选择的一对屏幕空间基向量。
25.可选择与该纹理空间对的向量之间在长度上具有最大差异的一对纹理空间基向量相对应的一对屏幕空间基向量作为所选择的一对屏幕空间基向量。
26.确定角位移可包括:
27.比较纹理空间基向量的大小之差,以确定每对屏幕空间基向量与屏幕空间主轴之间的角位移;以及
28.选择相对于屏幕空间主轴的角位移较小的屏幕空间基向量作为所选择的对。
29.可根据等式确定第一对屏幕空间基向量x1,y1与屏幕空间主轴之间的角位移,并且第二对屏幕空间基向量x2,y2与屏幕空间主轴之间的角位移可根据等式来确定,其中θ1是第一对屏幕空间基向量与屏幕空间主轴之间的角位移,θ2是第二对屏幕空间基向量与屏幕空间主轴之间的角位移,x1和y1是屏幕空间基向量x1和y1的对应的纹理空间向量对,并且x2和y2是屏幕空间基向量x2和y2的对应的纹理空间向量对。
30.确定角位移可包括:
31.针对每对纹理空间基向量,计算该对向量之间的大小之差;
32.选择与在该对的向量之间的大小上具有最大差值的一对纹理空间基向量相对应的屏幕空间基向量作为所选择的对;以及
33.确定仅在所选择的一对屏幕空间基向量和屏幕空间主轴之间的角位移。
34.比较步骤可包括:
35.标识纹理空间基向量对,该对纹理空间基向量中的任一个基向量的长度比另一个纹理空间基向量对的两个基向量的长度长或短;以及
36.选择与所标识的纹理空间基向量对相对应的屏幕空间基向量作为所选择的对。
37.当第一对屏幕空间基向量x1,y1是所选择的屏幕空间基向量对时,可根据等式来确定角位移,并且当第二对屏幕空间基向量x2,y2为所选择的屏幕空间基向量对时,可根据等式来确定角位移,其中θ是所选择的一对屏幕空间基向量和屏幕空间主轴之间的角位移,x1和y1是屏幕空间基向量x1和y1的对应的纹理空间基向量对,并且x2和y2是屏幕空间基向量x2和y2的对应的纹理空间基向量对。
38.可根据屏幕空间中采样点的2
×
2块的纹理坐标的有限差分生成第一对纹理空间基向量,第一对纹理空间基向量的每个基向量由2
×
2块的对角采样点的纹理坐标差计算得出。
39.第二对屏幕空间基向量可根据第一对纹理空间基向量沿屏幕空间中采样点的2
×
2块的水平和垂直方向的有限差分生成。
40.使用所确定的角位移和所选择的一对屏幕空间基向量来生成纹理空间主轴的步骤可包括:
41.确定将所选择的一对屏幕空间基向量旋转到屏幕空间主轴上的旋转方向;
42.计算:
[0043][0044][0045]
其中ρ
minor
是纹理空间短轴,ρ
major
是纹理空间长轴,θ是所选择的屏幕空间基向量和屏幕空间主轴之间的角位移,如旋所选择的基为x1,y1,则ρ
min
,ρ
max
∈x1,y1,其中如旋|x1|2<|y1|2,则ρ
min
=x1,ρ
max
=y1,并且如旋|x1|2≥|y1|2;,则ρ
min
=y1,ρ
max
=x1并且如旋所选择的基为x2,y2,则ρ
min
,ρ
max
∈x2,y2,其中如旋|x2|2<|y2|2,则ρ
min
=x2,ρ
max
=y2并且如旋|x2|2≥|x2|2,则ρ
min
=y2,ρ
max
=x2。
[0046]
计算纹理滤波器参数的步骤可包括:
[0047]
计算细节级别(lod)参数λ,该细节级别参数指示针对采样点待滤波的纹理的mip映射级别;以及
[0048]
计算各向异性lod参数μ,该各向异性lod参数指示在lod参数λ所指示的mip映射级别中滤波器内核的覆盖区域。
[0049]
可使用长轴和短轴来计算lod参数λ。
[0050]
可使用长轴来计算各向异性lod参数μ。
[0051]
计算lod参数λ的步骤可包括对中间lod参数施加限制,并且计算各向异性lod参数μ的步骤可包括将相同的限制施加于中间各向异性lod参数。
[0052]
可通过对相应的中间参数执行相同的一组计算来计算lod参数λ和中间各向异性lod参数μ,使用长轴和短轴来计算参数λ的中间参数,以及使用长轴来计算各向异性参数μ的中间参数。
[0053]
提供一种对屏幕空间中的采样点执行纹理滤波的方法,包括:
[0054]
确定是否满足指示待执行各向同性滤波的一组各向异性旁路条件中的至少一个各向异性旁路条件;以及
[0055]
仅当所述一组一个或多个各向异性旁路条件都得不到满足时,才对采样点执行任一项前述权利要求所述的各向异性纹理滤波的方法。
[0056]
该方法还可以包括当满足一组各向异性旁路条件中的至少一个各向异性旁路条件时执行各向同性纹理滤波的方法。
[0057]
该组各向异性旁路条件可包括以下项中的一者或多者:(i)各向异性滤波被禁用;(ii)屏幕空间和纹理空间之间的映射的各向异性程度小于指定的第一阈值;(iii)屏幕空间和纹理空间之间的映射的各向同性程度高于指定的第二阈值;(iv)相对于长纹理空间主轴和短纹理空间主轴的长度平方的总和的长纹理空间主轴的长度平方位于指定的上限和下限之间;(v)所确定的角位移的大小小于指定的第三阈值;(vi)短纹理空间轴和长纹理空间轴的大小之差小于指定的第四阈值。
[0058]
各向异性程度可根据形成一对屏幕空间基向量的向量的向量长度的比较来确定。
[0059]
各向同性纹理滤波的方法可包括:
[0060]
生成一对屏幕空间基向量;
[0061]
选择与所生成的一对屏幕空间基向量相对应的纹理空间基向量,并且将所选择的纹理空间向量设置为主轴;
[0062]
根据主轴来计算纹理滤波器参数;以及
[0063]
使用具有由纹理滤波器参数确定的纹理空间中的覆盖区域的滤波内核对采样点的纹理进行滤波。
[0064]
计算作为各向同性纹理滤波的一部分的纹理滤波器参数的步骤可包括:
[0065]
计算细节级别(lod)参数λ,该细节级别参数指示针对采样点待滤波的纹理的mip映射级别。
[0066]
可使用长轴和短轴来计算lod参数λ,并且计算lod参数λ的步骤包括对中间lod参数施加限制(clamping)。
[0067]
提供一种配置为执行纹理滤波以在屏幕空间中的采样点处施加纹理的设备,该设备包括:
[0068]
基计算单元,该基计算单元被配置为:
[0069]
生成第一对屏幕空间基向量和第二对屏幕空间基向量,该第一对屏幕空间基向量和该第二对屏幕空间基向量相对于彼此旋转;
[0070]
在屏幕空间和纹理空间之间的映射的局部近似的情况下,计算与变换到纹理空间的第一对屏幕空间基向量和第二对屏幕空间基向量相对应的第一对纹理空间基向量和第二对纹理空间基向量;以及
[0071]
基于针对多对纹理空间基向量中的至少一对纹理空间基向量的向量大小之差,确定第一对屏幕空间基向量和第二对屏幕空间基向量中所选择的一对屏幕空间基向量与映射的局部近似的指示映射的最大比例因子和最小比例因子的屏幕空间主轴之间的角位移;
[0072]
主轴计算单元,该主轴计算单元被配置为:
[0073]
使用所确定的角位移和所选择的一对屏幕空间基向量来生成纹理空间主轴,该纹
理空间主轴包括与映射的最大比例因子相关联的长轴和与映射的最小比例因子相关联的短轴;
[0074]
滤波器参数单元,该滤波器参数单元被配置为使用长轴和短轴来计算纹理滤波器参数;以及
[0075]
纹理滤波器单元,该纹理滤波器单元被配置为使用具有由所计算的纹理滤波器参数所确定的纹理空间中的覆盖区域的滤波内核来对采样点执行各向异性纹理滤波。
[0076]
提供一种配置为执行纹理滤波以在屏幕空间中的采样点处施加纹理的设备,该设备包括:
[0077]
基计算单元;
[0078]
主轴计算单元;
[0079]
滤波器参数单元;以及
[0080]
纹理滤波器单元;
[0081]
其中基计算单元包括旁路检测模块,该旁路检测模块被配置为确定是否满足一组一个或多个各向异性旁路条件中的至少一个各向异性旁路条件;设备被配置为当所述一组各向异性旁路条件都得不到满足时,执行各向异性滤波的方法,该方法包括:
[0082]
在基计算单元处:
[0083]
生成第一对屏幕空间基向量和第二对屏幕空间基向量,该第一对屏幕空间基向量和该第二对屏幕空间基向量相对于彼此旋转;
[0084]
在屏幕空间和纹理空间之间的映射的局部近似的情况下,计算与变换到纹理空间的第一对屏幕空间基向量和第二对屏幕空间基向量相对应的第一对纹理空间基向量和第二对纹理空间基向量;以及
[0085]
基于针对多对纹理空间基向量中的至少一对纹理空间基向量的向量大小之差,确定第一对屏幕空间基向量和第二对屏幕空间基向量中所选择的一对屏幕空间基向量与映射的局部近似的指示映射的最大比例因子和最小比例因子的屏幕空间主轴之间的角位移;
[0086]
在主轴计算单元处:
[0087]
使用所确定的角位移和所选择的一对屏幕空间基向量来生成纹理空间主轴,该纹理空间主轴包括与映射的最大比例因子相关联的长轴和与映射的最小比例因子相关联的短轴;
[0088]
在滤波器参数单元处:
[0089]
使用长轴和短轴来计算纹理滤波器参数;以及
[0090]
在纹理滤波器单元处:
[0091]
使用具有由所计算的纹理滤波器参数所确定的纹理空间中的覆盖区域的滤波内核来对采样点执行各向异性纹理滤波;
[0092]
设备被进一步配置为当满足一组各向异性旁路条件中的至少一个各向异性旁路条件时,执行各向同性滤波的方法,该方法包括:
[0093]
在基计算单元处:
[0094]
生成一对屏幕空间基向量;
[0095]
选择与所生成的一对屏幕空间基向量相对应的纹理空间基向量,并且将所选择的纹理空间向量设置为主轴;
[0096]
在滤波器参数单元处:
[0097]
根据主轴来计算纹理滤波器参数;以及
[0098]
在纹理滤波器单元处:
[0099]
使用具有由纹理滤波器参数确定的纹理空间中的覆盖区域的滤波内核对采样点的纹理进行滤波。
[0100]
该组一个或多个各向异性旁路条件可包括以下项中的一者或多者:(i)各向异性滤波被禁用;(ii)屏幕空间和纹理空间之间的映射的各向异性程度小于指定的第一阈值;(iii)屏幕空间和纹理空间之间的映射的各向同性程度高于指定的第二阈值;(iv)相对于长纹理空间主轴和短纹理空间主轴的长度平方的总和的长纹理空间主轴的长度平方位于指定的上限和下限之间;(v)所确定的角位移的大小小于指定的第三阈值;(vi)短纹理空间轴和长纹理空间轴的大小之差小于指定的第四阈值。
[0101]
旁路检测模块可被配置为根据形成一对屏幕空间基向量的向量的长度的比较来确定是否满足第一旁路条件。
[0102]
滤波器参数单元可被配置为当所述一组各向异性旁路条件都得不到满足时:
[0103]
通过对相应的中间参数执行相同的一组计算来计算(i)指示针对采样点待滤波的纹理的mip映射级别的细节级别(lod)参数λ,以及(ii)指示在lod参数λ所指示的mip映射级别中滤波器内核的覆盖区域的各向异性lod参数μ。
[0104]
滤波器参数单元被进一步配置为在满足所述一组各向异性旁路条件中的至少一个各向异性旁路条件的情况下:
[0105]
通过对中间参数执行相同的一组计算,可计算指示针对采样点待滤波的纹理的mip映射级别的细节级别(lod)参数λ。
[0106]
该设备可以体现在集成电路上的硬件中。可提供一种在集成电路制造系统处制造该设备的方法。可提供一种集成电路定义数据集,该集成电路定义数据集在集成电路制造系统中被处理时配置该系统以制造设备。可提供一种非暂态计算机可读存储介质,该非暂态计算机可读存储介质上存储有集成电路的计算机可读描述,该计算机可读描述在集成电路制造系统中被处理时致使集成电路制造系统制造设备。
[0107]
可提供一种集成电路制造系统,包括:
[0108]
非暂态计算机可读存储介质,其上存储有计算机可读集成电路描述,该描述对设备进行描述;
[0109]
布局处理系统,该布局处理系统被配置为处理集成电路描述,以便生成体现设备的集成电路的电路布局描述;以及
[0110]
集成电路生成系统,该集成电路生成系统被配置为根据电路布局描述来制造设备。
[0111]
可以提供用于执行如本文所述的方法的计算机程序代码。可以提供其上存储有计算机可读指令的非暂态计算机可读存储介质,当在计算机系统处执行时,所述计算机可读指令使计算机系统执行如本文所述的方法。
附图说明
[0112]
参考附图通过示例的方式描述本发明。在附图中:
[0113]
图1示出了mip映射的示意图。
[0114]
图2示出了屏幕空间和纹理空间之间的采样内核映射的示意图。
[0115]
图3示出了屏幕空间中像素覆盖区域到其纹理空间中的覆盖区域的映射,示出了变换的主轴的近似。
[0116]
图4示出了根据本发明的实施方案的被配置为执行纹理滤波的纹理滤波单元的示例。
[0117]
图5是根据本发明实施方案的用于执行各向异性纹理滤波的方法的步骤的流程图。
[0118]
图6示出了根据本发明的实施方案的屏幕空间向量到纹理空间的映射,示出了变换的主轴的计算。
[0119]
图7示出了采样点的2
×
2块的对角元素的有限差分。
[0120]
图8示出了被配置为执行各向异性和各向同性纹理滤波的纹理滤波单元的示例。
[0121]
图9是用于执行实现旁路条件的纹理滤波的步骤的流程图,使得能够省略主轴计算的步骤。
[0122]
图10是集成电路制造系统的示例。
[0123]
图11比较了各向异性滤波和各向同性滤波的性能。
具体实施方式
[0124]
通过示例的方式给出以下描述,以使本领域的技术人员能够制造和使用本发明。本发明不限于本文中描述的实施方案,并且对所公开的实施方案的各种修改对于所属领域的技术人员而言将是显而易见的。仅通过示例的方式描述实施方案。在下文中,相同的附图标记表示相同的部件。
[0125]
屏幕空间中采样点的屏幕空间与纹理空间之间的映射(即,屏幕空间坐标与纹理空间坐标之间的映射)可被近似为仿射变换。仿射近似本身可以由纹理空间坐标相对于屏幕空间坐标的偏导向量来构成。在屏幕空间和纹理空间之间的仿射近似下保持正交性的一组正交向量(即,一对基向量)被称为仿射变换的主轴。因此,主轴可以指屏幕空间(在本文中被称为屏幕空间主轴)或纹理空间(在本文中被称为纹理空间主轴)中的向量。
[0126]
主轴包括短轴和长轴。短轴是具有最小关联比例因子的映射的主轴,并且长轴是具有最大关联比例因子的映射的主轴。换句话讲,主轴指示屏幕空间和纹理空间之间的映射的最大比例因子和最小比例因子。换句话讲,主轴指示最大采样率和最小采样率及其相关联的方向,其中长轴指示最大采样率及其相关联的方向,并且短轴指示最小采样率及其相关联的方向。
[0127]
如上所述,在屏幕空间中采样的具有圆形覆盖区域的点(例如,像素)通常在纹理空间中具有椭圆形覆盖区域,只要可以通过像素原点处的仿射映射来近似纹理映射本身即可。为了获得高质量的纹理滤波结旋,屏幕空间和纹理空间之间映射的最大比例因子和最小比例因子应该分别为纹理空间中椭圆形覆盖区域的长轴和短轴,例如,如directx(rtm)和vulkan(rtm)规范中所指定。换句话讲,椭圆形覆盖区域的长轴应当指示最大采样率和相关联的方向,并且椭圆形覆盖区域的短轴应当指示最小采样率和相关联的方向。
[0128]
因此,可以理解,期望准确地计算屏幕空间和纹理空间之间的变换的主轴,以准确
地确定纹理空间中的采样内核以执行准确的纹理滤波。
[0129]
图3示出了一种近似主轴的方法。
[0130]
在303处示出了屏幕空间301中的点p(例如,像素)的示例性圆形采样覆盖区域。屏幕空间坐标表示为x和y。屏幕空间中p点的覆盖区域映射到纹理空间305中的椭圆307。纹理空间坐标表示为u和v。
[0131]
在这种近似的情况下,假定屏幕空间303和纹理空间305之间的变换的屏幕空间主轴沿屏幕空间的水平方向和垂直方向放置,由向量x1和y1表示。在从纹理空间坐标相对于屏幕空间坐标的偏导数生成对应的纹理空间向量x1和y1的情况下,长轴被认为是纹理空间305中的向量中的较大者(在这种情况下为向量y1)。偏导向量可以被写成(对于二维屏幕空间和纹理空间):
[0132][0133][0134]
其中x1是水平偏导向量,并且y1是垂直偏导向量。
[0135]
在这种近似的情况下,可以根据长轴是沿屏幕空间的垂直方向还是水平方向放置来预先计算和提供变换后的纹理空间主轴。这种方法可以避免计算真实主轴。然而,这种近似只能在两种情况下生成正确的纹理空间主轴(并且因此生成正确的滤波内核):(1)当真实主轴实际上与屏幕空间的水平轴线和垂直轴线对准时;(2)当纹理映射为各向同性时,在所有方向上的采样率因此都是相同的(即,采样点在纹理空间中的覆盖区域是圆形的)。
[0136]
然而,一般来讲,这种近似将不会生成屏幕空间和纹理空间之间映射的真实主轴。如参考图3可以理解的,这样的效旋是纹理空间中预先计算的短轴将高估映射的最小比例因子,并且预先计算的长轴将低估映射的最大比例因子。在图3中,向量x1是与屏幕空间向量x1相对应的纹理空间基向量,并且向量y1是与屏幕空间向量y1相对应的纹理空间基向量。在该示例中,x1被视为屏幕空间短轴,并且y1被视为屏幕空间长轴。因此,向量x1是对纹理空间短轴的近似,并且向量y1是对纹理空间主轴的近似。虚线309表示真实短轴的方向,并且虚线311表示真实长轴的方向。可以看出,任何不位于真实短轴上的短轴近似都将高估最小比例因子(短轴近似比真实短轴长),而任何不位于真实长轴上的长轴近似都将低估最大比例因子(长轴近似比真实长轴短)。这可导致生成纹理空间滤波内核,该纹理空间滤波内核沿长轴和短轴执行的纹理滤波不充分,从而可能导致渲染质量较差的图像。
[0137]
本公开涉及用于执行纹理滤波的方法,该方法对于屏幕空间坐标和纹理坐标之间的各向异性映射,使用根据更准确地构成的主轴计算出的滤波内核。通过更准确地计算主轴,可生成纹理滤波内核,该纹理滤波内核沿长轴和短轴的方向执行更充分的采样。在本文所述的一组示例中,主轴由两对屏幕空间基向量构成。如下面将更详细说明的,这意味着用于配置纹理滤波器的细节级别(lod)计算可以从更准确的主轴中得出,所述主轴根据两组更简单的lod计算构成,每组采用一组屏幕空间基向量。如旋纹理滤波器的输出是各向同性的,例如由于各向异性纹理滤波被禁用,因此将纹理映射确定为各向同性(或近似于各向同性),或者由于因可用mip映射级别范围的限制而导致的滤波限制,则可以方便地实现高效
的架构实施方式,该实施方式利用两个可能的lod计算集合中的单个集合。换句话讲,可根据两组相似的lod计算执行具有提高的结旋准确度和质量的各向异性纹理滤波,每组类似的lod计算相当于针对各向同性滤波操作执行的lod计算。
[0138]
现在将在实现mip映射的纹理滤波系统的上下文中描述本公开。应当理解,这仅是出于说明的目的,并且本文所述的技术可以同样地在不实现mip映射的纹理滤波系统中实现。
[0139]
图4示出了被配置为对屏幕空间中的采样点执行各向异性纹理滤波的纹理滤波器401的示例。采样点例如可以是像素。纹理滤波器401用于各向异性地滤波纹理,以返回屏幕空间中的采样点的一个或多个纹理值。在该示例中,纹理滤波器401实现mip映射,并且通过使用各向异性纹理滤波内核首先在所需lod之上和之下的两个相邻mip映射级别(即,两个相邻细节级别(lod))中执行纹理滤波,从而对所需细节级别(lod)执行纹理滤波。然后可以在两个经滤波的lod之间执行线性插值,以返回期望的中间lod处的纹理颜色值。使用所构成的主轴来确定各向异性纹理滤波内核。
[0140]
纹理滤波器401包括基计算单元403、主轴计算单元405、滤波器参数单元407,以及纹理滤波器单元409。在一些实施方式中,单元403至409中的每一个单元可以被实现为单独的或不同的硬件单元。
[0141]
现在将参考图5的流程图来描述纹理滤波器401对屏幕空间中的采样点纹理滤波的操作。
[0142]
在步骤501处,纹理滤波器401计算屏幕空间中的采样点p的纹理滤波器参数。由于采样点是根据屏幕空间坐标指定的,因此将其表示为向量。纹理滤波器参数是根据屏幕空间和由两对屏幕空间基向量构成的纹理空间之间的映射主轴来计算的。纹理滤波器参数用于配置用于各向异性地对纹理进行滤波的纹理滤波器(例如,构成纹理滤波内核)。纹理滤波器参数可用于构成用于多个细节级别的滤波内核。在步骤503处,滤波器单元409使用根据滤波参数确定的滤波内核对屏幕空间中的采样点进行纹理滤波。在实现了mip映射的该示例中,可在两个相邻的lod处对纹理进行滤波,其中根据在步骤501处确定的滤波参数来确定用于每个lod的内核。然后可以对从这些滤波操作生成的中间滤波结旋进行插值或混合,以计算位于mip映射的两个相邻lod之间的所需lod的滤波结旋(例如,纹理颜色)。
[0143]
现在将更详细地解释计算纹理滤波器参数的步骤501。
[0144]
在步骤505处,生成第一对屏幕空间基向量和第二对屏幕空间基向量。该步骤由基计算单元403执行。
[0145]
第一对基向量被表示为x1和y1,并且第二对基向量被表示为x2和y2。每对屏幕空间基向量中的向量彼此正交;即,x1和y1彼此正交,并且x2和y2彼此正交。第一对和第二对基向量相对于彼此旋转,并且也可以具有相反的取向(即,x2和y2的角色进行互换),但是共享共同的原点。在本文的示例中,第一对和第二对基向量在屏幕空间中彼此相对旋转45度(π/4弧度)。
[0146]
第一对和第二对基向量在图6中被示出为在通常以601表示的屏幕空间内。采样点p的覆盖区域在603处示出。屏幕空间坐标(例如,像素坐标)分别表示为“x”和“y”。基向量对于要对其执行纹理滤波的采样点p是局部的。在本文所示的示例中,屏幕空间基向量以点p作为其原点,但这不是必须的。在其他示例中,基向量可以源自在点p局部的点,例如(沿水
平和/或垂直方向)在点p的指定数量的采样点内。
[0147]
可根据相对于在采样点p局部的屏幕空间坐标的纹理空间坐标的近似偏导向量来生成第一对纹理空间基向量x1,y1。这些偏导数表示对屏幕空间601(其中采样点使用屏幕空间坐标“x”和“y”定义)和纹理空间605(其中纹理通过纹理坐标“u”和“v”寻址)之间的映射的局部仿射近似。换句话讲,纹理映射的仿射近似可根据偏导向量来构成。
[0148]
可通过纹理样本坐标的2
×
2块的有限差分来近似偏导向量。这在图7中示出。块702是在采样点p局部的屏幕空间中的采样点(例如,像素)的2
×
2块。采样点p可以例如是该块内的采样点中的一个采样点。该块包括左上方采样点704、右上方采样点706、左下方采样点708以及右下方采样点710。每个采样点都具有其屏幕空间坐标,并且映射到纹理空间605中的对应的纹理坐标。根据与屏幕空间中的块702的对角采样点704至710相对应的纹理坐标中的差来计算偏导向量(因此,纹理空间基向量x1,y1)。根据与屏幕空间中的块702的各个对角采样点相对应的纹理空间中的纹理坐标的差来计算每个基向量x1和y1。在该示例中,根据与屏幕空间中的左上方采样点704和右下方采样点710相对应的纹理坐标之间的差来计算基向量x1(即,对应于采样点704的纹理坐标与对应于采样点710的纹理坐标之间的差),并且根据对应于右上方采样点706和左下方采样点708的纹理坐标之间的差(即,对应于采样点706的纹理坐标与对应于采样点708的纹理坐标之间的差)来计算基向量y1。
[0149]
第二对屏幕空间基向量x2和y2也在图7中示出,相对于基向量对x1,y1旋转45度。
[0150]
基计算单元403可通过对第一对纹理空间基向量x2,y2执行有限差分来生成第二对纹理空间基向量x1,y1。特别地,单元403可以沿水平方向和垂直方向对第一对基向量执行有限差分。这生成基向量对x2,y2,其屏幕空间对应物x2,y2相对于第一基向量对x1,y1旋转45度。
[0151]
以这种方式构成基向量对可提供更高质量的有限差分方案,而不会增加每个基的计算成本。通过根据对角线采样点构成第一对基向量,然后对这些向量进行有限差分以生成第二对基向量,将产生在水平和垂直方向上的纹理坐标的差,这些差在2
×
2块702的中心附近平衡。这相当于平均块702的顶部和底部行以及左侧和右侧列的差,但是可以较低的处理成本来执行。相反,例如,如旋将采样点706和704之间的纹理坐标的差用于一个基向量,并且将采样点704和708之间的纹理坐标的差用于另一个基向量(这是directx(rtm)和vulkan(rtm)标准中的默认规定),则基向量(以及纹理映射的仿射近似)将偏向左上方采样点704。此外,如旋以针序方式计算基向量,则可将第一计算的输出基数用作第二计算的输入,从而使两个计算都可以由相同的硬件单元执行。换句话讲,计算单元403可执行第一差分计算以生成第一对基向量,然后可将这些向量作为输入反馈给计算单元403以执行第二类似的差分操作以生成第二对基向量。因此,与directx(rtm)和vulkan(rtm)标准中默认规定的方法相比,无需附加的硬件成本即可生成更高质量的梯度近似。
[0152]
根据本文所述的原理渲染的图像包括一组采样点,为了产生高质量的重构,使用(一组)具有可与采样点的局部密度成反比的支持(覆盖区域)的适当内核来生成该组采样点。渲染图像通常是规则的矩形阵列,因此通常可以将内核覆盖区域假定为均匀且圆形。原则上,屏幕空间采样内核可以是椭圆形的(例如,以便更频繁地垂直于几何界面采样),在这种情况下,可执行进一步的中间映射以在正交屏幕空间向量和纹理空间向量之间进行转换,以实现各向异性的附加层。
[0153]
尽管上述有限差分方案可能是有利的,但应当理解,可以使用其他有限差分方案来生成纹理空间基向量x1,y1,例如使用采样点的2
×
2块的列和行,而不是对角线。
[0154]
再次参考图5,在步骤507处,基计算单元403计算分别与第一对屏幕空间基向量和第二对屏幕空间基向量相对应的第一对纹理空间基向量和第二对纹理空间基向量。纹理空间基向量是使用局部纹理映射变换到纹理空间的屏幕空间基向量。
[0155]
基计算单元403使用纹理映射的局部近似将第一对屏幕空间基向量x1,y1变换到纹理空间(即,屏幕空间中在采样点p局部的点和纹理空间之间的映射近似)。
[0156]
一般来讲,在仿射近似的情况下,屏幕空间中围绕点p的向量x到纹理空间的映射可以写成:
[0157]
t(p+x)-t(p)=t(ρ+ax1+by1)-t(ρ)=ax1+by1ꢀꢀꢀ
(3)
[0158]
其中t是从屏幕空间到纹理空间的纹理映射,并且x1,y1是与屏幕空间基向量x1,y1相对应的纹理空间向量。
[0159]
基计算单元403根据以下等式从屏幕空间基向量x1,y1计算纹理空间向量x1,y1:
[0160][0161]
基计算单元403可以类似地根据以下等式将第二对屏幕空间向量x2,y2变换到纹理空间,以生成对应的纹理空间向量x2,y2:
[0162][0163]
替代地,使用等式(3)并且知道向量x2,y2相对于向量x1,y1旋转了45度(即,π/4弧度),基计算单元403可根据等式从向量x1,y1计算纹理空间向量x2,y2:
[0164][0165]
等式(6)是分别作为x1和y1的45度旋转的基向量x2和y2的表达式。在一些实施方式中,基计算单元403可选择避免通过来显式缩放等式(6)中的每个加法项,而是跟踪该缩放因子,在这种情况下,可以在随后的导出表达式中以降低的成本对其进行评估。
[0166]
在步骤509处,主轴计算单元405确定所选择的一对屏幕空间基向量和屏幕空间主轴之间的角位移。
[0167]
再次参考图6,屏幕空间主轴表示为r1和r2。主轴与第一对基向量之间的角位移被表示为θ1。为了清楚起见,未示出主轴与第二对基向量之间的角位移,但是将其表示为θ2。
[0168]
为了计算θ1的未知值,考虑一对相对于基向量x1和y1旋转任意角度位移θ的屏幕空间向量这些向量可以根据基向量表示为:
[0169][0170]
从等式(3)可以得出,在向量变换到纹理空间之后,可表示为:
[0171][0172]
其中ρ1是与相对应的纹理空间向量,并且ρ2是与相对应的纹理空间向量。
[0173]
如旋x1和y1不正交或它们的大小不相等,则向量ρ1和ρ2在纹理空间603中画出一个椭圆,如图6中的607所示。
[0174]
如上所述,主轴(以及因此长轴和短轴)在纹理空间中是正交的,因为正交性在纹理映射下得以保留。因此,对于ρ1和ρ2作为纹理空间主轴,可以得出:
[0175]
ρ1·
ρ2=0
ꢀꢀꢀ
(9)
[0176]
将等式(8)代入等式(9)中,针对θ=θ1,得出角度θ1的以下表达式:
[0177][0178][0179]
使用等式(6),表达式变为:
[0180][0181]
第二对屏幕空间基向量x2,y2与屏幕空间主轴r1,r2之间的角位移θ2的类似表达式可以写成:
[0182][0183]
等式(12)表示,相对于基向量x1,y1(其中,根据等式(12)指定θ1)旋转θ1的一对屏幕空间正交向量变换为正交纹理空间基向量ρ1和ρ2;即,正交性在纹理映射下得以保留,因此是屏幕空间主轴,并且ρ1和ρ2是对应的纹理空间主轴。等式(13)表示,屏幕空间主轴也可以表示为相对于基向量x2,y2旋转θ2的正交向量
[0184]
可以看出,θ1和θ2的表达式仅取决于每个基对的向量之间(平方的)向量长度的差。因此,可根据纹理空间基向量的向量长度的差来确定每对屏幕空间基向量与主轴之间的角位移的表达式。
[0185]
主轴计算单元405因此可以接收第一对纹理空间向量x1,y1和第二对纹理空间向量x2,y2,并且根据等式(12)和(13)从屏幕空间向量x1,y1和/或x2,y2计算出相对于主轴的角位移的表达式。然后,单元405可以计算角位移的正弦和余弦,以使屏幕空间基向量x1,y1或x2,y2旋转到主轴上并且映射到纹理空间,下面相对于步骤511更详细地描述。
[0186]
因为任一对屏幕空间基向量都可以旋转到主轴上,因此主轴计算单元405可选择第一对基向量x1,y1或第二对基向量x2,y2旋转到主轴上。在一些示例中,单元405可以默认选择多对基向量中的一对基向量。在其他示例中,单元405可选择最接近屏幕空间主轴的一对基向量,即,相对于主轴的角位移θ较小的一对屏幕空间主轴。以这种方式选择屏幕空间
基向量可以在如下所述的实际实施方式中产生某些优点。
[0187]
在一些实施方式中,单元405可使用预先存储的值的表(例如,查找表(lut))来针对根据等式(12)和/或(13)计算出的tan 2θ的对应值来计算sinθ和cosθ的值。该lut可以存储在存储器中,例如在纹理滤波单元401内,或者在单元405可访问的外部存储器中。方便地,因为第一对屏幕空间基向量和第二对屏幕空间基向量x1,y1和x2,y2相对于彼此旋转45度,所以屏幕空间主轴相对于最近的基向量对最多旋转22.5度。与仅生成一对屏幕空间基向量的情况相比,对于给定的存储值分辨率,这使得能够减小存储sinθ和cosθ的值的lut的大小,或者对于给定的lut存储大小,能够增大存储值的分辨率。
[0188]
因此,单元405可选择最接近主轴的屏幕空间基向量对作为待旋转到主轴上的对。
[0189]
为了选择基向量对,单元405可计算第一对屏幕空间基向量与主轴之间的角位移θ1的表达式(例如,根据等式(12))以及第二对屏幕空间基向量与主轴之间的角位移θ2的表达式(例如,根据等式(13)),然后从所计算的表达式中选择距主轴的角位移较小的一对基向量。
[0190]
例如,再次参考等式(12)和(13),则得出:如旋|tan 2θ1|<1则|tan 2θ2|>1,反之:如旋|tan 2θ2|<1则|tan 2θ1|>1。因此,单元405可选择基向量对x
i
,y
i
,使得针对该基向量对,相对于屏幕空间主轴的角位移θ
i
为|tan 2θ
i
|<1。
[0191]
替代地,单元405可根据对应的纹理空间对x1,y1和x2,y2的向量长度的差的比较来选择待旋转的屏幕空间基向量对。更具体地,可标识在该对向量之间的向量长度上具有最大差的纹理空间向量对,并且将对应的屏幕空间基向量对选择为所选择的对。以数学方式表示,单元405可计算|x1.x
1-y1.y1|和|x2.x
2-y2.y2|,并且从这些表达式的值中选择相对于主轴的角位移最小的屏幕空间基向量对。如旋向量对x1,y1在向量长度上的差最大,则从等式(12)和(13)可以看出|tan 2θ1|<1并且|tan 2θ2|>1,因此对应的屏幕空间基对x1,y1与主轴的角位移最小。相反,如旋向量对x2,y2在向量长度上的差最大,则从等式(12)和(13)可以看出|tan 2θ1|>1并且|tan 2θ2|<1,因此对应的屏幕空间基对x2,y2与主轴的角位移最小。在已经选择屏幕空间基对向量的情况下,单元405然后可以计算该选择的基对与屏幕空间主轴之间的角位移。
[0192]
在另一个示例中,与具有最大极值长度的纹理空间对相对应的屏幕空间向量对被选择为所选择的对。即,标识纹理空间对,其中该对的任一基向量的长度大于或小于另一个纹理空间对的两个基向量的长度,并且选择对应的屏幕空间对作为所选择的对。
[0193]
在步骤511处,主轴计算单元405已经确定了所选择的屏幕空间基向量对和主轴之间的角位移,将所选择的屏幕空间基向量对隐式旋转了所确定的角位移(即,将所选择的基向量对旋转到屏幕空间主轴上),然后将所旋转的基对映射到纹理空间以生成纹理空间主轴。这可通过根据等式(8)将旋转矩阵映射到纹理空间并且直接使用纹理空间基向量来实现。
[0194]
参考图6,主轴计算单元405将屏幕空间601中的基对x1,y1和x2,y2中的一者旋转确定的角位移,以生成屏幕空间主轴r1,r2。然后将屏幕空间主轴映射到纹理空间605以生成纹理空间主轴r1,r2。主轴包括分别表示屏幕空间601和纹理空间605之间的映射的最大比例因子和最小比例因子的长轴(在图6所示的示例中为r1)和短轴(在图6所示的示例中为r2)。
[0195]
屏幕空间中向量的旋转可通过将旋转矩阵施加于该向量来实现。从等式(3)可以
理解,施加于屏幕空间中的向量的旋转矩阵的项在变换下得以保持,并且施加于纹理空间中对应的向量。换句话讲,单元405可通过将与所选择的屏幕空间基向量相对应的纹理空间向量乘以通过所计算的角位移设置的旋转矩阵的适当项来实现步骤511。
[0196]
以数学方式表示,主轴计算单元405可通过执行以下计算将所选择的基旋转到纹理空间主轴中:
[0197][0198][0199]
其中ρ
minor
是纹理空间短轴,ρ
major
是纹理空间长轴,θ是所选择的屏幕空间基向量和主轴之间的角位移,如旋所选择的基是x1,y1,则ρ
min
,ρ
max
∈x1,y1,其中如旋|x1|2<|y1|2,则ρ
min
=x1,ρ
max
=y1,并且如旋|x1|2≥|y1|2;,则ρ
min
=y1,ρ
max
=x1并且如旋所选择的基为x2,y2,则ρ
min
,ρ
max
∈x2,y2,其中如旋|x2|2<|y2|2,则ρ
min
=x2,ρ
max
=y2并且如旋|x2|2≥|y2|2,则ρ
min
=y2,ρ
max
=x2。
[0200]
|x1|2,|y1|2,|x2|2,|y2|2的值可由基计算单元403或主轴计算单元405计算。
[0201]
需注意,第一屏幕空间基向量对和第二屏幕空间基向量对之间的45度旋转偏移,可以通过限制等式(14)和(15)中以乘法项为特征的值的范围,限制引入误差的大小,方便地使单元405执行旋转操作。限制旋转量还可减少旋转计算中附加项中的误差放大抵消量。
[0202]
在一个实施方式中,主轴计算单元405可以通过执行以下步骤来执行步骤511:
[0203]
1)计算参数σ1、σ2,其中:
[0204][0205][0206]
2)计算参数ρ
min,1
、ρ
min,2
、ρ
max,1
、ρ
max,2
,δ1以及δ2,其中:
[0207][0208]
并且
[0209][0210]
3)计算参数σ0、ρ
min
、ρ
max
,其中:
[0211][0212]
[0213]
4)根据以下等式计算纹理空间主轴:
[0214]
ρ
minor
=cosθρ
min
+σ0σ1σ
2 sinθρ
max
ꢀꢀꢀ
(22)
[0215]
ρ
major
=cosθρ
max-σ0σ1σ
2 sinθρ
min
ꢀꢀꢀ
(23)
[0216]
sinθ和cosθ的值可从等式(12)或(13)给出的角位移的表达式计算,例如使用如上所述的lut。
[0217]
因此,在步骤511的结论之后,主轴计算单元405已经计算了纹理空间主轴,所述纹理空间主轴包括指示纹理映射的最大比例因子的长轴和指示纹理映射的最小比例因子的短轴。
[0218]
在步骤513处,滤波器参数单元407根据所计算出的长轴和短轴来计算纹理滤波器参数。
[0219]
滤波器参数单元407计算滤波器参数以配置纹理滤波器单元409。滤波器参数可用于设置或确定由纹理滤波器单元409用来滤波采样点p的纹理的滤波器的覆盖区域。
[0220]
滤波器参数以及纹理滤波器本身的配置可根据实施方式而变化,例如取决于所实现的应用程序接口(api)。示例性api包括,例如vulkan和directx。
[0221]
由多个api指定并且用于纹理滤波的一个参数是细节级别(lod)参数。为方便起见,本文中将使用符号λ来引用lod参数,该符号与vulkan api规范中使用的符号相同。lod参数用于计算针对采样点要滤波的纹理的mip映射级别。对于各向异性滤波,可从纹理映射的长轴和短轴ρ
minor
和ρ
major
计算lod参数。根据lod参数λ,滤波器参数单元407可以计算图像级参数,根据该图像级参数可以计算出对像素进行滤波的mip映射级别。根据所实现的mip映射模式的类型,可从图像级别参数计算单个图像级别d,或者可计算两个mip映射级别d
hi
和d
lo,
。图像级别参数在本文中将被称为d
l
,与vulkan规范中使用的符号相同。参数d
hi
是指较高的mip映射级别(即,更详细的mip映射级别),而参数d
lo
是指较低的mip映射级别(即,较不详细的mip映射级别)。级别d
hi
和d
lo
可以是相邻级别。可对较高和较低的mip映射级别进行滤波,然后对滤波后的值级别进行滤波或混合以产生最终的滤波后的值。
[0222]
一种计算lod参数λ的示例性方法如下:在该示例中,根据vulkan规范的要求计算lod参数。
[0223]
首先,滤波器参数单元407计算中间参数λ
compute
,其中:
[0224]
λ
compute
=max(log2(ρ
min
),log2(ρ
max
)-log2(max
anis
o))
ꢀꢀꢀ
(24)
[0225]
其中,max
aniso
是滤波单元401所支持的最大各向异性比。因此,滤波器参数单元407从纹理映射的长轴和短轴ρ
minor
和ρ
major
计算中间参数λ
compute
。
[0226]
在计算出中间参数λ
compute
之后,单元407对该参数进行计算以计算lod参数λ。一个示例是lod偏置,由此将偏移量施加于计算出的lod,以调整最终纹理化结旋的分辨率。例如,vulkan规范提供了采样器偏差和“shaderop”偏差。第二个示例是lod限制,它限制了所计算的lod的范围,因此限制了纹理滤波器的重采样要求。然后,可根据中间参数的值、lod偏置以及指定的最大参数值和最小参数值,根据作用于中间lod参数的复合偏置和限制操作来计算lod参数λ的值。
[0227]
参考vulkan规范,以数学方式表示,可以通过在中间参数λ
compute
和着色器指定的值(表示为“shaderop.lod
′”
)之间进行选择来计算基本lod参数值λ
base
,从而计算出lod参数λ:
[0228][0229]
然后将偏置施加于基本参数λ
base
以生成偏置的中间参数λ
′
,如下所示:
[0230]
λ
′
=λ
base
+偏置(26)
[0231]
最后,根据偏置的中间参数λ
′
的值以及指定的最大参数值和最小参数值来计算限制的lod参数λ。具体地,lod参数的计算公式为:
[0232][0233]
其中lod
max
是指定的最大lod参数,并且lod
min
是指定的最小lod参数。最大lod参数和最小lod参数的值可以是特定于实施方式的。
[0234]
滤波器参数还可以包括各向异性的方向。各向异性的方向可确定滤波内核在纹理空间中的取向,例如,纹理像素被滤波的方向。各向异性的方向可从所计算的长轴向量ρ
major
确定。换句话讲,可以沿长轴方向滤波纹理。
[0235]
滤波器参数单元407可进一步计算各向异性lod参数,表示为μ。各向异性lod参数可以根据长轴的大小来计算,ρ
major
。
[0236]
方便地,滤波器参数单元407可通过执行与针对lod参数λ执行的那些计算类似的一组计算来计算各向异性滤波器参数μ。因此,滤波器参数单元407可根据长轴的大小来计算中间各向异性参数,然后对该中间参数执行与对lod参数λ执行的计算类似的一组计算(包括施加相同或类似的限制),以计算各向异性参数μ。
[0237]
因此,根据vulkan规范的要求来计算各向异性参数μ的一种示例性方法如下:
[0238]
首先,滤波器参数单元407根据以下表达式计算中间参数μ
c
o
mpute
:
[0239]
μ
compute
=log2(|ρ
major
|)
ꢀꢀꢀ
(28)
[0240]
在已经计算出参数μ
compute
之后,单元407对该参数执行计算以计算各向异性lod参数μ。执行计算的一个示例是限制,其中将限制施加于中间各向异性lod参数。例如,vulkan规范提供了采样器偏差和“shaderop”偏差。然后,可根据中间参数的值以及指定的最大参数值和最小参数值,根据中间各向异性lod参数计算出各向异性lod参数μ的值。
[0241]
以数学方式表示,可以通过在中间参数μ
compute
和着色器指定的值(表示为“shaderop.lod
′”
)之间进行选择来计算基本lod参数值μ
base
,从而计算出lod参数μ:
[0242][0243]
然后将偏置施加于基本参数μ
base
以生成偏置的中间参数μ
′
,如下所示:
[0244]
μ
′
=μ
base
+区间值限定
ꢀꢀꢀ
(30)
[0245]
最后,根据偏置的中间参数μ
′
的值以及指定的最大和最小参数值来计算限制的各向异性lod参数μ。具体地,各向异性lod参数的计算公式为:
[0246][0247]
其中lod
max
是指定的最大lod参数,并且lod
min
是上面相对于(27)定义的指定的最小lod参数。
[0248]
各向异性滤波器内核宽度(以纹理像素为单位)可根据该各向异性lod参数μ来计算。在一些实施方式中,可计算每个mip映射级别(d或d
hi
和d
lo
)的滤波器内核宽度。可以使用图像级参数来计算每个mip映射级别的内核宽度,该图像级参数继而从lod参数计算得出。
[0249]
通过以上述方式执行一组类似的计算来计算lod参数λ和μ可呈现出若干优点。实际上,滤波器参数单元407通过执行两次各向同性的lod参数计算来计算用于各向异性滤波的lod参数λ和μ。方便地,这可以避免在独立于施加到lod参数λ的任何限制确定各向异性比(和相关联的采样率)时发生的过度滤波。对λ和μ施加相同或相似的限制并且在执行了此类计算后确定各向异性采样率,可防止lod参数λ的偏移导致各向异性lodμ的虚假偏移,这与通过隐式定义参数μ和椭圆的固有偏心率的情况不同。还应当注意,参数λ和μ之间的限制操作的对称性意味着无需进一步考虑纹理滤波器的最大支持各向异性率(与典型的directx实施方式相反,λ
compute
的定义中的限制除外),因为限制不会导致二级和主要lod的针序反转。
[0250]
通过各向异性比参数化各向异性滤波器可以是方便的,该各向异性比可以被计算为2
μ-λ
。
[0251]
已经根据纹理空间主轴计算了纹理滤波器参数,滤波器参数单元407将参数的值传送到纹理滤波器单元409。然后,纹理滤波器单元409使用利用滤波器参数配置的纹理滤波器来执行纹理滤波(步骤503)。因此,可以使用计算出的滤波器参数来确定纹理滤波器的覆盖区域(在纹理空间中)。
[0252]
在该示例中,在实现了mip映射的情况下,滤波器单元409使用针对每个级别使用相关滤波器参数配置的滤波器,在每个mip映射级别d
hi
和d
lo
中执行纹理滤波(例如,可使用所计算的滤波器参数来确定每个mip映射级别内的滤波器覆盖区域)。每个mip映射级别中的滤波生成中间滤波值,这些中间滤波值然后可以由滤波单元409(例如,双线性)滤波或混合,以生成采样点p的最终滤波值。
[0253]
用于滤波纹理的滤波器的类型可以是特定于实施方式的,但是可以是例如高斯滤波器。
[0254]
上面描述的是一种使用纹理滤波器执行各向异性纹理滤波的方法,该纹理滤波器配置有根据所计算的纹理映射的主轴确定的滤波器参数。以上述方式构成主轴可提供各向异性滤波器内核失真的准确的近似值,这进而可以提高纹理滤波器的质量,并且减少可能是由于主轴的近似不佳而导致的沿各向异性方向滤波不充分而导致的伪影。
[0255]
在实践中,可能期望不需要针对每个滤波操作执行各向异性滤波。这可能是由于性能原因(各向异性滤波通常比各向同性滤波在计算上更昂贵)或因为纹理映射是各向同性的,或各向同性在指定数量之内;例如,充分接近于各向同性,以至于执行各向异性滤波
基本上不会改善滤波结旋的质量。
[0256]
图8示出了被配置为执行各向同性和各向异性纹理滤波的纹理滤波器801。
[0257]
纹理滤波器801包括基计算单元803、主轴计算单元405、滤波器参数单元407,以及纹理滤波器单元409。基计算单元803包括旁路检测模块805。
[0258]
旁路检测模块805被配置为检测对于给定的纹理滤波操作是否已经满足一个或多个旁路条件。如旋模块805检测到已经满足旁路条件,则该模块使主轴计算单元405被绕过,相反地将一对或多对纹理空间向量直接输出到滤波器参数单元407。滤波器参数单元407然后可计算各向同性纹理滤波器参数,并且使用这些参数来配置滤波器单元409以执行各向同性纹理滤波。换句话讲,旁路检测模块805检测是否满足旁路条件,并且如旋满足,则将由基计算单元803生成的一对或多对纹理空间向量输出到滤波器参数单元407,从而避免需要在主轴计算单元405中计算各向异性主轴。图9示出了说明测试旁路条件的示例性方法的流程图。
[0259]
可以测试的简单的旁路条件是是否禁用了各向异性滤波。该条件的检测也可以由旁路检测模块805执行。该旁路条件未在图9中示出,因为它可以在生成纹理空间基向量之前执行。当测试该各向同性旁路条件时,纹理滤波器801的操作可以如下所述实现:
[0260]
1)在模块805处确定是否已经针对纹理滤波操作禁用了各向异性滤波。
[0261]
2)如旋未禁用各向异性纹理滤波,则根据上面参照图5概述的方法继续执行各向异性纹理滤波的步骤。
[0262]
3)如旋各向异性纹理滤波被禁用,则检索预先计算的纹理空间向量(长度相等并且彼此垂直),并且将这些向量作为纹理空间主轴提供给滤波器参数单元407;并且在滤波器参数单元407处计算各向同性滤波参数,并且使用这些参数来配置纹理滤波器单元409以执行各向同性纹理滤波。同样,这些预先计算的纹理空间基向量可对应于沿上述屏幕空间的水平和垂直方向放置的屏幕空间基向量。实施方式可选择使用在图5的步骤507中生成的第一对纹理空间基向量,并且使用该对中的较长的基向量来定义映射。
[0263]
需注意,如旋满足单基或各向同性旁路条件(即,将进行各向同性滤波),则滤波器参数单元407(例如,通过执行相同的一组计算)以与计算参数λ来配置用于各向异性滤波的纹理滤波器时类似的方式,计算lod参数λ以配置纹理滤波器。在各向同性情况下的区别在于,不对参数μ执行类似的计算集合。因此,对于各向同性和各向异性滤波操作,滤波器参数单元407可以类似的方式操作,两种模式之间的差异在于,与各向同性情况相比,在各向异性情况下执行第二组类似的计算。以这种方式配置滤波器参数单元407以执行一组或两组类似计算使得能够实现有效的架构实施方式。例如,如旋禁用了各向异性滤波,则可将用于计算参数μ的资源用于为另一组输入计算参数λ。下面参照图11更详细地描述。
[0264]
一旦在基计算单元803处已经生成第一对纹理空间基向量,就可以测试单基旁路条件903。当针对采样点p的纹理映射的各向异性较低时,满足单基旁路条件,使得可执行各向同性滤波而不会引起显著的(例如,可感知的)滤波伪影。例如,可将各向异性(或等效地,各向同性)的量度与某个阈值进行比较,当该量度指示各向异性低于某个预定义的水平时(或等效地,各向同性高于某个预定义的水平),则满足旁路条件。可根据经验确定适合于各向异性/各向同性的量度的合适阈值,当量度高于/低于该阈值时满足旁通条件。
[0265]
为了检测各向同性纹理映射,基计算单元803可使用上述有限差分方案中的一个
有限差分方案来计算第一对屏幕空间基向量x1,y1,然后将这些向量映射到它们的纹理空间对应物x1,y1。旁路检测模块805然后可以确定:1)向量x1和y1的大小是否彼此相等,或者是否等于在指定阈值内;或者2)向量是否彼此垂直或在指定阈值内垂直。如旋模块805确定满足条件1)和2)两者,则这意味着纹理映射是各向同性的,并且模块805确定满足旁路条件。需注意,该测试使得能够避免计算第二组基向量,但是它要求可确定第一对基向量在纹理空间中是垂直的。仅当这种测试的硬件成本低于计算第二基时,这才是合理的,随后的旁路测试可用于避免进一步的计算。一个重要的示例是当纹理为2d时,在这种情况下,满足条件1)和2)
[0266]
|x
u
|≈|y
v
| |x
v
|≈|y
u
| x
u
·
y
u
·
x
v
·
y
v
≤0
ꢀꢀꢀꢀꢀ
(33)
[0267]
这些条件需要简单地比较向量分量的符号和大小,并且与生成第二组基向量和相关联的长度相比,在硬件中实现的成本(例如,就硅面积、等待时间和功耗而言)可能要便宜得多。
[0268]
如旋确定变换是各向同性的,则不需要对纹理空间基向量进行变换来获得主轴,因为在这种情况下主轴不是唯一定义的,并且任何一对变换后的向量在纹理空间中的长度都将匹配。各向异性的方向也是未限定的。因此,基计算单元803不需要计算第二对纹理空间基向量x2,y2。替代地,可以将预先计算的一对纹理空间向量作为主轴提供给滤波器参数单元407。因此,如旋满足该旁路条件,则在步骤507处不需要生成第二对纹理空间基向量,并且可以省略图5的步骤509至步骤511。
[0269]
当测试该第一示例性单基旁路条件时,纹理滤波器801的操作可以如下实现:
[0270]
1)在基计算单元803处,例如使用上述有限差分方案中的一者,计算用于采样点p的一对屏幕空间基向量x1,y1。
[0271]
2)将一对屏幕空间基向量x1,y1映射到纹理空间中,以确定纹理空间中对应的基向量x1和y1。
[0272]
3)在旁路检测模块805中比较向量x1和y1的长度以及它们在纹理空间中的相对取向,以确定向量是否具有相等的长度(或者等于在指定数量之内)并且彼此垂直(或者在指定数量之内垂直)以确定是否满足旁路条件。
[0273]
4)如旋不满足旁路条件,则根据上面参照图5概述的方法,继续执行各向异性纹理滤波的步骤。
[0274]
5)如旋满足旁通条件,则检索预先计算的纹理空间向量(长度相等并且彼此垂直),并且将这些向量作为纹理空间主轴提供给滤波器参数单元407;并且在滤波器参数单元407处计算各向同性滤波参数,并且使用这些参数来配置纹理滤波器单元409以执行各向同性纹理滤波。这些预先计算的纹理空间基向量可对应于沿上述屏幕空间的水平和垂直方向放置的屏幕空间基向量。
[0275]
一旦在步骤907处已经生成第二对纹理空间基向量,就可以测试909各向同性旁路条件。例如,当满足以下不等式时,可认为采样点p处的各向同性较高,并且满足各向同性旁路条件:
[0276]
[0277]
通常,在选择∈
各向同性旁路阈值
的情况下,做出近似的情况下,做出近似是合理的,使得|ρ
major
|2和|ρ
minor
|2满足一定的总体误差容限(诸如,可根据经验来确定或选择适合于系统中使用的准确度水平)。恒等式|ρ
major
|2+|ρ
minor
|2=|x1|2+|y1|2=|x2|2+|y2|2允许我们仅使用基向量长度平方来执行不等式(32)中的比较。
[0278]
一旦在907处已经生成第二对纹理空间基向量,就可以在909处测试限制旁路条件。如旋满足以下不等式,则限制旁路条件可以是可以避免主轴变换:
[0279][0280]
在这种情况下,结旋将与λ=μ=lod
min
各向同性。这是因为从等式(24)至(31)
[0281][0282][0283]
举例来讲,存在两个方便的上限。
[0284]
首先,我们可以在等式(36)的左侧使用以下各向异性上限:
[0285]
|ρ
major
|2≤|ρ
major
|2+|ρ
minor
|2=|x1|2+|y1|2=|x2|2+|y2|2ꢀꢀꢀ
(35)
[0286]
长轴相对于短轴越大(即,各向异性越强),该边界越紧密。该结旋可以等效地表示为如下性质:在正交变换的情况下,表示屏幕空间基向量向主轴的变换的旋转矩阵的轨迹是不变的。由于是不变的。由于因此意味着该旁路条件变为:
[0287][0288][0289]
如旋满足这些不等式中的任一个不等式,则可以省略由主轴计算单元405执行的步骤509和步骤511。
[0290]
其次,当纹理空间主轴的大小满足时,存在各向同性上限:
[0291][0292]
如旋长度平方彼此接近(即,映射方法是各向同性的),或者基向量对中的一者是真实主轴的良好近似,则该边界变得紧密。旁路条件变为
[0293]
[0294][0295]
如旋满足这些不等式中的任一个不等式,则可以省略由主轴计算单元405执行的步骤509和步骤511。
[0296]
各向异性和各向同性边界可以组合为单个限制旁路条件:
[0297][0298][0299]
如旋满足这些不等式中的任一个不等式,则可以省略由主轴计算单元405执行的步骤509和步骤511。旁路检测模块805被配置为评估不等式(39)而不是独立地评估各个不等式(36)和(38)可能是有利的。此外,可能有利的是使用上面的不等式(39)的第二行的表达式来执行计算,而不是根据上面的不等式(39)的第一行的表达式来计算而不是这是因为通常可以比更早地计算
[0300]
当测试该限制旁路条件时,纹理滤波器801的操作可以如下所述实现:
[0301]
1)在基计算单元803处执行步骤505和步骤507之后,旁路检测模块805确定是否满足不等式(39)。
[0302]
2)如旋满足不等式,则将在步骤507中生成的纹理空间向量作为纹理空间主轴提供给滤波器参数单元407,并且滤波器参数单元407计算各向同性滤波参数;以及
[0303]
3)纹理滤波器单元409继续使用所提供的主轴并且使用各向同性滤波参数来配置纹理滤波器单元409以执行各向同性纹理滤波。
[0304]
旁路检测模块可被配置为检测基向量本身是否可以作为真实主轴的足够好的近似,使得尽管纹理映射本身可以是各向异性的也可以不是各向异性的,但是主轴计算仍然是冗余的。
[0305]
一旦在907处已经生成了第二对纹理空间基向量,就可以在915处测试各向异性旁路条件。如旋一对屏幕空间基向量与屏幕空间主轴之间的计算出的角位移的大小小于预先确定的阈值,则可以满足各向异性旁路条件。可以选择预先确定的阈值,使得其小于角位移计算中的误差,该误差将根据实施方式而变化并且可通过合适的误差分析来确定。当满足该各向异性旁路条件时(即,计算出的角位移的大小小于阈值),对应于最接近主轴的屏幕空间向量的变换后的纹理空间向量被用作纹理空间主轴。可将例如根据等式(21)计算出的值ρ
min
用作纹理空间短轴,并且可将例如根据等式(21)计算出的值ρ
max
用作纹理空间长轴。
[0306]
由于该各向异性旁路条件取决于计算出的角位移的值,因此旁路检测模块805可在步骤509完成之后确定是否满足该条件。如旋满足该旁路条件,则可省略主轴计算单元405所执行的步骤511。
[0307]
例如,当满足以下不等式时,可将采样点p处的两个基向量对中的一者视为真实主
轴的良好近似:
[0308][0309]
如旋||x1|
2-|y1|2|>||x2|
2-|y2|2|(即,选择了主要的基),则可进行以下近似:
[0310][0311]
并且如旋||x1|
2-|y1|2|<||x2|
2-|y2|2|(即,选择了次级基),则可能进行以下近似:
[0312][0313]
可选择阈值∈
各向异性旁路阈值
来满足可以角位移误差和/或评估旋转矩阵中的误差表示的误差容限。可根据经验确定或选择适合于系统中使用的准确度水平的合适的值。
[0314]
当测试该各向异性旁路条件时,该纹理滤波器801的操作可以如下实现:
[0315]
1)在基计算单元803中计算一对屏幕空间基向量和屏幕空间主轴之间的角位移。可以根据上述步骤505至509来执行该计算。
[0316]
2)在旁路检测模块805中确定所计算的角位移的大小是否小于指定阈值,以确定是否满足旁路条件。
[0317]
3)如旋不满足旁路条件,则继续计算纹理空间主轴,然后根据上述步骤511、513和503执行各向异性纹理滤波。
[0318]
4)如旋满足旁路条件,则使用与最接近主轴的屏幕空间基向量相对应的计算出的纹理空间向量作为主轴,并且将这些纹理空间向量提供给滤波器参数单元407;使用所提供的主轴在滤波器参数单元407处计算各向异性滤波参数,然后使用这些参数来配置纹理滤波器单元409以根据上述步骤513和步骤503执行各向异性纹理滤波。
[0319]
因此,在步骤917处仍然执行各向异性滤波,但是可以跳过主轴变换。
[0320]
旁路检测模块805可被配置为测试上述旁路条件中的一个或多个旁路条件。参考图5所示的示例性流程图,图9示出了针对旁路条件中的一个或多个旁路条件测试的纹理滤波器801的示例性操作的概述。简单的旁路条件(即,是否启用各向异性滤波)不在图9的范围内,下面将参照图11进行详细说明。
[0321]
在步骤901处,基计算单元803根据图5的步骤507生成第一对纹理空间基向量。
[0322]
在步骤903处,模块805确定是否满足单基旁路条件。如旋模块805确定满足任一条件,则该方法前进至步骤905,并且预先确定的纹理空间基向量被用作主轴并且被提供给滤波器参数单元407以执行各向同性滤波。在步骤507处不需要生成第二对纹理空间基向量,并且不需要执行图5的步骤509。
[0323]
如旋模块805确定不满足单基旁路条件,则该方法前进至步骤907,并且在基计算单元803处根据图5的步骤507来计算第二对纹理空间基向量。
[0324]
在909处,模块805检查是否满足各向同性和限制旁路条件中的一者或两者。如旋满足其中的一者或两者,则该方法前进至911,并且在步骤901和步骤907处生成的纹理空间向量作为纹理空间主轴被提供给滤波器参数单元407,并且执行各向同性滤波。
[0325]
当在步骤909和步骤911切换到各向同性滤波时,例如,根据本文所述的原理,仅
λ
compute
可以被确定。
[0326]
如旋不满足各向同性和/或限制旁路条件,则该方法前进至步骤915,并且可以执行各向异性旁路条件。为了确定用于测试各向异性旁路条件的屏幕空间角位移,主轴计算单元405可配置为以本文所述的方式来计算屏幕空间基向量和主轴之间的角位移(例如,参照图5的509)。旁路检测模块805在步骤915处确定是否已经满足了各向异性旁路条件(例如,在509处计算的角位移是否小于指定阈值)。如旋满足该条件,则该方法前进至步骤917,在该步骤中,将与最接近主轴的屏幕空间向量相对应的纹理空间向量选择为纹理空间主轴,并且将其提供给滤波器参数单元407以执行各向异性滤波,例如根据图5的步骤513。因此,绕过根据511的主轴变换。
[0327]
如旋不满足各向异性旁路条件,则该方法前进至步骤919,并且根据本文的原理执行各向异性滤波。例如,在步骤919处,主轴计算单元405可以根据步骤511执行一对纹理空间基向量的旋转,滤波器参数单元407可以计算各向异性滤波器参数513,并且纹理滤波器单元409可以执行各向异性滤波503。
[0328]
旁路检测模块805可以根据图9所示的方法测试旁路条件中的任何一个或多个旁路条件。如旋旁路检测模块805没有测试旁路条件,则可以省略该测试和伴随的旁路步骤(905、911或917)。在步骤909处,仅可以执行各向同性和限制旁路条件中的一者。如旋旁路检测模块805既没有执行各向同性也没有执行限制旁路条件,则可以省略测试步骤909和旁路步骤911。
[0329]
上面参照图8和图9所述的旁路条件的使用使得纹理滤波器801能够将纹理映射分类为各向同性或各向异性,并且跳过执行各向异性纹理滤波的步骤。这很方便,因为各向异性纹理滤波通常比各向同性纹理滤波在计算上更昂贵。例如,与各向异性滤波相比,在各向异性滤波器中禁用主轴计算并且执行各向同性滤波通常可实现两倍的吞吐量。此外,由于图8所示的其中主轴计算单元405可被基计算单元803绕过的硬件架构,因此各向同性滤波计算可与各向异性滤波计算并行地由滤波器801执行。这是方便的,因为与各向同性滤波计算相比,各向异性滤波计算通常减少了吞吐量要求。因此,与基计算单元803相比,可减少使用主轴计算单元405的情况,同时仍保持纹理滤波结旋的目标吞吐量。
[0330]
图11示出了(a)对上述旁路条件进行了测试的各向异性滤波的性能,以及(b)禁用了各向异性滤波(例如,满足了上述的简单旁路测试)并且执行了各向同性滤波的性能。该图示出了相同的纹理滤波器801(在图11中功能性地示出)可被配置为并行执行两个各向同性滤波器操作,而不是单个各向异性滤波器操作。现在将参照图8和图5描述图11。
[0331]
在图11(a)中,纹理滤波器801接收用于各向异性滤波的单组图像数据1102。执行主要基计算1104以计算第一对纹理空间基向量(例如,操作507的前半部分)。然后测试单基旁路条件1106。如旋满足,则可经由1115跳过处理步骤1108和处理步骤1112,并且可在向滤波器参数单元407提供预先确定的基向量的情况下执行各向同性滤波。纹理滤波器单元409未在图11中示出。
[0332]
如旋不满足单基旁通条件,则执行次级基计算1108以计算第二对纹理空间基向量(例如,操作507的后半部分)。然后可使用主要和次级基向量执行各向同性、限制和各向异性旁路测试1110中的一种或多种。如旋满足一个或多个旁路测试,则可跳过1118主轴计算1112,并且根据上述旁路测试在1114和1116处形成lod参数。当旁路测试都得不到满足时,
则主轴计算1112以及包括lod计算1114和1116的滤波器参数单元根据步骤509至步骤513准备进行各向异性滤波。在图11(a)中描述的情况下,纹理滤波器801对单组图像数据1102进行操作以产生单组输出数据1120,以用于各向异性滤波。
[0333]
在图11(b)中,各向异性滤波被禁用并且旁路测试1106和1110被执行,并且主轴计算1112未被执行。因此,纹理滤波器801被配置为执行各向同性滤波。在一些示例中,主轴计算单元405可被禁用以及/或者处于睡眠状态以节省功率。在图11(b)中,纹理滤波器801可使用基计算单元计算第一基向量和第二基向量的能力来对两个输入图像数据集1122和1124并行地操作,以便为两个数据集中的每一个数据集生成一个主要基向量。类似地,滤波器参数单元407可针对每个数据集执行lod计算1126和1128,以针对每个输入数据集并行生成输出数据集1130和1132。
[0334]
因此,相同的纹理滤波器801可被配置为在执行各向同性滤波时对两个数据集并行操作,或者在执行各向异性滤波时对一个数据集并行操作。
[0335]
本文所述的执行各向异性滤波的方法由两组类似的计算组成,其中每组计算都非常类似于为各向同性滤波操作执行的一组计算。对于各向同性滤波操作,方法通常涉及计算基向量,计算其长度平方并且对其进行排序以确定长轴和短轴,然后执行一组滤波器参数计算以计算lod参数λ。在本文所述的执行各向异性滤波操作的方法中,对第二对基向量执行类似的计算,并且添加额外的计算以将基本对中的一个基本对旋转到主轴上(如旋需要),并且执行一组类似的滤波器参数计算以计算各向异性lod参数μ。以这种方式执行各向异性滤波使得能够执行可执行各向同性或各向异性滤波操作的滤波单元的高效的架构实施方式。
[0336]
本文所述的各向异性滤波方法的另一个便利的方面是,从误差分析中发现,上述屏幕空间近似中使用的长度平方计算的准确度要求(并且可能在映射为各向同性或各向异性滤波被禁用的情况下)类似于(在步骤509处)确定角位移以生成准确的主轴构成所需的足够的准确度。这是因为角位移误差(在步骤511处涉及所选择的基准的旋转)对最终误差做出二次贡献。换句话讲,角位移可相对不准确地确定,并且仍然可用于以高准确度生成主轴(前提是旋转本身是准确执行的)。这是方便的,因为这意味着各向异性情况下基向量的长度平方可继续以与各向同性情况下相同的准确度级别进行计算,从而方便地避免了对各向异性计算增加长度平方计算准确度的要求,这对于进行各向同性滤波的情况是不必要的。
[0337]
在上述示例中,mip映射被实现为纹理滤波操作的一部分。应当理解,这仅是出于说明的目的,并且在其他示例中,可能未实现mip映射。如旋未实现mip映射,则执行一组类似的主轴计算以计算纹理空间长轴和短轴,但是滤波器参数单元407使用这些轴来配置仅在单个lod处执行纹理滤波的滤波器。可以与上述类似的方式使用长轴和短轴来配置滤波器本身,使得其在纹理空间中的覆盖区域由主轴确定,但是仅在纹理的一个图像级别执行滤波。
[0338]
用于执行纹理滤波的滤波器类型可取决于实施方式。在上述示例中,引用了高斯滤波器,但是应当理解,可使用纹理映射的主轴来配置其他类型的滤波器。
[0339]
图4至图8的滤波器单元被示出为包括多个功能块。这仅是示意性的,并不旨在限定此类实体的不同逻辑元件之间的严格划分。每个功能块可以任何合适的方式提供。应当
理解,在本文中被描述为由单元或模块形成的中间值不需要由单元或模块在任何时间点物理地生成,并且可以仅表示方便地描述单元和模块在其输入装置和输出装置之间执行的处理的逻辑值。
[0340]
本文中所描述的单元可以在集成电路上体现为硬件。本文中所描述的单元可被配置为执行本文所描述的任一种方法。一般来说,上文所述的功能、方法、技术或部件中的任一个可以在软件、固件、硬件(例如,固定逻辑电路系统)或其任何组合中实施。本文可以使用术语“模块”、“功能”、“部件”、“元件”、“单元”、“块”和“逻辑”来概括地表示软件、固件、硬件或其任何组合。在软件实施方案的情况下,模块、功能、部件、元件、单元、块或逻辑表示程序代码,所述程序代码在处理器上执行时执行指定任务。本文中所描述的算法和方法可以由执行代码的一个或多个处理器执行,所述代码使处理器执行算法/方法。计算机可读存储介质的示例包含随机存取存储器(ram)、只读存储器(rom)、光盘、闪存、硬盘存储器以及可以使用磁性、光学和其他技术来存储指令或其他数据并可以由机器存取的其他存储器设备。
[0341]
如本文中所使用的术语计算机程序代码和计算机可读指令是指供处理器执行的任何种类的可执行代码,包含以机器语言、解释语言或脚本语言表达的代码。可执行代码包含二进制代码、机器代码、字节代码、定义集成电路的代码(例如硬件描述语言或网表),以及用例如c、java或opencl等编程语言代码表达的代码。可执行代码可以是例如任何种类的软件、固件、脚本、模块或库,当在虚拟机或其他软件环境中被适当地执行、处理、解释、编译、运行时,这些软件、固件、脚本、模块或库使支持可执行代码的计算机系统的处理器执行由所述代码指定的任务。
[0342]
处理器、计算机或计算机系统可以是任何种类的设备、机器或专用电路,或其集合或一部分,它具有处理能力使得可以执行指令。处理器可以是任何种类的通用或专用处理器,例如cpu、gpu、片上系统、状态机、媒体处理器、专用集成电路(asic)、可编程逻辑阵列、现场可编程门阵列(fpga)等。计算机或计算机系统可以包括一个或多个处理器。
[0343]
本发明还意图涵盖限定如本文中所描述的硬件的配置的软件,例如硬件描述语言(hdl)软件,用于设计集成电路或用于配置可编程芯片以执行所要功能。也就是说,可以提供一种其上编码有集成电路定义数据集形式的计算机可读程序代码的计算机可读存储介质,当在集成电路制造系统中处理时,该计算机可读程序代码将该系统配置成制造被配置成执行本文所述任何方法的纹理滤波器单元,或者制造包括本文所述任何设备的纹理滤波器单元。集成电路定义数据集可以是例如集成电路描述。
[0344]
可以提供一种在集成电路制造系统中制造如本文所述的纹理滤波器单元的方法。可以提供一种集成电路定义数据集,当在集成电路制造系统中处理时,该集成电路定义数据集导致制造纹理滤波器单元的方法得以执行。
[0345]
集成电路定义数据集可呈计算机代码形式,例如作为网表、用于配置可编程芯片的代码,作为在任何层级定义集成电路的硬件描述语言,包含作为寄存器传送级(rtl)代码、作为例如verilog或vhdl的高级电路表示,和作为例如oasis(rtm)和gdsii的低级电路表示。在逻辑上定义集成电路的更高级表示法(例如rtl)可以在配置成在软件环境的上下文中生成集成电路的制造定义的计算机系统处处理,所述软件环境包括电路元件的定义和用于组合那些元件以便生成由所述表示法定义的集成电路的制造定义的规则。如通常软件
在计算机系统处执行以便定义机器的情况一样,可能需要一个或多个中间用户步骤(例如,提供命令、变量等),以便将计算机系统配置成生成集成电路的制造定义,以执行定义集成电路以便生成所述集成电路的制造定义的代码。
[0346]
现在将参考图10描述在集成电路制造系统处处理集成电路定义数据集以便将系统配置为制造纹理滤波器单元的示例。
[0347]
图10示出了集成电路(ic)制造系统1002的示例,该集成电路制造系统被配置为制造如本文中任何示例中描述的纹理滤波器单元。特别地,ic制造系统1002包括布局处理系统1004和集成电路生成系统1006。ic制造系统1002被配置为接收ic定义数据集(例如,定义如本文任何示例中描述的图形处理单元)、处理ic定义数据集以及根据ic定义数据集来生成ic(例如,其体现如本文任何示例中所述的图形处理单元)。通过对ic定义数据集的处理,将ic制造系统1002配置为制造体现如本文任何示例中描述的纹理滤波器单元的集成电路。
[0348]
布局处理系统1004被配置成接收和处理ic定义数据集以确定电路布局。根据ic定义数据集确定电路布局的方法在本领域中是已知的,并且例如可以涉及合成rtl代码以确定要生成的电路的门级表示,例如就逻辑部件(例如nand、nor、and、or、mux和flip-flop部件)而言。通过确定逻辑部件的位置信息,可以根据电路的门级表示来确定电路布局。这可以自动完成或者在用户参与下完成,以便优化电路布局。当布局处理系统1004已经确定电路布局时,其可将电路布局定义输出到ic生成系统1006。电路布局定义可以是例如电路布局描述。
[0349]
如本领域已知的,ic生成系统1006根据电路布局定义来生成ic。举例来说,ic生成系统1006可实施生成ic的半导体装置制造工艺,其可涉及光刻和化学处理步骤的多步骤序列,在此期间,在由半导体材料制成的晶片上逐渐形成电子电路。电路布局定义可呈掩模的形式,其可以在光刻工艺中用于根据电路定义来生成ic。替代地,提供给ic生成系统1006的电路布局定义可呈计算机可读代码的形式,ic生成系统1006可使用所述计算机可读代码来形成用于生成ic的合适掩码。
[0350]
由ic制造系统1002执行的不同过程可全部在一个位置例如由一方来实施。替代地,ic制造系统1002可以是分布式系统,使得一些过程可在不同位置执行,并且可由不同方来执行。例如,以下阶段中的一些可以在不同位置和/或由不同方来执行:(i)合成表示ic定义数据集的rtl代码,以形成要生成的电路的门级表示;(ii)基于门级表示来生成电路布局;(iii)根据电路布局来形成掩模;以及(iv)使用掩模来制造集成电路。
[0351]
在其他示例中,在集成电路制造系统中对集成电路定义数据集的处理可以将该系统配置为在不处理ic定义数据集以确定电路布局的情况下制造纹理滤波器单元。举例来说,集成电路定义数据集可以定义例如fpga的可重新配置的处理器的配置,并且对所述数据集进行的处理可以将ic制造系统配置成(例如,通过将配置数据加载到fpga)生成具有所述定义的配置的可重新配置的处理器。
[0352]
在一些实施方案中,当在集成电路制造系统中处理时,集成电路制造定义数据集可以使集成电路制造系统生成如本文中描述的设备。例如,通过集成电路制造定义数据集,以上面参考图10描述的方式对集成电路制造系统进行配置,可以制造出如本文所述的设备。
[0353]
在一些示例中,集成电路定义数据集可以包含在数据集处定义的硬件上运行的软
件,或者与在数据集处定义的硬件组合运行的软件。在图10所示的示例中,ic生成系统还可以由集成电路定义数据集进一步配置,以在制造集成电路时根据在集成电路定义数据集中定义的程序代码将固件加载到该集成电路上,或者以其他方式向集成电路提供与集成电路一起使用的程序代码。
[0354]
与已知的实施方式相比,在本申请中阐述的概念在设备、装置、模块和/或系统中(以及在本文中实施的方法中)的实施方式可以引起性能改进。性能改进可以包含计算性能提高、等待时间缩短、处理量增大和/或功耗降低中的一个或多个。在制造此类设备、装置、模块和系统(例如在集成电路中)期间,可以在性能改进与物理实施方案之间进行权衡,从而改进制造方法。例如,可以在性能改进与布局面积之间进行权衡,从而匹配已知实施方式的性能,但使用更少的硅。例如,这可以通过以串行方式重复使用功能块或在设备、装置、模块和/或系统的元件之间共享功能块来完成。相反,在本申请中阐述的引起设备、装置、模块和系统的物理实施方式的改进(例如硅面积减小)的概念可以针对性能提高进行权衡。例如,这可以通过在预定义面积预算内制造模块的多个实例来完成。
[0355]
与已知的实施方式相比,在本申请中阐述的概念在设备、装置、模块和/或系统中(以及在本文中实施的方法中)的实施方式可以引起性能改进。性能改进可以包含计算性能提高、等待时间缩短、处理量增大和/或功耗降低中的一个或多个。在制造此类设备、装置、模块和系统(例如在集成电路中)期间,可以在性能改进与物理实施方案之间进行权衡,从而改进制造方法。例如,可以在性能改进与布局面积之间进行权衡,从而匹配已知实施方式的性能,但使用更少的硅。例如,这可以通过以串行方式重复使用功能块或在设备、装置、模块和/或系统的元件之间共享功能块来完成。相反,在本申请中阐述的引起设备、装置、模块和系统的物理实施方式的改进(例如硅面积减小)的概念可以针对性能提高进行权衡。例如,这可以通过在预定义面积预算内制造模块的多个实例来完成。
[0356]
申请人据此独立地公开了本文中所描述的每个单独的特征以及两个或更多个此类特征的任意组合,到达的程度使得此类特征或组合能够根据本领域的技术人员的普通常识基于本说明书整体来实行,而不管此类特征或特征的组合是否解决本文中所公开的任何问题。鉴于前文描述,本领域的技术人员将清楚,可以在本发明的范围内进行各种修改。