混叠伪影包括高频伪影,在XR中,这种伪影会在3D多边形或其他几何形状的一个或多个边缘上呈现锯齿状或阶梯状线条。例如,当3D场景被渲染到显示器的像素网格上时,每个像素可以根据像素是否被3D场景中的多边形或其他几何体覆盖而着色。
然而,对于仅部分覆盖并沿着多边形或其他几何形状的边缘出现的像素,如果不部署抗混叠,部分覆盖的像素可能会在几何形状边缘和背景之间以锯齿状或阶梯状颜色过渡的方式变得明显。
另外,传统的全场景抗混叠FSAA技术可能需要从每像素16个颜色采样到每像素64个颜色采样来完全消除混叠伪影。这样的传统技术在计算方面可能十分昂贵。
在名为“Anti-aliasing by encoding primitive edge representations”的专利申请中,Meta介绍了一种改进的抗混叠技术。
团队提出,可以通过编码原始边缘表示来执行抗混叠。在具体实施例中,设备的计算系统可以通过栅格化一个或多个要由一组像素显示的几何形状来生成多个片段。在具体实施例中,所述像素集的像素可与所述多个片段中的一个或多个片段相关联,其中所述一个或多个片段各可包括覆盖所述像素的至少一部分的一个或多个边缘。
在特定实施例中,设备的计算系统随后可以对一个或多个片段中的每一个进行编码,以通过对一个或多个边缘中的每一个进行编码来包括表示。
设备的计算系统然后可以基于与每一个或多个边缘相关联的方向和像素覆盖确定对应于一个或多个片段的一个或多个alpha值。例如,设备的计算系统可以通过确定与一个或多个片段对应的近α值和远α值来确定一个或多个α值。
设备的计算系统随后可以基于一个或多个片段的一个或多个alpha值为像素生成颜色值。例如,设备的计算系统可以通过将一个或多个片段的至少第一片段和第二片段合并在一起来生成像素的颜色值。
计算系统同时可以通过混合分别与一个或多个片段相关联的第一颜色和第二颜色来生成像素的颜色值。因此,可以提供通过对原始边缘表示进行编码来执行抗混叠。实际上,所述方法可以提供通过存储通过像素的原始片段边缘的简化表示来执行有效抗混叠的技术,。
图2示出了图形渲染管道200的详细实施例。在一个实施例中,片段合并可以在片段着色之前执行,这样做的好处是减少了片段着色操作的次数。在具体实施例中,图形渲染管道200可以从应用程序202接收帧,以便最终在例如显示器114A、114B呈现。
从应用程序202接收到的帧可以输入到一个或多个基元组装功能模块。基元可以从应用程序202中提取对应于可划分为单个基元序列的XR对象的基元。单个基元序列随后可传递给栅格化器204,栅格化器204可用于例如生成对应于单个基元的离散片段。例如,光栅化器204可以提取对应于单个原语的顶点,并将顶点转换为一组片段,所述片段可以映射到例如显示器114A、114B的像素的特定区域的一个或多个像素。
在具体实施例中,光栅化器204随后可将离散片段传递给渲染引擎206。可以利用渲染引擎206例如将各自的片段渲染到显示器114A、114B的像素的特定区域的一个或多个像素。
渲染引擎206可向片段着色器208提供渲染的片段,其可用于例如将渲染的片段处理成一组颜色值和深度值,并最终提供给缓冲区212。
在具体实施例中,可以利用由片段着色器208处理的颜色值集和深度值集来执行合并和混合。例如,合并和混合模块210可以接收由片段着色器208处理的颜色值集和深度值集,并将由片段着色器208处理的颜色值集和深度值集与由缓冲区212存储的颜色值组合在一起。
在特定实施例中,可以提供合并和混合模块210以各种方式组合例如源和目标颜色值。所有颜色值和深度值可以存储到缓冲器212,并作为显示输出214提供到显示器114A、114B。
当图形渲染管道200渲染和显示时,混叠伪影可以明显地表现为沿着三角形或其他几何体的一个或多个边缘的锯齿状或阶梯状线条。例如,当将3D场景渲染到所述显示器114A、114B上时,每个像素可根据所述像素是否被所述3D场景中的基元覆盖而着色。
然而,对于仅部分覆盖并沿原语边缘出现的像素,如果不部署抗混叠,部分覆盖的像素可能会在几何形状边缘和背景之间的锯齿状或阶梯状颜色过渡中变得明显。
所以,可以利用图形渲染管道200并通过编码原始边缘表示来执行抗混叠。与利用MSAA或SSAA来执行抗混叠相反,Meta提出的方案可以通过编码通过像素的片段一个或多个边缘的表示来执行抗混叠。
在具体实施例中,图形渲染管道200可以通过栅格化一个或多个原语来生成多个片段,以由显示器114A、114B的一组像素显示。所述像素集的像素可与若干片段中的一个或多个片段相关联,其中所述一个或多个片段各可包括覆盖所述像素的至少一部分的一个或多个边缘。
图形渲染管道200随后可以对一个或多个片段中的每一个进行编码,以包括一个或多个边的表示。图形渲染管道200然后可以基于与每一个或多个边缘相关联的方向和像素覆盖确定对应于一个或多个片段的一个或多个alpha值。
例如,图形渲染管道200可以通过确定与一个或多个片段对应的近alpha值和远alpha值来确定一个或多个alpha值。在特定实施例中,图形渲染管道200随后可以基于一个或多个片段的一个或多个alpha值为像素生成颜色值。
在特定实施例中,图形渲染管道200可以通过将一个或多个片段的至少第一片段和第二片段合并在一起来生成像素的颜色值。图形渲染管道200同时可以通过混合分别与一个或多个片段相关联的第一颜色和第二颜色来生成像素的颜色值。
图3A-3D演示了通过编码原始边缘表示来执行抗混叠的示例。
如前所述,图形渲染管道200可以执行基元的栅格化,以生成基元片段并将基元片段304E-304H、308E-308H渲染到例如像素302A-302D、302E-302H。可以理解的是,每个像素302A-302D、302E-302H可以包括任意数量的原始片段304E-304H、308E-308H。
每个原始片段304E-304H、308E-308H可以用信息进行编码。例如,可以分析每个各自的原始片段304E-304H、308E-308H,以确定所述原始片段是否完全覆盖各自的像素302A-302D、302E-302H。如果是这样,则可以确定所述各自的原始片段304E-304H、308E-308H不包括任何边缘。
参考图3A,各自的原始片段304A-304D包括穿过像素302A-302D的边缘306A-306D。根据原始边缘表示编码技术,可以将边缘306A-306D的各自表示与原始片段304A-304D一起编码,其中边缘306A-306D的各自表示可以包括各自边缘306A-306D的法向量和与各自边缘306A-306D相关的像素302A-302D覆盖。
在具体实施例中,图形渲染管道200然后可以基于相应边缘306A-306D的法向量和与相应边缘306A-306D相关联的像素302A-302D覆盖确定对应于相应原始片段304A-304D的一个或多个alpha值。
一个或多个alpha值指定每个各自像素302A-302D的覆盖范围,并用于合并和/或混合原始片段304A-304D各自边缘306A-306D。
如图3B所示,可以确定一个或多个alpha值和相关的像素覆盖分类,以合并和/或混合原始片段304A-304D的相应边缘306A-306D。
基于一个或多个alpha值和相关的像素覆盖分类,图形渲染管道200可以通过为一个或多个原始片段304E-304H、308E-308H的像素值生成颜色值来执行两个或多个原始片段304E-304H、308E-308H的像素值的合并和/或混合。
例如,可以将运行实施例300A的原语片段304E和308E合并在一起。像素302E可以包括相互堆叠在一起的多个原始片段304E和308E。当运行例300A的各自原始片段304E和308H的边缘306E、310E相邻时,可以将原始片段304E和308H合并在一起以减少或消除潜在的混叠伪影。
为了计算适当的混合,图形渲染管道200可以部署一个或多个预定规则来计算混合情况的数量,并且如果各自的边缘小于90度,则图形渲染管道200可以插值来自平行和正交情况的覆盖结果。
图3C示出了通过指定原语与像素网格正方形的片段边缘的粗相交来估计相关覆盖区域。如上所述,可以确定一个或多个alpha值来指定像素网格312A-312D覆盖范围。
例如,在特定实施例中,像素网格312A可包括在所述周长周围标记的16个位置。像素网格312B在将交叉点314B、316B舍入到最近的周长位置后,显示在交叉点314B、316B处穿过像素网格312B正方形的单个片段边缘。像素网格312C表示两个片段边缘在像素网格312C中的一个顶点相遇,像素网格312D表示两个原始顶点落在三角形内,但依然有两个与像素网格312D相交的点314D、316D。
在特定实施例中,图3D利用了一个或多个阿尔法值来编码覆盖量以及利用单独字段来指定边缘的方向。在特定实施例中,每个边缘法线向量可以仅用于确定如何混合相关的原始片段。
例如,图形渲染管道200可以计算每个原始片段的边缘法线的点积,并确定几种混合情况中的一种。例如,如果点积为“−1”,则原始片段的边缘平行且相反,因此图形渲染管道200可以部署不相交混合技术。
如果点积为“+1”,则每个原始片段的边缘平行且方向相同,则可以通过图形渲染管道200部署子集混合技术。最后,对于中间点积值,图形渲染管道200可以根据不相交和子集混合技术执行线性插值。
图4示出了执行抗混叠的方法400的流程图。
402,XR设备通过栅格化一个或多个几何图形来生成多个片段。其中,像素集的像素与多个片段的一个或多个相关联,并且每个片段包括覆盖该像素的至少一部分的一个或多个边缘。
404,继续使用对一个或多个片段进行编码,以包括一个或多个边缘的表示,对于每个一个或多个边缘。
406,根据与一个或多个边缘的每个相关联的方向和像素覆盖确定与一个或多个片段对应的一个或多个alpha值。
408,其中一个或多个处理设备基于所述一个或多个片段的一个或多个alpha值为所述像素生成颜色值。
名为“Anti-aliasing by encoding primitive edge representations”的Meta专利申请在日前由美国专利商标局公布。
评论