《用于对层次深度图采样的系统、方法和计算机程序产品.pdf》由会员分享,可在线阅读,更多相关《用于对层次深度图采样的系统、方法和计算机程序产品.pdf(21页珍藏版)》请在专利查询网上搜索。
1、(10)申请公布号 CN 103838548 A (43)申请公布日 2014.06.04 CN 103838548 A (21)申请号 201310606910.X (22)申请日 2013.11.25 13/685,599 2012.11.26 US G06F 9/30(2006.01) (71)申请人 辉达公司 地址 美国加利福尼亚州 (72)发明人 摩根麦圭尔 大卫帕特里克利布基 麦克尔托马斯马拉 (74)专利代理机构 北京市磐华律师事务所 11336 代理人 谢栒 张玮 (54) 发明名称 用于对层次深度图采样的系统、 方法和计算 机程序产品 (57) 摘要 提供用于对层次深度图采样。
2、的系统、 过程和 计算机程序产品。用于对层次深度图采样的方法 包括以下步骤 : 生成层次深度图, 以及基于样本 像素和目标像素之间的差异从层次深度图的目标 层级读取与样本像素相关联的值。层次深度图包 括至少两个层级。 (30)优先权数据 (51)Int.Cl. 权利要求书 2 页 说明书 11 页 附图 7 页 (19)中华人民共和国国家知识产权局 (12)发明专利申请 权利要求书2页 说明书11页 附图7页 (10)申请公布号 CN 103838548 A CN 103838548 A 1/2 页 2 1. 一种方法, 包括 : 生成层次深度图, 其中所述层次深度图包括至少两个层级 ; 以及。
3、 基于样本像素和目标像素之间的差异从所述层次深度图的目标层级读取与所述样本 像素相关联的值。 2. 根据权利要求 1 所述的方法, 所述层次深度图包括 : 基本层级, 具有第一分辨率 ; 以及 第一层级, 具有第二分辨率, 其中所述第二分辨率小于所述第一分辨率。 3. 根据权利要求 2 所述的方法, 其中所述第二分辨率是所述第一分辨率一半的分辨 率。 4. 根据权利要求 2 所述的方法, 所述层次深度图进一步包括具有第三分辨率的第二层 级, 其中所述第三分辨率小于所述第二分辨率。 5. 根据权利要求 2 所述的方法, 其中所述基本层级存储多个值, 每个值与数字图像的 不同像素相关联, 并且其中。
4、所述第一层级存储从所述基本层级所选择的值的子集。 6. 根据权利要求 5 所述的方法, 其中所述值的子集基于旋转网格模式来选择。 7. 根据权利要求 6 所述的方法, 其中所述旋转网格模式由将在所述层次深度图的特定 层级的值映射到在所述层次深度图的下一较低层级的所选择的值的函数来支配, 其中所述 值与第一坐标和第二坐标相关联, 并且所述所选择的值与第三坐标和第四坐标相关联, 其 中所述第三坐标等于二倍的所述第一坐标与所述第二坐标和1的按位与和1的按位异或的 和, 并且所述第四坐标等于二倍的所述第二坐标与所述第一坐标和 1 的按位与和 1 的按位 异或的和。 8. 根据权利要求 1 所述的方法,。
5、 其中所述层次深度图的所述目标层级通过将所述样本 像素的屏幕空间位置与目标像素的屏幕空间位置之间的距离与屏幕空间半径增量值的比 取以二为底的对数来计算。 9. 根据权利要求 8 所述的方法, 其中所述屏幕空间半径增量值基于以下各项中的至少 一个来确定 : 数字图像的分辨率、 图形处理单元的配置为并行访问所述层次深度图的核心 的数目、 以及配置为临时地存储所述层次深度图的部分的高速缓存的大小。 10. 根据权利要求 1 所述的方法, 其中生成所述层次深度图包括 : 在图形处理器中渲染多个三维对象以生成深度缓冲区 ; 基于所述深度缓冲区中的值填充所述层次深度图的基本层级 ; 以及 通过从所述层次深。
6、度图的所述基本层级选择值的子集来生成所述层次深度图的第一 层级。 11. 根据权利要求 1 所述的方法, 进一步包括 : 选择与所述目标像素相关联的多个样本像素 ; 针对所述多个样本像素中的每个特定样本像素 : 确定所述层次深度图的相应层级用于所述特定样本像素, 以及 从所述层次深度图的所述目标层级读取样本值用于所述特定样本像素。 12. 根据权利要求 11 所述的方法, 进一步包括对与目标像素的 2x2 阵列相对应的样本 值的 2x2 阵列应用双边滤波器以生成经滤波的样本值。 13. 根据权利要求 12 所述的方法, 进一步包括通过对读取自所述层次深度图的经滤波 权 利 要 求 书 CN 1。
7、03838548 A 2 2/2 页 3 的样本值的图应用具有数个抽头的双通道双边滤波器来生成环境光遮蔽图。 14. 根据权利要求 13 所述的方法, 其中应用在所述双通道双边滤波器的每个通道中的 抽头的数目等于 7。 15. 一种非暂时性计算机可读存储介质, 其存储指令, 所述指令当由处理器所执行时, 使所述处理器实施步骤包括 : 生成层次深度图, 其中所述层次深度图包括至少两个层级 ; 以及 基于样本像素和目标像素之间的差异从所述层次深度图的目标层级读取与所述样本 像素相关联的值。 16. 根据权利要求 15 所述的非暂时性计算机可读存储介质, 所述层次深度图包括 : 基本层级, 具有第一。
8、分辨率 ; 以及 第一层级, 具有第二分辨率, 其中所述第二分辨率小于所述第一分辨率。 17. 根据权利要求 16 所述的非暂时性计算机可读存储介质, 其中所述基本层级存储多 个值, 每个值与所述数字图像的不同像素相关联, 并且其中所述第一层级存储从所述基本 层级所选择的值的子集。 18. 一种系统, 包括 : 处理器, 其配置为 : 生成层次深度图, 其中所述层次深度图包括至少两个层级 ; 以及 基于样本像素和目标像素之间的差异从所述层次深度图的目标层级读取与所述样本 像素相关联的值。 19. 根据权利要求 18 所述的系统, 其中所述处理器包括图形处理单元, 所述图形处理 单元包括多个处理。
9、核心。 20. 根据权利要求 19 所述的系统, 其中所述处理核心中的两个或更多个配置为并行地 从所述层次深度图读取值。 权 利 要 求 书 CN 103838548 A 3 1/11 页 4 用于对层次深度图采样的系统、 方法和计算机程序产品 技术领域 0001 本发明涉及计算机图形, 并且更具体地, 涉及利用深度缓冲区的算法。 背景技术 0002 深度缓冲区存储指示用于三维场景中的对象表面的深度的多个值。 针对许多类型 的计算机图形渲染应用实现深度缓冲区。深度值可用来确定相对于特定视点, 对象是否被 其他对象所遮蔽。 典型地, 深度缓冲区包括与数字图像中的相应多个像素相关联的多个值。 深度。
10、缓冲区中的每个值可表示和与特定像素相对应的视点最靠近的对象的深度。 0003 一些算法, 诸如屏幕空间环境光遮蔽算法, 对深度缓冲区内的多个不同值采样以 针对每个像素计算环境光遮蔽 (AO) 值。这些技术的净性能由于深度缓冲区的大量分散的 读取而受到损害, 导致高速缓存效率低下。因此, 存在解决该问题和 / 或与现有技术相关联 的其他问题的需要。 发明内容 0004 提供用于对层次深度图采样的系统、 方法和计算机程序产品。用于对层次深度图 采样的方法包括下面的步骤 : 生成层次深度图, 以及基于样本像素和目标像素之间的差异 (difference) 从层次深度图的目标层级读取与样本像素相关联的。
11、值。 层次深度图包括至少 两个层级。 附图说明 0005 图 1 示出根据一个实施例的、 用于对层次深度图采样的方法的流程图 ; 0006 图 2 示出根据一个实施例的、 用于实现可缩放 (scalable) 环境光遮蔽算法的方法 的流程图 ; 0007 图 3 示出根据一个实施例的层次深度图 ; 0008 图 4 示出根据一个实施例的、 可缩放环境光遮蔽算法中的用于目标像素的多个样 本像素 ; 0009 图 5 示出根据一个实施例的并行处理单元 (PPU) ; 0010 图 6 示出根据一个实施例的、 图 5 的流多处理器 ; 以及 0011 图 7 示出在其中可实现各先前实施例的各架构和 。
12、/ 或功能性的示例性系统。 具体实施方式 0012 许多不同类型的渲染算法在作为算法一部分的一个或多个计算中利用深度缓冲 区 (即 Z 缓冲区) 。例如, 环境光遮蔽 (AO) 算法生成着色效果以近似光在真实世界中辐射的 路线。AO 算法确定附近的几何体对表面上的具体点的遮蔽量。如果附近的几何体遮蔽该 点, 那么该点可被渲染以包括阴影 (例如采用较低强度来渲染) 。然而, 如果附近的几何体不 遮蔽该点, 那么该点可被渲染而没有阴影 (例如采用较高强度来渲染) 。本领域普通技术人 说 明 书 CN 103838548 A 4 2/11 页 5 员将理解的是, 使用常规 GPU 同时维持交互的帧率。
13、无法以全高清晰度分辨率实时实施在模 型空间中所计算的环境光遮蔽 (即通过对每个对象采样来确定对象是否遮蔽了点) 。因此, 对全 AO 算法生成充分近似值的一项技术是屏幕空间环境光遮蔽 (SSAO) 。 0013 在 SSAO 算法中, 模型首先被光栅化以产生深度缓冲区, 该深度缓冲区将每个像素 位置 (或如果以子像素分辨率实现深度缓冲区那么样本位置) 与最靠近用于像素的视点的 几何体的深度相关联。一旦生成深度缓冲区, 那么可通过对多个附近的像素采样来计算用 于像素的近似的环境光遮蔽, 以确定该像素是否可能被附近的几何体所遮蔽。在一些 SSAO 算法中, 用于每个像素的深度和表面法线二者可用来确。
14、定近似的遮蔽。常规 SSAO 算法由于 深度缓冲区中所采样的点的分散而性能不佳, 导致高速缓存效率低下并生成大量长时延存 储器访问请求。 0014 公开了用于对深度缓冲区编码的示例性技术, 其提高对深度缓冲区中的大量分散 条目采样的算法的性能, 从而提高高速缓存效率并减少用于对附近的条目采样的长时延存 储器访问请求的数目。 0015 图 1 示出根据一个实施例的、 用于对层次深度图采样的方法 100 的流程图。在步 骤 102, 生成层次深度图。在一个实施例中, 层次深度图是具有两个或更多个层级的值的阵 列, 其中基于深度缓冲区中的多个值填充 (populate) 第一层级并且采用来自第一层级。
15、的值 的子集填充第二层级。在步骤 104, 从层次深度图的目标层级读取与样本像素相关联的值。 在一个实施例中, 目标层级基于样本像素与目标像素的距离。 应注意的是, 虽然本文结合层 次深度图阐述各可选特征, 但这类特征仅出于示例性目的而阐述, 并且其不应被认为是以 任何方式进行限制。 0016 图2示出根据一个实施例的、 用于实现可缩放环境光遮蔽 (SAO) 算法的方法200的 流程图。 应特别注意的是, 下面的信息仅出于示例性目的而阐述, 并且其不应被认为是以任 何方式进行限制, 因为其他算法可能利用层次深度图以补充或代替由图 2 的流程图所示出 的 SAO 算法。 0017 在步骤 202。
16、, 通过在图形处理单元 (GPU) 中实施高精度 Z-pass 来生成深度缓冲区。 在一个实施例中, 高精度 Z-pass 被实施为经过 GPU 的仅深度预通过 (pre-pass) 。模型数据 集 (即诸如三角形、 四边形、 或三角形条带的图形基元) 被传送到 GPU。随后在深度上变换并 光栅化模型数据以产生用于每个片段 (即与给定表面对象相关联的像素的一部分) 的 z 坐 标。针对与该像素位置相关联的所有其他 z 坐标测试该 z 坐标以确定最靠近特定视点的对 象, 并且如果该z坐标是最靠近的对象, 那么将该z坐标存储在深度缓冲区中的与该像素位 置相对应的条目处。一旦所有的模型数据已被光栅化。
17、, 那么最终产生的深度缓冲区表示从 视点到在经光栅化的图像中的每个像素位置处的最靠近的表面的光线的长度。 0018 为了增加 SAO 算法中的结果的准确度, 应谨慎地采用可能的最高精度来填充深度 缓冲区。 在一个实施例中, 可通过实现下面的优化来增加深度缓冲区的精度。 在将模型视图 投影矩阵投向 (cast) 用于 GPU 上的顶点着色器中所实施的变换的单精度之前, 可在主机处 理器上以双精度计算模型视图投影矩阵。对于模型视图投影矩阵, 可在负无穷 (- ) 的深 度处选择远裁剪平面, 其可减少当计算矩阵积时所实施的浮点操作的数目。此外, 当在 GPU 中计算变换时, 可通过在以列为主的矩阵 。
18、(例如模型视图投影矩阵) 的左侧乘以矢量来节省 一半精度。 应理解的是, 上述优化仅是用于提高算法准确度的建议, 并且其不应被认为是以 说 明 书 CN 103838548 A 5 3/11 页 6 任何方式进行限制。 0019 在步骤 204, 基于深度缓冲区生成层次深度图。在一个实施例中, 深度缓冲区用来 填充层次深度图的基本层级。典型地, 由 GPU 所生成的深度缓冲区将深度值存储为 0 和 1 之间的浮点值。层次深度图的基本层级将深度缓冲区的深度值转换成相机空间值, 其指示 近裁剪平面 (zn) 的位置和远裁剪平面 (zf) 的位置之间的 z 值。通过选择来自层次深度图 的下一最低层级。
19、的值的子集来填充层次深度图的相继较高层级。 层次深度图包括至少两个 层级, 与数字图像的全分辨率相对应的基本层级, 以及与小于该基本层级的分辨率 (例如基 本层级的分辨率的一半) 相对应的第一层级。层次深度图的较高层级 (即 1 级、 2 级等) 确保 采用高的高速缓存效率读取空间分布的样本 (即, 当采样的像素较远离目标像素位置时, 由 GPU所并行处理的邻近像素将典型地从层次深度图读取相同样本) 。 因为层次深度图的每个 层级的一小区域留在高速缓存中, 所以较少的读取请求将被传送到存储器 (即 DRAM) , 得到 高带宽和低时延。 0020 在步骤 206, 针对正针对其执行 SAO 算。
20、法的数字图像的每个目标像素, 选择多个样 本像素。在一个实施例中, 对于每个目标像素, 多个样本像素分布在围绕点 C 的半球上, 该 半球的中心点在由从视点以与目标像素相关联的方向所投影的光线所相交的表面上的点 处。在一个实施例中, 根据值 zC重构点 C, 该值 zC读取自层次深度图的基本层级、 与由 x 坐 标 (x) 和 y 坐标 (y) 所给定的目标像素相关联的索引处。点 C 的 x 坐标和 y 坐标由等 式给定 : 0021 (等式 1) 0022 (等式 2) 0023 (等式 3) 0024 等式 1 和 2 中, w 和 h 表示数字图像的宽度和高度, 并且 P 是模型视图投影。
21、矩阵。 等式 1 和 2 在像素 (x ,y) 处对投影矩阵求逆以找到相机空间位置点 C。等式 3 基于 z 的屏幕空间梯度给定在点 C 处的估计的表面法线, 其给定半球的定向。半球 r 的世界空间 半径与由如下等式所给定的屏幕空间半径 r 相对应 : 0025 (等式 4) 0026 在等式 3 中, S 是在 z 等于负 1 米的一米半径对象的像素大小。在一个实施例中, 多个样本像素以螺旋模式置于目标像素周围。每个像素样本 (si) 位于与由等式 7 所给定的 目标像素的不同的距离 (hi) 的位置, 如下文所示。样本像素中的每一个的位置可由下面的 公式所给定 : 0027 (等式 5) 。
22、0028 (等式 6) 0029 (等式 7) 说 明 书 CN 103838548 A 6 4/11 页 7 0030 (等式 8) 0031 (等式 9) 0032 在等式 7 中, 常数 是螺旋中的转数, 并且角偏移是由等式 9 所给定的旋转角。 在其他实施例中, 多个样本像素可随机分布在半球的表面上。然而, 应注意的是, 如果多数 样本位于半球的仅一部分上那么随机分布具有使结果偏差的潜质。 0033 在步骤 208, 针对与目标像素相关联的每个样本像素, 通过对层次深度图应用双边 滤波器来生成经滤波的值。每个样本像素与层次深度图的特定层级 (mi) 相关联。通过选择 与样本像素的位置相。
23、关联的层次深度图的特定层级中的值来给定用于样本像素的样本值, 如下面等式所给定的 : 0034 (等式 10) 0035 (等式 11) 0036 在公式 10 中, 与样本像素 (si) 相关联的层级 (mi) 被钳制到大于或等于零并小于 或等于层次深度图中的最高层级的值。常数 q是表示与目标像素的距离的屏幕空间半径 增量, 由样本像素所引用的层次深度图的层级以该增量改变到层次深度图的不同层级。在 一个实施例中, hi和 q的比被向上舍入到下一最高整数。用于 q的优化值可取决于实 现 SAO 算法的架构。已产生如由一些实验架构所计算的精确环境光遮掩图的、 用于 q 的示 例值在 8 和 32。
24、 之间。 0037 通过将等式 1 和 2 应用到 zi(即 zC=zi) 来重构每个样本像素 si。在一个实施例中, 可将双边 2x2 滤波器应用到所生成的样本像素, 将四个权重值平均以减少跨连续表面的方 差 (即滤波器内核采用由所生成的样本像素和附近的像素之间的深度上的差异所调整的高 斯权重来生成经滤波的值) 。 0038 在步骤 210, 通过使用具有数个抽头的双边滤波器对在步骤 208 中所生成的原始 样本图滤波, 来针对数字图像的像素中的每一个生成环境光遮蔽图。双边滤波器确保最终 值是跨表面平滑的, 而不应用该滤波器则跨深度不连续。 在一个实施例中, 应用每通道中具 有七个抽头的双通。
25、道双边一维滤波器 (一水平通道和一垂直通道) , 其基于每目标像素 196 个样本值 (基于步骤 208 中所应用的 2x2 双边滤波器和步骤 210 中应用的双通道双边一维 滤波器中的 7x7 个抽头) 生成最终 AO 值。可通过将像素位置在每个方向上递增三个像素来 展开抽头中的每一个。在其他实施例中, 可在双通道双边一维滤波器中实现不同数目的抽 头或抽头之间的距离。 0039 现在将关于各可选架构和特征来阐述更多示例性的信息, 根据用户的期望可以采 用所述架构和特征来实现或不实现前述的框架。应特别注意的是, 下面的信息出于示例性 的目的而阐述并且其不应被认为是以任何方式进行限制。 下面特征。
26、中的任何一个可以可选 地合并, 排除或无需排除所述的其他特征。 0040 图 3 示出根据一个实施例的层次深度图 300。如图 3 所示, 层次深度图 300 的基 本层级 310(Z0) 包括与数字图像中的相应多个像素相关联的多个深度值。如本领域中已 知的, 可从模型中渲染表示几何体数据集的二维 (2D) 视角的数字图像。对于模型中的每个 说 明 书 CN 103838548 A 7 5/11 页 8 3D 对象, 对象 (即诸如三角形或三角形条带的基元) 被投影到 2D 视平面上, 并且定义 3D 对 象的投影与 2D 视平面的像素的交集的覆盖掩码被确定。对于被覆盖的像素中的每一个, 在 。
27、与像素相对应的点处的3D对象的表面的深度被确定并与先前经渲染的3D对象中的每一个 的、 存储在深度缓冲区中的深度相比较。如果 3D 对象的表面的深度比存储在深度缓冲区中 的深度更靠近于视平面, 那么更新深度缓冲区并根据用于对象的顶点属性 (例如颜色属性、 纹理坐标等) 来渲染像素。 0041 层次深度图 300 的基本层级 310 填充自与数字图像相关联的深度缓冲区。换句话 说, 基本层级 310 中的深度值中的每一个与存储在深度缓冲区中的、 用于数字图像的像素 中的一个的 z 值相对应。例如, 位于基本层级 310 中的条目 Z0(0,0) 处的第一深度值与位 于数字图像的左上角的数字图像中。
28、的第一像素相对应。在一些实施例中, 深度值中的每一 个与数字图像的像素的一部分相对应, 诸如在图形管线中实现多重采样抗锯齿 (MSAA) 的实 施例。 0042 层次深度图 300 包括附加层级 (例如 Z1、 Z2等) , 其包括来自层次深度图 300 的基 本层级 310 的值的子集。附加层级中的每一个的分辨率可小于层次内的下一较低层级。例 如, 在一个实施例中, 层次深度图 300 的第一层级 320 的分辨率是层次深度图 300 的基本层 级 310 的分辨率的一半 (垂直地和水平地二者) 。在其他实施例中, 层次深度图 300 的每个 相继层级的分辨率可减少不同的量, 诸如层次深度图。
29、 300 的每个相继层级的分辨率减少四 分之一。 0043 如图 3 所示, 层次深度图 300 包括分辨率是层次深度图 300 的基本层级 310 的一 半的第一层级 320(Z1) 。存储在第一层级 320(Z1) 中的深度值中的每一个与存储在层次深 度图 300 的基本层级 310 中的深度值的单一一个相对应。不同于其中较低分辨率 mip-map 中的值被计算为从较高分辨率 mip-map 所采样的多个值的平均值的 mip-map, 层次深度图 300的特定层级中的值的每一个选择自层次中的先前层级的每N个值中的一个 (例如每4个 值中的一个) 。 0044 在一个实施例中, 基于旋转网格。
30、模式 (rotated grid pattern) 来选择从层次深度 图 300 的下一较低层级中所选择的值。等式 12 示出根据一个这类旋转网格模式支配值的 选择的等式 : 0045 (等式 12) 0046 换句话说, 从层次深度图 300 的 m 层级选择层次深度图 300 的 m+1 层级中所存储 的具有 x 坐标和 y 坐标的深度值, 层次深度图 300 的 m 层级 (1) 具有第一坐标, 其计算为 二倍的 x 坐标加上 y 坐标和 1 的按位与和 1 的按位异或 ; 以及 (2) 具有第二坐标, 其计算 为二倍 y 坐标加上 x 坐标和 1 的按位与和 1 的按位异或。上文阐述的。
31、旋转网格模式针对 层次深度图300的特定层级中的每十六个深度值选择四个深度值以生成层次深度图300的 下一相继层级中的四个相应的值。其他实施例可基于不同类型的映射来选择深度值, 诸如 选择像素的每 2x2 阵列中的左上值的映射或针对每六十四个深度值 (在分辨率被四等分的 情况下) 选择四个深度值的映射。预期到其他类型的映射在本公开的范围内。 0047 图 3 示出使用由公式 12 所示出的旋转网格模式的映射。如图 3 所示, 层次深度图 说 明 书 CN 103838548 A 8 6/11 页 9 300 的第一层级 320 中的第一深度值 325(0) 与层次深度图 300 的基本层级 3。
32、10 中的相应 第一深度值 315(0) 相对应。根据等式 12, 第一深度值 325(0) 与用于条目 Z1(0,0) 的坐 标 (例如 0,0) 相关联, 其与层次深度图 300 的基本层级 310 中的条目 Z0(1,1) 相对应。类 似地, 层次深度图 300 的第一层级 320 中的第二深度值 325 (1) 与层次深度图 300 的基本层 级 310 中的第二相应深度值 315(1) 相对应, 层次深度图 300 的第一层级 320 中的第三深 度值 325(2) 与层次深度图 300 的基本层级 310 中的第三相应深度值 315(2) 相对应, 并 且层次深度图 300 的第一。
33、层级 320 中的第四深度值 325(3) 与层次深度图 300 的基本层级 310 中的第四相应深度值 315(3) 相对应。第二深度值 325(1) 与用于条目 Z1(1,0) 的坐 标 (例如 1,0) 相关联, 其与层次深度图 300 的基本层级 310 中的条目 Z0(3,0) 相对应。第 三深度值 325(2) 与用于条目 Z1(0,1) 的坐标 (例如 0,1) 相关联, 其与层次深度图 300 的 基本层级 310 中的条目 Z0(0,3) 相对应。第四深度值 325(3) 与用于条目 Z1(1,1) 的坐 标 (例如 1,1) 相关联, 其与层次深度图 300 的基本层级 3。
34、10 中的条目 Z0(2,2) 相对应。 0048 层次深度图 300 还包括分辨率是层次深度图 300 的第一层级 320 的一半的第二层 级 330(Z2) 。换句话说, 第二层级 330 的分辨率是层次深度图 300 的基本层级 310 的四分 之一。存储在第二层级 330 的条目中的深度值, 根据用来将存储在第一层级 320 的条目中 的深度值映射到存储在层次深度图 300 的基本层级 310 的条目中的深度值的相同映射, 与 存储在层次深度图 300 的第一层级 320 的条目中的深度值相对应。例如, 存储在层次深度 图 300 的第二层级 330 中的条目 Z2(0,0) 中的第一。
35、深度值 335(0) 与存储在层次深度图 300 的第一层级 320 中的条目 Z1(1,1) 中的第四深度值 325(3) 相对应。存储在层次深度 图 300 的第二层级 330 中的条目 Z2(0,0) 中的第一深度值 335(0) 还与存储在层次深度 图 300 的基本层级 310 中的条目 Z0(2,2) 中的第四深度值 315(3) 相对应。在一个实施 例中, 可并行地生成层次深度图 300 的不同层级。 0049 虽然未示出, 但层次深度图 300 中可包括附加层级, 直到仅包括存储在条目 ZK (0,0) 中的单个深度值的最终层级 (即第 K 层级) 。只要层次深度图 300 除。
36、基本层级 310 以 外包括至少一个附加层级, 则具体实现方案可省略层次深度图 300 的任何数目的层级。 0050 图 4 示出根据一个实施例的、 用于 SAO 算法中的目标像素 420 的多个样本像素 430。如上文图 2 的流程图所述, SAO 算法突出一项用于对来自层次深度图 300 的值采样以 生成环境光遮蔽图的技术。 为了针对数字图像中的目标像素420计算环境光遮蔽值, SAO算 法对深度缓冲区中的多个点采样以确定附近的几何体是否可能遮蔽对象表面上的与目标 像素相对应的点。为了针对目标像素 420 计算环境光遮蔽值, 进程 (即一个或多个线程) 对 层次深度图 300 中的、 与数。
37、字图像 400 中的目标像素 420 附近的多个样本像素 430 相对应 的多个位置采样。 0051 在一个实施例中, 当从层次深度图 300 读取样本时, 线程诸如通过对样本像素 430 的位置应用等式 10 来确定应从层次深度图 300 的哪个层级 mi读取样本。圆 410 表示与层 次深度图 300 的不同层级相对应的屏幕空间的部分。例如, 第一圆 410 (0) 表示一倍 (即 20) 的 qi并具有四个像素的半径。第二圆 410(1) 表示二倍 (即 21) 的 qi并具有八个像素的半 径。第三圆 410(2) 表示四倍 (即 22) 的 qi并具有十六个像素的半径。如上所述, 屏幕。
38、空间 半径增量 qi典型地在 8 和 32 之间以得到好的结果。然而, 出于示例性目的在图 4 中示出 四个像素的屏幕空间半径增量。 说 明 书 CN 103838548 A 9 7/11 页 10 0052 通过从层次深度图 300 的基本层级 310 读取值来实施针对位于第一圆 410(0) 内 的每个样本像素 430 读取深度值。通过从层次深度图 300 的第一层级 320 读取值来实施针 对位于第一圆 410(0) 和第二圆 410(1) 之间的每个样本像素 430 读取深度值。通过从层 次深度图 300 的第二层级 330 读取值来实施针对位于第二圆 410(1) 和第三圆 410(。
39、2) 之 间的每个样本像素 430 读取深度值, 以此类推。 0053 例如, 如图 4 所示, 关于数字图像 400 的左上像素 (即具有 x 坐标 0 和 y 坐标 0 的 像素) , 目标像素 420 可具有 x 坐标 24 和 y 坐标 8。图 4 中的阴影像素中的每一个表示在环 境光遮蔽值的计算中所使用的样本像素 430。关于数字图像 400 的左上像素, 样本像素 430 (0) 位于 x 坐标 30 和 y 坐标 7 处。为了确定从层次深度图 300 的哪个层级读取与样本像素 430(0) 相关联的深度值, 计算样本像素 430(0) 到目标像素 420 的距离。如图 4 所示,。
40、 用 于样本像素 430(0) 的距离 hi近似地是 5 个像素, 并且用于样本像素 430(0) 的值 zi从层 次深度图 300 的第一层级 320 读取。 0054 图 5 示出根据一个实施例的并行处理单元 (PPU) 500。虽然本文提供并行处理器 作为 PPU500 的示例, 但应特别注意的是, 这类处理器仅出于示例性目的而阐述, 并且可出 于相同目的采用任何处理器以对其进行补充和 / 或替换。在一个实施例中, PPU500 配置为 在两个或更多个流多处理器 (SM) 550 中并发地执行多个线程。线程 (即执行的线程) 是在 特定 SM550 内执行的指令集的实例化。下文结合图 6。
41、 更详细描述的每个 SM550 可包括但不 限于一个或多个处理核心、 一个或多个加载 / 存储单元 (LSU) 、 一级 (L1) 高速缓存、 共享存 储器等。 0055 在一个实施例中, PPU500 包括输入 / 输出 (I/O) 单元 505, 其配置为通过系统总线 502 传送和接收来自中央处理单元 (CPU) (未示出) 的通信 (即命令、 数据等) 。I/O 单元 505 可实现用于高速外围部件互连 (PCIe) 总线上的通信的 PCIe 接口。在可替代实施例中, I/O 单元 505 可实现其他类型的公知总线接口。 0056 PPU500还包括主机接口单元510, 其将命令解码并。
42、将命令传送到PPU500的网格管 理单元 515 或如命令可指定的其他单元 (例如存储器接口 580) 。主机接口单元 510 配置为 路由 PPU500 的各逻辑单元之间的通信。 0057 在一个实施例中, 由 CPU 将被编码为命令流的程序写入缓冲区。缓冲区是例如存 储器504或系统存储器的存储器中的区域, 其可由CPU和PPU500二者访问 (即读/写) 。 CPU 将命令流写入缓冲区并随后将指向命令流开始的指针传送到PPU500。 主机接口单元510为 网格管理单元 (GMU) 515 提供指向一个或多个流的指针。GMU515 选择一个或多个流并配置 为将所选择的流组织成挂起网格池。 。
43、挂起网格池可包括尚未被选择用于执行的新网格和已 被部分地执行并且已被暂停的网格。 0058 耦连在 GMU515 和 SM550 之间的工作分布单元 520 管理活动网格池, 选择并分派活 动网格用于由 SM550 执行。当挂起的网格有资格执行、 即不具有未解决的数据依赖时, 挂起 的网格由 GMU515 转移到活动网格池。当活动网格的执行被依赖阻塞时, 活动网格被转移到 挂起池。当网格的执行完成时, 网格被工作分布单元 520 从活动网格池移除。除了接收来 自主机接口单元 510 和工作分布单元 520 的网格以外, GMU510 还接收在网格的执行期间由 SM550 所动态生成的网格。这些。
44、动态生成的网格加入挂起网格池中的其他挂起的网格。 0059 在一个实施例中, CPU 执行实现应用编程接口 (API) 的驱动程序内核, 该应用编程 说 明 书 CN 103838548 A 10 8/11 页 11 接口使能在 CPU 上执行的一个或多个应用以调度用于在 PPU500 上执行的操作。应用可包 括使驱动程序内核生成一个或多个网格用于执行的指令 (即 API 调用) 。在一个实施例中, PPU500 实现 SIMD(单指令、 多数据) 结构, 其中由线程块中的不同线程对不同数据集并发地 执行网格中的每个线程块 (即线程束 (warp) ) 。驱动程序内核定义包含 k 个相关线程的。
45、线 程块, 使得相同线程块中的线程可通过共享存储器交换数据。 在一个实施例中, 线程块包括 32 个相关线程, 并且网格是执行相同流的一个或多个线程块的阵列, 并且不同的线程块可 通过全局存储器交换数据。 0060 在一个实施例中, PPU500 包括 X 个 SM550(X) 。例如, PPU500 可包括 15 个不同的 SM550。每个 SM550 是多线程的并配置为并发地执行来自特定线程块的多个线程 (例如 32 个线程) 。SM550 中的每一个经由交叉开关 560(或其他类型的互连网络) 连接到二级 (L2) 高速缓存 565。L2 高速缓存 565 连接到一个或多个存储器接口 5。
46、80。存储器接口 580 实现 16、 32、 64、 128 位数据总线等等, 用于高速数据转移。在一个实施例中, PPU500 包括 U 个存 储器接口 580(U) , 其中每个存储器接口 580(U) 连接到相对应的存储器设备 504(U) 。例 如, PPU500 可连接到多达 6 个存储器设备 504, 诸如图形双数据速率、 版本 5、 同步动态随机 存取存储器 (GDDR5SDRAM) 。 0061 在一个实施例中, PPU500实现多级存储器层次。 存储器504位于耦连到PPU500的 SDRAM 的片外。来自存储器 504 的数据可被获取并存储在 L2 高速缓存 565 中,。
47、 该 L2 高速缓 存 565 位于片上并在各 SM550 之间共享。在一个实施例中, SM550 中的每一个还实现 L1 高 速缓存。L1 高速缓存是专用于特定 SM550 的私有存储器。L1 高速缓存中的每一个耦连到 共享的 L2 高速缓存 565。来自 L2 高速缓存 565 的数据可被获取并存储在 L1 高速缓存中的 每一个中用于 SM550 的功能单元中的处理。 0062 在一个实施例中, PPU500 包括图形处理单元 (GPU) 。PPU500 配置为接收指定用于 处理图形数据的着色器程序的命令。 图形数据可被定义为诸如点、 线、 三角形、 四边形、 三角 形条带等基元的集合。典。
48、型地, 基元包括指定用于 (例如在模型空间坐标系中的) 基元的若 干顶点以及与基元的每个顶点相关联的属性的数据。PPU500 可配置为处理图形基元以生 成帧缓冲区 (即用于显示器的像素中的每一个的像素数据) 。驱动程序内核实现图形处理管 线, 诸如由 OpenGL API 定义的图形处理管线。 0063 应用将用于场景的模型数据 (即顶点和属性的合集) 写到存储器。模型数据定义在 显示器上可见的对象中的每一个。 应用随后对驱动程序内核做出请求模型数据被渲染和显 示的 API 调用。驱动程序内核读取模型数据并将命令写到缓冲区以实施一个或多个操作来 处理模型数据。命令可将包括顶点着色器、 外壳着色。
49、器、 几何着色器、 像素着色器等中的一 个或多个的不同着色器程序编码。例如, GMU515 可配置一个或多个 SM550 为执行处理由模 型数据所定义的若干顶点的顶点着色器程序。在一个实施例中, GMU515 可配置不同 SM550 为并发地执行不同着色器程序。例如, SM550 的第一子集可配置为执行顶点着色器程序, 而 SM550 的第二子集可配置为执行像素着色器程序。SM550 的第一子集处理顶点数据以产生 经处理的顶点数据并将经处理的顶点数据写到 L2 高速缓存 565 和 / 或存储器 504。在经 处理的顶点数据被光栅化 (即从三维数据变换成屏幕空间中的二维数据) 以产生碎片数据 。