zoukankan      html  css  js  c++  java
  • 《UnityShader入门精要》学习笔记之渲染流水线

    第一种分类方式:

    图形管道(如下7步):

    顶点数据 : 由3D模型传递的三角形网格

    顶点着色 : 编写CG程序对各个顶点进行着色

    生成几何图元 : 连接特定的顶点生成几何图元,例如连接三个顶点生成一个三角形图元

    光栅化 : 对几何图元包围的像素进行插值,例如颜色插值

    片段着色 : 编写CG程序对各个片段进行着色

    逐片段操作 : 对各个片段进行设置操作

    帧缓存 : 计算后的片段颜色中记录的像素序列

    2.2

    渲染流水线的三个概念阶段:
    应用阶段 → 几何阶段 → 光栅化阶段

    2.3.1

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

    2.3.2 顶点着色器:
    必须完成 : 将顶点从模型空间转换到齐次裁剪空间
    齐次裁剪空间下的点,经过硬件做透视除法后,得到在NDC(归一化的设备坐标)下的坐标
    顶点着色器常见的输出路径:经过光栅化后交给片元着色器进行处理,当然还可以接着交给曲面细分着色器,或者几何着色器

    2.3.3 裁剪:
    物体角度的定义:对于不在摄像机视野范围内的物体不予处理
    图元角度的定义:图元角度的裁剪是在NDC(Normalized Device Coordinates)下进行的,只有与NDC有交叉的图元才会被裁剪,不在NDC内的顶点会被舍弃,在图元与NDC相交的位置会生成新的顶点
    图元与摄像机视野范围的关系有三种:完全在视野内、完全在视野外、部分在视野内部分在视野外
    该步骤不可编程可配置

    2.3.4 屏幕映射:
    输入的顶点是处于NDC下
    目的:把输入的三维坐标下的顶点的x、y坐标转换到屏幕坐标下,这一过程其实就是一个缩放过程
    该过程不会对顶点的z坐标进行任何处理。屏幕坐标和顶点的z坐标(其实变化为屏幕顶点的深度)共同构成一个坐标系,叫做窗口坐标系。这些值会被一起传到光栅化阶段
    某个顶点进行屏幕映射后得到的屏幕坐标决定了这个顶点对应屏幕上的哪个像素以及距离这个像素有多远

    2.3.5 三角形设置:
    计算表示一个三角形网格所需要的数据的过程

    2.3.6 三角形遍历:
    检查每个像素是否被一个三角形覆盖,如被覆盖则会生成一个片元(fragment)。
    这样一个找到哪些像素被三角形网格覆盖的过程就叫做三角形遍历。
    这一步的输出:得到一个片元序列。注意,这里不是生成像素

    2.3.7 片元着色器:

    2.3.8 逐片元操作:
    1、决定每个片元的可见性,经过很多测试,例如,深度测试、模板测试等
    2、若一个片元通过了所有的测试,就需要把这个片元的颜色值和已经存储在颜色缓冲中的颜色进行合并,或者说是混合。
    该过程是高度可配置的
    片元 → 模板测试 → 深度测试 → 混合 → 颜色缓冲

  • 相关阅读:
    MySQL之IDE工具介绍及数据备份(数据库导入,导出)
    jmeter test Fragment
    python创建虚拟环境
    遇到的问题
    文件操作
    六、迭代器与生成器
    五、IO编程
    简单的例子
    四、函数
    三、集合与格式化
  • 原文地址:https://www.cnblogs.com/luguoshuai/p/9906172.html
Copyright © 2011-2022 走看看