ComputerGraphics-Concepts-Pipeline
来源:互联网 发布:数据库相关书籍 编辑:程序博客网 时间:2024/06/05 09:46
一、渲染管线结构
在<<Real-Time Rendering>>一书中将渲染管线从整体上分为了三个阶段:1、应用程序阶段 2、几何阶段 3、光栅化阶段,但是每个阶段都可以细分成更多的流程,这取决于不同管线的设计,并且不同的图形API可能对阶段的划分也有些许差异。
图片来自<<Real-Time Rendering, Third Edition>>,2.1 Architecture
1、应用程序阶段
应用程序阶段主要是在CPU端对图形数据做一些操作和处理,例如场景图更新、碰撞检测、各种CPU端执行的裁剪算法程序等。总之,在这个阶段里,应用程序可以完全掌控图形数据,需要进行什么样的操作完全取决于算法的设计。
2、几何阶段
几何阶段需要进行的操作比较多,但是都主要是集中在顶点变换和光照计算上:
图片来自<<Real-Time Rendering, Third Edition>>,2.3 The Geometry Stage
上图中的Model&View Transform过程其实就是World Transform和View Transform的级联形式,更详细的坐标空间变换过程见下图:
图片来自<<Mathematics For 3D Game Programming And Computer Graphics, 3ED>>, 1.2 Vertex Transformation
以上几种变换都是通过4x4矩阵实现的,下面是矩阵的详细推导过程:
世界变换:
视图变换:
投影变换:
视口变换:
但是第二步中的Vertex Shading,一般是计算光照所需要的各个属性,例如视线方向、光线方向、法线等,这些变量之间会进行一系列的运算,所以首先要保证的就是他们都是处于同一个坐标空间中,才能得到正确的计算结果,理论上任意一个空间都可以,然而大多数情况下都是统一变换到World Space中。
而且,在这一步中所需要计算的顶点属性,也取决于管线所实现的光照与着色模式:扁平、Gouraud、Phong
扁平着色基于多边形,所以只需要计算顶点法线等信息,在光栅化时利用多边形各顶点法线等计算出面法线等信息,然后代入光照方程计算出颜色,最后用此颜色直接填充当前多边形。
Gouraud着色基于顶点,所以当计算出法线等信息后,需要立即代入光照方程计算出顶点颜色,然后在光栅化阶段对顶点色进行插值,最后用插值颜色对多边形进行填充。
Phong着色基于像素,所以和扁平一样在顶点中也只需要计算法线等信息,但是不同的是在光栅化阶段中会对法线等顶点属性进行插值,得到多边形内每个像素对应的属性(像素及其属性称之为片元-Fragment),最后在进行扫描线转换的时候获取像素的属性值,代入光照方程计算出颜色并填充该像素。
可见,Vertex Shading的实现方法有很多种,但是都取决于光照与着色模式的应用,详细的光照与着色模式介绍参见:
3、光栅化阶段
这个阶段主要任务是图元的光栅化和顶点属性的插值:
图片来自<<Real-Time Rendering, Third Edition>>,2.4 The Rasterizer Stage
参考:
https://fgiesen.wordpress.com/2011/07/09/a-trip-through-the-graphics-pipeline-2011-index/
0 0
- ComputerGraphics-Concepts-Pipeline
- Aggregation > Aggregation Concepts > Aggregation Pipeline
- Portal concepts guides———— pipeline
- ComputerGraphics-SoftRenderer-设计
- Concepts
- Pipeline
- PIpeline
- pipeline
- Pipeline
- some concepts
- 6.2 Concepts
- MXML Concepts
- Flex Concepts
- Some Concepts
- Partitioning Concepts
- Strom Concepts
- Resources&&Concepts
- Basic Concepts
- K Sum问题求解
- 保留 double 型数据小数点位数
- 2016-12-28 外观模式 + 适配器模式
- 初识mySQL(16)
- Mysql几种索引类型的区别及适用情况
- ComputerGraphics-Concepts-Pipeline
- 一拆多 验证打标
- 用js获取当前的时间包括年、月、日、时、分、秒
- Qt之QCustomPlot绘制随机散布点
- C++中的随机函数
- PHP 7 的五大新特性
- 常用web抓包工具--待完善
- 初涉Linq
- layer.close()或者layer.closeAll()失效的情况下强制关闭layer弹窗的方法