经过上一篇的3D渲染管线的学习之后,对shader的学习有很大帮助,接下来就正式学习shader,进入GPU图形编程的世界(啊,说得有些夸张,其实就是做些渲染方面的特效以及图像处理方面的效果)。废话不多说,首先先大致介绍下GPU以及shader的版本。
1.GPU及Shader版本简介
GPU简介
GPU拥有强大的并行计算以及进行四维向量浮点数运算的能力。并行计算也就是数据之间没有依懒性,相互之间都是独立的,比如在进行顶点数据计算时,各数据之间是相互独立的,就可进行并行计算,因此GPU一次能同时处理很多个顶点;而CPU往往处理的数据之间会有依赖,比如要等这些数据处理好之后,才能处理后面的数据。
早期,GPU只用于固定渲染管线的绘制流程(上一篇正是在介绍固定渲染管线),以及填充画面上各个像素的颜色;而模型顶点数据的处理(包括三角形、多边形的坐标变换)、光照计算等还是由CPU进行处理,这岂不是浪费了GPU那么强大的并行计算能力吗。随着硬件发展之快速,GPU已可支持计算顶点数据以及光照等,并且还能支持可程序化的渲染流程(Programing pipline),也就是shader,以及能对纹理等进行操作。目前PC上大家所熟悉的NVIDIA Geforce系列和ATI Radeon系列的显卡在早期的型号并没有像现在能很好的支持上面的这些功能。
Shader版本简介
这里以DirectX3D中的shader版本标准来说明。目前的主要版本有4个,最高的版本为Shader Model 4.0。Shader Model 1.0的vertex和pixel shader不支持流程控制,即if-else和循环for-loop,而且也基本上是汇编语言来编写shader。到了Model 2.0,还是不能真正支持流程控制,但对代码长度以及指令数量的支持有了大幅增加,并且可使用HLSL(High Level Shading Language)和CG(C for Graphic)等高级语言来编写shader。等到了Model 3.0,才是正式的支持流程控制。Shader Model 4.0 可以说是一个