《Unity Shader入门精要》 第二章 渲染流水线 笔记

渲染流水线

渲染流水线的起点是CPU

把数据加载到显存中

  • 渲染所需数据从硬盘中加载到系统内存(RAM)中,又从系统内存中加载到显卡内存(VRAM)中。
  • 因为显卡对现存访问速度最快,并且大多数显卡对内存没有访问权限。
  • 数据加载到现存中后,系统内存中数据就可以删除,除非其中有数据会用作后续处理,例如网格数据用于碰撞检测则不进行删除。 因为从硬盘到内存的耗时较长,所以不会多次执行这个步骤。

设置渲染状态

  • 之后,开发者通过CPU设置渲染状态,从而指导GPU进行渲染。

调用Draw Call

  • 发起方是CPU,接收方是GPU。调用此方法只指向需要被渲染的图元列表。不再包涵任何材质信息,所有信息已经在前两步准备好了,GPU将信息整合计算并输出到屏幕上。

GPU流水线

  • 几何概念阶段和光栅化概念阶段在GPU中执行

几何概念阶段

  • 顶点着色器 完全可编程
  • 曲面细分着色器 可选着色器
  • 几何着色器 可选着色器 可用于图元着色或者产生更多的图元
  • 裁剪 可配置的 裁剪不再摄像头内的部分
  • 屏幕映射 不可配置和编程 负责将每个图元的坐标转换到屏幕坐标上

光栅化概念阶段

  • 三角形设置阶段和三角形遍历阶段都是固定函数阶段。
  • 片元着色器 完全可编程 实现逐片元着色
  • 逐片元操作阶段 不可编程,具有很高配置性 修改颜色、深度缓冲、混合

详细解释

几何概念阶段:
顶点着色器
  • 输入来自于CPU 处理单位为顶点 每次输入进来顶点都调用一次顶点着色器
  • 其本身不可以创建或者销毁节点,也无法获得两个顶点之间的关系,这样的相互独立性,使GPU可以并行化处理每一个顶点。
  • 主要工作:坐标变换和逐顶点光照。输出后续工作需要的数据
  • 坐标变换:将顶点坐标从模型空间转换到齐次剪切空间。
裁剪
  • 场景大小通常比摄像机可视范围大,将图元的摄像机的关系进行划分:完全在视野内、完全不在视野内、部分在视野内。
  • 完全在视野内的传递到下一阶段。
  • 完全不在视野内的不向下传递。
  • 部分在视野内的,在分割处创建新的顶点,与视野内部分组成新图元传递到下一阶段,视野外部分不传递到下一阶段。
屏幕映射
  • 将图元的x,y坐标转换为二维的屏幕坐标系中。
  • z坐标不作处理,z坐标与屏幕坐标系组成新的坐标系——窗口坐标系。
  • 这些值传递到光栅化阶段。
  • ps:OpenGL中,屏幕左下角为最小坐标值,DirectX中,屏幕左上角为最小坐标值。
光栅化概念阶段:

上一阶段输出信息:
顶点位置以及和它们相关的额外信息(例如:深度值即z坐标,法线方向,视角方向)
光栅化阶段重要目标:计算每个图元覆盖了哪些像素。

三角形设置
  • 计算光栅化一个三角网格所需的信息。
  • 计算每条边上的像素坐标,得出三角形边的表示方法。
  • 输出为了下一个阶段做准备。
三角形遍历
  • 检查每个像素是否被一个三角形网格覆盖,覆盖则生成一个片元。
  • 输出一个片元序列。
  • ps:片元不等于像素,片元是一个包含了很多状态的集合,这些状态用于计算每个像素的最终颜色。
片元着色器(Directx中:像素着色器)
  • 另一个非常重要的可编程阶段。
  • 完成很多重要的渲染操作,最重要的就是纹理采样。
  • 输出一个或者多个颜色值
  • 仅影响单个片元
逐片元操作(DirectX中:输出合并阶段)
  • 决定片元可见性
  • 如果片元通过了所有测试,需要把这个片元的颜色值和已储存在颜色缓冲区的颜色合并。
  • 高度可配置性指的是我们可以设置每一步的操作细节。
  • 片元测试:
    片元->模板测试->深度测试->混合->颜色缓冲区
  • 模板测试:
    读取该片元位置的模板值,然后将该值和读取到的参考值作比较,比较函数可以由开发者指定,如果没有通过测试,这个片元便会被舍弃,无论有没有通过测试,都可以根据结果以及之后深度测试的结果修改模板缓冲区。修改操作也由开发者指定。
  • 深度测试:
    将该片元的深度值与已经存在于深度缓冲区中的深度值作比较,比较函数也可以由开发者指定,通常为小于等于,以为我们总希望距离摄像机比较近的物体被渲染。如果这个片元没有通过测试,则被舍弃,并且没有更改深度缓冲区的权利。
  • 合并:
    在经过多次测试后,得到的值就要与上次绘制后颜色缓冲区的值合并,是覆盖之前的颜色还是其他处理就是合并操作需要处理的。
  • 深度测试在片元着色器之前
  • 光栅化时,没处理完一个片元就会对颜色缓冲区进行修改,即用户会看到不连贯的图像。所以GPU使用的双重缓冲,在后置缓冲中渲染场景,渲染结束后,与前值缓冲进行交换,避免了不连贯性。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值