光栅化阶段:三角形设置、三角形遍历、像素着色、合并
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了光栅化阶段:三角形设置、三角形遍历、像素着色、合并相关的知识,希望对你有一定的参考价值。
参考技术A 光栅化阶段光栅化阶段分了四个步骤:三角形设置、三角形遍历、像素着色、合并。
三角形设置:
光栅化的第一个流水线阶段是三角形设置,这个阶段会计算光栅化一个三角网格所需的信息。具体来说,上一个阶段输出的都是三角网格的顶点,即我们得到的是三角网格每条边的两个端点。但如果要得到整个三角网格对像素的覆盖情况,我们就必须计算每条边上的像素坐标。为了能够计算边界像素的坐标信息,我们就需要得到三角形边界的表示方式。这样一个计算三角网格表示数据的过程就叫做三角形设置。它的输出是为了给下一个阶段做准备。
三角形遍历:
三角形遍阶段将会检查每个像素是否被一个三角网格所覆盖。如果被覆盖的话,就会生成一个片元,而这样一个找到哪些像素被三角网格覆盖的过程就是三角形遍。三角形遍历阶段会根据上一个阶段的计算结果来判断一个三角网格覆盖了哪些像素,并使用三角网格3个顶点的顶点信息对整个覆盖区域的像素进行插值。下图展示了三角形遍历阶段的简化计算过程。
这一步的输出就是得到一个片元序列。需要注意的是,一个片元并不是真正意义上的像素,,而是包含了很多状态的集合,这些状态用于计算每个像素的最终颜色。这些状态包括了(但不限于)它的屏幕坐标、深度信息,以及其他从几何阶段输出的顶点信息,例如法线、纹理坐标等。
像素着色: 这一阶段在《UnityShader入门精要》讲的是片元着色器(Fragment Shader)。
片元着色器的输入是上一个阶段对顶点信息插值得到的结果,更具体来说,是根据那些从顶点着色器中输出的数据插值得到的。而它的输出是一个或者多个颜色值。下图显示了这样一个过程。这一阶段可以完成很多重要的渲染技术,其中最重要的技术之一就是纹理采样。为了在片元着色器中进行纹理采样,我们通常会在顶点着色器阶段输出每个顶点对应的纹理坐标,然后经过光栅化阶段对三角网格的3个顶点对应的纹理坐标进行插值后,就可以得到其覆盖的片元的纹渲染流水线坐标了。
合并阶段: 这一阶段在OpenGL中称为逐片元操作。
这一阶段有几个主要任务。
(1)决定每个片元的可见性。这涉及了很多测试工作,例如深度测试、模板测试等。
(2)如果一个片元通过了所有的测试,就需要把这个片元的颜色值和已经存储在颜色缓冲区 P的颜色 ,或者说是混合。
这里的合并阶段内容很多涉及的知识点也相对较多,后面会单独开一篇来讲。
所以本篇的内容就讲到这里,内容比较少,但是积少成多。慢慢深入,加油!
本篇参考文献:
《UnityShader入门精要》-- 冯乐乐,人民邮电出版社,2018年3月第11次印刷。请支持正版!
渲染管道光栅阶段三“三角形遍历”
1. 三角形遍历(Triangle Traversal)/扫描转换(scan conversion)
不可编程且不可配置,GPU固定实现。
将变换到屏幕空间的图元离散化为片元的过程,输出一个片元序列。根据上一个阶段的计算结果来判断一个三角网格覆盖了哪些像素,会检查每个像素是否被一个三角形网格所覆盖。如果屏幕上某个像素点被判断为被图元覆盖,则会生成对应像素大小的片元(fragment)。并使用三角网格3个顶点的顶点信息对整个覆盖区域的像素进行插值。
1.1
step1. 进行逐像素检查操作, 即检查每个图元(三角形, 点, 线)覆盖了哪些像素(采样点)
step2. 对于有三角形部分重合的像素, 在重合部分生成片段(fragment)
step3. 每个三角形片段属性(片段的深度, 着色数据)均由其三个顶点插值生成
step4. 判断像素是否属于该图元, 通过设置多个采样点定位
1.2 片元
片元不一定会最终成为像素,片元也不等于像素。片元是一个状态的集合,这些状态就是由三个顶点插值而来的。这些状态包括了(但不限于)它的屏幕坐标、深度信息,以及其他从集合阶段就传输下来的顶点信息,例如法线、纹理坐标等等。
1.3 图元覆盖像素点的3种判断方式
. Standard Rasterization(判断中心点若被图元覆盖,则生成对应片元)
. Outer-conservative Rasterization(像素只要被图元挨着了,就生成对应片元)
. Inner-conservative Rasterization(像素点需要完全被图元覆盖,才生成对应片元)
因为像素点离散性质,会导致不可避免的锯齿存在,所以需要抗锯齿(Anti-aliasing)。 eg. 多重采样抗锯齿(MultiSampling Anti-Aliasing,MSAA)。
以上是关于光栅化阶段:三角形设置、三角形遍历、像素着色、合并的主要内容,如果未能解决你的问题,请参考以下文章