【Unity Shader 学习笔记】渲染管线01

本文详细介绍了渲染管线的概念,包括应用阶段、几何阶段及光栅化阶段的工作流程,以及GPU流水线的具体步骤,帮助读者理解计算机如何生成2D图像。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

什么是渲染管线?

概况来说,渲染管线就是计算机通过给定虚拟相机、3D场景物体以及光源等场景要素来产生或者渲染一副2D图像的工作流水线

渲染流水线的3个概念阶段
  • 应用阶段(CPU):准备场景数据(相机位置、模型数据、光源等)、粗粒度剔除(Culling)、设置好每个模型的渲染状态(材质、纹理、shader)、输出渲染所需的几何信息,即渲染图元。

  • 几何阶段(GPU):对每个渲染图元进行逐顶点、逐多边形的操作;将顶点坐标变换到屏幕空间(MVP),输出屏幕空间的二维顶点坐标、每个顶点深度值、着色等相关信息。

  • 光栅化阶段(GPU):决定每个渲染图元中哪些像素应该被绘制在屏幕上,对上一阶段的逐顶点数据进行插值,再进行逐像素处理,渲染出最终的图像。

其中每个阶段都会把前一个阶段的输出作为该阶段的输入

渲染管线的应用阶段(CPU)
  • 把数据加载到显存中:将渲染所需数据如顶点位置信息、法线方向、顶点颜色、纹理坐标等数据加载到显存中。
  • 设置渲染状态:定义场景中的网格应该怎样被渲染。如使用哪个顶点着色器(Vertex Shader)/片元着色器(Fragment Shader)、光源属性、材质等。如果不更改渲染状态,则所有网格都将使用同一种渲染状态。
  • 调用Draw Call:DrawCall实际上是一个命令,由CPU发出,GPU接收,命令指向的是一个待渲染的图元列表。
GPU流水线
  • 输入顶点数据
  • 几何阶段(Geometry):顶点着色器>>曲面细分着色器>>几何着色器>>裁剪>>屏幕映射
  • 光栅化阶段(Rasterization):三角形设置>>三角形遍历>>片元着色器>>逐片元操作
  • 生成屏幕图像
    请添加图片描述
    几何阶段
    1.顶点着色器(Vertex Shader):可编程,是流水线的第一个阶段,处理单位是顶点,每个顶点都会独立调用一次顶点着色器。主要完成的工作是坐标变换逐顶点光照,并输出后续阶段所需的数据。
    2.曲面细分着色器:是一个可选的着色器,用于细分图元
    3.几何着色器:也是一个可选的着色我,用于进行逐图元的着色操作或者产生更多的图元
    4.裁剪(Clipping):将只在摄像机的视野范围内的物体裁剪出来,过程可能会生成新的顶点,不可编程。
    5.屏幕映射(Screen Mapping):把每个图元的x和y坐标转换到屏幕坐标系,此过程不会对z坐标做任何处理。//ps:OpenGL的最小窗口坐标值在左下角,DirectX在左上角
    光栅化阶段
    6.三角形设置:计算光栅化一个三角网格所需的信息,也就是通过上一阶段输出的三角网格顶点,计算三角网格每条边上的像素坐标。
    7.三角形遍历(扫描变换):检查每个像素是否被一个三角网格所覆盖,如果被覆盖的话就使用三角网格3个顶点的顶点信息对整个覆盖区域的像素进行插值,对应像素会生成一个片元(fragment),最终输出一个片元序列。//ps:一个片元不只是一个像素,还包括了很多状态如该像素的屏幕坐标、深度信息、法线、纹理坐标等
    8.片元着色器(Fragment Shader):又称像素着色器(Pixel Shader),可编程,此阶段的输入是上一阶段对顶点信息插值得到的结果,处理单位是片元,计算的是该片元的输出颜色,因此它的输出是一个或多个颜色值。
    9.逐片元操作(输出合并阶段):对每一个片元进行归类合并,具体需要决定每个片元的可见性(通过模板测试深度测试等),如果一个片元通过了所有测试,则需要把这个片元的颜色值和已经存储在颜色缓冲区中的颜色进行合并混合
    10.屏幕图像:经过上述计算和测试之后,模型的图元就会显示在屏幕上,屏幕显示的就是颜色缓冲区的颜色值。为了保证屏幕显示的图像总是连续的,GPU会采用双重缓冲的策略,对于正在渲染的场景在后置缓冲中发生,而前置缓冲区是之前显示在屏幕上的图像。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

启立家的

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值