《GPU编程与CG语言之阳春白雪下里巴人》 读书笔记1

Chapter2 GPU图形绘制管线

图形管线绘制三个主要阶段

应用程序阶段
  • 高级语言实现
  • 主要和CPU,内存打交道
  • 例如:碰撞检测,场景图建立,空间八叉树更新,视锥裁剪等经典算法
  • 得到几何体数据(顶点坐标,法向量,纹理坐标,纹理等),并通过数据总线传递给图形硬件(时间瓶颈
几何阶段
  • 顶点变换,光照,裁剪,投影以及屏幕映射
  • 得到经过变换和投影之后的顶点坐标、颜色、纹理坐标
光栅阶段
  • 为像素(pixel)正确配色
  • 每个像素的信息存于颜色缓冲器(color buffer/frame buffer)
注意

涉及深度信息(Z值)的运算都是在几何阶段进行的

2.1 几何阶段

根据顶点坐标变换的先后顺序,主要有如下几个坐标空间:

  1. Object Space 物体坐标系/模型坐标空间
  2. World Space 世界坐标空间
  3. Eye Space 观察坐标空间
  4. Clip and Project Space 屏幕坐标空间

GPU 处理流程

2.1.1 从Object Space 到 World Space

Ojbect Space,即物体坐标系/模型坐标系。光照计算通常发生在世界坐标系,而模型文件中的顶点法向量属于物体坐标系,必须将法向量转换到世界坐标系才可以使用。

注意:顶点坐标和法向量的转换是不同的,顶点坐标从物体坐标系转换到世界坐标系使用的是 world matrix,而法向量转换到世界坐标系中的转换矩阵是world matrix的转置矩阵因为法向量变换的问题是由于非等比例缩放引起的,如果原来的World矩阵三个方向缩放系数相等,那么用原来的World矩阵变换法向量是没有问题的。

2.1.2 从World Space 到 Eye Space

概念
  • 视锥体:以视点或摄像机为原点,由视线方向、视角和远近平面,共同组成的一个梯形三维空间
  • 近平面:梯形体较小的矩形面
  • 远平面:梯形体较大的矩形面,投影平面
  • 视锥裁剪(Frustum Culling):在视锥体内的顶点数据是可见的,而超出部分,会被视点去除。
    视锥体

2.1.3 从Eye Space 到 Project and Clip Space

空间转换的裁剪过程
  1. 用透视变换吧顶点从视锥体中变换到裁剪空间的CVV中
  2. 在CVV进行图元裁剪
  3. 屏幕映射:将经过前述过程得到的坐标映射到屏幕坐标系上
概念
  • 规范立方体(Canonical View Volume):裁剪被安排在一个单位立方体中进行,该立方体的对角顶点分别为(-1,-1,-1)和(1,1,1)。CVV的近平面的X,Y坐标对应屏幕像素坐标(左下角是0、0),Z坐标则代表画面像素深度。
图元位置及其对应处理方式

只有当图元完全或部分存在于视锥体内部时,才需要将其光栅化
1. 当图元完全位于视锥体内时,直接进入下一阶段。
2. 当图元完全位于视锥体外时,将被剔除
3. 当图元部分位于视锥体内时,对于部分位于视锥体内的图元进行裁剪

2.2 Primitive Assembly && Triangle Setup

概念
  • Primitive Assembly(图元装配):将顶点根据原始的连接关系(primitive)还原出网格结构。
  • 网格:网格由顶点和索引组成
  • 背面去除:一般顶点按照逆时针排列,有右手定则来确定三角面片的法向量,用于判断该面为正面还是反面,如果是反面,则要进行去除,较少绘制的顶点数目。
  • Triangle Setup:处理三角形的过程。
补充

剪裁算法有
1. 视域剔除
2. 背面剔除
3. 遮挡剔除
4. 视口剪裁

2.3 光栅化阶段

2.3.1 Rasterization

概念
  • 光栅化:决定哪些像素被集合图元覆盖的过程。

2.3.2 Pixel Operation

概念
  • Pixel Operation:又称“Raster Operation”,是在更新帧缓存前,执行最后一系列针对每个片段的操作,目的是计算出每个像素的颜色值。在这个阶段,被遮挡面被一个称为深度测试的过程消除。
Pixel Operation的过程
  1. 消除遮挡面
  2. 纹理操作(Texture Operation):根据像素的纹理坐标,查询对应的纹理值
  3. 混色(Blending):根据目前已经画好的颜色,与正在计算的Alpha值混合为两种颜色,作为新的颜色输出
  4. 滤波/滤镜(Filtering):将正在算的颜色经过某种Filtering后输出
  5. 将像素颜色写入帧缓存

Raster Operations

2.4 图形硬件

首先来看一下GPU的存储架构:

GPU存储架构

概念

  • Z Buffer:又称”Depth Buffer”——深度缓冲区,存放的是每个像素对应顶点空间的的距离衡量,Z值范围为[0,1],默认情况下,近裁剪面上Z值为0,远裁剪面上Z值为1。Z值的比较参考 深度缓冲区算法(depth-buffer method)。Z值并不是欧几里得距离,非线性变化。
  • 模板缓冲区Stencil Buffer:通常附加在Z Buffer中,例如,15位的Z Buffer加上1位的Stencil Buffer,用来做标记,可用来表示像素对应空间点处于阴影中。
  • 帧缓冲器Frame Buffer:用于存放显示输出的数据,一般为像素颜色值。Frame Buffer有时被认为是颜色缓冲器和深度缓冲的组合。
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值