GPU图形绘制管线

作为一个新手,挣扎于unity shader不是一天两天了,后来找到了这本书,很多东西理解更加清晰了。就用博客来记录看书后的思考吧。

这一章主要讲了GPU图形绘制的流程概况,学习这章后才理解了在unity中的UNITY_MATRIX_MVP的意义。
可以分为三个阶段:

1.应用程序阶段

在这个阶段程序将图形硬件所需要的数据都传输进图形硬件中,就如在unity shader中定义的Properties,从外界传输,可以我们手动设置的,比如说贴图,还有就是模型的顶点信息,法向量,可以在cg的例子中看到这样 uniform float3 lightColor 的参数,这也就代表从shader外获得的数据。

2.几何阶段

这个阶段的理解是最重要的,这个阶段又分为三个小阶段,
1)object space 到 world space 模型空间到世界空间
2)world space 到 eye space 世界空间到观察空间
3)eye space 到 project and clip space 视点坐标空间到投射裁剪空间

object space 模型空间:它是模型文件在建模时保存顶点值的空间,与任何物体无参照关系,必须要将它的顶点坐标转换到world space中,与其他物体建立坐标关系,才能够使用。
world space 世界空间:将模型导入计算机后,给予它一个相对于坐标原点的位置,用以给其他存在于世界坐标空间的物体建立关系。
eye space 视点坐标空间:它是存在于世界坐标空间中的一个锥体,在锥体中的物体代表在摄像机视野范围内的:
这里写图片描述
project and clip space 投射裁剪空间:将模型安排到规范立方体CVV中进行裁剪(立方体外的顶点被剪掉,如果是线段则在边界生成新的顶点)

这个过程分为三个小过程:
1. 用透视变换矩阵把顶点从视锥体中变换到裁剪空间的 CVV 中;
(这一步中用到的透视变换矩阵也就是MVP中的P,这个过程也成为投射)
2. 在 CVV 进行图元裁剪;
对图元裁剪前需要通过Primitive Assembly图元装配,也就是通过顶点信息中的索引,也就是一个顶点顺序,连成线,面,成网格。这些网格由三角形组成,而且三角形的顶点顺序决定了三角形的法向量,法向量决定了三角形的正反面,反面可以剔除(不可见),一般顶点按照逆时针排序。在以前的一篇文章中记录过unity中的三角形设置unity3D 代码实现自定义平面
处理三角形的过程称为Triangle Setup
到这里,得到了处于屏幕坐标的三角片面,下面将它们进行光栅化。

3光栅化

作用1:将上面的浮点型的顶点数据转换成为整数类型的屏幕上的像素点位置。
作用2:将已知的两点连接成线段,将已知的三点绘制成为一个三角形。
常用的划线算法:DDA 算法、 Bresenham 画线算法。
常用的区域图填充算法:扫描线多边形填充算法、边界填充算法。

在最后Pixel Operation操作,通过剔除遮挡面,进行纹理坐标查询,颜色混合,滤波,计算好的颜色值就写入到了帧缓存(用于存放显示输出的数据)中。

备注:
Z Buffer(深度缓冲区):其中存放的是视点到每个像素所对应的空间点的距离衡量,称之为 Z 值或者深度值。
Stencil Buffer(模板缓冲区):这是一个
用来“做记号”的 buffer,例如:在一个像素的 stencil buffer 中存放 1,表示该像素对应的空间点处于阴影体(shadow volume)中。
Frame Buffer(帧缓冲区):用于存放显示输出的数据,这个 buffer 中的数据一般是像素颜色值。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值