Rasterizer Stage(读书笔记3 --- Real-Time rendering)
rasterizer stage的目标:计算和设置每个像素的颜色。将屏幕空间的二维顶点和每个顶点的shading信息转换为屏幕上的像素。
rasterizer stage可以分为几个阶段:triangle setup, triangle traversal, pixel shading, and merging

1. Triangle Setup 这个阶段是计算三角形surface的微分及其他数据的。此阶段生成的数据用来做扫描转换(scan conversion)和对不同的shading数据进行插值。
这个阶段是由fixed-operation hardware(固定操作硬件)完成的.
2. Triangle Traversal
寻找哪些采样点或者像素在三角形内部的过程叫triangle traversal 或者 scan conversion.
每个三角形fragment的属性都是用三角形顶点之间的插值生成的,这些属性包含depth,从geometry stage来的shading data
扫描转换:把顶点表示转换为点阵表示,即从给定的边界出发求出位于内部的各像素
3. Pixel Shading
所有的像素着色都是在这一步完成,输入数据是shading data的插值,输出数据是一个或者多个颜色值。
和前两个阶段不同的是,这一阶段是在可编程GPU核上执行的。
大量的技术被用在这一阶段,其中最重要的就是texturing。

4. Merging(混合)
每个像素的信息被存储在color buffer中,color buffer是一个颜色数组。
Merging stage负责将shading stage产生的fragment color混合到buffer中现有的color里面。
Merging stage也负责解决可见性问题,一般GPU是通过Z-buffer algorithm来解决的,详情见下面一节。
Merging stage不完全是可编程的,但是可以高度配置,可以enable各种效果
5. Z-buffer(depth buffer) algorithm
Z-buffer和color buffer一样大小和形状,每个像素存储着从相机到当前primitive的z轴距离。
当一个图元被选入到某个像素时,需要计算这个图元在这个像素的z值并和同一个像素上的z-buffer内容比较,如果新的z值比z-buffer中的小,那么说明图元离相机更近,所以要用图元的z值和颜色去更新这个像素的z值和颜色;如果新的z值比z-buffer中的大,说明图元距离相机更远,那么color buffer和z-buffer就不需要更新。
6. 其他buffer
alpha通道与color buffer有关系,它存储每个像素的透明度。 在depth test之前可以先做alpha test,先用某些特定的test来比较fragment的alpha值和参考值,如果fragment没有通过测试,就不对它做进一步处理。alpha test是用来确保完全透明的fagment不会影响z-buffer
stencil buffer是用来记录rendered primitive的位置的离屏buffer,它通常包含8bit. Stencil buffer是一个可以生成特殊效果的强大工具。
7. double buffering
为了避免人眼看到正在被光栅化的图元,一般使用double buffering。在这个方法中,渲染发生在back buffer,当back buffer被渲染完成时,back buffer中的内容被置换到front buffer,也就是显示屏幕内容的buffer,这个交换发生在vertical retrace,即vblank(扫描点扫描完一帧后要从图像的右下角返回到图像的左上角,开始新的一帧扫描,即一帧最后一行到下一帧的第一行之间的时间)
Rasterizer Stage(读书笔记3 --- Real-Time rendering)的更多相关文章
- Spark调度管理(读书笔记)
Spark调度管理(读书笔记) 转载请注明出处:http://www.cnblogs.com/BYRans/ Spark调度管理 本文主要介绍在单个任务内Spark的调度管理,Spark调度相关概念如 ...
- 《Linux内核设计与实现》读书笔记(十七)- 设备与模块
本章主要讨论与linux的设备驱动和设备管理的相关的4个内核成分,设备类型,模块,内核对象,sysfs. 主要内容: 设备类型 内核模块 内核对象 sysfs 总结 1. 设备类型 linux中主要由 ...
- Understanding Scroll Views 深入理解 scroll view 读书笔记
Understanding Scroll Views 深入理解 scroll view 读书笔记 It may be hard to believe, but a UIScrollView is ...
- 6 Specialzed layers 特殊层 第一部分 读书笔记
6 Specialzed layers 特殊层 第一部分 读书笔记 Specialization is a feature of every complex organization. 专注是 ...
- 读书笔记汇总 - SQL必知必会(第4版)
本系列记录并分享学习SQL的过程,主要内容为SQL的基础概念及练习过程. 书目信息 中文名:<SQL必知必会(第4版)> 英文名:<Sams Teach Yourself SQL i ...
- 读书笔记--SQL必知必会18--视图
读书笔记--SQL必知必会18--视图 18.1 视图 视图是虚拟的表,只包含使用时动态检索数据的查询. 也就是说作为视图,它不包含任何列和数据,包含的是一个查询. 18.1.1 为什么使用视图 重用 ...
- 《C#本质论》读书笔记(18)多线程处理
.NET Framework 4.0 看(本质论第3版) .NET Framework 4.5 看(本质论第4版) .NET 4.0为多线程引入了两组新API:TPL(Task Parallel Li ...
- C#温故知新:《C#图解教程》读书笔记系列
一.此书到底何方神圣? 本书是广受赞誉C#图解教程的最新版本.作者在本书中创造了一种全新的可视化叙述方式,以图文并茂的形式.朴实简洁的文字,并辅之以大量表格和代码示例,全面.直观地阐述了C#语言的各种 ...
- C#刨根究底:《你必须知道的.NET》读书笔记系列
一.此书到底何方神圣? <你必须知道的.NET>来自于微软MVP—王涛(网名:AnyTao,博客园大牛之一,其博客地址为:http://anytao.cnblogs.com/)的最新技术心 ...
随机推荐
- Android-Lopper类的介绍(Handler背后的类)
转载来自:http://www.open-open.com/lib/view/open1325668588515.html Android中的Looper类,是用来封装消息循环和消息队列的一个类,用于 ...
- etcd第三集
简单说下golang的etcd接口例子.etcd api有v2(http+json)和v3(grpc)两个版本,目前大家都用v2,所以... v2: https://github.com/coreos ...
- Maven新建webapp项目index.jsp报错
最近用eclipse新建了一个maven项目,结果刚新建完成index.jsp页面就报错了,先把错误信息贴出来看看 后来就找资料,结果发现两种解决办法,希望可以帮助用得上的人! 第一种:直接在pom. ...
- U盘容量变小的处理方式
我就说一下win7下的步骤吧,xp应该差不多,管理员身份运行命令行(快捷键win+R), diskpart回车 list disk回车 看看你的u盘是哪一个,选择他(select disk X回车) ...
- Sphinx的配置和使用
项目中用到了,昨天老大又给讲了讲,我感觉这玩意真是强大.想把一些功能以很小的代价做好,第三方的工具是必须要掌握的. 1. 我的开发环境在Windows上,下载了sphinx-2.2.6-release ...
- Hibernate反向工程生成DAO
通过Hibernate反向工程生成个DAO: package dao; import java.util.List; import org.hibernate.LockMode; import org ...
- 熟悉RT-Thread的软硬件环境【RT-Thread学习笔记 1】
软件环境:Win7+MDK4.7.2 硬件环境:STM32F4Discovery 所用OS代码:RT-Thread2.0.0 beta 下载地址: https://github.com/RT-Thre ...
- win8安装SQL Server2008企业版
win8 系统,安装的时候要先安装SQL Server2008企业版 再安装Visual studio2010,不然SQL Server会有问题.
- randomAccess接口
http://www.blogjava.net/lzqdiy/archive/2007/04/22/112578.html
- sql server 跨数据库插入数据
创建服务器的连接,创建好后可以存在服务器上,可以在不同位置重复使用,和系统函数类似 exec sp_addlinkedserver 'RemoteServer', '', 'SQLOLEDB ', ' ...