管线流程详解
Posted jingrui
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了管线流程详解相关的知识,希望对你有一定的参考价值。
一、顶点着色器
概述
运行在GPU上,用以处理顶点数据的小程序。
深入了解
1.坐标处理
顶点着色器将获得的顶点数据,进行坐标变换。此时只进行到透视投影的坐标转换,为何此处没有视口转换?因为在没有几何着色器的情况下可以直接在此步完成
视口转换,并确认映射到屏幕坐标系的最终坐标。但是若编写了几何着色器,则视口转换在几何着色器之后进行。
2.颜色插值
顶点着色器并非只做坐标的处理,同时也会对颜色进行插值。比如,在传入顶点数据时,附加了颜色属性,顶点着色器便会根据颜色对顶点进行颜色插值,设定颜色。
但此时的颜色并非完全确定,不会直接渲染在屏幕上。只有在经历片段着色器后才会对颜色完全确定,因为还有可能包含光照等更复杂的色彩,而这些色彩在顶点着色器
中是无法进行计算的。
二、图元装配与几何着色器
概述
此二阶段都是在几何着色器中进行的。可编程渲染管线要求必须编写vs以及fs而几何着色器(gs)可以不写。在编写了gs的情况下,首先进行图元装配,
根据点、线或者三角形等图元类型进行装配,之后执行几何着色器中的代码。图元装配阶段的输出会传递给gs。几何着色器把图元形式的一系列顶点的集合作为
输入,它可以通过产生新顶点构造出新的(或是其它的)图元来生成其他形状。
深入了解
1.若无几何着色器,在绘制图形时,需要自己在顶点缓冲中定义,时间消耗较大。而几何着色器绘制图形是在GPU超快硬件上动态生成的,这要比使用顶点缓冲自己定义这些形状更为高效。
2.例如下图,只需要输入6个顶点,并指定图元类型为三角形,在几何着色器中就能快速生成4个三角形。
3.几何着色器也可以自己定义新的顶点数据。若无新增数据则几何着色器有直接进行裁剪,映射到屏幕坐标系上。若有新增数据,则绘制完后再进行裁剪。
三、光栅化阶段
概述
决定哪些像素被集合图元覆盖的过程
深入了解
1.如图,传入光栅化阶段的只是经过变换的顶点,即使得到在屏幕坐标系中的顶点坐标,那也是浮点值。无法与屏幕像素的整数值对应起来。所以光栅化阶段,
确定了屏幕中的像素与想要绘制的图形的对应关系。确定图形的方法有很多,画线算法就有DDA等等。
2.光栅化阶段得到的图元包含的所有像素为片段。
四、片段着色器
片段着色器进行最终的颜色计算。决定了在屏幕上能看到什么。
片段着色器是可编程管道中的最最核心的部分。其普遍的作用就是计算各种各样的三角形像素颜色,从为着色顶点图形(vertex-colored geometries)计算的顶点属性颜色,
和为纹理图形为计算的纹理及相关的UV纹理坐标。但是顶点着色器的功能远非制造这些简单的效果。实际上,现代3D游戏中令人惊叹的3D特效都是用片段着色器来生成的。
例如,动态光源效果通常都是由片段着色 器完成。思考一下就会明白,动态光源意味着根据场景中已有的光源计算像素颜色,这与几何图形的位置、材料都有很大的关系,
所以片段着色器是制作动态光源效 果的不二之选。像水体环境映射之类的反射特效也都是由片段着色器完成的。片段着色器能生成世界上几乎所有的光影特效,以上提及的
只不过是它的冰山一角。最后要提一下的是,片段着色器决定了你在屏幕上能看到什么,所以,片段着色器才是影响渲染的核心代码。
五、Alpha测试和混合(Blending)阶段
概述
深度测试与透明度测试
深入了解
1.通过深度检测,判定前后关系,消除遮挡像素。
2.blending:根据目前已经画好的颜色,与正在计算的颜色的透明度(Alpha), 混合为两种颜色,作为新的颜色输出 。通常称之为 alpha 混合技术。 当在屏幕上绘制某个物体时,
与每个像素都相关联的有一个 RGB 颜色值和一个 Z 缓冲器深度值,另外一个称为 alpha 值,可以根据需要生成并存储,用来描述给定像 处的物体透明度。如果 alpha 值为 1.0,则
表示物体不透明;如果值为 0,表示 该物体是透明的。
(alpha值定义了一个物体的透明度)并对物体进行混合(Blend)。所以,即使在片段着色器中计算出来了一个像素输出的颜色,在渲染多个三角形的时候最后的像素颜色也
可能完全不同。
以上内容在后续学习中,会不断进行补充更新。。。
以上是关于管线流程详解的主要内容,如果未能解决你的问题,请参考以下文章