Unity Shader 渲染流水线

什么是渲染流水线

渲染流水线的工作任务是由一个三维的场景出发、生成(渲染)一张二维图像。
此过程分为三个阶段:应用阶段、几何阶段、光栅化阶段

  1. 应用阶段:
    (1)输出渲染图元——点、线、三角面等
    (2)开发者准备好场景数据:摄像机的位置、视椎体、场景中包含的模型、使用了哪些
    光源。
    (3)开发者做一个粗粒度剔除工作,把不可见的物体剔除,不交给几何阶段处理
    (4)设置好每个模型的渲染状态(使用的材质(漫反射颜色、高光反射颜色)、使用的纹理、使用shader)
  2. 几何阶段:
    (1)输出屏幕的顶点信息
    (2)处理所有和我们要绘制的几何相关事物(决定需要绘制的图元是什么、怎么绘制它们、在哪里绘制)
  3. 光栅化阶段:
    (1)使用上一个阶段的数据来阐述屏幕上的像素,并渲染出最终图像。

CPU和GPU之间的通信

  1. 把数据加载到显存中
    (1)从硬盘加载到内存
    (2)网络和纹理等数据又被加载到显卡上的储存空间(显存)

  2. 设置渲染状态
    (1)定义场景中的网格是怎样被渲染的

  3. 调用Draw Call
    (1)Draw Call是一个命令,发起方是CPU,接收方是GPU,仅仅指向一个需要被渲染的图元列表,不会包含任何材质信息

GPU流水线

  1. 概述
    (1)几何阶段和光栅化阶段可以分成若干个更小的流水线阶段,这些流水线阶段由GPU来实现,每个阶段GPU提供了不同的可配置性和可编程性
    (2)顶点数据——输入
    (3)顶点着色器——实现顶点的空间变换、顶点着色等功能
    (4)曲面细分着色器——用于细分图元
    (5)几何着色器——用于执行逐图元的着色操作,或者用于生产更多图元
    (6)裁剪——将不在摄像机视野内的顶点裁剪掉,或者用于产生更多图元
    (7)屏幕映射——负责把每个图元的坐标转换到屏幕坐标系中
    (8)三角形遍历——固定函数阶段
    (9)三角形设置——固定函数阶段
    (10)片元着色器——时间逐片元的着色操作
    (11)逐片元操作——修改颜色、深度缓冲、进行混合
    (12)屏幕图像

  2. 顶点着色器
    (1)输入进来的每个顶点都会调用一次顶点着色器
    (2)工作——坐标变换、逐顶点光照
    (3)吧顶点坐标从模型空间装换到齐次裁剪空间

  3. 裁剪
    (1)处理不在相机范围内的物体
    (2)三种关系:①完全在视野内——将图元传递给下一个流水线,②部分在视野内——在视野交界处用新的顶点替代,③完全在视野外——不会传递图元

  4. 屏幕映射
    (1)把每个图元的x和y坐标转换发哦屏幕坐标系下
    (2)屏幕坐标系和z坐标一起够成了一个坐标系,叫做窗口坐标系。

  5. 三角形设置——计算光栅化一个三角网络所需的信息

  6. 三角形遍历——检查每个像素是否被一个三角网络所覆盖,是的话就生成一个片元
    在这里插入图片描述

像素点是一个个网格,红色阴影代表生成的片元,如果网格中的部分比较小则不生成片元
7. 逐片元操作
(1)也可称为输出合并阶段
(2)决定每个片元的可见性——模板测试、深度测试
模板测试:将模板缓冲区中该片元的值和参考值进行比较,限制渲染区域
深度测试:将该片元的深度值和已经存在于深度缓冲区中的深度值进行比较
(3)混合颜色——混合——开启就会对片元颜色和缓冲区颜色进行融合,关闭就会直接覆盖
(4)双重缓冲:①交换后置后置缓冲和前置缓冲的内容,②后置缓冲进行光栅化,③前置缓冲进行显示

猜你喜欢

转载自blog.csdn.net/weixin_50617270/article/details/123360514