利用投影几何失真用于以可变采样率渲染的系统、方法和计算机程序产品与流程

文档序号:13006753阅读:278来源:国知局
利用投影几何失真用于以可变采样率渲染的系统、方法和计算机程序产品与流程

本发明涉及图形处理器,具体涉及以可变采样率进行渲染。



背景技术:

当渲染图形基元(primitive)时,在光栅化期间确定由每个基元覆盖的像素。经典的三维(3d)z缓冲渲染假设在显示屏幕上需要均匀或恒定的采样率(即采样分辨率)。然而,一些应用可能受益于不均匀采样的能力。特别地,虚拟现实(vr)需要与vr显示屏幕的光学器件匹配(相反的)的可变采样分辨率。以保守和均匀的采样分辨率渲染3d场景以产生图像。然后将图像重新采样以匹配可变的vr采样分辨率,并产生用于由vr显示器显示的重采样图像。以均匀采样率渲染整个场景,然后对图像进行重新采样以匹配所需的采样率是不经济的。特别地,鉴于最终的显示屏幕像素分辨率,与所必需的样本相比,更多的样本被着色。具体地,离视图中心较远的像素以较低的速率被采样,使得以比产生用于显示的重采样图像所需要的采样率高的均匀采样率渲染图像的大部分。因此,需要解决与现有技术相关的这些和/或其他问题。



技术实现要素:

提供了用于以可变采样率渲染的系统、方法和计算机程序产品。在一个实施例中,从着色器执行单元接收3d基元的顶点坐标,并且通过固定操作电路对顶点坐标执行算术操作以产生齐次坐标空间中的修改的顶点坐标。将修改的顶点坐标从齐次坐标空间变换到屏幕空间,以产生变换的3d基元的屏幕空间顶点坐标,以及使用屏幕空间顶点坐标在屏幕空间中光栅化变换的3d基元,以产生用于显示的图像。

在另一个实施例中,接收3d基元在齐次坐标空间的顶点坐标,并且使用第一操作对顶点坐标执行第一投影几何失真,以产生齐次坐标空间中的修改的顶点坐标。使用第二操作对顶点坐标执行第二投影几何失真,以产生齐次坐标空间中的第二修改的顶点坐标。变换修改的顶点坐标,以及第二修改的顶点坐标到屏幕空间以产生变换的3d基元的屏幕空间顶点坐标。使用屏幕空间顶点坐标在屏幕空间中光栅化变换的3d基元,以产生用于显示的图像。

附图说明

图1示出了根据一个实施例的用于以可变采样率渲染的方法。

图2a示出了根据一个实施例的头戴式显示器(hmd)的显示屏幕。

图2b示出了根据一个实施例的图2a中所示的显示屏幕的透镜失真函数。

图2c示出了根据一个实施例的图2b的透镜失真函数(采样距离与透镜中心处的采样距离之比)作为二维显示位置的透镜失真函数而不是透镜中心的径向距离的函数。

图2d示出了根据一个实施例的经由图2b中所示的透镜失真函数变换的图2a中所示的采样网格。

图2e与图2a相同,其中来自图2d的渲染目标边界被添加到该图示。

图3示出了根据一个实施例的图形处理流水线。

图4a示出了根据一个实施例的未应用投影几何失真渲染的场景。

图4b示出了根据另一个实施例的应用投影几何失真渲染的场景。

图4c示出了根据一个实施例的使用区域特定投影几何失真,分割为四个不同区域的显示屏幕渲染的场景。

图5a示出了根据一个实施例的包括四个不同区域的显示屏幕的视图。

图5b、5c、5d和5e示出了根据一个实施例的沿着图5a的区域边界的像素维度。

图6a示出了根据另一个实施例的在具有应用投影几何失真的w坐标的四个区域中的像素大小。

图6b示出了根据另一个实施例的在具有每个区域中应用投影几何失真的w坐标的四个区域中的像素大小。

图6c示出了根据另一个实施例的与图2b中所示的曲线图叠加的图6b中所示的曲线图。

图6d示出了图6c的俯视图。

图6e示出了根据另一个实施例的显示屏幕的五个区域。

图7a示出了根据一个实施例的被配置为执行投影几何失真以产生可变采样率的框图。

图7b示出了根据一个实施例的用于修改顶点坐标以改变采样率的方法。

图7c和7d示出了根据各个实施例的包括顶点坐标修改单元的图形处理流水线的一部分。

图7e示出了根据一个实施例的用于确定可变采样率的方法。

图8示出了根据一个实施例的并行处理单元。

图9示出了根据一个实施例的图8的着色器执行单元。

图10示出了其中可以实现各种先前实施例的各种架构和/或功能的示例性系统。

具体实施方式

能够以与vr显示光学器件的要求更紧密匹配的非均匀采样率进行渲染,可以大致是用保守和均匀的采样率渲染以产生图像的效率的两倍,然后对图像取样以匹配vr显示光学器件。可以将变换应用于齐次坐标空间中的图形基元,这将使图形基元具有从图形基元的原始坐标的视角被非均匀采样的效果。因此,例如,位于视野周边的对象可能比位于视野中心的对象被更粗糙地取样。如果场景中的顶点坐标(在齐次坐标空间、投影坐标空间、裁剪空间或视图空间)被修改,则可以使用透视投影机制以实现使用标准光栅化流水线的可变采样率。与三维(x、y、z)的自然空间相比,齐次空间包括第四维,w。w维通常表示从观看者到对象(或定义基元或对象的顶点)的距离。在一个实施例中,w维表示权重值。

在一个实施例中,顶点坐标在投影空间中被表示,使得可以应用矩阵运算(例如,平移、缩放、旋转等)来执行几何投影。在一个实施例中,每个顶点可以被表示为齐次坐标(例如,x、y、z和w),其中与每个基元顶点相关联的w坐标被修改以实现可变采样率。此外,采样率可以基于与vr显示器的中心间的距离而变化。

图1示出了根据一个实施例的使用投影几何失真以可变采样率渲染的方法100。在步骤110,接收3d基元的顶点坐标。在当前描述的上下文中,基元是指任何元素(例如,多边形元素等),该元素能够被用于成像多边形(例如,三角形、矩形等)或者能够被用于成像对象,该对象能够由多边形表示。

