[UnityShader基础]09.渲染流水线

参考链接:

https://zhuanlan.zhihu.com/p/84275265

渲染流水线,起点是cpu,终点是gpu,分为3个阶段:应用阶段,几何阶段,光栅化阶段

1.应用阶段(由cpu负责)

准备要渲染的场景数据,例如SetActive为false的物体,所在层不被相机照射的物体,会被忽略。然后将网格和纹理加载到显存中,设置网格的渲染状态(即怎样渲染该网格,用哪个shader)。在网格和材质准备好后,调用drawcall。

drawcall,即cpu调用gpu去绘制的过程,前提是同一个网格,同一个材质。回想下动态合批,静态合批,ugui的合批,都有一个合网格的过程

2.几何阶段(由gpu负责)

几何阶段主要分为顶点着色器处理,裁剪,屏幕映射

a.顶点着色器处理:处理顶点,必须完成的一个工作是将顶点坐标从模型空间转换到齐次裁剪空间

o.pos= UnityObjectToClipPos(v.vertex); 新的API

o.pos= mul(UNITY_MVP,v.vertex); 旧版本的写法

b.裁剪:上一步转换到齐次裁剪空间后,就可以进行裁剪操作,将不在相机视锥体内的三角面裁剪掉,与视锥体边界相交的会生成新的顶点

c.屏幕映射:将裁剪空间的三维坐标转化为屏幕空间的二维坐标

3.光栅化阶段(由gpu负责)

光栅化阶段主要分为三角形设置,三角形遍历,片元着色器处理

a.三角形设置:将上一个阶段输出的顶点连成三角面

b.三角形遍历:此阶段会遍历屏幕上的每一个像素,检查其是否被一个三角网格所覆盖,若是则会生成一个片元。片元的信息由3个顶点信息进行插值得到,即三角网格的3个顶点的顶点信息对整个覆盖区域的像素进行差值

片元比像素多了一些额外的数据,如深度值,纹理坐标等

c.片元着色器处理:处理片元,其中最重要的操作是纹理采样。片元在通过模板测试、深度测试后才能和颜色缓冲区中已存在的像素颜色进行混合,最后再写入颜色缓冲区中

即片元->模板测试->深度测试->混合->颜色缓冲区

原文地址:https://www.cnblogs.com/lyh916/p/14169968.html