Unity渲染管线复习
渲染管线可以看成3大步骤组成:
CPU处理要渲染的数据,将数据发送给GPU
GPU根据CPU发来的数据,将画面渲染到帧缓冲区
一个画面在帧缓冲区渲染完了,进行后处理后输出

一、CPU阶段
剔除
将不在视锥范围内的物体剔除掉
渲染顺序
将根据视锥范围内的物体位置决定渲染顺序
不透明队列(RenderQueue<2500),按照从前到后的顺序排序
透明队列(RenderQueue>2500),按照从后到前的顺序排序
先透明队列后不透明队列
打包发送数据
将要渲染的数据发送给GPU
一个模型的数据,包含以下内容:
顶点坐标(Position)
法线向量(Normal)
贴图采样位置(UV)
索引列表
每一行表示一个面的数据,而一个面是由三个点构成
每个点的数据,都包含上述abc三个数据
因此每一行的数据可以看成:
点1.Position/点1.UV/点1.Normal
点2.Position/点2.UV/点2.Normal
点3.Position/点3.UV/点3.Normal
调用SetPass Call与Draw call
SetPass Call:设置好各种渲染状态、背面剔除、要使用的Shader与混合模式
Draw Call:通知GPU去渲染模型
二、GPU阶段
GPU阶段可以视为:
点:将拿到的顶点坐标,转化为屏幕屏幕坐标
线:将各个顶点连接起来,形成一个个三角面(即图元)
面:给三角面上色
最后输出合并。
点
顶点Shader:将模型空间顶点转化为裁剪空间(投影成像)
裁剪操作:将不在裁剪空间里的顶点给裁剪掉
NDC标准化设备坐标:将裁剪空间转化为NDC标准化设备坐标
背面剔除:将背面的三角面剔除掉
视口变换:将裁剪空间转换为屏幕空间坐标
线
图元装配:将顶点连接,形成三角面,称为图元
面
光栅化:通过插值,将图元内部形成一个个片元(片元可以理解成一个像素点)
片元Shader:通过纹理着色、光照着色来给片元上色
输出合并
通过alpha测试、模板测试、深度测试、颜色混合,
处理遮挡关系、处理半透明混合,将结果绘制到帧缓冲区