在各种实施例中,3d基元可以由图形处理器接收。在下文描述的上下文中,图形处理器可以包括任何数量的图形处理器流水线单元、固定操作电路和可编程着色器执行单元,以及相关联的硬件和软件。例如,在一个实施例中,图形处理器可以包括能够执行着色器程序的一个或更多个着色器执行单元,例如顶点着色器、镶嵌初始化着色器、镶嵌着色器和几何着色器。此外,在一个实施例中,顶点着色器和几何着色器可以各自在可编程着色器执行单元上执行。虽然着色器执行单元可以被编程,但并不意味着限制如何实现着色器执行单元。在一个实施例中,着色器执行单元是可编程电路和固定操作电路的组合。在一个实施例中,由顶点着色程序生成的顶点坐标在齐次坐标空间中被接收。在一个实施例中,在步骤110,从被配置为执行顶点着色器程序或几何着色器程序的可编程着色器执行单元接收顶点坐标。

在步骤120,对顶点坐标执行算术操作以产生齐次坐标空间中的修改的顶点坐标。在一个实施例中,算术操作由固定操作电路执行。固定操作电路可以与可编程着色器执行单元分离。在一个实施例中,在步骤120,算术操作是定义矩阵操作和/或投影几何失真的第一函数。在下文描述的上下文中,顶点坐标“v”的投影几何失真是形式为v'=ax+by+cz+dw+e的函数,其中x、y、z和w是顶点坐标,a、b、c、d和e失真因子,其可以是任何实数,“v”是x、y、z或w之一,并且v'是坐标的新值。上述方程式的任何简化形式,例如a、b、c、d或e中的至少一个等于零,也被认为是投影几何失真。投影几何失真也可能是以下形式的函数:

在一个实施例中,将投影几何失真应用于每个顶点在齐次坐标空间中的w坐标,以减小屏幕空间中基元的至少一部分的大小。在一个实施例中,基于从观察者到顶点的距离和相对于显示表面的中心的顶点位置的投影几何失真被应用于每个顶点的顶点坐标。在一个实施例中,投影几何失真对应于vr显示屏幕的光学器件的反转。在一个实施例中,显示屏幕是头戴式显示器(hmd),并且应用于步骤120的投影几何失真旨在接近hmd的显示屏幕的透镜失真。

在步骤130,将修改的顶点坐标变换到屏幕空间以产生屏幕空间顶点坐标。在下文描述的上下文中,将顶点从齐次坐标空间变换到屏幕空间对应于根据视图定义变换顶点。在一个实施例中,视图定义指定显示屏幕的至少一部分,并且变换包括将修改的顶点坐标除以修改的w坐标以产生变换的3d基元(即执行透视分割)。然后,变换的3d基元被缩放以匹配显示屏幕的分辨率。

在步骤140,使用屏幕空间顶点坐标在屏幕空间中光栅化变换的3d基元。在下文描述的上下文中,光栅化确定在屏幕空间中由基元覆盖的每个像素样本。然后被覆盖的样本可以被着色以产生用于显示的图像。

现在将阐述关于各种可选架构和特征的更多说明性的信息,根据用户的期望可能或不可能实现上述架构。应该尤其注意,阐述了以下信息是为了说明的目的,并不应被解释为以任何方式限制。任何以下特征可以选择性地并入或不并入所描述的其它特征。

当应用投影几何失真时,顶点坐标的修改或操纵应该是可逆的,使得当执行均匀采样渲染然后进行重采样时,产生相同或近似相同的图像(模数采样偏差)。例如,线应显示为线,与眼睛具有共同角度的点应在变换后保持与眼睛的相对距离等。使用线性变换执行每个顶点的w坐标的投影几何失真,确保为每个顶点保持与观察者的相对距离。进一步地,执行w坐标的投影几何失真还可以使现有的顶点着色器、光栅化器和像素着色器被用于产生扭曲或失真的图像,同时添加固定操作电路以应用投影几何失真来修改w坐标。在一个实施例中,驱动器程序被配置为将指令插入由可编程着色器执行单元执行的着色器程序中,以应用投影几何失真来修改w坐标。

为了达到在显示屏幕中心最高处以及落在外围(在任何方向上)的可变像素采样分辨率的期望特性,显示屏幕可以被分成四个单独的区域。在一个实施例中,每个区域与齐次坐标空间中的不同视图相关联。在一个实施例中,应用不同的投影几何失真来对每个区域差异化地修改顶点坐标,使得采样率可以在每个区域内变化。投影几何失真可以被固定或者可以由着色器程序来指定。由顶点着色器生成的顶点坐标可以具有根据一个或更多个视图应用投影几何失真以产生修改的顶点。

图2a示出了根据一个实施例的头戴式显示器(hmd)的显示屏幕220。每个眼睛都观看1080×1200像素的显示屏幕。图2a中示出了两个函数。第一函数是示出显示屏幕上的像素之间的距离的网格221。图2a中的网格221是均匀的(每个单元格是120个像素的正方形),正如人们所期待的那样(显示屏幕像素的尺寸是均匀的)。第二函数,一系列径向对称的圆(如虚线所示)表示将在下文描述的透镜失真函数的定值样本点。坐标系轴222以透镜和透镜失真函数为中心。

图2b示出了根据一个实施例的图2a中所示的透镜失真函数205。透镜失真函数205是在vr显示系统中使用的光学透镜的特性,在由眼睛看到之前,其使由显示器投影的图像失真。由透镜引起的失真效应与摄影中由“鱼眼透镜”引起的失真相反。透镜失真函数通过改变采样距离来描述变换,其应该应用于渲染图像以反转透镜失真,使得观察者看到非失真的图像。在一个实施例中,变换是用于反转特定透镜的透镜失真的反转透镜失真函数的近似值。

