我是靠谱客的博主 霸气仙人掌,最近开发中收集的这篇文章主要介绍Shader理论《三》GPU流水线之光栅化阶段,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

欢迎加入Unity业内qq交流群:956187480

qq扫描二维码加群,行业纵横颇多,每个人精通领域各异,旨在交流,


接上;

光栅化阶段:

1.三角形设置

屏幕映射是几何阶段的最后一个环节,会把相关的数据数值传送给光栅化的第一个阶段:三角形设置。从上一个阶段输出的信息是屏幕坐标系下的顶点的位置以及和他们相关的额外信息如:深度值,法线方向,视角方向等。光栅化阶段有两个最重要的目标:计算每个图元覆盖了哪些像素,以及为这些像素计算他们的颜色。

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

2.三角形遍历

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

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

3.片元着色器

片元着色器在DirectX中也被称作像素着色器,但是pian片元着色器更合适,因为此时的pian片元并不是一个真正意义上的像素。前面的光栅化阶段实际上并不会影响屏幕上每个像素的颜色值,而是会产生一系列的数据信息,用来表述一个三角形网格是怎样覆盖每个像素的。而每个片元就负责存储这样一系列数据。真正会对像素产生影响的阶段是下一个流水线阶段——逐片元操作。片元着色器的输入是上一个阶段对顶点信息差值得到的结果,更具体地说是根据那些从顶点着色器中输出的数据差值得到的。而它输出的是一个或多个颜色值如下图:

虽然片元做色器可以完成很多重要效果,但他的局限性在于,它仅可以影响单个片元。也就是说当执行片元着色器时,它不可以将自己的任何结果直接发送给相邻片元,有一种情况例外就是片元着色器可以访问到导数信息(gradient,or  derivative)

4.逐片元操作

这个阶段负责执行很多重要操作,例如修改颜色,深度缓冲,进行混合,他是不可编程的但是有很高的的可配置性。逐片元操作是OpenGL中的说法,在DirectX中这一阶段被称作输出合并阶段。这一阶段由几个主要任务。

(1)决定每个片元的可见性。这涉及很多测试工作,深度测试,模板测试等。

(2)如果一个片元着色器通过了所有测试,就需要把这个片元的颜色值和已经存储在颜色缓冲区的颜色进行混合或者说合并

需要说明的是逐片元操作阶段是高度可配置性的,即我们可以设置每一步操作细节,这一个阶段首先需要解决每个片元的可见性,这需要进行一系列测试,如果他没有通过其中的某一项测试,那之前为了产生这个片元所做的多有工作都是白费的,这个片元会被舍弃的。


欢迎加入Unity业内qq交流群:956187480

qq扫描二维码加群,行业纵横颇多,每个人精通领域各异,旨在交流,

最后

以上就是霸气仙人掌为你收集整理的Shader理论《三》GPU流水线之光栅化阶段的全部内容,希望文章能够帮你解决Shader理论《三》GPU流水线之光栅化阶段所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(56)

评论列表共有 0 条评论

立即
投稿
返回
顶部