管线流程详解

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,表示 该物体是透明的。

3.说明:这个阶段检测片段的对应的深度(和模板(Stencil))值(后面会讲),用它们来判断这个像素是其它物体的前面还是后面,决定是否应该丢弃。这个阶段也会检查alpha值

(alpha值定义了一个物体的透明度)并对物体进行混合(Blend)。所以,即使在片段着色器中计算出来了一个像素输出的颜色,在渲染多个三角形的时候最后的像素颜色也

可能完全不同。

 

 

 

以上内容在后续学习中,会不断进行补充更新。。。

 


以上是关于管线流程详解的主要内容,如果未能解决你的问题,请参考以下文章

OpenGL OpenGL管线 与 可编程管线流程

Unity渲染管线流程

[CocosCreator]AssetManager之管线

[CocosCreator]AssetManager之管线

[CocosCreator]AssetManager之管线

[CocosCreator]AssetManager之管线