在图2b中,透镜中心点处的采样距离是基线采样距离,因此在该点处所需采样距离与中心点采样距离之比为1.0。随着与距离透镜中心的距离增加(如横坐标所示),最终显示屏幕的每个像素之间的采样距离也会非线性增加(如纵坐标所示)。如果首先将图像渲染到使用恒定采样距离(匹配透镜中心所需的采样率)的渲染目标,然后重新映射以显示帧缓冲像素,则在透镜边缘将会存在相对于显示器所需的样本数量过多的帧缓冲像素。渲染目标的多个像素将一起平均以产生显示屏幕的每个像素。可以通过将用于产生显示屏幕的每个像素的渲染目标的像素数量减少到大约一个来提高效率。

图2c示出了根据一个实施例的图2b的透镜失真函数205(采样距离与透镜中心处的采样距离之比)作为二维显示位置的透镜失真函数206而不是透镜中心的径向距离的函数。在显示屏幕220的拐角处,采样距离大(即大于5)。

图2d示出了图2a中所示的采样网格经由图2b中所示的透镜失真函数205变换。在该图中,网格中的交点仍然表示最终显示帧缓冲区中所需的采样位置,但是现在网格看起来翘曲,作为透镜失真函数的结果,外围的采样位置被远远隔开。渲染目标边界210表示覆盖显示帧缓冲区的子集的帧缓冲区。在一个实施例中,选择渲染目标像素分辨率使得像素中心处的采样距离与显示所需的采样距离相匹配,并且渲染目标分辨率为1360×1660像素(大于hmd显示屏幕的分辨率)。注意,显示屏幕220的角部不被渲染目标210覆盖;渲染目标210必须被做得更大以覆盖显示屏幕220的角落中的像素。还要注意,由于翘曲的覆盖网格的尺寸朝向渲染目标210的角部增加,所以渲染目标210生成比匹配这些区域中的最终显示屏幕220所需的采样率更多的像素。如图2c所示,在本实施例中,hmd显示屏幕220的透镜中心225相对于渲染目标210碰巧位于偏心的位置。

图2e与图2a相同,其中来自图2d的渲染目标边界210被添加到该图示。如上所述,渲染像素不覆盖整个hmd显示屏幕220。

给定目的以确定渲染目标210的水平和垂直分辨率,其至少完全覆盖与透镜中心水平或垂直排列的显示像素,渲染目标210的分辨率可以通过计算在透镜中心225处透镜失真函数205在x和y方向上的一阶导数来确定。一阶导数大约是屏幕空间中显示像素的大小,因此需要对应于渲染目标210的分辨率的一阶导数的倒数,以确保渲染目标210的至少一个像素有助于显示屏幕220的每个像素。当使用基于透镜失真函数205的一阶导数的采样率来渲染图像时,渲染像素与显示像素的比率为1.74:1,因此效率低下。

通过在算法上修改渲染几何的顶点坐标,以可变的采样率/间距渲染视图是可能的。在一个实施例中,通过随着距离透镜中心225的距离增加而增加(可变)的量,w坐标被修改以有效地“压缩”基元。在压缩基元中使用固定的采样距离相当于在原始基元上使用可变采样距离,因此修改w坐标的技术达到了预期效果。通过增加w坐标作为x坐标和y坐标的线性函数,每个显示屏幕像素的渲染像素的数量可能随着距离透镜中心225的距离增加而减小。在本实施例中,修改后的w坐标w'被作为线性函数w'=w+ax+by进行计算,其中w是在顶点着色期间或在顶点着色之后以及在透视分割和应用视口变换之前为顶点计算的w坐标。线性函数可以由线性变换表示:

改变a和b投影失真因子的值改变失真函数。如果a和b投影失真因子为零,则w坐标不变。对于给定的ab投影失真因子对,可以计算渲染目标所需的分辨率。渲染目标分辨率确定需要着色多少像素以产生由显示系统显示的图像。由于a和b投影失真因子对于给定透镜系统可能是固定值,a和b投影失真因子的值使得渲染的像素数量最小化,更具体地说是着色。在一个实施例中,一阶导数对的行列式被计算作为映射到渲染目标的显示屏幕像素的面积的近似值。对于每个ab投影失真因子对,执行搜索以识别具有最小面积的显示屏幕像素。被识别的像素用于计算渲染目标的分辨率。在一个实施例中,执行对一系列ab投影失真因子值的搜索以识别使着色像素的数量最小化的ab投影失真因子对,如结合图7e的更详细的描述。

使用线性变换的w坐标的修改确保了在顶点着色(例如,裁剪、透视分割、视口变换、光栅、z缓冲区等)之后的图形处理流水线的部分将正常工作。重要的是,不计划由hmd显示的应用可以被执行,而不需要对应用进行任何修改以产生由hmd显示的图像。在一个实施例中,软件驱动器可以被配置为当执行应用时能够修改w坐标以有效地产生用于由hmd显示的图像。在一个实施例中,使用线性变换修改除了w坐标之外的一个或更多个坐标,以改变用于渲染由hmd显示的图像的采样率。

图3示出了根据一个实施例的图形处理流水线300。作为选择,图形处理流水线300可以在先前图和/或任何后续图的功能和架构的上下文中实现。当然,无论如何,图形处理流水线300可以在任何期望的环境中实现。还应当注意,上述定义可以应用于当前描述中。

如所示,图形处理流水线300可以包括至少一个顶点着色阶段302。图形处理流水线300还可以选择性地包括一个或更多个镶嵌初始化着色阶段304、镶嵌着色阶段306、几何着色阶段308和像素着色阶段314。在一个实施例中,顶点着色阶段302、镶嵌初始化着色阶段304、镶嵌着色阶段306、几何着色阶段308、像素着色阶段314和/或与其相关联的硬件/软件可以表示图形处理流水线300(例如“齐次坐标空间着色器流水线”或“着色器流水线”等)的阶段。

进一步地,在一个实施例中,图形处理流水线300可以包括投影单元310、光栅单元312和光栅操作(rop)单元316。另外,在一个实施例中,光栅操作单元316可以在着色像素数据上执行各种操作,例如执行α测试、z测试、模板测试,以及将着色像素数据与对应于与像素相关联的其他片段的其他像素数据混合。当光栅操作单元316完成处理着色像素数据时,着色像素数据可以被写入显示表面(即,渲染目标诸如帧缓冲区、色缓冲区、z缓冲区等)。光栅操作单元316可以对每个样本执行z测试,使得可见像素数据被写入帧缓冲区,并且模糊像素数据不被写入帧缓冲区。

