• GPU渲染管线与shader



    1 几何阶段(顶点shader处理这部分)

    模型坐标空间-世界坐标空间-观察坐标空间-屏幕坐标空间

    其中从观察空间 到 屏幕空间需要经过3步(CVV单位立方体,规范立方体)

    a用透视变换矩阵把顶点从视锥体中变换到裁剪空间(齐次空间,用齐次坐标表示);
    b在 裁剪空间进行图元裁剪;(这里就是视域剔除View Frustum Culling),然后齐次空间除w把点转换到CVV中
    c屏幕映射:将经过前述过程得到的坐标映射到屏幕坐标系上


    顶点着色程序从GPU 前端模块(寄存器)中提取图元信息(顶点位置、法
    向量、纹理坐标等),并完成顶点坐标空间转换、法向量空间转换、光照计算等
    操作,最后将计算好的数据传送到指定寄存器中;然后片断着色程序从中获取需
    要的数据,通常为“纹理坐标、光照信息等”,并根据这些信息以及从应用程序传
    递的纹理信息(如果有的话)进行每个片断的颜色计算,最后将处理后的数据送
    光栅操作模块。



    ------------------------------------------------------------------------------------------------------------------------

    2图元装配

    就是处理顶点连接关系(这里会进行背面剔除Back-Face Culling,以减少顶点)

    ------------------------------------------------------------------------------------------------------------------------

    3光栅化阶段


    决定哪些像素被集合图形覆盖的过程

    光栅化前,图形都是连续的,需要通过光栅化把这些连续的图形转换为屏幕上对应的像素点


    光栅化后会进行片段操作(片段shader处理这部分)

    a 遮挡剔除,消除遮挡面

    b 纹理操作Texture operation

    c 混合 blending,透明处理

    d 滤镜或滤波 filtering ,一种颜色经过某种滤波或滤镜处理后再输出

    这里特殊说明下,unity shader 的surf 和自定义光照部分都是在这里处理的,surf可以处理纹理,而光照在几何阶段猜测只是记录光照数据,这里计算光照对颜色的影响



    光栅化过程用到的4个缓冲

    1 深度缓冲区 z buffer                保存顶点深度

    2 模板缓冲区 stencil buffer      保存顶点是否处于阴影体内的标识,有的说模板缓冲室深度缓冲的一部分

    3 帧缓冲区 frame buffer           存储深度缓冲和颜色缓冲的混合

    4 颜色缓冲区 color buffer         


    另外最后会进行个视口裁减


    片断着色程序对每个片断进行独立的颜色计算,最后输出颜色值的就是该片
    段最终显示的颜色。可以这样说,顶点着色程序主要进行几何方面的运算,而片
    段着色程序主要针对最终的颜色值进行计算。
    片段着色程序还有一个突出的特点是:拥有检索纹理的能力。对于GPU 而言,
    纹理等价于数组,这意味着,如果要做通用计算,例如数组排序、字符串检索等,
    就必须使用到片段着色程序


    片断和像素有什么不一样?所谓片断就是所有的三维顶点
    在光栅化之后的数据集合,这些数据还没有经过深度值比较,而屏幕显示的像素
    都是经过深度比较的。

    ------------------------------------------------------------------------------------------------------------------------

    每个顶点数据都会执行一次顶点程序;每个片段都会执行一次片段程序。



    unity shaderlab中AlphaTest的位置是在fragment函数之后可以阻止最终渲染到帧缓存,

    StencilTest是在fragment之前可以阻止fragment函数执行

    下图Culling DepthTest是深度测试(不包括SencilTest的说明)




  • 相关阅读:
    Latex 双栏模式下表格太长怎么办?
    HTTP状态码大全
    You can't specify target table 'Person' for update in FROM clause
    mysql实战笔记
    「2020年中总结」这半年我又做了哪些副业?
    Mysql导入数据报错SQL Error(1153)
    PS制作电子签名
    Windows Server 2012 R2安装mssql
    Windows Server 2012 R2安装.net3.5
    Linux常用命令
  • 原文地址:https://www.cnblogs.com/nafio/p/9137469.html
Copyright © 2020-2023  润新知