• 【Unity Shader】渲染管线


    流程概述

    应用程序阶段

    应用程序阶段,使用高级编程语言(C、C++、JAVA 等)进行开发,主要和CPU、内存打交道,诸如碰撞检测、场景图建立、空间八叉树更新、视锥裁剪等经典算法都在此阶段执行。在该阶段的末端,几何体数据(顶点坐标、法向量、纹理坐标、纹理等)通过数据总线传送到图形硬件。

    几何阶段

    几何阶段,主要负责顶点坐标变换、光照、裁剪、投影以及屏幕映射,该阶段基于GPU进行运算,在该阶段的末端得到了经过变换和投影之后的顶点坐标、颜色、以及纹理坐标。
    光照计算属于几何阶段,因为光照计算涉及视点、光源和物体的世界坐标,所以通常放在世界坐标系中进行计算。

    光栅阶段

    光栅阶段,基于几何阶段的输出数据,为像素(Pixel)正确配色,以便绘制完整图像,该阶段进行的都是单个像素的操作,每个像素的信息存储在颜色缓冲器(color buffer 或者 frame buffer)中。

    ​雾化以及涉及物体透明度的计算属于光栅化阶段,因为上述两种计算都需要深度值信息(Z 值),而深度值是在几何阶段中计算,并传递到光栅阶段的。

    从几何阶段到光栅化阶段:

    1. 几何阶段:变换三维顶点坐标和光照计算

      1. 将模型空间坐标(object space coordinate)通过四阶矩阵变换矩阵(world matrix)转换为世界空间坐标( world space coordinate )。

        • 进行光照计算。
        • 将模型空间下的顶点法向量转换为世界空间下的,所用的转换矩阵为world matrix的转置矩阵的逆矩阵。
      2. 将物体顶点坐标从世界空间(world space)转换到观察空间下(eye space)。

      3. 将顶点坐标从观察空间下转换到裁剪空间下(project and clip space)。

        • 投影:用透视变换矩阵把顶点从视锥体(viewing frustum)中变换到裁剪空间的规范立方体(CVV)中。
        • 图元装配(Primitive Assembly):将顶点根据原始的连接关系还原出网格结构。
        • 裁剪:在CVV中将位于视体外的场景数据去除。
      4. 将得到的完全位于视体中的场景数据映射到屏幕坐标系上。

    2. 光栅化阶段:决定哪些像素被集合图元覆盖。

      1. 将顶点以及绘制图元对应到像素。

      2. Pixel Operation

        • 消除遮挡面。
        • 纹理操作(Texture operation):根据像素的纹理坐标,查询对应的纹理值。
        • 混色(Blending):根据目前已经画好的颜色,与正在计算的颜色的透明度(Alpha),混合为两种颜色,作为新的颜色输出。
        • 滤波(Filtering):将正在算的颜色通过某种滤波后输出。
  • 相关阅读:
    IOC
    paxos算法
    搜索引擎相关
    java常识
    Redis相关概念
    Keepalived简单理解
    LVS简单理解
    dbproxy
    用不上索引的sql
    二叉树、B树、B+树、B*树、VAL树、红黑树
  • 原文地址:https://www.cnblogs.com/zhang-mo/p/9834094.html
Copyright © 2020-2023  润新知