在一个实施例中,图形处理流水线300的着色阶段(例如,顶点着色阶段302、镶嵌初始化着色阶段304、镶嵌着色阶段306、几何着色阶段308和像素着色阶段314)可以由一个或更多个可编程的着色器执行单元实现。在一个实施例中,顶点着色阶段302、镶嵌初始化着色阶段304、镶嵌着色阶段306、几何着色阶段308、像素着色阶段314和/或与其相关联的硬件/软件可以在表示3d图形基元的数据(即,基元数据)上顺序地执行处理操作。一旦完成了在图形处理流水线300上游的投影单元310内的着色阶段执行的顺序处理操作,在一个实施例中,投影单元310可以利用该数据。在一个实施例中,由图形处理流水线300内的一个或更多个着色阶段处理的基元数据可被写入高速缓存(cache)(例如,l1高速缓存、顶点高速缓存等)。在这种情况下,在一个实施例中,投影单元310可以访问高速缓存中的数据。在当前描述的上下文中,投影单元310是指任何与图形处理器相关的一个单元或者复数个单元,其能够将虚拟空间中的顶点的三维位置变换为二维坐标的单元(例如能够被用于显示等)。在一个实施例中,投影单元310和光栅单元312被实现为固定操作电路。

在当前描述的上下文中,顶点着色阶段指的是操纵个体顶点属性(例如位置、颜色和纹理坐标)的程序,或者指的是能够操纵个体顶点属性(例如位置、颜色和纹理坐标)的任何图形处理器相关的电路。进一步,在当前描述的上下文中,镶嵌着色器是指与能够用于执行镶嵌的图形处理器相关联的任何单元或代码。此外,几何着色器可以指能够控制基元(例如三角形)的处理的任何单元或代码。像素着色器可以指能够控制像素的处理的任何单元或代码。

像素着色器314可以诸如通过执行照明操作或使用针对像素的插值纹理坐标采样纹理映射来生成像素的着色像素数据(即,着色属性诸如颜色值)。着色像素数据可以是每个样本的着色属性,其中像素内的一个或更多个样本共享相同的计算的着色属性值,或者其中为像素内的每个样本位置计算着色属性值。像素着色器314生成每个样本的着色像素数据,其被传输至光栅操作单元316。

在一个实施例中,投影单元310被配置为从顶点着色阶段接收顶点坐标并处理至少一个视图的顶点坐标。在当前描述的上下文中,投影单元310表示能够在基元数据上执行裁剪、遴选、透视校正和视口缩放操作的任何单元或单元组。进一步地,投影单元310可以被配置为在执行裁剪、遴选、透视校正和视口缩放操作之中的一个或更多个之前,在齐次坐标空间中应用投影几何失真或修改每个顶点的w坐标。在一个实施例中,投影单元310可以被配置为当指定多个视图时,具体地针对每个视图对w坐标应用投影几何失真。在一个实施例中,投影单元310被配置为执行图1中所示的步骤110、120和130。在另一个实施例中,定义了两个或更多个投影状态,其中每个投影状态可以包括被应用于一个或更多个3d基元的w坐标的视图定义和投影几何失真中的至少一个。

图4a示出了根据一个实施例的未对表示场景400的基元应用投影几何失真渲染的场景400。图4b显示了根据另一实施例的在对整个视图应用几何失真以产生图像410之后渲染的场景400的图示。应用于每个w坐标的投影几何失真“压缩”右下角405中的对象,而在左上角410中的对象被放大。

图4c示出了根据一个实施例的分割为四个不同区域415、420、425和430的显示屏幕渲染的场景400,每个区域对应于不同的指定区域投影几何失真。显示屏幕可以在透镜中心225被划分为象限(即,四个区域415、420、425和430),并且可以为四个区域415、420、425和430中的每一个计算一对投影失真因子(a和b)。在每个象限中,位于接触透镜中心的拐角处的几何形状的样本可以以其原始比例保持,或者可以被扩展,而在对角处,几何形状最大程度地从其原始比例收缩。每个象限可以设置剪刀操作,以便仅在每个视图的特定象限中进行渲染。不与象限相交的基元的顶点可能会被丢弃,使得只有象限内的基元通过对w坐标应用投影几何失真来渲染。在一个实施例中,基于渲染目标中的显示屏幕像素的近似面积来计算投影失真因子a和b。

图5a示出了根据一个实施例的包括四个不同区域的显示屏幕的视图。因为透镜偏心,并且有更宽的垂直视场,所以计算投影失真因子以产生四个不同的正和负的x和y坐标对。对每个单独的象限的四对投影失真因子进行了优化。重要的是,投影失真因子沿着象限之间的共同边界一致。

可以计算透镜失真函数的一阶导数的最小值,以确定要渲染的像素的数量或给定的投影失真因子的采样率。通过改变投影失真因子,与使用常规技术相比,所需像素的数量可能会减少。沿着象限边界的投影失真因子被认为是沿着每个象限边界确定最佳投影几何失真函数。

在该实施例中,渲染目标的分辨率为1158×1330像素。第一象限505的像素分辨率为641×745,以及投影失真因子a和b分别为-.0405和+0.6。第二象限510的像素分辨率为517x745,以及投影失真因子a和b分别为+0.3和+0.6。第三象限515的像素分辨率为641×585,以及投影失真因子a和b分别为-.0405和-0.425。第四象限520的像素分辨率为517x585,以及投影失真因子a和b分别为+0.3和+0.425。

沿着象限边界绘制投影几何失真函数的一阶导数表示显示屏幕像素宽度或像素高度永远不会小于沿着象限边界的已渲染像素。图5b、5c、5d和5e示出了根据一个实施例的沿着象限边界的像素维度。

如图5b、5c、5d和5e所示,采样率沿着象限边界是足够的。然而,每个象限中心处或中心附近的采样率不一定是足够的。可以将一阶导数的行列式绘制为像素面积的度量,以确定每个象限的中心处或中心附近的采样率是否足够。

