博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【Unity Shader】渲染管线
阅读量:6290 次
发布时间:2019-06-22

本文共 1138 字,大约阅读时间需要 3 分钟。

流程概述

应用程序阶段

应用程序阶段,使用高级编程语言(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):将正在算的颜色通过某种滤波后输出。

转载于:https://www.cnblogs.com/zhang-mo/p/9834094.html

你可能感兴趣的文章
this的用法
查看>>
windows下安装redis
查看>>
CentOS7 yum 安装git
查看>>
启动日志中频繁出现以下信息
查看>>
httpd – 对Apache的DFOREGROUND感到困惑
查看>>
分布式锁的一点理解
查看>>
idea的maven项目,install下载重复下载本地库中已有的jar包,而且下载后jar包都是lastupdated问题...
查看>>
2019测试指南-web应用程序安全测试(二)指纹Web服务器
查看>>
树莓派3链接wifi
查看>>
js面向对象编程
查看>>
Ruby中类 模块 单例方法 总结
查看>>
jQuery的validate插件
查看>>
5-4 8 管道符 作业控制 shell变量 环境变量配置
查看>>
Enumberable
查看>>
开发者论坛一周精粹(第五十四期) 求购备案服务号1枚!
查看>>
validate表单验证及自定义方法
查看>>
javascript 中出现missing ) after argument list的错误
查看>>
使用Swagger2构建强大的RESTful API文档(2)(二十三)
查看>>
Docker容器启动报WARNING: IPv4 forwarding is disabled. Networking will not work
查看>>
(转)第三方支付参与者
查看>>