UnityShader入门精要笔记(1)——渲染流水线

渲染流水线(CPU和GPU之间的通信)

一、起点:CPU

  • 把数据加载到显存当中
    加载流程: 从硬盘中加载到内存,内存里的网格和纹理数据又被加载到显存。(顶点位置、法线方向、顶点颜色等等)
  • 设置渲染状态:定义场景中的网格是怎么被渲染的(用哪个顶点着色器、哪个片元着色器、光源属性等等)
  • 调用drawcall(只是一个命令,只想一个需要被渲染的图元列表)

二、GPU流水线

1、流程

顶点数据传入 --> 几何阶段(顶点着色器 --> 曲面细分着色器 --> 几何着色器 --> 裁剪 --> 屏幕映射) --> 光栅化阶段(三角形设置 --> 三角形遍历 --> 片元着色器 --> 逐片元着色器) --> 屏幕图像

2、流程详解

  • 顶点着色器
    完全可编程,用于实现顶点的空间变换、顶点着色等功能。
    主要工作:坐标变换和逐顶点光照。输出后续阶段所需的数据
  • 曲面细分着色器
    可选着色器,用于细分图元
  • 几何着色器
    可选着色器,用于执行逐图元的着色操作,或者用于产生更多的图元
  • 裁剪
    将那些不在摄像机视野内的顶点裁剪掉,并剔除某些三角图元的面片。这个阶段为可配置的。
  • 屏幕映射
    不可配置和不可编程,负责将每个图元的坐标转换到屏幕坐标系中
  • 三角形设置
    上一阶段输出的都是三角形网格的顶点,即我们得到的是三角网格每条边的两个端点,但是如果要得到整个三角网格对像素的覆盖情况,必须计算每条边上的像素坐标。为了能够计算边界像素坐标信息,就需要得到三角形边界的表示方式。这也一个计算三角形网格表示数据的过程就叫做三角形设置。
  • 三角形遍历
  • 检测每个像素是否被一个三角网格所覆盖,如果被覆盖,就会生成一个片元。
  • 片元着色器
    完全可编程,实现逐片元的着色操作
  • 逐片元操作
    不可编程,负责修改颜色、深度缓冲、进行混合等擦操作,具有很高的可配置性

3、注意事项

  • 顶点着色器必须完成的工作:把顶点坐标从模型空间转换到其次裁剪空间,如下代码:
    o.pos = mul(UNITY_MVP,v.position)
  • 屏幕坐标系在OpenGL和DirectX之间的差异问题:
    1) OpenGL把屏幕的左下角当成最小的窗口坐标值
    2) DirectX定义了屏幕的左上角为最小的窗口坐标值
  • 三角形遍历:
    检查每个像素是否被一个三角网格所覆盖,如果是,就生成一个片元。这一步将会输出一个片元序列
  • 片元着色器:
    1)在片元着色器前面光栅化的阶段,不会影响颜色值,而是会产生一系列的数据信息,用来表述一个三角网格是怎样覆盖每个像素的。
    2)片元着色器的输入是上一个阶段对顶点信息插值得到的结果,而输出是一个或者多个颜色值。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值