1.渲染管线概念
将数据分阶段的变成屏幕图像的过程
数据就是我们在场景中放置的模型,光源,摄像机等内容的数据。
渲染管线分为三个阶段。 应用阶段-几何阶段-光栅化阶段
应用阶段
CPU主导的阶段,主要是提供了渲染数据 1把不可见的物体数据剔除
2准备模型相关数据(顶点,法线,贴图等)
3数据加载到显存
4设置渲染状态(设置网格需要使用哪个着色器,材质)
5调用drawcall(cpu通知gpu使用相关数据和渲染状态进行渲染)
几何阶段
主要工作:对顶点进行处理,进行坐标转换,裁减画面外的图元。 主要是将模型顶点从本地坐标转换屏幕坐标
1顶点着色器
处理cpu传递的顶点相关数据。主要工作:坐标变换,顶点属性处理(顶点颜色,透明度) 顶点插值-计算顶点属性的插值值
2曲面细分着色器,几何着色器
3裁减: 裁减阶段会把不在视野内的图元进行裁减,一般不需要进行处理,渲染管线会自动处理
4屏幕映射: 将输入的三维坐标下的图元坐标转换屏幕坐标系
图元:几何数据的基本单元。可以是点,线,三角形 。在几何阶段,定点数据会被组合为图元。 这些图元在后续的光栅化阶段会转换成像素,呈现在屏幕上。
光栅化阶段
片元:在光栅化阶段生成的像素或者像素片段 ,代表了屏幕上的一个像素,并且具有位置信息和相关属性:比如颜色,深度值等。 主要完成:确定片元最终是否渲染屏幕上,确定最终的渲染颜色效果。
1三角形设置
在几何阶段得到三角形的顶点信息,通过顶点信息计算整个三角形网格的表示数据
2三角形遍历
根据上面的三角形网格数据,检查每个像素是否被一个三角形网格覆盖,如果覆盖就会生成一个片元(包括深度,法线等信息)最后根据三角形网格信息得到片元序列
3片元着色器
主要工作对于上面三角形遍历得到的片元序列中的每个片元进行着色计算和属性处理
1光照计算-计算片元的光照
2纹理映射-根据片元在纹理中的位置,对纹理颜色映射到片元
3材质属性处理
4阴影计算-根据光源信息计算片元是否处于阴影,影响其颜色
4逐片元操作
1决定每个片元的可见性
2如果通过测试,需要把片元颜色值和已经存储在颜色缓冲区的颜色进行合并。等
为什么drawcall会影响性能?
因为在每次调用drawcall之前,cpu都需要向Gpu发送很多数据。 如果drawcall过多,cpu就会把很多时间花在提交drawcall上,造成过载,卡顿。
Shader开发是什么?
主要针对渲染管线中几何阶段-顶点着色器;光栅化-片元着色器阶段 本质就是通过对渲染管线中的数据进行自定义处理决定最后的渲染效果。通过shader代码处理渲染数据