什么是渲染流水线
由一个三维场景出发,渲染一张二维图像
计算机从一系列的顶点数据,纹理等信息出发,把这些信息最终转换成一张人眼可见的图像。由C、GPU共同完成
分为下面三个阶段:
应用阶段
应用主导,开发者在此阶段有绝对控制权
负责实现:CPU
阶段任务:输出渲染图元
具体阶段:
数据准备
渲染所需的数据都需要从硬盘加载到系统内存中,纹理、网格等数据又被加载到显卡的存储空间-显存中(显卡对显存的访问更快,且大多数显卡对内存没有访问权限)
渲染数据(顶点位置信息、法线方向、顶点颜色、纹理坐标)加载到显存中,内存中的数据就可以移除了,但一些数据CPU仍需要访问(用于碰撞检测的网格数据),所以我们不希望这部分数据被移除,因为从硬盘加载到内存的过程很耗时。
粗粒度剔除
设置渲染状态
什么叫渲染状态?---这些状态定义了场景汇总的网格是怎样被渲染的
没有更改渲染状态则所有的网格都将使用同一种渲染状态
包括不限于它使用的材质(漫反射、高光反射颜色)、纹理、shader等
此阶段最重要的输出是渲染所需要的几何信息--渲染图元(点、线、三角面等)
通知draw call
发起方CPU,接收方GPU
这个命令仅仅会指向一个需要被渲染的图元列表,不在包含任何材质信息,已完成
给定一个dc时,GPU根据渲染状态(材质、纹理、着色器)和所有输入的顶点数据来进行计算,最终输出屏幕上的像素,计算过程为后面的几何阶段和光栅化阶段