人气 348

[综合技术] UnityShader学习笔记(五) [复制链接]

九艺网 2019-9-5 21:53:29

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x

Hello,大家好!!!我们继续上篇的内容。

上一篇我们讲了应用阶段和几何阶段,本篇就讲剩下的光栅化阶段。

光栅化阶段:

光栅化阶段分了四个步骤:三角形设置、三角形遍历、像素着色、合并。

三角形设置:光栅化的第一个流水线阶段是三角形设置,这个阶段会计算光栅化一个三角网格所需的信息。具体来说,上一个阶段输出的都是三角网格的顶点,即我们得到的是三角网格每条边的两个端点。但如果要得到整个三角网格对像素的覆盖情况,我们就必须计算每条边上的像素坐标。为了能够计算边界像素的坐标信息,我们就需要得到三角形边界的表示方式。这样一个计算三角网格表示数据的过程就叫做三角形设置。它的输出是为了给下一个阶段做准备。


三角形遍历:三角形遍阶段将会检查每个像素是否被一个三角网格所覆盖。如果被覆盖的话,就会生成一个片元,而这样一个找到哪些像素被三角网格覆盖的过程就是三角形遍。三角形遍历阶段会根据上一个阶段的计算结果来判断一个三角网格覆盖了哪些像素,并使用三角网格3个顶点的顶点信息对整个覆盖区域的像素进行插值。下图展示了三角形遍历阶段的简化计算过程。

122653mzopxftot9x7a7f3.png.thumb.jpg



这一步的输出就是得到一个片元序列。需要注意的是,一个片元并不是真正意义上的像素,,而是包含了很多状态的集合,这些状态用于计算每个像素的最终颜色。这些状态包括了(但不限于)它的屏幕坐标、深度信息,以及其他从几何阶段输出的顶点信息,例如法线、纹理坐标等。


像素着色:这一阶段在《UnityShader入门精要》讲的是片元着色器(Fragment Shader)。

片元着色器的输入是上一个阶段对顶点信息插值得到的结果,更具体来说,是根据那些从顶点着色器中输出的数据插值得到的。而它的输出是一个或者多个颜色值。下图显示了这样一个过程。这一阶段可以完成很多重要的渲染技术,其中最重要的技术之一就是纹理采样。为了在片元着色器中进行纹理采样,我们通常会在顶点着色器阶段输出每个顶点对应的纹理坐标,然后经过光栅化阶段对三角网格的3个顶点对应的纹理坐标进行插值后,就可以得到其覆盖的片元的纹渲染流水线坐标了。

124847vsjo6vvds8j6n8nn.png.thumb.jpg



合并阶段:这一阶段在OpenGL中称为逐片元操作。这一阶段有几个主要任务。(1)决定每个片元的可见性。这涉及了很多测试工作,例如深度测试、模板测试等。(2)如果一个片元通过了所有的测试,就需要把这个片元的颜色值和已经存储在颜色缓冲区 P的颜色 ,或者说是混合。

这里的合并阶段内容很多涉及的知识点也相对较多,后面会单独开一篇来讲。


所以本篇的内容就讲到这里,内容比较少,但是积少成多。慢慢深入,加油!


本篇参考文献:

《UnityShader入门精要》-- 冯乐乐,人民邮电出版社,2018年3月第11次印刷。请支持正版!


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

QQ|手机版|小黑屋|九艺游戏动画论坛 ( 津ICP备2022000452号-1 )

GMT+8, 2024-3-29 20:03 , Processed in 0.085679 second(s), 26 queries .

Powered by Discuz! X3.4  © 2001-2017 Discuz Team.