一、流程介绍
顶点着色器-->光栅化-->片段着色器-->alpha测试-->模版测试-->深度测试
->Blend-->Gbuffer-->FrontBuffer-->framebuffer-->显示器
1、顶点着色器
1.计算顶点的颜色;
2.将物体坐标系转换到相机坐标系
2、光栅化
将顶点转换成像素,- 一对应
比如Unity渲染一个Quad物体,如下Quad有四个顶点
假设Quad像素为100*100
3、片段着色器
1.此时顶点已经是像素点(像素:一般有RGBA4通道组成 RGBA 8888表示每个通道占8bit ,32位刚好用fioat)比如 屏幕 1080*1920 横有 1080个像素,竖有1920个像素,float[1080*1920]
Quad有4个顶点到了 片段着色器 就变成了 100*100(即顶点着色器运行4次,片段着色器运行10000次)顶点着色器 与片段着色器运算次数不是一个量级的,所以能把运算放在顶点着色器里就尽量放在里面。
片段着色器主要做些什么呢?
1.纹理采样 即给Quad赋予贴图或材质球,把纹理像素付给原来的像素,把原来的像素覆盖掉了
————>
2. 像素跟灯光进行计算。
4、alpha测试
挑选合格的alpha像素显示。(RGBA)
5、模版测试
像素还可以携带“模板信息”达到条件的模板值会显示出来。
6、深度测试
符合条件的(一般是像素距离相机的距离)像素 就通过,不然就丢弃。
以上三个测试 决定像素能否被显示出来,挑选合格的像素。
7、混合Blend
将当前要渲染的像素和已经渲染出来的像素混合运算。
8、GBuffer
一个像素 存的(RGBA 模板值 深度值 )等信息,只要是审核通过了以后
Gbuffer做的中转把这些信息传给FrontBuffer ,(Buffer其实是缓存区)Float[720*1280*4]数组存的信息比较多。
9、Front Buffer
由Gbuffer往Front Buffer写完以后,Front Buffer推向显示器显示过程中,Front Buffer此刻就变成了FrameBuffer,同时由Gbuffer往Front Buffer写完以后,FrameBuffer会交换到后面去变成Front Buffer Float[720*1280]缓存区
10、FrameBuffer
Float[720*1280]缓存区
其实 Front Buffer和FrameBuffer在交替显示,一帧帧的看着好像在动一样,所以两个是相对的。
二、渲染管线流程图
下面,你会看到一个图形渲染管线的每个阶段的抽象展示。要注意蓝色部分代表的是我们可以注入自定义的着色器的部分。
图一
图二
图三
图四
图五
图六
图七
图八
图九
推荐文章