图6a示出了根据另一个实施例的具有基于已经应用了投影几何失真的w坐标的四个区域中的像素大小。图6a中所示的四个区域的每一个内的像素大小具有设置为1.0的基底值。在每个象限中位于“基底”605上方的像素以比产生每个显示屏幕像素所需的分辨率更高的分辨率来渲染。在每个象限中位于基底605下方的像素以比产生每个显示屏幕像素所需的分辨率更低的分辨率来渲染。

为了计算最小化渲染像素数量的投影失真因子和采样率,同时确保每个显示屏幕像素具有至少一个渲染像素,确定每个象限内的最小行列式。由于渲染的像素应该大致是正方形的,所以使用最小行列式的平方根来确定所需的渲染目标像素分辨率。最后,选择渲染目标的计算维度中较大的一个,用于划分一对象限的每个轴。

图6b示出了根据另一实施例的基于每个区域中的最小行列式应用投影几何失真的w坐标的四个区域中的像素大小。注意,每个象限中的所有渲染像素都在基底605上方。在一个实施例中,不同区域中的每一个可以对应于各自的视图。

图6c示出了根据另一实施例的与图2c中所示的透镜失真函数206叠加的图6b中所示的曲线图。如图6c所示,可以通过定义用于渲染显示屏幕的中心的区域的第五投影几何失真函数来执行附加优化以减少着色操作的数量。在一个实施例中,图形流水线被配置为基于各自对应于显示屏幕的不同区域的五个不同视图渲染五个不同的图像,如图6e所示。在一个实施例中,对w坐标应用投影几何失真渲染四个视图,并且在不使用投影几何失真的情况下渲染一个中心视图。换句话说,第五投影几何失真函数是不改变与基元顶点相关联的w坐标的恒等变换。

图6d示出了图6c的俯视图。示出了根据另一个实施例的五个区域,其中w坐标在四个区域中被变换以修改像素大小。每个象限对应于不同的渲染目标。每个象限被透镜失真函数206分割,以形成菱形区域216,其中四个象限相接。在一个实施例中,当渲染对应于菱形区域216的视图时可以应用恒等变换。

通过首先计算与四个视图相对应的四个渲染目标的分辨率,可以确定像素着色节省。四个区域的周界形成一个八角形,其包括大约1392400个渲染像素,与hmd显示屏幕的1296000个像素相比,使得比所需的多7.4%的像素被着色。起因于以较低分辨率渲染菱形区域216的该节省被计算作为渲染目标的面积,减小了变换的w坐标和未被变换的w坐标之间的像素大小的比率。如图6d所示的例子,比率为(1360*1660)/(19062)=62%。计算形成菱形区域216的每个三角形的面积,并从总分辨率中减去缩放(38%)面积,表示只有比所需的多约4%的像素被着色。

图6e示出了根据另一个实施例的显示屏幕620的五个区域。第一区域625被定义为显示屏幕620的左上象限。第二区域630被定义为显示屏幕620的右上象限。第三区域635被定义为显示屏幕620的左下象限。第四区域640被定义为显示屏幕620的右下象限。第五区域645是被定义为显示屏幕620的中心部分的中心菱形区域(例如,菱形区域216)。沿着第五区域645与第一、第二、第三和第四区域625、630、635和640中的每一个之间的四个边界,视图特定失真因子相等,即a=b。因此,在该四个边界上,ax+by为常数,且w'=w+d,其中d=常数值ax+by。

在光栅化之后可以使用剪刀操作来丢弃不在包围第五区域645的边界框656内的基元。在一个实施例中,在着色之前可以应用模板操作以从其他四视图中划出第五区域645。在另一个实施例中,在光栅化之后可以使用着色操作来划出第五区域645。

在一个实施例中,指定了搅乱顶点组件的视图特定失真因子。例如,视图特定失真因子可以对应于90度旋转或镜像操作的投影几何失真。以下投影几何失真交换x和y组件,且x被抵消并存储在y'中:

近似透镜失真函数的投影几何失真可以表示为:

图7a示出了根据一个实施例的顶点坐标修改单元700的框图,其被配置为使用可变采样率执行坐标变换以渲染基元。在一个实施例中,顶点坐标修改单元700可以被包括在被配置为执行图3所示的投影单元310的操作的电路中。在另一个实施例中,顶点坐标修改单元700可以作为电路被包括在图3所示的顶点着色器302和投影单元310之间。在一个实施例中,顶点坐标修改单元700是在齐次坐标空间中处理着色顶点数据的固定操作电路。

顶点坐标修改单元700包括视图查找单元710和投影几何失真单元715。顶点坐标修改单元700在齐次坐标空间中接收着色顶点。顶点可以由x、y、z和w坐标中的一个或更多个来定义。视图标识符可以包括顶点坐标,其标识至少一个与顶点坐标相关联的视图。每个基元与单视图相关联。基元可以被广播或复制以将基元的单独副本提供给多视图的每个视图,使得每个基元仅与一个视图相关联。该视图可以对应于整个显示屏幕或者多视图可以被定义为每个视图对应于显示屏幕的不同区域。视图查找单元710接收顶点坐标并向投影几何失真单元715输出视图特定投影失真因子,其是由顶点坐标指定的基元相交。投影几何失真单元715使用投影失真因子变换顶点坐标,以计算视图特定修改顶点坐标。在某些情况下,由顶点坐标指定的基元可能实际上不与视图相交。如果是这样,在被顶点坐标修改单元700输出之后,基元将被裁剪,以丢弃基元的全部或一部分。

在一个实施例中,投影几何失真单元715被配置为计算修改的w坐标,w'作为线性函数w'=w+ax+by,其中a和b由视图查找单元710提供。在另一个实施例中,投影几何失真单元715被配置为计算修改的w坐标,w'被作为线性函数w'=ax+by+cz+dw被计算,其中a、b、c和d由视图查找单元710提供。

图7b示出了根据一个实施例的用于修改顶点坐标以改变采样率的方法720。尽管方法720在图形处理流水线300的上下文中被描述,然而方法720也可以由程序、软件驱动器、定制电路或者由定制电路、软件驱动器和程序中的一个或更多个的组合来执行。进一步地,本领域普通技术人员将理解,执行方法720的任何系统都在本发明的实施例的范围和精神内。

