渲染管线即
- 图形数据在GPU上经过运算处理,最后输出到屏幕的过程
具体流程图为:
CPU的分工:
- CPU在游戏中识别哪些物体需要渲染,需要渲染的物体即在游戏Camera的视图内,但不包括Camera Culling Mask 排除的Layer,即物体在Camera视图范围内,Layer在Culling Mask没有勾选,Camera是看不到该物体的
- CPU将识别要渲染的物体交给图形API,然后图形API交给显卡,显卡将图形的数据给GPU;
- 这些数据包括 “视点、三维物体、光源、照明模型、纹理”等元素
Draw Call(绘制调用): 每次引擎准备数据被通知GPU的过程;通俗的说,就是每帧调用显卡渲染物体的次数。
有多少个Draw Call,每帧就要渲染多少次
Draw Call 在Unity stats中可以查看,(一个物体对应一个Draw Call, 但光照在要渲染的物体上会影响Draw Call的值,光照挺复杂的,暂时还没接触太多)
下图的Batches的值 等于Draw Call的值,多少个batches每帧要渲染多少次
GPU的工作
1.顶点处理
- 接收模型顶点数据
- 坐标系转换
2.图元装配
- 组装面:连接相邻的顶点,绘制为三角形。
3. 光栅化
- 计算三角面上的像素,并为后面着色阶段提供合理的插值
4. 像素处理
- 对每个像素区域进行着色
- 写入到缓存中
5. 缓存
- 一个存储像素数据的内存块,最重要的缓存是帧缓存和深度缓存。
- 帧缓存:缓存每个像素的色彩,即渲染后的图像。帧缓存常常在显存中,显卡不断读取并输出到屏幕中
- 深度缓存 z-buffer : 存储像素的深度信息,即物体到摄像机的距离。光栅化时便计算个像素的深度值,如果新的深度值比现有值更接近,则像素颜色被写入到帧缓存,并替换深度缓存。(这里的深度指的是,物体到摄像机的距离)