TA基础知识总结 unity 渲染管线
复习渲染管线 ,加深理解。顺便发一下QWQ
一. unity渲染管线分为 cpu端渲染管线(逻辑) 和 gpu端渲染管线
cpu端: 调用Render()方法
进行剔除:视锥体剔除,遮挡剔除,层级等规则
渲染顺序:按照距离,渲染队列等规则排序
(最主要是不透明队列2500一下 ,从前到后排序)
(半透明队列,大于2500,从后到前排序)
打包摄像机数据,模型数据,参数等信息
调用drawcall 通知cpu开始渲染
GPU端:
gpu渲染管线 —— 输出到帧缓冲区 —— 输出到后处理(拿到图像在运用shader进行后处理)—— 输出到渲染目标
其中gpu渲染管线为可操作的配置管线:
顶点着色器——图元装配及光栅化——偏远处理——输出合并——最终输出到帧缓冲区
顶点着色器: 主要任务是通过MVP矩阵将模型数据从模型空间转换到裁剪空间(经过处理后,摄像机的锥体被转换为CVV的2X2X1的立方体空间)
(顶点着色器不会产生2D图像,但会对场景中的物体产生变形)
模型空间(dot)Model Matrix —— 世界空间(dot)View Matrix —— 摄像机空间 (dot) Projection Martix —— 裁剪空间
硬件自动进行 视口变换 转换为屏幕空间
硬件得到裁剪空间[(w,w,0)(-w,-w,w)] 数据后进行 裁剪操作(不同于cpu端的裁剪操作,将视锥体外的三角面的多余部分裁剪,并沿着视锥体边缘生成新的顶点)
进行 透视除法 ( 将矩阵/w进行归一化) 转换为标准化的设备坐标(NDC坐标系)
再 根据矩阵中顶点数据进行背面剔除
三角面由三个顶点组成,电脑将其储存后使用索引列表来进行查找,每一个三角面的顶点是按照顺序排序的。如三角面的顶点为顺时针分布则为背面,逆时针为背面
将背面剔除
进行视口变换,将数据转换到屏幕坐标上,再对其进行逐片元操作(对三个临近点进行图元装配)
最后将装配好的图元进行光栅化
光栅化:根据三个顶点的数据对三角面内进行插值生成图元(伪像素)
将光栅化后的图元传入片元着色器
片元着色器:
计算直接光+间接光颜色
使用基础 lambet+blinphong模型
基本思路:直接光漫反射+直接光镜面反射+间接光漫反射+间接光镜面反射+(其他效果:ssr镜面反射,sss次表面散射材质效果,各向异性高光等)
Final 输出合并阶段
输出合并阶段主要任务:处理遮挡关系,半透明混合
输出合并阶段 : 获得片元数据 (color,alpha,depth)——进行透明度测试(alpha值低于某值剔除改图元)——进行模板测试(可自行设定)——深度测试(进行深度测试,获得靠前片元使其渲染)——混合(混合两个片元颜色计算)——输出到帧缓冲区
最后输出到后处理 , 也就是用shader来处理摄像机平面内的图像。进行饱和度调整,故障效果shader,类似于ps中的图层调节操作















































