在步骤705,接收3d基元的顶点坐标。在步骤725,与3d基元相交的视图的视图特定投影失真因子被识别并被提供给投影几何变换单元715。在一个实施例中,与顶点坐标一起接收对应于该视图的视图标识符。在步骤730,使用视图特定投影失真因子对顶点坐标执行投影几何失真,以产生齐次坐标空间中的修改的顶点坐标。

在步骤735,顶点坐标修改单元700确定由修改的顶点坐标定义的基元是否在视图内,并且,如果否,然后在步骤740定义基元的顶点被丢弃。在一个实施例中,3d基元的顶点坐标被广播(即,多播)到多个顶点坐标修改单元700,其中每个顶点坐标修改单元700对应于不同的视图。因此,对于两个或更多个试图,至少步骤705、725、730、735和740可以并行执行。重要的是,顶点可以被着色一次,然后一个或更多个投影几何失真可以被应用于着色顶点,以生成与一个或更多个投影几何失真中的每一个相关联的修改顶点。用于3d基元的顶点坐标被存储一次并且用于一个或更多个3d基元的集合的修改的顶点坐标的多个版本可以由一个或更多个顶点坐标修改单元700生成。

在一个实施例中,在着色器程序中执行指令期间执行步骤725、730、735和740中的一个或更多个。在一个实施例中,驱动器程序被配置为将指令插入到几何着色器中以执行步骤725、730、735和740中的一个或更多个。由几何着色器生成用于一个或更多个3d基元的集合的修改的顶点坐标的多个版本。

在步骤745,将修改的顶点坐标从齐次坐标空间变换到屏幕空间以产生屏幕空间顶点坐标。在步骤750,并且使用屏幕空间顶点坐标在屏幕空间中3d基元被光栅化。

图7c示出了根据一个实施例的包括顶点坐标修改单元700的图形处理流水线712的一部分。图形处理流水线721的该部分包括裁剪单元701、顶点坐标修改单元700、透视分割单元702、视口变换单元703和剪刀(scissor)单元704。在一个实施例中,图形处理流水线721的该部分被包括在图3所示的投影单元310内。图形处理流水线721的该部分可以被配置为执行方法720的步骤705、725、730、735、740和745。

在一个实施例中,裁剪(clip)单元701被配置为丢弃由在视图外部的修改的顶点坐标指定的基元的任何部分。在一个实施例中,透视分割单元702通过修改的w坐标w'分割顶点坐标以产生透视校正的顶点坐标。相反,传统的透视分割操作通过未修改的w坐标分割顶点坐标。在一个实施例中,视口变换单元703被配置为在透视校正的顶点坐标上执行缩放和偏移操作,以将齐次坐标空间透视校正的顶点坐标变换为屏幕空间透视校正的顶点坐标。在一个实施例中,剪刀单元704被配置为在基元被光栅化之前在屏幕空间透视校正的顶点坐标上执行剪刀操作。

图7d示出了根据另一实施例的包括顶点坐标修改单元700的图形处理流水线722的一部分。图形处理流水线722的该部分也包括裁剪单元701、顶点坐标修改单元700、透视分割单元702、视口变换单元703和剪刀单元704。在一个实施例中,图形处理流水线722的该部分被包括在图3所示的投影单元310内。图形处理流水线722的该部分可以被配置为执行方法720的步骤705、725、730、735、740和745。然而,与图形处理流水线721的部分相比,在图形处理流水线722的该部分中,在由顶点坐标修改单元700修改顶点坐标之前完成裁剪。

图7e示出了根据用于vr显示应用的一个实施例的用于确定可变采样率的方法760。被确定的可变采样率为每个最终hmd显示屏幕像素提供至少一个渲染目标像素。尽管方法760在图形处理流水线300的上下文中被描述,然而方法760也可以由程序、软件驱动器、定制电路或者由定制电路、软件驱动器和程序中的一个或更多个的组合来执行。进一步地,本领域普通技术人员将理解,执行方法760的任何系统都在本发明的实施例的范围和精神内。

在步骤755,接收用于显示屏幕的透镜失真函数。在一个实施例中,透镜失真函数近似于用于反转特定透镜的光学失真的反向透镜失真函数。在步骤765,定义一个或更多个视图,每个视图对应于显示屏幕的一个区域,其中每个区域与失真函数的不同部分相关联。在步骤770,为每个视图初始化视图特定投影失真因子。在一个实施例中,视图特定投影失真因子被初始化为旨在为一个像素的每个视图产生最小像素大小的值。在一个实施例中,视图特定投影失真因子被初始化为旨在最小化为每个视图渲染的像素数量的值。

在步骤775,基于各自的视图特定投影失真因子,计算一个或更多个视图中的每一个的最小行列式。在一个实施例中,最小行列式等于像素的最小面积。在步骤780,基于各自的最小行列式计算一个或更多个视图中的每一个的最小像素大小。在一个实施例中,最小像素大小是在步骤775针对视图计算的最小行列式的倒数或平方根。除了控制视图的最小像素大小之外,投影失真因子还控制为视图所渲染的像素数量。因此,投影失真因子控制渲染目标的像素分辨率。对于特定视图,执行搜索以找到最小化渲染像素的数量的投影失真因子,同时也保持最小像素大小,使得达到期望的图像质量。对应于每个视图的渲染目标具有基于特定显示系统所定义的以像素为单位的宽度和高度。

在步骤782,基于最小像素大小和渲染目标尺寸计算要为每个视图渲染的像素数目。在步骤785,将为每个视图渲染的像素数目与先前为各自的视图计算的像素数目相比较。当为每个视图将要渲染的像素达到最小数目时,在步骤795完成搜索。否则,在至少一个视图的视图特定投影失真因子被更新为不同的值之后,执行步骤775、780、782和785的另一次迭代。

一个或更多个视图中的每一个的投影失真因子对应于视图特定采样率(即渲染像素/视图),并且可以被存储在视图查找单元710中。实际上,对已渲染的3d几何应用投影几何失真使几何变形以更好地匹配特定显示系统的光学性能。

图8示出了根据一个实施例的并行处理单元(ppu)800。作为选择,ppu800可以在先前图和/或任何后续图的功能和架构的上下文中实现。当然,无论如何,ppu800可以在任何期望的环境中实现。还应当注意,在当前描述中可以应用上述定义。

虽然本文中提供了并行处理器作为ppu800的示例,但是应该尤其注意,提出了这样的处理器仅为了说明的目的,并且可以使用任何处理器来补充和/或替代用于相同的目的。在一个实施例中,ppu800被配置为在两个或更多个可编程着色器执行单元(seu)850中同时执行多个线程。线程(即执行线程)是在特定seu850内执行一组指令的实例化。下面结合图9更详细地描述的每个seu850可以包括但不限于一个或更多个处理内核、一个或更多个加载/存储单元(lsu)、一级(l1)高速缓存、共享内存等。每个seu850可以作为与可编程和/或固定操作电路组合的着色阶段操作。

在一个实施例中,ppu800包括输入/输出(i/o)单元805,其被配置为通过系统总线802从中央处理单元(cpu)(未示出)传输和接收通信(即,命令、数据等)。i/o单元805可以实现用于通过pcie总线通信的外围组件互连高速(pcie)接口。在可选地实施例中,i/o单元805可以实现其他类型的公知总线接口。

ppu800还包括主机接口单元810,其将命令解码并将命令传输至网格管理单元815或ppu800的其他单元(例如,存储器接口880等),如命令所可以指定的。主机接口单元810被配置为在ppu800的各种逻辑单元之间路由通信。

在一个实施例中,被编码为命令流的程序被cpu写入缓冲区。缓冲区是存储器中的区域,该存储器例如存储器804或系统存储器,其可由cpu和ppu800两者访问(即,读/写)。cpu将命令流写入缓冲区,以及然后传输指针到ppu800命令流的开头。

在一个实施例中,ppu800包括x个seu850(x)。例如,ppu800可以包括16个不同的seu850。每个seu850是多线程的并且被配置为同时执行来自特定线程块的多个线程(例如,32个线程)。seu850中的每个经由交叉开关860(或其他类型的互连网络)连接到二级(l2)高速缓存865。l2高速缓存865连接到一个或更多个存储器接口880。存储器接口880实现用于高速数据传输的16、32、64、128比特数据总线。在一个实施例中,ppu800包括u个存储器接口880(u),其中每个存储器接口880(u)连接到相应的存储器设备804(u)。例如,ppu800可以连接到多达6个存储设备804,诸如图形双倍数据速率、版本5、同步动态随机存取存储器(gddr5sdram)。

在一个实施例中,ppu800实现多级存储器层级。存储器804位于耦合到ppu800的sdram的芯片外。来自存储器804的数据可以被取来并存储在位于芯片上并在各种seu850之间共享的l2高速缓存865中。在一个实施例中,seu850中的每个还实现l1高速缓存。l1高速缓存是用于特定seu850的专用存储器。l1高速缓存中的每一个耦合到共享的l2高速缓存865。来自l2高速缓存865的数据可以被取来并存储在l1高速缓存中的每个中,以在seu850的功能单元中进行处理。

在一个实施例中,ppu800包括图形处理单元(gpu)。ppu800被配置为接收用于处理图形数据的指定着色器程序的命令。图形数据可以被定义为一组基元,例如点、线、三角形、四边形、三角形带等。通常,基元包括指定基元的多个顶点的数据(例如,在模型空间坐标系中等)以及与基元的每个顶点相关联的属性。ppu800可以被配置为处理图形基元以生成帧缓冲区(即,显示器的像素中的每个的像素数据)。驱动器内核实现图形处理流水线,例如由openglapi定义的图形处理流水线。

应用程序将场景的模型数据(即,顶点和属性的集合)写入至存储器。模型数据定义了可能在显示器上可见的每个对象。然后,应用程序对驱动器内核进行api调用,其请求渲染和显示模型数据。驱动器内核读取模型数据并将命令写入缓冲区以执行一个或更多个操作来处理模型数据。命令可以编码不同的着色器程序,包括顶点着色器、外壳着色器、几何着色器、像素着色器等中的一个或更多个。例如,gmu815可以配置一个或更多个seu850以执行顶点着色器程序,其处理由模型数据定义的多个顶点。在一个实施例中,gmu815可以配置不同的seu850以同时执行不同的着色器程序。例如,seu850的第一子集可以被配置为执行几何着色器程序,而seu850的第二子集可以被配置为执行像素着色器程序。seu850的第一子集处理顶点数据以产生经处理的顶点数据,并将该处理的顶点数据写入至l2高速缓存865和/或存储器804中。在一个实施例中,指令可以被包括在几何着色器程序中以将投影几何失真应用到一个或更多个顶点坐标并生成修改的顶点坐标。在一个实施例中,一个或更多个seu850可以包括一个或更多个顶点坐标修改单元700,其各自被配置为在一个或更多个顶点坐标上执行算术操作并生成修改的顶点坐标。在一个实施例中,一个或更多个顶点坐标修改单元700各自被配置为将投影几何失真应用于一个或更多个顶点坐标并生成修改的顶点坐标。

在处理的顶点数据被光栅化(即,从三维数据变换为屏幕空间中的二维数据)以产生片段数据之后,seu850的第二子集执行像素着色器以产生处理的片段数据,然后与其他处理的片段数据混合并写入至存储器804中的帧缓冲区。几何着色器程序和像素着色器程序可以并行执行,以流水线方式处理来自相同场景的不同数据,直到场景的所有模型数据被渲染到帧缓冲区。然后,将帧缓冲区的内容被传输到显示控制器,以在显示设备上显示。

ppu800可以包括在台式计算机、膝上型计算机、平板计算机、智能电话(例如,无线、手持设备)、个人数字助理(pda)、数字照相机、手持电子设备等中。在一个实施例中,ppu800体现在单个半导体衬底上。在另一个实施例中,ppu800与一个或更多个其他逻辑单元一起被包括在单芯片系统(soc)中,逻辑单元诸如精简指令集计算机(risc)cpu、存储器管理单元(mmu)、数模变换器(dac)等。

在一个实施例中,ppu800可以包括在显卡上,显卡包括一个或更多个诸如gddr5sdram的存储设备804。显卡可以被配置为与台式计算机(包括例如北桥芯片组和南桥芯片组)的主板上的pcie槽接口。在又一实施例中,ppu800可以是包括在主板的芯片组(即,北桥)中的集成图形处理单元(igpu)。

图9示出了根据一个实施例的图8的seu850。如图9所示,seu850包括指令高速缓存905、一个或更多个调度单元910、寄存器文件920、一个或更多个处理内核950、零个或更多个双精度单位(dpu)951、一个或更多个特定函数单元(sfu)952、一个或更多个加载/存储单元(lsu)953、互连网络980、共享存储器/l1高速缓存970、以及一个或更多个纹理单元990。

每个seu850包括寄存器文件920,其为seu850的功能单元提供一组寄存器。在一个实施例中,在功能单元的每个之间分割寄存器文件920,使得每个功能单元被分配在寄存器文件920的专用部分。在另一个实施例中,在由seu850执行的不同翘曲之间分割寄存器文件920。寄存器文件920为连接到功能单元的数据路径的操作数提供临时存储。

每个seu850包括l个处理内核950。在一个实施例中,seu850包括大量(例如128等)不同处理内核950。每个内核950是完全流水线的单精度处理单元,其包括浮点运算逻辑单元和整数运算逻辑单元。在一个实施例中,浮点运算逻辑单元实现用于浮点运算的ieee754-2008标准。每个seu850还包括实现双精度浮点运算的m个dpu951,执行特殊功能(例如复制矩形、像素混合操作等)的n个sfu952,以及实现在共享存储器/l1高速缓存970与寄存器文件920之间的加载和存储操作的p个lsu953。在一个实施例中,seu850包括4个dpu951、32个sfu952和32个lsu953。

每个seu850包括互连网络980,其将功能单元中的每个连接至寄存器文件920和共享存储器/l1高速缓存970。在一个实施例中,互连网络980是交叉开关,其可以被配置为将任何功能单元连接到寄存器文件920中的任何寄存器或共享存储器/l1高速缓存970中的存储位置。

在一个实施例中,seu850在gpu内实现。在这样的实施例中,seu850包括j个纹理单元990。纹理单元990被配置为从存储器804加载纹理图(即,纹素的2d阵列),并对纹理图采样以产生用于着色器程序的采样纹理值。纹理单元990使用mip-map(即,不同层次的细节的纹理图)来实现诸如反锯齿操作之类的纹理操作。在一个实施例中,seu850包括8个纹理单元990。

上述ppu800可以被配置为执行比常规cpu快得多的高度并行计算。并行计算在图形处理、数据压缩、生物识别、流处理算法等方面具有优势。

图10示出了其中可以实现各种先前实施例的各种架构和/或功能的示例性系统1000。如所示,提供了包括连接到通信总线1002的至少一个中央处理器1001的系统1000。通信总线1002可以使用任何合适的协议来实现,诸如pci(外围组件互连)、pci-高速、agp(加速图形端口)、超传输或任何其他总线或点对点通信协议。系统1000还包括主存储器1004。控制逻辑(软件)和数据被存储在可以采取随机存取存储器(ram)形式的主存储器1004中。

系统1000还包括输入设备1012、图形处理器1006和显示器1008,即常规crt(阴极射线管)、lcd(液晶显示器)、led(发光二极管)、等离子体显示器或诸如此类。在一个实施例中,为显示器1008定义失真函数。可以从输入设备1012接收用户输入,例如键盘、鼠标、触摸板、麦克风等。在一个实施例中,图形处理器1006可以包括多个着色器执行单元、光栅化单元等。前述单元中的每一个甚至可以位于单个半导体平台上以形成图形处理单元(gpu)。

在当前描述中,单个半导体平台可以指唯一的基于半导体的集成电路或芯片。应当注意,术语单个半导体平台还可以指具有模拟芯片上操作的增强连通性的多芯片模块,并且相对于使用传统的中央处理单元(cpu)和总线实现实质性改善。当然,各个模块也可以根据用户的需要单独地或以半导体平台的各种组合来定位。

系统1000还可以包括辅助存储器1010。辅助存储器1010包括例如硬盘驱动器和/或可移动存储驱动器,表示软盘驱动器、磁带驱动器、光盘驱动器、数字通用盘(dvd)驱动器、记录设备、通用串行总线(usb)闪存。可移动存储驱动器以公知的方式读取和/或写入可移动存储单元。计算机程序或计算机控制逻辑算法可以存储在主存储器1004和/或辅助存储器1010中。这样的计算机程序,当执行时,使系统1000能够执行各种功能。主存储器1004、存储器1010和/或任何其它存储器是计算机可读介质的可能示例。

在一个实施例中,各种先前的图的架构和/或功能可以在中央处理器1001、图形处理器1006、能够具有中央处理器1001和图形处理器1006的能力的至少一部分的集成电路(未示出)、芯片组(即,被设计为用于执行相关功能的作为单元工作和出售的一群集成电路)和/或就此而言的任何其他集成电路的上下文中实现。

然而,各种先前的图的架构和/或功能可以在通用计算机系统、电路板系统、专用于娱乐目的的游戏机系统、特定于应用的系统和/或任何其他期望的系统的上下文中实现。例如,系统1000可以采用台式计算机、膝上型计算机、服务器、工作站、游戏机、嵌入式系统和/或任何其他逻辑类型的形式。然而,系统1000可以采取各种其他设备的形式,包括但不限于个人数字助理(pda)设备、移动电话设备、电视等。

进一步,尽管未示出,系统1000可以耦合到用于通信目的的网络(例如,电信网络,局域网(lan),无线网络,诸如因特网、对等网络、有线电视网络等的广域网(wan))。

尽管上面已经描述了各种实施例,但是应当理解,它们仅仅是作为示例性而非限制性的。因此,优选实施例的幅度和范围不应受到上述任何示例性实施例的限制,而应仅根据所附权利要求及其等同物来限定。

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